Skip to content

Draw only /ndd's presentable half of the design cell — drop the separate withheld group - #170

Merged
thedavidmeister merged 3 commits into
masterfrom
drop-withheld-group-240
Aug 9, 2026
Merged

Draw only /ndd's presentable half of the design cell — drop the separate withheld group#170
thedavidmeister merged 3 commits into
masterfrom
drop-withheld-group-240

Conversation

@thedavidmeister

Copy link
Copy Markdown
Contributor

Refs rainlanguage/issue-pr-cron#240

#168 shipped two things under that issue. One was the ruling — the ai:design box renders presentable, the population /ndd actually serves. The other was a separate rendered lane group for the rows /ndd withholds, which the issue text invented and nobody asked for. This removes the group. The ruling stays exactly as it is.

Stays

  • The ai:design box renders presentable — the number that goes to zero when a human drains the queue — with its series drawn from counts.designPresentable and its click-through listing the presentable rows.
  • The backward-compatible fallback: a cell with no well-formed presentable returns null from designSplit and every consumer below renders exactly the pre-split page. The frozen STATES table and the pre-lanes legacy branch keep drawing the raw count.

Goes

  • The withheld descriptor array, the fsm-grid/fsm-lane it built, its lane header and total, and the designNoQuestion / designDraft / designFetchErrors / designUnaddressable boxes.
  • designSplit now reads the one bucket the page draws. The other four buckets were parsed, Math.max'd and returned for a consumer that no longer exists; noQuestion was also half the validity gate, so a snapshot carrying {presentable: 2} and nothing else fell back to the raw count for no reason. presentable alone is the gate now.
  • The designNoQuestion arm of the two-numbers check. It compared a rendered value against the counts key its series was drawn from; that half renders nothing, so the comparison had no subject. The designPresentable arm is untouched. Same for the bucket-count-against-annotated-rows check one level up.

With the group gone a noQuestion row is invisible on this panel until rainlanguage/issue-pr-cron#242 design-doctor routes it out. That is the accepted state: /ndd withholds those rows and lists them itself, at the moment it withholds them.

The sweep's occupancy call: designNoQuestion becomes a frozen-legacy key

The conservation sweep claimed both split series so that a nonzero noQuestion could not sweep as inventory rendering nowhere while a box was drawing it. With the group gone nothing draws it, and the claim would be a lie of exactly the kind the sweep exists to catch — so the claim is dropped and the key is named in LEGACY_UNCLAIMED, beside closeCandidateIssues.

Why not let it flag. The inventory is not unrendered: those six PRs live in lanes["vetter-verdicts"]["ai:design"], a cell exactly one descriptor claims and which the sweep scores at everything it holds. What goes unclaimed is a sub-total of a claimed cell. And the band it would land in says "Snapshot defect — the tool's stateDescriptors do not cover its own occupancy. Fix the tool's emit" — an accusation against a correct emit, with a remedy that is not the fix, firing on every refresh for as long as the queue holds a withheld row. That is the page manufacturing a second kind of work nobody can do, one layer down from the box this issue removed.

Nothing else is loosened: legacy suppresses only the zero-claim case, a double claim on a legacy key still defects (there is a test), designPresentable must still be claimed by the box that draws it, and every other unclaimed counts key still screams.

Screenshots

nix run .#screenshot (pinned chromium), read before posting. nix run .#roh-scan was NOT run — this is a pure rendering change. Posted in a comment below.

Unlike the earlier PRs there is a real before/after on live data: human-queue.json today carries presentable: 0, noQuestion: 6.

  • live-before (master, live fetch): three actor groups, HUMAN ACTION 0 with ai:design 0 — and below them a fourth group, AI:DESIGN — WITHHELD FROM /NDD · not an inbox 6, holding one box: 6 / no trusted question raised / DEFECT — NO COMMAND SERVES IT.
  • live-after (this branch, same live fetch): that group is gone. Everything above it is pixel-identical — compare -metric AE over the top 790 rows, through the end of the human group, reports 0 differing pixels — same three groups, same ai:design 0, same human total 0. No defect band, which is the designNoQuestion: 6 exemption doing its job on real data. The legend and footer move up into the space.
  • fixture-presentable: the live snapshot patched so two of the six rows carry a trusted question (presentable: 2, noQuestion: 4, plus two history lines so the series matches). The ai:design box reads 2 with a rising border, the human total reads 2, the withheld 4 draw nothing, and no defect band. The inbox still draws; only the invented group left.

QA

  • Discriminating tests, each verified to FAIL on base by restoring master's site/pipeline.html under the new tests (FAILED | 258 passed | 4 failed, the four being exactly these):
    • pipeline FSM: the design box is the /ndd inbox — presentable, never the raw label total — now asserts the three actor groups are the whole machine, no box exists for any withheld bucket, and the design box opens onto no withheld row. On base: 4 groups.
    • pipeline FSM: the drawn split key must be claimed; the withheld half's key is ratified unclaimed — an orphaned designPresentable still screams; a nonzero designNoQuestion does not. On base: it does.
    • pipeline FSM: the frozen-legacy counts keys never defect; any other unclaimed counts key does — the canonical exception fixture now carries designNoQuestion: 6, so the ratified set is pinned in one place. On base: defect band.
    • pipeline FSM: a breakdown carrying only presentable still renders the inbox — the withheld vocabulary is /ndd's, and a snapshot that stops carrying it must not cost the human inbox its number. On base: falls back to the raw 6.
  • Mutation pass over the changed lines, 7/7 killed (each mutant applied to site/pipeline.html, full suite run, reverted). Three survived the first round and are why three of the new tests exist:
    • drop the presentable null gate → survived → killed by a malformed presentable falls back to the raw cell, never a fabricated zero inbox (a number-shaped string must not coerce into a real-looking 0 inbox over six labelled PRs).
    • shown: Math.max(stated, listed.length)stated → survived → killed by a presentable count broken low cannot hide the rows annotated into it.
    • series key designPresentablep.hist → survived → killed by the design box's trend is drawn from designPresentable, not the raw label series (a climbing withheld pile must not put a bottleneck border on a queue no command serves; the presentable half climbing must).
    • re-adding the noQuestion half of the gate → killed by the only-presentable test above.
    • killed in the first round: dropping the designPresentable claim; dropping designNoQuestion from the legacy set (3 tests); dropping the bucket === "presentable" filter (2 tests, one of them the hostile-input one).
  • Tests removed: withheld buckets beyond noQuestion render only while they hold anything (existed only to pin the group). split counts keys without a breakdown behind them sweep as unclaimed occupancy was rewritten rather than deleted — its claim about designNoQuestion is now the opposite, and its claim about designPresentable still holds. The presentable rows list under the design box and hostile-input tests lost their withheld-box arms and kept the rest; the hostile test now asserts the withheld payloads reach the panel by no path at all, which is a stronger statement than the inertness it used to check on them.
  • Kept: every test covering the presentable box, the backward-compatible fallback, the counts-mirror defect, and the hostile payloads.
  • Full suite on the branch: 262 passed | 0 failed. nix develop -c pre-commit run --all-files: all hooks pass.
  • Category check: the instruction is one thing — remove the separate rendered group for the withheld design rows, keep the ruling. Covered: (a) the descriptor array, grid, lane, header, total and all four boxes are gone, and no legend or caption text explained the group (its only prose was the lane header itself); (b) designSplit trimmed to the one bucket with a consumer, no dead field computed; (c) the two-numbers check keeps the arm whose box exists and drops the one whose box does not, same for the bucket-vs-rows check; (d) the sweep's occupancy for designNoQuestion decided deliberately and stated above, not left inconsistent and not weakened elsewhere; (e) the presentable box, the fallback and the hostile-payload coverage all kept, group-only tests removed. Refs because the issue lives in another repo and cannot be auto-closed from here — and it is already closed by Render the design lane as /ndd's inbox plus a defect bucket, not one raw label total #168 besides; this corrects that PR's overreach.
  • Oracle: the user's ruling — the dashboard matches /ndd. /ndd presents presentable and reports its own withholding; so the panel draws the first and not the second. Rendering claims are read off actual screenshots, not assumed.

thedavidmeister and others added 3 commits August 9, 2026 14:35
The ai:design box keeps rendering `presentable` — the population /ndd serves,
which reads zero when a human drains the queue — off `counts.designPresentable`.
The rows /ndd withholds are drawn nowhere: /ndd lists them itself at the moment
it withholds them, so the panel builds no number and no box out of them.

`designSplit` reads the one bucket the page draws. The conservation sweep claims
`designPresentable` (a box draws it) and names `designNoQuestion` in the
frozen-legacy set: the PRs it counts are claimed as inventory by the ai:design
lane cell, so what goes unclaimed is a sub-total of a claimed cell that nothing
renders — claiming it while nothing reads it would be the lie the sweep exists
to catch. The two-numbers check keeps the arm whose box exists.

Refs rainlanguage/issue-pr-cron#240

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…fied unclaimed key

The split tests assert the three actor groups are the whole machine, no box is
built out of the withheld buckets, and the design box opens onto the presentable
rows only. The sweep pair: an orphaned `designPresentable` still screams, a
nonzero `designNoQuestion` is silent. The hostile payloads on the withheld rows
now assert those rows reach the panel by no path at all.

Refs rainlanguage/issue-pr-cron#240

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Four discriminating tests from a mutation pass over the changed lines: a
malformed `presentable` degrades to the raw cell instead of a fabricated zero
inbox; a breakdown carrying only `presentable` still draws it, since that is now
the only bucket the page reads; a count broken low against its annotated rows
renders the larger and names the disagreement; the box's rising border follows
`designPresentable` and not the raw label series, so a climbing withheld pile
never announces a bottleneck under a command with nothing to present.

Refs rainlanguage/issue-pr-cron#240

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@thedavidmeister thedavidmeister self-assigned this Aug 9, 2026
@coderabbitai

coderabbitai Bot commented Aug 9, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@thedavidmeister, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 2 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 @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

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 configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 8e6020b1-3462-4b9b-baec-75520edcd2ac

📥 Commits

Reviewing files that changed from the base of the PR and between 5606d79 and 2041050.

📒 Files selected for processing (2)
  • site/pipeline.html
  • test/dashboard.test.js

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@thedavidmeister

Copy link
Copy Markdown
Contributor Author

Screenshots — read before posting

All rendered with nix run .#screenshot (pinned chromium, 1300x1150). nix run .#roh-scan was not run: this is a pure rendering change.

1. Live data, master: the group nobody asked for

Live human-queue.json today carries presentable: 0, noQuestion: 6, so unlike #168 there is a visible difference to show. Master draws three actor groups — HUMAN ACTION @thedavidmeister 0, with ai:design 0 — and then a fourth group below them: AI:DESIGN — WITHHELD FROM /NDD · not an inbox 6, holding one box, 6 / no trusted question raised / DEFECT — NO COMMAND SERVES IT.

live, master

2. Live data, this branch: the group is gone, nothing else moves

Same live fetch, same moment. The fourth group is gone; the legend and footer move up into the space it held. Everything above it is unchanged — compare -metric AE over the top 790 rows (through the end of the human group) reports 0 differing pixels.

The ai:design box still reads 0 and the human total still reads 0: that is the ruling from rainlanguage/issue-pr-cron#240 intact — the box counts what /ndd will present, not the six labels. And there is no defect band, which is the designNoQuestion: 6 frozen-legacy exemption doing its job on real data rather than on a fixture: the six PRs are still claimed inventory in the ai:design lane cell, and /ndd reports the withholding itself.

live, this branch

3. Fixture: the inbox still draws a real number

Both live shots read 0, so here is the other half. The live snapshot patched so two of the six rows carry a trusted question (presentable: 2, noQuestion: 4, counts.designPresentable: 2), with the last three history lines carrying designPresentable 1, 2, 2 so the series has the shape the box claims.

ai:design reads 2, the human total reads 2, the withheld 4 draw nothing anywhere, and no defect band appears.

One thing to read correctly: the red border + ▲ on the design box is the rising flag, and it is honest — the fixture's own patched history climbs 0→2 over its last three samples, so designPresentable is trending up. It is a statement about the fixture, not about live data (live designPresentable has been flat at 0).

fixture: presentable 2, withheld 4

How shots 1 and 2 were built: the real raw.githubusercontent.com fetch, unmodified, against master's site/pipeline.html and this branch's. Shot 3: the live human-queue.json and history copied and patched as described, with the page's two fetch URLs pointed at the local copies for the render only. No committed file was modified.

@thedavidmeister

Copy link
Copy Markdown
Contributor Author

Reviewed 2041050: pass

The group is gone — zero occurrences of its markers on the head blob. designSplit is trimmed to presentable alone rather than left computing four buckets nothing reads, the sweep claims only designPresentable, and both defect checks collapse to that one arm.

The sweep exemption is the call worth checking, and it holds. designNoQuestion joins LEGACY_UNCLAIMED, and misclaimed shows that is not a weakening:

if (n === 1) return;
if (n === 0 && (!held || legacy)) return;

legacy suppresses only the zero-claim case; a double claim still defects for a legacy key exactly as for any other, and every non-exempt unclaimed key still screams.

Exempting rather than flagging is the better of the two options. The inventory behind that number IS claimed — those six PRs sit in lanes["vetter-verdicts"]["ai:design"], a cell exactly one descriptor claims and which the sweep scores at everything it holds. What goes unclaimed is a sub-total of a claimed cell. Flagging it would have accused a correct emit on every refresh for as long as the queue held a withheld row, manufacturing a second undoable-work signal one layer below the box this PR removes.

Rulings-conformance: checked against the rulings governing this work.

  • "i never asked for a separate group" (thedavidmeister, 2026-08-09). OBEYED — that is the whole diff. The group was my invention in Dashboard design-lane count must match /ndd: presentable is the inbox, noQuestion is a defect bucket issue-pr-cron#240, not the user's ask.
  • "dash should match ndd" (thedavidmeister, 2026-08-09, the actual ruling). OBEYED and preserved: the design box still renders presentable, the population /ndd serves, drawing its series from counts.designPresentable.
  • "never invent scope — implement the ask, nothing adjacent" (thedavidmeister, 2026-08-09). OBEYED: a removal plus the two consequences it forces (the sweep occupancy and the now-subjectless defect arm), and nothing else.
  • "screenshot every visual PR, and READ it rather than re-blessing" (standing). OBEYED, and live data carries presentable: 0, noQuestion: 6, so unlike the earlier dashboard PRs there is a real before/after difference and it is shown.
  • "data gaps are data entry — the honest empty state is correct" (standing). OBEYED: with the group gone a withheld row is simply not drawn here; /ndd withholds and lists those rows itself, and FSM design-doctor: route every noQuestion ai:design row back to ai:needs-work issue-pr-cron#242 drains them.
  • Untrusted-data rendering and CURRENT-behaviour-only comments (CLAUDE.md, standing). OBEYED.

CI: all checks pass. Merging with --merge --admin per the standing no-squash rule.

@thedavidmeister
thedavidmeister merged commit 73c38c4 into master Aug 9, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant