From ac59b0fb99f53d29444ba4e5ccbf05f125e171ee Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 4 Oct 2026 05:27:20 +0000 Subject: [PATCH 1/2] docs(spec): re-anchor the dead tracker citations in packages/spec/src's test surface to the commits that decided them The test-surface stage of the dead-citation sweep. Every comment and docblock site in packages/spec/src/**/*.test.ts that cited a tracker number answering 404 now cites the commit on main that decided it (ruling C+D form C), reusing the anchor an earlier stage landed for the same number wherever one exists. Two census-dead sites are objectui numbers split from their qualifier; they are respelled so the qualifier joins the number. The two source comments tests read literally move with their readers: data/api-derivation.ts's marker now opens with the deciding commit 6968885ef (read by data/api-derivation.test.ts), and identity/identity.zod.ts now opens its explanatory block with commit 2c86fe3ea (read by identity/api-key-retirement.test.ts). Comment and docblock text only, plus those two readers. No test title, schema, type, export or behaviour change. Claude-Session: https://claude.ai/code/session_01T9u38rswFp5Rw8DswRUReJ Co-authored-by: Claude --- .../api/export-job-family-retirement.test.ts | 4 +- packages/spec/src/api/protocol.test.ts | 8 +-- ...st-api-config-dead-keys-retirement.test.ts | 4 +- .../spec/src/automation/control-flow.test.ts | 2 +- .../automation/schedule-organization.test.ts | 2 +- .../src/automation/sync-retirement.test.ts | 2 +- packages/spec/src/automation/webhook.test.ts | 6 +- .../src/compose-stacks-action-echo.test.ts | 6 +- ...ompose-stacks-action-key-collision.test.ts | 2 +- .../spec/src/compose-stacks-key-loss.test.ts | 2 +- .../spec/src/conversions/conversions.test.ts | 6 +- packages/spec/src/conversions/stored.test.ts | 2 +- ...lytics-date-range-two-bound-window.test.ts | 2 +- .../data/analytics-strictness-batchd.test.ts | 2 +- packages/spec/src/data/api-derivation.test.ts | 6 +- packages/spec/src/data/api-derivation.ts | 4 +- .../driver/driver-credential-refusal.test.ts | 4 +- packages/spec/src/data/driver/turso.test.ts | 4 +- .../src/identity/api-key-retirement.test.ts | 6 +- packages/spec/src/identity/identity.zod.ts | 4 +- .../connector-author-shape.test.ts | 2 +- .../spec/src/integration/connector.test.ts | 8 +-- packages/spec/src/security/explain.test.ts | 6 +- .../src/shared/editability-boundary.test.ts | 4 +- .../expression-dialect-docs.pin.test.ts | 2 +- .../spec/src/shared/external-errors.test.ts | 2 +- .../src/shared/metadata-collection.test.ts | 2 +- .../src/shared/metadata-url-spelling.test.ts | 8 +-- .../shared/union-author-message-pins.test.ts | 8 +-- .../spec/src/stack-artifact-packages.test.ts | 6 +- .../spec/src/stack-top-level-strict.test.ts | 2 +- .../src/system/environment-artifact.test.ts | 4 +- .../spec/src/system/i18n-resolver.test.ts | 10 ++-- .../spec/src/system/operation-message.test.ts | 2 +- packages/spec/src/system/translation.test.ts | 2 +- .../src/type-alias-convention.pin.test.ts | 60 +++++++++---------- 36 files changed, 103 insertions(+), 103 deletions(-) diff --git a/packages/spec/src/api/export-job-family-retirement.test.ts b/packages/spec/src/api/export-job-family-retirement.test.ts index 4ef5769f61c..0e51934ec5a 100644 --- a/packages/spec/src/api/export-job-family-retirement.test.ts +++ b/packages/spec/src/api/export-job-family-retirement.test.ts @@ -21,8 +21,8 @@ import { MIGRATIONS_BY_MAJOR, RETIRED_DEFS_BY_MAJOR } from '../migrations/regist // (`contracts/export-service.ts`) and `ScheduleExportInput` leave the public // surface, and `ScheduleState` (`automation/execution.zod.ts`) goes with them // unless a live consumer is measured. Landing route A (decision batch #221 -// item 2): objectui retired its side first (objectui#10247, merged as objectui -// PR #10264), and the pinned `.objectui-sha` already descends from that merge. +// item 2): objectui retired its side first (objectui#10247, merged as +// objectui PR #10264), and the pinned `.objectui-sha` already descends from that merge. // Scope note: the export-job LIST pair (`ListExportJobsRequestSchema` with its // `limit` / `cursor`, and its response) is in, absorbing #19543 door ②; the // import-job family in the same module is served and is NOT in. diff --git a/packages/spec/src/api/protocol.test.ts b/packages/spec/src/api/protocol.test.ts index 8c9d6129809..185579d64f6 100644 --- a/packages/spec/src/api/protocol.test.ts +++ b/packages/spec/src/api/protocol.test.ts @@ -1805,7 +1805,7 @@ describe('PublishMetaItemRequestSchema mirrors the implementation parameter type // `@objectstack/metadata-protocol` — `{ type, name, organizationId?, // actor?, message?, packageId? }` — and the REST door's actual reads; // nothing else is declared because nothing else is enforced. - // As in the #9726/#9741 blocks above, accept-pins assert the parsed VALUE: + // As in the #9726 / commit 2a29caa53 blocks above, accept-pins assert the parsed VALUE: // this is a non-strict object, so `success` alone is exactly the // silent-strip state this family of cards closes. @@ -1935,9 +1935,9 @@ describe('AuditMetaItemRequestSchema mirrors the implementation parameter type ( // implementation's parameter type in `@objectstack/metadata-protocol` — // `{ type, name, organizationId?: string | null, limit?: number }` — and the // REST door's actual sends; nothing else is declared because nothing else is - // enforced. As in the #9726/#9741/#11006 blocks above, accept-pins assert - // the parsed VALUE: this is a non-strict object, so `success` alone is - // exactly the silent-strip state this family of cards closes. + // enforced. As in the #9726 / commit 2a29caa53 / commit cccbe51bf blocks above, + // accept-pins assert the parsed VALUE: this is a non-strict object, so + // `success` alone is exactly the silent-strip state this family of cards closes. const base = { type: 'view', name: 'account_list' } as const; diff --git a/packages/spec/src/api/rest-api-config-dead-keys-retirement.test.ts b/packages/spec/src/api/rest-api-config-dead-keys-retirement.test.ts index ae6c993792b..cb02ba145ff 100644 --- a/packages/spec/src/api/rest-api-config-dead-keys-retirement.test.ts +++ b/packages/spec/src/api/rest-api-config-dead-keys-retirement.test.ts @@ -249,8 +249,8 @@ describe('rest_api retirement — ADR-0087 registration', () => { expect(entry!.surface).toBe('restServer.api.responseFormat / restServer.api.documentation.enabled'); expect(entry!.replacement).toContain('`api.enableOpenApi`'); // Plugin TS configuration has no stored or stack source for a conversion to - // rewrite — the #14691 / `openApi31` shape. A conversion id naming either - // key would be a strip with nothing to strip. + // rewrite — the `RestServerConfig` retirement (commit b3a63d32c) / `openApi31` + // shape. A conversion id naming either key would be a strip with nothing to strip. expect(step.conversionIds.filter((id) => /response-format|documentation-enabled/.test(id))).toEqual([]); }); diff --git a/packages/spec/src/automation/control-flow.test.ts b/packages/spec/src/automation/control-flow.test.ts index 131ed697795..78267573739 100644 --- a/packages/spec/src/automation/control-flow.test.ts +++ b/packages/spec/src/automation/control-flow.test.ts @@ -412,7 +412,7 @@ describe('TryCatchErrorValueSchema', () => { expect(TryCatchErrorValueSchema.safeParse({ nodeId: 'guard', message: 'x', iteration: 1.5 }).success).toBe(false); }); - // #14954 — `code` (#14419): the engine binds the failing node's + // #14954 — `code` (commit c5a7448d5): the engine binds the failing node's // platform-classified error code beside `nodeId` / `message`, so a catch // region can DISCRIMINATE ("the row is already there" vs "the store is // down") by branching on `$error.code` instead of parsing `message`. This diff --git a/packages/spec/src/automation/schedule-organization.test.ts b/packages/spec/src/automation/schedule-organization.test.ts index 7e0891b84a2..5ca5340d087 100644 --- a/packages/spec/src/automation/schedule-organization.test.ts +++ b/packages/spec/src/automation/schedule-organization.test.ts @@ -8,7 +8,7 @@ import { resolveScheduleOrganization, } from './schedule-organization.zod'; -// [#16659] The declaration side of the acting-organization ruling. Two +// [commit ecdfc9411] The declaration side of the acting-organization ruling. Two // consumers read this module and they must not be able to disagree about what // counts as DECLARED: the automation engine lifts the value onto the trigger // binding (`resolveTriggerBinding`), and both time triggers refuse a binding diff --git a/packages/spec/src/automation/sync-retirement.test.ts b/packages/spec/src/automation/sync-retirement.test.ts index 980f537f753..c709515eb75 100644 --- a/packages/spec/src/automation/sync-retirement.test.ts +++ b/packages/spec/src/automation/sync-retirement.test.ts @@ -217,7 +217,7 @@ describe('[#4738] sync/conflict dual-source retirement', () => { } // Anti-vacuity: the ui namespace we just probed is real and non-trivial — // otherwise a broken import would satisfy the three absences above. - // (`ThemeSchema` was the probe until #10485 retired it — ADR-0049.) + // (`ThemeSchema` was the probe until commit 35ad101bc retired it — ADR-0049.) expect('PageSchema' in ui).toBe(true); }); diff --git a/packages/spec/src/automation/webhook.test.ts b/packages/spec/src/automation/webhook.test.ts index 8c58bcdc373..d05f304fcc2 100644 --- a/packages/spec/src/automation/webhook.test.ts +++ b/packages/spec/src/automation/webhook.test.ts @@ -276,10 +276,10 @@ describe('unknown keys are rejected, not stripped (#4001 batch 11)', () => { }); /** - * [#6362] The measurement that card asked for, kept as a pin. + * [commit b5404f496] The measurement that commit took in the same pass, kept as a pin. * - * #6362 fixed `connector`, which TOLERATED the stamped envelope and then - * stripped it — success with silent data loss — and asked whether `webhook` + * Commit b5404f496 fixed `connector`, which TOLERATED the stamped envelope and then + * stripped it — success with silent data loss — and measured whether `webhook` * had the same drop. It does not: `WebhookSchema` has carried * `...MetadataProtectionFields` since #4001 batch 11, and all SEVEN keys * survive the round-trip. No spread was added here; this pin is what makes diff --git a/packages/spec/src/compose-stacks-action-echo.test.ts b/packages/spec/src/compose-stacks-action-echo.test.ts index ad2dc00bb6a..59d72401072 100644 --- a/packages/spec/src/compose-stacks-action-echo.test.ts +++ b/packages/spec/src/compose-stacks-action-echo.test.ts @@ -17,7 +17,7 @@ * three stacks binding b1/b2/b3 to one object, override / merge * : shared.actions=["emb3/EMB","b3/BOUND","b1/BOUND","b2/BOUND","b3/BOUND"] * defineStack(composeStacks([a, b])) : REFUSED 'a_item:dup_x' is declared 3 times - * defineStack(a) (a lone built input) : REFUSED 'a_item:dup_x' is declared twice ← #14686's landed pin + * defineStack(a) (a lone built input) : REFUSED 'a_item:dup_x' is declared twice ← commit 279431e7a's landed pin * ``` * * The three-stack `merge` row above is a refusal since #14848: `'merge'` no @@ -31,7 +31,7 @@ * the very same object as an entry of `object.actions` is that a previous merge * put it there. A strict parse produces fresh objects, so a hand-written twin — * the same action authored in both positions — never shares identity, and - * #14686's same-key refusal, which runs before the merge, still refuses it. A + * commit 279431e7a's same-key refusal, which runs before the merge, still refuses it. A * marker key cannot do this job: `ActionSchema` is a strict object, so the key * is refused before it could travel (measured below). * @@ -197,7 +197,7 @@ describe('composeStacks - what the identity skip does NOT fold', () => { it('under strict: false, ONE action object placed in both positions is one declaration — carried once (before: twice)', () => { // No parse clones it, so it shares identity exactly as a build's echo does. - // #14686's walk does not run in this mode by the author's choice, and the + // Commit 279431e7a's walk does not run in this mode by the author's choice, and the // runtime dedupes a standalone against an embedded entry by key anyway. const shared = act('sh', { objectName: 'n_item' }); const out = defineStack({ manifest: mf('com.example.n'), objects: [obj('n_item', [shared])], actions: [shared] }, { strict: false }); diff --git a/packages/spec/src/compose-stacks-action-key-collision.test.ts b/packages/spec/src/compose-stacks-action-key-collision.test.ts index 01f63c90d53..e10b6ba2bef 100644 --- a/packages/spec/src/compose-stacks-action-key-collision.test.ts +++ b/packages/spec/src/compose-stacks-action-key-collision.test.ts @@ -1,6 +1,6 @@ /** * `composeStacks` refuses two INPUT STACKS whose action declarations resolve - * to one scope-qualified runtime key — and only those (#14662). + * to one scope-qualified runtime key — and only those (commit 35dffeace). * * `defineStack` refuses the same collision within one stack * (`stack-duplicate-action-key.test.ts`); the runtime keys a composed artifact diff --git a/packages/spec/src/compose-stacks-key-loss.test.ts b/packages/spec/src/compose-stacks-key-loss.test.ts index 6d82c395db7..1142e451c55 100644 --- a/packages/spec/src/compose-stacks-key-loss.test.ts +++ b/packages/spec/src/compose-stacks-key-loss.test.ts @@ -170,7 +170,7 @@ describe('#5005 rule 3 — a key with no declared rule warns', () => { // One warning that both names the key AND carries the prescription — not // two unrelated ones (`defineStack` also warns about undeclared keys). // Anchored on the prescription's own words, never on a tracker id the - // author cannot resolve (#13156's strip). + // author cannot resolve (commit fd289be45's strip). const warnings = warnSpy.mock.calls.map((c) => String(c[0])); expect( warnings.some((w) => w.includes('composeStacks') && w.includes("'futureThing'") && w.includes('COMPOSE_KEY_DISPOSITIONS')), diff --git a/packages/spec/src/conversions/conversions.test.ts b/packages/spec/src/conversions/conversions.test.ts index b949c12a4f7..bb416793f6b 100644 --- a/packages/spec/src/conversions/conversions.test.ts +++ b/packages/spec/src/conversions/conversions.test.ts @@ -571,7 +571,7 @@ describe('conversion layer (ADR-0087 D2)', () => { }); /** - * The jurisdiction pin for `retiredFromLoadPath` (#16864). + * The jurisdiction pin for `retiredFromLoadPath` (commit 29dd1a6dd). * * `apply.ts` and `types.ts` now declare that retirement is an AUTHORING * surface event: the flag keeps an entry off `normalizeStackInput`, while @@ -895,7 +895,7 @@ describe('conversion layer (ADR-0087 D2)', () => { }); }); - // #6345 — the `mongo` → `mongodb` canonical-id rename. Two claims have to hold + // Commit e2798fab7 — the `mongo` → `mongodb` canonical-id rename. Two claims have to hold // together, and only together: the stored value CONVERGES, and a deployment // that never runs the conversion is NOT broken. Either alone would be the // wrong shape — a rename that breaks old rows, or a rename that leaves one @@ -974,7 +974,7 @@ describe('conversion layer (ADR-0087 D2)', () => { }); it('still lands for a row whose driver id is ITSELF being renamed (#6345)', () => { - // The pairs are keyed by CANONICAL driver id, and #6345 renamed mongo's. + // The pairs are keyed by CANONICAL driver id, and commit e2798fab7 renamed mongo's. // A stored `driver: 'mongo'` must therefore still find the mongo pairs // (through the alias) even as the sibling conversion rewrites its id — // otherwise the rename would quietly un-convert every legacy mongo config. diff --git a/packages/spec/src/conversions/stored.test.ts b/packages/spec/src/conversions/stored.test.ts index 488d5969bc9..1770351c92a 100644 --- a/packages/spec/src/conversions/stored.test.ts +++ b/packages/spec/src/conversions/stored.test.ts @@ -126,7 +126,7 @@ describe('applyConversionsToStoredItem (stored sys_metadata rows, #3903)', () => // silently move a sqlite `file:` row's data to `:memory:`). describe('stored datasource rows (datasource-config-driver-key-aliases, #4456)', () => { // The fourth column is the driver id the stored pass SERVES, which differs - // from the stored one for exactly one row: #6345 renamed the canonical mongo + // from the stored one for exactly one row: commit e2798fab7 renamed the canonical mongo // id to `mongodb`, and `datasource-driver-mongo-to-mongodb` converges the // stored spelling in the same replay. Both conversions run over one row here, // which is the case worth pinning — the config-key rename is keyed by diff --git a/packages/spec/src/data/analytics-date-range-two-bound-window.test.ts b/packages/spec/src/data/analytics-date-range-two-bound-window.test.ts index 752d84036ce..a74648a5376 100644 --- a/packages/spec/src/data/analytics-date-range-two-bound-window.test.ts +++ b/packages/spec/src/data/analytics-date-range-two-bound-window.test.ts @@ -55,7 +55,7 @@ const RANGE_PATH = ['timeDimensions', 0, 'dateRange']; /** Arities the contract's own prose and #16322's shipped table already excluded. */ const REFUSED_ARITIES: ReadonlyArray = [ [], // no window at all - ['2026-01-01'], // the shape #17124 measured three ways + ['2026-01-01'], // read three ways until commit 86c505286 refused it ['2026-01-01', '2026-01-31', '2026-02-28'], // three bounds ['{7_days_ago}'], // one macro token is a bound, not a window ]; diff --git a/packages/spec/src/data/analytics-strictness-batchd.test.ts b/packages/spec/src/data/analytics-strictness-batchd.test.ts index ef718db99a5..0e29ce2274a 100644 --- a/packages/spec/src/data/analytics-strictness-batchd.test.ts +++ b/packages/spec/src/data/analytics-strictness-batchd.test.ts @@ -93,7 +93,7 @@ describe('#4001 batch D — the doors the cube family is reachable through', () it('[#10194] `analytics_cube` now resolves the SAME schema at the saveMetaItem door', () => { // This pin used to assert the opposite — `getMetadataTypeSchema` answering // `undefined` — and its comment demanded that the ADR-0010 envelope - // question be re-asked before the line was "fixed". It was: #10194 bound + // question be re-asked before the line was "fixed". It was: commit 2306a765c bound // `analytics_cube` in `UNREGISTERED_KIND_SCHEMAS` (so `PUT // /meta/analytics_cube/:name` stops storing any JSON as `success: true`), // and CubeSchema now declares `...MetadataProtectionFields`, exactly per diff --git a/packages/spec/src/data/api-derivation.test.ts b/packages/spec/src/data/api-derivation.test.ts index 007c164dc05..1e31d84f2f2 100644 --- a/packages/spec/src/data/api-derivation.test.ts +++ b/packages/spec/src/data/api-derivation.test.ts @@ -229,12 +229,12 @@ describe('api-derivation (#3391)', () => { ); expect(doc, 'DATA_ACTION_TO_API_OPERATION lost its TSDoc block').toBeTruthy(); // The block has two halves and only the first is a claim about today: - // the vocabulary description, then a `[#6259]` note recording what was + // the vocabulary description, then a `[commit 6968885ef]` note recording what was // removed and why. The note is EXPECTED to say `batch`; the description // saying it is the drift this issue is about ("runtime `callData` // actions (`query`/`find`→`list`, `batch`→`bulk`)"). - const [description, history] = doc![0].split('[#6259]'); - expect(history, 'the `[#6259]` removal note vanished from the TSDoc').toBeTruthy(); + const [description, history] = doc![0].split('[commit 6968885ef]'); + expect(history, 'the `[commit 6968885ef]` removal note vanished from the TSDoc').toBeTruthy(); expect(description).not.toMatch(/batch/); }); }); diff --git a/packages/spec/src/data/api-derivation.ts b/packages/spec/src/data/api-derivation.ts index e363ba62b6b..0716bfebe67 100644 --- a/packages/spec/src/data/api-derivation.ts +++ b/packages/spec/src/data/api-derivation.ts @@ -160,8 +160,8 @@ export const API_METHOD_DERIVATION: Record = { * the resolver, treated as ungated (custom actions were never gated by * `apiMethods`). * - * [#6259] The `batch: 'bulk'` row was removed, and the line above no longer - * calls `batch` a runtime `callData` action (both by commit 6968885ef). It was the one entry with no + * [commit 6968885ef] That commit removed the `batch: 'bulk'` row and stopped the + * line above calling `batch` a runtime `callData` action. It was the one entry with no * producer on either side: `callData` branches on a closed set that has not * contained `batch` since that arm was retired (#5856), and every REST caller * of `apiAccessDenialFromEnable` passes a canonical literal — including the diff --git a/packages/spec/src/data/driver/driver-credential-refusal.test.ts b/packages/spec/src/data/driver/driver-credential-refusal.test.ts index 2493dd8d286..6e6f087f258 100644 --- a/packages/spec/src/data/driver/driver-credential-refusal.test.ts +++ b/packages/spec/src/data/driver/driver-credential-refusal.test.ts @@ -794,7 +794,7 @@ describe('mongo options passthrough — nested credential-SPELLED keys refused a * config cannot work as written and the authoring door — the one place both * halves are visible at once — says so. * - * Envelope note (same as the #8082/#9040 pins above): the zod issue's `code` + * Envelope note (same as the #8082 / commit 24206416a pins above): the zod issue's `code` * and its pathed location are the whole envelope at this layer — every schema * refusal is wrapped uniformly by the publish door (metadata-protocol's * `422 INVALID_METADATA`, whose `issues[]` carry these codes verbatim). @@ -1025,7 +1025,7 @@ describe('datasource — bound credentialsRef + user-less mongo url refused (#90 * ''`); `buildMongoAuth`, the DSN branch's route, returns early on `!url`. So a * falsy `username` leaves the secret with nowhere to go. * - * Envelope note (same as the #8082/#9040/#9041 pins above): the zod issue's + * Envelope note (same as the #8082 / commit 24206416a / commit d491625c1 pins above): the zod issue's * `code` and its pathed location are the whole envelope at this layer — every * schema refusal is wrapped uniformly by the publish door (metadata-protocol's * `422 INVALID_METADATA`, whose `issues[]` carry these codes verbatim). diff --git a/packages/spec/src/data/driver/turso.test.ts b/packages/spec/src/data/driver/turso.test.ts index c73f40542ad..ccece3b9dad 100644 --- a/packages/spec/src/data/driver/turso.test.ts +++ b/packages/spec/src/data/driver/turso.test.ts @@ -1,7 +1,7 @@ // Copyright (c) 2026 ObjectStack. Licensed under the Apache-2.0 license. /** - * The turso/libSQL config contract (#6345). + * The turso/libSQL config contract (commit e2798fab7). * * These assertions are what "`validateDriverConfig('turso')` flipped from * `{ known: false }` to `{ known: true }`" MEANS in practice: before this file @@ -57,7 +57,7 @@ describe('TursoConfigSchema', () => { }); // The exact failure this contract was written for: `token` is the plausible - // spelling, `authToken` is the real one, and before #6345 the misspelling was + // spelling, `authToken` is the real one, and before commit e2798fab7 the misspelling was // accepted in silence and the connection attempted unauthenticated. Until // #7990 the fix was a rename hint onto `authToken`; now that `authToken` is // itself unwritable the same spelling gets the credential refusal directly — diff --git a/packages/spec/src/identity/api-key-retirement.test.ts b/packages/spec/src/identity/api-key-retirement.test.ts index 550d31b5924..7b60ded3497 100644 --- a/packages/spec/src/identity/api-key-retirement.test.ts +++ b/packages/spec/src/identity/api-key-retirement.test.ts @@ -8,7 +8,7 @@ import { holdersOf, } from '../../scripts/lib/export-origins-testkit'; -// ─── [#8715] `ApiKeySchema` is RETIRED ────────────────────────────────────── +// ─── [commit 2c86fe3ea] `ApiKeySchema` is RETIRED ─────────────────────────── // // ADR-0049 enforce-or-remove; maintainer ruling 2026-08-15 (disposition B: // delete). `identity/identity.zod.ts` no longer declares `ApiKeySchema` / @@ -16,7 +16,7 @@ import { // names, 19 authorable-surface keys, the reference page's `ApiKey` section // with them. // -// The measurement that decided it (issue #8715, dev report 2026-08-14; +// The measurement that decided it (commit 2c86fe3ea's card, dev report 2026-08-14; // re-verified at this retirement's base commit, 7901b2d): // // 1. STATIC — zero imports of any of the three names outside @@ -115,6 +115,6 @@ describe('[#8715] identity/ ApiKeySchema retirement', () => { } // Anti-vacuity: the explanatory block this retirement left behind is // present, so "false" above cannot mean "wrong file". - expect(src).toContain('are NOT declared here (#8715'); + expect(src).toContain('are NOT declared here (commit 2c86fe3ea'); }); }); diff --git a/packages/spec/src/identity/identity.zod.ts b/packages/spec/src/identity/identity.zod.ts index 2102422926e..ce35e72bdec 100644 --- a/packages/spec/src/identity/identity.zod.ts +++ b/packages/spec/src/identity/identity.zod.ts @@ -227,8 +227,8 @@ export const VerificationTokenSchema = lazySchema(() => z.object({ export type VerificationToken = z.input; /* - * `ApiKey` / `ApiKeySchema` / `ApiKeyParsed` are NOT declared here (#8715, - * maintainer-ruled DELETE 2026-08-15, commit 2c86fe3ea; ADR-0049 enforce-or-remove). + * `ApiKey` / `ApiKeySchema` / `ApiKeyParsed` are NOT declared here (commit 2c86fe3ea, + * maintainer-ruled DELETE 2026-08-15; ADR-0049 enforce-or-remove). * * The schema that stood here documented better-auth's `apiKey` PLUGIN shape — * a plugin this platform does not load: `start`, `lastRefetchAt`, `enabled` diff --git a/packages/spec/src/integration/connector-author-shape.test.ts b/packages/spec/src/integration/connector-author-shape.test.ts index eafdce8fca6..78e1bd61be9 100644 --- a/packages/spec/src/integration/connector-author-shape.test.ts +++ b/packages/spec/src/integration/connector-author-shape.test.ts @@ -52,7 +52,7 @@ import { ConnectorSchema } from './connector.zod'; // post-transform `{ dialect, source }` envelope and a bare cron string is // correctly rejected. When this gate was written that state sat on the bare // `Connector` and the author state on `ConnectorInput`, and this comment called -// flipping them "a real but separate appetite". ADR-0122 phase 2 (#6083) did it: +// flipping them "a real but separate appetite". ADR-0122 phase 2 (commit 53068c130) did it: // the bare `Connector` is now `z.input` — the shape the document annotates with // — and `ConnectorParsed` carries the parse result. The pinned FACT is // unchanged; the two names swapped sides, which is what the last describe block diff --git a/packages/spec/src/integration/connector.test.ts b/packages/spec/src/integration/connector.test.ts index ffc5b81063a..0a3648b6ea6 100644 --- a/packages/spec/src/integration/connector.test.ts +++ b/packages/spec/src/integration/connector.test.ts @@ -42,7 +42,7 @@ import { } from './connector.zod'; import { getMetadataTypeSchema } from '../kernel/metadata-type-schemas'; -// [#14676] the retirement pins at the bottom of this file +// [commit 13c48c2a5] the retirement pins at the bottom of this file import { MIGRATIONS_BY_MAJOR, RETIRED_DEFS_BY_MAJOR, @@ -793,7 +793,7 @@ describe('[#4703] FieldMapping no longer names three declarations', () => { // ============================================================================ // ADR-0010 protection envelope — PRESERVED on round-trip, not merely tolerated -// (#6362, split out of #6245) +// (commit b5404f496, the connector half #6245 left) // ============================================================================ /** @@ -927,7 +927,7 @@ describe('ADR-0010 protection envelope (#6362)', () => { // and is pinned beside it in `automation/`.) }); -// ─── [#14676] `connector.errorMapping` RETIRED, with the three defs it carried ── +// ─── [commit 13c48c2a5] `connector.errorMapping` RETIRED, with the three defs it carried ── // // ADR-0049 enforce-or-remove; triage ruling 2026-09-02 (route: removal via the // `spec-property-retirement` playbook; the split condition — a downstream @@ -1089,7 +1089,7 @@ describe('[#14676] connector.errorMapping retirement', () => { const connector: Connector = { ...ERROR_MAPPING_WELL_FORMED, // @ts-expect-error — `errorMapping` is a retiredKey() tombstone: its - // input type is `never`, so a typed literal cannot carry it (#14676). + // input type is `never`, so a typed literal cannot carry it (commit 13c48c2a5). errorMapping: AUTHORED_ERROR_MAPPING, }; // The parse channel agrees with the type channel on the same literal. diff --git a/packages/spec/src/security/explain.test.ts b/packages/spec/src/security/explain.test.ts index 24a14b971a7..5183e7e83aa 100644 --- a/packages/spec/src/security/explain.test.ts +++ b/packages/spec/src/security/explain.test.ts @@ -77,7 +77,7 @@ describe('ExplainLayerSchema — the ten-layer pipeline + contributor shape', () { kind: 'position', name: 'approver', via: 'delegation from u_boss until 2026-08-01', state: 'active' }, { kind: 'permission_set', name: 'approve_set', via: 'position:approver' }, { kind: 'position', name: 'payroll_approver', via: 'held until 2026-07-01 — expired', state: 'expired' }, - // [#8714 / ADR-0049] the second member of the shared held-state + // [commit 42b05af89 / ADR-0049] the second member of the shared held-state // vocabulary: the catalogue row is switched off. { kind: 'permission_set', name: 'crm_full', via: 'held — deactivated', state: 'deactivated' }, { kind: 'system', name: 'platform_admin' }, @@ -86,7 +86,7 @@ describe('ExplainLayerSchema — the ten-layer pipeline + contributor shape', () expect(full.contributors.map((c) => c.kind)).toEqual(['position', 'permission_set', 'position', 'permission_set', 'system']); // [ADR-0091 D2] the lifecycle state member L3 reads for the "expired" report expect(full.contributors[2].state).toBe('expired'); - // [#8714 / ADR-0049] the shared vocabulary's deactivated member + // [commit 42b05af89 / ADR-0049] the shared vocabulary's deactivated member expect(full.contributors[3].state).toBe('deactivated'); expect(full.contributors[1].state).toBeUndefined(); }); @@ -96,7 +96,7 @@ describe('ExplainLayerSchema — the ten-layer pipeline + contributor shape', () layer: 'principal', verdict: 'neutral', detail: 'x', contributors: [{ kind: 'role', name: 'x' }], })).toThrow(); - // [#8714] `suspended` is deliberately a STILL-UNKNOWN value: it proves the + // [commit 42b05af89] `suspended` is deliberately a STILL-UNKNOWN value: it proves the // reason enumeration stays CLOSED (extended only deliberately), not merely // widened. If a future lifecycle control legitimately adds `suspended`, // replace this pin with another unknown value in the same edit. diff --git a/packages/spec/src/shared/editability-boundary.test.ts b/packages/spec/src/shared/editability-boundary.test.ts index 567aaad05c3..e47fd805d3c 100644 --- a/packages/spec/src/shared/editability-boundary.test.ts +++ b/packages/spec/src/shared/editability-boundary.test.ts @@ -388,8 +388,8 @@ describe('#8201 — an option is offered or withheld, never shown-but-unselectab // prescription advertises are parsed back: a record-dependent predicate and // a `current_user` one (ADR-0068). ⚠️ The prescription no longer calls this // "the one `*When` surface that also binds `current_user`" — a form view's - // field and section predicates bind those roots too (objectui#6010 / #6110 - // / #6111), client-side. What is still unique here, and what the + // field and section predicates bind those roots too (objectui#6010 / objectui#6110 + // / objectui#6111), client-side. What is still unique here, and what the // prescription now rests on, is the clause below it: the rule validator // refuses the WRITE. Pinned so the retired exclusivity cannot return. const m = unknownKeyMessage(SelectOptionSchema, { ...OPTION, disabled: true }); diff --git a/packages/spec/src/shared/expression-dialect-docs.pin.test.ts b/packages/spec/src/shared/expression-dialect-docs.pin.test.ts index 9dc7198f9bc..c50ee79a41a 100644 --- a/packages/spec/src/shared/expression-dialect-docs.pin.test.ts +++ b/packages/spec/src/shared/expression-dialect-docs.pin.test.ts @@ -1,7 +1,7 @@ // Copyright (c) 2026 ObjectStack. Licensed under the Apache-2.0 license. /** - * [#6085] The `## Dialects` table in `expression.zod.ts`'s module TSDoc lists + * [commit 026101660] The `## Dialects` table in `expression.zod.ts`'s module TSDoc lists * exactly the members of `ExpressionDialect` — no more, no fewer. * * That table is not a comment. `build-docs.ts` publishes the module doc block diff --git a/packages/spec/src/shared/external-errors.test.ts b/packages/spec/src/shared/external-errors.test.ts index 08ab908bf85..7c7c2cad0ec 100644 --- a/packages/spec/src/shared/external-errors.test.ts +++ b/packages/spec/src/shared/external-errors.test.ts @@ -107,7 +107,7 @@ describe('renderDiffMessage', () => { }); /** - * [#11166] `unreachable` is a member of the kind vocabulary (the "could not + * [commit 735f5c709] `unreachable` is a member of the kind vocabulary (the "could not * be read" entry — a statement that validation was indeterminate, not a * schema fact) and renders like every other kind: the raw kind name plus the * carried error text, so an unknown-to-a-consumer entry is still loud. diff --git a/packages/spec/src/shared/metadata-collection.test.ts b/packages/spec/src/shared/metadata-collection.test.ts index 65aed09bd06..46b58eaab74 100644 --- a/packages/spec/src/shared/metadata-collection.test.ts +++ b/packages/spec/src/shared/metadata-collection.test.ts @@ -247,7 +247,7 @@ describe('MAP_SUPPORTED_FIELDS', () => { expect(MAP_SUPPORTED_FIELDS).toContain('dashboards'); expect(MAP_SUPPORTED_FIELDS).toContain('reports'); expect(MAP_SUPPORTED_FIELDS).toContain('actions'); - // 'themes' left the list at #10485 (ADR-0049 — carrier retired). + // 'themes' left the list at commit 35ad101bc (ADR-0049 — carrier retired). expect(MAP_SUPPORTED_FIELDS).toContain('flows'); expect(MAP_SUPPORTED_FIELDS).toContain('positions'); expect(MAP_SUPPORTED_FIELDS).toContain('permissions'); diff --git a/packages/spec/src/shared/metadata-url-spelling.test.ts b/packages/spec/src/shared/metadata-url-spelling.test.ts index 0d020e7efe1..90d91117bc7 100644 --- a/packages/spec/src/shared/metadata-url-spelling.test.ts +++ b/packages/spec/src/shared/metadata-url-spelling.test.ts @@ -48,7 +48,7 @@ describe('#7894 INVARIANT 1 — no spelling that worked before may stop working' // the `/meta` boundary before this change, so quantifying over it IS the // non-breaking proof. It includes five that name PLUGIN kinds with no static // registry entry (`webhooks`, `connectors`, `sharingRules`, - // `ragPipelines`, `analyticsCubes`; `themes` was the sixth until #10485 + // `ragPipelines`, `analyticsCubes`; `themes` was the sixth until commit 35ad101bc // retired its carrier out of the map) — a purely registry-derived map would // have dropped those, which is why the derived limb is unioned rather than // substituted. @@ -69,7 +69,7 @@ describe('#7894 INVARIANT 1 — no spelling that worked before may stop working' // see the population rather than infer it. const registryTypes = new Set(DEFAULT_METADATA_TYPE_REGISTRY.map((e) => e.type)); const pluginOnly = Object.entries(PLURAL_TO_SINGULAR).filter(([, s]) => !registryTypes.has(s)); - // `themes` left this list at #10485 (ADR-0049 — the carrier retired, so + // `themes` left this list at commit 35ad101bc (ADR-0049 — the carrier retired, so // `/meta/theme` now earns `unrecognisedMetaTypeRefusal`'s verdict; pinned // in the #8421 block at the bottom of this file). expect(pluginOnly.map(([p]) => p).sort()).toEqual( @@ -165,7 +165,7 @@ describe('#7894 — the refusal limb is narrow by construction', () => { // which the five mapped kinds below stay writable and the six unmapped // names no longer are. That narrowing is pinned, deliberately visible, in // the `#8421` block at the bottom of this file. (`theme` moved from this - // list to the refused side at #10485 — its carrier retired out of the map, + // list to the refused side at commit 35ad101bc — its carrier retired out of the map, // so it is no longer "a spelling that worked before" for this verdict: // `metaUrlSpellingRefusal` still answers null for it, but the #8421 // verdict now refuses it, pinned below.) @@ -254,7 +254,7 @@ describe('#8421 — the second verdict: not a metadata type AT ALL', () => { it('[#10485] `theme` left the contract with its carrier — refused by name', () => { // The retired kind's whole exit path: the `themes: 'theme'` fold left // `PLURAL_TO_SINGULAR`, so both spellings now earn the #8421 verdict - // instead of the pre-#10194 store-anything branch. + // instead of the store-anything branch commit 2306a765c closed. for (const spelling of ['theme', 'themes']) { const verdict = unrecognisedMetaTypeRefusal(spelling); expect(verdict, `${spelling} must be refused`).not.toBeNull(); diff --git a/packages/spec/src/shared/union-author-message-pins.test.ts b/packages/spec/src/shared/union-author-message-pins.test.ts index 738a1c11350..153912e497a 100644 --- a/packages/spec/src/shared/union-author-message-pins.test.ts +++ b/packages/spec/src/shared/union-author-message-pins.test.ts @@ -6,8 +6,8 @@ * * ## Why this file exists * - * #14722 asserted that a `devPlugins[]` refusal reaches the author keyless. - * Measured, it does not — `formatZodIssue` descends `invalid_union`, ranks the + * A card asserted that a `devPlugins[]` refusal reaches the author keyless. Measured + * in commit 23c72be3c, it does not — `formatZodIssue` descends `invalid_union`, ranks the * branches through `selectUnionBranches` (`./union-branch-policy.ts`, #8318), * drops the string arm as kind-mismatch-only and renders the object branch * verbatim. But **nothing pinned that**, so the rendered half was re-reported @@ -412,8 +412,8 @@ describe('[#15423] the AUTHOR-VISIBLE message at a string-or-object union site', it.each(SITES)('%s', (_name, site) => { const rendered = render(site, site.reject); - // The key the author actually mistyped. This is the assertion #14722 - // believed would fail — the "keyless `Invalid input`" claim. + // The key the author actually mistyped. Commit 23c72be3c's card believed this + // assertion would fail — the "keyless `Invalid input`" claim. expect(rendered, `${site.site}: the undeclared key must reach the author`) .toContain(site.keyInMessage); diff --git a/packages/spec/src/stack-artifact-packages.test.ts b/packages/spec/src/stack-artifact-packages.test.ts index d933932154c..d3f51e096f3 100644 --- a/packages/spec/src/stack-artifact-packages.test.ts +++ b/packages/spec/src/stack-artifact-packages.test.ts @@ -287,9 +287,9 @@ describe('ADR-0130 D4 — each `packages` entry is an OBJECT wrapping its manife }); it('exports the entry schema so the load path judges the same shape', () => { - // #14162's iteration and any consumer that reads one entry must reuse this - // schema rather than re-derive the wrapper — a second declaration of one - // shape is the drift ADR-0116 exists about, in miniature. + // The artifact load path's iteration (commit c5a9a437d) and any consumer that + // reads one entry must reuse this schema rather than re-derive the wrapper — + // a second declaration of one shape is the drift ADR-0116 exists about, in miniature. expect(ArtifactPackageEntrySchema.safeParse({ manifest: crmManifest }).success).toBe(true); expect(ArtifactPackageEntrySchema.safeParse(crmManifest).success).toBe(false); }); diff --git a/packages/spec/src/stack-top-level-strict.test.ts b/packages/spec/src/stack-top-level-strict.test.ts index 68b8ff7f322..5d06b5e4ba9 100644 --- a/packages/spec/src/stack-top-level-strict.test.ts +++ b/packages/spec/src/stack-top-level-strict.test.ts @@ -100,7 +100,7 @@ describe('#8687 — unknown top-level stack keys are refused at parse', () => { ['workflows', 'state_machine'], // #3464: the collection was removed outright. ['portals', 'nothing ever consumed it'], - // #10485 (ADR-0049): the themes carrier retired; app.branding is the + // Commit 35ad101bc (ADR-0049): the themes carrier retired; app.branding is the // one colour surface. ['themes', 'app.branding'], // #4212: the uninvoked lifecycle family. diff --git a/packages/spec/src/system/environment-artifact.test.ts b/packages/spec/src/system/environment-artifact.test.ts index e1935f63ab5..dafd866cb7e 100644 --- a/packages/spec/src/system/environment-artifact.test.ts +++ b/packages/spec/src/system/environment-artifact.test.ts @@ -87,7 +87,7 @@ describe('[#4740] `EnvironmentArtifact(Schema)` resolves to the ./system declara // by resolving nothing. const systemNames = exportNamesOf('./system'); expect(systemNames.length, './system must export a non-trivial surface').toBeGreaterThan(100); - // `EnvironmentArtifactInput` was retired by ADR-0122 phase 2 (#6083) — the + // `EnvironmentArtifactInput` was retired by ADR-0122 phase 2 (commit 53068c130) — the // bare name IS the author state now, and the parsed state moved onto // `EnvironmentArtifactParsed`. The pin follows the surviving names: the // dual-source hazard is about WHICH DECLARATION a name resolves to, so it @@ -298,7 +298,7 @@ describe('EnvironmentArtifactSchema (wire shape)', () => { // ─── grantedPermissions (#14865) ──────────────────────────────────────────── // -// The artifact-contract half of #11333 option A / the #13457 batch ruling: the +// Commit e58ea8b38, the artifact-contract half of the #13457 batch ruling: the // consented four-class permission set `{ services, hooks, network, fs }` rides // the envelope — written by the cloud control plane at consent-compile time, // read by the loader at materialize time. Before this key was declared, diff --git a/packages/spec/src/system/i18n-resolver.test.ts b/packages/spec/src/system/i18n-resolver.test.ts index 4ac9e2347c8..fbcc161979f 100644 --- a/packages/spec/src/system/i18n-resolver.test.ts +++ b/packages/spec/src/system/i18n-resolver.test.ts @@ -1607,7 +1607,7 @@ describe('translatePage', () => { { type: 'page:card', id: 'ai_briefing', properties: { title: 'Ask the AI Assistant', description: 'Open the assistant panel from the right edge…' } }, { type: 'element:record_picker', id: 'lead_picker', properties: { object: 'lead', placeholder: 'Search leads…', emptyText: 'No records' } }, // Was `element:form` until #9249 retired that element whole, then a - // bespoke type carrying the `submitLabel` pin pending #10926. That + // bespoke type carrying the `submitLabel` pin until commit d173125fb, whose // ruling retired the key from the copy face, so the node now pins // the NEGATIVE: a bespoke component's `submitLabel` is no longer // overlaid, however the bundle spells it. @@ -1798,7 +1798,7 @@ describe('translatePage', () => { }); // ──────────────────────────────────────────────────────────────────────────── -// #12961 — the descent into a container's declared `properties.children` +// Commit 901355c3b — the descent into a container's declared `properties.children` // // Ruled 2026-08-29 (maintainer, verbatim 「同意」, option A): `translatePage` // descends into DECLARED `properties.children` arrays, so copy authored for a @@ -1965,7 +1965,7 @@ describe('translatePage — nested `properties.children` descent (#12961)', () = it('descends into `items[].children` — the contract call the #12961 line left open, made by #16772', () => { // `page:tabs` / `page:accordion` nest their children one level deeper, - // under `properties.items[].children`. The #12961 ruling named + // under `properties.items[].children`. The 2026-08-29 ruling (commit 901355c3b) named // `properties.children` and recorded this one as "its own contract // call"; #16772 is that call, measured on a slotted contract page whose // seven tab panels held every related list the resolver never reached. @@ -2196,13 +2196,13 @@ describe('translatePage — nested `properties.children` descent (#12961)', () = }); // ──────────────────────────────────────────────────────────────────────────── -// #13218 — walkAddressedPageComponents, THE shared addressed-component walk +// Commit c45d8e6b4 — walkAddressedPageComponents, THE shared addressed-component walk // ──────────────────────────────────────────────────────────────────────────── // // The exported contract behind both `translatePage` (above — its behaviour // through the walk is pinned by every fixture in that block) and the CLI // extractor's `collectExpectedEntries`. These pins address the walk DIRECTLY, -// extractor-style, so each of the five converged invariants (#13218) has a +// extractor-style, so each of the five converged invariants (commit c45d8e6b4) has a // red test naming it in the package that owns it; the cross-package // differential lives in `packages/cli/test/platform-page-i18n-parity.test.ts`. diff --git a/packages/spec/src/system/operation-message.test.ts b/packages/spec/src/system/operation-message.test.ts index 458d8136297..7be876ae3a5 100644 --- a/packages/spec/src/system/operation-message.test.ts +++ b/packages/spec/src/system/operation-message.test.ts @@ -296,7 +296,7 @@ describe('operation message catalog — the row-level user copy (#7451)', () => }); /** - * #12493 — two keys whose EMITTERS convert in follow-up cards: the sharing + * Commit aa5994e17 — two keys whose EMITTERS convert in follow-up cards: the sharing * middleware's by-id write denial (`record_write_denied`, consumer half * #12260) and plugin-approvals' non-submitter recall refusal * (`approval_recall_not_submitter`, consumer half #11993). Until those land, diff --git a/packages/spec/src/system/translation.test.ts b/packages/spec/src/system/translation.test.ts index b23b40b10d6..72272194218 100644 --- a/packages/spec/src/system/translation.test.ts +++ b/packages/spec/src/system/translation.test.ts @@ -913,7 +913,7 @@ describe('translation unknown-key strictness (#4001)', () => { }); it('refuses `submitLabel` with the retirement prescription (#10926)', () => { - // Flipped, not deleted: until #10926 this case pinned `submitLabel` as + // Flipped, not deleted: until commit d173125fb this case pinned `submitLabel` as // an accepted copy key (latterly on a bespoke component type, after // #9249 retired `element:form`, its only spec-declared carrier). The // maintainer ruled retire over re-anchor, so the same authored shape now diff --git a/packages/spec/src/type-alias-convention.pin.test.ts b/packages/spec/src/type-alias-convention.pin.test.ts index 67a1ce41525..87b68bc36ed 100644 --- a/packages/spec/src/type-alias-convention.pin.test.ts +++ b/packages/spec/src/type-alias-convention.pin.test.ts @@ -5,9 +5,9 @@ // ## What this file is // // ADR-0122 makes the bare name `X` the AUTHOR state and `XParsed` the PARSED -// state. Phase 1 (#5551 / PR #6072) declared an `XParsed` for every alias whose +// state. Phase 1 (#5551 / commit 7f713b662) declared an `XParsed` for every alias whose // schema actually HAS two shapes (`z.input` differs from `z.infer`); phase 2 -// (#6083, protocol 17) flipped all 1384 bare aliases to `z.input` and retired +// (commit 53068c130, protocol 17) flipped all 1384 bare aliases to `z.input` and retired // the 102 `XInput` names the flip turned into synonyms. The complement — // schemas whose two shapes coincide, so the flip changed nothing observable — // deliberately gets no `XParsed`, because a permanent synonym is a name an @@ -154,7 +154,7 @@ import type * as M82 from './kernel/dependency-resolution.zod.js'; import type * as M83 from './kernel/events/core.zod.js'; import type * as M84 from './kernel/events/handlers.zod.js'; import type * as M85 from './kernel/manifest.zod.js'; -// (M86 was kernel/metadata-customization.zod.js, removed whole in #13135 — +// (M86 was kernel/metadata-customization.zod.js, removed whole in commit 9e0ba21a1 — // ADR-0049 retirement of the paper customization protocol. The M number is // positional and stays vacant.) import type * as M87 from './kernel/metadata-loader.zod.js'; @@ -253,7 +253,7 @@ import type * as M162 from './ui/notification.zod.js'; import type * as M163 from './ui/page.zod.js'; import type * as M164 from './ui/report.zod.js'; import type * as M165 from './ui/responsive.zod.js'; -// M166 was './ui/theme.zod.js' — retired whole at #10485 (ADR-0049); the +// M166 was './ui/theme.zod.js' — retired whole at commit 35ad101bc (ADR-0049); the // M-indices are positional, so the slot stays vacant rather than renumbering. import type * as M167 from './ui/view.zod.js'; // Appended out of alphabetical order deliberately: the M-indices are positional @@ -279,7 +279,7 @@ import type * as M188 from './ai/build-progress.zod.js'; // That number is machine-checked, not hand-kept. The runtime companion at the // bottom of this file recomputes the pin count from the source and asserts that // every sentence stating it — this header and that case's own title — agrees -// (#6605). Before the check existed this line had been left at 717 while the +// (commit c6b05c76a). Before the check existed this line had been left at 717 while the // list grew past 800, because the counting assertion reads the `export type // Iso...` declarations and never the prose sitting beside them. // --------------------------------------------------------------------------- @@ -308,7 +308,7 @@ import type * as M188 from './ai/build-progress.zod.js'; // Two cohorts used to head blocks of their own; their pins are now filed under // their modules like every other pin. // -// Phase 2 (#6083) additions. These 35 schemas were never in phase 1's +// Phase 2 (commit 53068c130) additions. These 35 schemas were never in phase 1's // population: their bare alias already read `z.input` before the flip, so the // phase-1 gate — which only looked at bare `z.infer` aliases — never asked // whether their parsed state was named. The inverted gate does ask, and the @@ -740,7 +740,7 @@ export type Iso_automation_nodeExecutor__WaitResumePayloadSchema = Assert, z.infer< typeof M41.WaitTimeoutBehaviorSchema > >>; // automation/schedule-organization.zod.ts -// [#16659] A bare non-empty string: no transform, no default, no coercion — an +// [commit ecdfc9411] A bare non-empty string: no transform, no default, no coercion — an // organization id is written exactly as it is stored. So input === infer, and an // `XParsed` here would be a permanent synonym. The day this schema learns to // normalize an id, this line goes red and the ADR's remedy applies. @@ -971,7 +971,7 @@ export type Iso_kernel_manifest__PluginRuntimeSchema = Assert, z.infer< typeof M165.ResponsiveStylesSchema > >>; export type Iso_ui_responsive__StyleMapSchema = Assert, z.infer< typeof M165.StyleMapSchema > >>; -// ui/theme.zod.ts — its five pins (Iso700–Iso704) left with the module at #10485. +// ui/theme.zod.ts — its five pins (Iso700–Iso704) left with the module at commit 35ad101bc. // ui/view.zod.ts // `ViewItemSchema` and `ViewItemWireSchema` left the family on #19920: their @@ -1660,8 +1660,8 @@ export type AFamilyParsedIsParseState = Assert< describe('ADR-0122 type-alias convention', () => { // The title states the count as well, and hand-tracking it did not hold: it - // was corrected once, from 751 to 754 (#6037), and had drifted again to sit - // 68 behind by the time #6605 looked. Both prose statements of the number — + // was corrected once, from 751 to 754 (commit 18189983d), and had drifted again to sit + // 68 behind when commit c6b05c76a counted. Both prose statements of the number — // this title and the section header above the pin list — are now asserted // against the recomputed count below, so neither can go stale without a red // test naming it. @@ -1699,7 +1699,7 @@ describe('ADR-0122 type-alias convention', () => { // are in this number at once, which is exactly why it is recomputed from the // source rather than reasoned about: -4 retired, +0 of my own. // - // The fourth way is the one ADR-0122 phase 2 (#6083) added, and it is a + // The fourth way is the one ADR-0122 phase 2 (commit 53068c130) added, and it is a // BULK rise with no schema change behind it at all: 716 -> 751. Those // 35 schemas are not new and did not move. Their bare alias already read // `z.input` before the flip, so phase 1's gate — which only ever looked at @@ -1708,12 +1708,12 @@ describe('ADR-0122 type-alias convention', () => { // answered "isomorphic". A jump this size is normally the shape of a // mistake; this one is a gate widening, and the pins are its receipt. // - // 751 -> 754 is #6037's `ValidateDataIssue` / `ValidateDataRequest` / + // 751 -> 754 is commit 18189983d's `ValidateDataIssue` / `ValidateDataRequest` / // `ValidateDataResponse` — three new protocol shapes with no defaults or // transforms anywhere in their trees, i.e. the second (RISE) case above. // // - // 751 -> 754 is #6037's `ValidateDataIssue` / `ValidateDataRequest` / + // 751 -> 754 is commit 18189983d's `ValidateDataIssue` / `ValidateDataRequest` / // `ValidateDataResponse` — three new protocol shapes with no defaults or // transforms anywhere in their trees, i.e. the second (RISE) case above. // @@ -1722,7 +1722,7 @@ describe('ADR-0122 type-alias convention', () => { // has no default or transform, so its two shapes coincide and it gets a pin // rather than a `SpecifierValueDomainParsed` synonym. // - // 755 -> 748 is the 2026-08-08 ADR-0049 retirement sweep (#6486), the + // 755 -> 748 is the 2026-08-08 ADR-0049 retirement sweep (#6486; commit f549a0d4a), the // first way again — a schema left the package, so its pin left with it. // Written out per member, because a MULTI-member sweep is exactly where a // count gets nudged to fit instead of recomputed: @@ -1730,7 +1730,7 @@ describe('ADR-0122 type-alias convention', () => { // #5295 -3 ServerEventType, ServerEventSchema, ServerStatusSchema // (`ServerCapabilities` has a `Parsed` alias, so it was never // pinned here — a retired schema does not always cost a line) - // #6239 -4 DeleteViewResponseSchema, ListViewsRequestSchema, + // views -4 DeleteViewResponseSchema, ListViewsRequestSchema, // GetViewRequestSchema, DeleteViewRequestSchema (four of the // ten view schemas were isomorphic; the other six were paired) // #6414 0 every ETL alias already had a `Parsed` counterpart @@ -1739,9 +1739,9 @@ describe('ADR-0122 type-alias convention', () => { // because they are the ways a MINUS gets miscomputed here. (1) The member // count (3) and the pin count (7) have no relation to each other. (2) The // -7 was computed against 751 at the branch point and had to be rebased - // TWICE before landing — onto #6037's 754, then onto #5933's 755 — so the + // TWICE before landing — onto commit 18189983d's 754, then onto #5933's 755 — so the // subtrahend was the only stable operand. (3) A sibling retirement in the - // same window contributed ZERO: #6527 retired `array_agg` / `string_agg` + // same window contributed ZERO: commit 259459d8b retired `array_agg` / `string_agg` // from `AggregationFunction`, and an enum VALUE narrowing is invisible // here, exactly as it is to the four surface ratchets. Recompute from the // file; never from the changelog. @@ -1809,7 +1809,7 @@ describe('ADR-0122 type-alias convention', () => { // renumbered, because the ids are claims about pins and not positions // (`Iso824` remains the highest, and the next author still takes 825). // - // 823 -> 824 is #6604 — the `-1` in #4593's arithmetic above, collected. + // 823 -> 824 is commit d127ff002 — the `-1` in #4593's arithmetic above, collected. // That subtraction was not a measurement but an OPEN QUESTION: the alias // for `system/ServiceStatus` was withheld because declaring it would have // minted the #4411 dual-source trap against `./api`'s discovery health @@ -1838,7 +1838,7 @@ describe('ADR-0122 type-alias convention', () => { // two shapes coincide and ADR-0122 gives it a pin rather than an // `XParsed`. Its id is `Iso836`, the next free one, not a number near its // neighbours: the ids are claims about pins and not positions (the same - // rule the #4914 decrease and the #6604 entry above both record). + // rule the #4914 decrease and the commit d127ff002 entry above both record). // // 825 -> 826 is #4717's `RuntimeAuthoringIssueSchema` — the ONE element // shape the #4463 runtime authoring gate reports a finding in, on both @@ -1933,12 +1933,12 @@ describe('ADR-0122 type-alias convention', () => { // input/output identity into the annotation itself, where both halves // spell the same type. // - // 839 -> 834 is #10485 — `Iso700`-`Iso704` DELETED with `ui/theme.zod.ts` + // 839 -> 834 is commit 35ad101bc — `Iso700`-`Iso704` DELETED with `ui/theme.zod.ts` // (ADR-0049 retirement of the whole theme authoring surface): the five // schemas they pinned no longer exist, so there is nothing left to exempt. // The Iso numbers are positional and stay vacant. // - // 836 -> 837 is #11006's `PublishMetaItemRequestSchema` — the request half + // 836 -> 837 is commit cccbe51bf's `PublishMetaItemRequestSchema` — the request half // of the door whose response half `Iso836` pinned (#7294), declared on the // 2026-08-22 maintainer ruling that also gave `MetadataProtocol` the // optional `publishMetaItem` member. Isomorphism MEASURED, not assumed: @@ -1956,7 +1956,7 @@ describe('ADR-0122 type-alias convention', () => { // exempt. -4 retired, +0 of my own; the Iso numbers stay vacant. // // 833 -> 835 is #11678's `AuditMetaItemRequestSchema` / - // `AuditMetaItemResponseSchema` — the audit door declared on the #11006 + // `AuditMetaItemResponseSchema` — the audit door declared on the commit cccbe51bf // pattern (PR #12003). Isomorphism MEASURED, not assumed: the request is // two required `z.string()`s, a `z.string().nullable().optional()` and an // optional `z.number()`; the response is one `z.array` of a plain object @@ -1986,7 +1986,7 @@ describe('ADR-0122 type-alias convention', () => { // rather than an `XParsed`. Ids `Iso859`/`Iso860`/`Iso861`, the next // free ones — ids are claims about pins, not positions. // - // 837 -> 838 is #12194's `MetadataItemNameSchema` — the item-name grammar + // 837 -> 838 is commit 311433f6b's `MetadataItemNameSchema` — the item-name grammar // (shared/identifiers.zod.ts). A bare `z.string().regex()` with no // `.default()`, `.transform()`, `.catch()` or `.pipe()`, so `z.input` and // `z.infer` are both `string` and ADR-0122 gives it a pin rather than an @@ -2002,7 +2002,7 @@ describe('ADR-0122 type-alias convention', () => { // removed; the Iso number stays vacant (ids are claims about pins, not // positions). // - // 837 -> 833 is #13135's ADR-0049 retirement of the paper + // 837 -> 833 is commit 9e0ba21a1's ADR-0049 retirement of the paper // metadata-customization protocol: `kernel/metadata-customization.zod.ts` // removed whole, so its four pins `Iso408`-`Iso411` // (`CustomizationOriginSchema` / `FieldChangeSchema` / @@ -2012,7 +2012,7 @@ describe('ADR-0122 type-alias convention', () => { // // 833 -> 835 is #12005's `HistoryMetaItemRequestSchema` / // `HistoryMetaItemResponseSchema` — the history door declared on the - // #11006 pattern, exactly as #11678 (PR #12003) declared its audit twin. + // commit cccbe51bf pattern, exactly as #11678 (PR #12003) declared its audit twin. // Isomorphism MEASURED, not assumed: the request is two required // `z.string()`s, an optional `z.string()` and two optional // `z.number()`s; the response is one `z.array` of a plain object of @@ -2071,7 +2071,7 @@ describe('ADR-0122 type-alias convention', () => { // absence of all six retired names on every public entry. -3 removed; the // Iso numbers stay vacant (ids are claims about pins, not positions). // - // 832 -> 831 is #14691's ADR-0049 retirement of `crud.patterns` on + // 832 -> 831 is commit b3a63d32c's ADR-0049 retirement of `crud.patterns` on // `CrudEndpointsConfigSchema` (api/rest-server.zod.ts): its value def // `CrudEndpointPatternSchema` had no other consumer and left the module // whole (RETIRED_DEFS_BY_MAJOR[18] `api/CrudEndpointPattern`), so its pin @@ -2118,7 +2118,7 @@ describe('ADR-0122 type-alias convention', () => { // disjoint pins.) const self = readFileSync(fileURLToPath(import.meta.url), 'utf8'); const pins = self.match(/^export type Iso\w+ = Assert 826 is #14676's ADR-0049 retirement of `connector.errorMapping`: + // 828 -> 826 is commit 13c48c2a5's ADR-0049 retirement of `connector.errorMapping`: // `ErrorMappingRuleSchema` and `ConnectorErrorCategorySchema` left whole // with the key (whole-def removal, `RETIRED_DEFS_BY_MAJOR[18]`), so the // two pins that named them (`Iso381` / `Iso382`) leave with the schemas. @@ -2172,7 +2172,7 @@ describe('ADR-0122 type-alias convention', () => { // `Iso871`. The four package-format modules (M50–M53) moved to // `marketplace/` and kept their pins. -30 + 1. // - // 782 -> 783 is #16659's `ScheduleOrganizationSchema` + // 782 -> 783 is commit ecdfc9411's `ScheduleOrganizationSchema` // (automation/schedule-organization.zod.ts, new module slot M186): the // acting organization a time-triggered flow declares, a bare // `z.string().min(1)` — no coercion, no default, no transform, because an @@ -2414,7 +2414,7 @@ describe('ADR-0122 type-alias convention', () => { expect(pins).toHaveLength(773); // The count is stated in PROSE twice as well — this case's title and the - // section header above the pin list — and until #6605 nothing read either + // section header above the pin list — and until commit c6b05c76a nothing read either // one. Both had drifted, by different amounts: the header sat 106 behind, // the title 68. Correcting them is not the fix, because correcting was // already tried on the title once (the receipt at the top of this case) From 0e92e882f4ea0fe361e665c2c06f34423f4a1f53 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 4 Oct 2026 06:03:04 +0000 Subject: [PATCH 2/2] chore(changeset): @objectstack/spec patch for the two re-anchored shipped comments src/identity/identity.zod.ts ships verbatim through files[] (src/**/*.zod.ts), and the api-derivation.ts docblock is emitted with its declaration, so the rewritten text publishes. Claude-Session: https://claude.ai/code/session_01T9u38rswFp5Rw8DswRUReJ Co-authored-by: Claude --- .../spec-test-surface-dead-citation-anchors.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 .changeset/spec-test-surface-dead-citation-anchors.md diff --git a/.changeset/spec-test-surface-dead-citation-anchors.md b/.changeset/spec-test-surface-dead-citation-anchors.md new file mode 100644 index 00000000000..ca08b9af305 --- /dev/null +++ b/.changeset/spec-test-surface-dead-citation-anchors.md @@ -0,0 +1,16 @@ +--- +'@objectstack/spec': patch +--- + +Two provenance comments that tests read literally were re-anchored + +Clause-②: no + +The removal note on `DATA_ACTION_TO_API_OPERATION` in `src/data/api-derivation.ts` and the +explanatory block about `ApiKeySchema` in `src/identity/identity.zod.ts` cited tracker numbers +that no longer resolve on GitHub. Each now opens with the commit in this repository's history +that decided the matter: 6968885ef removed the producer-less `batch: 'bulk'` alias row, and +2c86fe3ea deleted `ApiKeySchema` on the maintainer's ruling. The unit tests that read those two +comments moved with them, and the same re-anchoring was applied to the comments in the +package's test files, which do not ship. Comments only: no type, schema, export or runtime +behaviour changes.