Repository navigation
feat(leitstand): one-line proof strip on the flow node (COMP-4-3) - #1533
Conversation
…de (COMP-4-3) Red at this commit: the node shows no proof strip and a done node with a passed test still reads "ohne Beweis". Test-First: src/screens/leitstand/flow/FlowTab.test.tsx::shows an unconnected red-first badge on the node Test-First: src/screens/leitstand/flow/FlowTab.test.tsx::lifts the node lamp to done when the test passed Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… BLOCKED) WIP handover, not for merge. Behaviour is done and green in jsdom, but the flow node frame is fixed at 76 px (FlowGraph.tsx NODE_H, out of scope) and the four-badge strip needs about 158 px of content: in a browser it pushes task, lamp and quota out of the clipped node. Needs a decision on node geometry or a compact strip before this can ship. No-Test: covered by the two Test-First tests of commit 1de2180; this commit only adds the fix and corrects the lamp assertion Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Root decision 15.10. Option 1: the full four-badge strip needs ~158 px, the flow node is 76 px, so the node gets a compact variant of the COMP-4-2 strip: one 24-px pill, one cell per field, a mark per value (the words stay in the tooltip and for assistive tech), "RF" for red-first, "n/m" for gates, the commit and run only in the PR tooltip. Same mapping and honesty rule: an unconnected field is a dash with the words "noch nicht verbunden" behind it, never a pass mark; the PR shows only with a web address. NODE_H 76 -> 112 (a two-line task, lamp row, quota row and the pill need 102 px in a browser), GAP_Y 56 -> 40 so the arrows stay short. Test-First: src/screens/leitstand/proof/ProofStrip.test.tsx::draws the compact strip as one row of four cells and never a pass mark without data Test-First: src/screens/leitstand/proof/ProofStrip.test.tsx::keeps the words of every compact value for assistive tech and the tooltip Test-First: src/screens/leitstand/flow/FlowTab.test.tsx::draws the node's proof strip as the one-line variant Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f9c340a228
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| const labels = Object.fromEntries(workers.map((w) => [w.id, { task: w.task, branch: w.branch }])); | ||
| const lamps = new Map(cards.map((card) => [card.worker.id, lampFor(card, false)])); | ||
| // A passed test is the proof a done node needs; the card still passes false until the gates reach it. | ||
| const lamps = new Map(cards.map((card) => [card.worker.id, lampFor(card, card.testStatus === "pass")])); |
There was a problem hiding this comment.
Keep unbound test verdicts from turning the lamp green
When a completed card has testStatus === "pass" but evidence binding failed—for example because Git was unavailable, the head moved, the worktree became dirty, or the policy changed—this turns the node lamp into green “Fertig” even though readiness deliberately treats the legacy test_status field as display-only and reports the evidence as stale or unsupported (src-tauri/src/workers.rs:2187-2194). The new proof strip simultaneously says that red-first, gates, and review are unconnected, so the node presents a false completion claim; keep the lamp unproven until the bound readiness evidence is included in the card payload.
AGENTS.md reference: AGENTS.md:L44-L45
Useful? React with 👍 / 👎.
|
review-ok bound to head |
Merge Queue Status
This pull request spent 11 minutes 7 seconds in the queue, including 10 minutes 19 seconds running CI. Required conditions to merge
|
Jeder Knoten im Fluss-Tab zeigt jetzt die Beweisleiste (RF, Gates, Review, PR) in einer einzigen Zeile, ohne dass Aufgabe, Lampe, Quota-Balken oder PR-Merkmal abgeschnitten werden. Dafür ist der Knoten von 76 auf 112 Pixel gewachsen und der Abstand dazwischen von 56 auf 40 geschrumpft, der Tab wird bei zwei Ebenen nur etwa ein Viertel höher; heute steht dort ehrlich „noch nicht verbunden“, nur der PR erscheint, wenn es eine Adresse gibt. Du musst nichts tun: die Änderung liegt hinter der Leitstand-Funktion D1 und wartet auf die Prüfung durch ein Modell außerhalb der Anthropic-Familie.
Report
Package: COMP-4-3 (continuation of the BLOCKED first attempt) · Review tier: B
Decision: Root 15.10. Option 1 — a compact single-line strip on the node plus the smallest NODE_H/GAP_Y change. Option 2 (NODE_H about 162 with the full strip) was rejected: it more than doubles the tab height.
What changed
ProofStripgets acompactprop (default look unchanged). Compact draws one 24-px pill with one cell per field and a mark per value:–unconnected,✓/✕,…,↗for a PR link. The words ("noch nicht verbunden", "bestanden", "öffnen", the review text) stay in the DOM assr-onlytext and in the tooltip, so nothing is colour only and nothing reads as a pass without data. Red-first is labelledRF(tooltip and name carry "Red-first"), gates shown/minstead of the chip, the commit and the run go only into the PR link tooltip. Same mapping and same honesty rule as COMP-4-2; the PR still shows only with a web address.FlowGraph.tsx:NODE_H76 -> 112,GAP_Y56 -> 40 (pitch 132 -> 152; a two-level graph 208 -> 264 px, +27 %).FlowTab.tsxmounts the strip withcompact; the lamp flaglampFor(card, card.testStatus === "pass")from the first attempt stays.AgentCard.tsx. Follow-up R1526-FU-LAMP (recorded by Root): the card still callslampFor(card, false), so card and node lamps can differ for a done card with a passed test; not fixed here.Test-First: src/screens/leitstand/flow/FlowTab.test.tsx::shows an unconnected red-first badge on the node
Test-First: src/screens/leitstand/flow/FlowTab.test.tsx::lifts the node lamp to done when the test passed
Test-First: src/screens/leitstand/flow/FlowTab.test.tsx::draws the node's proof strip as the one-line variant
Test-First: src/screens/leitstand/proof/ProofStrip.test.tsx::draws the compact strip as one row of four cells and never a pass mark without data
Test-First: src/screens/leitstand/proof/ProofStrip.test.tsx::keeps the words of every compact value for assistive tech and the tooltip
Evidence
npx --no-install vitest run src/screens/leitstand src/i18n/hardcoded.test.ts(21 files, 202 tests)npm run typechecknpm run buildbash scripts/ci/red-first.sh(5 trailers, each red at the merge base, green at the head)git diff --checkbash scripts/ci/gates.sh lane prepush(head f9c340a, 155 s, unpiped)Architecture drift: gate
architecture-driftgreen, no new finding, nothing allow-listed.Browser measurement (jsdom has no layout)
Chromium via Playwright, device scale 2, harness with the three nodes of the flow (one-line task, two-line task, no PR), ipc stubbed.
contentH= top of the first child to the bottom of the last child inside the node,slack= node height minus content. Screenshots stay on the server under/tmp/comp43-harness/final/(final-<width>-<theme>.png); I looked at each of the four.Nothing is clipped: in all four variants task, lamp, branch, quota sentence and bar, and the whole strip lie inside the node box, and no element in the node is narrower than its text. Earlier tries in the same harness: NODE_H 104 left 2 px for the two-line node (pill nearly on the border), so 112; a first compact version without a short label squeezed the dashes to zero width (the unconnected mark vanished), which is why
RFand flat cells are used.Data case (not on the node yet, because gates and review are always
nullthere): with red-first pass, gates 2/3, review "Freigegeben" and a PR with commit and run, and with a fail/stale variant, the strip in a 174-px box still fits with 6.3 px free (/tmp/comp43-harness/final/stress-<theme>.png).NICHT ABGEDECKT
#[cfg(windows)]tests and the Windows halves of clippy do not run on Linux; the Windows lane runs in the merge queue.null/unknown); the data case is a harness measurement of the component, not of the app.stale: dashed pill and dimmed values only; the per-badge word "veraltet" is not drawn (the group name still says "Beweis, veraltet" for assistive tech). Nothing setsstaleon the node today.RFis a design choice for the 174 px; Root can swap it for another short word intexts.ts(redFirstShort).Reviews and disposition
Review: ausstehend (Stufe B, one reviewer outside the Anthropic family, set up by the orchestrator).
Open points
🤖 Generated with Claude Code
Review round 1 (Root)
origin/main...f9c340a2). Reviewer: google/gemini-3.8-flash (family Google, author family Anthropic). Verdict: APPROVE.ProofStrip.tsx:39,68: in compact mode the innerps__openspan carries its owntitle, which shadows the link's tooltip with commit and runProofStrip.test.tsx:60: compact gates tested only with 2/3, not with no gates or all passingTier B requirement met; no high or medium finding.