Board: correct existing-data truth and hierarchy - #957
Conversation
Presentation-only change against the existing /api/status payload. No schema, payload, or cloud projection field is added or changed. - Put the current-work summary (Work Now), the owner queue, and lane work before aggregate productivity and release history. - Group owner-queue entries by PR into one work item with grouped reasons, one primary responsible role, and one next action. - Classify rebase, CI repair, audit fixes, and re-review as builder or orchestrator work; reserve owner attention for PRs carrying explicit permission, budget, policy, product-decision, or owner-request labels. - Render unmeasured time, cost, quality, and productivity values as "not recorded" instead of coercing them to zero, and stop unknown or unavailable states from rendering green or as pass. - Separate the gate publisher from the code-mower/gate commit status so a green publisher run cannot pass a pending verdict. The publisher is an allowlist of the canonical "Code Mower gate" workflow and its "publish Code Mower gate status" job, so an unrelated check such as security-gate stays an ordinary check. - Report observation age for replayed, aged, GitHub-unavailable, and server-cache-unconfirmed snapshots, showing the older of the observation time and board.cache.age_seconds. A snapshot with no parseable observation time is reported neutrally with no live claim and no synthetic age. Show a running campaign with no unexpired provider response deadline as last reported rather than currently running. - Keep GitHub data useful when local session inputs are absent and name which local data is unavailable. Refs #947 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Codex audit (merge-authority lane)Head SHA: Codex Audit: BLOCKED Summary: The deadline logic incorrectly warns on terminal provider results and overrides failure styling. All 20 presentation-truth tests pass but do not cover terminal cards retaining expired deadlines. Findings:
|
Addresses Codex audit finding codex:044b8d66dadb5a1987a8 on 41cfb82. A provider card can retain the response_deadline_at it was dispatched with after its response arrives. cardLiveness() marked any passed deadline overdue, so a terminal `complete` card warned yellow and a terminal `blocked` card was downgraded from red to yellow. Read the deadline only while a card is still awaiting a response. Of the five valid provider states in release_campaigns, `complete` and `blocked` are its TERMINAL_EVIDENCE_STATES and `unavailable` never dispatched, so only `queued` and `running` await one. Terminal and never-dispatched cards keep their own state styling and show no overdue warning. Campaign-level liveness now requires an awaiting card with an unexpired deadline, so an unexpired deadline retained by a finished card cannot verify a running campaign. Refs #947 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Codex audit (merge-authority lane)Head SHA: Codex Audit: PASS Summary: No actionable regressions were identified. Full test verification was limited by the read-only sandbox and socket restrictions. Findings: none. |
Codex audit (merge-authority lane)Head SHA: Codex Audit: PASS Summary: No actionable regressions were identified. All 23 presentation-truth tests passed. Findings: none. |
The Board can overstate existing evidence: missing measurements look like zero, unknown states can look healthy, repeated reasons inflate owner work, old campaigns look live, and a successful gate publisher can be mistaken for the gate verdict. This presentation-only change groups work by PR, assigns routine work to builder/orchestrator lanes, reserves owner attention for explicit owner evidence, and labels missing, stale, cached, and publisher-only data accurately.
The current-work summary, Owner Queue, and Lane Work now precede aggregate history. Campaign deadlines contribute liveness only while a provider is awaiting a response, so terminal cards retain their actual result and styling. The renderer uses only the existing
/api/statuspayload; it adds no API, cloud, lifecycle, session-resolution, or Slack fields.Closes #947
Builder: Code Mower Claude (
claude-opus-5, named sessionCode Mower Claude #947)Reviewer: Code Mower Codex exact-head merge-authority audit
Validation:
python -m unittest tests.test_board.BoardPresentationTruthTests— 23 passedruff check .python -m compileall -q src scriptspython scripts/privacy_scan.pygit diff --check origin/main...HEADThis PR remains draft and unmerged while the v1.4.2 release stays ordered after Devin release #912 and Graphify release #915 under #945.