Skip to content
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
561ed01
Show the merge job's step list and let a person cancel the merge alon…
mchwang Oct 21, 2026
6f00799
Address independent review round 1 of the merge step list
mchwang Oct 21, 2026
8753af0
Address independent review round 2 of the merge step list
mchwang Oct 21, 2026
2dd2266
Address independent review round 3 of the merge step list
mchwang Oct 21, 2026
a741b97
Address independent review round 4 of the merge step list
mchwang Oct 21, 2026
d15f269
Address independent review round 5 of the merge step list
mchwang Oct 21, 2026
546f6fc
Address independent review round 6 of the merge step list
mchwang Oct 21, 2026
1b4ded6
Address Copilot review of the merge step list
mchwang Oct 21, 2026
db6e7eb
Tidy the cancel-answer doc bullet and say what clears the step list (…
mchwang Oct 21, 2026
84e6b14
Say that a restart settles a cancelled merge as cancelled (#194 revie…
mchwang Oct 21, 2026
9e49746
Address independent review round 10 of the merge step list
mchwang Oct 21, 2026
40d1563
Keep a cancel refusal in the banner until the job's record changes (#…
mchwang Oct 21, 2026
ac6dd8f
Show a held cancel refusal again on each poll, and list the step-list…
mchwang Oct 21, 2026
17db340
Merge remote-tracking branch 'origin/main' into feat/merge-step-list
mchwang Oct 21, 2026
891e6c3
Mark build step 4 done: #174, #176 and the step list are closed (#194…
mchwang Oct 21, 2026
25e67d2
List D16's unbuilt failure banners and Queue row as missing; qualify …
mchwang Oct 21, 2026
8b9c9ad
Address independent review round 15 of the merge step list
mchwang Oct 21, 2026
03957d6
Cite #199 on the build step 4 checklist line, word the checks-write c…
mchwang Oct 21, 2026
3d975e7
Add the Stopped and Unknown marks to DESIGN.md, record the step list'…
mchwang Oct 21, 2026
dc6e6df
Test the older-job poll guard, the poll speed on a list-step change a…
mchwang Oct 21, 2026
9883bec
Move focus off Merge PR and its blockers button when a reload hides t…
mchwang Oct 21, 2026
7e22563
Merge remote-tracking branch 'origin/main' into feat/merge-step-list
mchwang Oct 21, 2026
5910440
Decide Merge status's visibility once, so a running job's poll keeps …
mchwang Oct 21, 2026
188b68d
Move focus off a hidden merge control only after the render sets its …
mchwang Oct 21, 2026
ae68419
Check Cancel's focus against the control focused before the update, a…
mchwang Oct 21, 2026
69ea536
Merge renderMergeSteps' doc comments, and say Cancel is marked unavai…
mchwang Oct 21, 2026
abeeda8
Test the display-only onAsking guard and a queued job's Merge step, a…
mchwang Oct 21, 2026
1d9f910
Keep Cancel unavailable until a poll stops reporting the cancelled jo…
mchwang Oct 21, 2026
acddd76
Read the in-flight Cancel state once, test that a replayed click does…
mchwang Oct 21, 2026
38f6625
Test the older-record poll guard, an inspection answering after shutd…
mchwang Oct 21, 2026
8da81cf
Test on the real preparation path that Fetch is still running when a …
mchwang Oct 21, 2026
cf0cb23
Test that Merge stays waiting when the attempt is not saved, and Reba…
mchwang Oct 21, 2026
e7c405b
Test a restart while a task cancel is stopping, a cancel refused afte…
mchwang Oct 21, 2026
b745931
Test each merge step state's mark, word and DESIGN.md color (#194 rev…
mchwang Oct 21, 2026
7c3f5b7
Test that a pending cancel stays with its own merge job (#194 review …
mchwang Oct 21, 2026
c942590
Keep a cancel's wait when a poll answers for an older merge job (#194…
mchwang Oct 21, 2026
3763af7
Bind a cancel's wait to the job shown when its answer arrives (#194 C…
mchwang Oct 22, 2026
1c34a40
Hold the ended record a cancel's answer carried (#194 review round 35)
mchwang Oct 22, 2026
abf2412
Test a Refresh answered after a cancel; name Cancel merge in the runn…
mchwang Oct 22, 2026
2c21f14
Wait for each cancel test's answer to be shown, not a fixed time (#19…
mchwang Oct 22, 2026
aa3325f
Wait for Cancel's render, not a response or a fixed time, in the canc…
mchwang Oct 22, 2026
08c3c8c
Wait for a render or the next poll in every D16 no-change check (#194…
mchwang Oct 22, 2026
ccd1091
Add the no-change race check rule to AGENTS.md (#194 review rounds 37…
mchwang Oct 22, 2026
1ce7c8d
Prove the step timer ran; widen the no-poll window past the poll dela…
mchwang Oct 22, 2026
5ce1a86
Check an unavailable Cancel sends nothing over the poll-delay window …
mchwang Oct 22, 2026
cdd94d4
Poll for the recorded cancel instead of reading it at once (#194 revi…
mchwang Oct 22, 2026
ffb7c16
Keep the latest ended record when a cancel answers late (#194 Copilot…
mchwang Oct 22, 2026
ff7efd5
Test that a later ended record replaces the held one (#194 review rou…
mchwang Oct 22, 2026
ff6ab69
Present and keep a newer ended job a late cancel answer carries (#194…
mchwang Oct 22, 2026
bda752d
Poll until a newer ended job is shown; drop an older job's queue atte…
mchwang Oct 22, 2026
e38fe9b
Test the cancel-answer path alone, polling's stop, and a later job's …
mchwang Oct 22, 2026
f535d3a
Drop an older job's queue attempt when a full reload keeps a newer jo…
mchwang Oct 22, 2026
147cd58
Keep observations made while a merge click is on its way over its ans…
mchwang Oct 22, 2026
02dc1f1
Keep an ended job's view against a poll read earlier; keep a followed…
mchwang Oct 23, 2026
83e0763
Follow an ended job's own attempt by action ID; drop only earlier or …
mchwang Oct 23, 2026
2ecc1d9
Follow its own attempt only for a job that ended queued or submitted …
mchwang Oct 23, 2026
494ea48
Leave a refused click's queued or submitted end to the poll; test the…
mchwang Oct 23, 2026
8bdca94
Test that a refused click never presents an older ended record (#194 …
mchwang Oct 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions docs/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ Writing standard: plain language, ISO 24495-1:2023
- **In use for a non-demo review with a `github` block:** planning. `/api/plan/suggestions` and `/api/plan/drafts` ask Claude, through lane D, for suggestion cards or a whole next plan revision (#117, #124). Nothing becomes a revision until you apply it.
- **In use with an opt-in `runner` block in `review.json`:** the whole loop after planning. `start` and `resume` on `/api/runner` run a task's plan item by item with a Claude agent (#91). They require current plan-item approvals, bind both the task state and review version, recheck approvals before each later item, and refuse when a completed prefix no longer ends at the task's current head (#107). After an out-of-scope pause, an approved amended plan can reconcile the completed prefix and resume only the unfinished suffix (#88, PR #134). When a run ends, codeboost publishes the task's pull request, a draft if the task needs a person (#103). `prepare-merge` refreshes the published PR's exact base/head, rebases through the durable F3/F4 path, recomputes attribution and approvals, pushes a rewritten head whose review is still clear over exactly the PR head it rewrote, and runs allowlisted `cmd:` checks in a credential-free read-only container bound to the resulting head (#22). The **Merge PR** button (the design's Approve & merge) merges that pull request (#121). Cancelling a task closes its pull requests (#111). Apart from **Merge PR**, these are API actions; the screen has no buttons for them yet.
- **In use for pre-merge automation (#22, closed):** the trusted local rebase engine records one-to-one commit mappings, verifies the resulting checkout byte for byte, owns its subprocesses durably, and recovers interrupted work (#22, PR #136). Its production conflict path gives a sandboxed agent only the bounded conflict files and imports only audited results for both foreign and plan-owned commits (PRs #138, #140 and #144). `prepare-merge` now invokes that path after current pull-request base/head reads, refreshes attribution and approvals, pushes the rewritten head behind a durable push marker (F6a, PR #153), and runs exact-head `cmd:` checks. With a runner, **Merge PR** runs one merge job that prepares, waits up to 30 minutes for GitHub's required checks, and hands the exact pair to the guarded merge, whose already-fixed check now covers every base commit after the task's original base (F6b, PR #161, `docs/implementation/merge-handoff.md`). `test` and `real-docker` run every offline T9 suite on every pull request, and the live Claude probes run nightly (F6c, PR #177, `docs/implementation/ci.md`).
- **Not built:** screens for the runner actions, the merge job's full step list and Cancel button, review rounds, and the Queue and Learning screens.
- **Not built:** screens for the runner actions, review rounds, and the Queue and Learning screens.

## Terms used

Expand Down Expand Up @@ -419,7 +419,7 @@ These are the decisions that shape the structure. The full list, with the reason

## Known limits

- With a runner, **Merge PR** runs one merge job in the background: preparation, a wait of up to 30 minutes for GitHub's required checks, then the guarded merge. A failing or slow check, or GitHub's refusal, leaves the task approved, merge blocked; the browser shows only the job's current step, not the design's full step list, and has no Cancel button for the job yet (cancel the task instead).
- With a runner, **Merge PR** runs one merge job in the background: preparation, a wait of up to 30 minutes for GitHub's required checks, then the guarded merge. A failing or slow check, or GitHub's refusal, leaves the task approved, merge blocked; the browser shows the design's step list with each step's state and elapsed time, and a **Cancel merge** button that stops the job without cancelling the task ([merge handoff](implementation/merge-handoff.md#step-list-and-cancel)).
- Linking is line-based. It cannot see an unrelated edit inside a declared file; only the review agent and you can catch that.
- The container's guarantees are those of Docker. The agent can always reach its own vendor account.
- `cmd:` acceptance checks run during `prepare-merge`, and their passing evidence is bound to the exact reviewed head. A plan item without current passing evidence still blocks merging.
Expand Down
8 changes: 4 additions & 4 deletions docs/designs/codeboost-plan-indexed-review.md
Original file line number Diff line number Diff line change
Expand Up @@ -567,7 +567,7 @@ The numbers below identify delivery milestones, not a requirement to implement t
1. **Plan format and linking engine.** A code library, tested with sample git histories. *Done.*
2. **Read-only review screen.** It works on any branch whose commits are in the commit ledger, with a plan loaded into the database. It shows rows, segments, the four checks, approvals, and the per-item conversation. It does not merge (engineering review, O8). *Done; the screen has since gained the merge gate from build step 4.*
3. **Optional validation.** A future real-PR comparison may test the assumptions in "How we will know it works," but it is non-blocking under the superseding decision above.
4. **Merge gate and merging** (product workflow step 9): the merge rules, the pre-merge sequence, and merging through `gh`. Increment 1 (PR #23), merge-queue support (#38, #46, closing #24) and the pre-merge automation (lane F, F3–F6, #22) have merged. *Mostly done:* #174 and #176 are open, and the merge job's full step list and Cancel button are not built. See the scope and completion criteria below.
4. **Merge gate and merging** (product workflow step 9): the merge rules, the pre-merge sequence, and merging through `gh`. Increment 1 (PR #23), merge-queue support (#38, #46, closing #24) and the pre-merge automation (lane F, F3–F6, #22) have merged. *Mostly done:* #174 and #176 are open. The merge job's step list and Cancel button are built. See the scope and completion criteria below.
5. **Running agents.** Per-task clones, containers, agent adapters, permissions, one invocation per plan item, review rounds, the "already fixed" check, and opening PRs (step 6). Isolation boundary merged (lane D, PRs #31, #40, #44, #47, #50), and the runner merged (lane F; see the lane table in `docs/architecture.md`). Not built: review rounds and screen buttons for the runner actions.
6. **Planning screen.** Writing plans with an agent, and approving plan changes (steps 2 and 3). *Done for T18:* planning backend (lane E, E1–E4) and the Plans screen (lane G, G1–G4, #145; PRs #148, #150, #151, #152). Not built: paste import, in-screen editing, the amendment-proposal view, check warnings, answering questions and a whole-plan approval step (#155). The suggestion cards do not yet conform to the v1 contract (#159).
7. **Queue, schedule, and recovery** (steps 4 and 5).
Expand All @@ -587,9 +587,9 @@ Increment 1 alone did not rebase or run acceptance commands: a moved base or a m
- [x] Deliver and validate increment 1 against its final head, including unit/integration and browser regressions, typecheck, and the required review loop.
- [x] Add the automated pre-merge rebase path and preserve ledger mappings and attribution. Resolve foreign-commit conflicts under the approved agent policy (T3, T11); return conflicts requiring human action to review. *Done in F3–F5 (PRs #136, #138, #140, #144, #149).*
- [x] Integrate runner-controlled, containerized execution of approved `cmd:` argv and bind results to the resulting head (T6; depends on the agent isolation and phase enforcement work in build step 5, including T1, T2, and T9). *Done in F5 (PR #149).*
- [ ] Validate the complete pre-merge sequence, including the already-fixed check, approval freshness, refreshed required checks, guarded merge, and races involving either base or head changes (T6, T7, T12). *Built in F6a–F6c (PRs #153, #161, #177), and T7 is verified.* T6 and T12 are verified (PR #183). Open: #174, #176, and the merge job's full step list and Cancel button.
- [ ] Validate the complete pre-merge sequence, including the already-fixed check, approval freshness, refreshed required checks, guarded merge, and races involving either base or head changes (T6, T7, T12). *Built in F6a–F6c (PRs #153, #161, #177), and T7 is verified.* T6 and T12 are verified (PR #183). The merge job's step list and Cancel button are built (D16). Open: #174 and #176.

**Sequencing decision.** The guarded gate can land before the agent runner. Build step 5 supplied the execution prerequisites, and the pre-merge automation shipped only after they were integrated (F3–F6, #22). Build step 4 stays open until the open items above are done: #174, #176, and the merge job's full step list and Cancel button. The safe refusal in increment 1 was an intentional interim behavior, not evidence that the automation had shipped. Optional human validation in #19 remains non-blocking.
**Sequencing decision.** The guarded gate can land before the agent runner. Build step 5 supplied the execution prerequisites, and the pre-merge automation shipped only after they were integrated (F3–F6, #22). Build step 4 stays open until the open items above are done: #174 and #176. The safe refusal in increment 1 was an intentional interim behavior, not evidence that the automation had shipped. Optional human validation in #19 remains non-blocking.

## Open questions

Expand Down Expand Up @@ -2173,7 +2173,7 @@ Built from this review's decisions. Tick each one as you ship it.

**Status (checked against `main` on 2026-09-26; Plans entries updated after G4, PR #152).** Only DT1 is complete. Most DTs are partly built. Do not tick one until its Verify line passes.
- Built: two-tab composer and "n pending changes" tags (part of DT4); the notice below 1280px (part of DT13); the `?` shortcut help (part of DT12); a blocker list from the guarded merge gate (part of DT7).
- Missing: "Send N change requests" and the reject flow (DT4, needs build step 5's reject loop); the merge step list (D16, DT7); menu links for Queue, Lessons and Learning, which are plain text until their screens exist (DT8, build steps 7 to 9; Issues became a link in #55 and Plans in G1, #148); the approved Plans mockup's expandable row editing (not built, #155) and bottom-drawer plan assistant (the built screen puts the assistant in a side panel); Lessons inbox and Learning screen (DT14, DT15, build step 9).
- Missing: "Send N change requests" and the reject flow (DT4, needs build step 5's reject loop); the merge blocker list with links (DT7; the step list, D16, is built); menu links for Queue, Lessons and Learning, which are plain text until their screens exist (DT8, build steps 7 to 9; Issues became a link in #55 and Plans in G1, #148); the approved Plans mockup's expandable row editing (not built, #155) and bottom-drawer plan assistant (the built screen puts the assistant in a side panel); Lessons inbox and Learning screen (DT14, DT15, build step 9).
- Not yet audited against their Verify lines: DT2, DT3, DT5, DT6, DT9, DT10, DT11.
- File paths in the DTs (`web/review`, `web/shell` and others) are proposed names. Today all UI code is in `web/public/`.

Expand Down
Loading
Loading