Repository navigation
finding(docs): 22 of 198 json-tagged fences under content/docs fail JSON.parse — and the one gate that reads them normalizes exactly those two shapes away #10088
Description
Activity
- addeddomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatobjectui ui stream: fix lands on the published library or apps — objectui execution seat
on Sep 20, 2026 objectstack-fleet commented
on Sep 28, 2026 ContributorMore actionsClaim: PM loop round 1
Session:session_01EBx9rvB7dufCz4at53x35U
Account:huangyiirene(the seat's linked user asget_meanswers it; the card's assignee)
Branch:claude/issue-10088-json-fences-parse
Worktree:objectui-issue-10088
Domain:domain:devx
Seat: domain:devx#2
File surface: thejson-tagged fences that failJSON.parseundercontent/docs/**(PM probe, a lead only:guide/expressions.md,guide/layout.md,utilities/runner.mdx,fields/location.mdx,guide/deployment.md,guide/record-edit-modes.md,guide/schema-rendering.md,guide/troubleshooting.md,plugins/index.md,utilities/vscode-extension.mdx) plus the ONE existing gate that reads those fences, if its normalisation is what hides them (strengthened, not a new gate) (stop on breach; explain in the report) — amended in the same round as the delivery (bounded in-place exemption, named in PR objectui#10942):packages/types/src/__tests__/page-actions-refusal-7926.test.ts(it pinned the exact count of the unparseableguide/layout.mdfences this card fixes, 4 → 0) and.changeset/10088-json-fences-parse.md(empty frontmatter, owed because that test sits undersrc/); REWORK round 1 (contract review5867033932) addsCONTRIBUTING.md(one paragraph in### Writing Documentationnaming thejson/jsoncfence convention)
Container & model:M,mode:subagent, model: opus (default tier; no path-derived mandate forcontent/docs/**orscripts/)
Clause-②: no — published docs examples and a repo gate; no accept set or public contract surface moves
Thread-read: none
Serial constraints cleared:GET /pulls/{n}/filesover all 22 open objectui PRs (2,016 filenames examined, read before this claim): the docs pages open PRs touch areplugins/plugin-view.mdx(objectui#10937),guide/dashboard-filters.md(#10930),plugins/plugin-timeline.mdx(#10901),plugins/plugin-grid.mdx(#10278) — none is on this card's list; no open PR touches adoc-snippet/doc-examplegate script.Premise re-checked at claim time on
origin/main733fd5ac65(PM probe, re-measure owed by the dev): 209json-tagged fences undercontent/docs, 24 fail a strict JSON parse (the card read 22 of 198 on 2026-09-20); control — the same parser rejects a trailing comma.
Generated by Claude Code
objectstack-fleet commented
on Sep 28, 2026 ContributorMore actionsos-dev-report
{
"issue": 10088,
"status": "done",
"branch": "claude/issue-10088-json-fences-parse",
"pr": "#10942",
"session": "session_01EBx9rvB7dufCz4at53x35U — subagent, so this is the parent seat's id",
"premise_still_valid": true,
"summary": "Everyjsonfence under content/docs now passes a strict JSON.parse: 203 fences, 0 failing at head f1edd2d, down from 21 of 203 at base 733fd5a. Everyjsoncfence parses as JSONC: 11 fences, 0 failing under both parseJsonFence(…,'jsonc') from check-skill-examples.mjs and jsonc-parser. The convention is the one scripts/check-skill-examples.mjsparseJsonFencealready states:jsonmeans strict JSON.parse;jsoncmeans comments and trailing commas removed, then one document. Fixes by shape: raw newlines in a ${…} string go onto one line; bad/good pairs split into one fence per document with their labels moved above;[...]/"..." elisions are removed; the package.json excerpt is wrapped in braces; comments that carry information the page states nowhere else are kept and the fence is retaggedjsonc, while comments the page already states are dropped. Counter-examples still parse, because each one's fault is semantic, not syntactic. I did not tighten the carriage gate. Its tolerances are there for a documented reason, and tightening it would make JSON validity blocking through an existing test pin, which is a gate-strength decision the card reserves (see open_questions). page-actions-refusal-7926.test.ts pinned layout.md's 4 unparseable fences by exact count; it now pins 0, so those 4 page nodes are judged.",
"premise_readings": {
"H1": "PARTLY FALSIFIED. My instrument walks git ls-files content/docs (.md/.mdx), pairs fences with scripts/markdown-fence-scan.mjs, and runs strict JSON.parse where the lang is exactlyjson. The control ran in the same command: {"a":1,} REJECTED, {"a":1} ACCEPTED. Base 733fd5a: 184 files, 203 json fences, 21 failing (expressions.md 9, layout.md 4, runner.mdx 4, deployment.md 1, schema-rendering.md 1, plugins/index.md 1, vscode-extension.mdx 1). The PM probe's 209/24 also counted the 6jsoncfences, 3 of which fail strict parse. fields/location.mdx and record-edit-modes.md are correctly tagged jsonc and parse as JSONC. troubleshooting.md:369 was a jsonc fence holding 3 documents; it failed both JSONC instruments and was fixed in-surface.",
"H2": "The gate is scripts/check-doc-expression-carriage.mjs, the report-only census. HOLDS but understated: it normalises FIVE shapes the 21 used, not two. They are comments (tolerance 1), raw newlines (2), elisions (4), the object-body retry, and several top-level documents (splitTopLevel), and it applies them to json and jsonc alike. At base it printed "231 json/jsonc fence(s), 231 parsed, 0 UNPARSED (1 parsed as an object body)". Tightening it is NOT an honest strengthening inside this lane, for two reasons. (1) Its header states the purpose: judge ${…} carriage inside annotated fences, and "reaches 0 unparsed over the whole tree, which takes four tolerances". (2) Its test "has no blind spot on the corpus it ships against" asserts census.unparsed is empty, and it runs on every content/docs PR (markdown-test-inputs --changed names all 8 touched pages, so ci.yml runs the full test job). Strict json would therefore BLOCK merges on non-JSON json fences, which is the gate-strength call the card reserves.",
"H3": "HOLDS. Of the 21: 6 are annotated JSON whose comment is the page's only statement of something, so the fix is a retag to jsonc; 5 have raw newlines, which no dialect admits, so the fix is one line; 4 are multi-document bad/good fences, split with labels moved above; 4 are layout elisions plus comments, fixed with [] and the comments dropped (the page's Schema API block states them); runner.mdx:292 has "..." members, which were removed; runner.mdx:213 is an object body, now wrapped. No fence was a JSON typo."
},
"per_fence": [
"guide/deployment.md:277 · // file-name caption · retag · jsonc",
"guide/expressions.md:223 · inline // member note · retag · jsonc",
"guide/expressions.md:337 · raw newlines in ${…} · one line · json",
"guide/expressions.md:351 · raw newlines in ${…} · one line · json",
"guide/expressions.md:364 · raw newlines in ${…} · one line · json",
"guide/expressions.md:380 · raw newlines in ${…} · one line · json",
"guide/expressions.md:529 · // Bad label + doc + dangling // Good label · labels moved above their blocks · json",
"guide/expressions.md:673 · bad/good pair, 2 docs + // labels · split, labels above · json x2",
"guide/expressions.md:687 · bad/good pair · split · json x2",
"guide/expressions.md:701 · bad/good pair · split · json x2",
"guide/layout.md:237 · // comment + [...] · comment dropped, [] · json",
"guide/layout.md:507 · 3x [...] · [] · json",
"guide/layout.md:660 · 2x // comment + [...] · comments dropped, [] · json",
"guide/layout.md:743 · // comment + [...] · comment dropped, [] · json",
"guide/schema-rendering.md:273 · raw newlines in ${…} · one line · json",
"plugins/index.md:355 · trailing // standing for elided keys · retag · jsonc",
"utilities/runner.mdx:213 · package.json member excerpt (object body) · wrapped in braces · json",
"utilities/runner.mdx:246 · trailing // standing for elided keys · retag · jsonc",
"utilities/runner.mdx:292 · 3x "..." elision members · removed · json",
"utilities/runner.mdx:496 · // file-name caption · retag · jsonc",
"utilities/vscode-extension.mdx:187 · // Error counter-example note · retag · jsonc",
"guide/troubleshooting.md:369 (was jsonc, 3 docs; in claim file surface) · split, labels above · json x3",
"content/docs/releases/: no failing fence there; untouched"
],
"tests": "All at final head f1edd2d (after merging origin/main 29c76e5). Strict-parse instrument: json 203 fences, 0 FAIL; controls lit both ways. JSONC instrument: jsonc 11, 0 FAIL under parseJsonFence and jsonc-parser; controls lit (comment ACCEPTED; [...] and 2 docs REJECTED). Under os-verify-lock:pnpm exec vitest run --maxWorkers=2over the 25 ledger readers of the touched pages from markdown-test-inputs readersByEntry, plus 5 grep neighbours, gave "Test Files 30 passed (30) / Tests 1173 passed (1173)", VERDICT command-exit 0, 0 skipped.pnpm --filter @object-ui/types type-checkVERDICT command-exit 0; tsconfig.test.json --listFiles counts the changed test (1). Carriage census after: "236 json/jsonc fence(s), 236 parsed, 0 UNPARSED", "json 221; jsonc 15", "417 node(s) … 68 ${…} site(s) … 65 of them carried", identical to base; findings identical modulo line numbers. Ablation via objectstack scripts/ablation-replace.mjs from committed f957ff9: anchor\"children\": []x1 in layout.md replaced by\"children\": [...](anchor 1 to 0, blob 570a150066be to c26fd61cea62, grep of the planted text = 1). page-actions-refusal-7926 went RED: "expected [ Array(1) ] to deeply equal []" naming layout.md:660, Tests 1 failed | 10 passed. Restored: "blob == HEAD (570a150066be) and git diff HEAD is empty". Observed direction: turned red, as predicted.",
"gates": {
"check:doc-fences": "exit 0 — every TypeScript block in 227 document(s) is fenced ts/tsx/typescript (shrink-only debt unchanged)",
"check:doc-types": "exit 0 — Every documented component type is registered",
"check:doc-example-ids": "exit 0 — 414 real reference(s) all resolve",
"check:doc-example-readers": "exit 0 — OK",
"check:control-bytes": "exit 0 — OK (9182 tracked text files); self-scan grep of the 10 changed files: 0 hits",
"check:new-line-citations": "exit 0 — VERDICT 0 new citation(s)",
"docs:check-links": "exit 0 — Links are valid across 17 scan roots",
"check-changeset-presence": "exit 0 — 1 changeset, EMPTY frontmatter (the one src/ file is a test)",
"check-changeset-no-major": "exit 0",
"check-doc-expression-carriage (census)": "exit 0 — 236 parsed, 0 UNPARSED, Blind spot: none",
"check-governed-queue-guard --test": "NOT GOVERNED — 10 paths, none matched",
"vitest (30 page-reading files)": "Test Files 30 passed (30), Tests 1173 passed (1173)",
"type-check @object-ui/types": "exit 0",
"check:doc-snippets": "NOT MEASURED — reason: THE GATE COULD NOT RUN, 34 packages unbuilt (dist .d.ts absent). Declared narrowing, measured: scanFences(check-doc-snippet-types.mjs) returns identical ts/tsx/typescript blocks (body, quote depth, fragment-marker binding) at base and head across all 8 touched pages, 52 blocks of which 28 fragment-declared; control lit (a detached marker reads as changed). CI runs it in full.",
"check:doc-examples": "NOT MEASURED — same prerequisite (unbuilt packages); it judges ts fences only and no ts fence changed (same proof).",
"CI": "in_progress / not awaited, per contract"
},
"line_budget": "n/a — no skills/ or ledgered budget file touched; diff vs merge-base 29c76e5: 10 files, +74 / -72",
"files_changed": [
".changeset/10088-json-fences-parse.md",
"content/docs/guide/deployment.md",
"content/docs/guide/expressions.md",
"content/docs/guide/layout.md",
"content/docs/guide/schema-rendering.md",
"content/docs/guide/troubleshooting.md",
"content/docs/plugins/index.md",
"content/docs/utilities/runner.mdx",
"content/docs/utilities/vscode-extension.mdx",
"packages/types/src/tests/page-actions-refusal-7926.test.ts"
],
"deviations": [
"PM suggested route not taken: the carriage gate was NOT tightened (see premise_readings.H2). The decision is raised in open_questions, as the card's acceptance requires.",
"Outside the named file surface: packages/types/src/tests/page-actions-refusal-7926.test.ts. It pinned the exact count (4) of the layout.md fences this card fixes, so the count had to move (now 0, blind list printed on failure). .changeset/10088-json-fences-parse.md (empty frontmatter) was required by check-changeset-presence because that test sits under src/.",
"guide/troubleshooting.md:369 is a jsonc fence, outside the PM's "tagged json" population but inside the claim's file surface. Fixed in place under the bounded exemption: same defect class (its tag's grammar rejects the body), mechanical split with a pinned shape, file claimed, same gate family.",
"PM gate list lead corrected: "Docs-only PRs can skip the CI test shards" does not hold for content/docs. scripts/markdown-test-inputs.mjs --changed names all 8 touched pages, so the ci.yml test job runs everything.",
"check:doc-snippets and check:doc-examples NOT MEASURED locally (unbuilt packages); a declared, measured narrowing is in gates.",
"Commit d27cb20 carries a body line "Refs objectui#10088". It is not in the trailer block, and the trailers are exactly the model-free pair. Noted for transparency."
],
"mcp_calls": "0",
"api_writes": "3 — (1) pr_create through fleet-write relay: POST /repos/objectstack-ai/objectstack/dispatches, run 36401178329, which opened POST /repos/objectstack-ai/objectui/pulls = #10942 (draft, objectstack-fleet[bot]); body read back byte-identical, 10702 bytes, first differing index none. (2) label-write --assign huangyiirene on #10942 through relay, run 36401231613; read-back MATCHES. (3) this os-dev-report comment through post-stamped.mjs on issues/10088/comments. git push is not counted.",
"open_questions": [
{
"question": "Should ajsonfence under content/docs that does not survive JSON.parse BLOCK a merge? Today nothing asserts it. The carriage census parses json through its tolerances, and its "no blind spot" pin blocks only on fences unreadable even after them. The card reserves this gate-strength call.",
"options": [
"A — Tighten the EXISTING carriage census: parsejsonstrictly and keep the tolerances forjsonconly, ideally by importing parseJsonFence from check-skill-examples.mjs so both doc trees share one json/jsonc contract. Its existing pin "has no blind spot on the corpus it ships against" then blocks a non-JSON json fence on the PR that adds it. That pin already runs on every content/docs PR. No new script or workflow; a few lines plus fixture pins; content/docs is at 0 today, so it lands green.",
"B — No gate. The convention lives in this PR and in check-skill-examples.mjs only. Zero cost, but drift returns: the class went from 0 to 22 on main with nothing reading it.",
"C — A new dedicated json-fence gate. Default no (新增门禁默认否), and no maintainer has named one."
],
"recommendation": "A, pending the maintainer. 实际业务需求: measured, not assumed. 21 non-parsing json fences accumulated on main while one normalising instrument read them all green, and the skills tree already enforces the identical contract for its fences (objectui#7474, check-skill-examples). 长远合理性: one json/jsonc contract across both doc trees, carried by an instrument and pin that already exist. The cost is that the carriage census answers a second question (tag grammar), which is mitigated because it already prints parse coverage per language. 防AI写错: a json fence is what an AI copies into a metadata file; a strict, loud check beats the tolerant normalisation that hid this class. 创业阶段不扩散: A adds no gate, script or workflow. It still flips blocking strength on a new class, so it needs the maintainer's yes, which is why it is not in this PR."
}
],
"out_of_scope_findings": [
"carrier: 承接者:无 · packages/vscode-extension/README.md:125 is ajsonfence carrying // comments (VS Code settings are JSONC), on the carriage surface outside content/docs and the only json/jsonc fence there failing under its own tag · noted in PR Acceptance notes, not filed · dedupe words: json fence README comments, vscode settings jsonc tag",
"carrier: 承接者:无 · guide/layout.md teachesmaxWidth/paddingon apagenode. A source grep of renderers/layout/page.tsx finds no schema.maxWidth / schema.padding read, but a grep zero is not an instrument (AGENTS.md, props spread), so this is UNMEASURED · noted, not filed · dedupe words: page maxWidth reader, page padding key",
"carrier: 承接者:无 · guide/schema-rendering.md Memoization claim (the card's unmeasured neighbour): still unmeasured, no reading taken in either direction · noted, not filed"
]
}
Generated by Claude Code
objectstack-fleet commented
on Sep 28, 2026 ContributorMore actionsos-dev-report
{
"issue": 10088,
"round": "REWORK 1",
"status": "done",
"branch": "claude/issue-10088-json-fences-parse",
"pr": "#10942",
"head": "6da92addb3",
"session": "session_01EBx9rvB7dufCz4at53x35U — subagent, so this is the parent seat's id",
"premise_still_valid": true,
"summary": "Acceptance #1 is now durable. I added one paragraph to CONTRIBUTING.md › "### Writing Documentation", directly after the SPECIMEN →plaintextfence paragraph. It names the json/jsonc convention, the rewrites to reach for, the same contract in check-skill-examples.mjsparseJsonFence, and (per AGENTS.md #9) that nothing enforces it for content/docs today, with objectui#10943 as the open gate decision. It uses no line numbers and no counts. Before the commit I merged origin/main (af2221d) into the branch; the merge commit is 12f7d14, with parents f1edd2d and af2221d. The PR body is untouched.",
"paragraph": "Ajsonfence is what a reader copies into a metadata file, so its body must pass a strictJSON.parse. A block that annotates JSON with//or/* … */comments or trailing commas is fencedjsoncinstead, and it must still be one JSON document once those are removed. The tag is how a reader tells a deliberate annotation from a mistake, and ajsonfence that does not parse is always the mistake. The other non-parsing shapes are admitted by no JSON dialect, so rewrite them rather than retag them. A${…}expression goes on one line inside its string, because a raw newline in a string is invalid under both tags. A bad/good comparison becomes one fence per document, with its label on the line above. An elision (...,[...], a\"...\"member) is removed, which leaves an empty list or the bare node. A counter-example still parses: what is wrong with it belongs in its content, not its syntax. This is the contractparseJsonFenceinscripts/check-skill-examples.mjsenforces on the skills tree's marked fences.⚠️ Nothing enforces it forcontent/docstoday.scripts/check-doc-expression-carriage.mjsreads these fences but normalises comments, raw newlines and elisions away by design, and whether a gate should block ajsonfence that does not parse is the open decision objectui#10943.",
"tests": "At head 6da92ad, under os-verify-lock, onepnpm exec vitest run --maxWorkers=2 FILEper CONTRIBUTING.md reader from the markdown-test-inputs ledger (readersByEntry + matchesEntry;--changednames CONTRIBUTING.md): check-doc-links 121 passed; check-installed-spec-pin-claims 29 passed; ci-cd-pipeline-doc 85 passed; dollar-dialect-alias-census 37 passed. Each run gave VERDICT command-exit 0. After the merge I also re-ran page-actions-refusal-7926 and check-doc-expression-carriage.test: 2 files, 58 passed. Strict-parse instrument after the merge: content/docs json 203 fences, 0 FAIL, controls lit.",
"gates": {
"vitest CONTRIBUTING.md readers (4 files)": "all exit 0 (121 / 29 / 85 / 37 passed)",
"check:control-bytes": "exit 0 — OK (9199 tracked text files); self-scan of CONTRIBUTING.md: 0 hits",
"check:new-line-citations": "exit 0 — VERDICT 0 new citation(s)",
"docs:check-links": "exit 0 — Links are valid across 17 scan roots",
"check-changeset-presence": "exit 0 — 1 changeset (empty frontmatter) covers the one src/ test; CONTRIBUTING.md is not published source",
"CI": "in_progress / not awaited, per contract"
},
"files_changed": [
"CONTRIBUTING.md"
],
"line_budget": "n/a — no skills/** or ledgered budget file; +2 lines (one blank separator + one paragraph)",
"deviations": [
"The worktree had been removed after round 0, so I re-created it on the existing local branch (sha matched origin, f1edd2d) and re-ran pnpm install.",
"The merge commit message was amended locally before push so it carries the model-free trailer pair; nothing already pushed was rewritten."
],
"mcp_calls": "0",
"api_writes": "1 — this os-dev-report comment via post-stamped.mjs (fleet-write relay) on issues/10088/comments. git push is not counted. The PR body was not edited.",
"open_questions": [],
"out_of_scope_findings": []
}
Generated by Claude Code
objectstack-fleet commented
on Sep 28, 2026 ContributorMore actionsReview — ACCEPT (after REWORK round 1) · PR objectui#10942 · ordinary path (not governed)
domain:devxseat 2 (session_01EBx9rvB7dufCz4at53x35U), reviewed against GitHub at 2026-09-28T09:37Z on head6da92addb3, ⛔ not against the reports.
Implemented-by:os-devsubagent of this session, branchclaude/issue-10088-json-fences-parse· Reviewed-by: this seat · Contract review atCONTRACT_REVIEW_TIER: PASS on this head (5867275230); the round-0 record (5867033932) FAILED on acceptance #1 and this head closes exactly that item.Acceptance, line by line
- Conventions named, where an author meets them ✓ — one paragraph in
CONTRIBUTING.md›### Writing Documentation, beside the existing fence-tag rule:json= strictJSON.parse, annotation only underjsonc, the rewrites for the shapes no dialect admits, the same contract as the skills checker'sparseJsonFence, and that nothing enforces it forcontent/docstoday (every claim verified true on this tree by the contract review). - Every fence not covered by a named convention parses, re-measured with a lit control ✓ — dev reading at head: 203
jsonfences, 0 failing; 11jsonc, 0 failing under both JSONC instruments. The seat's own pre-dispatch probe had found 24 failing across the two tags; the per-fence table (22 edits) is in the PR body and every edit was judged right by the contract review (no example changed meaning, no counter-example became a positive one, no dropped comment was a page's only statement of a fact). - Whether a gate blocks is answered ✓ — the dev did ⛔ not tighten the carriage census inside this card; the question is raised as its own decision, objectui#10943 (A/B/C, this seat recommends A).
Checklist
- Shape: draft ✓ · base
main✓ · first lineFixes #10088✓ · the only closing keyword ✓ ·Clause-②: no✓ · assignee ✓. - Path face: 8
content/docspages,CONTRIBUTING.md,packages/types/src/__tests__/page-actions-refusal-7926.test.ts(its pin counted the unparseableguide/layout.mdfences 4 → now 0; still guards by name) and an empty-frontmatter changeset ✓ — the test and changeset under the bounded in-place exemption,CONTRIBUTING.mdby the REWORK; the claim's file surface was amended in the same rounds. Not governed. - CI on
6da92addb3: 43 check runs, 40 success, 3 by-design skips, 0 failures — read by this seat. Commit trailers model-free ✓.mcp_calls0.
Out-of-scope findings:
packages/vscode-extension/README.mdcarries ajsonfence with//comments — it would be the one UNPARSED fence under option A, so it is added to objectui#10943's execution note (not filed separately).guide/layout.md'smaxWidth/paddingon apagenode andguide/schema-rendering.md's Memoization claim stay unmeasured — Acceptance notes, not filed (no measured wrong answer yet).Landing now: ready + auto-merge through the merge queue.
Generated by Claude Code
- Conventions named, where an author meets them ✓ — one paragraph in
- added a commit that references this issue
on Oct 7, 2026
Path: P1 | 那条路第 1 步「写元数据」 |
content/docs下 198 个 json 围栏有 22 个过不了JSON.parse,而唯一读它们的门禁正好把这两种形状归一化掉分诊重测与定级:2026-09-20T15:58Z
Dedupe words:
json fence not valid JSON·doc example fails JSON.parse·json-tagged fence comment·no gate asserts json fence validity·expression-carriage tolerance hides invalid jsonSurfaced by the objectui#9989 dev while repairing one such fence. ⭐ Re-measured first-hand by the
domain:ui#2execution seat before filing (PM sessionsession_018HrVaotisyhgmot9o2MLRq) — 立卡也要分「自量」与「转述」, and this is the 自量 half. ⛔ Nopriority:*and notypeare written here: both are the triage seat's sole production.domain:uiis inherited from the in-flight parent objectui#9989 under the derivation exception, ⛔ not a routing decision.The reading, taken by this seat on
origin/mainA fence-walker over every
.md/.mdxundercontent/docs, feeding each```jsonbody toJSON.parse:⭐ Control, same command, both directions — the same parser rejects
{"a":1,}(Expecting property name enclosed in doub…) and accepts{"a":1}. ⇒ the 22 is a reading and the 176 is not a dark pass.Concentration:
content/docs/guide/expressions.mdcontent/docs/guide/layout.mdcontent/docs/utilities/runner.mdxcontent/docs/guide/schema-rendering.mdcontent/docs/guide/deployment.mdcontent/docs/plugins/index.mdcontent/docs/utilities/vscode-extension.mdxschema-rendering.md's two is repaired by PR objectui#10086, which is landing — so ⭐ re-measure onorigin/mainwhen this card is taken; the figure above is anchored to a tree that PR changes.Why a reader is harmed: the failure lands BEFORE the schema
A
json-tagged fence is what an author copies. When it does not parse, the reader's editor orJSON.parserejects it before the value ever reaches a schema, so the page's own subject — which keys are legal — never gets a chance to be right or wrong. The two shapes doing it are a JavaScript comment inside the fence (/* … */) and raw newlines inside a string.Several of the 22 are deliberate. Elision markers and
// Bad:counter-examples are doing a job: a counter-example that parses is a worse counter-example. ⇒ the deliverable is ⛔ not「make 22 go to 0」. Somebody has to decide:Measured by the #9989 dev, ⛔ NOT re-run by this seat: why no gate catches it
Recorded as 转述 and marked as such, because the taking dev should re-take it rather than trust this table:
check:doc-snippetsts/tsx/typescriptonly; its own header states ajsonfence is never compiled against anythingcheck:doc-fencesjsontag is exactly right by its classifiercheck:doc-typestypeliteral and, in its own words, deliberately not the snippet's other keyscheck:doc-expression-carriagejsonfence bodies — and it is report-only, and its declared tolerance list REMOVES line and block comments and re-escapes raw newlines BEFORE parsing. ⇒ the two shapes that make a fence uncopyable are normalized away by design; it printed 「225 json/jsonc fence(s), 225 parsed, 0 UNPARSED」 on a tree carrying 22 thatJSON.parserefuses⭐ That last row is the finding under the finding: the repo HAS an instrument over this corpus, and its tolerances are calibrated to make exactly this class invisible. ⛔ Not a defect in that gate — it was built for a different question — but it is why nobody noticed.
content/docs/guide/schema-rendering.md's Memoization subsection asserts 「the renderer automatically memoizes components to prevent unnecessary re-renders」. ⛔ No measurement was taken in either direction, by the dev or by this seat. It is on the same page as two of the 22 and is the same class of claim as thelazyLoadpromise objectui#9989 just removed after measuring it false. ⇒ whoever takes this card is the natural reader; ⛔ it is recorded as unmeasured, ⛔ not asserted to be false.Acceptance
Generated by Claude Code