Skip to content

test(temporal): D-A3 storage-form 轴补齐 SQL 系——Field.time 遗留扫描 + wasm 驱动两条遗留扫描 (#4191) - #4205

Merged
os-zhuang merged 2 commits into
mainfrom
claude/storage-form-time-locking-xkcdgc
Jul 30, 2026
Merged

test(temporal): D-A3 storage-form 轴补齐 SQL 系——Field.time 遗留扫描 + wasm 驱动两条遗留扫描 (#4191)#4205
os-zhuang merged 2 commits into
mainfrom
claude/storage-form-time-locking-xkcdgc

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

#4191 的建议形状落地 storage-form 轴的 SQL 系格子(sibling PR:cloud 侧 turso 消费者,见下)。

改动

1. spec —— 把轴正式化,但不加新导出temporal-conformance.ts

  • 模块文档新增「The storage-form axis」一节:遗留扫描 = 同一批行绕过写入路径、按 pre-convention 写者留下的原始形态注入、读修复路径必须回答同一张表;writerForm 标签兼作逐行的遗留播种判定依据(native → 平台原生 instant 的裸形态,wire → 未被改写的文本拼写),并钉死 Field.time 两处歧义(native = epoch 日的 INTEGER epoch ms,a_midnightField.time repeats the #3912 pattern: writes unnormalised, repaired only on read — window filters and ORDER BY are silently wrong on SQLite #3994 实测的 INTEGER 0;wire = 携带 fixture 边界日 2026-07-28 的全量时间戳文本),让每个消费者播出同样的字节
  • 刻意不加新导出/新字段legacyFormwriterForm 1:1 可推导,加字段是冗余;且 cloud 仓按 .objectstack-sha pin 消费 spec,新导出会让 sibling PR 依赖本 PR 先合并。物理拼写留在各驱动自己的套件里(issue 的「不下沉方言拼写」)。check:docs(250 files in sync)与 check:api-surface(unchanged)均绿。

2. driver-sql —— Field.time 遗留格(issue 表格里 :150 缺失的那格)

seedLegacyTimeRows / forgetCanonicalTime#3994 起就躺在 testkit 里无人消费;现在 TEMPORAL_TIME_CASES 全量跑在未回填的遗留存储上(INTEGER epoch ms + 全量时间戳 TEXT,marker 已清),修复 #3994 的那条读取路径(sqliteCanonicalTimeSql)从此有了自己的回归锁。

3. driver-sqlite-wasm —— datetime + time 两条遗留格

本地 LegacyStorageWasmDriver 子类(driver-sql 的 testkit 刻意不出包,跨包复用要么发布测试工具、要么违反 import 规范,故各消费者自带 ~20 行播种子类,与 issue「各驱动注入手法不同」的形状一致)。继承使人默认修复路径「白拿」——这两条 describe 钉的正是「wasm 侧覆盖 knex seam 丢掉修复表达式」只会在这里红的那种回归。

验收即轴规则:遗留形态与 canonical 形态的行 id 集合逐格相同

测试

  • sql-driver-temporal-conformance.test.ts:61 passed(新增 9 个 time 遗留格)
  • sqlite-wasm-temporal-conformance.test.ts:61 passed(新增 15 datetime + 9 time 遗留格)
  • driver-sql 全量 583 passed / 38 skipped;driver-sqlite-wasm 全量 191 passed

修改清单综合评估(#4191 全表,本 PR 之后的余量)

格子 状态 注入手法 / 备注
driver-sql datetime ✅ 已有(:107
driver-sql Field.time 本 PR seedLegacyTimeRows
driver-sqlite-wasm ×2 本 PR 本地遗留子类
cloud turso ×4 sibling PR canonical + 遗留各两条,另实测出 remote 模式三类缺陷 → cloud#937
driver-mongodb ❌ 最尖的一格(唯一永久持有遗留形态、失败最安静的后端) collection.insertMany 直塞 string/Date 混合,绕过 syncSchema 收敛;建议下一个 PR 单独做
driver-memory 在 schema 声明initialData / 持久化恢复形态,测的是 D-E3 的 schema-到达收敛本身
formula (matchesFilterCondition) ❌ 需先做设计裁决 类型盲评估器没有「存储」;「遗留」= post-image 携带 Date/epoch 值。哪些格子应当共享、哪些像 $gt-on-datetime 一样是不可共享格,得先按 D-A3.1 的 scope rule 议定,不宜闷头写断言
service-analytics (native-sql / preview) native-sql 可复用 driver-sql 的遗留播种(它经 StrategyContext 借道 driver 的 coercion);preview 与 formula 同属类型盲,同样先裁决
server-timezone 三方错开轴 不在本 issue 范围 issue 已建议单开立项

顺带

Closes 无(#4191 分步落地,本 PR 只封 SQL 系格子)。

🤖 Generated with Claude Code

https://claude.ai/code/session_01SWHvwFgUU2U8M9nbV1g1iQ


Generated by Claude Code

…he wasm driver (#4191)

The legacy-storage sweep — the same rows injected below the write path in
the raw pre-convention forms, answered through the read-repair — existed
only for driver-sql's datetime cell. Formalize the axis in the spec module
doc (the writerForm tag doubles as the per-row legacy seeding basis:
native → raw platform-native instant, wire → raw text spelling; no new
exports, so consumers pinned to older spec SHAs stay buildable) and add
the missing SQL-family cells:

- driver-sql: Field.time on un-backfilled legacy storage — INTEGER epoch
  ms of the epoch-day wall clock (a_midnight = the measured #3994 hazard,
  INTEGER 0) and full-timestamp TEXT pinned to the boundary day. The
  seedLegacyTimeRows testkit half existed since #3994 with no consumer;
  the repair path that closed #3994 now has its own regression lock.
- driver-sqlite-wasm: datetime + time legacy sweeps via a local
  LegacyStorage subclass — the inherited repair seam gets pinned where an
  inheritance-breaking override would actually surface.

Same acceptance rule as the canonical sweeps, cell for cell: identical
expected row-id sets. Any cell that differs is a repair-path drift — the
signal #3773 / #3994 / #4047 all lacked.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SWHvwFgUU2U8M9nbV1g1iQ
@vercel

vercel Bot commented Jul 30, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
objectstack Ignored Ignored Jul 30, 2026 3:20pm

Request Review

@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 1 package(s): @objectstack/spec.

106 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:

  • content/docs/ai/agents.mdx (via @objectstack/spec)
  • content/docs/ai/skills-reference.mdx (via @objectstack/spec)
  • content/docs/ai/skills.mdx (via @objectstack/spec)
  • content/docs/api/client-sdk.mdx (via @objectstack/spec)
  • content/docs/api/environment-routing.mdx (via @objectstack/spec)
  • content/docs/api/error-catalog.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-client.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-server.mdx (via @objectstack/spec)
  • content/docs/api/index.mdx (via @objectstack/spec)
  • content/docs/automation/approvals.mdx (via packages/spec)
  • content/docs/automation/flows.mdx (via @objectstack/spec)
  • content/docs/automation/hook-bodies.mdx (via packages/spec)
  • content/docs/automation/hooks.mdx (via @objectstack/spec)
  • content/docs/automation/index.mdx (via @objectstack/spec)
  • content/docs/automation/webhooks.mdx (via @objectstack/spec)
  • content/docs/automation/workflows.mdx (via @objectstack/spec)
  • content/docs/concepts/architecture.mdx (via @objectstack/spec)
  • content/docs/concepts/design-principles.mdx (via packages/spec)
  • content/docs/concepts/index.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-driven.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-lifecycle.mdx (via packages/spec)
  • content/docs/concepts/north-star.mdx (via packages/spec)
  • content/docs/data-modeling/analytics.mdx (via @objectstack/spec)
  • content/docs/data-modeling/drivers.mdx (via @objectstack/spec)
  • content/docs/data-modeling/external-datasources.mdx (via @objectstack/spec)
  • content/docs/data-modeling/field-types.mdx (via @objectstack/spec)
  • content/docs/data-modeling/fields.mdx (via @objectstack/spec)
  • content/docs/data-modeling/formulas.mdx (via @objectstack/spec)
  • content/docs/data-modeling/index.mdx (via @objectstack/spec)
  • content/docs/data-modeling/objects.mdx (via @objectstack/spec)
  • content/docs/data-modeling/queries.mdx (via @objectstack/spec)
  • content/docs/data-modeling/schema-design.mdx (via @objectstack/spec)
  • content/docs/data-modeling/seed-data.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation-rules.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation.mdx (via @objectstack/spec)
  • content/docs/deployment/cli.mdx (via @objectstack/spec)
  • content/docs/deployment/troubleshooting.mdx (via @objectstack/spec)
  • content/docs/deployment/validating-metadata.mdx (via @objectstack/spec)
  • content/docs/getting-started/build-with-claude-code.mdx (via @objectstack/spec)
  • content/docs/getting-started/common-patterns.mdx (via @objectstack/spec)
  • content/docs/getting-started/examples.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-reference.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-start.mdx (via @objectstack/spec)
  • content/docs/getting-started/your-first-project.mdx (via @objectstack/spec)
  • content/docs/kernel/cluster.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/auth-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/cache-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/data-engine.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/index.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/metadata-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/storage-service.mdx (via packages/spec)
  • content/docs/kernel/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/email-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/queue-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/sharing-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/sms-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/storage-service.mdx (via packages/spec)
  • content/docs/kernel/services-checklist.mdx (via @objectstack/spec)
  • content/docs/kernel/services.mdx (via @objectstack/spec)
  • content/docs/permissions/authorization.mdx (via @objectstack/spec)
  • content/docs/permissions/permission-sets.mdx (via @objectstack/spec)
  • content/docs/permissions/permissions-matrix.mdx (via @objectstack/spec)
  • content/docs/permissions/positions.mdx (via @objectstack/spec)
  • content/docs/permissions/rls.mdx (via @objectstack/spec)
  • content/docs/permissions/sharing-rules.mdx (via @objectstack/spec)
  • content/docs/plugins/adding-a-metadata-type.mdx (via @objectstack/spec)
  • content/docs/plugins/development.mdx (via @objectstack/spec)
  • content/docs/plugins/index.mdx (via @objectstack/spec)
  • content/docs/plugins/packages.mdx (via @objectstack/spec)
  • content/docs/protocol/backward-compatibility.mdx (via @objectstack/spec)
  • content/docs/protocol/diagram.mdx (via packages/spec)
  • content/docs/protocol/kernel/config-resolution.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/i18n-standard.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/index.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/lifecycle.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/plugin-spec.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/runtime-capabilities.mdx (via @objectstack/spec)
  • content/docs/protocol/knowledge.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/query-syntax.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/schema.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/security.mdx (via packages/spec)
  • content/docs/protocol/objectql/state-machine.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/actions.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/concept.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/layout-dsl.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/record-alert.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/widget-contract.mdx (via @objectstack/spec)
  • content/docs/releases/implementation-status.mdx (via @objectstack/spec)
  • content/docs/releases/index.mdx (via @objectstack/spec)
  • content/docs/releases/v12.mdx (via @objectstack/spec)
  • content/docs/releases/v13.mdx (via @objectstack/spec)
  • content/docs/releases/v16.mdx (via @objectstack/spec)
  • content/docs/releases/v17.mdx (via @objectstack/spec)
  • content/docs/releases/v9.mdx (via @objectstack/spec)
  • content/docs/ui/actions.mdx (via @objectstack/spec)
  • content/docs/ui/create-vs-edit-form.mdx (via @objectstack/spec)
  • content/docs/ui/dashboards.mdx (via @objectstack/spec)
  • content/docs/ui/forms.mdx (via @objectstack/spec)
  • content/docs/ui/index.mdx (via @objectstack/spec)
  • content/docs/ui/public-data-collection.mdx (via @objectstack/spec)
  • content/docs/ui/setup-app.mdx (via @objectstack/spec)
  • content/docs/ui/translations.mdx (via @objectstack/spec)
  • content/docs/ui/views.mdx (via @objectstack/spec)

Advisory only. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs origin/main → pass the list as args.docs.

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 protocol:data size/m tests tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants