Repository navigation
docs(qa): seed-mode-matrix scores replace as declared = implemented bare insert - #31203
Merged
Merged
Conversation
…are insert The spec now declares replace as insert-only, deleting nothing, so the platform-core.seed-mode-matrix item no longer states a declared-vs-implemented gap, and its SeedMode citation quotes the current text instead of the removed delete-all wording. The probe and its verdicts are unchanged. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FEkQ5mfyhgv2EebbRFAVKL
Contributor
Author
|
domain:devx#3 · os-project-manager · session_01FEkQ5njkh3xbcDN6EtSfw7 席位核对Verdict: ACCEPT · head
Generated by Claude Code |
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.
Requested by Leehom · project thread
Fixes #31140
Clause-②: no
Metadata-protocol: none
维护者速读
platform-core.seed-mode-matrix一项(仅docs/qa/platform-checklist/areas/platform-core.json),把replace的预期姿态从「声明≠实现(声明删全表再插入,实际裸插入)」改成「声明=实现:只插入、不删任何行」,来源引文改引seed.zod.ts现有原文;revision 6→7,补一条 history。SeedMode的replace注释改成加载器的真实行为,清单这一项的姿态和引文因此变假,测试员会按一个已不存在的缺口打分。docs/qa/platform-checklist/areas/platform-core.json中acceptance[4].clause与source[0]两处。pnpm check:platform-checklist,预期OK — 16 areas, 360 items;再grep -c "Delete ALL" docs/qa/platform-checklist/areas/platform-core.json,预期 0。What changes
One checklist item,
platform-core.seed-mode-matrix, indocs/qa/platform-checklist/areas/platform-core.json(+12 / -6):acceptance[4].clause: the expected posture is now declared = implemented:replaceinserts every record with no match and deletes nothing. It quotes both declarations on main (SeedMode's replace member and SeedSchema'smodedescription) and the loader arm that does it. F's survival is the declared behaviour, not a gap to record. The guard stays: no "replace deletes only its own object's rows" tick, and a future clear makes the clause stale and owes a scoping proof.source[0]: the SeedMode citation now quotes text that exists on main ("Insert every record, no match, deleting nothing: for a cache table the caller cleared") and adds SeedSchema'smodedescription, instead of the removed delete-all wording.title,steps[5](records F's survival as the declared posture instead of "the declared-vs-implemented gap") andvariants[3].revision6 → 7 plus ahistoryrow, as the checklist README's Change rule requires for a semantic edit (run records pin the revision they ran against).Unchanged: the probe itself (add F by hand, publish a replace seed declaring only G, F survives, G inserted),
acceptance[4].verify/evidence, and every other clause.Why — the ruling's branch, measured
The order rules: if the spec now describes bare insert, the row states it as the implemented and declared posture. Read on
origin/main658d84f:packages/spec/src/data/seed.zod.tsL27,'replace', // Insert every record, no match, deleting nothing: for a cache table the caller cleared; L214-215 in SeedSchema'smodedescribe: "replacedoes the same and deletes nothing: it is for a table the caller cleared".git grep "Delete ALL"overpackages/: 0 hits.packages/metadata-protocol/src/seed-loader.tswriteRecord,case 'replace': a bareengine.insertwith the comment "caller should have cleared the table";decideWriteActionroutesinsert/replace/ default to{ action: 'insert' }.git grepfor areplacemode test or arm overpackages/**/*.ts(tests excluded) finds only those two arms andpackages/cli/src/commands/diff.tsL81, which words a plan line ("a replay deletes nothing and inserts these again, so rows already in the table stay").So the branch taken is declared = implemented: the spec no longer declares a clear.
Tests
None owed: a QA ledger JSON, no code or tested behaviour changed, so no unit test and no ablation (os-dev: docs are not ablated). JSON parses (
python3 -c "import json; json.load(...)"); edits were exact-string replacements asserted to match once each, so the hand formatting is kept.Acceptance notes
acceptance[4]andsource[0];title,steps[5]andvariants[3]of the same item stated the same "declared delete-all, implemented insert" posture, and the checklist README requires the revision bump and history row. All in the one file the order names; nothing else touched.docs/qa/platform-checklist/FOLLOW-UPS.mdrow K6 still describes replace as declared ≠ implemented ("Delete ALL records, then insert"). The checker counts FOLLOW-UPS.md as append-only text (its line-citation limb: "history rows and FOLLOW-UPS.md — counted, not judged"), so it is history, not a live row. Noted, not filed.packages/spec/**or the loader.Verification
Gate union derived by
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack(16 families for this diff), run on head6c5fe906, reconciled with--ran: "16 derived famil(ies) accounted for — 16 run, 0 NOT-MEASURED".16 gates, exit codes captured before any pipe
node scripts/check-adr-links.mjs(and--self-test): exit 0 / 0node scripts/check-closing-keyword-parity.mjs(and--self-test): exit 0 / 0node scripts/check-comment-mask-corpus.mjs: exit 0node scripts/ci/plan-test-core-shards.mjs --self-test: exit 0pnpm --filter @objectstack/lint run check:doc-formula-expressions: first run exit 3 (PREREQUISITE NOT MET: formula and lint not built; nothing measured), then afterpnpm exec turbo run build --filter=@objectstack/formula --filter=@objectstack/lintunder the verify lock (VERDICT command-exit 0), exit 0pnpm check:ci-filter-parity,check:cross-package-test-inputs,check:doc-authoring,check:driver-memory-census,check:gitlink-declared,check:nul-bytes,check:refd-timer-probe,check:watch-hint-literal: exit 0 eachpnpm check:platform-checklist: exit 0, "check-platform-checklist: OK — 16 areas, 360 items (354 active, 1 planned) … symbol anchors: 1145/1155 resolved … 10 on the named [finding] the platform-checklist corpus resolves symbol anchors with its OWN rule, not the shared resolver — a permissive token match where the ruling says there is to be exactly one implementation #16898 residual"node scripts/check-platform-checklist.mjs --changed-from origin/main: exit 0 (no symbol anchor targets the changed file).pnpm lintscoped: no package touched; the root eslint config does not lint the checklist JSON, so there is nothing to scope it to.skip-changeset:docs/qa/**ships in no package'sfiles[].Generated by Claude Code