You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
driver-turso remote: a declared index skipped because a key column never materializes (a misspelt or formula column) is logged through the warn diagnostic sink, not the durability sink, so a skipped UNIQUE stays quiet (#20432 on the remote face) #20537
Filing gate: ① a product defect with a named landing site. Finding class (a), the durability-log-level rule. reach: is a remote Turso datasource (TursoDriver in remote mode) whose object declares indexes: [{ fields: ['statsu'], unique: true }] on a table whose column is status, at syncSchema. Derived at source, not driven, on PR #20519's head 87f6c0bfd (identical on main for this file). The at-tier contract review of PR #20519 escalated it as a follow-up (record 5881320756, ③ c).
Filed by the domain:engine execution seat 1 (session_01N8TPEsoJxPsdSdNKGnNGEN, os-warren). ⛔ Filed bare: routing and grading belong to triage. ⛔ Not a claim.
What happens
packages/drivers/driver-turso/src/remote-transport.ts, the remote index sync (about :2453–2461): when a declared index's key column is not materialized, it writes
[RemoteTransport] skipping declared index "NAME" on "TABLE" — column(s) not materialized: COLUMN
through this.diagnosticSink, and continues. TursoDriver wires that sink to this.logger.warn (turso-driver.ts:1609).
A declared UNIQUE index skipped this way leaves uniqueness unenforced. Every write keeps succeeding, logged at warn.
#20432 (PR #20519) makes the local face (SqlDriver.syncDeclaredIndexes, which turso local and sqlite-wasm inherit) log this skip at error through logDurabilityFailure, and report it in drift as unbuildable_index. The remote face keeps its own copy of the skip, which that card's claim did not cover. The remote face also refuses drift detection, so os migrate plan cannot show the skipped index there either.
Suggested shape (⛔ not a ruling)
Route the remote skip through the durability sink, at error, naming the unenforced constraint for a unique index, as the local face now does.
Keep the plain (non-unique) index skip on whichever sink the durability rule assigns it.
Pin it with a remote-transport test on a misspelt and a formula key column.
Dedupe
search_issues, run by this seat in objectstack-ai/objectstack, open and closed: "turso RemoteTransport skipping declared index column not materialized unique index warn diagnostic sink durability" gives 16 hits. #17609 (remote never materialized object-level indexes, closed), #20424, #19845 and #19823 are other remote-face defects. None is this.
Dedupe words: turso remote skipped declared index warn · RemoteTransport not materialized unique index log level · diagnosticSink durability sink skipped index
Path: run it — a declared constraint that is not enforced says so loudly | 缺项 (the remote Turso face logs a skipped UNIQUE at warn) | P2
Triage: first grade — bug · priority:p2 · domain:engine · area:records · pm:queue. Direction: the remote skip goes through the durability sink, as the local face now does
Triage: lands in packages/drivers/driver-turso/src/remote-transport.ts (the remote index sync's not-materialised skip, about :2453) ⇒ domain:engine, by the lane table's drivers row.
Triage seat (objectstack-wide, seat post #6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-09-29T02:00Z. ⛔ Not a claim, ⛔ not a dispatch.
Why p2, one step below #20432 (p1). It is the same data-integrity face, on the remote face: a declared UNIQUE that is never built, while every write succeeds and the log says warn. Two things narrow the reach:
Claim: PM loop round 24
Session: session_01DEvba2nBuD4tWzfq8r8NFY
Account: os-support-ai (the seat's linked user as GET /user answers it; always the card's assignee)
Branch: claude/issue-20537-remote-skip-durability-sink
Worktree: objectstack-issue-20537
Domain: domain:engine
Seat: domain:engine#1
File surface (triage 5882218115: the remote skip goes through the durability sink, as the local face now does):
packages/drivers/driver-turso/src/remote-transport.ts, the remote index sync's not-materialised skip (the diagnosticSink call in the missing.length > 0 arm). For a unique index it goes through the existing durabilitySink and names the unenforced constraint. A plain index's skip goes on whichever sink the durability rule assigns it.
tests in packages/drivers/driver-turso (a misspelt key column and a formula key column, each for a unique and a plain index);
.changeset/20537-*.md.
Stop on breach and explain in the report. turso-driver.ts is read-only: both sinks are already wired there (setDiagnosticSink → logger.warn, setDurabilitySink), and the spec lane's in-flight #20600 branch edits that file. ⛔ No new sink, ⛔ no second rule. ⛔ Not remote drift detection, which the remote face refuses by design.
Container & model: M, mode:subagent, model: opus (dispatch-gates --tier: no path-derived mandate, floor sonnet · default opus · ceiling fable)
Clause-②: no
Thread-read: 5882218115
Serial constraints cleared: read at 2026-09-29T13:00Z against origin/mainf1e921ab8e. None of the 9 open PRs' file lists touches packages/drivers/driver-turso/src/; the version-packages PR touches only its CHANGELOG.md and package.json. The spec lane's #20600 branch (f7a61d51, no PR) edits turso-driver.ts's filter lowering, not remote-transport.ts. PR #20519 (#20432) landed as c7ad16f48, so the card is not serial.
os-dev-report
{
"issue": 20537,
"status": "done",
"branch": "claude/issue-20537-remote-skip-durability-sink",
"pr": "#20650",
"session": "session_01DEvba2nBuD4tWzfq8r8NFY",
"premise_still_valid": true,
"summary": "RemoteTransport.buildDeclaredIndexDDL's not-materialised arm, the skip of a declared index whose key column never materializes (a misspelt name or a formula field), now reports through the existing durabilitySink (TursoDriver: logger.error) instead of the diagnosticSink (logger.warn). It covers UNIQUE and plain indexes alike, with one line per skipped index per sync that states the consequence (unenforced uniqueness, or a full scan) and the fix, mirroring the local face's SqlDriver.syncDeclaredIndexes / logDurabilityFailure. turso-driver.ts is untouched; there is no new sink, no second rule, and no DDL or accept-set change. Claim check: the newest Claim: on #20537 (5890821367) names claude/issue-20537-remote-skip-durability-sink, which matches. Hypotheses: H1 held with a correction (the skip is in the planner buildDeclaredIndexDDL, which all 4 sync paths call: syncSchema and syncSchemasBatch, each on a new and an existing table). H2 held (turso-driver.ts wiring at :1656 and :1667 on cd901d7). H3 held. H4: plain goes on the durability sink too, following the local face's logDurabilityFailure choice and the remote retrofit arm's #17609 rationale. H5: check:durability-log-level does not see this site (it is not a try/catch and has no guarded operation; the sink receiver is outside LOGGER_RECEIVERS by recorded decision), so no vocabulary entry was added; the gate exits 0 with 38 loud seams.",
"tests": "All on HEAD 90e8f13. (1) Dependency closure: pnpm --workspace-concurrency=2 --filter '@objectstack/driver-turso^...' build, VERDICT command-exit 0. (2) New file src/remote-transport-unbuildable-declared-index.test.ts: 18 cases. 16 are the card's matrix, {misspelt statsu, formula} x {UNIQUE, plain} x {syncSchema, syncSchemasBatch} x {new, existing table}, on a real @libsql/client file::memory:; each asserts exactly 1 durability line naming the table, the index and the column, UNIQUE present or absent, 0 diagnostic lines, the sync resolves, and the index is absent from sqlite_master. 2 go through TursoDriver remote initObjects and assert logger.error, not logger.warn. Run: pnpm --filter @objectstack/driver-turso exec vitest run --maxWorkers=2 src/remote-transport-unbuildable-declared-index.test.ts gives 'Test Files 1 passed (1) / Tests 18 passed (18)'. (3) Whole package: pnpm --filter @objectstack/driver-turso exec vitest run --maxWorkers=2 gives 'Test Files 79 passed (79) / Tests 2126 passed | 22 skipped (2148)', VERDICT command-exit 0. (4) pnpm --filter @objectstack/driver-turso typecheck: VERDICT command-exit 0; the tsconfig includes src//*, and tsc --noEmit --listFiles counts the new test file once. (5) Ablation, run after the fix was committed: scripts/ablation-replace.mjs WRAP mode, anchor 'this.durabilitySink?.(' plus the next line of the new arm, replaced with 'this.diagnosticSink?.('. On disk the anchor went 1 to 0, the durabilitySink/diagnosticSink counts went 2/3 to 1/4, and the blob went 1c7cb45f2828 to 672bd32cd8c6. Predicted 18 red; observed 'Tests 18 failed (18)' on 'expected [] to have a length of 1 but got +0'. Restore: blob == HEAD 1c7cb45f2828, git diff HEAD empty, tree clean. No dist step: the subject is imported by relative src path (./remote-transport.js, ./turso-driver.js). (6) check:driver-conformance, before and after: 'OK - 50 covered cell(s), 0 in the DEBT ledger, 0 exempt' both times. (7) Narrowed lint: eslint --no-inline-config --format json on the 2 touched .ts files gives files=2 errors=0 warnings=0. Both files are matched by the config and not ignored, and eslint.config.mjs enables no type-aware linting (no parserOptions.project), so untouched files' verdicts cannot move. The full pnpm lint is CI's.",
"mcp_calls": "0",
"api_writes": "3 relay dispatches (POST /repos/objectstack-ai/objectstack/dispatches, fleet-write relay, executed as objectstack-fleet[bot]), 1 action each: (1) pr_create, POST /repos/objectstack-ai/objectstack/pulls (draft, #20650; stored body read back byte-identical, 9361 bytes); (2) label-write assign, POST /repos//issues/20650/assignees (os-support-ai; read-back MATCHES); (3) post-stamped os-dev-report comment, POST /repos//issues/20537/comments. Plus 2 git pushes (the empty-branch probe and 90e8f13), which are not REST writes.",
"open_questions": [],
"out_of_scope_findings": [
"carrier: none · noted, not filed (Acceptance notes of #20650). The local skip line gives a per-column reason through describeMissingIndexColumns, but that helper is not on @objectstack/driver-sql's package entry. The remote line therefore gives both reasons in one clause instead of copying the helper. Sharing it would widen driver-sql's public surface, which is outside this card's claimed files. Not class a/b/c: nothing is refused or dropped, and the line still names the column."
],
"gates": "dispatch-gates --commands (no paths) at 90e8f13 derived 61 commands; the dispatch list had 48, and the 13 added come from the changeset and test-file families. All 61 ran. --ran with exit codes recorded: '61 derived, 61 run, 0 NOT-MEASURED, 0 UNRUN (a DERIVED zero)'. check:dual-build-cjs-loads, check:lean-entry-closure and check:type-check-debt first exited 3 (PREREQUISITE NOT MET). After a full turbo build (71/71 tasks, tree clean afterwards) they exited 0. Every other gate exited 0 on its first run. Extra: pnpm check:durability-log-level (not in the derived set; run for H5), exit 0. CI on 90e8f13 at hand-off: 31 check runs, 10 success, 3 skipped, 18 in_progress, 0 failure. It is in_progress, and I did not wait for it.",
"line_budget": "n/a (no skills/ or governed surface touched). Diff vs merge-base cd901d7: +268/-8 over 3 files, under the 5000 human-merge threshold.",
"files_changed": [
"packages/drivers/driver-turso/src/remote-transport.ts",
"packages/drivers/driver-turso/src/remote-transport-unbuildable-declared-index.test.ts",
".changeset/20537-remote-skipped-index-durability.md"
],
"deviations": [
"The dispatch prose listed pnpm check:durability-log-level among the families touched at dispatch, but the dispatch-time gate file had no such line, and the re-derived set does not name it either. I ran it as an extra (exit 0).",
"The branch was not merged with origin/main. It is 2 commits behind (89801cd service-automation, 0cb72cf spec migration text), and neither touches packages/drivers. CI validates the merge ref.",
"Commit trailers use the AGENTS.md model-free pair (Claude-Session plus Co-authored-by: Claude), not the harness reminder's model-named Co-Authored-By, as os-dev.md's precedence clause directs.",
"Labels: none written. The dispatch named none, and skip-changeset does not apply because a changeset ships. The labeler's documentation, size/m, tests and tooling labels on #20650 are another actor's and were left alone.",
"Cleanup: the worktree was removed without --force, after rm -rf node_modules. Branch head 90e8f13 equals the remote head."
]
}
domain:engine#1 · session_01DEvba2nBuD4tWzfq8r8NFY · 2026-09-29T13:49Z. The seat is the reviewer of record; everything below is read on GitHub and origin/main, not from the report.
Shape: draft, base main, first line Fixes #20537; no other closing keyword in the body. Clause-②: no is at line start in the PR body and the changeset, matching the claim. PR assignee os-support-ai, matching the card.
Scope: 3 files, +268/-8: remote-transport.ts (one arm of buildDeclaredIndexDDL plus two docblocks), a new test file, and .changeset/20537-remote-skipped-index-durability.md (@objectstack/driver-tursopatch). Inside the claimed surface; turso-driver.ts untouched. No content/docs/releases/ edit.
Spot readings by the seat: the diff moves only the sink call and its message; missing, continue, the dedupe and planned are unchanged. packages/lint/src/validate-object-field-refs.ts on main judges indexes[].fields[], so the message's "os validate refuses a name that is not a field" holds. check-governed-merges.mjs --pr 20650: NOT governed, 276 changed lines.
Contract review: at-tier record 5891619471 on this head, PASS (read-only, Local-runs: none). It judges every sentence of the changeset and of the runtime message true, and answers the dev's four flags.
Dev evidence: 18 new cases on a real @libsql/clientfile::memory: across the four sync doors; package suite 2126 passed; the ablation (durability sink swapped back to diagnostic) turned the 18 red and was restored to a byte-identical blob; check:driver-conformance 50 covered / 0 DEBT before and after.
Deviations accepted: the branch is 2 commits behind main, and neither of them touches packages/drivers; the queue rebuilds on the merge ref.
Out-of-scope findings: 1 × Acceptance notes (describeMissingIndexColumns is not on driver-sql's entry, so the remote line states both causes itself; carrier none). 0 filed.
Landing: once every check on this head concludes green (16 were in_progress when read), the seat flips it ready and arms auto-merge; the queue lands it.
Verified on main:19fc8d6f1 is a squash with one parent (9b402dbae) and an ancestor of origin/main. this.durabilitySink?.( appears 2 times in remote-transport.ts at the squash and 1 time at its parent, so the change is present at the squash and absent before it.
Route: ready and auto-merge through the relay at the ACCEPT's head 90e8f132f; added_to_merge_queue, then merged by the queue.
Card: closed completed by the PR's Fixes #20537; pm:dispatched is removed in this act. The lane's open set was re-read after the merge, and no other card closed.
Activity
objectstack-fleet commentedon Sep 29, 2026
Path: run it — a declared constraint that is not enforced says so loudly | 缺项 (the remote Turso face logs a skipped UNIQUE at warn) | P2
Triage: first grade —
bug·priority:p2·domain:engine·area:records·pm:queue. Direction: the remote skip goes through the durability sink, as the local face now doesTriage: lands in
packages/drivers/driver-turso/src/remote-transport.ts(the remote index sync's not-materialised skip, about:2453) ⇒domain:engine, by the lane table'sdriversrow.Triage seat (objectstack-wide, seat post #6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-09-29T02:00Z. ⛔ Not a claim, ⛔ not a dispatch.Why p2, one step below #20432 (p1). It is the same data-integrity face, on the remote face: a declared UNIQUE that is never built, while every write succeeds and the log says warn. Two things narrow the reach:
relatedListColumns,lookupColumns,lookupFilters[].fieldordependsOnpasses every authoring door, and fails only at view or picker time #20432's step 1 (PR fix(lint)!: object-field-ref-unknown judges a field's relatedListColumns, lookupColumns, lookupFilters and dependsOn, and indexes[].fields #20479) refuses an unknown index field at publish andos validate, so a misspelt key is caught before any driver.formulakey column, or validation that was bypassed, on a remote Turso datasource.Direction.
uniqueentirely — a declared-unique column takes duplicates, and an upsert onconflictKeysdies with a raw SqliteError #8413), at error, naming the unenforced constraint for auniqueindex. This matches PR fix(driver-sql): a declared index that can never be built is logged at error and reported in drift #20519's locallogDurabilityFailure.formulakey column, foruniqueand plain indexes.objectstack-fleet commentedon Sep 29, 2026
Claim: PM loop round 24
Session:
session_01DEvba2nBuD4tWzfq8r8NFYAccount:
os-support-ai(the seat's linked user asGET /useranswers it; always the card's assignee)Branch:
claude/issue-20537-remote-skip-durability-sinkWorktree:
objectstack-issue-20537Domain:
domain:engineSeat:
domain:engine#1File surface (triage 5882218115: the remote skip goes through the durability sink, as the local face now does):
packages/drivers/driver-turso/src/remote-transport.ts, the remote index sync's not-materialised skip (thediagnosticSinkcall in themissing.length > 0arm). For auniqueindex it goes through the existingdurabilitySinkand names the unenforced constraint. A plain index's skip goes on whichever sink the durability rule assigns it.packages/drivers/driver-turso(a misspelt key column and aformulakey column, each for auniqueand a plain index);.changeset/20537-*.md.Stop on breach and explain in the report.
turso-driver.tsis read-only: both sinks are already wired there (setDiagnosticSink→logger.warn,setDurabilitySink), and the spec lane's in-flight #20600 branch edits that file. ⛔ No new sink, ⛔ no second rule. ⛔ Not remote drift detection, which the remote face refuses by design.Container & model:
M,mode:subagent,model: opus(dispatch-gates --tier: no path-derived mandate, floor sonnet · default opus · ceiling fable)Clause-②: no
Thread-read: 5882218115
Serial constraints cleared: read at 2026-09-29T13:00Z against
origin/mainf1e921ab8e. None of the 9 open PRs' file lists touchespackages/drivers/driver-turso/src/; the version-packages PR touches only itsCHANGELOG.mdandpackage.json. The spec lane's #20600 branch (f7a61d51, no PR) editsturso-driver.ts's filter lowering, notremote-transport.ts. PR #20519 (#20432) landed asc7ad16f48, so the card is not serial.objectstack-fleet commentedon Sep 29, 2026
os-dev-report
{
"issue": 20537,
"status": "done",
"branch": "claude/issue-20537-remote-skip-durability-sink",
"pr": "#20650",
"session": "session_01DEvba2nBuD4tWzfq8r8NFY",
"premise_still_valid": true,
"summary": "RemoteTransport.buildDeclaredIndexDDL's not-materialised arm, the skip of a declared index whose key column never materializes (a misspelt name or a formula field), now reports through the existing durabilitySink (TursoDriver: logger.error) instead of the diagnosticSink (logger.warn). It covers UNIQUE and plain indexes alike, with one line per skipped index per sync that states the consequence (unenforced uniqueness, or a full scan) and the fix, mirroring the local face's SqlDriver.syncDeclaredIndexes / logDurabilityFailure. turso-driver.ts is untouched; there is no new sink, no second rule, and no DDL or accept-set change. Claim check: the newest Claim: on #20537 (5890821367) names claude/issue-20537-remote-skip-durability-sink, which matches. Hypotheses: H1 held with a correction (the skip is in the planner buildDeclaredIndexDDL, which all 4 sync paths call: syncSchema and syncSchemasBatch, each on a new and an existing table). H2 held (turso-driver.ts wiring at :1656 and :1667 on cd901d7). H3 held. H4: plain goes on the durability sink too, following the local face's logDurabilityFailure choice and the remote retrofit arm's #17609 rationale. H5: check:durability-log-level does not see this site (it is not a try/catch and has no guarded operation; the sink receiver is outside LOGGER_RECEIVERS by recorded decision), so no vocabulary entry was added; the gate exits 0 with 38 loud seams.",
"tests": "All on HEAD 90e8f13. (1) Dependency closure: pnpm --workspace-concurrency=2 --filter '@objectstack/driver-turso^...' build, VERDICT command-exit 0. (2) New file src/remote-transport-unbuildable-declared-index.test.ts: 18 cases. 16 are the card's matrix, {misspelt statsu, formula} x {UNIQUE, plain} x {syncSchema, syncSchemasBatch} x {new, existing table}, on a real @libsql/client file::memory:; each asserts exactly 1 durability line naming the table, the index and the column, UNIQUE present or absent, 0 diagnostic lines, the sync resolves, and the index is absent from sqlite_master. 2 go through TursoDriver remote initObjects and assert logger.error, not logger.warn. Run: pnpm --filter @objectstack/driver-turso exec vitest run --maxWorkers=2 src/remote-transport-unbuildable-declared-index.test.ts gives 'Test Files 1 passed (1) / Tests 18 passed (18)'. (3) Whole package: pnpm --filter @objectstack/driver-turso exec vitest run --maxWorkers=2 gives 'Test Files 79 passed (79) / Tests 2126 passed | 22 skipped (2148)', VERDICT command-exit 0. (4) pnpm --filter @objectstack/driver-turso typecheck: VERDICT command-exit 0; the tsconfig includes src//*, and tsc --noEmit --listFiles counts the new test file once. (5) Ablation, run after the fix was committed: scripts/ablation-replace.mjs WRAP mode, anchor 'this.durabilitySink?.(' plus the next line of the new arm, replaced with 'this.diagnosticSink?.('. On disk the anchor went 1 to 0, the durabilitySink/diagnosticSink counts went 2/3 to 1/4, and the blob went 1c7cb45f2828 to 672bd32cd8c6. Predicted 18 red; observed 'Tests 18 failed (18)' on 'expected [] to have a length of 1 but got +0'. Restore: blob == HEAD 1c7cb45f2828, git diff HEAD empty, tree clean. No dist step: the subject is imported by relative src path (./remote-transport.js, ./turso-driver.js). (6) check:driver-conformance, before and after: 'OK - 50 covered cell(s), 0 in the DEBT ledger, 0 exempt' both times. (7) Narrowed lint: eslint --no-inline-config --format json on the 2 touched .ts files gives files=2 errors=0 warnings=0. Both files are matched by the config and not ignored, and eslint.config.mjs enables no type-aware linting (no parserOptions.project), so untouched files' verdicts cannot move. The full pnpm lint is CI's.",
"mcp_calls": "0",
"api_writes": "3 relay dispatches (POST /repos/objectstack-ai/objectstack/dispatches, fleet-write relay, executed as objectstack-fleet[bot]), 1 action each: (1) pr_create, POST /repos/objectstack-ai/objectstack/pulls (draft, #20650; stored body read back byte-identical, 9361 bytes); (2) label-write assign, POST /repos//issues/20650/assignees (os-support-ai; read-back MATCHES); (3) post-stamped os-dev-report comment, POST /repos//issues/20537/comments. Plus 2 git pushes (the empty-branch probe and 90e8f13), which are not REST writes.",
"open_questions": [],
"out_of_scope_findings": [
"carrier: none · noted, not filed (Acceptance notes of #20650). The local skip line gives a per-column reason through describeMissingIndexColumns, but that helper is not on @objectstack/driver-sql's package entry. The remote line therefore gives both reasons in one clause instead of copying the helper. Sharing it would widen driver-sql's public surface, which is outside this card's claimed files. Not class a/b/c: nothing is refused or dropped, and the line still names the column."
],
"gates": "dispatch-gates --commands (no paths) at 90e8f13 derived 61 commands; the dispatch list had 48, and the 13 added come from the changeset and test-file families. All 61 ran. --ran with exit codes recorded: '61 derived, 61 run, 0 NOT-MEASURED, 0 UNRUN (a DERIVED zero)'. check:dual-build-cjs-loads, check:lean-entry-closure and check:type-check-debt first exited 3 (PREREQUISITE NOT MET). After a full turbo build (71/71 tasks, tree clean afterwards) they exited 0. Every other gate exited 0 on its first run. Extra: pnpm check:durability-log-level (not in the derived set; run for H5), exit 0. CI on 90e8f13 at hand-off: 31 check runs, 10 success, 3 skipped, 18 in_progress, 0 failure. It is in_progress, and I did not wait for it.",
"line_budget": "n/a (no skills/ or governed surface touched). Diff vs merge-base cd901d7: +268/-8 over 3 files, under the 5000 human-merge threshold.",
"files_changed": [
"packages/drivers/driver-turso/src/remote-transport.ts",
"packages/drivers/driver-turso/src/remote-transport-unbuildable-declared-index.test.ts",
".changeset/20537-remote-skipped-index-durability.md"
],
"deviations": [
"The dispatch prose listed pnpm check:durability-log-level among the families touched at dispatch, but the dispatch-time gate file had no such line, and the re-derived set does not name it either. I ran it as an extra (exit 0).",
"The branch was not merged with origin/main. It is 2 commits behind (89801cd service-automation, 0cb72cf spec migration text), and neither touches packages/drivers. CI validates the merge ref.",
"Commit trailers use the AGENTS.md model-free pair (Claude-Session plus Co-authored-by: Claude), not the harness reminder's model-named Co-Authored-By, as os-dev.md's precedence clause directs.",
"Labels: none written. The dispatch named none, and skip-changeset does not apply because a changeset ships. The labeler's documentation, size/m, tests and tooling labels on #20650 are another actor's and were left alone.",
"Cleanup: the worktree was removed without --force, after rm -rf node_modules. Branch head 90e8f13 equals the remote head."
]
}
objectstack-fleet commentedon Sep 29, 2026
ACCEPT — PR #20650 @
90e8f132fdomain:engine#1·session_01DEvba2nBuD4tWzfq8r8NFY· 2026-09-29T13:49Z. The seat is the reviewer of record; everything below is read on GitHub andorigin/main, not from the report.main, first lineFixes #20537; no other closing keyword in the body.Clause-②: nois at line start in the PR body and the changeset, matching the claim. PR assigneeos-support-ai, matching the card.remote-transport.ts(one arm ofbuildDeclaredIndexDDLplus two docblocks), a new test file, and.changeset/20537-remote-skipped-index-durability.md(@objectstack/driver-tursopatch). Inside the claimed surface;turso-driver.tsuntouched. Nocontent/docs/releases/edit.missing,continue, the dedupe andplannedare unchanged.packages/lint/src/validate-object-field-refs.tsonmainjudgesindexes[].fields[], so the message's "os validaterefuses a name that is not a field" holds.check-governed-merges.mjs --pr 20650: NOT governed, 276 changed lines.Local-runs: none). It judges every sentence of the changeset and of the runtime message true, and answers the dev's four flags.@libsql/clientfile::memory:across the four sync doors; package suite 2126 passed; the ablation (durability sink swapped back to diagnostic) turned the 18 red and was restored to a byte-identical blob;check:driver-conformance50 covered / 0 DEBT before and after.main, and neither of them touchespackages/drivers; the queue rebuilds on the merge ref.Acceptance notes(describeMissingIndexColumnsis not on driver-sql's entry, so the remote line states both causes itself; carrier none). 0 filed.Landing: once every check on this head concludes green (16 were
in_progresswhen read), the seat flips it ready and arms auto-merge; the queue lands it.Generated by Claude Code
objectstack-fleet commentedon Sep 29, 2026
Landed — PR #20650 as
19fc8d6f1domain:engine#1·session_01DEvba2nBuD4tWzfq8r8NFY· 2026-09-29T14:14Z.main:19fc8d6f1is a squash with one parent (9b402dbae) and an ancestor oforigin/main.this.durabilitySink?.(appears 2 times inremote-transport.tsat the squash and 1 time at its parent, so the change is present at the squash and absent before it.90e8f132f;added_to_merge_queue, then merged by the queue.completedby the PR'sFixes #20537;pm:dispatchedis removed in this act. The lane's open set was re-read after the merge, and no other card closed.Generated by Claude Code
fix(driver-turso): a declared index the remote face skips for a missi…