From 1854c91eaa61735525854cd548ef6dab1acfb0e3 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 29 Sep 2026 07:37:13 +0000 Subject: [PATCH 1/2] docs(spec): re-anchor the dead tracker citations in stack.zod.ts and data/analytics.zod.ts to the commits that decided them Twelve comment and docblock sites cited six tracker numbers that answer 404. Each now names the commit on main that decided the rule its line states: 35ad101bc (themes carrier retired), c8d6f6e08 (functions array accepts the lowered handler), 4d0d9445a (ManifestSchema closed), 279431e7a (defineStack same-key action refusal), 35dffeace (composeStacks cross-stack action key refusal) and 2306a765c (analytics_cube bound at the /meta write door). Comment lines only, one for one. Claude-Session: https://claude.ai/code/session_014EJ1ED8X4MMrT18BhVx4tx Co-authored-by: Claude --- packages/spec/src/data/analytics.zod.ts | 6 +++--- packages/spec/src/stack.zod.ts | 18 +++++++++--------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/spec/src/data/analytics.zod.ts b/packages/spec/src/data/analytics.zod.ts index f3fdb9b3a2a..f644024f0ef 100644 --- a/packages/spec/src/data/analytics.zod.ts +++ b/packages/spec/src/data/analytics.zod.ts @@ -401,10 +401,10 @@ export const CubeJoinSchema = lazySchema(() => strictObject( * showcase example authors through) and `defineStack({ analyticsCubes })` / * artifact ingest, both of which parse `StackSchema` → `analyticsCubes[]`. * - * [#10194] This docblock used to say the ADR-0010 protection envelope is + * [commit 2306a765c] This docblock used to say the ADR-0010 protection envelope is * deliberately NOT declared here, on the premise that `analytics_cube` * resolves no `getMetadataTypeSchema` entry (so `saveMetaItem` never 422s - * it). #10194 retired that premise: `analytics_cube` is now bound in + * it). Commit 2306a765c retired that premise: `analytics_cube` is now bound in * `UNREGISTERED_KIND_SCHEMAS`, so `PUT /meta/analytics_cube/:name` parses a * body through THIS schema — and the `getMetaItemLayered` → `saveMetaItem` * round-trip carries the `applyProtection` stamp. The shape is `.strict()`, @@ -482,7 +482,7 @@ export const CubeSchema = lazySchema(() => strictObject( ), // ADR-0010 — runtime protection envelope (internal — set by loader). - // [#10194] See the docblock above for why this spread became load-bearing + // [commit 2306a765c] See the docblock above for why this spread became load-bearing // the day the `/meta` write door started parsing bodies with this schema. ...MetadataProtectionFields, }, diff --git a/packages/spec/src/stack.zod.ts b/packages/spec/src/stack.zod.ts index ebbad2e7340..f65940912d1 100644 --- a/packages/spec/src/stack.zod.ts +++ b/packages/spec/src/stack.zod.ts @@ -412,7 +412,7 @@ const STACK_DEFINITION_COLLECTIONS_SHAPE = { + 'composeStacks runs the same key rule across its input stacks (counting distinct stacks, not sites) ' + 'and names both source stacks on a collision.', ), - // `themes` was REMOVED in 17.1 (#10485, ADR-0049 enforce-or-remove — ruled + // `themes` was REMOVED in 17.1 (commit 35ad101bc, ADR-0049 enforce-or-remove — ruled // 退役授权面, 2026-08-21). The pipeline was live from authoring gate through // artifact ingest and stopped there: no framework package ever read the // stored items, `theme` was never a registered metadata type, no first-party @@ -630,7 +630,7 @@ const STACK_DEFINITION_COLLECTIONS_SHAPE = { * * BOTH shapes therefore reach this schema twice: once as authored, once * lowered. All four combinations (map/array × bare/declared) are accepted — - * the map's two lowered forms since #4343 and #4976, the array's since #6238. + * the map's two lowered forms since #4343 and #4976, the array's since commit c8d6f6e08. * `packages/cli`'s `lower-callables.test.ts` pins every cell against what the * lowering actually emits, rather than against a belief about it. */ @@ -1020,7 +1020,7 @@ export const COMPOSE_KEY_DISPOSITIONS = Object.freeze({ reports: 'concat', datasets: 'concat', actions: 'concat', - // `themes` left this table with the key (#10485) — the total-record type is + // `themes` left this table with the key (commit 35ad101bc) — the total-record type is // what forces this comment to move in lockstep with the schema. flows: 'concat', jobs: 'concat', @@ -1230,7 +1230,7 @@ function assembledPackageBodyShape(): Pick(actions: T[]): T[] { * and before this the second merge doubled every bound action in the composed * object (three copies for two declarations under `objectConflict: 'override'` * / `'merge'`). Identity, deliberately not equality: an author writing one - * action in both positions produces two distinct objects, which #14686's + * action in both positions produces two distinct objects, which commit 279431e7a's * same-key refusal (run before this merge) rejects and which this merge must * not quietly fold. * @@ -3191,7 +3191,7 @@ function mergeActionsIntoObjects(config: ObjectStackDefinition): ObjectStackDefi // surviving objects through as-is — ran this merge a second time over that // echo and doubled every bound action. A hand-written twin (one action // authored in both positions) is two objects after the strict parse, and - // #14686's same-key refusal has already run ahead of this merge to refuse + // commit 279431e7a's same-key refusal has already run ahead of this merge to refuse // it; an equality skip here would have swallowed it instead. const fresh = (actionsByObject.get(obj.name) ?? []).filter((action) => !base.includes(action)); const merged = fresh.length > 0 ? [...base, ...fresh] : base; @@ -4507,7 +4507,7 @@ function mergeObjects( } /** - * Cross-stack duplicate action keys over the COMPOSED action set (#14662). + * Cross-stack duplicate action keys over the COMPOSED action set (commit 35dffeace). * * `defineStack` refuses two declarations that resolve to one scope-qualified * runtime key within ONE stack ({@link collectDuplicateActionKeyErrors}), and @@ -5067,7 +5067,7 @@ function collectArtifactCrossReferenceErrors( * stacks declaring *different* values throw an error naming both stacks * (#5005; `i18n` joined them in #5051). * **Actions** concatenate like every other collection, and the composed set is - * then checked the way `defineStack` checks one stack (#14662): two input + * then checked the way `defineStack` checks one stack (commit 35dffeace): two input * stacks whose declarations resolve to one scope-qualified runtime key * (`objectName:name`, or `global:name` for an object-less action) throw, and * the error names both stacks by manifest id and where each declaration sits. @@ -5290,7 +5290,7 @@ export function composeStacks( if (single.declared) composed[key] = single.value; } - // 6. Cross-stack action key collisions (#14662) — the check `defineStack` + // 6. Cross-stack action key collisions (commit 35dffeace) — the check `defineStack` // runs within one stack, over what composition actually carries. AFTER // every collection is composed, and BEFORE `mergeActionsIntoObjects` // copies each bound standalone action into its object: that copy is the From cc0580d404917d546c2a10ae745f95b77f3239be Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 29 Sep 2026 07:40:09 +0000 Subject: [PATCH 2/2] chore(changeset): patch changeset for the stack.zod.ts and data/analytics.zod.ts provenance re-anchoring Both files ship verbatim through the package's files[] (src/**/*.zod.ts), so the rewritten comments publish. Claude-Session: https://claude.ai/code/session_014EJ1ED8X4MMrT18BhVx4tx Co-authored-by: Claude --- .../spec-stack-analytics-provenance-anchors.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 .changeset/spec-stack-analytics-provenance-anchors.md diff --git a/.changeset/spec-stack-analytics-provenance-anchors.md b/.changeset/spec-stack-analytics-provenance-anchors.md new file mode 100644 index 00000000000..9c5db2741df --- /dev/null +++ b/.changeset/spec-stack-analytics-provenance-anchors.md @@ -0,0 +1,14 @@ +--- +'@objectstack/spec': patch +--- + +Provenance comments in `stack.zod.ts` and `data/analytics.zod.ts` were re-anchored + +Twelve comment and docblock lines in `src/stack.zod.ts` and +`src/data/analytics.zod.ts` cited tracker numbers that no longer resolve on +GitHub. They now cite the commit in this repository's history that decided +the matter: the `themes` carrier retirement, the lowered-handler array form of +`functions`, the closed `ManifestSchema`, the same-key action refusal in +`defineStack` and its cross-stack twin in `composeStacks`, and the +`analytics_cube` binding at the `/meta` write door. Comments only: no type, +schema, export, `describe()` text or runtime behaviour changes.