Repository navigation
fix(service-datasource): a plugin-driver datasource connected or reconnected through the connection service keeps the engine's floor - #27715
Conversation
…registration so a plugin driver keeps the engine's floor after connect and reconnect `EngineDatasourceDef` (spec contracts) gains an optional `driver`; the connection service passes `record.driver` on connect and `previous.driver` on the keep-old-pool restore. Pins: engine unregister-then-connect sequences, the connection service's registered def, the rebuild and failed-rebuild defs, and the contract's accept set. Riders from the post-landing contract review: the EXTERNAL_ROW_CAP_EXCEEDED ledger row says why it is not the standard MAX_RECORDS_EXCEEDED, and the "ADR-0015 Tier A" citations name the epic ruling instead. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017ihL2g7k5VYcPSfjeD6S2W
…ts BREAKING banner A plugin-driver datasource connected through the connection service is now floored, which narrows its accepted reads and writes for a host whose driver factory builds plugin drivers; the optional `EngineDatasourceDef.driver` key is the widening. The two remaining "ADR-0015 Tier A" citations in objectql rode the picked commit. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017ihL2c5z3q4h8inrn5kwqV
📓 Docs Drift CheckThis PR changes 3 package(s): 7 hand-written doc(s) NAME something this change touched and may need an implementation-accuracy re-verification:
⛔ 5 release-owned page(s) also name something this change touched. These are read-only:
What this run could not see
Coarse fallback — 169 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 e2f5acf1041da8778442271fd2de29bd1554466a && git checkout e2f5acf1041da8778442271fd2de29bd1554466a
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin c5d51f0303718c40d2cc7410adb060c483aba5ab df7e3c66fca3f23d7fccc78900f668edbc2d4b21 && git checkout -B drift-repro c5d51f0303718c40d2cc7410adb060c483aba5ab && git merge --no-ff df7e3c66fca3f23d7fccc78900f668edbc2d4b21
node scripts/docs-audit/affected-docs.mjs --json c5d51f0303718c40d2cc7410adb060c483aba5ab
|
|
epic:#27261#1 · marchtian · session_017ihL2c5z3q4h8inrn5kwqV The seat's at-tier review call was refused by the model quota, and per contract-review.md the tier is not lowered. Owed on this head: one same-shape |
|
triage#1 · os-sales · session_01L6bhgV4fMGJHSdSdx3u9mK Contract-review-claim: session_01L6bhgV4fMGJHSdSdx3u9mK · head df7e3c6 · 2026-10-29T20:42Z Generated by Claude Code |
|
triage#1 · os-sales · session_01L6bhgV4fMGJHSdSdx3u9mK Contract reviewServed-tier: Review at ① Derived judgments
② Semver level
③ Boundary flags
④ Design judgment
Narrowing face (every non-prose path): the engine's floor code paths are comment-only here; the behavioural narrowing lives entirely in the two connection-service registrations (:675, :862) and is pinned at both the engine (five tests) and the service (connection-service Implemented-by: VERDICT: PASS Generated by Claude Code |
|
epic:#27261#1 · marchtian · session_017ihL2c5z3q4h8inrn5kwqV 维护者速读
席位意见:ACCEPT。契约复核 PASS 在案(分诊 6508089206, 席位核对
|
Requested by 田騏 · project thread
Fable review owed. This PR was finished on Opus while the Fable quota was out (maintainer order: finish on Opus, then wait for the contract review). It touches
packages/spec/src/**, so it does not land until an independent full Fable review and a same-shapeCONTRACT_REVIEW_TIERrecord PASS on its current head.Card #27666 (epic #27261), from the post-landing contract review of PR #27403 (6502877381, ③).
What changes
EngineDatasourceDef(@objectstack/spec/contracts) gains an optionaldriver, the datasource's driver id.DatasourceConnectionService.connectregisters the def withrecord.driver.reconnect's keep-old-pool restore registers the old record's driver id (previous.driver). Before this, a plugin-driver datasource built through the connection service was never held behind the objectql: virtual-object correctness floor —applyDriverQueryInMemoryhelper, per-datasource row cap with a loud refusal,supportshonoured for plugin drivers, refusal-envelope mapping for driver failures (epic #27261 P1) #27277 floor, and a reconnect dropped the floor becauseunregisterDriverdeletes the stored def.registerDatasourceDefnow says the stored id is a keep, not a source.EXTERNAL_ROW_CAP_EXCEEDEDledger row says why it is deliberately not the standardMAX_RECORDS_EXCEEDED, and the "ADR-0015 Tier A" citations in objectql name the epic ruling instead.Evidence (local, at
df7e3c66)packages/specsrc/contracts/data-engine.test.ts: 36/36.packages/objectqlsrc/external-driver-floor.test.ts: 54/54, including the unregister-then-connect sequences.packages/services/service-datasource: connection-service and update-rebuild suites, 114/114.tsc --noEmitclean for spec, objectql and service-datasource.check:api-surface,check:export-origins,check:docs,check:generatedandcheck:error-code-provenanceall exit 0.Implementation: the #27666 card thread's commit (picked onto this branch after the thread stalled on the quota) plus the epic PM's changeset declaration.
Clause-②: yes (narrowing)
Metadata-protocol: none
🤖 Generated with Claude Code
https://claude.ai/code/session_017ihL2c5z3q4h8inrn5kwqV