Skip to content

fix(service-datasource): a plugin-driver datasource connected or reconnected through the connection service keeps the engine's floor - #27715

Merged
objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/project-thread-6ml89f
Oct 29, 2026
Merged

objectstack-fleet[bot] merged 2 commits into
mainfrom
claude/project-thread-6ml89f

Conversation

@objectstack-fleet

Copy link
Copy Markdown
Contributor

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-shape CONTRACT_REVIEW_TIER record PASS on its current head.

Card #27666 (epic #27261), from the post-landing contract review of PR #27403 (6502877381, ③).

What changes

Evidence (local, at df7e3c66)

  • packages/spec src/contracts/data-engine.test.ts: 36/36.
  • packages/objectql src/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 --noEmit clean for spec, objectql and service-datasource.
  • spec check:api-surface, check:export-origins, check:docs, check:generated and check:error-code-provenance all 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

…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
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 3 package(s): @objectstack/objectql, @objectstack/service-datasource, @objectstack/spec, touching 5 documentable anchor(s). ⚠️ 4 changed file(s) yielded no anchor (packages/objectql/src/driver-query-in-memory.ts, packages/objectql/src/external-driver-errors.ts, packages/objectql/src/external-driver-floor.ts, …), so the pages documenting them are NOT COVERED by this run — this is not a clean bill of health for those files.

7 hand-written doc(s) NAME something this change touched and may need an implementation-accuracy re-verification:

  • content/docs/api/client-sdk.mdx (via ERROR_CODE_LEDGER (symbol, a top-level const object))
  • content/docs/api/error-catalog.mdx (via ERROR_CODE_LEDGER (symbol, a top-level const object))
  • content/docs/api/error-handling-server.mdx (via ERROR_CODE_LEDGER (symbol, a top-level const object))
  • content/docs/data-modeling/drivers.mdx (via schemaMode (literal, a string literal in reconnect))
  • content/docs/data-modeling/external-datasources.mdx (via schemaMode (literal, a string literal in reconnect))
  • content/docs/data-modeling/virtual-objects.mdx (via schemaMode (literal, a string literal in reconnect))
  • content/docs/kernel/contracts/data-engine.mdx (via ERROR_CODE_LEDGER (symbol, a top-level const object))

⛔ 5 release-owned page(s) also name something this change touched. These are read-only:

  • content/docs/releases/v17/17-0.mdx (via ERROR_CODE_LEDGER (symbol, a top-level const object))
  • content/docs/releases/v17/17-1.mdx (via ERROR_CODE_LEDGER (symbol, a top-level const object))
  • content/docs/releases/v17/17-4.mdx (via ERROR_CODE_LEDGER (symbol, a top-level const object))
  • content/docs/releases/v17/17-6.mdx (via schemaMode (literal, a string literal in reconnect))
  • content/docs/releases/v18/18-1.mdx (via schemaMode (literal, a string literal in reconnect))

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.

What this run could not see
  • 4 changed file(s) yielded no anchor (packages/objectql/src/driver-query-in-memory.ts, packages/objectql/src/external-driver-errors.ts, packages/objectql/src/external-driver-floor.ts, …) — pages documenting those are invisible to this run
  • 2 name(s) were too generic to anchor anything (single lowercase words)
  • the SDK route bridge reached 58 of 210 client-bound route-ledger rows — the other 152 have no registrar path: tail to select them, so pages documenting THEIR client methods cannot appear above, on this or any run. Of those 152: 0 are remediable by widening that discovery convention (an in-repo file declares the path; the convention did not scan it); 55 are structural — on a ledger where NOT ONE row is declared in-repo, so no discovery change reaches them at any price; 97 are undecided (no in-repo declaration, on a ledger that has other in-repo registrars — absence and an unreadable spelling are not distinguishable here). The rows themselves: node scripts/docs-audit/affected-docs.mjs --bridge-coverage
  • a page that states a rule by its inputs shares no identifier with the emitter that implements the rule, so an emitter-only diff cannot list it — not on this run and not on any run. Measured on fix(driver-sql): emit varchar(maxLength) for a text field a declared index keys on #11430: content/docs/protocol/objectql/types.mdx documents the text-family column mapping by the ObjectQL type names it maps FROM (text / textarea / html) while the diff changed createColumn; it went unlisted, and it was the page that diff falsified, in four places. No shared token exists to detect this on, so a rule your change carries has to be re-read by hand in the pages that restate it.
  • a key NAME is not a key, so the hand re-read the line above prescribes can land on the wrong schema. The same spelling is authorable on one governed type and a [REMOVED] tombstone on another for each of active, aria, joins, objects, template, tools and version (censused on [finding] tools is a key on BOTH AgentSchema (tombstoned, dead) and SkillSchema (live, cloud-attested), so a name-based search attributes skill examples to the agent key — it produced a false stop-the-line alarm on PR #19059 #19093 over the liveness ledger's governed types, top-level keys); nothing in a search result distinguishes the two, so a grep hit on a LIVE example reads as evidence about the DEAD key. Measured on fix(spec): the agent.tools liveness row says dead — it claimed live on a key the schema tombstoned #19059: content/docs/ai/agents.mdx was reported as contradicting the agent.tools tombstone over its tools: example at :161, which is inside the defineSkill({ block opened at :155 — the page was already correct. Settle ownership by PARSING the value against both schemas, never by the name: that literal PASSES SkillSchema, and as an AgentSchema it FAILS at tools with the tombstone prescription. ⛔ These names are not the whole class — a key retired through a .strict() guidance map leaves no tombstone in the walked shape and none of them here (tool.category, live as AIToolDefinition.category).

Coarse fallback — 169 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): node scripts/docs-audit/affected-docs.mjs --json c5d51f0303718c40d2cc7410adb060c483aba5ab → packageMentionDocs.

Which tree this was computed on

This run read content/docs from e2f5acf1041da8778442271fd2de29bd1554466a — the merge of head df7e3c66fca3f23d7fccc78900f668edbc2d4b21 into base c5d51f0303718c40d2cc7410adb060c483aba5ab, which is what actions/checkout gives a pull_request run. Not the PR head.

A worktree cut from an older main holds a different content/docs, so re-deriving there can legitimately return a different list — that is a different tree, not a wrong row. To answer on the same tree:

# 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

⚠️ That checkout carried uncommitted changes, so the commit above does not fully identify what was read.

Advisory only, and a precision-first one (#9192): a page is listed because it names a
symbol, wire route or SDK method this diff touched — not because it mentions a changed
package. Each row says which anchor put it there, so a wrong row is reportable rather than
merely annoying. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs c5d51f0303718c40d2cc7410adb060c483aba5ab → pass the list as
args.docs, on the commit named under Which tree this was computed on.

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

epic:#27261#1 · marchtian · session_017ihL2c5z3q4h8inrn5kwqV
Contract-review-handoff: triage — CONTRACT_REVIEW_TIER unavailable (HTTP 429 rate_limit, 2026-10-29T20:24Z) · head df7e3c6

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 CONTRACT_REVIEW_TIER record (faces: published schema packages/spec/src/contracts/data-engine.ts and packages/spec/src/api/error-code-ledger.zod.ts, plus the Clause-②: yes (narrowing) declaration), and the maintainer's independent full Fable review of the spec change; one record with a genuine ④ can serve both. The epic PM re-runs it when the quota returns, unless triage takes it first under (a).

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

triage#1 · os-sales · session_01L6bhgV4fMGJHSdSdx3u9mK

Contract-review-claim: session_01L6bhgV4fMGJHSdSdx3u9mK · head df7e3c6 · 2026-10-29T20:42Z


Generated by Claude Code

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

triage#1 · os-sales · session_01L6bhgV4fMGJHSdSdx3u9mK

Contract review

Served-tier: CONTRACT_REVIEW_TIER
Head-sha: df7e3c66fca3f23d7fccc78900f668edbc2d4b21
Local-runs: none
Scope: packages/spec/src/api/error-code-ledger.zod.ts, packages/spec/src/contracts/data-engine.ts + packages/objectql/src/engine.ts (registerApp datasource index :8642-8649, registerDriver :9072-9107, unregisterDriver :9221-9235, registerDatasourceDef :9248-9260, applyExternalDriverFloor :9273-9291, listDatasourceDefs :9314-9320), packages/objectql/src/external-driver-floor.ts (needsExternalDriverFloor, createExternalDriverFloor, unwrapExternalDriverFloor), packages/objectql/src/external-driver-floor.test.ts, packages/objectql/src/external-driver-errors.ts, packages/objectql/src/driver-query-in-memory.ts, packages/objectql/src/index.ts, packages/services/service-datasource/src/datasource-connection-service.ts (ConnectableDatasource, attemptConnect :666-678, disconnect :752-790, reconnect :834-903), packages/services/service-datasource/src/datasource-admin-plugin.ts (reregisterPool :550-556), packages/services/service-datasource/src/datasource-admin-service.ts (StoredDatasource), packages/services/service-datasource/src/tests/datasource-connection-service.test.ts, packages/services/service-datasource/src/tests/datasource-update-rebuild.test.ts, packages/spec/src/contracts/data-engine.test.ts, packages/spec/src/api/errors.zod.ts (:67), packages/spec/api-surface/contracts.json, packages/spec/export-origins/contracts.json, packages/cli/src/utils/secret-reference-union.ts, content/docs/api/error-catalog.mdx (MAX_RECORDS_EXCEEDED), content/docs/data-modeling/virtual-objects.mdx (:634), .changeset/27666-datasource-def-driver-id.md

Review at CONTRACT_REVIEW_TIER on the schema face (two hits) plus the declared narrowing face (Clause-②: yes (narrowing): every non-prose path of the 13-file diff read). Taken on the triage hand-off 6507512040 (HTTP 429) under claim 6507861424; per that hand-off, this one record with a genuine ④ serves both the contract review and the maintainer's independent full review of the spec change. Inputs: card #27666 body and both comments (claim 6502970488, amendment 6507481767), epic #27261 body, ruling 6487532394 on #27277, the post-landing record 6502877381 on PR #27403 that filed the card, PR #27715 body, file list and net diff against main at c5d51f03 (GitHub files endpoint), the 54 check-runs on df7e3c66. The prose paths (.changeset, the comment-only citation lines in objectql) outside the hits are the lane seat's ACCEPT at TIER_DEFAULT; they were read here to judge the hits.

① Derived judgments

② Semver level

  • .changeset/27666-datasource-def-driver-id.md: @objectstack/spec: patch, @objectstack/service-datasource: patch; Clause-②: yes (narrowing) — … and Metadata-protocol: none line-initial in the changeset and in the PR body; one **BREAKING** banner naming the affected population (a host whose driver factory builds plugin drivers; none in-repo); exactly one ADR-0087 marker not-required (no-migration-prescription) with its reason (no authored-schema key moves; the new key is on an engine-facing contract the connection service fills itself). Level follows the kind: Metadata-protocol: none ⇒ patch, breaking or not (AGENTS.md Post-Task Checklist 3). Check Changeset, PR-body guards, Governed Surface Queue Guard, Lint & Repo Gates all success on this head. CONSISTENT.
  • Clause-②: line: the diff both widens (one optional contract key) and narrows (the floor reaches the connection-service path); (narrowing) is the arm that carries the BREAKING signal, and matches the spelling 6502877381 ② asked for on the sibling. RIGHT.
  • No @objectstack/objectql entry: its hunks are comments and a test file, nothing it publishes changes behaviour — acceptable, consistent with the gate.

③ Boundary flags

  • Author objectstack-fleet[bot]; head repo = base repo; branch claude/project-thread-6ml89f, as amendment 6507481767 names (the card thread's commit 25b652f0 picked onto the epic PM's branch). Implementing session per the amendment is the epic PM's own; the record signs the branch.
  • Check-runs on df7e3c66: 54 runs, every gate-carrying context success (Test Core 8/8 shards, TypeScript Type Check and the source/consumer/workspace/debt-ledger type gates, every Lint context, Spec property liveness, Governed Surface Queue Guard, Check Changeset, PR-body guards, Dogfood Regression Gate, Build & E2E UI, Live E2E UI); the skipped rows are opt-in or path-filtered matrices. Zero failures. The PR body's local evidence (36/36, 54/54, 114/114, check:api-surface / check:export-origins / check:docs / check:generated / check:error-code-provenance exit 0) is consistent with the tree but was not relied on.
  • Dev flag "Fable review owed" (PR body) — answered by this record. No open_questions in the PR body or the card.
  • Card service-datasource: a runtime-origin or reconnected plugin-driver datasource loses the #27277 external-driver floor, because the connection service registers the datasource def without its driver id and unregisterDriver drops the stored one (epic #27261) #27666 task list against the tree: optional driver on the contract — done; connect and restoreOldPool pass record.driver / previous.driver — done (:675, :862); pins (connected plugin driver floored; floored after unregister-then-connect; built-in unfloored) — done, five engine tests + the connection-service and update-rebuild tests; the two comment riders — done; the epic body's P2-prerequisite line points at service-datasource: a runtime-origin or reconnected plugin-driver datasource loses the #27277 external-driver floor, because the connection service registers the datasource def without its driver id and unregisterDriver drops the stored one (epic #27261) #27666 — done on the epic.
  • Escalation carried from 6502877381 ④ ("the maintainer should decide knowingly: keep EXTERNAL_ROW_CAP_EXCEEDED with a note that it deliberately shadows MAX_RECORDS_EXCEEDED, or consolidate"): the card (seat-authored) resolved it as "keep, with the note"; the note is in the tree. The standing maintainer ruling 6487532394 Q2=A′ names the code and the status, so the row stands on that ruling; no maintainer re-ruling on the keep/consolidate question is on the record. Recorded here so the maintainer reading this record sees the choice was made under the ruling, not by a fresh decision. Not a FAIL on this face.
  • content/docs/data-modeling/virtual-objects.mdx :634 still reads "ADR-0015 (federation spec) — the plugin driver is its Tier A", the same conflation this PR removes from the code comments. Prose face, not reviewed here: should-fix for the lane seat or a docs-only follow-up.
  • Docs drift advisory 6507487660 names 7 hand-written pages by ERROR_CODE_LEDGER / schemaMode anchors; no page documents EngineDatasourceDef's keys (grep over content/docs at this head: none), so nothing restates the widened shape.

④ Design judgment

packages/spec/src/contracts/data-engine.ts (hits) — judged against ruling 6487532394 Q1=B ("registerDatasourceDef stores the driver id"), card #27666, its first consumer (DatasourceConnectionService.connect :673-678 and reconnect.restoreOldPool :860-865) and its implementer (ObjectQL.registerDatasourceDef :9248-9260, applyExternalDriverFloor :9273-9291, unregisterDriver :9221-9235):

  • The key is the right one and the right shape. needsExternalDriverFloor reads typeof def.driver === 'string' && resolveDriverId(def.driver) === undefined; a string id is exactly what it consumes, and the test pins refuse an instance. The header's "deliberate SUBSET … only what the engine has a use for" rule holds: the engine has read this key since objectql: virtual-object correctness floor — applyDriverQueryInMemory helper, per-datasource row cap with a loud refusal, supports honoured for plugin drivers, refusal-envelope mapping for driver failures (epic #27261 P1) #27277.
  • Tried to break it on the paths the card names, in the live tree:
    • Runtime-origin connect: registerDriver(engineDriver) (no def yet → applyExternalDriverFloor is a no-op) then registerDatasourceDef({ name, driver: record.driver, … }) → floor applied. Holds (engine test :503-514).
    • Reconnect, rebuild succeeds: unregisterDriver drops driver and def; connect(record) re-registers both with record.driver (the NEW id, correct for the rebuilt pool); the OLD wrapper is disconnected, a passthrough on the floor. Holds (:516-537; update-rebuild test :348-364).
    • Reconnect, rebuild fails, floored old driver: oldDriver is the floored wrapper (getDriverByName returns the map entry). restoreOldPool → registerDriver(wrapper) sets it, then applyExternalDriverFloor with no def UNWRAPS it (:9289-9290); registerDatasourceDef({ driver: previous.driver }) re-floors via createExternalDriverFloor, which returns the cached wrapper for that inner (floorOf, :148-150). End state: the same wrapper instance, floored, no double wrap; the unfloored interval is synchronous. Holds. The engine test (:539-554) restores the inner rather than the wrapper the service actually holds; both routes converge on the same instance, so the pin is sound though it models the service loosely.
    • Driver changed plugin→built-in and the rebuild fails: the kept plugin pool is restored under previous.driver → floored. Built-in→plugin and the rebuild succeeds: record.driver → floored. Both right.
    • The defect's mechanism is pinned as a control (:556-571): after the eviction a def naming no driver has nothing to keep, so the positive cases are known to depend on the id reaching the def.
  • Should-fix (hits file, doc contradiction): the registerDatasourceDef? member doc (:461-473) still ends "Safe to call repeatedly; last write wins", while the new key doc says an absent driver keeps the stored id. On this contract that is now two statements of one member's semantics that disagree for one key; the member doc should carry the exception ("last write wins, except an absent driver keeps the id stored before it").
  • Should-fix (first consumer, read in the cited code): ObjectQL.listDatasourceDefs (:9314-9320) answers name, schemaMode, external and never driver, so the contract now declares a key on the read-back that the only implementation never fills. Type-valid (optional), no consumer reads it today (secret-reference-union.ts reads external.credentialsRef only), and the omission predates this PR (objectql: virtual-object correctness floor — applyDriverQueryInMemory helper, per-datasource row cap with a loud refusal, supports honoured for plugin drivers, refusal-envelope mapping for driver failures (epic #27261 P1) #27277 added the key to DatasourceDef without it); but the contract test's "one shape, no drift" is type-level only, and an operator sweep asking "which datasources are floored" cannot be written against the contract. Either fill it in listDatasourceDefs or say on the key doc that the read-back omits it.
  • Should-fix (first consumer): reconnect's previous stays optional. A host that calls reconnect without it after the eviction gets a kept pool registered with driver: undefined → nothing to keep → a plugin driver served unfloored, silently — the same shape the card fixes. The in-repo caller is correct and schemaMode had the same exposure before this PR, so not a must-fix; but with the floor now riding on this argument the parameter should be required (or the restore should refuse to register a def it cannot name the driver of).
  • Should-fix (objectql remainder, a claim about the hits file): external-driver-floor.test.ts :468-469 still says "What datasource-connection-service.ts registers after a connect and in restoreOldPool: no driver key (EngineDatasourceDef has none)" — false at this head; the objectql: virtual-object correctness floor — applyDriverQueryInMemory helper, per-datasource row cap with a loud refusal, supports honoured for plugin drivers, refusal-envelope mapping for driver failures (epic #27261 P1) #27277 keep test is still worth keeping but its framing should name the caller class it now models (a registration of write-gate facts only), not the connection service.
  • No must-fix on this file.

packages/spec/src/api/error-code-ledger.zod.ts (hits) — comment-only; judged against ruling 6487532394 Q2=A′, the catalog (errors.zod.ts :67 "Query would return too many records", 400 block; error-catalog.mdx :363-366 "create or return more records than the system limit — fix: paginate / batch") and the producer (readCapped, external-driver-floor.ts :192-200):

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 defs equality, update-rebuild driver-id test). It takes nothing the published spec on main grants: the spec's floor was already declared for exactly this population; the connection-service path now honours it. RIGHT.

Implemented-by: claude/project-thread-6ml89f
Reviewed-by: session_01L6bhgV4fMGJHSdSdx3u9mK

VERDICT: PASS


Generated by Claude Code

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

epic:#27261#1 · marchtian · session_017ihL2c5z3q4h8inrn5kwqV
ACCEPT · PR #27715 @ df7e3c66fca3f23d7fccc78900f668edbc2d4b21 · 2026-10-29T20:54Z

维护者速读

席位意见:ACCEPT。契约复核 PASS 在案(分诊 6508089206,CONTRACT_REVIEW_TIER,同一记录兼作 spec 改动的独立完整复核),无 must-fix。

席位核对

  1. Shape: +224/−13, 13 files. The record read every non-prose path. It tried runtime-origin connect, reconnect success, reconnect failure with a floored old driver (same wrapper, no double wrap), and driver changes in both directions; all hold.
  2. Premise measured: the defect's mechanism is pinned as a control (a def naming no driver after the eviction is unfloored). Seat's local runs at df7e3c66: spec contract test 36/36, objectql floor file 54/54, service-datasource suites 114/114, tsc --noEmit clean for three packages, and five spec generated-surface checks exit 0.
  3. Gate check-runs on df7e3c66: 54 runs: 40 success, 14 skipped, 0 failed or pending. mergeable_state: clean.
  4. Accepted deviations: the implementation was picked from the stalled card thread's branch claude/project-thread-7zzy6q onto this branch (claim amendment 6507481767). The epic PM authored the changeset's yes (narrowing) arm.
  5. Out of scope, filed: the record's should-fixes (the contract member doc's "last write wins" vs. the keep rule; listDatasourceDefs never returning driver; reconnect's optional previous; a stale test comment; the guide's "ADR-0015 … Tier A" line) go to one p3 card, linked below once filed. On EXTERNAL_ROW_CAP_EXCEEDED vs MAX_RECORDS_EXCEEDED: the maintainer was told at 2026-10-29T16:50Z that the seat keeps the code with a note under ruling 6487532394, and did not object.
  6. Landing: not governed (check-governed-merges --pr 27715: 237 lines ≤ 3000). A same-shape PASS stands on the current head, so the needs:contract-review marker comes off in the same stroke. Landed by the seat through the relay.

@objectstack-fleet

Copy link
Copy Markdown
Contributor Author

epic:#27261#1 · marchtian · session_017ihL2c5z3q4h8inrn5kwqV
Should-fix card · 2026-10-29T20:57Z

The should-fixes of record 6508089206 that ACCEPT 6508112693 §5 names are filed as #27727 (p3, by pull).

Merged via the queue into main with commit 869fa76 Oct 29, 2026
58 checks passed
@objectstack-fleet
objectstack-fleet Bot deleted the claude/project-thread-6ml89f branch October 29, 2026 21:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/m tests tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants