Fix #518: zero-checks empty state #524

Merged
crueber merged 1 commit from fix/issue-518 into main 2026-09-14 17:10:35 +00:00
Owner

Client display only — NO wire change (combinedState zero⇒pending stays for the gate).\n\n- New pure web/src/lib/checks-empty.js: isZeroChecks (empty = zero-length statuses array; a single pending context is still in-flight), zeroChecksTitle (No checks configured iff required is known-empty, else No checks reported yet), requiredCheckBlockers (Pull.jsx logic moved verbatim, incl. <ctx> (missing)).\n- CheckPill renders a neutral zinc no-checks pill on zero; real combined pill otherwise (commit pages unaffected for non-empty).\n- PR checks card swaps ContextRows for ZeroChecksBlock on zero (required-aware title + waiting-on-required line); required/blocking-merge lines and merge-button tooltip unchanged.\n- CheckDetail same treatment, sharing the CheckPill data key (no extra request).\n- Reporting guidance reuses existing surfaces only: POST …/checks/statuses/{sha} + wct_ token, links to /api#checks-ci and the checks page.\n- Law-12 decision appended to docs/features/05_checks_statuses.md.\n\nTests: new web/test/unit/checks-empty-518.test.js (8 tests: empty-vs-pending distinction, titles, blockers incl. (missing), src wiring pins); 28/28 across checks-empty-518 + sdk-checks + checks-tab-505/513 + pull-state-517; full web suite 1169/1170 (sole failure = smoke /setup 403 vs live :8080 instance, pre-existing on main, environmental); vite build clean. No backend change, no new deps. No browser drive (shared daemon blocks loopback per task note); mobile-viewport check still owed on review.

Client display only — NO wire change (combinedState zero⇒pending stays for the gate).\n\n- New pure `web/src/lib/checks-empty.js`: `isZeroChecks` (empty = zero-length statuses array; a single pending context is still in-flight), `zeroChecksTitle` (No checks configured iff required is known-empty, else No checks reported yet), `requiredCheckBlockers` (Pull.jsx logic moved verbatim, incl. `<ctx> (missing)`).\n- `CheckPill` renders a neutral zinc no-checks pill on zero; real combined pill otherwise (commit pages unaffected for non-empty).\n- PR checks card swaps `ContextRows` for `ZeroChecksBlock` on zero (required-aware title + waiting-on-required line); required/blocking-merge lines and merge-button tooltip unchanged.\n- `CheckDetail` same treatment, sharing the CheckPill data key (no extra request).\n- Reporting guidance reuses existing surfaces only: POST …/checks/statuses/{sha} + wct_ token, links to /api#checks-ci and the checks page.\n- Law-12 decision appended to docs/features/05_checks_statuses.md.\n\nTests: new web/test/unit/checks-empty-518.test.js (8 tests: empty-vs-pending distinction, titles, blockers incl. (missing), src wiring pins); 28/28 across checks-empty-518 + sdk-checks + checks-tab-505/513 + pull-state-517; full web suite 1169/1170 (sole failure = smoke /setup 403 vs live :8080 instance, pre-existing on main, environmental); vite build clean. No backend change, no new deps. No browser drive (shared daemon blocks loopback per task note); mobile-viewport check still owed on review.
PR checks card and CheckDetail page render a neutral 'No checks
configured/reported' block with reporting guidance when the head sha
has zero reported contexts, instead of the amber pending pill the wire
contract (zero => pending, load-bearing for the merge gate) implies.
Rule is the pure web/src/lib/checks-empty.js module; blockers/tooltip
unchanged; docs/features/05 decision appended.
Sign in to join this conversation.
No description provided.