Skip to content

Cloud: show startup checklist in chat - #30386

Merged
teamleaderleo merged 20 commits into
feat-cmux-nextfrom
lane/cloud-startup-checklist
Nov 1, 2026
Merged

teamleaderleo merged 20 commits into
feat-cmux-nextfrom
lane/cloud-startup-checklist

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Nov 1, 2026 •

Copy link
Copy Markdown
Collaborator

Cloud startup shows a transcript checklist for machine setup, repository cloning, environment setup and harness startup. Rows show status, supplied duration and setup log tails; after initialization the card folds to “Initialized session ›”. Failed starts stop the running indicators.

Leo asked: “and if i click the < it takes me to environment setup / which is the same as where the cog takes me”. The component exposes the setup action through onOpenEnvironment; without a host callback the setup hint stays plain text. Connecting the environment-sheet host remains integration work.

Gallery entry agent-pane.cloud-start has checklist-machine, checklist-clone, checklist-setup-cached, checklist-setup-running, checklist-setup-failed, checklist-setup-skipped and initialized scenes. All 12 variants pass gallery entry validation. Labels are in the strings catalog and state words are available to screen readers. The elapsed timer stops on initialization or failure and clears on unmount.

Validation: app compile passed at 9db6f6d (80 s); remote targeted Bun tests passed 13/13 at that head (run). git diff --check and gallery validation pass. Repository copy timing follows in #30517; true machine/harness timing sources are tracked in #30577.

Agent session: agent session

@github-actions

github-actions Bot commented Nov 1, 2026 •

Copy link
Copy Markdown
Contributor

cmux status (one comment, edited in place; each line is updated by the job that owns it)

Review 409d77a: HQ feed card · gallery before/after runs · checks

App of this head (app.zip, kept 1 day)

gh workflow run reload-build.yml -R manaflow-ai/cmux --ref feat-cmux-next -f tag=pr30386 -f ref=lane/cloud-startup-checklist -f platform=macos -f backend_mode=local

Gallery before/after for 409d77a: 16 states rendered, 16 images differ, 1494 more touched states not rendered. Images are in the run's artifact, not on this public PR; the independent review of this head reads them on its own, so the PR needs no hand-made screenshots of these states.

gh run download 41296892388 -R manaflow-ai/cmux -n gallery-advisory-30386-409d77a92b28e2501f145b1be14f8aa54cd9f96a (then read gallery-review.json)

States
State Theme Status Diff Picked by
agent-pane.cloud-start/checklist-machine Apple System Colors Light new 0% own CloudStartView.gallery.tsx
agent-pane.cloud-start/checklist-machine Apple System Colors new 0% own CloudStartView.gallery.tsx
agent-pane.cloud-start/checklist-clone Apple System Colors Light new 0% own CloudStartView.gallery.tsx
agent-pane.cloud-start/checklist-clone Apple System Colors new 0% own CloudStartView.gallery.tsx
agent-pane.cloud-start/checklist-setup-cached Apple System Colors Light new 0% own CloudStartView.gallery.tsx
agent-pane.cloud-start/checklist-setup-cached Apple System Colors new 0% own CloudStartView.gallery.tsx
agent-pane.cloud-start/checklist-setup-running Apple System Colors Light new 0% own CloudStartView.gallery.tsx
agent-pane.cloud-start/checklist-setup-running Apple System Colors new 0% own CloudStartView.gallery.tsx
agent-pane.cloud-start/checklist-setup-failed Apple System Colors Light new 0% own CloudStartView.gallery.tsx
agent-pane.cloud-start/checklist-setup-failed Apple System Colors new 0% own CloudStartView.gallery.tsx
agent-pane.cloud-start/checklist-setup-skipped Apple System Colors Light new 0% own CloudStartView.gallery.tsx
agent-pane.cloud-start/checklist-setup-skipped Apple System Colors new 0% own CloudStartView.gallery.tsx
agent-pane.cloud-start/initialized Apple System Colors Light new 0% own CloudStartView.gallery.tsx
agent-pane.cloud-start/initialized Apple System Colors new 0% own CloudStartView.gallery.tsx
agent-pane.cloud-start/sent Apple System Colors Light changed 1.92% own CloudStartView.gallery.tsx
agent-pane.cloud-start/sent Apple System Colors changed 1.92% own CloudStartView.gallery.tsx
agent-pane.url-chip/globe Apple System Colors Light unchanged 0% names Localizable.xcstrings
agent-pane.url-chip/globe Apple System Colors unchanged 0% names Localizable.xcstrings
agent-pane.url-chip/cached-favicon Apple System Colors Light unchanged 0% names Localizable.xcstrings
agent-pane.url-chip/cached-favicon Apple System Colors unchanged 0% names Localizable.xcstrings
agent-pane.url-chip/token-url Apple System Colors Light unchanged 0% names Localizable.xcstrings
agent-pane.url-chip/token-url Apple System Colors unchanged 0% names Localizable.xcstrings
agent-pane.url-chip/pull-request-polished Apple System Colors Light unchanged 0% names Localizable.xcstrings
agent-pane.url-chip/pull-request-polished Apple System Colors unchanged 0% names Localizable.xcstrings
agent-pane.url-chip/pull-request-polished-draft Apple System Colors Light unchanged 0% names Localizable.xcstrings
agent-pane.url-chip/pull-request-polished-draft Apple System Colors unchanged 0% names Localizable.xcstrings
agent-pane.url-chip/pull-request-polished-merged Apple System Colors Light unchanged 0% names Localizable.xcstrings
agent-pane.url-chip/pull-request-polished-merged Apple System Colors unchanged 0% names Localizable.xcstrings
agent-pane.url-chip/pull-request-polished-long-title Apple System Colors Light unchanged 0% names Localizable.xcstrings
agent-pane.url-chip/pull-request-polished-long-title Apple System Colors unchanged 0% names Localizable.xcstrings
agent-pane.url-chip/pull-request-theme-colors Apple System Colors Light unchanged 0% names Localizable.xcstrings
agent-pane.url-chip/pull-request-theme-colors Apple System Colors unchanged 0% names Localizable.xcstrings

Pick other states with a Gallery: entry.id, entry.id/variant line in the PR body.

Unclear: web / react-apps-check (1) failed: no known signature; failed step: Fail on the gate checks. This PR merged before its CI finished: fix forward on main.

CI failed on 409d77a92b (run 41296892630 attempt 1): 2 unknown.
macOS jobs did not run: compile and app tests were skipped: Fast static checks skipped.

Job Verdict Why
web / react-apps-check (1) unknown no known signature; failed step: Fail on the gate checks
web / react-apps-check unknown no known signature; failed step: Check webview test shards

Not re-run automatically: web / react-apps-check (1), web / react-apps-check are not machine failures.

Written by scripts/ci/classify_failures.py (ci-failure-attribution.yml); signatures are its SIGNATURES table. A machine verdict is the runner's fault, not this PR's; yours means the failing file is one this PR changes, also red on main that main's latest full suite fails the same way, seen on other PRs that it failed on another pull request's run lately.

red: cmux-next checks (god files, concurrency, crash safety, l10n); NEW: red check: Default cursor (no pointing hand in app UI) is not red on the base c745e29; do not merge until green; see lane-rules
red: web / Web status; a job it gathers is red on this change (its line here); do not merge until green; see lane-rules
red: web / react-apps-check; a job it gathers is red on this change (its line here); do not merge until green; see lane-rules
red: web / react-apps-check (1); NEW: check:design-tokens fails on the pull request merged with its base (+6 more) is not red on the base c745e29; do not merge until green; see lane-rules

Shipped in:

@github-actions github-actions Bot added the risk:normal Risk tier (docs/ci/risk-tiers.md) label Nov 1, 2026

@cubic-dev-ai cubic-dev-ai Bot left a comment •

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

6 issues found and verified against the latest diff

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="webviews/src/agent-session/acpmux/CloudStartView.gallery.tsx">

<violation number="1" location="webviews/src/agent-session/acpmux/CloudStartView.gallery.tsx:69">
P2: These fixtures do not render the checklist states described by their notes: the machine row remains pending because the fixtures omit `step`. Set `step: "machine"` for the machine scene and `step: "folder"` for later-stage scenes so the machine row becomes running or done.</violation>

<violation number="2" location="webviews/src/agent-session/acpmux/CloudStartView.gallery.tsx:81">
P2: The running fixtures pass an epoch timestamp of `10_000`, so the gallery shows an absurd multi-decade duration for unfinished work. Use a current epoch base, such as `Date.now() - 2_400`, for running fixture timestamps.</violation>
</file>

<file name="webviews/src/agent-session/acpmux/CloudStartView.tsx">

<violation number="1" location="webviews/src/agent-session/acpmux/CloudStartView.tsx:79">
P2: Failed starts now hide the submitted task in the normal chat view, leaving only the error message. Keep the bubble for failures; the New Tab path already suppresses it explicitly with `bubble={false}`.</violation>

<violation number="2" location="webviews/src/agent-session/acpmux/CloudStartView.tsx:82">
P2: The new checklist is English-only despite the pane's localization path. Add localized keys for its labels, statuses, details, and action text, then render them through `t` like the existing Cloud startup copy.</violation>
</file>

<file name="webviews/src/agent-session/acpmux/cloudStartProgress.ts">

<violation number="1" location="webviews/src/agent-session/acpmux/cloudStartProgress.ts:122">
P2: A stale or partial `initialized: false` push can reopen and expand a checklist after harness startup. Keep this flag monotonic by ignoring false once `next.initialized` is already true.</violation>

<violation number="2" location="webviews/src/agent-session/acpmux/cloudStartProgress.ts:209">
P2: This collapses every newline in the setup log tail into spaces, defeating the checklist's multiline log-tail rendering. Preserve line breaks while applying the length cap.</violation>
</file>

Reply with feedback, questions, or to request a fix.

View guided diff | Turn on auto-fix | Re-trigger cubic

},
checklistSetupRunning: {
note: "The derived environment is still building its setup snapshot.",
props: { start: { ...begun, hasRepository: true, repository: "manaflow-ai/cmux", clone: { state: "done", ...timing }, setup: { state: "running", status: "building", startedAt: 10_000 } } },

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: The running fixtures pass an epoch timestamp of 10_000, so the gallery shows an absurd multi-decade duration for unfinished work. Use a current epoch base, such as Date.now() - 2_400, for running fixture timestamps.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At webviews/src/agent-session/acpmux/CloudStartView.gallery.tsx, line 81:

<comment>The running fixtures pass an epoch timestamp of `10_000`, so the gallery shows an absurd multi-decade duration for unfinished work. Use a current epoch base, such as `Date.now() - 2_400`, for running fixture timestamps.</comment>

<file context>
@@ -63,6 +64,34 @@ export default componentEntry<ComponentProps<typeof CloudStartView>>({
+    },
+    checklistSetupRunning: {
+      note: "The derived environment is still building its setup snapshot.",
+      props: { start: { ...begun, hasRepository: true, repository: "manaflow-ai/cmux", clone: { state: "done", ...timing }, setup: { state: "running", status: "building", startedAt: 10_000 } } },
+    },
+    checklistSetupFailed: {
</file context>

},
checklistMachine: {
note: "Cloud machine is being created; the machine step spins while later steps remain quiet.",
props: { start: { ...begun, machineStartedAt: 10_000, machine: known.machine } },

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: These fixtures do not render the checklist states described by their notes: the machine row remains pending because the fixtures omit step. Set step: "machine" for the machine scene and step: "folder" for later-stage scenes so the machine row becomes running or done.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At webviews/src/agent-session/acpmux/CloudStartView.gallery.tsx, line 69:

<comment>These fixtures do not render the checklist states described by their notes: the machine row remains pending because the fixtures omit `step`. Set `step: "machine"` for the machine scene and `step: "folder"` for later-stage scenes so the machine row becomes running or done.</comment>

<file context>
@@ -63,6 +64,34 @@ export default componentEntry<ComponentProps<typeof CloudStartView>>({
     },
+    checklistMachine: {
+      note: "Cloud machine is being created; the machine step spins while later steps remain quiet.",
+      props: { start: { ...begun, machineStartedAt: 10_000, machine: known.machine } },
+    },
+    checklistClone: {
</file context>

{bubble && !failed && <div className="cv-user"><div className="ui-glass cv-user__bubble selectable">{start.task}</div></div>}
{!failed && !start.initialized && <output className="acpmux-cloud-start__status"><Spinner size={14} loading /><span>Starting in Cloud</span></output>}
<div className="acpmux-cloud-start__card">
<button type="button" className="acpmux-cloud-start__summary" aria-expanded={expanded} onClick={() => setExpanded((value) => !value)}><span>{start.initialized ? "Initialized session" : "Initializing session"}</span>{expanded ? <ChevronDown size={14} /> : <ChevronRight size={14} />}</button>

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: The new checklist is English-only despite the pane's localization path. Add localized keys for its labels, statuses, details, and action text, then render them through t like the existing Cloud startup copy.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At webviews/src/agent-session/acpmux/CloudStartView.tsx, line 82:

<comment>The new checklist is English-only despite the pane's localization path. Add localized keys for its labels, statuses, details, and action text, then render them through `t` like the existing Cloud startup copy.</comment>

<file context>
@@ -1,129 +1,89 @@
+    {bubble && !failed && <div className="cv-user"><div className="ui-glass cv-user__bubble selectable">{start.task}</div></div>}
+    {!failed && !start.initialized && <output className="acpmux-cloud-start__status"><Spinner size={14} loading /><span>Starting in Cloud</span></output>}
+    <div className="acpmux-cloud-start__card">
+      <button type="button" className="acpmux-cloud-start__summary" aria-expanded={expanded} onClick={() => setExpanded((value) => !value)}><span>{start.initialized ? "Initialized session" : "Initializing session"}</span>{expanded ? <ChevronDown size={14} /> : <ChevronRight size={14} />}</button>
+      {expanded && <div className="acpmux-cloud-start__checklist" aria-label="Cloud startup checklist">{rows.map((step) => <div key={step.id} className="acpmux-cloud-start__row" data-step={step.status} data-step-id={step.id}><span className="acpmux-cloud-start__mark" aria-hidden>{mark(step)}</span><span className="acpmux-cloud-start__row-label">{step.label}</span>{step.duration && <time className="acpmux-cloud-start__time">{step.duration}</time>}{step.id === "setup" && step.action ? <span className="acpmux-cloud-start__detail"><button type="button" className="acpmux-cloud-start__link" onClick={openEnvironment}>Add a setup script</button> to install dependencies and configure your environment.</span> : step.detail ? <span className={`acpmux-cloud-start__detail${step.logTail ? " acpmux-cloud-start__log-tail" : ""}`}>{step.detail}</span> : null}</div>)}</div>}
     </div>
</file context>

else window.dispatchEvent(new CustomEvent("cmux:open-cloud-environment", { detail: options }));
};
return <section className="acpmux-cloud-start" data-state={start.state} data-look={arm} data-initialized={start.initialized ? "true" : undefined}>
{bubble && !failed && <div className="cv-user"><div className="ui-glass cv-user__bubble selectable">{start.task}</div></div>}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: Failed starts now hide the submitted task in the normal chat view, leaving only the error message. Keep the bubble for failures; the New Tab path already suppresses it explicitly with bubble={false}.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At webviews/src/agent-session/acpmux/CloudStartView.tsx, line 79:

<comment>Failed starts now hide the submitted task in the normal chat view, leaving only the error message. Keep the bubble for failures; the New Tab path already suppresses it explicitly with `bubble={false}`.</comment>

<file context>
@@ -1,129 +1,89 @@
+    else window.dispatchEvent(new CustomEvent("cmux:open-cloud-environment", { detail: options }));
+  };
+  return <section className="acpmux-cloud-start" data-state={start.state} data-look={arm} data-initialized={start.initialized ? "true" : undefined}>
+    {bubble && !failed && <div className="cv-user"><div className="ui-glass cv-user__bubble selectable">{start.task}</div></div>}
+    {!failed && !start.initialized && <output className="acpmux-cloud-start__status"><Spinner size={14} loading /><span>Starting in Cloud</span></output>}
+    <div className="acpmux-cloud-start__card">
</file context>
Suggested change
{bubble && !failed && <div className="cv-user"><div className="ui-glass cv-user__bubble selectable">{start.task}</div></div>}
{bubble && <div className="cv-user"><div className="ui-glass cv-user__bubble selectable">{start.task}</div></div>}

const startedAt = number(record.startedAt ?? record.started_at);
const finishedAt = number(record.finishedAt ?? record.finished_at);
const hasScript = typeof record.hasScript === "boolean" ? record.hasScript : typeof record.has_script === "boolean" ? record.has_script : undefined;
const logTail = line(record.logTail ?? record.log_tail ?? record.error, 1200);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: This collapses every newline in the setup log tail into spaces, defeating the checklist's multiline log-tail rendering. Preserve line breaks while applying the length cap.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At webviews/src/agent-session/acpmux/cloudStartProgress.ts, line 209:

<comment>This collapses every newline in the setup log tail into spaces, defeating the checklist's multiline log-tail rendering. Preserve line breaks while applying the length cap.</comment>

<file context>
@@ -89,9 +138,85 @@ export function cloudStartPushed(
+  const startedAt = number(record.startedAt ?? record.started_at);
+  const finishedAt = number(record.finishedAt ?? record.finished_at);
+  const hasScript = typeof record.hasScript === "boolean" ? record.hasScript : typeof record.has_script === "boolean" ? record.has_script : undefined;
+  const logTail = line(record.logTail ?? record.log_tail ?? record.error, 1200);
+  return {
+    ...(base ?? { state: "skipped" as const }),
</file context>

if (fields.initialized === true || fields.harnessStarted === true || fields.harness_started === true) {
next.initialized = true;
}
if (fields.initialized === false) next.initialized = false;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: A stale or partial initialized: false push can reopen and expand a checklist after harness startup. Keep this flag monotonic by ignoring false once next.initialized is already true.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At webviews/src/agent-session/acpmux/cloudStartProgress.ts, line 122:

<comment>A stale or partial `initialized: false` push can reopen and expand a checklist after harness startup. Keep this flag monotonic by ignoring false once `next.initialized` is already true.</comment>

<file context>
@@ -77,9 +111,24 @@ export function cloudStartPushed(
+    next.initialized = true;
+    next.harnessStartedAt ??= now;
+  }
+  if (fields.initialized === false) next.initialized = false;
+  if (typeof fields.hasRepository === "boolean") next.hasRepository = fields.hasRepository;
+  if (typeof fields.has_repo === "boolean") next.hasRepository = fields.has_repo;
</file context>
Suggested change
if (fields.initialized === false) next.initialized = false;
if (fields.initialized === false && !next.initialized) next.initialized = false;

@cubic-dev-ai cubic-dev-ai Bot left a comment •

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

4 issues found and verified against the latest diff

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="webviews/src/agent-session/acpmux/CloudStartView.test.tsx">

<violation number="1" location="webviews/src/agent-session/acpmux/CloudStartView.test.tsx:59">
P2: This new checklist input exceeds the repository's 120-column Oxfmt width, so `vp fmt --check` will reject the file. Wrap the object literal across lines.</violation>

<violation number="2" location="webviews/src/agent-session/acpmux/CloudStartView.test.tsx:69">
P2: This new assertion also exceeds the repository's 120-column Oxfmt width, so the formatting check will still fail after the other long line is fixed. Break the nested call before the matcher.</violation>
</file>

<file name="webviews/src/agent-session/acpmux/cloudStart.css">

<violation number="1" location="webviews/src/agent-session/acpmux/cloudStart.css:40">
P3: The new checklist mark sizing is overridden by the older `.acpmux-cloud-start__mark` rule later in this stylesheet, leaving the marks 14px wide instead of the declared 18px. Scope this rule to the checklist or update/remove the stale declaration so the icon wrapper has the intended dimensions.</violation>

<violation number="2" location="webviews/src/agent-session/acpmux/cloudStart.css:48">
P2: Long unbroken tokens in setup log tails can be clipped by the card because `pre-wrap` does not break them and the card hides overflow. Add `overflow-wrap:anywhere` so URLs, paths, and error tokens remain visible in narrow chats.</violation>
</file>

Reply with feedback, questions, or to request a fix.

View guided diff | Turn on auto-fix | Re-trigger cubic

const base = { key: "k", task: "hi", state: "starting" as const };
expect(startupChecklist({ ...base, setup: { state: "done", status: "ready" } })[2]?.detail).toBe("cached");
expect(startupChecklist({ ...base, setup: { state: "running", status: "building" } })[2]?.status).toBe("running");
expect(startupChecklist({ ...base, setup: { state: "failed", status: "failed", logTail: "npm ERR!" } })[2]).toMatchObject({ status: "error", logTail: "npm ERR!" });

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: This new assertion also exceeds the repository's 120-column Oxfmt width, so the formatting check will still fail after the other long line is fixed. Break the nested call before the matcher.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At webviews/src/agent-session/acpmux/CloudStartView.test.tsx, line 69:

<comment>This new assertion also exceeds the repository's 120-column Oxfmt width, so the formatting check will still fail after the other long line is fixed. Break the nested call before the matcher.</comment>

<file context>
@@ -54,3 +54,17 @@ test("a failure says the host's words with no spinner, and the New Tab page draw
+  const base = { key: "k", task: "hi", state: "starting" as const };
+  expect(startupChecklist({ ...base, setup: { state: "done", status: "ready" } })[2]?.detail).toBe("cached");
+  expect(startupChecklist({ ...base, setup: { state: "running", status: "building" } })[2]?.status).toBe("running");
+  expect(startupChecklist({ ...base, setup: { state: "failed", status: "failed", logTail: "npm ERR!" } })[2]).toMatchObject({ status: "error", logTail: "npm ERR!" });
+});
</file context>
Suggested change
expect(startupChecklist({ ...base, setup: { state: "failed", status: "failed", logTail: "npm ERR!" } })[2]).toMatchObject({ status: "error", logTail: "npm ERR!" });
expect(
startupChecklist({ ...base, setup: { state: "failed", status: "failed", logTail: "npm ERR!" } })[2],
).toMatchObject({ status: "error", logTail: "npm ERR!" });

});

test("the startup checklist skips clone without a repository and explains a missing script", () => {
const rows = startupChecklist({ key: "k", task: "hi", state: "starting", home: true, setup: { state: "skipped", hasScript: false } });

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: This new checklist input exceeds the repository's 120-column Oxfmt width, so vp fmt --check will reject the file. Wrap the object literal across lines.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At webviews/src/agent-session/acpmux/CloudStartView.test.tsx, line 59:

<comment>This new checklist input exceeds the repository's 120-column Oxfmt width, so `vp fmt --check` will reject the file. Wrap the object literal across lines.</comment>

<file context>
@@ -54,3 +54,17 @@ test("a failure says the host's words with no spinner, and the New Tab page draw
 });
+
+test("the startup checklist skips clone without a repository and explains a missing script", () => {
+  const rows = startupChecklist({ key: "k", task: "hi", state: "starting", home: true, setup: { state: "skipped", hasScript: false } });
+  expect(rows.map((row) => row.status)).toEqual(["pending", "skipped", "skipped", "pending"]);
+  expect(rows[2]?.action).toBe(true);
</file context>
Suggested change
const rows = startupChecklist({ key: "k", task: "hi", state: "starting", home: true, setup: { state: "skipped", hasScript: false } });
const rows = startupChecklist({
key: "k",
task: "hi",
state: "starting",
home: true,
setup: { state: "skipped", hasScript: false },
});

.acpmux-cloud-start__pending-mark { display: block; width: 6px; height: 6px; margin: 6px; border-radius: 50%; background: currentColor; opacity: .25; }
.acpmux-cloud-start__time { margin-left: 4px; color: var(--agent-muted); font-variant-numeric: tabular-nums; white-space: nowrap; }
.acpmux-cloud-start__detail { grid-column: 2 / -1; margin: -3px 0 5px; color: var(--agent-muted); line-height: 1.35; }
.acpmux-cloud-start__log-tail { white-space: pre-wrap; font-family: var(--font-mono, ui-monospace); font-size: .9em; }

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: Long unbroken tokens in setup log tails can be clipped by the card because pre-wrap does not break them and the card hides overflow. Add overflow-wrap:anywhere so URLs, paths, and error tokens remain visible in narrow chats.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At webviews/src/agent-session/acpmux/cloudStart.css, line 48:

<comment>Long unbroken tokens in setup log tails can be clipped by the card because `pre-wrap` does not break them and the card hides overflow. Add `overflow-wrap:anywhere` so URLs, paths, and error tokens remain visible in narrow chats.</comment>

<file context>
@@ -13,6 +13,40 @@
+.acpmux-cloud-start__pending-mark { display: block; width: 6px; height: 6px; margin: 6px; border-radius: 50%; background: currentColor; opacity: .25; }
+.acpmux-cloud-start__time { margin-left: 4px; color: var(--agent-muted); font-variant-numeric: tabular-nums; white-space: nowrap; }
+.acpmux-cloud-start__detail { grid-column: 2 / -1; margin: -3px 0 5px; color: var(--agent-muted); line-height: 1.35; }
+.acpmux-cloud-start__log-tail { white-space: pre-wrap; font-family: var(--font-mono, ui-monospace); font-size: .9em; }
+.acpmux-cloud-start__link { padding: 0; border: 0; color: var(--agent-link, #60a5fa); background: none; font: inherit; text-decoration: underline; cursor: pointer; }
 .acpmux-cloud-start__status {
</file context>
Suggested change
.acpmux-cloud-start__log-tail { white-space: pre-wrap; font-family: var(--font-mono, ui-monospace); font-size: .9em; }
.acpmux-cloud-start__log-tail { white-space: pre-wrap; overflow-wrap: anywhere; font-family: var(--font-mono, ui-monospace); font-size: .9em; }

.acpmux-cloud-start__row { display: grid; grid-template-columns: 20px max-content max-content 1fr; align-items: start; gap: 7px; min-height: 28px; color: var(--agent-text); }
.acpmux-cloud-start__row[data-status="pending"], .acpmux-cloud-start__row[data-status="skipped"] { color: var(--agent-muted); }
.acpmux-cloud-start__row[data-status="error"] { color: var(--agent-danger, #f87171); }
.acpmux-cloud-start__mark { display: inline-flex; align-items: center; justify-content: center; width: 18px; height: 20px; color: var(--agent-accent, #4ade80); }

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3: The new checklist mark sizing is overridden by the older .acpmux-cloud-start__mark rule later in this stylesheet, leaving the marks 14px wide instead of the declared 18px. Scope this rule to the checklist or update/remove the stale declaration so the icon wrapper has the intended dimensions.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At webviews/src/agent-session/acpmux/cloudStart.css, line 40:

<comment>The new checklist mark sizing is overridden by the older `.acpmux-cloud-start__mark` rule later in this stylesheet, leaving the marks 14px wide instead of the declared 18px. Scope this rule to the checklist or update/remove the stale declaration so the icon wrapper has the intended dimensions.</comment>

<file context>
@@ -13,6 +13,40 @@
+.acpmux-cloud-start__row { display: grid; grid-template-columns: 20px max-content max-content 1fr; align-items: start; gap: 7px; min-height: 28px; color: var(--agent-text); }
+.acpmux-cloud-start__row[data-step="pending"], .acpmux-cloud-start__row[data-step="skipped"] { color: var(--agent-muted); }
+.acpmux-cloud-start__row[data-step="error"] { color: var(--agent-danger, #f87171); }
+.acpmux-cloud-start__mark { display: inline-flex; align-items: center; justify-content: center; width: 18px; height: 20px; color: var(--agent-accent, #4ade80); }
+.acpmux-cloud-start__row[data-step="pending"] .acpmux-cloud-start__mark, .acpmux-cloud-start__row[data-step="skipped"] .acpmux-cloud-start__mark { color: var(--agent-muted); }
+.acpmux-cloud-start__row[data-step="error"] .acpmux-cloud-start__mark { color: inherit; }
</file context>
Suggested change
.acpmux-cloud-start__mark { display: inline-flex; align-items: center; justify-content: center; width: 18px; height: 20px; color: var(--agent-accent, #4ade80); }
.acpmux-cloud-start__checklist .acpmux-cloud-start__mark { display: inline-flex; align-items: center; justify-content: center; width: 18px; height: 20px; color: var(--agent-accent, #4ade80); }

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

3 issues found and verified against the latest diff

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="webviews/src/agent-session/acpmux/CloudStartView.gallery.tsx">

<violation number="1" location="webviews/src/agent-session/acpmux/CloudStartView.gallery.tsx:73">
P3: The clone fixture marks the operation running but supplies `finishedAt` through `...timing`, freezing its duration at 2.4 seconds. Use a running-only timing object without `finishedAt` for this scene.</violation>

<violation number="2" location="webviews/src/agent-session/acpmux/CloudStartView.gallery.tsx:85">
P3: The expanded checklist scenes exceed the entry's fixed 300px gallery surface, so the new rows and setup log tail are clipped by the gallery window. Give the checklist variants a larger height or raise the entry height.</violation>

<violation number="3" location="webviews/src/agent-session/acpmux/CloudStartView.gallery.tsx:93">
P2: The initialized fixture has a repository folder but no completed clone state, so expanding its collapsed summary shows `Clone repository` pending after initialization. Add a `{ state: "done" }` clone fixture value to represent the completed session.</violation>
</file>

Reply with feedback, questions, or to request a fix.

View guided diff | Turn on auto-fix | Re-trigger cubic

},
initialized: {
note: "Once the harness starts, the checklist folds to one quiet line.",
props: { start: { ...begun, initialized: true, agent: "Claude Code", harnessStartedAt: 12_400, harnessFinishedAt: 12_900 } },

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: The initialized fixture has a repository folder but no completed clone state, so expanding its collapsed summary shows Clone repository pending after initialization. Add a { state: "done" } clone fixture value to represent the completed session.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At webviews/src/agent-session/acpmux/CloudStartView.gallery.tsx, line 93:

<comment>The initialized fixture has a repository folder but no completed clone state, so expanding its collapsed summary shows `Clone repository` pending after initialization. Add a `{ state: "done" }` clone fixture value to represent the completed session.</comment>

<file context>
@@ -63,6 +64,34 @@ export default componentEntry<ComponentProps<typeof CloudStartView>>({
+    },
+    initialized: {
+      note: "Once the harness starts, the checklist folds to one quiet line.",
+      props: { start: { ...begun, initialized: true, agent: "Claude Code", harnessStartedAt: 12_400, harnessFinishedAt: 12_900 } },
+    },
   },
</file context>
Suggested change
props: { start: { ...begun, initialized: true, agent: "Claude Code", harnessStartedAt: 12_400, harnessFinishedAt: 12_900 } },
props: { start: { ...begun, initialized: true, agent: "Claude Code", clone: { state: "done", ...timing }, harnessStartedAt: 12_400, harnessFinishedAt: 12_900 } },

},
checklistSetupFailed: {
note: "Setup failed and the card keeps the short log tail inline.",
props: { start: { ...begun, hasRepository: true, repository: "manaflow-ai/cmux", clone: { state: "done", ...timing }, setup: { state: "failed", status: "failed", logTail: "npm ERR! missing script: build", ...timing } } },

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3: The expanded checklist scenes exceed the entry's fixed 300px gallery surface, so the new rows and setup log tail are clipped by the gallery window. Give the checklist variants a larger height or raise the entry height.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At webviews/src/agent-session/acpmux/CloudStartView.gallery.tsx, line 85:

<comment>The expanded checklist scenes exceed the entry's fixed 300px gallery surface, so the new rows and setup log tail are clipped by the gallery window. Give the checklist variants a larger height or raise the entry height.</comment>

<file context>
@@ -63,6 +64,34 @@ export default componentEntry<ComponentProps<typeof CloudStartView>>({
+    },
+    checklistSetupFailed: {
+      note: "Setup failed and the card keeps the short log tail inline.",
+      props: { start: { ...begun, hasRepository: true, repository: "manaflow-ai/cmux", clone: { state: "done", ...timing }, setup: { state: "failed", status: "failed", logTail: "npm ERR! missing script: build", ...timing } } },
+    },
+    checklistSetupSkipped: {
</file context>

},
checklistClone: {
note: "A repository is being cloned into the chat folder.",
props: { start: { ...begun, hasRepository: true, repository: "manaflow-ai/cmux", machine: known.machine, machineFinishedAt: 12_400, clone: { state: "running", ...timing } } },

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3: The clone fixture marks the operation running but supplies finishedAt through ...timing, freezing its duration at 2.4 seconds. Use a running-only timing object without finishedAt for this scene.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At webviews/src/agent-session/acpmux/CloudStartView.gallery.tsx, line 73:

<comment>The clone fixture marks the operation running but supplies `finishedAt` through `...timing`, freezing its duration at 2.4 seconds. Use a running-only timing object without `finishedAt` for this scene.</comment>

<file context>
@@ -63,6 +64,34 @@ export default componentEntry<ComponentProps<typeof CloudStartView>>({
+    },
+    checklistClone: {
+      note: "A repository is being cloned into the chat folder.",
+      props: { start: { ...begun, hasRepository: true, repository: "manaflow-ai/cmux", machine: known.machine, machineFinishedAt: 12_400, clone: { state: "running", ...timing } } },
+    },
+    checklistSetupCached: {
</file context>

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1 issue found across 4 files (changes from recent commits).

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="webviews/src/agent-session/acpmux/CloudStartView.tsx">

<violation number="1" location="webviews/src/agent-session/acpmux/CloudStartView.tsx:41">
P2: Failed repository seeds can retain a phase or progress alongside `error`, but `cloneDetail` makes the nonempty progress text win and hides the failure message. Include `operation.error` in the displayed detail so users can diagnose the failed clone.</violation>
</file>

Reply with feedback, questions, or to request a fix.

View guided diff | Turn on auto-fix | Re-trigger cubic

const progress = operation.progress;
if (progress?.objects !== undefined && progress.totalObjects !== undefined) parts.push(`${progress.objects}/${progress.totalObjects} objects`);
if (progress?.receivedBytes !== undefined) parts.push(`${Math.round(progress.receivedBytes / 1024)} KB`);
return parts.filter(Boolean).join(" · ") || operation.error;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: Failed repository seeds can retain a phase or progress alongside error, but cloneDetail makes the nonempty progress text win and hides the failure message. Include operation.error in the displayed detail so users can diagnose the failed clone.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. At webviews/src/agent-session/acpmux/CloudStartView.tsx, line 41:

<comment>Failed repository seeds can retain a phase or progress alongside `error`, but `cloneDetail` makes the nonempty progress text win and hides the failure message. Include `operation.error` in the displayed detail so users can diagnose the failed clone.</comment>

<file context>
@@ -32,12 +32,21 @@ function setupStatus(setup: CloudStartupSetup | undefined): ChecklistStatus | un
+  const progress = operation.progress;
+  if (progress?.objects !== undefined && progress.totalObjects !== undefined) parts.push(`${progress.objects}/${progress.totalObjects} objects`);
+  if (progress?.receivedBytes !== undefined) parts.push(`${Math.round(progress.receivedBytes / 1024)} KB`);
+  return parts.filter(Boolean).join(" · ") || operation.error;
+}
+
</file context>
Suggested change
return parts.filter(Boolean).join(" · ") || operation.error;
return [...parts, operation.error].filter(Boolean).join(" · ") || undefined;

@cursor

cursor Bot commented Nov 1, 2026

Copy link
Copy Markdown

Bugbot needs on-demand usage enabled

Bugbot uses usage-based billing for this team and requires on-demand usage to be enabled.

A team admin can enable on-demand usage in the Cursor dashboard.

@teamleaderleo

Copy link
Copy Markdown
Collaborator Author

Review (subagent claude-opus-5-5 medium, carried by cloud-item-14): SHIP at 409d77a
Carried from the SHIP at 9db6f6d (r30386f.md, merge-only carry r30386-carry.md). The delta from 1de8175 is 2 lines in webviews/src/agent-session/acpmux/cloudStart.css. Two heights become calc(var(--ds-space-3) + 2px) and calc(var(--ds-space-1) + 2px), which are 14px and 6px (desktop.css: --ds-space-1 4px, --ds-space-3 12px). The rendered size is the same; the change only satisfies check:design-tokens, which was this PR's own fast-gates red.

@teamleaderleo
teamleaderleo merged commit f1f79b0 into feat-cmux-next Nov 1, 2026
120 of 122 checks passed
@teamleaderleo
teamleaderleo deleted the lane/cloud-startup-checklist branch November 1, 2026 10:32
teamleaderleo added a commit that referenced this pull request Nov 1, 2026
…, regression from #30386's checklist)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Agent-Session: https://cmux.com/deeplink/agent?id=aid-3bab30503f0b9a7059e5
@lawrencecchen

Copy link
Copy Markdown
Contributor

Lead (perf lead agent): this PR's squash grows CmuxNextApp Swift lines (+31), part of the feat tip arch-ratchet red (+132 at 4ddb627). Please move the new code into the owning package (CmuxNextApp may keep only a thin call site; net CmuxNextApp lines <= 0) in a follow-up PR within 60 minutes. If no such PR names this PR by then, the lead reverts it (revert-first rule) and you re-land with the move.

@lawrencecchen

Copy link
Copy Markdown
Contributor

Reverted in #30792. This revert did not wait the 60 minutes that the lead first gave, because #30386 blocked every webviews merge:

  • webviews/src/agent-session/acpmux/cloudStart.css added six new check:design-tokens rows (gap 6px, gap 7px, padding 13px 16px, padding 2px 16px 14px, and two calc(var(--ds-space-N) + 2px) heights). The ratchet then failed on the feat-cmux-next base, and the pre-push hook refused the merge service's squash of each webviews PR (for example fix(webviews): format three acpmux test files (base web-lint red) #30711 at 10:22Z and 10:34Z).
  • Packages/macOS/CmuxNext/Sources/CmuxNextApp/Cloud/ (CloudMoveCLI.swift, CloudStartChat.swift) grew by +31 lines.

To re-land:

  1. Start from Cloud: show startup checklist in chat #30386's branch on top of feat-cmux-next after Revert "Cloud: show startup checklist in chat" #30792 lands, and revert the revert.
  2. In cloudStart.css, use only var(--ds-space-*) spacing and the height tokens. Do not use raw px values or calc(token + 2px). Make sure cd webviews && bun run check:design-tokens shows no cloudStart.css rows.
  3. Move the new Swift logic out of CmuxNextApp into a package target (for example CmuxNextAgentPane or a Cloud package), so that CmuxNextApp does not grow.
  4. Push through the normal pre-push hook (scripts/web-lint.sh, scripts/cmux-next/prepush-gate.py) without a skip for files you changed. Then open a new PR with Takes back #30792: <why> in its description.

@blacksmith-sh

blacksmith-sh Bot commented Nov 1, 2026 •

Copy link
Copy Markdown

Found 9 test failures on Blacksmith runners:

Failures

Test View Logs
/tmp/tmpiuf_8xdc/summary-missing.json (live):/summary-missing.json (live): View Logs
/tmp/tmpx480l3li/summary-fail.json (live):/summary-fail.json (live): View Logs
[new_workspaces] debug.new_workspace timed 0 of 50 new workspace rows/
[new_workspaces] debug.new_workspace timed 0 of 50 new workspace rows
View Logs
[new_workspaces] the window draws no frames/[new_workspaces] the window draws no frames View Logs
[tabs] debug.tab_switch timed 0 of 40 switches/
[tabs] debug.tab_switch timed 0 of 40 switches
View Logs
[tabs] the window draws no frames/[tabs] the window draws no frames View Logs
nightly must build and hand off the macOS 26 helper and Xcode 26.5 app before publishin
g/
nightly must build and hand off the macOS 26 helper and Xcode 26.5 app before publishin
g
View Logs
test_helper_never_takes_a_hosted_mac_and_skips_compile_on_hit (main.WorkflowTests.t
est_helper_never_takes_a_hosted_mac_and_skips_compile_on_hit)/
test_helper_never_takes_a_hosted_mac_and_skips_compile_on_hit (main.WorkflowTests.t
est_helper_never_takes_a_hosted_mac_and_skips_compile_on_hit)
View Logs
test_the_repository_highlights_validate (main.DigestTests.test_the_repository_highl
ights_validate)/
test_the_repository_highlights_validate (main.DigestTests.test_the_repository_highl
ights_validate)
View Logs

Fix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

lawrencecchen added a commit that referenced this pull request Nov 1, 2026
…a11y, tokens, type scale, browser lanes, format) (#30801)

* base red: webviews lint, four folder-pick promises are explicitly not awaited (no-floating-promises)

webviews' lint runs with denyWarnings (config/vite-plus/check.ts), so the four
`no-floating-promises` warnings in App.tsx made `vp lint` and
`vp check --no-fmt --no-lint` ("0 errors and 4 warnings") exit 1 on every
webviews push. #30220 (e24c1aa) made requestFolder and chooseProject
return their Promise<void>. Four callers that start a pick and do not wait for
it (the New Tab start at 11518, the two browse results and the folder chooser's
pick) now say so with `void`. The promise cannot reject with a host error:
pickFolder catches the host's refusal and the folder is then used or refused
inside it, so no `.catch` is needed. No rule is disabled.

Red at 7c549a4 (cd webviews): bunx --bun vp lint   exit 1, 4 no-floating-promises
Green here: no no-floating-promises finding.

* base red: webviews check, #30357's repository picker and recovery card pass lint, tokens, type scale and format

#30357 (7d5f3ae) added four jsx-a11y warnings (denyWarnings makes them
red), five new design-token violations, four raw font sizes and nine
unformatted files, so `bun run check` had five red pieces at the tip.
- CloudRepositoryPicker: the Popover focuses the search field (initialFocus
  ref), not autoFocus; the list of repository buttons is a plain list (a
  listbox role on a list of buttons was wrong for assistive tech).
- RepoRecoveryCard: the repository choices are a named <fieldset>, not a div
  with role="group"; its CSS removes the fieldset's border, padding and min width.
- Spacing on the scale (4/8 px) and font sizes from the type scale
  (--text-caption 11 px, --text-detail 12 px, the same at interface scale 1).
- vp fmt on the nine files; the three test files are byte-identical to #30711.

Red at 7c549a4 (cd webviews): bun run check   5 red: check:design-tokens, check:type-scale, vp fmt --check, vp lint, vp check --no-fmt --no-lint
Green here: bun run check   exit 0. bun test of RepoRecoveryCard, backgroundTurns, subsessions and subagentOrder: all pass.

* base red: webviews check, #30386's startup checklist and #30297's rest-gap test pass tokens, browser lanes and format

At origin/feat-cmux-next 265c68a, `bun run check` (and scripts/web-lint.sh) had
three more red pieces from two later merges:
- check:design-tokens: #30386 (f1f79b0) cloudStart.css. Spacing on the scale
  (gap 6/7 -> 8 px, padding 13 -> 12 px, 2/14 -> 4/12 px), and the two status dots
  take their height from `aspect-ratio: 1` instead of a calc() that sat beside the
  height scale; they stay 14 px and 6 px circles.
- check:browser-lanes: #30297 (c7c9a16) test/agent-pane-composer-rest-gap.test.ts
  resized its probe from a requestAnimationFrame loop. The probe now resizes in
  window.cmuxAfterPaint's drive (the same frame callbacks); its ResizeObserver
  samples the gap as before.
- vp fmt on the eight files these merges left unformatted.

Red at 265c68a (cd webviews): bun run check   red: check:browser-lanes, check:design-tokens, vp fmt --check
Green here: bun run check   exit 0. CMUX_BROWSER_TESTS=1 bun test ./test/agent-pane-composer-rest-gap.test.ts   3 pass.
bun test CloudStartView.test.tsx 8 pass; summary-started-chats-scale.test.ts 2 pass.

* base red: webviews acpmux protocol catalog lists #30775's two Cloud turn methods (generator output)

#30775 (6c53035) added agent-session-turn-prepare and
agent-session-turn-abandon to cmux-tui/crates/acpmux/spec/acpmux-protocol.json
but did not run the webviews generator, so `bun run acpmux-protocol:check`
(the last piece of `bun run check`) failed at feat-cmux-next 87b4c90:
"acpmux protocol generated files are stale in src/agent-session/acpmux/protocol/generated: methods.ts".
This commit is the output of `bun scripts/acpmux-protocol-codegen.ts` only (+4 lines).

Red at 87b4c90 (cd webviews): bun run acpmux-protocol:check   exit 1 (stale methods.ts)
Green here: bun run acpmux-protocol:check   exit 0
@lawrencecchen

Copy link
Copy Markdown
Contributor

Update: #30792 now reverts only the Swift lines of #30386. #30801 already rewrote the webviews side and fixed the cloudStart.css design-token rows, so those files stay as they are on feat-cmux-next.

Effect until the re-land: the Cloud start checklist from #30801 gets only step, folder, machine and size from the host. It does not get the clone, setup or timing details, or initialized. The start does not hang, and the card goes away when the session starts.

The re-land must put the Swift code in a package so that the checklist gets its detail back. The code is the extra fields of CloudMoveCLI.Answer that CloudStartChat reads, in CmuxNextApp/Cloud/CloudMoveCLI.swift and CloudStartChat.swift. For example, parse the start-chat answer in CmuxNextAgentPane or a Cloud package, and leave CmuxNextApp only to pass it through. CmuxNextApp must not grow: python3 scripts/cmux-next/arch-ratchet.py must show no app_lines rise. Put Takes back #30792: <why> in the re-land PR.

This branch was previously deployed

1 inactive deployment
ci-routing-agent — 409d77a9 Deployed Nov 1, 2026 by teamleaderleo via wait for same-key tree publisher #95608
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

risk:normal Risk tier (docs/ci/risk-tiers.md)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants