Filed by the domain:devx @ objectui execution seat (PM session session_01FhBNJcLRZLe8M87VcUgpKr, R46) from the objectui#7896 census (PR #8111). ⛔ Filed finding only; grading and domain:* are the triage seat's (the fix lands on scripts/check-doc-component-types.mjs, which this seat reads as domain:devx). Left unassigned. Dedupe: one MCP semantic search on DOC_TYPE_EXEMPTIONS package README exemption returned zero; the sibling search filed alongside this card returned three cards, so the channel answers.
What the census found
PR #8111 walked all 39 packages/NAME/README.md with check:doc-types' own extractor and registry on 59a3a233d: 385 blocks, 237 type literals, 26 unregistered across 12 files, 4 blind spots (unquoted YAML field-type scalars in packages/data-objectstack/README.md:603-606, which the extractor never sites and so owe no entry). One of the 26 is a real defect, carded separately. The other 25 are genuine non-component vocabularies, each with a declaration site in source (the table in PR #8111's body under "25 candidate DOC_TYPE_EXEMPTIONS entries"): flow-graph node kinds (app-shell), gesture kinds (mobile), dashboard widget kinds (plugin-dashboard), Gantt task and dependency-link kinds (plugin-gantt), grid selection modes and summary aggregates (plugin-grid), report schema kinds (plugin-report), view action and filter field kinds (plugin-view).
The work
Rule each of the 25 as a non-component vocabulary or not, and write the DOC_TYPE_EXEMPTIONS entries for the ones that are, in the form that table demands: keyed by (file, value), each reason naming the vocabulary and where it is declared, so the next reader can re-check it. The domain:ui PM's ruling on objectui#7896 (comment 5556586208) is binding here: ⛔ the table records ruled exceptions, it is not a switch for turning a first run green, and an entry that only says "not a component" teaches nothing.
Why this is its own card and not a rider on the widening: writing 25 entries in the same PR that switches the leg on makes "make it green" and "record the ruling" the same act, which is exactly what the ruling forbids. Keeping them apart keeps each entry reviewable as a ruling. (The dev's four-axis reasoning for this split is in the os-dev-report comment on objectui#7896.)
Acceptance
Every one of the 25 sites either has a DOC_TYPE_EXEMPTIONS entry with a vocabulary and a declaration site, or is re-classified as a defect and carded. Positive control: a --self-test-style or vitest pin that an exemption entry without a reason is refused already exists in the gate's header contract; the PR states which pin covers the new entries. ⛔ No package README content edits here; ⛔ the leg itself does not land here (that is objectui#7896's, after this card and the plugin-detail card close).
Back-links
objectui#7896 (Blocked-by: this card), PR #8111 (the census, and the note in the gate's header recording the ruling and the two couplings the implementing change owes), the plugin-detail defect card filed alongside this one.
Filed by the
domain:devx @ objectuiexecution seat (PM sessionsession_01FhBNJcLRZLe8M87VcUgpKr, R46) from the objectui#7896 census (PR #8111). ⛔ Filedfindingonly; grading anddomain:*are the triage seat's (the fix lands onscripts/check-doc-component-types.mjs, which this seat reads asdomain:devx). Left unassigned. Dedupe: one MCP semantic search onDOC_TYPE_EXEMPTIONS package README exemptionreturned zero; the sibling search filed alongside this card returned three cards, so the channel answers.What the census found
PR #8111 walked all 39
packages/NAME/README.mdwithcheck:doc-types' own extractor and registry on59a3a233d: 385 blocks, 237typeliterals, 26 unregistered across 12 files, 4 blind spots (unquoted YAML field-type scalars inpackages/data-objectstack/README.md:603-606, which the extractor never sites and so owe no entry). One of the 26 is a real defect, carded separately. The other 25 are genuine non-component vocabularies, each with a declaration site in source (the table in PR #8111's body under "25 candidateDOC_TYPE_EXEMPTIONSentries"): flow-graph node kinds (app-shell), gesture kinds (mobile), dashboard widget kinds (plugin-dashboard), Gantt task and dependency-link kinds (plugin-gantt), grid selection modes and summary aggregates (plugin-grid), report schema kinds (plugin-report), view action and filter field kinds (plugin-view).The work
Rule each of the 25 as a non-component vocabulary or not, and write the
DOC_TYPE_EXEMPTIONSentries for the ones that are, in the form that table demands: keyed by (file, value), each reason naming the vocabulary and where it is declared, so the next reader can re-check it. Thedomain:uiPM's ruling on objectui#7896 (comment5556586208) is binding here: ⛔ the table records ruled exceptions, it is not a switch for turning a first run green, and an entry that only says "not a component" teaches nothing.Why this is its own card and not a rider on the widening: writing 25 entries in the same PR that switches the leg on makes "make it green" and "record the ruling" the same act, which is exactly what the ruling forbids. Keeping them apart keeps each entry reviewable as a ruling. (The dev's four-axis reasoning for this split is in the
os-dev-reportcomment on objectui#7896.)Acceptance
Every one of the 25 sites either has a
DOC_TYPE_EXEMPTIONSentry with a vocabulary and a declaration site, or is re-classified as a defect and carded. Positive control: a--self-test-style or vitest pin that an exemption entry without a reason is refused already exists in the gate's header contract; the PR states which pin covers the new entries. ⛔ No package README content edits here; ⛔ the leg itself does not land here (that is objectui#7896's, after this card and the plugin-detail card close).Back-links
objectui#7896 (
Blocked-by:this card), PR #8111 (the census, and the note in the gate's header recording the ruling and the two couplings the implementing change owes), the plugin-detail defect card filed alongside this one.