Skip to content

feat(ui): update a worker from the console (#839) - #896

Merged
V3RON merged 33 commits into
task/838from
task/839
Oct 22, 2026
Merged

V3RON merged 33 commits into
task/838from
task/839

Conversation

@V3RON

@V3RON V3RON commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

Closes #839

Status

Implement: done Review: passed, round 2 Hardware: n/a Gate: the stack gate (merge-pr.sh 896)
Next: final stack sync, then the gate

Done when

  • pnpm exec vitest run --project unit on the changed ui/src test files passes with the lines above.
  • pnpm test:console --project=chromium e2e/console/update.spec.ts passes.
  • CI's pnpm check is green, the dependency rules included.
  • console.mdx documents the notice, the Update and Update now items, the updating state, the failure banner, the Inbox item and the footer notice.

Completion conditions (#825)

Assumptions

  • Assumption: Update now answers upToDate with <name> already runs <version> (the spec lists the toast for the answer; the force action had a fixed success title).

  • Assumption: the footer notice is a UpdateNotice in shell.tsx and watchMode takes a clock, so its 10-minute timer is testable with fake time.

  • Assumption: the row's stage line shows only while State reads updating — a red finding (disconnected, failed) hides it, as it hides the amber word.

  • Assumption: Update… and Update now sit after Drain/Undrain in the menu (the picked prototype's order), so the page's primary button stays Drain.

  • Assumption: the Inbox fact When reads <duration> ago, as the disconnected item's Last seen does.

  • Assumption: isNewerVersion is imported by version-order.ts's own path (the spec's value import); the past-index rule allows that one file, because the index carries zod's eval, which breaks the console's CSP (maintainer-authorized 2026-10-22, Simlock updates itself, and a gateway updates a chosen worker #825 Decisions).

Review

Spec review: 1 blocking, 1 fixed, 0 notes. Code review: 1 blocking, 1 fixed, 1 notes. Claims review: 1 blocking, 1 fixed, 0 notes.
Rounds: 2. Tokens: 45.0M.
Runs: 11. Cost USD: 6.9344. Agent seconds: 3898.

Assessment: complete

Written by an agent.

V3RON added 18 commits October 22, 2026 17:51
@V3RON
V3RON added this pull request to stack #881 October 22, 2026 16:03
Comment thread ui/src/app/shell.test.tsx Fixed
@V3RON

V3RON commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor Author

Review ledger

Round 1: 8d62fb8
Round 2: f0d2eb8
fix-check: 45c21fc

Runs: 12. Cost USD: 6.9344. Agent seconds: 3898.
Tokens input 594, output 171602, cache read 21139088, cache write 881318.
- build implementer: claude-sonnet-5-5 921 s $1.6726
- build implementer: claude-sonnet-5-5 731 s $1.0638
- audit implementer: claude-sonnet-5-5 970 s $0.8454
- review 1 reviewer: claude-sonnet-5-5 424 s $0.41
- review 1 spec: claude-sonnet-5-5 88 s $0.4552
- review 1 claims: claude-sonnet-5-5 55 s $0.187
- review 1 code both: claude-opus-5-5 289 s $1.4322
- fix 1 implementer: claude-sonnet-5-5 118 s $0.2479
- review 2 reviewer: claude-sonnet-5-5 174 s $0.1532
- review 2 code tests: claude-opus-5-5 99 s $0.3677
- review 2 claims: claude-sonnet-5-5 29 s $0.0994
- fix-check reviewer: claude-sonnet-5-5 (no lenses; one-hunk test helper checked by diff)
Finding outcomes: {"duplicate":1,"fixed":3,"nonblocking":1}. Classes: {"architecture 14":1,"false claim in user docs":1,"spec vs rule":1,"testing 10":1,"testing 3":1}.
{
 "findings": [
  {
   "id": "R1",
   "role": "spec",
   "class": "architecture 14",
   "outcome": "fixed",
   "path": ".dependency-cruiser.mjs",
   "round": "1",
   "fix": "f0d2eb8fbf427128d3cfd0d433f2773412f50576"
  },
  {
   "id": "R2",
   "role": "claims",
   "class": "false claim in user docs",
   "outcome": "fixed",
   "path": "website/src/content/docs/docs/worker/console.mdx",
   "round": "1",
   "fix": "f0d2eb8fbf427128d3cfd0d433f2773412f50576"
  },
  {
   "id": "R3",
   "role": "code",
   "class": "testing 3",
   "outcome": "fixed",
   "path": "ui/src/state/actions.ts",
   "round": "1",
   "fix": "f0d2eb8fbf427128d3cfd0d433f2773412f50576"
  },
  {
   "id": "R4",
   "role": "code",
   "class": "testing 10",
   "outcome": "nonblocking",
   "path": "ui/src/model/actions.test.ts",
   "round": "1"
  },
  {
   "id": "R5",
   "role": "code",
   "class": "spec vs rule",
   "outcome": "duplicate",
   "canonicalId": "R1",
   "path": ".dependency-cruiser.mjs",
   "round": "1"
  }
 ]
}

Written by an agent.

@V3RON

V3RON commented Oct 22, 2026

Copy link
Copy Markdown
Contributor Author

Review notes

These do not block, and nobody has verified them. Each is one reviewer's claim.

  • code: ui/src/model/actions.test.ts:246 R4: the case "incompatible whatever the latest" tries only a null latest version. A mutation that hides Update… for an incompatible worker whose latest is equal or older stays green.

Written by an agent.

@V3RON
V3RON marked this pull request as ready for review October 22, 2026 20:03
@V3RON
V3RON merged commit 56d4784 into main Oct 22, 2026
32 checks passed
@V3RON
V3RON deleted the task/839 branch October 22, 2026 20:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Console: update a worker from its menu and see when a newer version is available

2 participants