Repository navigation
docs(spec,cli): seed replace deletes nothing, and the AppPlugin loads skip a landed row a person deleted - #31135
Conversation
… skip a landed row a person deleted Claude-Session: https://claude.ai/code/session_017ihL2dzed5sJnRTmwXHWV7 Co-Authored-By: Claude <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017ihL2dzed5sJnRTmwXHWV7 Co-Authored-By: Claude <noreply@anthropic.com>
…ondition and keyed rows Claude-Session: https://claude.ai/code/session_017ihL2dzed5sJnRTmwXHWV7 Co-Authored-By: Claude <noreply@anthropic.com>
|
domain:spec#4 · marchtian · session_017ihL2dzed5sJnRTmwXHWV7 Fable review — full diff, then deltaAn isolated reviewer subagent (model Round 1 (diff
Checked true: Round 2 (delta Head after the merge of |
📓 Docs Drift CheckThis PR changes 2 package(s): 4 hand-written doc(s) NAME something this change touched and may need an implementation-accuracy re-verification:
What this run could not see
Coarse fallback — 180 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): Which tree this was computed onThis run read A worktree cut from an older # while this PR is open — GitHub drops the merge commit once it closes
git fetch origin a295035a7cc5972c3ef13ccfb7f1ddfb61914496 && git checkout a295035a7cc5972c3ef13ccfb7f1ddfb61914496
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin 98583cd692c6a67891617529d2f7aec4963859b8 68060aa22bf15b378c1b8adb2fca27cb844054ef && git checkout -B drift-repro 98583cd692c6a67891617529d2f7aec4963859b8 && git merge --no-ff 68060aa22bf15b378c1b8adb2fca27cb844054ef
node scripts/docs-audit/affected-docs.mjs --json 98583cd692c6a67891617529d2f7aec4963859b8
|
|
domain:spec#4 · marchtian · session_017ihL2eHDXrsKgGAUHq956U Contract reviewServed-tier: ① Derived judgmentsAccept set and public surface: unchanged. Every changed sentence checked against
No finding in ①. ② Semver levelConsistent: ③ Boundary flagsAuthor
④ Design judgment
Implemented-by: VERDICT: PASS |
|
domain:spec#4 · marchtian · session_017ihL2eHDXrsKgGAUHq956U 维护者速读
席位意见:ACCEPT。逐句对照了加载器与 AppPlugin 代码,接受集与公开面不变;两条范围外问题已另立卡(#31139 席位核对
|
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 42382448163 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集), 分类: 失败的 job(日志抽取,best effort):
跨 PR 相同签名(24h,按失败测试文件聚合):
历史信号:
分诊清单:
Generated by Claude Code · merge-queue-triage workflow (#4859) |
Requested by 田騏 · project thread
Fixes #31099
Clause-②: no
Metadata-protocol: none
维护者速读
seed.zod.ts里replace不再写成"先删整表再插入",改为"不删任何东西,只插入,给调用方已清空的缓存表用";insert不再写"重复时失败",改为"每次重放都再插一遍";mode的说明补上已落地行的记录规则和{ reseed: true }这扇门。os diff对replace数据集的提示同步改正。.describe()和 CLI 提示还停在旧说法。.describe()、一条 CLI 提示字符串和它的测试,以及自动生成的 4 个参考页。回滚即 revert。packages/spec/src/data/seed.zod.ts(SeedMode注释、mode的 JSDoc 新段落和.describe());packages/cli/src/commands/diff.ts第 81 行。pnpm --filter @objectstack/cli exec vitest run --project unit test/diff-upgrade-plan.test.ts,预期 7 个测试全过,replace的提示为 "a replay deletes nothing and inserts these again"。What changes
Text only; no behaviour change. Every sentence was worded from the loader and AppPlugin code on
main(5f00374), not from the old text.packages/spec/src/data/seed.zod.tsSeedModecomments:insertno longer says "fail on duplicate" — it inserts every record with no match, so each replay inserts them again, and a row the database refuses is that row's error (SeedLoaderService.writeRecord/decideWriteActioninsert unconditionally; a refused row is pushed to the load's errors while the rest land).replaceno longer says "Delete ALL records in object then insert": it inserts every record, no match, and deletes nothing (itswriteRecordarm is a bare insert; nothing in the loader deletes).modedocstring: a new paragraph on the landed-keys rule. The loads AppPlugin runs for an organization (single-tenant boot seed, per-organization replay throughseed-replayer, dev hot reload), where the composition registerssys_seed_landed_key, record the key of every keyed row anignoreorupsertdataset landed and do not insert again a recorded row that is now gone; a never-recorded key still lands; a seed publish and a package install or upgrade keep no record;seed-replayer(organizationId, { reseed: true })inserts every missing row.mode.describe(): the same facts, compressed; no tracker number. Theignore-is-default text (ruling 6631016988 on [Decision] A restart puts seeded records back: a customer's edit to a seeded row is overwritten by the next boot #30081) is unchanged.historystring at L116–117 is left as is (historical, card: optional).packages/cli/src/commands/diff.tsseedModeNote:replacenow reads "a replay deletes nothing and inserts these again, so rows already in the table stay".packages/cli/test/diff-upgrade-plan.test.tspins the new string (it pinned the old one).content/docs/references/**: 4 pages regenerated bygen:schema && gen:docsfrom the.describe().@objectstack/specpatch +@objectstack/clipatch.Wording is in step with the already-reviewed
content/docs/data-modeling/seed-data.mdx("A Deleted Seed Row Stays Deleted") andskills/objectstack-data/references/seeds.md.Tests
pnpm --filter @objectstack/cli exec vitest run --project uniton 89162ff: Test Files 396 passed, Tests 5576 passed. The integration layer is declared to CI (the diff touches no integration file or spawn entry).origin/main(head 68060aa, closure rebuilt):diff-upgrade-planand the incomingconnect-agent-both-halves-wire.pin(unit layer): 2 files, 9 tests passed. The incomingauthoring-rule-command-parityis an integration-layer file, declared to CI.Acceptance notes
sys_seed_landed_keycondition and "keyed row" in the docstring; sharpen theinsertcomment). Both applied in 89162ff; delta review PASS. Verdict comment to follow on this PR.seedModeNotesays nothing forinsert, which also inserts every record again on each replay. Outside this card's item 2 (thereplaceline only).docs/qa/platform-checklist/areas/platform-core.jsonquotes the oldreplacetext inside a historical "declared ≠ implemented" clause; out of the card's file surface, left as is.Verification
Derived gates (dispatch-gates --commands) — 108 run on 89162ff, all exit 0
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --ran ran.txt:: exit 0 — "108 derived famil(ies) accounted for — 108 run, 0 NOT-MEASURED".packages/spec/diststale after the docstring commit, a shallow clone forcheck-plugin-teardown-shape --self-test, and unbuilt workspace dists). Afterpnpm --filter @objectstack/spec buildandgit fetch --unshallow origin main, all 12 reran with exit 0.pnpm --filter @objectstack/spec run check:generated:: exit 0 (also post-merge: "All 14 generated artifacts are up to date").pnpm check:doc-authoring:: exit 0 (no tracker number in.describe()).Merge of origin/main
Merged once before opening (68060aa). The incoming commits touch no seed, spec or
diff.tsfile. Re-checked: the CLI closure rebuilt,check:generatedexit 0, the CLI test files above, anddispatch-gates --ranstill 108/108.Human Minimum
packages/specholds no runtime logic.pnpm lintrepo-wide is CI's).main, one pull request.packages/spectouched: its generated artifacts are regenerated and committed.content/docs/references/,packages/*/CHANGELOG.mdorcontent/docs/releases/.🤖 Generated with Claude Code
https://claude.ai/code/session_017ihL2dzed5sJnRTmwXHWV7