Repository navigation
feat(spec)!: retire the datasource driver spelling mongo — refused naming mongodb, its D2 conversion leaves the load path (F1 of #23543) - #23600
Conversation
Claude-Session: https://claude.ai/code/session_01LFqdRsuM5nkqoJdHd5ztVk Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LFqdRsuM5nkqoJdHd5ztVk Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LFqdRsuM5nkqoJdHd5ztVk Co-authored-by: Claude <noreply@anthropic.com>
…ER_ID_GUIDANCE Claude-Session: https://claude.ai/code/session_01LFqdRsuM5nkqoJdHd5ztVk Co-authored-by: Claude <noreply@anthropic.com>
…xamples Claude-Session: https://claude.ai/code/session_01LFqdRsuM5nkqoJdHd5ztVk Co-authored-by: Claude <noreply@anthropic.com>
…ersion Claude-Session: https://claude.ai/code/session_01LFqdRsuM5nkqoJdHd5ztVk Co-authored-by: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LFqdRsuM5nkqoJdHd5ztVk Co-authored-by: Claude <noreply@anthropic.com>
…tire-mongo-driver-alias
📓 Docs Drift CheckThis PR changes 4 package(s): ⛔ 1 release-owned page(s) name something this change touched. These are read-only:
What this run could not see
Coarse fallback — 148 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): Which tree this was computed onThis run read A worktree cut from an older # while this PR is open — GitHub drops the merge commit once it closes
git fetch origin 98d738bd7237c0012dd50e49e81a249fe93be730 && git checkout 98d738bd7237c0012dd50e49e81a249fe93be730
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin 16abea88450be3c453a9e769445af341a956bd17 acf0e6c1faddeadab933358e5bedaa3fae075f2f && git checkout -B drift-repro 16abea88450be3c453a9e769445af341a956bd17 && git merge --no-ff acf0e6c1faddeadab933358e5bedaa3fae075f2f
node scripts/docs-audit/affected-docs.mjs --json 16abea88450be3c453a9e769445af341a956bd17
|
席位核对 — ACCEPT ·
|
Contract reviewServed-tier: Family F1 of ruling 6182001882 on card #23543, PR #23600, read at 2026-10-15T04:49Z. Inputs: the card body and its nine comments, the PR body and its 23-file list, the net diff against Gate verdicts on this head: 45 check-runs, 37 Governance: none of the 23 paths is in ① Derived judgmentsAccept-set changes (each narrows what an author or operator may write):
Public-surface changes (widenings):
② Semver level
③ Boundary flagsDev
Dev
Dev
Report corrections, not flags: the dev report counts 41 check-runs with Premise re-read on the head: no Implemented-by: VERDICT: PASS |
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 38683849777 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集), 分类: 失败的 job(日志抽取,best effort):
跨 PR 相同签名(24h,按失败测试文件聚合):
历史信号:
分诊清单:
Generated by Claude Code · merge-queue-triage workflow (#4859) |
Part of #23543
Clause-②: yes
This PR lands family F1 of ruling
6182001882only. F5-jsx, F3, F2, F4 and F5-http stay on #23543 and follow one PR each, in the ruled order.What
Ruling F1 A:
'mongo'retires as adatasource.drivervalue, refused with the prescription namingmongodb; stored rows are rewritten by the D3 chain;datasource-driver-mongo-to-mongodbsetsretiredFromLoadPath.DriverType(packages/spec/src/data/datasource.zod.ts) refusesmongoby name, case- and whitespace-insensitive. The message is the prescription: "Datasourcedriver: 'mongo'was removed in @objectstack/spec 18 (ADR-0087 D2) … Usedriver: 'mongodb'." It ends with the houseos migrate meta --from 16sentence. AtdefineStackthis isSTACK_SCHEMA_INVALID/ 422 with one issue atdatasources.0.driver.retiredAliasescolumn on the driver vocabulary row (packages/spec/src/data/driver/config-registry.zod.ts):{ id: 'mongodb', aliases: ['mongodb'], retiredAliases: { mongo: PRESCRIPTION } }. The refusal is derived from that column (exported asRETIRED_DRIVER_ID_GUIDANCE), so the table remains the one vocabulary.mongois no longer a boot selection. Both hosts refuseOS_DATABASE_DRIVER=mongoalike, and their "Supported drivers" list namesmongodb. The cross-host parity pin is flipped to say so.datasource-driver-mongo-to-mongodbgetsretiredFromLoadPath: trueandretiredAfter: '17.7.0'(the newest published stable release under the18.0.0-nextlabel, the same stamp PR feat(spec)!: retire seven overdue ADR-0087 D2 conversions from the load path at 18; record why eight stay #23523 used). It is already a member of step 17'sconversionIds, soos migrate meta --from 16and everyincludeRetiredseam keep replaying it.18.datasource-driver-mongo-alias-retiredis the family's semantic entry, withconversionIds: ['datasource-driver-mongo-to-mongodb']. It names what the chain cannot reach:OS_DATABASE_DRIVER, a standalone stack'sdatabaseDriver, and REST callers.conversions.test.tsmoves the entry from the kept list to the retired list, and the entry'sdescribeblock is rewritten for the new semantics. The entry also has a row in the removal-version pin'sJOIN.Mechanism assumptions, measured
'mongo'from the row outright, ran the suites, and probed. Measured onfa6a6085c:redactStoredMetadataBody). It keys mongodb's passthrough-secret table by canonical id. With the alias gone, a raw stored legacydriver: 'mongo'row served all ten passthrough secrets in cleartext:options.proxyPassword,options.key,options.passphrase,options.tlsCertificateKeyFilePassword,AWS_SESSION_TOKENand the five KMS secrets.stored.test.ts(a stored mongo row'suri/userwere no longer renamed), the key-alias conversion's "row whose driver id is itself being renamed" case,refusedPassthroughSecretPaths('mongo'), and the "unconverted row keeps its contract" case.resolveDriverId('mongo')still answersmongodb). This is the same posture the retired in-memory engine's spellings have.datasource-config-driver-key-aliasesconversion still reaches a stored mongo row through the contract face, so the order of the step-17 list does not change.driveris an open namespace (z.string()), soenumWithRetiredValuescannot carry it. The refusal reuses that helper's prescription type (RetiredValueGuidance) and its writing conventions. It is spelled as apattern(^(?!\s*[Mm][Oo][Nn][Gg][Oo]\s*$)), not a refinement. My first spelling was a refinement, and the build's dropped-refinement gate refused it. Apatternsurvives the JSON Schema projection, so a document validated against the publishedjson-schema/**is refused too.config-registry.test.tspins that projection.packages/cli/src/utils/config.ts:621and:654. Both docblocks useddriver: 'mongo'as the example of "a conversion the load still applies". They now say the defect was measured on that spelling, which has since retired.conversions.test.ts. Done as the assumption said. The verdict list now keeps 7 entries, and the retired list asserts this one withretiredAfter: '17.7.0'.Pin sweep (whole repo,
'mongo'/"mongo"and the conversion id)config-registry.test.ts: the selection face losesmongo. A new describe covers the authoring refusal (codeinvalid_format, pathdriver, message first sentence), the config gate still running behind it, selection withdrawn, contract kept, no false refusals (mongodb,com.vendor.mongolike, prototype words), the JSON Schemapattern, and the retired spelling being no live spelling.conversions.test.ts, as above. Its new defineStack case assertsSTACK_SCHEMA_INVALID/ 422, the path, and the prescription's first sentence.driver-vocabulary-parity.test.ts(cli): both hosts refusemongo, each namingmongodb.mongono longer is:stack-authored-input.test.ts(spec);migrate-meta-load-conversions.test.ts,migrate-meta-composed-load-conversions.test.ts, and the load-path case ofmigrate-meta-composed.test.ts(cli).errorHandling.retryDelayMs.retry-policy-convergedrenames it at load, and it is a step-17 member, so--from 16lists it.datasource.test.tsfixtures now writemongodb. Their refusal assertions are unchanged.migrate-meta-write.test.tsandmigrate-meta-protocol-range.test.tsstill writedriver: 'mongo'as a refused spelling the chain rewrites, which is still true.mongoas a stored legacy row, which the contract face keeps judging as mongodb.content/docs/data-modeling/drivers.mdx, plus a short paragraph on the retirement;packages/drivers/driver-mongodb/README.md, which is published, hence thepatchchangeset row;liveness/datasource.jsonnote;driver-catalog.ts,mongo.zod.tsandmongo.test.ts.Changeset
.changeset/23543-f1-retire-mongo-driver-alias.md:@objectstack/specminor and@objectstack/driver-mongodbpatch. It is BREAKING, carriesClause-②: yes (narrowing)as ruling item 7 spells it, gives the FROM → TO migration for all three places the spelling lives, and registersdatasource-driver-mongo-alias-retiredas its ADR-0087 disposition.check-adr-0087-registration --base origin/mainexits 0 and reads it asBREAKING+bang+clause-②-narrowing,registered.Verification (head
acf0e6c1f, after mergingorigin/main32e03d2fd)@objectstack/spec:test: 678 files / 20738 tests passed.typecheck(tsc, scripts, test layer): exit 0.test:repo: 61 / 1033 passed.check:generated: all 14 artifacts up to date;api-surface/data.jsonandexport-origins/data.jsonwere regenerated for the one new export.@objectstack/cli(unit tier), the six files the change touches or pins: 6 / 113 passed. The full unit tier and typecheck readings are in the report comment on the card.@objectstack/runtimeand@objectstack/service-datasourceare in the report.packages/drivers/driver-*source reads adatasource.drivervalue (zero hits for the resolvers,DatasourceSchemaorDriverTypeinsrc), so no driver suite is owed beyond CI.dispatch-gates.mjs --commandsderived 117 commands, run one by one with exit codes captured before any pipe and reconciled with--ran. Verdicts are in the report.Acceptance notes
mongorefusal at the boot hosts. It is the hosts' existing "Supported drivers" refusal, which listsmongodb. It is not a dedicated prescription sentence like the retired in-memory engine's.RETIRED_DRIVER_ID_GUIDANCEis exported if a host should name it later.os migrate meta --from 16replays areretry-policy-convergedand F3's two config lifts. Once F3 and F2 land, the three cli load-path suites andstack-authored-input.test.tshave no real subject left. They will need a synthetic probe, or the suites retired, in whichever of those PRs lands last.Generated by Claude Code