Skip to content

docs(rest): state what the genericDeclared docblock's file actually holds - #16504

Merged
os-sales merged 2 commits into
mainfrom
claude/issue-15615-generic-declared-reachability-claim
Sep 7, 2026
Merged

docs(rest): state what the genericDeclared docblock's file actually holds#16504
os-sales merged 2 commits into
mainfrom
claude/issue-15615-generic-declared-reachability-claim

Conversation

@claude

@claude claude Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

Fixes #15615

What the docblock claimed, and what the file holds

genericDeclared's docblock said reachability of the generic passthrough "is asserted rather than assumed". Nothing in the file asserts it: §1 reads only the two doors' status, code, body equality and the object key — never structuredCodeAnswer's arms. The claim described a property the file does not hold.

Per the ruling on the card, this takes option 1 — correct the claim — and ⛔ not option 2 (making §1 assert the absence of an arm), which pins an absence: the shape that goes stale in the other direction.

The premise was re-derived, not inherited

The card's premise — the three sibling pins independently exercise the generic-passthrough limb — was measured by the at-tier reviewer on PR #15452's head e141d14adb, and neither the filing nor the dispatching seat re-ran it. Re-derived here on current origin/main.

Ablation A — delete resolveErrorResponse's generic 4xx ...(object ? { object } : {}) limb. Baseline 63/63 pass; ablated 7 fail:

pin ablated
§1 DUPLICATE_RECORD / RECORD_LOCKED / FORBIDDEN / handleRouteError RED (4 cases)
§2 "declared status + door-supplied object: both doors answer 404 with object" RED
§3 "a sniff-matching message with a DIFFERENT declared code keeps the declared answer on both doors" RED
#14541 §4 "CONVERGED: a 5xx ARM never displaces a status the producer declared in the 4xx band" RED

The premise holds. All three siblings redden independently of §1.

Ablation B — the card's feared future, simulated. Insert a bespoke RECORD_LOCKED arm into structuredCodeAnswer and delete the limb. §1's RECORD_LOCKED case and §3's sniff case both go GREEN — they migrated onto the bespoke path, exactly the silent re-purposing the card describes. §2 and #14541 §4 stay RED.

⇒ a measured refinement the card did not have: §3 keys on RECORD_LOCKED, one of §1's own codes, so it migrates with §1. Only §2 and #14541 §4 are independent of §1's codes. The new docblock states that limit rather than repeating "three siblings" flatly — hedging there would reproduce the defect in a quieter voice. Ablation B also reddens #14541 §5's "every arm in the SHARED classification has a §1 parity case", so an arm's arrival is caught — but that guard goes green again once its author adds the parity case it asks for, which is why it does not hold this file's §1 to the passthrough.

Ablation hygiene: each leg proved the mutation on disk before its colour was read (limb occurrences 13 to 12; blob hash moved), restored with git checkout HEAD -- PATH and verified byte-equal to the HEAD blob, with git status clean afterwards.

Scope

Comment-only, one file, no behaviour change. The invariant was never at risk — this card is about the claim, not the coverage.

Verification

  • dispatch-gates.mjs Reconciliation total: 45/45 green. The Artifact rosters block was run separately (it sits outside that union): 36/39 green, 3 NOT MEASURED and none a finding against this diff — check-partof-closing-keyword and check-single-claim-paths both print NOT WIRED without PR context, and check:react-declaration-parity needs an objectui sdui.manifest.json this repo does not contain.
  • check:type-check-debt first exited 3 (PREREQUISITE NOT MET — a tsc OOM; the gate's own text says nothing was measured and it is not a finding). Re-run at --max-old-space-size=8192: exit 0, "5 ledger entr(ies) re-measured ... none above its recorded number."
  • @objectstack/rest: 187 test files / 3179 tests pass; typecheck green (check:test-typecheck: OK), and the edited file is confirmed inside tsconfig.test.json's program via tsc --listFiles.
  • Repo-wide pnpm lint green — the full union at ad1c79f7, not a narrowed run.
  • turbo ls --affected names 18 packages; only @objectstack/rest changed content. The other 17 are dependents reached by package-level hashing over a comment with no API-surface change — declared narrowing, CI runs the farm.
  • No changeset: packages/rest publishes ["dist","README.md","CHANGELOG.md"], so a test-file comment releases nothing ⇒ skip-changeset, route 2 and the workflow's PREFERRED route.
  • Clause ② graded from the delivered diff: no — no newly exported symbol, no new key on a published payload, no packages/spec/src/** path.

验收备注

无范围外发现。本次改动为单文件注释,未触及任何运行时路径。


Generated by Claude Code

… holds

The docblock claimed reachability of the generic passthrough "is asserted
rather than assumed", but nothing in the file asserts it — §1 reads only the
two doors' answers, never `structuredCodeAnswer`'s arms. A bespoke arm added
later for one of §1's codes would leave those cases green while they quietly
measure the bespoke path instead.

Replace the claim with what measurement shows actually holds it: a hand-run
ablation (naming the limb to delete), the three sibling pins that redden with
it, and the measured limit that §3 keys on one of §1's own codes and so
migrates along with it.

Comment-only; no behaviour change.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YFY46JydE1gMxQG1TqBcMZ
@claude claude Bot added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Sep 7, 2026
@github-actions github-actions Bot added the size/s label Sep 7, 2026
@github-actions

github-actions Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

Nothing in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 0 changed package(s)), so this run has no opinion about the docs.

What this run could not see
  • a page that states a rule by its inputs shares no identifier with the emitter that implements the rule, so an emitter-only diff cannot list it — not on this run and not on any run. Measured on fix(driver-sql): emit varchar(maxLength) for a text field a declared index keys on #11430: content/docs/protocol/objectql/types.mdx documents the text-family column mapping by the ObjectQL type names it maps FROM (text / textarea / html) while the diff changed createColumn; it went unlisted, and it was the page that diff falsified, in four places. No shared token exists to detect this on, so a rule your change carries has to be re-read by hand in the pages that restate it.

Coarse fallback — 0 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json 21c5dcbb3d073716c7d15354a6f9b312cf2205ffpackageMentionDocs.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/s skip-changeset PR has no user-facing published change; bypasses the changeset gate tests

Projects

None yet

2 participants