Skip to content

refactor(spec)!: retire the external-lookup and message-queue config families (ADR-0049, #8075) - #8230

Merged
huangyiirene merged 5 commits into
mainfrom
claude/issue-8075-retire-dead-credential-schemas
Aug 12, 2026
Merged

refactor(spec)!: retire the external-lookup and message-queue config families (ADR-0049, #8075)#8230
huangyiirene merged 5 commits into
mainfrom
claude/issue-8075-retire-dead-credential-schemas

Conversation

@huangyiirene

Copy link
Copy Markdown
Collaborator

Fixes#8075

Phase 2 of the card: the ADR-0049 retirement route, following the ACCEPTed fork-(b) measurement (issue comment 5270144555, claim addendum 5270164082). Both dead credential-bearing schema families are removed whole — data/external-lookup.zod.ts (3 defs: ExternalDataSource, ExternalFieldMapping, ExternalLookup — 8 exported names) and system/message-queue.zod.ts (5 defs: MessageQueueConfig, MessageQueueProvider, TopicConfig, ConsumerConfig, DeadLetterQueue — 14 exported names).

Spot-verification of the measurement (on this branch's base, c10e9c3)

Re-ran the two load-bearing greps before deleting anything: zero files outside packages/spec reference either export-name family (all TS file types, excluding node_modules/dist/.cache), while the corpus-reach control (DatasourceSchema under identical exclusions) returns 8+ consumer files in the same run. Each module export was then verified individually: every non-test consumer of every export resolves inside the two modules themselves (ExternalLookupSchema was the only consumer of the other two data-side schemas, and is itself consumed by nothing; MessageQueueConfigSchema was the only consumer of its four siblings). The kernel "hits" for the MQ name are the substring inside EventMessageQueueConfigSchema — a different declaration, untouched. Liveness ledger: no rows exist for either module (absent, consistent with the modules never being metadata types) — nothing to delete, no orphan risk.

Route and registration (per the spec-property-retirement playbook)

Route 3 — "nothing parses it": no carrier key, no door, no author document, so there is no tombstone and no D2 conversion (a prescription nobody can receive is noise; the #4834 / #4988 / #5055 / #6486 shape). The declaration is:

  • RETIRED_DEFS_BY_MAJOR[17] — 8 new entry files under packages/spec/src/migrations/entries/retired-defs/ (one per def, per the Split migrations/registry.ts's two append tables into per-entry files (registry half of #6957's ruling) #7297 conflict-free layout), concatenated by gen:migration-registry.
  • D3 SemanticMigrationexternal-lookup-message-queue-families-retired (entries/semantic/), carrying the three-axis reasoning, the replacement pointers (object.external + datasource config for external data; kernel EventMessageQueueConfig for MQ — no credential field by design), and acceptance criteria.
  • The json-schema.manifest lines (8) and authorable-surface lines (39, all under the 8 defs) are deleted deliberately in the same PR — the manifest deletion gate demanded and then accepted the RETIRED_DEFS declarations; check (c)'s proof 3 covers the per-key lines.

Subsumed, the WidgetManifest.performance way: the #5552data/ExternalFieldMapping:transform retired-keys entry (same unreleased major 17) — the def retirement is strictly stronger. The shared/FieldMapping tombstone, the integration/ConnectorFieldMapping spelling and the field-mapping-transform-removed D2 conversion are untouched; shared/mapping.test.ts still pins them.

Ratchet-direction note (for review)

This is a whole-def deletion, so the instruments MUST move, and did: api-surface −22 names (pure removals, zero additions — verified by diff), authorable-surface −39 keys, json-schema.manifest −8 defs, export-origins −22, reference pages data/external-lookup.mdx and system/message-queue.mdx dropped by gen:docs (228 files regenerated). Zero movement here would have meant the removal did not actually happen.

Tests

  • New pin tests, one per family (data/external-lookup-retirement.test.ts, system/message-queue-retirement.test.ts): absence by resolved symbol identity over every public entry (zero holders for all 22 names), survivor pins for the live neighbours a too-wide sweep would take (ObjectExternalBindingSchema, ExternalCatalog trio, ImportFieldMappingSchema, EventMessageQueueConfig trio, DeadLetterQueueEntry trio, EventBusConfigSchema), file-deletion probes with anti-vacuity controls, runtime-namespace agreement, and two security-face pins: object.external REJECTS an inline authentication block (strictObject, unrecognized_keys), and the live EventMessageQueueConfig parses real configs while a smuggled sasl block is stripped — nothing credential-shaped survives into the parsed value.
  • One deviation from the dispatch template, stated plainly: there is no per-key tombstone/guidance message to assert, because route 3 prescribes none — the refusal channel is TS2305 at every import (pinned via zero holders) plus the registered upgrade-guide entry. The "survivors keep parsing byte-identically" pin is vacuous for the two modules themselves (no export survives from either file); it is carried instead by the near-namesake and neighbour pins above.

Verification (all local, real output)

  • check:generated 13/13 up to date (includes check:authorable-surface, check:api-surface, check:export-origins, check:docs, check:spec-changes, check:upgrade-guide, check:migration-registry, check:strictness-ledger, check:liveness).
  • The 7 not-run source audits, as one group: empty-state, skill-examples, template-manifests, variant-docs, exported-any, dual-source-exports, scripts-typecheck — all PASS.
  • check:adr-0087-registration PASS (changeset carries the registered marker), check:i18n PASS (9 packages in sync; no form inputs existed for either family), check:nul-bytes PASS, check:merge-driver PASS.
  • pnpm --filter @objectstack/spec typecheck PASS; full spec suite on the MERGED tree: 385/385 files, 10150/10150 tests.
  • Consumer smoke: full workspace build turbo run build 72/72 successful; examples objectstack validate on app-crm / app-showcase / app-todo all exit 0 (pre-existing warnings only); dogfood expression-conformance 3/3.
  • packages/qa/dogfood expression-conformance ledger: zero covers entries name either family (verified by count, not by pipe-masked grep); targeted suite run.

Docs

Changeset

@objectstack/specmajor — acceptance surface shrinks on published exports (the #4583/#8078 precedent; the playbook's bump rule for removals). Carries the FROM → TO table, the one-line fix ("delete the import"), and the ADR-0087 marker registered external-lookup-message-queue-families-retired.

Landing note for the PM

os-regen faces ride this PR (authorable-surface, manifest, api-surface, export-origins, spec-changes, upgrade guide, references). The os-regen line was empty at dispatch; re-verify against current main at flip time — if main moved a spec face, this needs the regen-merge lap (scripts/pm/os-regen-merge.sh), never a textual merge of the generated files.


Generated by Claude Code

…lies (ADR-0049, #8075)
Fork (b) of the #8075 census: both modules are dead declarations whose only
distinctive feature was an inline-credential sink. Route 3 retirement — no
tombstone, no D2 conversion; RETIRED_DEFS_BY_MAJOR[17] (8 defs) + the D3
SemanticMigration external-lookup-message-queue-families-retired are the
declaration. The #5552 data/ExternalFieldMapping:transform retired-keys entry
is subsumed by the def retirement.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0123k4cam2jEAkPmbJeoaY3r
…824, PROTOCOL_MAP rows, strictness-ledger rows (#8075)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0123k4cam2jEAkPmbJeoaY3r
@vercel

vercelBot commented Aug 12, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
ProjectDeploymentActionsUpdated (UTC)
objectstackIgnoredIgnoredAug 12, 2026 10:07pm

Request Review

@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 1 package(s): @objectstack/spec.

106 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:

  • content/docs/ai/agents.mdx(via @objectstack/spec)
  • content/docs/ai/skills-reference.mdx(via @objectstack/spec)
  • content/docs/ai/skills.mdx(via @objectstack/spec)
  • content/docs/api/client-sdk.mdx(via @objectstack/spec)
  • content/docs/api/environment-routing.mdx(via @objectstack/spec)
  • content/docs/api/error-catalog.mdx(via @objectstack/spec)
  • content/docs/api/error-handling-client.mdx(via @objectstack/spec)
  • content/docs/api/error-handling-server.mdx(via @objectstack/spec)
  • content/docs/api/index.mdx(via @objectstack/spec)
  • content/docs/automation/approvals.mdx(via @objectstack/spec)
  • content/docs/automation/connectors.mdx(via @objectstack/spec)
  • content/docs/automation/flows.mdx(via @objectstack/spec)
  • content/docs/automation/hook-bodies.mdx(via packages/spec)
  • content/docs/automation/hooks.mdx(via @objectstack/spec)
  • content/docs/automation/index.mdx(via @objectstack/spec)
  • content/docs/automation/webhooks.mdx(via @objectstack/spec)
  • content/docs/automation/workflows.mdx(via @objectstack/spec)
  • content/docs/concepts/architecture.mdx(via @objectstack/spec)
  • content/docs/concepts/design-principles.mdx(via packages/spec)
  • content/docs/concepts/index.mdx(via @objectstack/spec)
  • content/docs/concepts/metadata-driven.mdx(via @objectstack/spec)
  • content/docs/concepts/metadata-lifecycle.mdx(via packages/spec)
  • content/docs/concepts/north-star.mdx(via @objectstack/spec)
  • content/docs/data-modeling/analytics.mdx(via @objectstack/spec)
  • content/docs/data-modeling/drivers.mdx(via @objectstack/spec)
  • content/docs/data-modeling/external-datasources.mdx(via @objectstack/spec)
  • content/docs/data-modeling/field-types.mdx(via @objectstack/spec)
  • content/docs/data-modeling/fields.mdx(via @objectstack/spec)
  • content/docs/data-modeling/formulas.mdx(via @objectstack/spec)
  • content/docs/data-modeling/index.mdx(via @objectstack/spec)
  • content/docs/data-modeling/objects.mdx(via @objectstack/spec)
  • content/docs/data-modeling/queries.mdx(via @objectstack/spec)
  • content/docs/data-modeling/schema-design.mdx(via @objectstack/spec)
  • content/docs/data-modeling/seed-data.mdx(via @objectstack/spec)
  • content/docs/data-modeling/validation-rules.mdx(via @objectstack/spec)
  • content/docs/data-modeling/validation.mdx(via @objectstack/spec)
  • content/docs/deployment/cli.mdx(via @objectstack/spec)
  • content/docs/deployment/tenancy-modes.mdx(via @objectstack/spec)
  • content/docs/deployment/troubleshooting.mdx(via @objectstack/spec)
  • content/docs/deployment/validating-metadata.mdx(via @objectstack/spec)
  • content/docs/getting-started/build-with-claude-code.mdx(via @objectstack/spec)
  • content/docs/getting-started/common-patterns.mdx(via @objectstack/spec)
  • content/docs/getting-started/examples.mdx(via @objectstack/spec)
  • content/docs/getting-started/quick-reference.mdx(via @objectstack/spec)
  • content/docs/getting-started/quick-start.mdx(via @objectstack/spec)
  • content/docs/getting-started/your-first-project.mdx(via @objectstack/spec)
  • content/docs/kernel/cluster.mdx(via @objectstack/spec)
  • content/docs/kernel/contracts/auth-service.mdx(via packages/spec)
  • content/docs/kernel/contracts/cache-service.mdx(via packages/spec)
  • content/docs/kernel/contracts/data-engine.mdx(via @objectstack/spec)
  • content/docs/kernel/contracts/index.mdx(via @objectstack/spec)
  • content/docs/kernel/contracts/metadata-service.mdx(via packages/spec)
  • content/docs/kernel/contracts/storage-service.mdx(via @objectstack/spec)
  • content/docs/kernel/index.mdx(via packages/spec)
  • content/docs/kernel/runtime-services/data-service.mdx(via @objectstack/spec)
  • content/docs/kernel/runtime-services/email-service.mdx(via packages/spec)
  • content/docs/kernel/runtime-services/examples.mdx(via @objectstack/spec)
  • content/docs/kernel/runtime-services/index.mdx(via packages/spec)
  • content/docs/kernel/runtime-services/queue-service.mdx(via packages/spec)
  • content/docs/kernel/runtime-services/sharing-service.mdx(via @objectstack/spec)
  • content/docs/kernel/runtime-services/sms-service.mdx(via packages/spec)
  • content/docs/kernel/runtime-services/storage-service.mdx(via @objectstack/spec)
  • content/docs/kernel/services-checklist.mdx(via @objectstack/spec)
  • content/docs/kernel/services.mdx(via @objectstack/spec)
  • content/docs/permissions/authorization.mdx(via @objectstack/spec)
  • content/docs/permissions/permission-sets.mdx(via @objectstack/spec)
  • content/docs/permissions/permissions-matrix.mdx(via @objectstack/spec)
  • content/docs/permissions/positions.mdx(via @objectstack/spec)
  • content/docs/permissions/rls.mdx(via @objectstack/spec)
  • content/docs/permissions/sharing-rules.mdx(via @objectstack/spec)
  • content/docs/permissions/system-context.mdx(via packages/spec)
  • content/docs/plugins/adding-a-metadata-type.mdx(via @objectstack/spec)
  • content/docs/plugins/development.mdx(via @objectstack/spec)
  • content/docs/plugins/index.mdx(via @objectstack/spec)
  • content/docs/plugins/packages.mdx(via @objectstack/spec)
  • content/docs/protocol/backward-compatibility.mdx(via @objectstack/spec)
  • content/docs/protocol/diagram.mdx(via packages/spec)
  • content/docs/protocol/kernel/config-resolution.mdx(via @objectstack/spec)
  • content/docs/protocol/kernel/http-protocol.mdx(via @objectstack/spec)
  • content/docs/protocol/kernel/i18n-standard.mdx(via @objectstack/spec)
  • content/docs/protocol/kernel/index.mdx(via @objectstack/spec)
  • content/docs/protocol/kernel/lifecycle.mdx(via @objectstack/spec)
  • content/docs/protocol/kernel/plugin-spec.mdx(via @objectstack/spec)
  • content/docs/protocol/knowledge.mdx(via @objectstack/spec)
  • content/docs/protocol/objectql/index.mdx(via @objectstack/spec)
  • content/docs/protocol/objectql/query-syntax.mdx(via @objectstack/spec)
  • content/docs/protocol/objectql/schema.mdx(via @objectstack/spec)
  • content/docs/protocol/objectql/security.mdx(via packages/spec)
  • content/docs/protocol/objectql/state-machine.mdx(via @objectstack/spec)
  • content/docs/protocol/objectui/actions.mdx(via @objectstack/spec)
  • content/docs/protocol/objectui/concept.mdx(via @objectstack/spec)
  • content/docs/protocol/objectui/index.mdx(via @objectstack/spec)
  • content/docs/protocol/objectui/layout-dsl.mdx(via @objectstack/spec)
  • content/docs/protocol/objectui/record-alert.mdx(via @objectstack/spec)
  • content/docs/protocol/objectui/widget-contract.mdx(via @objectstack/spec)
  • content/docs/ui/actions.mdx(via @objectstack/spec)
  • content/docs/ui/apps.mdx(via @objectstack/spec)
  • content/docs/ui/create-vs-edit-form.mdx(via @objectstack/spec)
  • content/docs/ui/dashboards.mdx(via @objectstack/spec)
  • content/docs/ui/field-grouping-and-order.mdx(via @objectstack/spec)
  • content/docs/ui/forms.mdx(via @objectstack/spec)
  • content/docs/ui/index.mdx(via @objectstack/spec)
  • content/docs/ui/public-data-collection.mdx(via @objectstack/spec)
  • content/docs/ui/setup-app.mdx(via @objectstack/spec)
  • content/docs/ui/translations.mdx(via @objectstack/spec)
  • content/docs/ui/views.mdx(via @objectstack/spec)

7 release-owned page(s) also reference the affected code. These are read-only:

  • content/docs/releases/implementation-status.mdx(via @objectstack/spec)
  • content/docs/releases/index.mdx(via @objectstack/spec)
  • content/docs/releases/v12.mdx(via @objectstack/spec)
  • content/docs/releases/v13.mdx(via @objectstack/spec)
  • content/docs/releases/v16.mdx(via @objectstack/spec)
  • content/docs/releases/v17.mdx(via @objectstack/spec)
  • content/docs/releases/v9.mdx(via @objectstack/spec)

content/docs/releases/ is RELEASE-OWNED (AGENTS.md "Documentation Guardrails"): release
notes are written centrally at release time, and a code PR that edits them is the exact PR
that guardrail exists to stop. They are still audited — read-only. If one of them is actually
wrong, file an issue or open a dedicated docs-only PR; do not edit it here.

Advisory only. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs origin/main → pass the list as args.docs.

…ding lap, #8075)
Merge a296d81 took main's side of every os-regen path; this regeneration
recomputes them from the merged sources — the 8 retired defs and 39 authorable
keys leave again (deliberate deletions re-applied under the manifest gate),
main's audit-log semantic entry, page.zod/editability references and the
build-docs integration fix (#8219) all survive. check:generated 13/13.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0123k4cam2jEAkPmbJeoaY3r
@huangyiireneClaude

Copy link
Copy Markdown
CollaboratorAuthor

Landing lap (os-regen) complete — origin/main @ e019766 merged via scripts/pm/os-regen-merge.sh.

  • Merge sha a296d817e (script steps 1–3: merge clean — build-docs.ts merged textually, different lines; main's side of every os-regen path taken), regen commit fa78f0b5e (step 4: full chain from the merged tree; the 8 manifest lines + 39 authorable-surface lines re-deleted deliberately under the manifest gate — step 2's checkout had restored main's copies; pre-commit deferral marker cleared itself: spec-changes.json and the upgrade guide verified current).
  • Sibling assertions, main's side:audit-log-action-enum-retired present in the regenerated registry (76 semantic); build-docs integration fix fix(spec): remove 8 dead page names from build-docs integration category #8219 survives (zero message-queue page names remain file-wide — main's integration removal composes with this PR's system-list removal); shared/editability-boundary.ts + test present and passing; regenerated references/ui/page.mdx carries the visibleWhen-side guidance; check:docs green byte-exact against merged sources.
  • Sibling assertions, this PR's side: 8 retired-def entries + external-lookup-message-queue-families-retired in the regenerated registry (53 retired-def / 21 retired-key); manifest −8 (zero occurrences of the def names); authorable-surface −39 (data 847, system 1364); both reference pages absent; second gen:export-origins run converged (0 shards rewritten).
  • Gates on the new head:check:generated 13/13 (exit 0, captured explicitly — not pipe-masked), check:migration-registry exit 0, gen:strictness-ledger refreshed (main's page.zod/editability moved the AST counts), scoped suite 10 files / 235 tests green.

PR stays draft; PM drives flip + auto-merge.


Generated by Claude Code


Generated by Claude Code

@huangyiirene
huangyiirene marked this pull request as ready for review August 12, 2026 22:35
@huangyiirene
huangyiirene added this pull request to the merge queueAug 12, 2026
Merged via the queue into main with commit 29488ccAug 12, 2026
27 checks passed
@huangyiirene
huangyiirene deleted the claude/issue-8075-retire-dead-credential-schemas branch August 12, 2026 22:52
huangyiirene pushed a commit that referenced this pull request Aug 12, 2026
…tree (#7872 relay lap over #8230/#8232)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0123k4cam2jEAkPmbJeoaY3r
huangyiirene pushed a commit that referenced this pull request Aug 13, 2026
os-regen merge lap for landing: merge origin/main (committed first, per
scripts/pm/os-regen-merge.sh), then wholesale regen of the os-regen'd
references/api pages from the merged tree. Sibling assertions on the
regenerated tree: #8230 retirement state (def names only in retirement
prose + migration entry), #8232 currency fraction-digit guard, #8234's
13 comparand-door exports in api-surface/data.json, #8236's groupBy
union row all survive; MONGODB_MULTI_TENANT_UNSUPPORTED stays absent
from the ledger and the references ErrorCode union reads main-minus-one
(+265 -> +264; the union grew by 2 on main since the previous lap).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0123k4cam2jEAkPmbJeoaY3r
huangyiirene pushed a commit that referenced this pull request Aug 13, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentationImprovements or additions to documentationprotocol:dataprotocol:systemsize/xlteststooling

Projects

None yet

2 participants

@huangyiirene@claude