Uh oh!
There was an error while loading. Please reload this page.
refactor(spec): narrow metadata-url-spelling exports to the verdict surface (#8424 ruling) - #8625
Conversation
…urface (#8424) Per the amended #8424 spec-seat ruling (option A): unmappedDeclaredTypeSpelling, restPluralOfMetaType and DECLARED_META_TYPES become module-internal; the module gains one purpose-shaped export, metaUrlSpellingRefusal(urlType) -> { declared, hint } | null. metadata-protocol's request-boundary refusal now consumes the composed verdict; its 400 INVALID_REQUEST wording is byte-identical. Tests re-pin the same invariants through the public surface, with a registry-quantified refusal pin replacing the set-membership pin. Co-Authored-By: Claude <noreply@anthropic.com>
…bol spelling surface (#8424) Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012MNV7ZSCjNfA38eDCjsXQL
…aration, nothing published carried the removed exports (#8424) The adr-0087 gate measured the first draft honestly: 'unpublished' is a mechanical private:true category, and a declared-breaking changeset carrying a FROM->TO prescription cannot claim no-migration-prescription. The accurate fix is upstream of the marker: no released version ever carried the three exports (they merged 2026-08-13; last publish is 17.0.0-rc.6 of 2026-08-10), so the changeset should never have declared BREAKING - relative to every published artifact this release only adds spelling exports. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012MNV7ZSCjNfA38eDCjsXQL
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
📓 Docs Drift CheckThis PR changes 2 package(s): 106 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:
⛔ 7 release-owned page(s) also reference the affected code. These are read-only:
|
Uh oh!
There was an error while loading. Please reload this page.
Fixes#8424
Implements the amended spec-seat ruling (issue comment 5288556825, option A). PR opened by the PM seat from the dev's pushed branch — the implementing dev was terminated by a model usage limit immediately after reporting its work complete and green. A second dev has since adjudicated CI and independently re-verified every claim; see "Verification status" below.
Why the ruling was amended mid-card
The original ruling (comment 5280680385) said: internalize
unmappedDeclaredTypeSpelling,restPluralOfMetaType,DECLARED_META_TYPES, keeping a two-symbol surface. The dev measured before writing code and falsified that premise:packages/metadata-protocol/src/protocol.tsimports the first two directly (the #7894400refusal predicate and its message hint). The card's phrase "no consumer outsidemetadata-protocol" is true, but internalization requires no consumer outsidepackages/spec— a different claim. The dev stopped and reported instead of forcing the change; the ruling was then amended to option A.What changed (3 commits)
d4c39a3— the narrowing. All three helpers become module-internal.metadata-url-spelling.tsgains ONE purpose-shaped export,metaUrlSpellingRefusal(urlType) → { declared, hint } | null, which answers the boundary's actual question (is this an unrecognized plural of a declared type, and what hint does the refusal carry) rather than exposing the predicate parts.metadata-protocol's request-boundary refusal consumes the composed verdict; its400 INVALID_REQUESTwording is byte-identical. Tests re-pin the same invariants through the public surface, with a registry-quantified refusal pin replacing the set-membership pin.02ee314— regeneratedapi-surface+export-originsto the three-symbol surface.1a097a4— changeset accuracy. The first draft declared BREAKING; the ADR-0087 gate measured that honestly and the dev corrected it upstream of the marker: no published version ever carried the three exports (they merged 2026-08-13; the last publish is17.0.0-rc.6of 2026-08-10), so relative to every published artifact this release only adds spelling exports. Ships asminor.Final surface, three symbols with three distinct roles:
META_URL_TO_SINGULAR(spelling contract) ·canonicalMetaUrlType(fold) ·metaUrlSpellingRefusal(boundary verdict). DroppingDECLARED_META_TYPESfrom the surface also removes a symbol #8586 shows is hazard-shaped — it reads like a live registry and is not one.Verification status — OBSERVED
The PM's earlier caveat ("reported, not PM-observed") is now discharged. Everything below was re-run against the pushed commit
1a097a4in a fresh worktree, with the full dependency closure rebuilt first so no judgment rests on a staledist/*.d.ts.CI on this PR: fully converged, zero red. All 27 check runs complete — 25
success, 2skippedby the path filter (Console Pin Gate,Build Docs). Green includesBuild Core,Test Core (1-3/3),TypeScript Type Check,ESLint,Spec property liveness,Check Changeset,Dogfood Regression Gate (1-3/3),Dogfood Verify CLI, andTemporal Conformance (live PG + MySQL).Local re-verification of the three consumer suites:
@objectstack/spec@objectstack/metadata-protocol@objectstack/restGenerated-artifact gates:
check:generated— "All 13 generated artifacts are up to date" (includingcheck:api-surface,check:export-origins,check:authorable-surface).check:export-origins— "5086 exports across 16 entry points resolve exactly as recorded". A full@objectstack/specbuild (which runsgen:schema+gen:openapi) left the working tree clean — the authorable-surface anchor did not move.Typecheck:
@objectstack/specand@objectstack/restpnpm typecheckexit 0.@objectstack/metadata-protocoldeclares notypecheckscript; the repo-wideTypeScript Type CheckCI job is green, and a directtsc --noEmitthere reports only 159 pre-existing test-layer errors (seed-loader / sys-metadata-repository / batch-atomic fixtures) in files this branch does not touch — none referencesprotocol.tsor any spelling symbol.#7894's boundary pins are unmoved. They live in
packages/runtime/src/meta-field-overlay-lock.test.ts, outside the three packages above — worth naming, since a consumer-scoped sweep would not have run them. Whole@objectstack/runtimesuite: 155 files / 2369 tests passed; the 6#7894-named pins pass when selected individually, covering the plural fold (/themes/…folding to the singular namespace), the positive control (an unheard-of plugin kind still permitted), and the refusal (/capabilitys/…→400/INVALID_REQUESTnaming both spellings, minting no namespace under the typo).Reverse verification — direction predicted before running, and observed as predicted. A probe importing all four symbols from
@objectstack/spec/shared, compiled against the freshly rebuilt.d.ts:metaUrlSpellingRefusalresolved cleanly (no diagnostic). The rebuiltdist/shared/index.d.tsexport clause carries the three ruled symbols and none of the removed ones; the removed names survive only inside a doc comment. Probe deleted, worktree clean.Docs drift: the bot flagged 106 pages, which is
@objectstack/spec-wide noise rather than this diff. A targeted grep ofcontent/docs/for all four symbol names returns zero matches — no page documents a removed export, so there is nothing to sweep.content/docs/releases/**untouched.Landing
Regenerates spec artifacts ⇒ lands under os-regen relay discipline (serialize against any other regenerated-artifact PR; merge one at a time, re-running the regen chain on each leg). Left as a draft for the PM to flip ready.
Generated by Claude Code