Skip to content

docs: re-fence the plugins and core remainder of objectui#5867 as ts, 17 blocks across 8 pages (batch 6) - #11176

Merged
objectstack-fleet[bot] merged 3 commits into
mainfrom
claude/issue-5867-plaintext-fenced-ts-batch6
Sep 30, 2026
Merged

objectstack-fleet[bot] merged 3 commits into
mainfrom
claude/issue-5867-plaintext-fenced-ts-batch6

Conversation

@objectstack-fleet

@objectstack-fleet objectstack-fleet Bot commented Sep 30, 2026 •

Copy link
Copy Markdown
Contributor

Part of #5867
Clause-②: no. Docs fences only; no accept set and no public surface moves. content/docs/** is a review face, so a same-form contract-review record on the landing head is owed before enqueue.

Batch 6 of objectui#5867's lane (a whole-page batch; the card stays open for batch 7). Every TypeScript block under content/docs/plugins/** and content/docs/core/report-schema.mdx that triage's classifier reads as code was fenced plaintext, so check-doc-snippet-types never compiled it. All 17 are now fenced ts. The gate then reddened 4 blocks; each is fixed so the example teaches correct code, and none is marked.

Session: https://claude.ai/code/session_01TdiauJaVCHuj45EzZGUxHh

Doc Fence Language Check: the 8 stale ledger rows are deleted (52f1267)

check:doc-fences keeps objectui#5867's remaining population as the shrink-only map KNOWN_UNHIGHLIGHTED_TS_FENCES in scripts/check-doc-fence-languages.mjs. It fails as STALE when a batch re-fences blocks without lowering the map in the same pull request.

On 73b9ae9 it flagged exactly the 8 pages this batch re-fenced: core/report-schema.mdx (7), and plugins/plugin-calendar (1), -chatbot (2), -dashboard (3), -gantt, -kanban, -map and -timeline (1 each).

Commit 52f1267 deletes exactly those 8 rows and adds nothing. The auto-mode classifier had refused the edit to the dev twice. The domain:devx seat made it on the maintainer's explicit authorization in the seat session, after auto mode was turned off.

At 52f1267:

  • node scripts/check-doc-fence-languages.mjs: exit 0. "every TypeScript block in 227 document(s) is fenced ts/tsx/typescript, except 72 declared file(s) carrying 72 block(s) of objectui#5867's remaining population", which is the batch-7 remainder below.
  • --self-test: 26 cases pass.

The batch: 17 blocks, 8 whole files

file blocks own-interface (separate count)
content/docs/core/report-schema.mdx 7 6
content/docs/plugins/plugin-calendar.mdx 1 0
content/docs/plugins/plugin-chatbot.mdx 2 0
content/docs/plugins/plugin-dashboard.mdx 3 0
content/docs/plugins/plugin-gantt.mdx 1 0
content/docs/plugins/plugin-kanban.mdx 1 0
content/docs/plugins/plugin-map.mdx 1 0
content/docs/plugins/plugin-timeline.mdx 1 0
total 17 6

The count of self-declared interface blocks is kept separate, per triage's execution note 2 (#6143 closed not_planned). Six of the 17 blocks are report-schema's interface listings: ReportField, ReportFilter, ReportGroupBy, ReportSection, ReportExportConfig and ReportScheduleConfig. They compile because they declare their own shape, so the gate's green on them is not coverage, and they were not re-shaped. The other 11 blocks are real coverage. The 10 plugins blocks import real exports from @object-ui/types, @object-ui/core and the plugin packages. The report-schema Complete Example annotates a literal with the imported ReportComponentSchema.

I also ran a throwaway parity probe outside the gate. It compared each of the six self-declared interfaces with the shipped type of the same name, for mutual assignability and an identical key set: tsc exit 0, so all six match today. Two must-fail controls each went red (exit 2): a flipped member value, and a dropped member. Nothing re-runs this probe, so it holds only for this head.

What the gate reddened, and the fixes

Round 1 was the re-fence alone, before any content edit: exit 1, Semantic phase: 696 of 696 block(s) judged, 4 failed.

  • plugin-gantt.mdx, TypeScript Support block: TS2322: Type '"object-gantt"' is not assignable to type '"object-grid"'. The block annotated an object-gantt node as ObjectGridSchema. It now uses ObjectGanttSchema, which declares type: 'object-gantt' and gantt?: GanttConfig, and which every other example on the page already imports. This is the objectui#5044 class: a reader copying the block wrote code that does not compile.
  • report-schema.mdx, Report Sections block: TS2304 on SchemaNode (twice), ChartSchema and ReportField. The block now imports them from @object-ui/types.
  • report-schema.mdx, Scheduling block: TS2304 on ReportExportFormat, now imported. The block also declared interface ReportSchedule, a name that no package exports. The shipped name is ReportScheduleConfig, and it is renamed. The gate could not see that fabricated name, because a self-declared interface compiles under any name.
  • report-schema.mdx, Complete Example: TS2304 on ReportComponentSchema, now imported.

Hazard 1 (an unresolved name degrades the annotation to any). After the import, the Complete Example compiled clean. That alone does not prove the annotation is live, so I ran an ablation with ablation-replace.mjs. The anchor hit 1 to 0 and the blob changed. The run was restored under a trap: blob equal to HEAD, git diff HEAD empty.

Hazard 2 (a parse failure hides the semantic phase). Syntax phase: every block parsed held on every run, so no block went uncompiled because it failed to parse.

Gate counts, before and after

Both readings run check-doc-snippet-types.mjs against the same built --build-filter closure (35/35 turbo tasks). The build filter was re-derived after the re-fence and is byte-identical.

reading base 0ffc423b1 head 73b9ae9 delta
documents scanned / covered / ungated 249 / 245 / 4 249 / 245 / 4 0 / 0 / 0
covered documents holding a ts/tsx block 128 129 +1 (plugin-dashboard, which held no ts fence before)
blocks to compile 679 696 +17 = batch size
declared fragments 156 156 0
diagnostics 0 0 0

At head: Every covered documentation snippet compiles against the built types.

Population, re-derived on main at 0ffc423b1 (triage note 1)

The snippet gate's own listDocuments (249 documents) was combined with the fence gate's run-length fence walk and triage's classifier, quoted there as classifiesAsTypeScript. The fence gate's install-free copy of the walk lists 227 documents. The difference is the snippet gate's own extra legs, and the two walks give the same population.

fence spellings read blocks / files
plaintext only 88 / 79
+ text + plain (the objectui#6135 widening) 89 / 80
+ txt + no info string 89 / 80

The widening adds exactly one block, content/docs/components/form/file-upload.mdx (a text fence). By group: components 72/72, plugins 10/7, core 7/1, fields / layout / blocks 0. The handbacks' UNGATED_DOCS row is now 0. UNGATED_DOCS names only four ADR and audit records today, so the six plugin pages earlier batches listed as ungated are covered, and re-fencing them moved blocks-to-compile.

Remainder for batch 7, measured at 73b9ae9: 72 blocks / 72 files, all content/docs/components/**

All 72 open with interface, so the whole remainder is in the #6143 own-interface count. A throwaway probe (all 72 re-fenced, gate run, restored under a trap with git status clean) gave: 768 to compile (696 + 72, so every re-fence landed in the population), every block parsed, 768 of 768 judged, 28 failed. All 70 diagnostics are TS2304 ambient names: SchemaNode x61, Day x8, ReactNode x1.

subgroup blocks / files compile untouched red (TS2304 only)
basic 9 / 9 9 0
complex 9 / 9 4 5 (SchemaNode x4 files, ReactNode in data-table)
data-display 8 / 8 7 1 (list)
disclosure 3 / 3 1 2
feedback 8 / 8 7 1 (empty)
form 16 / 16 15 1 (calendar: Day x8, a prose alias no package exports)
layout 8 / 8 0 8
navigation 1 / 1 0 1 (header-bar)
overlay 10 / 10 1 9
total 72 / 72 44 28

components/basic/text.mdx is excluded while PR #11069 touches it. file-upload.mdx carries its own labelled line in the fence map.

Verification (all at 73b9ae9, tree clean; heavy runs through the shared verify lock; exit codes captured by redirect before any pipe)

  • check-doc-snippet-types: exit 0, counts above.
  • check:doc-fences: exit 1, the 8 STALE entries above and nothing else.
  • check:doc-types: exit 0, Every documented component type is registered.
  • check:doc-examples: exit 0, Every covered @example compiles, or fails exactly as its ledger row declares.
  • docs:check-links: exit 0, Links are valid across 17 scan roots.
  • check-doc-example-ids, check-prompt-component-keys, check:docs-route-closure: exit 0 each.
  • check:control-bytes: exit 0, OK (scanned 9534 tracked text file(s); skipped 85 binary). A self-scan of the 8 changed files for control bytes had 0 hits.
  • check:new-line-citations: 0 new citation(s).
  • Changeset, checked with the gate rather than assumed: 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 file is added.
  • Tests that read these pages, derived rather than recalled. The population is the union of markdown-test-inputs.mjs --list, which covers every tree-wide content/docs/** reader plus each page's named readers, and a git grep for the 8 page names. Root vitest, never package-scoped: Test Files 32 passed (32), Tests 1077 passed (1077).
  • Lint, narrowed and proven. From eslint's own config, --format json on the 8 files gives 8 results, 0 errors, and 8 File ignored because no matching configuration was supplied, because eslint.config.js matches only **/*.{ts,tsx}. Type-aware linting is off (no project / projectService), so this diff cannot change the verdict on any untouched file. Repo-wide pnpm lint is left to CI.
  • Render: NOT MEASURED. The site build was not run. Seven of the eight pages already render other ts fences through the same highlighter. plugin-dashboard.mdx held none before, but the same pipeline renders ts on the 128 other covered documents that hold one. This is a reasoned expectation, not a reading.

Acceptance notes

  • Hypotheses checked. H1 is partly falsified: components hold 72 blocks (not 71), core 7 (not 11), and fields is empty; plugins 10/7 was the other open group. H2 is confirmed but small: text/plain add exactly 1 block, and plain, txt and the empty info string add 0.
  • The report-schema ReportSchedule rename and the gantt ObjectGridSchema correction are both changes a reader would copy. Neither was visible to any gate before this batch.

Generated by Claude Code

…s and core remainder (objectui#5867 batch 6)

Every block in content/docs/plugins/** and content/docs/core/report-schema.mdx
that triage's classifier reads as code is now fenced ts, so
check-doc-snippet-types compiles it. The gate then reddened four blocks, and
each is fixed rather than marked:

- plugin-gantt.mdx annotated an object-gantt node as ObjectGridSchema, whose
  type literal is 'object-grid' (TS2322). It now uses ObjectGanttSchema, the
  type every other example on the page already imports.
- report-schema.mdx's ReportSection and scheduling blocks referenced
  SchemaNode, ChartSchema, ReportField and ReportExportFormat without importing
  them (TS2304); each block now imports what it names.
- the scheduling block declared an interface named ReportSchedule, a name no
  package exports; the shipped name is ReportScheduleConfig.
- the Complete Example annotated ReportComponentSchema without importing it.

Claude-Session: https://claude.ai/code/session_01TdiauJaVCHuj45EzZGUxHh
Co-authored-by: Claude <noreply@anthropic.com>
@github-actions github-actions Bot added the documentation Improvements or additions to documentation label Sep 30, 2026
@github-actions

github-actions Bot commented Sep 30, 2026 •

Copy link
Copy Markdown
Contributor

changeset-claim-re-read

⚠️ 13 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/10393-retire-bare-map-key.md

  • names plugins/plugin-map.mdx → content/docs/plugins/plugin-map.mdx — edited by this change

    The @object-ui/plugin-map README now describes one registered type, and its sentence claiming a bare array under data reaches the in-memory adapter is corrected: a bare array under data is not a record source on the map (objectui#8348), so inline rows belong under staticData. The same false claim is corrected on the two docs pages that carried it, plugins/plugin-map.mdx and fields/location.mdx.

.changeset/6121-retire-report-data-source.md

  • names content/docs/core/report-schema.mdx → content/docs/core/report-schema.mdx — edited by this change

    The TypeScript face — both keys become ?: never rather than being deleted, so an author who still writes one gets a tsc error at the authoring site instead of a silently stripped key. They were annotated DataSource / DataSource[], the runtime ADAPTER interface (find(resource, params)), which no JSON document can author; that mis-annotation is the defect objectui#6121 was filed for, since every example on content/docs/core/report-schema.mdx authored a config object against it.

.changeset/6169-chatbot-authoring-face-type.md

  • names content/docs/plugins/plugin-chatbot.mdx → content/docs/plugins/plugin-chatbot.mdx — edited by this change

    Out of scope, deliberately: the chatbot-enhanced and chatbot-floating registrations' own anonymous intersections (different key sets, a decision for a separate card in the same family), and the surface row on content/docs/plugins/plugin-chatbot.mdx's Properties table, which names a key no registration in this package currently reads (filed separately).

.changeset/6475-gantt-block-face-declared.md

  • names content/docs/plugins/plugin-gantt.mdx → content/docs/plugins/plugin-gantt.mdx — edited by this change

    Maintainer ruling, objectui#6475 (2026-08-27), Option A — enforce as-is, immediately, no warning window (the startup-stage no-gradualism rule, objectstack#12668: transitions do not get phased windows without named external-user evidence, and none exists here). A census of every gantt block reachable through ObjectGanttSchema in this repository — the examples/schema-catalog fixtures, content/docs/plugins/plugin-gantt.mdx, and the published skills/objectui/guides/page-builder.md guide — found zero blocks missing the trio.

.changeset/6687-chatbot-surface-authorable.md

  • names content/docs/plugins/plugin-chatbot.mdx → content/docs/plugins/plugin-chatbot.mdx — edited by this change

    content/docs/plugins/plugin-chatbot.mdx's Properties table listed surface ('card' | 'plain', "bordered panel or a frameless full-page workspace"), but the key had zero read points: none of the three ComponentRegistry.register('chatbot*', ...) sites in renderer.tsx forwarded it, and ChatbotSchema did not declare it. surface was real only as a prop of the React component — ChatbotEnhanced.tsx defines ChatbotSurface, defaults it to 'card', and branches six layout decisions off isPlainSurface — so it was reachable by a hand-written React host and by nobody writing metadata. An author who wrote surface: 'plain' got the 'card' default, with no error and no signal.

.changeset/6896-retire-chart-inline-data.md

  • names content/docs/core/report-schema.mdx → content/docs/core/report-schema.mdx — edited by this change

    ⚠️ One correction to the record the ruling rests on. The ruling states zero authorship of a populated series[].data outside tests across packages/ / apps/ / examples/. The re-measurement finds one such site inside those roots — packages/types/examples/data-display-examples.json (2 series) — plus four outside them, in documentation: content/docs/api/schema-reference.md (3) and content/docs/core/report-schema.mdx (1).

.changeset/7295-chat-message-avatar-keys.md

  • names content/docs/plugins/plugin-chatbot.mdx → content/docs/plugins/plugin-chatbot.mdx — edited by this change

    Same precedent as CheckboxSchema.wrapperClass (b74a8598d) and the objectui#6150 batch. RuntimeOnlyMessageKeys in plugin-chatbot is untouched; SeamChatMessage inherits the two keys through its ChatMessage half. The three example blocks on content/docs/plugins/plugin-chatbot.mdx that PR docs(guides,plugins,tooling): clear three .mdx pages off the doc-snippet ledger (#5174 batch 5) #7294 left unannotated (supportChat, salesBot, multiAgentChat) are annotated ChatbotSchema again.

.changeset/7313-object-calendar-record-source.md

  • names content/docs/plugins/plugin-calendar.mdx → content/docs/plugins/plugin-calendar.mdx — edited by this change

    A widening. A node authoring staticData or data without objectName now validates (it always rendered — the read is resolveRecordSourceConfig(schema), keyed on the three). Every document that validated before still validates: objectName alone still parses, an empty one included, because presence is !== undefined. The one shape the refinement refuses (none of the three) was refused before too, at objectName. The two static-data examples in content/docs/plugins/plugin-calendar.mdx are now annotated ObjectCalendarSchema and compile under the doc-snippet gate.

.changeset/7703-chatbot-dark-keys-retired.md

  • names content/docs/plugins/plugin-chatbot.mdx → content/docs/plugins/plugin-chatbot.mdx — edited by this change

    content/docs/plugins/plugin-chatbot.mdx gains the restatement of the six removed keys with their replacements (5f4514f7b: a control is restated, never deleted into a vacuum), and its three present-tense claims that the chatbot-floating props spread is still unfiltered are corrected to what PR fix(plugin-chatbot): fence chatbot-floating's raw props spread #8077 actually left behind.

.changeset/8221-retire-legacy-string-sort.md

  • names content/docs/plugins/plugin-map.mdx → content/docs/plugins/plugin-map.mdx — edited by this change

    Director ruling, decision batch Release v0.2.1 with changeset automation #77 (2026-09-07), option B. Three faces disagreed about one key: @object-ui/core implemented the string clause on purpose (sort-query.ts, docblock and all), content/docs/plugins/plugin-map.mdx taught it as sort?: string | SortConfig[], and the html tier answered type-mismatch for it because all seven sort registrations publish type: 'array' alone — while @objectstack/spec refuses the string outright on element-record-picker. Option A (per-block string arms) was rejected by name: it would make one key mean different things on different blocks.

.changeset/8516-8556-mirror-partial-record-narrowing.md

  • names content/docs/core/report-schema.mdx → content/docs/core/report-schema.mdx — edited by this change

    • grid nodes carrying an object-valued columns — 10 authored sites (nine in content/docs, examples/schema-catalog and skills/objectui, one in apps/site), all keyed inside the six breakpoints. Every out-of-vocabulary key in either tree sits in a test fixture written to document the defect, or in objectui#8505's changeset quoting it. - exportConfigs — one authored site, content/docs/core/report-schema.mdx, keyed pdf / excel / csv, all in vocabulary. None in objectstack.

.changeset/8760-unfulfilled-chart-stubs.md

  • names content/docs/plugins/plugin-dashboard.mdx → content/docs/plugins/plugin-dashboard.mdx — edited by this change

    • At render. SchemaRenderer's lazy branch re-checks hasLazy(type) on every pass and returns the Loading ANGLE-BRACKETS(type)… placeholder. Registry.register() deletes a lazy entry only for keys the loaded module actually registers, so for an unfulfilled key the entry SURVIVES the load and every later pass takes the same branch. Measured on b775500af through the real chain: { "type": "line-chart" } painted role="status" / data-lazy-loading="line-chart" / Loading line-chart…, permanently. Not the OBJUI-001 panel the card expected — no alert, no error, no console warning. A skeleton that never resolves reads to a user as a slow network. - At authoring. A stub is enough to put a key into getKnownTypes(), so check:doc-types and the CLI's generated KNOWN_SCHEMA_TYPES snapshot both blessed all three. content/docs/plugins/plugin-dashboard.mdx taught "type": "line-chart" inside a card body, and every gate was green on it.

.changeset/8802-8257-8008-kanban-gantt-family-retirement.md

  • names content/docs/plugins/plugin-kanban.mdx → content/docs/plugins/plugin-kanban.mdx — edited by this change

    The diagnostic's remedy text moves from a tag to a component. It used to end "render ANGLE-BRACKETS(kanban-ui) from a React host that passes onQuickAdd". That sentence is falsified by this change: kanban-ui is no longer a node type key, so a page written to the old advice draws unknown-component. It now names KanbanRenderer from @object-ui/plugin-kanban — still exported, still forwarding both halves by identity — which is the surviving way to get the pair. content/docs/plugins/plugin-kanban.mdx says the same thing the same way.

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.

Angle-bracketed names in the quoted prose above are rewritten as ANGLE-BRACKETS(name): GitHub deletes tag-shaped fragments from a stored body, and a quote that silently loses the identifier it is about is worse than a visible repair.

Compared the checked-out tree with 9419df198 (merge-base with origin/main): 9 file(s) changed outside .changeset/, read against 1804 pending declaration(s) that publish a body (2414 pending in total). · run

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

One red, and what clears it. domain:devx seat 2 (objectui#10917), session_01TdiauJaVCHuj45EzZGUxHh, 2026-09-30T07:12Z.

  • CI on 73b9ae9: 35 success, 3 skipped, and 1 failure, Doc Fence Language Check. Doc Snippet Type Check and every other check are green.
  • Cause: this PR's own re-fence. scripts/check-doc-fence-languages.mjs KNOWN_UNHIGHLIGHTED_TS_FENCES still lists the 8 batch pages (lines 438–445 on main), each now at 0 unhighlighted TS fences. The gate reports them STALE, and its remedy is to delete those 8 rows (a shrink-only ledger).
  • Blocker: the maintainer authorised the deletion (objectui#5867 5905984416), but this session's classifier refused the edit twice ([Modify Shared Resources]). Per the authorisation's fallback, the maintainer makes the 8-row deletion by hand on this branch (details in objectui#5867 5906087961). This seat does not route it any other way.
  • Next: on the head after that push, this seat confirms the fence check green and nothing else moved. Then it takes the contract-review record at tier (a content/docs/** review face), and ready plus the queue. The PR stays draft until then.

…e-fenced (#5867)

Batch 6 re-fenced every TypeScript block on core/report-schema.mdx and the
seven plugin pages, so their shrink-only baseline rows now read as STALE.
Delete exactly those 8 rows and add nothing. check:doc-fences is green
over 72 remaining files / 72 blocks (the batch-7 remainder), and the
checker's self-test passes (26 cases).

Claude-Session: https://claude.ai/code/session_01TdiauJaVCHuj45EzZGUxHh
Co-authored-by: Claude <noreply@anthropic.com>
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Spec Main Shape Gate is red on 52f1267, and it is not this PR's. Read at 2026-09-30T11:54Z by the domain:devx seat 2 stay-behind (session_01TdiauJaVCHuj45EzZGUxHh).

…batch6

Brings in objectui#11210 (the computed strip reason), the repair for the
Spec Main Shape Gate red that every objectui run carried since objectstack
b2805465. A pull_request re-run compiles its original merge ref, so the
base has to come in as a commit.

Claude-Session: https://claude.ai/code/session_01TdiauJaVCHuj45EzZGUxHh
Co-authored-by: Claude <noreply@anthropic.com>
@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: d7a9fc17bae27a7e690434de98cfb4a6d21a3b95
Local-runs: none

Read-only, as the brief prescribes: card objectui#5867 (body and all 26 comments), PR #11176 (body, its 3 comments including the changeset-claim-re-read bot comment 5905479659, the 9-file list and the net diff against the merge base 9419df198), the head's blobs through git show, and the 40 check-runs on this head. Nothing built, run or re-run. Check-runs on d7a9fc17: 37 success, 3 skipped (Test (coverage), the coverage shard matrix, dependabot), 0 failure, 0 in progress; Doc Snippet Type Check, Doc Fence Language Check, Spec Main Shape Gate, Changeset Declaration, Changeset Fixed Group Check, Build Docs, Type Check, Lint, Test (shard 1-8) and Test (dist pins) are all success.

① Derived judgments

  1. 17 plaintext to ts re-fences on 8 whole pages (report-schema 7; plugin-calendar 1; plugin-chatbot 2; plugin-dashboard 3; plugin-gantt, -kanban, -map, -timeline 1 each). Every re-fenced block opens with import or interface, i.e. it sits inside triage's classifier (card comment 5389690121); no prose block was re-fenced, and none of the 11 content/docs files the claim excluded (5905138724) is in the diff. Right. The dev's snippet-gate reading is blocks-to-compile 679 to 696, +17 = batch size, covered/ungated/fragments unchanged, 0 diagnostics; Doc Snippet Type Check is success on this head.

  2. plugin-gantt, TypeScript Support block: ObjectGridSchema replaced by ObjectGanttSchema on both the import and the annotation of the type: 'object-gantt' node. ObjectGanttSchema is exported from packages/types/src/objectql.ts and declares gantt?: GanttConfig (the pending 6475-gantt-block-face-declared changeset). Right - the objectui#5044 class: the old block taught a TS2322 to any reader who copied it.

  3. report-schema, Report Sections block: gains import type { ChartSchema, ReportField, SchemaNode } from '@object-ui/types'. All three are exported at the merge base (data-display.ts, reports.ts, base.ts). Right.

  4. report-schema, Scheduling block: gains import type { ReportExportFormat } (exported from reports.ts) and renames the self-declared interface ReportSchedule to ReportScheduleConfig, the shipped name. I compared the self-declared body with export interface ReportScheduleConfig at the merge base: the same ten optional members, the frequency literal union equal to ReportScheduleFrequency, formats?: ReportExportFormat[]. Right.

  5. report-schema, Complete Example: gains import type { ReportComponentSchema } (exported). The dev's ablation (frequency: 'fortnightly' reddens as TS2322 against ReportScheduleFrequency) shows the annotation is live rather than degraded to any. Right.

  6. The six self-declared interface blocks (ReportField, ReportFilter, ReportGroupBy, ReportSection, ReportExportConfig, ReportScheduleConfig) are counted separately, not re-shaped, and claim no coverage - triage's execution note 2 on this card (finding(docs): component reference pages declare their own interface, so the doc-snippet gate can never see the props they invent — 4 measured on the 5 pages #6122 PR 2 touched alone #6143 closed not_planned). Right. I re-read each against packages/types/src/reports.ts at the merge base: ReportFilter, ReportGroupBy, ReportSection and ReportExportConfig are member-for-member identical (the doc spells ReportExportFormat's union inline on format); ReportField's members match, with aggregation spelled as ReportAggregationType's literal union. The dev's tsc parity probe agrees.

  7. scripts/check-doc-fence-languages.mjs: exactly the 8 rows for the 8 batch pages are deleted from KNOWN_UNHIGHLIGHTED_TS_FENCES (7+1+2+3+1+1+1+1 = 17 = batch size), 0 lines added, no other line of the file moves; 72 rows remain, all content/docs/components/**. The map is shrink-only by its own docblock ("lower the number here - deleting the line when it reaches 0"), so this tightens the fence gate on those 8 files and moves no public surface. Doc Fence Language Check is success on this head. Right.

  8. Accept set: nothing moves. No packages/** file, no zod schema, no export and no registration is in the diff. Public surface: nothing moves. content/docs/** and a repo-root script are in no released package's files. Type Check, Build & E2E, Test (shard 1-8) and Test (dist pins) are success on this head.

  9. The 13 pending changeset bodies the re-read bot names (5905479659) were each read against the diff. None of their claims goes false: the pages' prose and examples are byte-identical apart from the four fixes above, and the one claim that touches a changed block - 6475-gantt-block-face-declared's "a census of every gantt block reachable through ObjectGanttSchema ... found zero blocks missing the trio" - stays true, since the gantt TypeScript Support block, now reachable through ObjectGanttSchema, carries startDateField, endDateField and titleField. No body correction is owed.

  10. The merge commit d7a9fc17 brings origin/main at 9419df198 (objectui#11210, the computed strip-reason repair) into the branch; the net diff against the merge base is the 9 files above and nothing else. Right.

② Semver level

The diff publishes nothing from any released package: 8 content/docs/** pages plus one repo-root gate script. No .changeset/*.md is added and none is owed - Changeset Declaration and Changeset Fixed Group Check are success on this head, and the dev's local reading of check-changeset-presence says the same ("no changeset is owed"), which is the authority objectui's own rule names for this question. No version bump, no major, no arm.

Clause-②: no in the PR body, with no (widening)/(narrowing) arm, is the declaration that matches the diff. Matches. (An empty-frontmatter changeset, as batch 5 wrote, would also be a legal declaration; it is not required when the gate itself reports nothing owed.)

③ Boundary flags

  • open_questions on the batch-6 report (5905522245): "Who deletes the fence gate's STALE map lines?" - Answered. The maintainer authorised option A verbatim ("Authorize (Recommended)", recorded at 5905984416), the classifier refused the dev twice (5906020990, 5906087961), and the deletion landed on this branch as 52f1267: exactly the 8 zero-count rows, nothing added, gate logic untouched, which is what the authorisation constrained. Noted, not blocking: the authorisation asked the commit to cite it and 52f1267's message does not; the PR body carries the citation instead. The standing rule for later batches (delete own zero-count rows only) is on the card.
  • Dev flag "Render: NOT MEASURED" (site build not run locally). Answered by the head's check-runs: Build Docs is success on d7a9fc17, so the docs site built with these pages in CI. The shiki-span count earlier batches used as their render bar is not a gate and was not measured; 7 of the 8 pages already rendered ts fences through the same highlighter, and plugin-dashboard's first ts fence goes through the pipeline that renders the other 128 covered documents. Accepted as a reasoned expectation: the only reader-visible delta is highlighting, and the fence gate confirms the spellings.
  • Dev flag, Hazard 1 characterisation: a misspelt top-level key on ReportComponentSchema compiles because BaseSchema carries an open index signature. Answered, out of scope: this is finding(docs): component reference pages declare their own interface, so the doc-snippet gate can never see the props they invent — 4 measured on the 5 pages #6122 PR 2 touched alone #6143's measured property, closed not_planned, with unknown-key rejection placed at the zod boundary by finding(types): BaseSchema's [key: string]: any leaves every component schema open, so a "declare the surface" fix can never reject a misspelled TOP-LEVEL key #5155's ruling; not this PR's to change.
  • Dev flag: the parity probe of the six self-declared interfaces holds only at this head; nothing re-runs it. Answered: triage note 2 makes the separate count the remedy, and ① item 6 re-reads the members against the shipped types at the merge base. Later drift is the finding(docs): component reference pages declare their own interface, so the doc-snippet gate can never see the props they invent — 4 measured on the 5 pages #6122 PR 2 touched alone #6143 class, outside this card.
  • Dispatch-order boundaries (5905138724): scripts/check-doc-snippet-types* is untouched; no FRAGMENT_MARKER and no exclude was added (all four reddened blocks are fixed); none of the excluded content/docs files is in the diff; the order's broader bar on editing check-doc-fence-languages.mjs was lifted by the maintainer's authorisation above. Answered.
  • Spec Main Shape Gate red on 52f1267 (PR comment 5910710592) was an unrelated objectstack change; the merge commit brought in objectui#11210 and the gate is success on this head. Answered.
  • Tests that read these pages: the dev derived 32 root-vitest files (1077 tests passed at 73b9ae9); Test (shard 1-8) and Test (dist pins) are success on this head. Answered.
  • Out-of-scope findings (batch-7 remainder: 72 own-interface blocks in content/docs/components/**, 28 red on TS2304 only; the stale UNGATED_DOCS row in batch 5's handback): carriers named (batch 7 of this card); nothing owed on this PR.

No flag is left unanswered and none needs escalation.

Implemented-by: claude/issue-5867-plaintext-fenced-ts-batch6
Reviewed-by: session_01TdiauJaVCHuj45EzZGUxHh

VERDICT: PASS

@objectstack-fleet
objectstack-fleet Bot marked this pull request as ready for review September 30, 2026 13:23
@objectstack-fleet
objectstack-fleet Bot added this pull request to the merge queue Sep 30, 2026
Merged via the queue into main with commit 340dc71 Sep 30, 2026
42 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/issue-5867-plaintext-fenced-ts-batch6 branch September 30, 2026 13:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants