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
migrate: adding a homeAmount field to an existing object is the normal add-column path; backfill = recompute — one proving test (multi-currency M2-4, epic #8345) #27194
Filing gate ③ (maintainer-directed). Ruling 6465431966 on #27119 (batch #421 item 2, Q1 = 乙-现在, maintainer 「同意立专题卡」 2026-10-28): the multi-currency epic resumes on #8345 in shape C′. Part of #8345. Filed by the director seat (session_01QSeKYo7qYsX6HsAneHBMP2, ledger objectstack#12708). ⛔ Not a claim. Workload row and precedents: 6464936321; design: 6464438764.
Ruling-ref: 6465431966
维护者速读
改了什么: 给存量对象加影子列走既有 add-column;回填用 M2-3;本卡只证明这条路通。
为什么改: 客户在 R1 期间用老办法的对象升级到 R2 只需加一行指针。
风险与回滚: 测试卡。
先看:os migrate 加列路径。
两分钟验证: 一个有存量行的对象加影子列后 recompute 填满。
需要您做的: 无。
Task
Integration test: existing rows + new home field + recompute.
Lane: server · Size: S · Review: default. Clause-②: no · Metadata-protocol: none.
Epic: #8345 (parent; the epic PM dispatches pm:epic children; domain:spec children go to the spec seat's queue). Dedupe: #8345 thread, #27119 (ruled), the workload list 6464936321; no open card carries this slice.
{
"issue": 27194,
"status": "done",
"branch": "claude/project-thread-ublbgc",
"pr": "https://github.com/objectstack-ai/objectstack/pull/30186",
"head": "cf2a4d5f3f79ae97fedc4d519eab4e6ade2c00c4",
"session": "session_01Utp6CaGBD59SYKhNDMRa8h (card thread; seat session_01Utp6CZWjnSeed8H4dMjt9d)",
"premise_still_valid": true,
"summary": "One new test file, packages/qa/dogfood/test/home-amount-added-to-existing-object.test.ts; no product code, no fixture outside it. Cells: better-sqlite3 (file), sqlite-wasm (file), PostgreSQL (schema). Two boots = two engines and two drivers over one database. Boot 1: a record-mode amount with no homeAmount, four rows written through the engine (USD 2026-03-15, USD 2026-04-15, CNY, SEK with no rate row). Boot 2, as os migrate apply runs it: the amount gains currencyConfig.homeAmount and its two declared readonly fields; driver.setDeferredDdl(true); previewDeferredSchemaWork for the object is exactly one add_columns [amount_home, amount_rate] and nothing for any other table; detectManagedDrift has no entry for it; flushDeferredSchemaDdl performs it; every row is unchanged with a blank home field and rate. recomputeHomeAmounts: dry run 4 amounts / 3 changed / 1 skipped / 0 written; apply fills 71994.24 @0.1389, 10000 @0.15, 12.35 @1, each equal to a fresh write of the same row; SEK listed rate_missing (SEK, 2026-03-15) and skipped, blank kept, homeAmountRecomputeComplete false, fresh SEK write refused ERR_EXCHANGE_RATE_MISSING; re-run changes nothing. Finding: the add-column path is ordinary (no refusal, no flag, no data loss). The in-memory driver is schemaless, so it has no add-column path: no cell. Declarations confirmed against the tree: Clause-②: no, Metadata-protocol: none.",
"tests": "The file 6/6 on all three cells (PostgreSQL 16 local). Ablations via scripts/ablation-replace.mjs, each landed (anchor 1 -> 0) and restored: (1) recompute skipped (apply forced false): 3/6 red, one per cell, on the column read back (expected home 71994.24 rate 0.1389, received null/null); (2) home field declared without the column migration (flush replaced by a preview, deferral disarmed): 6/6 red; the recompute's apply then reports one failures entry per row, 'no such column: amount_home', written 0. tsc --noEmit -p packages/qa/dogfood: 0 errors. eslint on the file: exit 0.",
"gates": "dispatch-gates --commands on cf2a4d5f: 51 families, exits captured before any pipe: 50 exit 0 (check-plugin-teardown-shape --self-test exited 3 on the shallow clone, 0 after fetching its pinned fixture commit 621a4876); pnpm check:dual-build-cjs-loads exit 3 NOT MEASURED (reads every package's dist/; only the test closure was built), left to CI. dispatch-gates --ran: 51 accounted, 50 run, 1 NOT-MEASURED. Records: /mnt/project-files/epic-8345/gates-27194-ran.txt and gates-27194-ran-verdict.txt. No changeset: a test in a private package; skip-changeset rides the create. CI on the PR: not yet read at report time.",
"dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
"mcp_calls": "3 — GitHub MCP reads only: issue_read x2 (#27194 get, get_comments); subscribe_pr_activity on #30186 (session subscription, not a GitHub write). No write tool.",
"api_writes": "2 — fleet-write relay pr_create (objectstack#30186 draft, label skip-changeset, no assignee, no review request; run 41942945374; body read back byte-identical 6254/6254); post-stamped os-dev-report comment on #27194 (this report). Plus git pushes to claude/project-thread-ublbgc.",
"open_questions": [],
"out_of_scope_findings": [
"carrier: none · noted, not filed — without the column the recompute's apply ends with the run's failures list ('no such column') rather than a refusal before any write; the dry run reads the absent column as blank and reports 3 changed. Behaviour as designed for a per-row failure, recorded so the seat can judge whether a pre-check belongs in a later card (not this test card)."
]
}
State change: pm:dispatched removed; pm:epic stays (subtree record). Test-only (@objectstack/dogfood, private), nothing to release. Finding recorded: the add-column path is ordinary for a newly declared home field.
Activity
objectstack-fleet commentedon Nov 5, 2026
epic:#8345#1 · os-bill · session_01Utp6CZWjnSeed8H4dMjt9d
Claim: PM loop round 1 · 2026-11-05T00:16Z
Session:
session_01Utp6CZWjnSeed8H4dMjt9d(epic PM,epic:#8345)Account:
os-billBranch:
claude/project-thread-ublbgc(card threadsession_01Utp6CaGBD59SYKhNDMRa8h; the platform assigns the thread's one push branch — the recorded platform exception)Worktree:
objectstack-issue-27194Domain:
domain:serverSeat:
epic:#8345File surface: tests only —
packages/objectql/src/**/*.test.ts,packages/cli/src/**/*.test.ts,packages/qa/dogfood/testand their fixtures (product code change = stop and report)Container & model:
S,mode:thread,model: opus (TIER_DEFAULT; dispatch-gates --tier: no path-derived mandate),effort: mediumClause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card
Thread-read: none
Premise: holds — Blocked-by #27193 cleared (PR #30183 merged,
31fe289f).Serial constraints cleared: yes — no in-flight claim in the epic territory touches this surface.
Release pairing: R3 — ships alone.
Maintainer authority: Bill, project thread, 「重开史诗 PM 席位」 (2026-11-04T13:36Z); dispatch order
/mnt/project-files/epic-8345/dispatch-27194.md.objectstack-fleet commentedon Nov 5, 2026
epic:#8345#1 · os-bill · session_01Utp6CZWjnSeed8H4dMjt9d
os-dev-report
{ "issue": 27194, "status": "done", "branch": "claude/project-thread-ublbgc", "pr": "https://github.com/objectstack-ai/objectstack/pull/30186", "head": "cf2a4d5f3f79ae97fedc4d519eab4e6ade2c00c4", "session": "session_01Utp6CaGBD59SYKhNDMRa8h (card thread; seat session_01Utp6CZWjnSeed8H4dMjt9d)", "premise_still_valid": true, "summary": "One new test file, packages/qa/dogfood/test/home-amount-added-to-existing-object.test.ts; no product code, no fixture outside it. Cells: better-sqlite3 (file), sqlite-wasm (file), PostgreSQL (schema). Two boots = two engines and two drivers over one database. Boot 1: a record-mode amount with no homeAmount, four rows written through the engine (USD 2026-03-15, USD 2026-04-15, CNY, SEK with no rate row). Boot 2, as os migrate apply runs it: the amount gains currencyConfig.homeAmount and its two declared readonly fields; driver.setDeferredDdl(true); previewDeferredSchemaWork for the object is exactly one add_columns [amount_home, amount_rate] and nothing for any other table; detectManagedDrift has no entry for it; flushDeferredSchemaDdl performs it; every row is unchanged with a blank home field and rate. recomputeHomeAmounts: dry run 4 amounts / 3 changed / 1 skipped / 0 written; apply fills 71994.24 @0.1389, 10000 @0.15, 12.35 @1, each equal to a fresh write of the same row; SEK listed rate_missing (SEK, 2026-03-15) and skipped, blank kept, homeAmountRecomputeComplete false, fresh SEK write refused ERR_EXCHANGE_RATE_MISSING; re-run changes nothing. Finding: the add-column path is ordinary (no refusal, no flag, no data loss). The in-memory driver is schemaless, so it has no add-column path: no cell. Declarations confirmed against the tree: Clause-②: no, Metadata-protocol: none.", "tests": "The file 6/6 on all three cells (PostgreSQL 16 local). Ablations via scripts/ablation-replace.mjs, each landed (anchor 1 -> 0) and restored: (1) recompute skipped (apply forced false): 3/6 red, one per cell, on the column read back (expected home 71994.24 rate 0.1389, received null/null); (2) home field declared without the column migration (flush replaced by a preview, deferral disarmed): 6/6 red; the recompute's apply then reports one failures entry per row, 'no such column: amount_home', written 0. tsc --noEmit -p packages/qa/dogfood: 0 errors. eslint on the file: exit 0.", "gates": "dispatch-gates --commands on cf2a4d5f: 51 families, exits captured before any pipe: 50 exit 0 (check-plugin-teardown-shape --self-test exited 3 on the shallow clone, 0 after fetching its pinned fixture commit 621a4876); pnpm check:dual-build-cjs-loads exit 3 NOT MEASURED (reads every package's dist/; only the test closure was built), left to CI. dispatch-gates --ran: 51 accounted, 50 run, 1 NOT-MEASURED. Records: /mnt/project-files/epic-8345/gates-27194-ran.txt and gates-27194-ran-verdict.txt. No changeset: a test in a private package; skip-changeset rides the create. CI on the PR: not yet read at report time.", "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm", "mcp_calls": "3 — GitHub MCP reads only: issue_read x2 (#27194 get, get_comments); subscribe_pr_activity on #30186 (session subscription, not a GitHub write). No write tool.", "api_writes": "2 — fleet-write relay pr_create (objectstack#30186 draft, label skip-changeset, no assignee, no review request; run 41942945374; body read back byte-identical 6254/6254); post-stamped os-dev-report comment on #27194 (this report). Plus git pushes to claude/project-thread-ublbgc.", "open_questions": [], "out_of_scope_findings": [ "carrier: none · noted, not filed — without the column the recompute's apply ends with the run's failures list ('no such column') rather than a refusal before any write; the dry run reads the absent column as blank and reports 3 changed. Behaviour as designed for a per-row failure, recorded so the seat can judge whether a pre-check belongs in a later card (not this test card)." ] }Report taken 2026-11-05T00:42Z.
objectstack-fleet commentedon Nov 5, 2026
epic:#8345#1 · os-bill · session_01Utp6CZWjnSeed8H4dMjt9d
Landed · 2026-11-05T01:36Z
bedb96e0, reviewed heada098315d(seat ACCEPT 6646903271)Fixes #27194State change:
pm:dispatchedremoved;pm:epicstays (subtree record). Test-only (@objectstack/dogfood, private), nothing to release. Finding recorded: the add-column path is ordinary for a newly declared home field.