Skip to content

feat(leitstand): one-line proof strip on the flow node (COMP-4-3) - #1533

Merged
mergify[bot] merged 3 commits into
mainfrom
claude/v2-comp-4-3
Oct 15, 2026
Merged

mergify[bot] merged 3 commits into
mainfrom
claude/v2-comp-4-3

Conversation

@Cuarroc

@Cuarroc Cuarroc commented Oct 15, 2026 •

Copy link
Copy Markdown
Owner

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

  • ProofStrip gets a compact prop (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 as sr-only text and in the tooltip, so nothing is colour only and nothing reads as a pass without data. Red-first is labelled RF (tooltip and name carry "Red-first"), gates show n/m instead 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.
  • Why abbreviate: measured in Chromium at 11 px, the four full labels plus marks need about 166 px, the node has 174 px inside its padding, so a one-line strip with full words does not fit.
  • FlowGraph.tsx: NODE_H 76 -> 112, GAP_Y 56 -> 40 (pitch 132 -> 152; a two-level graph 208 -> 264 px, +27 %).
  • FlowTab.tsx mounts the strip with compact; the lamp flag lampFor(card, card.testStatus === "pass") from the first attempt stays.
  • Size: 7 files, 103 insertions, 25 deletions (128 lines including tests; limit 300).
  • Not touched: AgentCard.tsx. Follow-up R1526-FU-LAMP (recorded by Root): the card still calls lampFor(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

Command Exit code
npx --no-install vitest run src/screens/leitstand src/i18n/hardcoded.test.ts (21 files, 202 tests) 0
npm run typecheck 0
npm run build 0
bash scripts/ci/red-first.sh (5 trailers, each red at the merge base, green at the head) 0
git diff --check 0
bash scripts/ci/gates.sh lane prepush (head f9c340a, 155 s, unpiped) 0

Architecture drift: gate architecture-drift green, 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.

Variant Node height Content height (1-line / 2-line / no-PR node) Slack, worst node Strip Free width in the strip Outside the node / clipped text
light 1440×900 112 85.1 / 102 / 85.1 10 px 174×24 21.2 px none / none
dark 1440×900 112 85.1 / 102 / 85.1 10 px 174×24 21.2 px none / none
light 1024×768 112 85.1 / 102 / 85.1 10 px 174×24 21.2 px none / none
dark 1024×768 112 85.1 / 102 / 85.1 10 px 174×24 21.2 px none / none

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 RF and flat cells are used.

Data case (not on the node yet, because gates and review are always null there): 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

  • The #[cfg(windows)] tests and the Windows halves of clippy do not run on Linux; the Windows lane runs in the merge queue.
  • Fonts: measured with the Chromium sans fallback of the Linux server. The desktop WebView (WebView2, WebKitGTK) may use other font metrics; the free 21.2 px in the strip (about 12 % of the text width) is the margin. No measurement in the real Tauri window.
  • Real proof data on the node: not connected (gates, review and red-first are null/unknown); the data case is a harness measurement of the component, not of the app.
  • Compact together with 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 sets stale on the node today.
  • The abbreviation RF is a design choice for the 174 px; Root can swap it for another short word in texts.ts (redFirstShort).

Reviews and disposition

Review: ausstehend (Stufe B, one reviewer outside the Anthropic family, set up by the orchestrator).

Open points

  • State: implemented, tested (jsdom + browser measurement), not yet reviewed.
  • Follow-up: R1526-FU-LAMP (card/node lamp mismatch), see above.

🤖 Generated with Claude Code

Review round 1 (Root)

  • Head reviewed: f9c340a (diff origin/main...f9c340a2). Reviewer: google/gemini-3.8-flash (family Google, author family Anthropic). Verdict: APPROVE.
ID Source Severity Finding Disposition
R1533-G1 Gemini low ProofStrip.tsx:39,68: in compact mode the inner ps__open span carries its own title, which shadows the link's tooltip with commit and run follow-up (the PR link is not shown on the node until real data is wired; fix together with R1526-FU-LAMP)
R1533-G2 Gemini low ProofStrip.test.tsx:60: compact gates tested only with 2/3, not with no gates or all passing follow-up, same package

Tier B requirement met; no high or medium finding.

Cuarroc and others added 3 commits October 15, 2026 10:57
…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>
@Cuarroc
Cuarroc marked this pull request as ready for review October 15, 2026 09:54
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 15, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-15T09:58:12.534088Z f9c340a Draft marked ready
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 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")]));

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 Badge 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 👍 / 👎.

@Cuarroc Cuarroc added the review-ok Pipeline: review disposition complete, no open high finding label Oct 15, 2026
@Cuarroc

Cuarroc commented Oct 15, 2026

Copy link
Copy Markdown
Owner Author

review-ok bound to head f9c340a2 (tier B, author family Anthropic; reviewer google/gemini-3.8-flash APPROVE at this head, R1533-G1/G2 low → follow-up; browser measurement in the report; gates linux/windows + red-first green). @Mergifyio queue

@mergify mergify Bot added the queued label Oct 15, 2026
@mergify mergify Bot mentioned this pull request Oct 15, 2026
30 of 46 tasks
@mergify
mergify Bot merged commit 66a3449 into main Oct 15, 2026
20 checks passed
@mergify

mergify Bot commented Oct 15, 2026

Copy link
Copy Markdown
Contributor

Merge Queue Status

  • ✅ Entered queue — 2026-10-15 10:07 UTC · Rule: default · triggered by merge protections
  • ✅ Checks passed · on draft merge queue: checking #1533 on main (56c22d1) #1534
  • ✅ Merged — 2026-10-15 10:18 UTC · at 66a34491b9702aea284aa8aad76ee9d7f112b3da · merge

This pull request spent 11 minutes 7 seconds in the queue, including 10 minutes 19 seconds running CI.

Required conditions to merge
  • check-success = gates (linux)
  • check-success = gates (windows)
  • check-success = red-first
  • github-review-approved [🛡 GitHub repository ruleset rule main-pr-required-checks]
  • label != do-not-merge
  • any of [🛡 GitHub repository ruleset rule main-pr-required-checks]:
    • check-success = @github-actions/gates (linux)
    • check-neutral = @github-actions/gates (linux)
    • check-skipped = @github-actions/gates (linux)
  • any of [🛡 GitHub repository ruleset rule main-pr-required-checks]:
    • check-success = @github-actions/gates (windows)
    • check-neutral = @github-actions/gates (windows)
    • check-skipped = @github-actions/gates (windows)
  • any of [🛡 GitHub repository ruleset rule main-pr-required-checks]:
    • check-success = @github-actions/red-first
    • check-neutral = @github-actions/red-first
    • check-skipped = @github-actions/red-first
  • any of [🛡 GitHub repository ruleset rule main-pr-required-checks]:
    • check-neutral = @mergify/Mergify Merge Protections
    • check-skipped = @mergify/Mergify Merge Protections
    • check-success = @mergify/Mergify Merge Protections

@mergify
mergify Bot deleted the claude/v2-comp-4-3 branch October 15, 2026 10:18
@mergify mergify Bot removed the queued label Oct 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

review-ok Pipeline: review disposition complete, no open high finding

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant