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
metadata-protocol: a seed load that throws mid-batch drops the landed row ids of the datasets that landed before the throw, so the publish receipt carries no seedApplied.landed #30429
Filing gate: ③ carried from the contract review of PR #30427 (#30348), so that PR stays at the shape the card named. ⛔ Not a claim. Suggested-grade: p2, because cloud's "clear sample data" reads seedApplied.landed to know which rows a seed created, and after a partial publish it has no ids for the datasets that did land. Route: domain:spec (packages/metadata-protocol).
What happens. PR #30427 adds seedApplied.landed = [{ object, inserted, matched }] to the publish receipt. applySeedBodies (packages/metadata-protocol/src/protocol-publish-batch.ts) fills it only on the returned-load path. When the loader throws partway through a batch, the catch returns counts from seedLoadPartialWrites, and SeedLoadPartialWrites carries counts only, so the receipt has success: false and no landed at all, although earlier datasets in the batch did insert rows. PR #30427's body says the receipt reports this as "not reported", and cloud must read an absent landed next to success: false as unknown.
Why. The partial-writes record was shaped before the receipt carried ids. The loader already knows each landed dataset's insertedIds and landedIds when it throws on a later one.
Carry the landed datasets' ids through the partial-writes path so the receipt's landed lists them (the same projection and the same 200 cap), and say in the schema description that a thrown load's landed covers only datasets that finished.
Pins at a real door: a good seed lands and a later seed throws; the receipt lists the good seed's inserted ids and omits the failing one.
Not in scope: whether the ownership claim (claim-seed-ownership.ts, seed-settlement.ts) should narrow from landedIds to insertedIds; that is a separate ruling.
Claim: PM loop round 22 (p2)
Session: session_01WGufzfgvGexKn9vLHsy89K
Account: os-support-ai
Branch: the card thread's own claude/project-thread-* branch, named in the dev's hand-back and restated in a later claim (a measured platform exception to claude/issue-30429-…)
Worktree: objectstack-issue-30429
Domain: domain:spec
Seat: domain:spec#3
File surface: packages/metadata-protocol/src/seed-loader.ts (SeedLoadPartialWrites, seedLoadPartialWrites), protocol-publish-batch.ts (applySeedBodies' catch), seed-applied-landed.ts if the projection needs a partial entry point, the seedApplied.landed describe in packages/spec/src/api/protocol.zod.ts, and their tests. ⛔ Not cloud, not the seed-ownership claim (claim-seed-ownership.ts, seed-settlement.ts).
Container & model: S, mode:thread, model: TIER_DEFAULT, effort: high
Clause-②: yes (widening: a thrown load's receipt carries landed for the datasets that finished, where it carried none)
Metadata-protocol: semantic (expected: an existing key's absence changes meaning on a thrown load; the dev confirms with check-changeset-no-major)
Responsibility: after a publish whose seed load throws mid-batch, the receipt has no landed ids although earlier datasets inserted rows | SeedLoadPartialWrites carries counts only, so applySeedBodies' catch cannot report ids | cloud's "clear sample data" (objectstack-ai/cloud#3598) after any partial publish
Thread-read: 6657518253
Premise: holds at origin/maina7b8876f (PR #30427 merged) by reading: protocol-publish-batch.ts returns landed only on the returned-load path (≈:134-140) and its catch reads counts from seedLoadPartialWrites. The dev re-measures before editing.
Human floor: none beyond #30348's shape (cloud#3598 ruling A, the two-list split); this card keeps it.
Serial constraints cleared: no open PR touches seed-loader.ts, protocol-publish-batch.ts or seed-applied-landed.ts.
Claim: PM loop round 22 (p2), restated with the branch
Session: session_01WGufzfgvGexKn9vLHsy89K
Account: os-support-ai
Branch: claude/project-thread-crfqzt (the card thread's own branch, a measured platform exception to claude/issue-30429-…); card thread session session_01WGufzht5n1PKh96TqTfrvV
Worktree: objectstack-issue-30429
Domain: domain:spec
Seat: domain:spec#3
File surface: packages/metadata-protocol/src/seed-loader.ts (SeedLoadPartialWrites, seedLoadPartialWrites), protocol-publish-batch.ts (applySeedBodies' catch), seed-applied-landed.ts if the projection needs a partial entry point, the seedApplied.landed describe in packages/spec/src/api/protocol.zod.ts, and their tests. ⛔ Not cloud, not the seed-ownership claim (claim-seed-ownership.ts, seed-settlement.ts).
Container & model: S, mode:thread, model: TIER_DEFAULT, effort: high
Clause-②: yes (widening: a thrown load's receipt carries landed for the datasets that finished, where it carried none)
Metadata-protocol: semantic (expected: an existing key's absence changes meaning on a thrown load; the dev confirms with check-changeset-no-major)
Responsibility: after a publish whose seed load throws mid-batch, the receipt has no landed ids although earlier datasets inserted rows | SeedLoadPartialWrites carries counts only, so applySeedBodies' catch cannot report ids | cloud's "clear sample data" (objectstack-ai/cloud#3598) after any partial publish
Thread-read: 6658436150
Premise: holds at origin/maina7b8876f (PR #30427 merged) by reading: protocol-publish-batch.ts returns landed only on the returned-load path (≈:134-140) and its catch reads counts from seedLoadPartialWrites. The dev re-measures before editing.
Human floor: none beyond #30348's shape (cloud#3598 ruling A, the two-list split); this card keeps it.
Serial constraints cleared: no open PR touches seed-loader.ts, protocol-publish-batch.ts or seed-applied-landed.ts.
{
"issue": 30429,
"status": "done",
"branch": "claude/project-thread-crfqzt",
"pr": "https://github.com/objectstack-ai/objectstack/pull/30519",
"head": "4c02bddf8",
"session": "session_01WGufzht5n1PKh96TqTfrvV",
"premise_still_valid": true,
"summary": "SeedLoadPartialWrites gains `finished` (the finished datasets' object/landedIds/insertedIds, load order); applySeedBodies' catch and the runtime fallback's catch both fold it through seedAppliedLanded, so a thrown load's receipt lists the finished datasets in `landed` (same two lists, same 200 cap). The dataset that threw is omitted: its ids are only partly known when it throws (a lost batch response can commit rows whose ids never return); its rows stay in the counts and its object in `error`. A throw before any dataset finished reports landed: []; no load ran leaves landed absent. seedLoadPartialWrites is exported from the package root; the spec landed description and docblock say this.",
"tests": "at be4d35b5 under os-verify-lock: metadata-protocol 316 passed 4 skipped files, 22425 tests; objectql 551/551 files, 10989 tests; runtime 543/543 files, 8647 passed 19 skipped; spec 815/815 files, 25622 passed 1 todo; typecheck exit 0 for all four. Ablation A (dist): loader finished snapshot neutralised, blob a7986c958ece to c3a35b1b3aa0, metadata-protocol rebuilt, preflight marker in 2 built files: objectql landed 1 failed of 10, runtime fallback 1 failed of 3, partial-writes unit 1 failed of 3. Ablation B (dist): catch landed spread neutralised, blob eccb3c495621 to cb59f9935201: objectql landed 2 failed of 10. Restored to HEAD blobs, rebuilt, --absent preflight green, git diff HEAD empty, 10/10, 3/3, 3/3. A first attempt with comment markers was refused by the preflight (stripped by the build) before any test ran.",
"gates": "dispatch-gates --commands: 105 derived; serial pass at be4d35b5, three exit-3 prerequisites (check-plugin-teardown-shape --self-test, check:skill-examples, check:dual-build-cjs-loads) re-run exit 0 after fetching the fixture commit and a full turbo build 119/119; --ran with exit codes: 105 run, 0 NOT-MEASURED (derived zero), exit 0. At 4c02bddf8 (adds only the changeset Supersedes paragraph): check-empty-changeset, check:generated, check:nul-bytes exit 0; check-changeset-no-major with the PR body as event exit 0 on semantic, control none exit 1, added exit 0. CI check-runs: in_progress at report time.",
"dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm",
"mcp_calls": "2 — issue_read get and get_comments on #30429 (read-only)",
"api_writes": "2 — relay pr_create (#30519, draft, no assignees, 12695 bytes read back identical), this os-dev-report comment via post-stamped.mjs; git push x2 not REST",
"open_questions": [],
"security_findings": "none",
"out_of_scope_findings": [
"carrier: none · the runtime fallback's thrown seedApplied carries no inserted/updated counts although PublishPackageDraftsResponseSchema declares both required; pre-existing, noted in PR Acceptance notes, not filed",
"carrier: cloud · the omitted failing dataset's landed rows have no ids on the receipt; cloud can see that unlisted rows exist by comparing inserted with the listed inserted totals"
],
"deviations": "harness default to assign the PR and request a review skipped per os-dev rule 2; commit trailers model-free"
}
Accepted: PR #30519, head 7f2442b0. The ACCEPT is 6660967321; the contract review is 6660144246 (PASS), both on the PR. It lands through the merge queue.
① Release. The claims 6658436150 and 6658477761 of domain:spec#3 · os-support-ai · session_01WGufzfgvGexKn9vLHsy89K are taken over. Whose order: the maintainer (os-sales). The words: 「spec 前任没流量了,接手他们的座位和在手工作」. Where: the project chat of the os-sales account's project, with the previous holder's hand-off as this seat thread's opening message (seat post #18883, takeover audit there).
② Assignee:os-support-ai → os-sales, in the same stroke as this comment.
④ Hand-over record. Branch claude/project-thread-crfqzt, last pushed 7f2442b0338fb295c8ffd047fececd535ea75938 (PR #30519). Status: ACCEPTed (PR #30519 comment 6660967321, contract review 6660144246 PASS), in the merge queue. This seat only lands it: landing note and pm:dispatched off on merge.
Claim: PM loop round 1 (p2), taken over
Session: session_01L6bhgTqqeHSwZYJmApbDCa
Account: os-sales
Branch: claude/project-thread-crfqzt (continued; PR #30519)
Worktree: objectstack-issue-30429
Domain: domain:spec
Seat: domain:spec#3
File surface: unchanged from claim 6658477761 (packages/metadata-protocol/src/seed-loader.ts, protocol-publish-batch.ts, seed-applied-landed.ts, the seedApplied.landed describe in packages/spec/src/api/protocol.zod.ts, and their tests).
Container & model: S, mode:thread (the work is done; landing only), model: TIER_DEFAULT, effort: high
Clause-②: yes (widening)
Metadata-protocol: semantic
Responsibility: unchanged from claim 6658477761: after a publish whose seed load throws mid-batch, the receipt has no landed ids although earlier datasets inserted rows | SeedLoadPartialWrites carries counts only, so applySeedBodies' catch cannot report ids | cloud's "clear sample data" (objectstack-ai/cloud#3598) after any partial publish
Thread-read: 6660986743
Premise: holds; the ACCEPT on 7f2442b0 is the reading.
Serial constraints cleared: none; the PR is in the merge queue.
Landed: PR #30519 merged at 38d416f1. When a seed load throws part-way, the publish receipt's seedApplied now carries landed for the datasets that finished before the throw (the same projection, inserted and matched, the same 200-id cap); the dataset that threw is not listed, its rows still count, and error names the object it stopped at. The runtime fallback seed apply reads and projects the same way, and its failure receipt carries the inserted / updated counts the schema requires. landed absent now means only that no load ran.
The merge queue landed it at 2026-11-05T16:04:34Z; the PR body's Fixes #30429 did not close the card, so this seat closes it as completed and removes pm:dispatched in the same stroke.
Carried: none (the seed-ownership claim's reading of landedIds versus insertedIds stayed out of scope by the order). objectstack-ai/cloud#3598's cloud half can now clear the sample rows of a partial publish.
Activity
objectstack-fleet commentedon Nov 5, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: audit · p2 kept ·
domain:spec·pm:blocked· 2026-11-05T12:03Z⛔ Not a claim.
seedApplied.landedfor the datasets that did land, although the loader knows their ids.Blocked-by: #30348holds: its PR feat(spec,metadata-protocol): the publish receipt names the rows a seed created and the rows it only matched #30427 is open.Generated by Claude Code
objectstack-fleet commentedon Nov 5, 2026
domain:spec#3 · os-support-ai · session_01WGufzfgvGexKn9vLHsy89K
Claim: PM loop round 22 (p2)
Session:
session_01WGufzfgvGexKn9vLHsy89KAccount:
os-support-aiBranch: the card thread's own
claude/project-thread-*branch, named in the dev's hand-back and restated in a later claim (a measured platform exception toclaude/issue-30429-…)Worktree:
objectstack-issue-30429Domain:
domain:specSeat:
domain:spec#3File surface:
packages/metadata-protocol/src/seed-loader.ts(SeedLoadPartialWrites,seedLoadPartialWrites),protocol-publish-batch.ts(applySeedBodies' catch),seed-applied-landed.tsif the projection needs a partial entry point, theseedApplied.landeddescribe inpackages/spec/src/api/protocol.zod.ts, and their tests. ⛔ Not cloud, not the seed-ownership claim (claim-seed-ownership.ts,seed-settlement.ts).Container & model:
S,mode:thread,model: TIER_DEFAULT,effort: highClause-②: yes (widening: a thrown load's receipt carries
landedfor the datasets that finished, where it carried none)Metadata-protocol: semantic (expected: an existing key's absence changes meaning on a thrown load; the dev confirms with
check-changeset-no-major)Responsibility:
after a publish whose seed load throws mid-batch, the receipt has no landed ids although earlier datasets inserted rows | SeedLoadPartialWrites carries counts only, so applySeedBodies' catch cannot report ids | cloud's "clear sample data" (objectstack-ai/cloud#3598) after any partial publishThread-read: 6657518253
Premise: holds at
origin/maina7b8876f(PR #30427 merged) by reading:protocol-publish-batch.tsreturnslandedonly on the returned-load path (≈:134-140) and its catch reads counts fromseedLoadPartialWrites. The dev re-measures before editing.Human floor: none beyond #30348's shape (cloud#3598 ruling A, the two-list split); this card keeps it.
Serial constraints cleared: no open PR touches
seed-loader.ts,protocol-publish-batch.tsorseed-applied-landed.ts.objectstack-fleet commentedon Nov 5, 2026
domain:spec#3 · os-support-ai · session_01WGufzfgvGexKn9vLHsy89K
Claim: PM loop round 22 (p2), restated with the branch
Session:
session_01WGufzfgvGexKn9vLHsy89KAccount:
os-support-aiBranch:
claude/project-thread-crfqzt(the card thread's own branch, a measured platform exception toclaude/issue-30429-…); card thread sessionsession_01WGufzht5n1PKh96TqTfrvVWorktree:
objectstack-issue-30429Domain:
domain:specSeat:
domain:spec#3File surface:
packages/metadata-protocol/src/seed-loader.ts(SeedLoadPartialWrites,seedLoadPartialWrites),protocol-publish-batch.ts(applySeedBodies' catch),seed-applied-landed.tsif the projection needs a partial entry point, theseedApplied.landeddescribe inpackages/spec/src/api/protocol.zod.ts, and their tests. ⛔ Not cloud, not the seed-ownership claim (claim-seed-ownership.ts,seed-settlement.ts).Container & model:
S,mode:thread,model: TIER_DEFAULT,effort: highClause-②: yes (widening: a thrown load's receipt carries
landedfor the datasets that finished, where it carried none)Metadata-protocol: semantic (expected: an existing key's absence changes meaning on a thrown load; the dev confirms with
check-changeset-no-major)Responsibility:
after a publish whose seed load throws mid-batch, the receipt has no landed ids although earlier datasets inserted rows | SeedLoadPartialWrites carries counts only, so applySeedBodies' catch cannot report ids | cloud's "clear sample data" (objectstack-ai/cloud#3598) after any partial publishThread-read: 6658436150
Premise: holds at
origin/maina7b8876f(PR #30427 merged) by reading:protocol-publish-batch.tsreturnslandedonly on the returned-load path (≈:134-140) and its catch reads counts fromseedLoadPartialWrites. The dev re-measures before editing.Human floor: none beyond #30348's shape (cloud#3598 ruling A, the two-list split); this card keeps it.
Serial constraints cleared: no open PR touches
seed-loader.ts,protocol-publish-batch.tsorseed-applied-landed.ts.objectstack-fleet commentedon Nov 5, 2026
domain:spec#3 · os-support-ai · session_01WGufzht5n1PKh96TqTfrvV
os-dev-report
Stamp: 2026-11-05T14:01Z
{ "issue": 30429, "status": "done", "branch": "claude/project-thread-crfqzt", "pr": "https://github.com/objectstack-ai/objectstack/pull/30519", "head": "4c02bddf8", "session": "session_01WGufzht5n1PKh96TqTfrvV", "premise_still_valid": true, "summary": "SeedLoadPartialWrites gains `finished` (the finished datasets' object/landedIds/insertedIds, load order); applySeedBodies' catch and the runtime fallback's catch both fold it through seedAppliedLanded, so a thrown load's receipt lists the finished datasets in `landed` (same two lists, same 200 cap). The dataset that threw is omitted: its ids are only partly known when it throws (a lost batch response can commit rows whose ids never return); its rows stay in the counts and its object in `error`. A throw before any dataset finished reports landed: []; no load ran leaves landed absent. seedLoadPartialWrites is exported from the package root; the spec landed description and docblock say this.", "tests": "at be4d35b5 under os-verify-lock: metadata-protocol 316 passed 4 skipped files, 22425 tests; objectql 551/551 files, 10989 tests; runtime 543/543 files, 8647 passed 19 skipped; spec 815/815 files, 25622 passed 1 todo; typecheck exit 0 for all four. Ablation A (dist): loader finished snapshot neutralised, blob a7986c958ece to c3a35b1b3aa0, metadata-protocol rebuilt, preflight marker in 2 built files: objectql landed 1 failed of 10, runtime fallback 1 failed of 3, partial-writes unit 1 failed of 3. Ablation B (dist): catch landed spread neutralised, blob eccb3c495621 to cb59f9935201: objectql landed 2 failed of 10. Restored to HEAD blobs, rebuilt, --absent preflight green, git diff HEAD empty, 10/10, 3/3, 3/3. A first attempt with comment markers was refused by the preflight (stripped by the build) before any test ran.", "gates": "dispatch-gates --commands: 105 derived; serial pass at be4d35b5, three exit-3 prerequisites (check-plugin-teardown-shape --self-test, check:skill-examples, check:dual-build-cjs-loads) re-run exit 0 after fetching the fixture commit and a full turbo build 119/119; --ran with exit codes: 105 run, 0 NOT-MEASURED (derived zero), exit 0. At 4c02bddf8 (adds only the changeset Supersedes paragraph): check-empty-changeset, check:generated, check:nul-bytes exit 0; check-changeset-no-major with the PR body as event exit 0 on semantic, control none exit 1, added exit 0. CI check-runs: in_progress at report time.", "dogfood_battery": "n/a — no ! in the PR title and no (narrowing) arm", "mcp_calls": "2 — issue_read get and get_comments on #30429 (read-only)", "api_writes": "2 — relay pr_create (#30519, draft, no assignees, 12695 bytes read back identical), this os-dev-report comment via post-stamped.mjs; git push x2 not REST", "open_questions": [], "security_findings": "none", "out_of_scope_findings": [ "carrier: none · the runtime fallback's thrown seedApplied carries no inserted/updated counts although PublishPackageDraftsResponseSchema declares both required; pre-existing, noted in PR Acceptance notes, not filed", "carrier: cloud · the omitted failing dataset's landed rows have no ids on the receipt; cloud can see that unlisted rows exist by comparing inserted with the listed inserted totals" ], "deviations": "harness default to assign the PR and request a review skipped per os-dev rule 2; commit trailers model-free" }Generated by Claude Code
objectstack-fleet commentedon Nov 5, 2026
domain:spec#3 · os-support-ai · session_01WGufzfgvGexKn9vLHsy89K
Accepted: PR #30519, head
7f2442b0. The ACCEPT is 6660967321; the contract review is 6660144246 (PASS), both on the PR. It lands through the merge queue.objectstack-fleet commentedon Nov 5, 2026
domain:spec#3 · os-sales · session_01L6bhgTqqeHSwZYJmApbDCa
Takeover · #30429 · 2026-11-05T15:50Z
① Release. The claims 6658436150 and 6658477761 of
domain:spec#3·os-support-ai·session_01WGufzfgvGexKn9vLHsy89Kare taken over. Whose order: the maintainer (os-sales). The words: 「spec 前任没流量了,接手他们的座位和在手工作」. Where: the project chat of the os-sales account's project, with the previous holder's hand-off as this seat thread's opening message (seat post #18883, takeover audit there).② Assignee:
os-support-ai→os-sales, in the same stroke as this comment.④ Hand-over record. Branch
claude/project-thread-crfqzt, last pushed7f2442b0338fb295c8ffd047fececd535ea75938(PR #30519). Status: ACCEPTed (PR #30519 comment 6660967321, contract review 6660144246 PASS), in the merge queue. This seat only lands it: landing note andpm:dispatchedoff on merge.Claim: PM loop round 1 (p2), taken over
Session:
session_01L6bhgTqqeHSwZYJmApbDCaAccount:
os-salesBranch:
claude/project-thread-crfqzt(continued; PR #30519)Worktree:
objectstack-issue-30429Domain:
domain:specSeat:
domain:spec#3File surface: unchanged from claim 6658477761 (
packages/metadata-protocol/src/seed-loader.ts,protocol-publish-batch.ts,seed-applied-landed.ts, theseedApplied.landeddescribe inpackages/spec/src/api/protocol.zod.ts, and their tests).Container & model:
S,mode:thread(the work is done; landing only),model: TIER_DEFAULT,effort: highClause-②: yes (widening)
Metadata-protocol: semantic
Responsibility: unchanged from claim 6658477761:
after a publish whose seed load throws mid-batch, the receipt has no landed ids although earlier datasets inserted rows | SeedLoadPartialWrites carries counts only, so applySeedBodies' catch cannot report ids | cloud's "clear sample data" (objectstack-ai/cloud#3598) after any partial publishThread-read: 6660986743
Premise: holds; the ACCEPT on
7f2442b0is the reading.Serial constraints cleared: none; the PR is in the merge queue.
Generated by Claude Code
objectstack-fleet commentedon Nov 5, 2026
domain:spec#3 · os-sales · session_01L6bhgTqqeHSwZYJmApbDCa
Landed: PR #30519 merged at
38d416f1. When a seed load throws part-way, the publish receipt'sseedAppliednow carrieslandedfor the datasets that finished before the throw (the same projection,insertedandmatched, the same 200-id cap); the dataset that threw is not listed, its rows still count, anderrornames the object it stopped at. The runtime fallback seed apply reads and projects the same way, and its failure receipt carries theinserted/updatedcounts the schema requires.landedabsent now means only that no load ran.The merge queue landed it at 2026-11-05T16:04:34Z; the PR body's
Fixes #30429did not close the card, so this seat closes it as completed and removespm:dispatchedin the same stroke.Carried: none (the seed-ownership claim's reading of
landedIdsversusinsertedIdsstayed out of scope by the order). objectstack-ai/cloud#3598's cloud half can now clear the sample rows of a partial publish.Generated by Claude Code