test(service-analytics): the Turso remote-face echo exception asserts its equivalence (#21647) - #21684
Merged
objectstack-fleet[bot] merged 1 commit intoOct 4, 2026
Conversation
… its equivalence The enumeration pin's named exception (driver-turso's remote face, where the engine buckets in memory and the echo still prints the inherited SQLite expression) pinned only that a statement prints. Per #21647's triage, an exception must assert the equivalence: the printed statement, run with its params on the face's datasource, answers the face's keys and rows. A face that declares printsWhileEngineBucketsInMemory is now served over a seeded table with pass-through doors. Each of its printed cells (UTC and unset, every granularity) runs dryRun.sql with dryRun.params through the engine's raw-SQL bridge and asserts the closed_at / amount_sum pairs equal the face's rows, with a non-vacuity guard. The header names both exceptions and where each asserts its equivalence. No new analytics.query call site. Claude-Session: https://claude.ai/code/session_01DiCSbmJrkzNhuEAier4VoJ Co-authored-by: Claude <noreply@anthropic.com>
Contributor
📓 Docs Drift CheckNothing in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 0 changed package(s)), so this run has no opinion about the docs. What this run could not see
Coarse fallback — 0 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): |
This was referenced Oct 4, 2026
objectstack-fleet
Bot
deleted the
claude/issue-21647-turso-remote-echo-equivalence
branch
October 4, 2026 06:34
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #21647
Clause-②: no
This is the remainder of #21647, per triage's answer on the card. The enumeration pin's named exception is
driver-turso's remote face. It now asserts the equivalence, not merely that a statement prints: the printed statement, run with its params on that face's datasource, answers the face's keys and rows. The rule itself landed with PR #21664 (31e3e00939). This PR is test-only.What changes
One file changes:
packages/services/service-analytics/src/__tests__/objectql-echo-bucket-enumeration.test.ts(+104 / -20).printsWhileEngineBucketsInMemoryis served over a seeded table (EXCEPTION_DEALS, six rows). Its two data doors record the tier and pass through, so its rows are real.ask()now also returns the face's rows and the dry run's params.run()sends a printed statement, with its params, through the engine's raw-SQL bridge (engine.execute, withargsandobject). The measure-filter case inobjectql-echo-date-bucket.test.tsdoes the same.dryRun.sqlwithdryRun.params, and asserts the[closed_at, amount_sum]pairs equal the face's rows.order, so both sides are compared ordered by the bucket.2025-W52, and Monday 2025-12-29 is2026-W01. Both fall in calendar 2025.analytics.query(call site is added. The file still has 2, as the client envelope-caller census ledgers it.PM assumption 1, the measure-filter case: confirmed, not touched
Read on
main7d0781482d:objectql-echo-date-bucket.test.ts:258-:266) sits inside thefor (const cell of CELLS)loop.OS_TEST_POSTGRES_URLis set.Temporal Conformance (live PG + MySQL)job, in the step "Run the non-SQL temporal backends under the skewed process zone".That file is unchanged.
Evidence (all at
ce0acc38d2)weekboth sides answer2025-W52 3, 2026-W01 20, 2026-W05 7, 2026-W06 5, 2026-W14 5. The params are[].scripts/ablation-replace.mjs, in wrap mode, under the verify lock. The anchor went from 1 to 0, and the blob from9c7149174d19to391589af96fb.2025-W52where the face answered2025-12-28.9c7149174d19, equal toHEAD, andgit diff HEADis empty.distleg: the mutation is in the test file, which vitest reads fromsrc.@objectstack/service-analyticstestscript: 177 files passed; 4403 tests passed and 262 skipped (the live-server cells, with no server).pnpm --filter @objectstack/service-analytics typecheckexits 0, andtsc --listFilesincludes the edited test file.src/envelope-caller-census.test.ts, 20 of 20.dispatch-gates --repo objectstack-ai/objectstack --commandsderived 55 commands for the one path.turbo run build(73 of 73).--ran: 55 derived, 55 run, 0 NOT-MEASURED, 0 UNRUN.check:authz-resolver,check:error-code-casingandcheck:filter-alias-parity. They exited 0 too.--print-configanswers).--no-inline-config --format jsonreports 1 file, 0 errors, 0 warnings.eslint.config.mjsenables no type-aware linting, so this diff cannot move the verdict on an untouched file.Changeset
There is none. The diff is one test file, and
@objectstack/service-analyticsships onlydist,README.mdandCHANGELOG.md. The declaration is theskip-changesetlabel.Acceptance notes
driver-tursoitself, in thedateBucketSqlblock ofturso-remote-inherited-members.test.ts. This file does not importdriver-turso.objectql-echo-date-bucket.test.tsruns that echo on SQLite and PostgreSQL.ObjectQLStrategy.generateSqlrenders the table asFROM "TABLE", with ANSI double quotes, on every dialect (objectql-strategy.ts:820).driver-sqldoes not enableANSI_QUOTESon a MySQL session.FROM.Generated by Claude Code