Render the design lane as /ndd's inbox plus a defect bucket, not one raw label total - #168
Conversation
…bucket The design box told a human there were six design questions to rule on while /ndd, the command built to rule on them, had nothing to present: the box drew the raw ai:design label total, and every one of the six was withheld as 'no trusted comment raises a design question'. A count filed under owner 'human' that no human command serves is not an inbox. The tool now attaches next_design's own partition to the ai:design cell (issue-pr-cron#240), so the panel renders it: the box is the PRESENTABLE half — the number /ndd serves, which goes to zero when the queue drains — and the withheld half renders in its own group OUTSIDE every actor total, led by noQuestion, which carries the leak box's contract of a defect metric that should read zero, with its own series and rising border. The other buckets (draft / fetchErrors / unaddressable) surface only while they hold anything, each with its own click-through list. Both halves are cross-checked the way the cell already was: a bucket's stated count against the rows annotated into it, and each rendered half against the counts key its series is drawn from — the box renders the larger and the disagreement is named in the defect band. Backward compatible: a snapshot with no breakdown (every one written before the tool carried it) renders exactly as today, and the frozen STATES / pre-lanes tables keep drawing the raw count. Refs rainlanguage/issue-pr-cron#240 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Warning Review limit reached
Next review available in: 49 minutes You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
WalkthroughThe dashboard now supports descriptor-based ChangesAI design breakdown
Estimated code review effort: 3 (Moderate) | ~20 minutes Sequence Diagram(s)sequenceDiagram
participant PipelinePage
participant designSplit
participant DescriptorSnapshot
participant Dashboard
participant DefectPanel
PipelinePage->>DescriptorSnapshot: read ai:design breakdown
PipelinePage->>designSplit: validate bucket counts and rows
designSplit->>Dashboard: render presentable design rows
designSplit->>DefectPanel: report count or conservation mismatches
Dashboard->>Dashboard: render withheld design buckets separately
Possibly related issues
Possibly related PRs
Suggested labels: Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Screenshots — read before postingAll rendered with 1. Live data: before and after are byte-identicalThe live 2. Fixture at the issue's measured shape (
|
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@site/pipeline.html`:
- Around line 647-672: Move bucket count derivation, row assignment, and
FSM-conformance defect generation out of designSplit and the related dashboard
logic, and have the producer persist verified counts, assignments, and defect
records in human-queue.json. Update the dashboard to fetch and render those
producer-owned fields without recomputing pipeline state, retaining raw-count
fallback only as a display decision.
In `@test/dashboard.test.js`:
- Around line 4268-4294: Extend the dashboard FSM tests around the presentable
design bucket and withheld noQuestion bucket to use HTML- and script-like title
or repository values, then click both rendered boxes. Assert the resulting
payloads are text nodes and no markup elements are created, while preserving the
existing count, grouping, and conservation assertions; apply the same coverage
to the related test block around the second referenced range.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 3257c243-955d-4326-beec-d28258450ac2
📒 Files selected for processing (2)
site/pipeline.htmltest/dashboard.test.js
…loads CodeRabbit on #168: the design split put PR titles and repo names on two new render paths — the inbox box's presentable rows and the withheld group's per-bucket rows — and the new tests used only safe values, so nothing exercised them with the payloads CLAUDE.md requires. One test, three distinct payloads (one shared string would let a path that stopped rendering as text pass on another path's copy), opening each box in turn and asserting through the existing assertInert/markupNodes helpers that each lands as text and the tree grows no element or handler. Refs rainlanguage/issue-pr-cron#240 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Reviewed 37db74f: pass — |
|
Reviewed 37db74f: pass Rulings-conformance: checked the artifact against the rulings section of the issue-pr-cron CLAUDE.md this work is governed by, and against every ruling the human stated for it.
Merging with |




Refs rainlanguage/issue-pr-cron#240 (a cross-repo issue cannot be auto-closed reliably, so this is a
Refs; the issue closes on its own repo's PR).Pairs with rainlanguage/issue-pr-cron#243 — the emitter half. The two land together: that PR emits the split, this one draws it. Order does not matter and neither is harmful alone — an old dashboard ignores the new fields, and this page falls back to today's rendering on a snapshot without them — but the number on the panel is only fixed when both are in.
What the panel was saying
site/pipeline.htmlfiles theai:designbox under{ owner: "human", act: "rule on design Q" }, drawing the rawai:designlabel total. On 2026-08-09 that read 6 while/ndd— the command built to rule on those six — had nothing to present, withholding every one as "no trusted comment raises a design question". Draining the queue could not move it, because it was never counting rulable rows.The invariant, now stated in the code where the human owner's states are defined: every count filed under owner
humanis a count some human command will present. If no command serves it, it is not an inbox, and displaying it as one manufactures work that cannot be done.What this renders
ai:designbox is nowpresentable— the number/nddwill serve, which goes to zero when a human drains the queue — with its sparkline drawn fromcounts.designPresentable(the series measuring that same population) and its click-through listing the presentable rows.ai:design — withheld from /ndd · not an inbox). No actor's command serves any of it, and inside an owner group it would read as an inbox again — which is the defect being fixed.noQuestionis the headline and carries the leak box's contract: it renders even at zero, has its own series and rising-trend border, and reads as a defect that should trend to zero rather than as work. Its PRs list on click.draft/fetchErrors/unaddressablerender only while they hold anything, each with its own count and list.countskey its series draws from — the issue-pr-cron#228 two-numbers check, one level down. The two new keys are claimed by the boxes that draw them, so a clean split draws no defect band and an orphaned key still screams.breakdownreturns null fromdesignSplitand every consumer below falls through to exactly today's rendering. Numbers are validated through the existingposNum(a malformedpresentablemust not coerce to a fabricated 0 inbox). The frozenSTATEStable and the pre-laneslegacy branch keep drawing the raw count, with a comment each saying why that is all such a snapshot can say.Screenshots
All three rendered with
nix run .#screenshot(pinned chromium), read before posting.nix run .#roh-scanwas NOT run — this is a pure rendering change against committed data.1. Before / after on LIVE data — byte-identical (
cmpreports no difference). The livehuman-queue.jsondoes not carry the split yet, so the honest state today is no change at all: the design box still reads 6 and no withheld group appears. That is the backward-compat guarantee holding, demonstrated rather than asserted.2. After, on a fixture snapshot carrying the split at the measured 2026-08-09 shape (
presentable: 0, noQuestion: 6, every entry annotatednoQuestion,counts.designPresentable: 0/designNoQuestion: 6): the human row now readsai:ready 0 · ai:design 0 · close-candidate 0 · leak 0, total 0, and a separateAI:DESIGN — WITHHELD FROM /NDD · not an inbox 6group carries a single6 / no trusted question raised / DEFECT — NO COMMAND SERVES ITbox. This is the issue's number, fixed: the human inbox and/nddnow agree at 0, and the six are visible as the defect they are.3. After, on a mixed fixture (
presentable: 2, noQuestion: 3, draft: 1): the design box reads 2 under Human action (human total 2, and it takes the group's lead marker as the largest queue), while the withheld group reads 4 across two boxes —3 / no trusted question raisedand1 / draft — code still forming / PRODUCER FINISHES THE DRAFT. The emptyfetchErrorsandunaddressablebuckets draw nothing.Fixtures were built by patching the committed
human-queue.json(plus two history lines carrying the new keys so the new series draw) and serving it same-origin; the page's fetch URLs were pointed at the local copies for the render only — no committed file was changed.QA
pipeline FSM: {the design box is the /ndd inbox — presentable, never the raw label total; presentable rows list under the design box; a drained defect bucket shows its zero; withheld buckets beyond noQuestion render only while they hold anything; a split whose counts mirror disagrees is a loud defect naming both numbers}— each verified to FAIL on base by restoring master'ssite/pipeline.htmlunder the new tests and re-running the suite:FAILED | 242 passed | 4 failed, the four failures being exactly these. Two further new tests (a snapshot without the split renders the design cell exactly as before,split counts keys without a breakdown behind them sweep as unclaimed occupancy) pass on base by design — they are the backward-compat and conservation regression guards, and a guard that failed on base would be asserting the old behaviour was already broken. Full suite on the branch:246 passed | 0 failed.designPresentableto disagree with the rendered breakdown produces thecounted two waysdefect (asserted), and removing thebreakdownwhile keeping the counts keys producesclaimed by no descriptor(asserted). A code mutant swapping the box's source back tolaneCountis killed by the first test in the list (it would render 6)./nddpresentable 0, noQuestion 6at 2026-08-09T08:44Z — used directly as the fixture, so the test asserts the panel now reports what/nddreports. The bucket vocabulary is the emitter's (DesignBucket), read off the paired PR's schema rather than restated here. Rendering claims are checked against actual screenshots, read, not assumed.presentable— done; (b)noQuestionas a separate defect bucket with the leak bucket's should-trend-to-zero treatment — done, including always-rendering at zero, its own series and the rising border; (c) its PRs listed under it — done, via the existing click-to-expand registration; (d) backward compat by the file's established fallback pattern — done, and demonstrated by identical before/after renders on live data; (e) the owner-invariant as a code comment where the human owner states are defined — done. The emitter half is the paired PR.Summary by CodeRabbit