docs(examples): the corpus header points at the bucket instead of naming it (objectui#7548) - #7860
Merged
Conversation
…ing it (objectui#7548) The closing paragraph of `safe-validate-corpus-6318.test.ts`'s module docblock already refused to pin the SIZE of the remaining bucket, and its reason was good: a number pinned there turns red on the card that repairs any one entry. Then it enumerated the CONTENTS by name, which nothing pinned either — and the same reason applies to the contents word for word. The falsifier was scheduled and known by name. objectui#6939 repairs that bucket one group at a time, and each group falsifies one row of the list. It had already gone off twice when this card was filed, and the measurement of the hand-update remedy is on this very paragraph: objectui#7541 edited it at 19:55 on 2026-09-03 to drop the one row it had itself just repaired — 11h19m after objectui#7456 falsified another row of the same list, and 58m after objectui#7533 falsified the remaining one — and left both of those standing. Re-measured on this tree, both rows it left are still false, and one of them is now false in the opposite direction as well: objectui#7769 turned `TreeViewSchema.data` into an ADR-0049 retirement tombstone, so the key the header called "demanded" is now REFUSED BY NAME. So the enumeration is replaced by a pointer to where the list actually lives — what the bucket is, what computes it (`packages/cli/src/commands/check.ts`, uncapped and per file), and where to read it — plus the cards that own it and the glob that finds the pins their landed groups left. The refusal to pin the count is kept, and extended to the contents; the stale count itself is dropped, because a copy of the list's length rots on exactly the same schedule as a copy of its names. Comment-only, proven twice: every added and removed line of the diff is a docblock comment line (24 added, 5 removed, 0 non-comment), and both revisions transpile to byte-identical output (esbuild, 3119 bytes, sha256 7e5e60df…). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KbJQ1y1J12nZxYzFWhP8Q3
This was referenced Sep 6, 2026
os-sam
marked this pull request as ready for review
September 6, 2026 00:32
os-sam
deleted the
claude/issue-7548-corpus-header-scheduled-falsifier
branch
September 6, 2026 01:12
This was referenced Sep 6, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #7548
The half that was already right, and the half this carries out
The closing paragraph of the module docblock in
examples/schema-catalog/test/safe-validate-corpus-6318.test.tsalready refused to pin the size of the remaining bucket, and its reason was good:Then it enumerated the contents by name, which nothing pinned either. The same reason applies to the contents word for word: objectui#6939 repairs that bucket one group at a time, so every group it lands makes one more line of the enumeration false. It is a list with a scheduled falsifier.
The re-check, every row, on this tree (
3faaa7d0f)Both by reading the declaration and by running the validator. The runtime column is a probe that was run and then deleted — it is reproduced in the report, not added to the repo.
3faaa7d0ftooltipandcontext-menudemand achildrentheir renderers never read"TooltipSchemanorContextMenuSchemadeclareschildrenat all; it is only inherited fromBaseSchema, where it is.optional()tooltipwith nochildren→success = true; acontext-menuwith nochildren→success = true; the catalog'sbasic-tooltipandbasic-context-menuauthor nochildrenand both validatetree-viewdemandsdatawhere the renderer readsnodesfirst"TreeViewSchema.datais an ADR-0049 retirement tombstone (objectui#6951 B1), and the renderer readsboundData || schema.nodes || []—datais not a limb of that read at all any moretree-viewwithnodesand nodata→success = true;tree-viewwithdata→success = false, refusedkanbandeclarescolumns[].items…"Why hand-updating the list is not the cheap fix — it is the defect, measured on this paragraph
The "just correct it" remedy was already tried here, and its failure is on the record in this file's own history:
bfaa1589c(objectui#7456) removes the requiredchildrenfromTooltipSchemaandContextMenuSchemain one commit777e5c6f4(objectui#7533, objectui#6939 group 2) stopstree-viewrequiring the limb it reads third240b80f31(objectui#7541) edits this very paragraph, deleting the one row it had itself just repaired16a725f96(objectui#7769) turnsTreeViewSchema.datainto a retirement tombstoneAn author editing this list, with this file open, 58 minutes after the most recent falsification, corrected only the row they had personally just falsified. That is not carelessness — it is the mechanism: nothing links the list to the card that falsifies it, and nothing goes red.
What this changes
The by-name enumeration is replaced by a pointer to where the list actually lives — the shape this repo has converged on three separate times (
check-doc-snippet-types.mjs'sUNGATED_DOCSheader repaired itself into "a pointer to the list now rather than a copy of its length"; PR objectui#7827 applied it to two workflow headers):packages/cli/src/commands/check.ts, printed uncapped and per file with its type, deliberately not as a bare number (objectui#6075);objectui checkoverexamples/schema-catalog; the cards that own it are objectui#6318 and objectui#6939, andls examples/schema-catalog/test/*-6939.test.*lists the pins its landed groups left beside this file.Two things kept deliberately:
28is dropped. That is the opposite of pinning it: a copy of the list's length rots on exactly the same schedule as a copy of its names, and it is the same thingUNGATED_DOCSremoved for the same reason. Nothing here asserts a size.The acceptance question
After objectui#6939 repairs another group, is that paragraph still true? Yes. Every remaining sentence is either a property of the text itself, a pointer to a computed list, or a dated historical fact. Nothing in it is a restatement of the bucket's contents or size.
Evidence
The test file, before and after — a comment-only change should move nothing
All eight test names are unchanged, and the static
expect(count in the file is 17 on both sides. Run aspnpm exec vitest run --project unit --maxWorkers=2 examples/schema-catalog/test/safe-validate-corpus-6318.test.ts, through this container's shared heavy-verify lock; the wrapper's verdict line readsVERDICT command-exit 0on both runs.Comment-only, proven the two independent ways
Either one alone can be fooled; together they cannot.
1. Every changed line is a docblock comment line. Over
git diff -U0, payload lines only: 29 lines, +24 / −5, 0 of them failing to match a comment prefix.2. Both revisions transpile to byte-identical output.
esbuild,
--format=esm --target=es2022 --legal-comments=none. The first attempt at this proof produced 0 bytes on both sides — a wrong flag combination — and two empty files hash identically, which is a passing-looking proof of nothing. Both outputs are therefore guarded as non-empty and asserted to still contain the code (8safeValidateSchemaoccurrences, 2describe() with no comment text left in them.Changeset — the gate's verdict, verbatim
Acted on as written: no changeset added, and no
skip-changesetlabel applied — that label reads nothing in this repo and exempts nothing here.Lint
pnpm --filter @object-ui/example-schema-catalog run lint(which is whatturbo run lintruns for this package) exits 0, with the script name echoed so this is not a zero-match filter passing silently. Population read from eslint's own resolution rather than guessed:--format jsonreports 30 files for this package, the changed file among them, 0 errors / 0 warnings. The repo-wideeslint .is CI's run, and narrowing to this package is safe here because this config is not type-aware —eslint.config.jssets noprojectServiceand noparserOptions.project— so a change confined to one file cannot move a diagnostic on a file that does not contain it.Type-check — a pre-existing failure, provably untouched
pnpm --filter @object-ui/example-schema-catalog run type-checkfails on this tree, and fails identically without this change. The failures are unresolved package imports (Cannot find module '@object-ui/types/zod'and friends) because this fresh worktree has not built the dependency closure'sdist/; CI builds it.Measured rather than assumed, from a committed state so the restore had a real reference point: the file was replaced with its
3faaa7d0fcontent,type-checkre-run, and the file restored fromHEAD— restoration confirmed by observed state (git diff HEADempty, worktree blob8220be2868…equal to theHEADblob), not by an exit code.The only two lines that move are the two on this file, each by exactly +19 — this diff's net line count (
51 → 70,64 → 83).What I did not run
node packages/cli/dist/cli.js check, which needs a full workspace build. The28is removed as an unpinned copy of a length, not because it was measured wrong — it was not measured at all, and this PR does not repeat it as though it had been.eslint ., no repo-widevitest, no dependency-closure build. CI runs the farm; the narrowing above is declared, with its population and its invariance argument.Out of scope, filed separately
Measuring this change turned up a defect of the same class one level up, filed as objectui#7853 (no assignee,
findingonly):component-fixture-declared-keys.test.ts:835citessafe-validate-corpus-6318.test.ts:98by line. That citation is accurate on3faaa7d0f— line 98 really is that assertion — and this comment-only diff moves it to line 117, with nothing going red. It is deliberately not repaired here: renumbering 98 to 117 is the very hand-update remedy this card exists to reject, the right remedy is a decision rather than a mechanical edit, and that address lives in a file this dispatch bounded me away from.Generated by Claude Code