From 7a1dca40159b473c2915494a4259cb18fc06f66b Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 29 Sep 2026 16:51:10 +0000 Subject: [PATCH 1/2] docs(spec): re-anchor the dead tracker citations in conversions/registry.ts and integration/connector.zod.ts to the ADR and commits that decided them Thirteen comment and docblock sites cited tracker numbers that answer 404. Each now cites, in ruling C+D form C, the record that decided its rule: the ADR-0087 2026-09-13 addendum for the three data-at-rest seams that retiredFromLoadPath does not hold back, otherwise the deciding commit on main (b799ac553, e2798fab7, d173125fb, 15d58dbf1, c459da6bc, 13c48c2a5, b5404f496). Comments only; no code token, string literal or describe() text moves. Claude-Session: https://claude.ai/code/session_01Sfe5YjBLwB9J3y8fvm2xq1 Co-authored-by: Claude --- packages/spec/src/conversions/registry.ts | 26 +++++++++---------- .../spec/src/integration/connector.zod.ts | 2 +- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/packages/spec/src/conversions/registry.ts b/packages/spec/src/conversions/registry.ts index 1106a3b8f09..5286deb7f63 100644 --- a/packages/spec/src/conversions/registry.ts +++ b/packages/spec/src/conversions/registry.ts @@ -463,7 +463,7 @@ function renameVisibilityAlias( * `visibleWhen` across all layers. Applies to form sections and (recursively * nested) form fields in every FORM payload {@link mapViewPayloads} reaches — * `views[].form` / `views[].formViews.*`, a ViewItem record's `config`, and a - * flattened form overlay's top level (#13031). **Live window**: the protocol-15 loader accepts the deprecated + * flattened form overlay's top level (commit b799ac553). **Live window**: the protocol-15 loader accepts the deprecated * key (the zod schemas also normalize it at parse — this entry makes the * acceptance *declared, loud, and expiring* per ADR-0087 D2, and will * graduate into the step-16 chain when the alias is removed). @@ -2095,8 +2095,8 @@ const toolInertAuthoringKeysRemoved: MetadataConversion = { * * ⚠️ Fact 2 is about the MECHANISM, not about this entry, and it outlived the * entry: `retiredFromLoadPath` still holds nothing back at three runtime seams - * (#16864). Before setting that flag on a DEFAULT FLIP — as opposed to a - * lossless delete or a rename — read that card, because the flag does not mean + * (ADR-0087's 2026-09-13 addendum names all three). Before setting that flag on a DEFAULT FLIP — as opposed to a + * lossless delete or a rename — read that addendum, because the flag does not mean * what its name and every docblock around it say it means. */ @@ -3368,7 +3368,7 @@ const DATASOURCE_CONFIG_KEY_ALIASES: Readonly< 'sqlite-wasm': [['file', 'filename'], ['database', 'filename']], postgres: [['connectionString', 'url'], ['user', 'username']], mysql: [['connectionString', 'url'], ['user', 'username']], - // `mongodb` since #6345 — the canonical id was renamed from `mongo` so the + // `mongodb` since commit e2798fab7 — the canonical id was renamed from `mongo` so the // contract canon matches what both boot hosts, the driver package and every // URL scheme already said. Keyed by the CANONICAL id `resolveDriverId` // returns, so a stored `driver: 'mongo'` still lands here through the alias. @@ -3473,14 +3473,14 @@ const datasourceConfigDriverKeyAliases: MetadataConversion = { }; /** - * `datasource.driver: 'mongo'` → `'mongodb'` (protocol 17, #6345). + * `datasource.driver: 'mongo'` → `'mongodb'` (protocol 17, commit e2798fab7). * * ## Why a stored value has to move at all * * `mongo` and `mongodb` have both been accepted spellings since #4410, and both * still are — this conversion does NOT rescue a broken boot, and a deployment * that never runs it keeps connecting exactly as before. What moved is the - * CANONICAL id: #6345's ruling renamed it to `mongodb`, the spelling both boot + * CANONICAL id: commit e2798fab7 landed the ruling that renamed it to `mongodb`, the spelling both boot * hosts, the driver package (`@objectstack/driver-mongodb`) and every URL scheme * already used, so that the id which selects a driver and the id which selects * its config contract are one string with no mapping layer between them. @@ -7341,12 +7341,12 @@ const translationPerAppSettingsRemoved: MetadataConversion = { /** * `translation.pages..components..submitLabel` — the component-copy - * key retired with its only declarer (protocol 18, #10926, ADR-0049). + * key retired with its only declarer (protocol 18, commit d173125fb, ADR-0049). * * The face is measured, not mirrored: each copy key exists because some * component in `ComponentPropsMap` declares it, and `submitLabel`'s only * declarer was `element:form` — retired whole by #9249 (`element-form-removed` - * above). The maintainer ruled retire over re-anchor (#10926): the live form + * above). The maintainer ruled retire over re-anchor (2026-08-22, landed as commit d173125fb): the live form * surface's submit copy is `object-form`'s `submitText` (`I18nLabelSchema`), * localizable at its own authoring site, so re-anchoring would have widened * the face for one word. The key, its `submit` alias and its @@ -8243,7 +8243,7 @@ const recordHighlightsFieldIconRemoved: MetadataConversion = { }; /** - * `mapping.fieldMapping[].params` lookup keys removed (#10329, ADR-0049 + * `mapping.fieldMapping[].params` lookup keys removed (commit 15d58dbf1, ADR-0049 * enforce-or-remove — the sub-walk half of the 17.0.0 #4509 mapping cleanup). * * `object` / `fromField` / `toField` / `autoCreate` declared a per-entry @@ -8253,7 +8253,7 @@ const recordHighlightsFieldIconRemoved: MetadataConversion = { * `import-coerce.ts` off the TARGET FIELD's own metadata — never off these * keys. Implementing them (a second reference-resolution dialect on the import * path) is what the code comment in `packages/rest/src/import-mapping.ts` - * declines to build, and the #10329 triage ruling confirms that posture. + * declines to build, and the triage ruling commit 15d58dbf1 landed confirms that posture. * * `autoCreate` was the one with teeth: it read as "create the referenced * record when nothing matches", and nothing was ever created — with or without @@ -8933,7 +8933,7 @@ const permissionAllowRestorePurgeRemoved: MetadataConversion = { }; /** - * [#12868] The per-option `default` key leaves the FORM-VIEW options + * [commit c459da6bc] The per-option `default` key leaves the FORM-VIEW options * vocabulary (protocol 18; maintainer-ruled narrowing 2026-08-28 on the * objectui#6263 analysis, disposition 甲). * @@ -8951,7 +8951,7 @@ const permissionAllowRestorePurgeRemoved: MetadataConversion = { * * Walks the same payloads as `view-visibleOn-to-visibleWhen` — every FORM * payload {@link mapViewPayloads} reaches, in all three persisted spellings - * (#13031) — through `sections[]`/`groups[]` and top-level + * (commit b799ac553) — through `sections[]`/`groups[]` and top-level * `fields[]`, recursing into nested `fields` (composite/repeater/record rows * carry their own option lists). Only the exact key `default` is stripped — * the alias spellings `isDefault`/`selected` were never accepted on this @@ -9242,7 +9242,7 @@ const fieldReferenceToAlias: MetadataConversion = { }; /** - * `connector.errorMapping` removed (protocol 18, #14676 — ADR-0049 + * `connector.errorMapping` removed (protocol 18, commit 13c48c2a5 — ADR-0049 * enforce-or-remove; triage ruling 2026-09-02, route: removal via the * `spec-property-retirement` playbook; the split condition — a downstream * consumer in objectui or a customer stack — measured empty at objectui diff --git a/packages/spec/src/integration/connector.zod.ts b/packages/spec/src/integration/connector.zod.ts index bf5aacf1692..209eed39b0e 100644 --- a/packages/spec/src/integration/connector.zod.ts +++ b/packages/spec/src/integration/connector.zod.ts @@ -1141,7 +1141,7 @@ const ConnectorBaseSchema = lazySchema(() => z.object({ // ADR-0010 — runtime protection envelope (internal — set by loader). // - // [#6362, split out of #6245] Declared for the reason `webhook.zod.ts` and + // [commit b5404f496, the connector half #6245 left] Declared for the reason `webhook.zod.ts` and // `sharing.zod.ts` state for their own spreads: BOTH metadata load paths call // `applyProtection` on EVERY type, so a package-loaded connector already // carries these keys by the time anything re-parses it — and `/meta/connector` From 24b02c47275961b14120c6802b6c4e98d486b375 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 29 Sep 2026 16:51:20 +0000 Subject: [PATCH 2/2] chore(changeset): patch @objectstack/spec for the re-anchored provenance comments Claude-Session: https://claude.ai/code/session_01Sfe5YjBLwB9J3y8fvm2xq1 Co-authored-by: Claude --- ...pec-conversions-connector-provenance-anchors.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 .changeset/spec-conversions-connector-provenance-anchors.md diff --git a/.changeset/spec-conversions-connector-provenance-anchors.md b/.changeset/spec-conversions-connector-provenance-anchors.md new file mode 100644 index 00000000000..7ff2d21a65f --- /dev/null +++ b/.changeset/spec-conversions-connector-provenance-anchors.md @@ -0,0 +1,14 @@ +--- +'@objectstack/spec': patch +--- + +Provenance comments in `conversions/registry.ts` and `integration/connector.zod.ts` were re-anchored + +Clause-②: no + +Thirteen comment and docblock sites in `src/conversions/registry.ts` and +`src/integration/connector.zod.ts` cited tracker numbers that no longer resolve on +GitHub. They now cite the record that decided the matter: ADR-0087's 2026-09-13 +addendum for the data-at-rest seams `retiredFromLoadPath` does not hold back, and +otherwise the commit in this repository's history. Comments only: no type, schema, +export, `describe()` text, conversion `summary` or runtime behaviour changes.