Skip to content

fix(scripts): correct the RETIRED_FIELD_TYPES excluded sentence that dropping the line refutes (objectui#10070) - #10961

Merged
objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/issue-10070-retired-field-types-sentence
Sep 28, 2026
Merged

objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/issue-10070-retired-field-types-sentence

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

Fixes #10070

Clause-②: no — a comment in a source file; no accept set or public contract surface moves

What was false, and where it actually lives

The sentence objectui#9803 corrected on the RETIRED_DASHBOARD_NODE_TYPES entry has a twin on the RETIRED_FIELD_TYPES entry of INDIRECT_REGISTRATIONS in scripts/check-doc-component-types.mjs, in that entry's excluded string. Before this change it read:

Deciding it either way flips one switch and nothing else — DROP this excluded line and the collection's keys (today field:owner) enter the universe, so a document teaching field:owner turns GREEN; keep it and such a document stays RED, which is what happens today.

The corrected copy on the dashboard entry reads, in part: "DROPPING this excluded line does NOT re-admit view:dashboard — … it makes THIS entry report stale-indirect-registration". The field entry's own reason already stated the cause: "RETIRED_FIELD_TYPES is IMPORTED into this file from @object-ui/core, so nothing here could read it anyway."

⚠️ The fix is not in the file the dispatch expected. The dispatch expected the sentence in the RETIRED_FIELD_TYPES docblock in packages/core/src/utils/retired-field-types.ts. That docblock has no copy of it: the only matches for "flips one switch", "enter the universe" and "turns GREEN" in the tracked tree are in the gate script's entry. The card's own description ("the same entry's reason half") points at the gate-table entry, and this PR edits that entry. packages/core is untouched.

The change

The false sentence is replaced with one sentence stating what dropping the line does, and naming the two commands that re-derive it. The rest of the entry is unchanged: the WITHHELD question and the whole reason field stay as they are. The diff touches one file, +7 −3.

The text is the only thing that changes. The derivation checks excluded only for truthiness (typeof entry.excluded === 'string' && entry.excluded.length > 0), and the string is still non-empty. No key, collection, namespace or site changes, and no other entry changes.

Measured before the sentence was written, and again on the committed fix

Both runs deleted the entry's excluded property with objectstack's scripts/ablation-replace.mjs. That tool requires the anchor to match, checks the mutation on disk, and restores the file afterwards, proving the restore with git diff HEAD. Each run used a lit probe doc under content/docs/: one block teaching field:owner and one teaching field:user. The probe was removed by a trap.

reading unmutated excluded dropped
pnpm check:doc-types exit 0 exit 1: packages/fields/src/index.tsx (RETIRED_FIELD_TYPES) [stale-indirect-registration]
node scripts/regenerate-known-schema-types.mjs --check exit 0 exit 1, same finding, "nothing was written"
derived universe size 648 648
packages/cli/src/utils/known-schema-types.ts blob 3447617c5d 3447617c5d
probe doc teaching field:owner RED, unregistered-doc-type RED, unregistered-doc-type plus the stale finding
lit control field:user in the same probe counted registered counted registered

Base run on 06a96e9480, re-run on c9d3b58b50 (this PR's commit). In both runs the mutated file hashed to the same blob, 587fcde4ffb9, so the sentence text has no effect on what the ablation measures. Every restore ended with blob equal to HEAD and an empty git diff HEAD.

⚠️ The first ablation attempt was a no-op. ablation-replace refused it because the replacement text was a substring of the anchor, restored the file and ran nothing. The run was repeated in --delete mode with an exact anchor. That second run is the one reported above.

Verification at c9d3b58b50

Exit codes were captured to a file before any pipe.

  • pnpm check:doc-types exit 0 ("Every documented component type is registered."). node scripts/regenerate-known-schema-types.mjs --check exit 0.
  • pnpm check:control-bytes exit 0. pnpm check:new-line-citations exit 0 (VERDICT new-cross-file-line-citations: 0 new citation(s)).
  • pnpm check:prompt-keys exit 0 and pnpm check:registry-bare-names exit 0. Both import INDIRECT_REGISTRATIONS or its derivation.
  • node scripts/check-changeset-presence.mjs exit 0: "No source or published contract of a released package changed in this range, so no changeset is owed." No changeset is added.
  • node scripts/check-governed-queue-guard.mjs --test scripts/check-doc-component-types.mjs answers NOT GOVERNED.
  • Tests, run from the repo root through the shared verify lock: every test file that git greps check-doc-component-types, plus scripts/__tests__/registry-bare-name-collisions.test.ts. The result is 26 files, 1404 tests passed (VERDICT command-exit 0).
  • Dispatch-named, run although the diff does not touch @object-ui/core: the @object-ui/core dependency closure was built, then pnpm --filter @object-ui/core type-check exited 0 (the script echoed tsc --noEmit && tsc -p tsconfig.test.json). packages/core/src/utils/__tests__/retired-field-types.test.ts passed 9 of 9.
  • Lint: pnpm exec eslint scripts/check-doc-component-types.mjs --format json judged 1 file with 0 errors and 0 warnings. ⚠️ This is a parse check only. eslint --print-config for this file shows 0 enabled rules and the espree parser with no type-aware parser options, so this diff cannot change any other file's lint verdict. The full pnpm lint run is left to CI.

Acceptance notes

  • Not changed here, noted for whoever next edits INDIRECT_REGISTRATIONS: the same excluded string still opens with "WITHHELD pending objectui#9717, which is open on exactly this question". objectui#9717 was closed as completed on 2026-09-20 under ruling letter A: retired spellings stay out of the universe. The same stale "open question" wording appears in the RETIRED_DASHBOARD_NODE_TYPES entry's excluded text. A comment in scripts/__tests__/check-doc-component-types.test.ts also says "while objectui#9717 is open". The withheld disposition is still correct; only the status wording is out of date. That is a separate sentence from the one this card names, so it is left untouched.
  • The card body refers to "the triage comment on this card" for its re-measurement. At the time of this PR, the card's thread holds only the claim comment. The measurement above was taken fresh.

Seat session, in prose so it survives an edit: https://claude.ai/code/session_01EBx9rvB7dufCz4at53x35U.


Generated by Claude Code

…t dropping the line refutes (objectui#10070)

The WITHHELD declaration for RETIRED_FIELD_TYPES in INDIRECT_REGISTRATIONS
said that dropping its `excluded` line "flips one switch and nothing else":
the collection's keys (`field:owner`) would enter the universe and a document
teaching `field:owner` would turn GREEN. That is the sentence objectui#9803
corrected on the sibling RETIRED_DASHBOARD_NODE_TYPES entry, and it is false
here for the same reason the entry's own `reason` gives: RETIRED_FIELD_TYPES
is IMPORTED into the site file from `@object-ui/core`, so without the
exclusion the derivation reads no literal keys and the entry reports
`stale-indirect-registration` instead.

Measured before writing, by deleting the line: `check:doc-types` and
`regenerate-known-schema-types.mjs --check` both exit 1 naming that finding,
the derived universe keeps the same size, and a probe document teaching
`field:owner` stays red (`unregistered-doc-type`).

Text only: the derivation reads `excluded` for truthiness, and the string
stays non-empty.

Claude-Session: https://claude.ai/code/session_01EBx9rvB7dufCz4at53x35U
Co-authored-by: Claude <noreply@anthropic.com>
@github-actions

github-actions Bot commented Sep 28, 2026 •

Copy link
Copy Markdown
Contributor

changeset-claim-re-read

⚠️ 3 pending changeset(s) describe a file this change touches

Their bodies publish verbatim into the CHANGELOG at the next release, so this is a request to re-read them against your diff — addressed here because you are the one seat that can answer it without re-deriving anything.

⛔ Nothing here blocks, and nothing here is a verdict on your change. This gate exits 0, is not a required context, and judges name resolution, never meaning: it asked whether a pending body names a file you touched. "Is this sentence still true?" is the one question it will not answer, and the one you are being asked to answer.

.changeset/8114-detail-tab-activity-timeline.md

  • names scripts/check-doc-component-types.mjs → scripts/check-doc-component-types.mjs — edited by this change

    Which type replaces it was read off the registry rather than guessed, using the repository's own derivation — deriveRegistryKeys() from scripts/check-doc-component-types.mjs, the 649-key universe that gate judges against:

.changeset/8499-node-slot-registered-arms.md

  • names scripts/check-doc-component-types.mjs → scripts/check-doc-component-types.mjs — edited by this change

    The defect, and the direction it ran. Nine type spellings sat at DECLARED node slots in this repository's own corpora and resolved in no arm of the component union. Eight were registered renderers with fixtures proving they draw; the ninth (my-component) is the reader's own plugin component and carries a written exemption in scripts/check-doc-component-types.mjs. A reader following content/docs/utilities/runner.mdx's own instruction — "copy one, wrap it in a page document … and save it as src/app-data/pages/index.json" — got a document that renders correctly in the browser and is refused by objectui validate. That is the expensive direction: the likely reaction is to stop trusting the validator.

.changeset/9533-dashboard-bare-key-converge-plugin-namespace.md

  • names scripts/check-doc-component-types.mjs → scripts/check-doc-component-types.mjs — edited by this change

    What changed. The renderer registers as plugin-dashboard:dashboard, the namespace every sibling plugin, both console stubs and the CLI whitelist already use, so the console stubs are cleared on load and all three claimants of the bare key name ONE full type. The retired view:dashboard key answers RetiredDashboardNodeTombstone — an inline refusal, plus a console.error carrying the same text — registered with skipFallback: true so it claims no bare key. Its spelling is withheld from the derived key universe by declaration in scripts/check-doc-component-types.mjs, the same disposition the RETIRED_FIELD_TYPES tombstones take, so objectui check names it in a file it recognises rather than blessing it; packages/cli/src/utils/known-schema-types.ts regenerates and loses that one entry.

Read the paragraph, not the line: both false halves of the objectui#8617 claim sat in one paragraph, and correcting either alone would have left it asserting the same wrong thing.

If a claim did go false, correct the body. That is precedented and prose-only, frontmatter untouched; check-changeset-overwrite.mjs will report the correction as its own case 2 ("correcting a declaration on purpose … legitimate"), which is the intended shape — one gate asks for the read, the other records the write.

Not covered, stated so nobody reads this as more: a born-false claim that spells no line address at all (objectui#9495 coordinated one by ORDINAL — "a grep finds that member first" — and deciding that means reading what the sentence means), a claim spelled as a symbol or a package rather than a backticked file name, and a file named ambiguously.

Compared the checked-out tree with 7d82957b1 (merge-base with origin/main): 2 file(s) changed outside .changeset/, read against 1687 pending declaration(s) that publish a body (2287 pending in total). · run

…n in the WITHHELD entries (objectui#10070)

objectui#9717 was closed as completed on 2026-09-20 under ruling letter A
("retired spellings stay OUT"). Three texts still described it as pending:

- the RETIRED_FIELD_TYPES `excluded` string opened with "WITHHELD pending
  objectui#9717, which is open on exactly this question";
- the RETIRED_DASHBOARD_NODE_TYPES `excluded` string said "the same open
  question as the RETIRED_FIELD_TYPES entry above (objectui#9717)";
- a comment in the gate's test file said "while objectui#9717 is open".

Only the status half of each is rewritten to name the ruling; every other
word is kept. Both `excluded` strings stay non-empty, which is all the
derivation reads, so nothing about the gate's behaviour changes.

Claude-Session: https://claude.ai/code/session_01EBx9rvB7dufCz4at53x35U
Co-authored-by: Claude <noreply@anthropic.com>
@github-actions github-actions Bot added the tests label Sep 28, 2026
@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review September 28, 2026 11:21
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Sep 28, 2026
Merged via the queue into main with commit b120b66 Sep 28, 2026
42 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/issue-10070-retired-field-types-sentence branch September 28, 2026 11:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

finding(fields): RETIRED_FIELD_TYPES carries the identical born-false sentence objectui#9803 corrected elsewhere

2 participants