Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
ae6aecd
Plan Factory M3 work items, labels and gates
artyomsv Sep 12, 2026
ded7404
Apply the Factory M3 planning review
artyomsv Sep 12, 2026
9e797f7
Add repository registration and the M3 migration bridge
artyomsv Sep 13, 2026
a956532
Handle blank repository origins at the migration boundary
artyomsv Sep 13, 2026
363b13d
Use literal SQL statements for repository history links
artyomsv Sep 13, 2026
716dc75
Cut SCM dispatch over to repository role bindings
artyomsv Sep 13, 2026
41d3909
Resolve policy people and version repository fix overrides
artyomsv Sep 13, 2026
0af7062
Authorize /fix with effective repository push permissions
artyomsv Sep 13, 2026
dea12d3
Admit tracker tickets with source-scoped label authority
artyomsv Sep 13, 2026
d426501
Make route smoke tests await settled work item responses
artyomsv Sep 13, 2026
721f408
Add tracker source parity and durable scan recovery
artyomsv Sep 13, 2026
2e42ffc
Bound work phases and persist dashboard approvals
artyomsv Sep 13, 2026
d9861bc
Bind prepared tracker tasks to durable build journeys
artyomsv Sep 14, 2026
76bbb52
Hold work-run publication until delivery is authorized
artyomsv Sep 14, 2026
9ec2f9d
Restore shared styling on factory settings screens
artyomsv Sep 14, 2026
b44c388
Resolve external gates and preserve takeover publication holds
artyomsv Sep 14, 2026
20ee345
Drop legacy account workspace and record the final M3 proofs
artyomsv Sep 14, 2026
6a0e0f7
Make work setup visible and reuse shared account widgets
artyomsv Sep 14, 2026
212df81
Keep the profile editor inside the shared card inset
artyomsv Sep 14, 2026
d8c4c78
Move work source create and edit into the app's dialog
artyomsv Sep 14, 2026
1321cef
Separate reading work policy from changing it
artyomsv Sep 14, 2026
18f6bf7
Return repository registration to the shared dialog
artyomsv Sep 14, 2026
1a00735
Guard the form conventions the widgets document describes
artyomsv Sep 14, 2026
4abb8ac
Open settings create and edit beside the list, not over it
artyomsv Sep 15, 2026
8d94c0e
Name allowed people and save policies with a blank mapping row
artyomsv Sep 15, 2026
fe82a96
Give each repository a Factory tab that shows its whole setup
artyomsv Sep 15, 2026
07ef620
Move work sources into repositories and rename Work policy to Profiles
artyomsv Sep 15, 2026
53ec1a0
Test that a lookup answered after the handle changed selects nobody
artyomsv Sep 15, 2026
5602b87
Record the factory findings and the agreed improvements
artyomsv Sep 16, 2026
5c21384
Say what the factory screens are doing while they wait
artyomsv Sep 16, 2026
92bc03e
Offer what the factory can run, and name the rule that refused
artyomsv Sep 16, 2026
f7da787
Answer branch-head failures honestly and name only label appliers
artyomsv Sep 16, 2026
2482fbf
Name the rule when a recheck or a decision is stopped by a ticket
artyomsv Sep 16, 2026
ad003fd
Turn Work items into a triage list and answer decisions beside it
artyomsv Sep 16, 2026
464554a
Show a work item as its journey of eight steps
artyomsv Sep 16, 2026
c747339
Close the races and misleading states the list review found
artyomsv Sep 16, 2026
6e9c32d
Fix the detail page states the journey review found
artyomsv Sep 16, 2026
1dc2503
Describe the work item journey steps in the widget guide
artyomsv Sep 16, 2026
3492b06
Offer Approve only for the texts it binds, and keep late outcomes
artyomsv Sep 16, 2026
67b0269
Bind Approve to the decision's own artifact, not the item's texts
artyomsv Sep 16, 2026
60d4496
Refuse Approve for a decision whose preparation is gone
artyomsv Sep 16, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
635 changes: 635 additions & 0 deletions .claude/reviews/global/factory-m3-round14-mutations.json

Large diffs are not rendered by default.

83 changes: 83 additions & 0 deletions .claude/reviews/global/factory-m3-round14.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
# M3 rounds 14 and 15 — restore the shared settings presentation

The replacement repository and work-source screens now use the same table, form,
action and empty-state vocabulary as `SettingsWebhookRepos`. Slice 9 is paused;
this change contains only dashboard presentation, its guards and this evidence.
All seven accepted behavior criteria remain unchanged.

## Review disposition

- Repository registry, detail, pending mappings and Work sources use `prov-table`
inside `prov-scroll`, shared headings and action styling. Repository and source
names are text links with `mono nowrap`, retaining their selection handlers.
- Forge origins and webhook paths reuse `wh-url` and `CopyableValue`. The heading
is **Webhook path**. The existing 180px bound remains unchanged; full values
remain available for copying and in the title.
- A shared repository account cell reuses `serving-pair` and the existing badge
vocabulary, with reviewer and factory vertically aligned. Disabled, missing
and unknown account states remain visibly distinct from configured accounts.
- Pending mappings use a table and concise **Link repository** actions. Target
origins appear in the row, and registration UUIDs are absent from body copy.
- Work sources, Work items and Approvals have `wh-empty`, `wh-empty-icon`,
`wh-empty-title` and `wh-empty-text` states with guidance for a fresh install.
- Both Work-source fieldsets retain `disabled={busy}`. Their browser borders are
removed, text/select labels use `field`, checkboxes use `field-check`, and
buttons use the shared action styles. Repository forms and the embedded person
picker use the same control vocabulary.

## Verification

- Full UI: **726 tests, 92 files, zero failures or skips**.
Report: `.handoff/r14-final-ui.json`.
- Production TypeScript/Vite build: passed. The existing bundle-size advisory
remains; no dependency or stylesheet change was needed.
- All **40 route tests** passed with shuffled order, seed `5196441335`.
Report: `.handoff/r14-shuffled-routes.json`. The `.content` route assertion
and its mutation comment are unchanged.
- **30 production mutation checks**, each with exactly one isolated assertion
failure and a passing restored case. Originals were restored from byte
snapshots and their SHA-256 verified. The
[ledger](factory-m3-round14-mutations.json) records production replacements,
selected tests, snapshot hashes, final-source hashes and local report paths.
Final-source hashes also capture the later checkbox/action-row presentation
refinement, which passed the complete suite and browser checks.

The route-derived guard reads settings routes from `App.tsx`, follows their
rendered local components and checks actual table tags. It asserts that sources,
routes and tables were found before concluding anything. Removing `prov-table`
from each of registry, detail, pending mappings and Work sources killed that
guard independently. It does not treat the imported `webhookPath` helper as a
rendered legacy screen.

Other mutants remove the webhook heading/bound, account stack, each empty-state
class on each of the three screens, a form label and each fieldset's busy lock.
CSS mutations widen `wh-url` or change `serving-pair` direction/alignment. Four
badge mutations distinguish configured, disabled, missing and unknown accounts.
The busy fixtures leave create/edit requests pending and inspect every control,
so an explicit disabled submit button cannot hide an unlocked fieldset.

## Browser and operator stack

Chromium inspection passed against the local Vite helper and again against the
rebuilt dev dashboard at `http://localhost:39285`. Only the UI image/container
was rebuilt; backend services and the run worker were not started or rebuilt.
The container's Work sources and repository-registry source hashes match the
worktree. A full page reload loads the rebuilt dashboard.

Browser API requests were intercepted with TEST fixtures; non-GET requests were
refused. These are presentation measurements, not live API or database proofs.
At 1440px and 900px the four origin/path wrappers measured 180px with ellipsis,
both reviewer/factory pairs stacked vertically, and the document did not overflow
the viewport. Both source fieldsets measured a 0px/none border; their checkbox
measured 16px with its label laid out horizontally. All three empty states had
their visible icon, title and guidance. Updated screenshots were inspected.

Local artifacts:

- `.handoff/r14-repositories-1440.png` and `r14-repositories-900.png`
- `.handoff/r14-sources-populated.png`
- `.handoff/r14-empty-sources.png`, `r14-empty-items.png`, `r14-empty-approvals.png`
- `.handoff/r14-browser-measurements.json`

No database dump, live registration, tracker write or service-tier test was
needed for this presentation correction.
Loading
Loading