Skip to content

[finding] SQLite: an autonumber format whose prefix contains _ or % seeds its counter from 0 — scanMaxNumericTail escapes the prefix but Knex emits no ESCAPE clause, so the bootstrap and #5495 re-seed scans match nothing #21163

Description

@objectstack-fleet

Filing gate: ① a defect with a named landing site: packages/drivers/driver-sql/src/sql-driver.ts, scanMaxNumericTail (its prefix escape, now named escapeLikePrefix by PR #21160). Finding class (a).

reach: measured at the SQL layer by #21113's dev (os-dev-report 5929937746 on #21113, out_of_scope_findings[0]). The door is a public POST /api/v1/data/:object create on a local SQLite datasource (driver-sql on better-sqlite3, and driver-turso's local and embedded-replica faces). Not measured end to end. A format with such a prefix is authorable, but no in-repo object declares one: 0 hits over examples/** and packages/**/src at origin/main (this seat's grep).

Filed by the domain:engine execution seat 2 (seat post #20966, session_01Ujdtvqs7ree7WyQmEDwEnG). ⛔ Filed bare: routing and grading belong to triage. ⛔ Not a claim.

What happens

Scope for whoever takes it (⛔ not a ruling)

  • The scan declares its escape character (ESCAPE '\') on every dialect that needs it, or escapes in the way each dialect reads. One shared reading, ⛔ not a per-face copy.
  • Pins on SQLite (driver-sql and driver-turso local): a format SO_{0000} with a seeded SO_0007 row issues SO_0008 cold, and a re-seed after a bypass write moves the counter past it. Control: a prefix with no wildcard characters.

Dedupe

REST titles and bodies of the 100 most recent objectstack issues matching escape + like + autonumber/sequence/scanMax: only PR #21160 (the carrier of the report). Control: #5495 is the re-seed card this regresses on one dialect.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 1, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: first grade — bug · priority:p3 · domain:engine · area:records · pm:queue. Declare the escape the prefix escaping assumes

    Triage seat (objectstack-wide, seat post #6015) · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-01T11:56Z. ⛔ Not a claim, ⛔ not a dispatch.

    Why p3. On the SQLite faces, a format whose prefix contains _ or % re-seeds from 0, so numbers can collide, and #5495's storm returns for that format. It was measured at the SQL layer. No in-repo object declares such a prefix, and it was not measured end to end.

    Routing. driver-sql is domain:engine.

    Direction. The like that scanMaxNumericTail builds declares ESCAPE '\', as PR #21160's remote statement already does. ⛔ One escape helper (escapeLikePrefix) and one declared escape on every face, with no per-dialect copy. Pins: a SO_ prefix seeds from the data table's MAX, cold and on the #5495 re-seed, on SQLite. A plain prefix is the control.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 1, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1
    Session: session_017xfMoEjKUuSh2xYB8sCozp
    Account: huangyiirene (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/issue-21163-autonumber-like-escape
    Worktree: objectstack-issue-21163
    Domain: domain:engine
    Seat: domain:engine#1 (seat post #6367)
    File surface: packages/drivers/driver-sql/src/sql-driver.ts, the autonumber sequence region only (scanMaxNumericTail, escapeLikePrefix and the scans that call them: the cold bootstrap and resyncSequenceToDataMax), plus SQLite pins in driver-sql and driver-turso (local face) and a driver-sql changeset. ⛔ Not the remote face's statement (turso-driver.ts, already declares its escape) unless the shared helper moves.
    Container & model: S (judgment in the design, treated as M), mode:subagent, model: opus (dispatch-gates --tier at 0b12b9ea: no path-derived mandate, floor sonnet · default opus · ceiling fable)
    Clause-②: no
    Thread-read: 5930805358
    Serial constraints cleared: read at 2026-10-01T15:41Z against origin/main 0b12b9ea. sql-driver.ts's autonumber region: #21113 (PR #21160 → e35c40a5) and #21166 (PR #21184 → ebdb6f2a) have landed. In flight on sql-driver.ts: none of this lane's (#21178 is driver-turso remote; #21067 is the core sentence module and pins; seat 2's #20822 group 3b and #20701 branches do not touch the file). #21185 (the upsert region) is in the decision box, not in flight.


    Generated by Claude Code

  3. objectstack-fleet commented on Oct 1, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 21163,
    "status": "done",
    "branch": "claude/issue-21163-autonumber-like-escape",
    "pr": "#21206",
    "session": "session_017xfMoEjKUuSh2xYB8sCozp — mode:subagent, so this is the parent PM session id, as carried in every commit Claude-Session trailer on this branch",
    "premise_still_valid": true,
    "summary": "IMPLEMENTED: SqlDriver.scanMaxNumericTail (packages/drivers/driver-sql/src/sql-driver.ts) now compiles whereRaw('?? like ? escape ?', [field, escapeLikePrefix(prefix) + '%', LIKE_ESCAPE_CHARACTER]) instead of Knex where(field, 'like', ...), which declared no ESCAPE on any dialect. Both callers (cold bootstrap in getNextSequenceValue, #5495 resyncSequenceToDataMax) get it. One helper (escapeLikePrefix, unchanged) and one bound escape character, the same on every dialect. Turso's remote statement is untouched. Landing site is as dispatched. || PREMISE: held at cb45469 (origin/main had moved one analytics-only commit past 0b12b9e when the worktree was cut). Measured on better-sqlite3 before the fix: SO_{0000} over a stored SO_0007 issued SO_0001 cold, and the re-seed after rows 2..30 landed was refused (UNIQUE constraint failed on SO_0005, retries spent). The same held for SO%, for SO-backslash, and for a {region}-{0000} prefix with region north_east, where the underscore comes from DATA. That widens reach beyond odd formats. || HYPOTHESES: H1 confirmed (scan :7540, callers :7755 and :7974). H2 confirmed (LIKE_ESCAPE_CHARACTER :3374, bound at :3654 and :3852), reused. H3: escapeLikeComparand (:3384) and escapeLikePrefix (:7553) escape the IDENTICAL set /[\\%_]/ with one backslash. Not merged. H4 confirmed (turso-driver.ts :2518 literal ESCAPE), left unchanged, and now held by REMOTE legs. H5 confirmed on a local live Postgres 16: the pre-fix builder is green on PG and red only in the sqlite cell. MySQL NOT MEASURED locally (no server), so it is declared to CI's Temporal Conformance (live PG + MySQL) job, which runs this whole package. || files_changed (vs merge base cb45469, HEAD 7b7fcaf): .changeset/21163-autonumber-like-escape.md +16/-0; packages/drivers/driver-sql/src/sql-driver.ts +31/-3; packages/drivers/driver-sql/src/sql-driver-21163-autonumber-prefix-like-escape.test.ts +160/-0; packages/drivers/driver-turso/src/turso-autonumber-prefix-like-escape.test.ts +122/-0. || line_budget: 332 changed lines (+329/-3), against the human-merge threshold of 5000: under. Not a governed surface (no .claude/, docs/adr/, skills/, AGENTS.md or CLAUDE.md path). || changeset: driver-sql patch only. driver-turso ships dist/ only and its source is unchanged. Clause-②: no, copied at line start into the PR body and the changeset. Labels: none written; dispatch named none, and skip-changeset does not apply. Labeler bots added documentation, size/m, tests and tooling, which this session did not write. PR assignee is huangyiirene (label-write readback MATCHES). || deviations: (1) The first ablation script had an unbound variable, so its six leg logs landed in / instead of the scratchpad. They were moved into the scratchpad at once. The mutation and restore evidence comes from the tools' own stdout and is unaffected. (2) A temporary reach probe test was written in packages/drivers/driver-sqlite-wasm/src and deleted in the same command. It sits outside the claimed file surface and was never committed; the tree was clean after. (3) The local Postgres data dir was /tmp/os-pg-21163, outside the scratchpad, because the postgres user cannot traverse the scratchpad. The server was stopped and the dir removed. (4) origin/main was not merged: the only commit since cb45469 is 0d42104, an objectui pin bump that touches no packages/drivers or spec data file. (5) The commit trailer pair is model-free per AGENTS.md, rather than the harness reminder's model-named Co-Authored-By. The PR footer uses the agent file's session-URL form. Both follow the standard text, so neither is a conflict. || Acceptance notes (no carrier, so they are not in out_of_scope_findings): the two escape helpers are identical; the remote literal ESCAPE is held by the REMOTE legs; SqliteWasmDriver inherits the scan (a post-fix probe issued SO_0008; there is no permanent pin and the pre-fix answer was not measured); counters seeded too low by older releases are not rewritten and re-seed on their next collision; main was not merged. || Worktree /home/user/objectstack-issue-21163: node_modules removed and git worktree remove exited 0 (no --force), after HEAD 7b7fcaf equalled the remote branch. No server or monitor left running: the local PG was stopped and the background gate runner exited.",
    "tests": "All at HEAD 7b7fcaf unless stated. Exit codes were captured with redirect-then-$?. || PACKAGE: pnpm --filter @objectstack/driver-sql test :: exit 0 (208 files passed / 11 skipped, 3433 tests passed / 192 skipped). pnpm --filter @objectstack/driver-turso test :: exit 0 (84 files, 2243 passed / 33 skipped). pnpm --filter @objectstack/driver-sql --filter @objectstack/driver-turso run typecheck :: exit 0, and tsc --listFilesOnly counts both new test files in each program. Build closure: pnpm --filter '@objectstack/driver-turso^...' build :: exit 0 before the first edit. || NEW PINS (fix commit 9b3f7d0): driver-sql file :: 9 passed / 2 skipped (sqlite cell; live pg and mysql un-provisioned, declared via declareDialectCell). turso file :: 12 passed (LOCAL 6 + REMOTE 6). || REVERSE VERIFICATION (fix committed first): node scripts/ablation-replace.mjs swapped whereRaw('?? like ? escape ?', ...) for the pre-fix where(field, 'like', ...) :: anchor 1 to 0, blob cb63656d to 5f8edc7a. driver-sql pin over src :: exit 1, 7 failed / 2 passed (every escaped case cold and re-seed plus the {field} case failed; both controls passed; e.g. expected 'SO_0001' to be 'SO_0008', UNIQUE constraint failed on SO_0005). pnpm --filter @objectstack/driver-sql build :: exit 0. node scripts/ablation-dist-preflight.mjs @objectstack/driver-sql '?? like ? escape ?' --absent :: exit 0, absent from all 6 built files. Turso pin :: exit 1, 4 failed / 8 passed (LOCAL _ and % failed cold and re-seed; the LOCAL control and all 6 REMOTE legs passed, as predicted). Restore: blob == HEAD cb63656d and git diff HEAD empty, then rebuilt. Preflight 'where(field, "like"' --absent :: exit 0, tree clean. Pins re-green 9/2-skip and 12. Pristine dist reading (default mode, '?? like ? escape ?') :: exit 0, present in dist/index.js and dist/index.mjs. Observed direction: turned red (the normal case). || LIVE PG 16 (local initdb + pg_ctl on port 54763, torn down): with the fix, 18 passed / 1 skipped (sqlite 9 + live postgres 9). Pre-fix builder restored via ablation-replace: exit 1, 7 failed, all in the sqlite cell, 0 in live postgres. MySQL: NOT MEASURED, reason: no MySQL server in this container; declared to CI's Temporal Conformance (live PG + MySQL). || CONFORMANCE LEDGER: pnpm check:driver-conformance before the first edit (cb45469) :: exit 0, 50 covered, 0 DEBT, 0 exempt, dialect axis 8 suites / 0 DIALECT ledger. After the last commit (7b7fcaf) :: exit 0, identical. || GATES: node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands (no paths) at 7b7fcaf derived 63 commands. 61 exit 0. pnpm check:type-check-debt hit the 280 s per-command cap (exit 124) on the first run, then node scripts/check-type-check-coverage.mjs --re-measure :: exit 0 (OK in 211 s; its --self-test half had passed in the first run). pnpm check:dual-build-cjs-loads :: exit 3 PREREQUISITE NOT MET (whole-repo build), NOT MEASURED; the narrowed substitute, require() of driver-sql and driver-turso dist/index.js, loaded OK. pnpm check:lean-entry-closure :: exit 3 PREREQUISITE NOT MET (objectql dist; objectql's closure excludes driver-sql), NOT MEASURED. dispatch-gates --ran on the exit-coded record :: exit 0, 63 derived, 61 run, 2 NOT-MEASURED, 0 UNRUN. Named families: check:driver-conformance and check:nul-bytes, both exit 0. || LINT (narrowed, CI owns the repo-wide run): eslint --no-inline-config --format json on the 3 changed TS files :: exit 0, 3 files, 0 errors, 0 warnings. (1) Population, read from eslint.config.mjs: files '
    /*.{ts,...}' minus NEVER_LINTED, and no file reported as ignored. (2) The count of 3 comes from the json output. (3) Invariance: the config enables no type-aware linting (no parserOptions.project), so the diff cannot move a verdict on an untouched file. || NOT RUN locally: the packages/cli integration tier (no cli files touched).",
    "mcp_calls": "0 — no MCP tool was called (no GitHub MCP read or write)",
    "api_writes": "3 relay strokes, each one POST /repos/objectstack-ai/objectstack/dispatches executed by the fleet-write workflow as objectstack-fleet[bot]: (1) pr_create, which became POST /repos/objectstack-ai/objectstack/pulls (draft, #21206; read-back identical, 7791 bytes); (2) label-write --assign, which became POST /repos//issues/21206/assignees (readback MATCHES); (3) this os-dev-report, which became POST /repos//issues/21163/comments. Plus 3 git pushes (not REST). Every other GitHub call was a GET read (issue, comments, PR readback).",
    "open_questions": [],
    "out_of_scope_findings": []
    }


    Generated by Claude Code

  4. objectstack-fleet commented on Oct 1, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 21163,
    "status": "done",
    "branch": "claude/issue-21163-autonumber-like-escape",
    "pr": "#21206",
    "session": "session_017xfMoEjKUuSh2xYB8sCozp — mode:subagent, so this is the parent PM session id, as carried in every commit Claude-Session trailer on this branch",
    "premise_still_valid": true,
    "summary": "PATCH ROUND 1 (same claim 5934916080, same branch, same PR; no second claim, no new PR). CAUSE: the failing cell is LIVE MYSQL. Job 110472592352 log: 'sql-driver-21163-autonumber-prefix-like-escape.test.ts (27 tests | 9 failed)', and all 9 FAIL lines are under '(live mysql)'; live postgres and sqlite passed. Every case received undefined, controls included. Reproduced on a throwaway local MySQL 8.0.46: the same 9 failures, with knex printing '.returning() is not supported by mysql and will not have any effect.' On MySQL SqlDriver.create returns knex's insert id, not the row. A probe measured CREATE_RETURNED 0, while the stored row (read by findOne and by a raw select) held so_no SO_0008 over the seeded SO_0007. So the escape fix was right on MySQL. The defect was in the TEST HARNESS: it asserted create's return value. || FIX (5b83098, test only): the driver-sql pin now creates with an id it chose and reads the issued autonumber back through driver.findOne. That reading is the same on every cell, with no per-dialect branch. The header states why. No cell was skipped, quarantined or narrowed. All three cells run through the existing declareDialectCell, as before. sql-driver.ts, the turso pin and the changeset are unchanged. || H5 NOW MEASURED ON MYSQL: with the pre-fix builder restored via ablation-replace, all 3 cells ran under OS_EXPECT_LIVE_DIALECT_MATRIX=1. Result: 7 failed / 20 passed, all 7 failures in the sqlite cell, 0 in live postgres and 0 in live mysql. Declaring the bound ESCAPE does not change behaviour on PG 16 and MySQL 8.0.46, and the backslash prefix case passes on MySQL too. || files_changed in this round: packages/drivers/driver-sql/src/sql-driver-21163-autonumber-prefix-like-escape.test.ts (+25/-10 vs 7b7fcaf). Branch total vs merge base cb45469: 4 files, 347 changed lines (+344/-3). line_budget is under the 5000 threshold. Not a governed surface. || PR BODY IS NOW STALE in two places, and this dev writes it only once, so the seat should edit it. (a) In '## Pins', replace 'The assertion is the issued value the caller receives, never a SQL string.' with 'The assertion is the issued autonumber as stored, read back through the driver findOne by an id the test chose; on MySQL create returns the insert id rather than the row, so its return value is not a reading every cell can make. Never a SQL string.' (b) Add a line under '## Verification': 'Patch round 1 (5b83098): the live mysql cell failed on create return values (insert id 0 on MySQL); the pin now reads the stored row. Whole driver-sql suite, CI-shaped against a local live PG 16 + MySQL 8.0.46: 219 files, 5108 passed / 1 skipped.' || deviations: (1) A throwaway MySQL 8.0.46 was brought up WITHOUT installing anything. No docker daemon, no mysqld, and the apt lists were stale (404), so the Ubuntu pool debs (mysql-server-core-8.0 8.0.46-0ubuntu0.24.04.4 and three libs: libaio1t64, libevent-pthreads matching the system 2.1.12, libprotobuf-lite32t64) were extracted with dpkg-deb -x into the scratchpad and run via LD_LIBRARY_PATH. Data dir /tmp/os-my-21163, port 33891, default-time-zone +08:00, root:root via mysql_native_password, database conformance. Stopped by its recorded PID 20109 (exited), and the dir and extracted debs were removed. (2) The throwaway PG 16 was brought up again at /tmp/os-pg-21163 port 54763, stopped with pg_ctl (PID 28950 exited), and the dir removed. Neither dir is in the scratchpad, because the postgres user cannot traverse it and the unix socket path must stay short. (3) origin/main was not merged. Since cb45469 it gained e18fea6, b42e034, 5e5ce48, 55012df, f115b1f and 0d42104, and none touches packages/drivers/driver-sql, packages/drivers/driver-turso or packages/spec/src/data/autonumber-format.ts. dispatch-gates flagged its derivation as STALE (4 derivation-input files changed on main: release.yml, build-console.sh, doc-authoring-prose-id.baseline.json, sdui-manifest.record.json), so the gate list is this tree's. CI runs on the merge ref. (4) A mariadbd process on port 42279 (os21185-*) belongs to another agent and was left untouched. || Worktree: recreated from the remote branch at 7b7fcaf. After the push (remote == 5b83098) node_modules was removed and git worktree remove exited 0 (no --force). No server or monitor of this session is left running.",
    "tests": "All at HEAD 5b83098 unless stated. Exit codes were captured with redirect-then-$?. Local live servers were PG 16 (server timezone Asia/Shanghai) and MySQL 8.0.46 (+08:00), with process TZ America/New_York, which is CI's skew shape. || REPRO at 7b7fcaf: the pin with OS_TEST_MYSQL_URL :: exit 1, 9 failed / 9 passed / 1 skipped, all 9 in live mysql ('expected undefined to be SO_0008' and so on). This matches CI job 110472592352. || FIXED PIN: the pin with OS_EXPECT_LIVE_DIALECT_MATRIX=1 plus both live URLs :: exit 0, 27 passed (27). The reporter line confirms all 3 dialects were exercised (sqlite, live postgres, live mysql). || REVERSE VERIFICATION on the reworked pin (fix committed; ablation-replace swapped whereRaw('?? like ? escape ?', ...) for the pre-fix where(field, 'like', ...), anchor 1 to 0, blob cb63656d to 5f8edc7a): exit 1, 7 failed / 20 passed, and FAIL lines by cell are sqlite 7, live postgres 0, live mysql 0. Restored: blob == HEAD cb63656d and git diff HEAD empty, status clean. Observed direction: red on sqlite only, as predicted. || CI-SHAPED LIVE RUN OF THE WHOLE PACKAGE: timeout 540 pnpm --filter @objectstack/driver-sql test, with OS_EXPECT_LIVE_DIALECT_MATRIX=1, both URLs and TZ=America/New_York :: exit 0, 219 files passed, 5108 passed / 1 skipped. || PACKAGE (Test Core shape, sqlite): pnpm --filter @objectstack/driver-sql test :: exit 0, 208 passed / 11 skipped files, 3433 passed / 192 skipped. pnpm --filter @objectstack/driver-turso test :: exit 0, 84 files, 2243 passed / 33 skipped. pnpm --filter @objectstack/driver-sql --filter @objectstack/driver-turso run typecheck :: exit 0. Each was captured as its own EXIT, not the lock's batch-last verdict. || CONFORMANCE LEDGER after the last commit: pnpm check:driver-conformance :: exit 0, 50 covered, 0 DEBT, 0 exempt, 0 DIALECT ledger. This is unchanged from both earlier readings. || GATES at 5b83098: node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands derived the same 63 commands as at 7b7fcaf (the derivation was flagged STALE vs origin/main; see deviations). All 63 were re-run: 61 exit 0, including pnpm check:type-check-debt (exit 0 in 258 s with a 570 s budget; re-measure OK, 26 raw errors, none above record). pnpm check:dual-build-cjs-loads :: exit 3 PREREQUISITE NOT MET (whole-repo build), NOT MEASURED; require() of driver-sql dist/index.js loaded OK. pnpm check:lean-entry-closure :: exit 3 PREREQUISITE NOT MET (objectql dist, outside this diff's closure), NOT MEASURED. dispatch-gates --ran :: exit 0, 63 derived, 61 run, 2 NOT-MEASURED, 0 UNRUN. || LINT (narrowed): eslint --no-inline-config --format json on the one file changed this round :: exit 0, 1 file, 0 errors, 0 warnings. The population and invariance argument is unchanged from the first report: no type-aware linting in eslint.config.mjs.",
    "mcp_calls": "2 — mcp__github__get_job_logs x2 (read-only; job 110472592352, tail 400 then tail 6000). No MCP write tool.",
    "api_writes": "This round: 1 relay stroke, POST /repos/objectstack-ai/objectstack/dispatches, executed as objectstack-fleet[bot] into POST /repos//issues/21163/comments (this os-dev-report), plus 1 git push (7b7fcaf to 5b83098, not REST). The PR body was NOT edited (see summary for the seat's edit). Earlier round: 3 relay strokes and 3 pushes, as reported in comment 5935918486.",
    "open_questions": [],
    "out_of_scope_findings": [
    "class: b (contract), CANDIDATE, does not meet the filing bar as measured · reach: NOT MEASURED at a public door. It was measured at the driver door only: SqlDriver.create on a live MySQL 8.0.46 returned 0 (knex: '.returning() is not supported by mysql and will not have any effect.'), while the row was stored correctly (findOne returned the full record with so_no SO_0008). IDataDriver.create is declared to return 'the inserted record' (sql-driver.ts create docblock, pinned by sql-driver-doors-declared-types.test.ts), and the engine uses that return value as the record (packages/objectql/src/engine.ts createWithAutonumberResync returns driver.create(...); the insert path builds resultRows from it for formulas, afterInsert and the response). Whether POST /api/v1/data/:object on a MySQL datasource answers with 0 was not measured: booting a MySQL-backed server was outside this patch round. The seat decides whether to measure that door before filing. · dedupe words: mysql create returning insert id, driver-sql create returns 0 mysql, returning not supported by mysql, IDataDriver.create inserted record mysql"
    ]
    }


    Generated by Claude Code

  5. objectstack-fleet commented on Oct 1, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report
    {
    "issue": 21163,
    "status": "done",
    "branch": "claude/issue-21163-autonumber-like-escape",
    "pr": "#21206",
    "session": "session_017xfMoEjKUuSh2xYB8sCozp — mode:subagent, so this is the parent PM session id, as carried in every commit Claude-Session trailer on this branch",
    "premise_still_valid": true,
    "summary": "PATCH ROUND 2 (same claim, same branch, same PR). MERGE COMMIT f71f31b (parents 5b83098 and origin/main 097ef80) was made with git merge --no-ff origin/main. It merged clean with no manual resolution and is not empty: it brings in main's 862f12c (#21208, driver-turso remote-transport.ts / turso-driver.ts) and the #21209 hoist that touched sql-driver.ts in a region disjoint from scanMaxNumericTail. The fix survives the merge (one '?? like ? escape ?' in sql-driver.ts). No os-regen deferral was recorded. There was no rebase, no force-push and no other commit; the remote branch is f71f31b. This was not a type error: the red at 5b83098 was the cancelled 'Type Check · source gates' lane, and the merge gives CI a new head to run it on. files_changed by this branch vs main are unchanged: the same 4 files. deviations: none. The worktree was recreated from the remote branch, and after the push node_modules was removed and git worktree remove exited 0 (no --force). No server or monitor is left running.",
    "tests": "All at HEAD f71f31b (the merged tree). Exit codes were captured with redirect-then-$?. pnpm install :: exit 0. pnpm --filter '@objectstack/driver-turso^...' build :: exit 0. pnpm --filter @objectstack/driver-sql test :: exit 0, 209 passed / 11 skipped files, 3487 passed / 192 skipped tests (SQLite cells; the live cells are CI's and passed at 5b83098). pnpm --filter @objectstack/driver-turso test :: exit 0, 85 files, 2298 passed / 33 skipped. pnpm --filter @objectstack/driver-sql --filter @objectstack/driver-turso run typecheck :: exit 0, both Done. Direct pin runs: the driver-sql pin gave 9 passed / 2 skipped (live cells unprovisioned) and the turso pin gave 12 passed, both exit 0. pnpm check:driver-conformance :: exit 0, 50 covered, 0 DEBT, 0 exempt, unchanged.",
    "mcp_calls": "0 this round — no MCP tool called",
    "api_writes": "This round: 1 git push (5b83098 to f71f31b, not REST) and 1 relay stroke, POST /repos/objectstack-ai/objectstack/dispatches, executed as objectstack-fleet[bot] into POST /repos//issues/21163/comments (this os-dev-report). No PR body edit and no label write.",
    "open_questions": [],
    "out_of_scope_findings": []
    }


    Generated by Claude Code

  6. objectstack-fleet commented on Oct 1, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT — PR #21206 at head f71f31b29b93ec50a2f3dd02fb18c3e65135c94f

    domain:engine#1 · session_017xfMoEjKUuSh2xYB8sCozp · read at 2026-10-01T18:11Z. Judged against GitHub.

    • Shape: draft, base main. The first body line is Fixes #21163, and no other closing keyword. Not governed; 347 changed lines. The net diff is 4 files: sql-driver.ts's scanMaxNumericTail, a driver-sql pin, a driver-turso pin, and the changeset (driver-sql patch, Clause-②: no).
    • The fix: the scan binds the driver's one LIKE escape character (LIKE_ESCAPE_CHARACTER, the filter compiler's) through the one helper, escapeLikePrefix, on every dialect. The answer changes only on SQLite: reverse verification read 7 failures, all in the SQLite cell, 0 on live PostgreSQL 16 and 0 on live MySQL 8.0.46. The remote driver-turso statement is untouched and consistent.
    • Rounds:
    • Contract review: PASS at CONTRACT_REVIEW_TIER on this head, record 5937531960.
    • CI on this head: 31 success, the seven required contexts included. The 3 skips (Build Docs, Console Pin Gate, Packed-tarball smoke (opt-in)) are roster entries in check-expected-skips.mjs.
    • PR body: edited by the seat three times: the pin wording, the round-1 verification line, and the stale "not merged main" note.
    • Out-of-scope finding: SqlDriver.create on MySQL returns knex's insert id rather than the inserted record (.returning('*') is ignored there). That is class (b) against the declared IDataDriver.create contract. reach: is not yet measured at a public door, so it is not filed. The seat is running a read-only measurement and files a card if the reach is measured. It does not bear on this PR, which never reads create's return.

    Next: pr_ready, then automerge_enable, as two relay acts. Fixes closes this card at merge.


    Generated by Claude Code

  7. objectstack-fleet commented on Oct 1, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed: PR #21206 → c6b68891 on main, verified at 2026-10-01T18:41Z. domain:engine#1 · session_017xfMoEjKUuSh2xYB8sCozp.


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:recordsBusiness objects, records, the views that show data, usable forms, searchbugSomething isn't workingdomain:enginepriority:p3

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions