Repository navigation
Description
repo:cloud#3 · hotlong · session_01Q4EjjRhUZjdy8VXs6Kkur2
Filing gate: executing a recorded ruling. The maintainer ruled objectstack-ai/cloud#3598 A (record 6651768430; the maintainer's selection, verbatim: 「A 平台回执带行号(推荐)」). This card carries the platform half. objectstack-ai/cloud#3598 keeps the cloud half and waits on this card with pm:blocked + Blocked-by:.
Owner. The repo:cloud lane (repo:cloud#3, #30278) follows it to close. The change widens a published response schema, so it is spec-lane work (Clause-②: yes (widening)), and triage routes it.
Priority: p1, inherited from objectstack-ai/cloud#3598.
维护者速读
AI 搭建应用时,示例数据是在发布草稿那一刻由平台写进去的。种子加载器知道写了哪几行,但发布接口只回传「写了几行」,把具体行号丢了,于是 cloud 的「清理示例数据」永远找不到这些行。按已有裁决,发布回执 seedApplied 加一个可选、有上限的字段,按对象带回写入的行 id。
Measured
Probe at framework pin 1a3ea0c0 on a real hosted kernel, by the objectstack-ai/cloud#3598 dev (report objectstack-ai/cloud#3598 comment 6650239213):
- The real
apply_blueprintpublished 6 rows (seedApplied.inserted 6). The cloud seed-replay ledger stayed unchanged. - After a kernel rebuild on the same database, the ledger was still unchanged.
- A control artifact
data[]seed was recorded normally, which proves the reading method.
Seat re-read at objectstack origin/main bfca0efb:
packages/metadata-protocol/src/protocol-publish-batch.ts:126-128:applySeedBodiesreturnssuccess,inserted: r.summary.totalInsertedandupdated, and no ids.packages/spec/src/data/seed-loader.zod.ts:431:landedIds: z.array(z.string()).default([])is on the loader's per-dataset result.packages/spec/src/api/protocol.zod.ts:1480:seedApplied: z.object({…})is the receipt schema, with no ids field.packages/spec/src/contracts/seed-settlement.ts:110:seededRecordIdscovers boot-time sources only.
The ruled design (option A of objectstack-ai/cloud#3598 comment 6650272370)
applySeedBodieskeeps the loader'slandedIdsper object and returns them on the receipt.seedAppliedgains an optional per-object landed-ids field. Do it in bothseedAppliedschemas the dev named (protocol.zod.ts, both publish shapes), size-capped the way the cloud ledger capsseeded_record_ids. State the cap and what the receipt says when it truncates, rather than silently dropping ids.publishPackageDraftsandpublishMetaItemboth carry it.- Additive and optional: existing callers keep working, and an absent field means "not reported".
- Accepted cost: row ids appear on the public
POST /packages/:id/publish-draftsresponse, bounded by the cap.
Acceptance
- A test publishes a seed draft and asserts the receipt lists exactly the ids the loader landed, per object.
- An over-cap test asserts the declared truncation shape.
- The protocol docblock names the field.
Clause-②: yes (widening), with the spec-lane contract review on record.
Dedupe (issues, open and closed, 2026-11-05), none carrying this:
repo:objectstack-ai/objectstack seedApplied landed ids is:issue: 5 hits (seed-loader: a reference written as an empty string ('') is resolved as a natural key, so an optional lookup left blank loads its row and still reports a "Deferred reference unresolved" error (success false) #24459, metadata-protocol: an upsert seed whose externalId names a field the object lacks is accepted and inserts a duplicate row on every publish, silently #28952, QA run · release-18.3.0-w4-c3a (44/44) · 7fa9873f · 2026-11-02 · 41 PASS / 2 PARTIAL / 1 FAIL / 0 BLOCKED / 0 NOT-RUN #28942, [sweep] v18.3.0 release test sweep #27377, …).applySeedBodies landedIds is:issue: 0 hits, with controlseedApplied→ 18 hits.
Activity
objectstack-fleet commentedon Nov 5, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: first-touch audit · p1 ·
domain:spec·repo:cloudkept · 2026-11-05T07:58Z⛔ Not a claim.
seedAppliedcarries the landed row ids that the seed loader computes, so cloud can tell which rows a publish wrote. It widens a published response schema, a protocol addition, so p1.domain:spec.repo:cloud#3follows the card to close, as it says.Generated by Claude Code
objectstack-fleet commentedon Nov 5, 2026
domain:spec#3 · os-support-ai · session_01WGufzfgvGexKn9vLHsy89K
Claim: PM loop round 18 (p1)
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-30348-…)Worktree:
objectstack-issue-30348Domain:
domain:specSeat:
domain:spec#3File surface:
packages/spec/src/api/protocol.zod.ts(everyseedAppliedschema and the protocol docblock),packages/metadata-protocol/src/protocol-publish-batch.ts(applySeedBodies) and the publish paths that returnseedApplied, their tests, and the spec ledgers a response key moves. ⛔ Not the cloud half (cloud#3598) and notseed-settlement.ts.Container & model:
M,mode:thread,model: TIER_DEFAULT,effort: highClause-②: yes (widening: an optional, capped per-object landed-ids field on the published
seedAppliedreceipt)Metadata-protocol: none (a response field, no authorable key; the dev confirms with
check-changeset-no-major)Responsibility:
the publish receipt's seedApplied reports only counts and drops the landed row ids the seed loader computes | cloud cannot tell which rows an AI build's seed landed on, so its "clear sample data" never finds them | every cloud workspace built by apply_blueprint; measured on a hosted kernel at 1a3ea0c0 (cloud#3598 report 6650239213)Thread-read: 6652847485
Premise: holds. At
origin/main,applySeedBodies(protocol-publish-batch.ts:126-128) returnssuccess,insertedandupdatedonly, while the loader's per-dataset result carrieslandedIds(seed-loader.zod.ts:431);seedApplied(protocol.zod.ts:1480) has no ids field.Human floor: the maintainer's ruling A on objectstack-ai/cloud#3598 (record 6651768430, 「A 平台回执带行号(推荐)」), design in cloud#3598 comment 6650272370.
Serial constraints cleared: no open PR touches
protocol.zod.tsorprotocol-publish-batch.ts.objectstack-fleet commentedon Nov 5, 2026
domain:spec#3 · os-support-ai · session_01WGufzfgvGexKn9vLHsy89K
Claim: PM loop round 18 (p1), restated with the branch
Session:
session_01WGufzfgvGexKn9vLHsy89KAccount:
os-support-aiBranch:
claude/project-thread-5eqwnz(the card thread's harness-pinned branch, offmainat870ebce3; dev sessionsession_01WGufzi6PCniByMTFP6RQ6P)Worktree:
objectstack-issue-30348Domain:
domain:specSeat:
domain:spec#3File surface:
packages/spec/src/api/protocol.zod.ts(everyseedAppliedschema and the protocol docblock),packages/metadata-protocol/src/protocol-publish-batch.ts(applySeedBodies) and the publish paths that returnseedApplied, their tests, and the spec ledgers a response key moves. ⛔ Not the cloud half (cloud#3598) and notseed-settlement.ts.Container & model:
M,mode:thread,model: TIER_DEFAULT,effort: highClause-②: yes (widening: an optional, capped per-object landed-ids field on the published
seedAppliedreceipt)Metadata-protocol: none (a response field, no authorable key; the dev confirms with
check-changeset-no-major)Responsibility:
the publish receipt's seedApplied reports only counts and drops the landed row ids the seed loader computes | cloud cannot tell which rows an AI build's seed landed on, so its "clear sample data" never finds them | every cloud workspace built by apply_blueprint; measured on a hosted kernel at 1a3ea0c0 (cloud#3598 report 6650239213)Thread-read: 6653727324
Premise: holds. At
origin/main,applySeedBodies(protocol-publish-batch.ts:126-128) returnssuccess,insertedandupdatedonly, while the loader's per-dataset result carrieslandedIds(seed-loader.zod.ts:431);seedApplied(protocol.zod.ts:1480) has no ids field.Human floor: the maintainer's ruling A on objectstack-ai/cloud#3598 (record 6651768430, 「A 平台回执带行号(推荐)」), design in cloud#3598 comment 6650272370.
Serial constraints cleared: no open PR touches
protocol.zod.tsorprotocol-publish-batch.ts.objectstack-fleet commentedon Nov 5, 2026
domain:spec#3 · os-support-ai · session_01WGufzfgvGexKn9vLHsy89K
Claim: PM loop round 18 (p1), restated with the widened file surface
Session:
session_01WGufzfgvGexKn9vLHsy89KAccount:
os-support-aiBranch:
claude/project-thread-5eqwnz(the card thread's harness-pinned branch, offmainat870ebce3; dev sessionsession_01WGufzi6PCniByMTFP6RQ6P)Worktree:
objectstack-issue-30348Domain:
domain:specSeat:
domain:spec#3File surface:
packages/spec/src/api/protocol.zod.ts(everyseedAppliedschema and the protocol docblock),packages/metadata-protocol/src/protocol-publish-batch.ts(applySeedBodies) and the publish paths that returnseedApplied,SeedLoadResultSchema(packages/spec/src/data/seed-loader.zod.ts, a newinsertedIds) and the loader's insert-outcome recording (packages/metadata-protocol/src/seed-loader.ts), so the receipt can split rows this publish created from rows it only matched, their tests, and the spec ledgers both keys move. ⛔ Not the cloud half (cloud#3598) and notseed-settlement.ts.Container & model:
M,mode:thread,model: TIER_DEFAULT,effort: highClause-②: yes (widening: an optional, capped per-object
landedfield on the publishedseedAppliedreceipt, split intoinsertedandmatched, andinsertedIdson the seed loader's result)Metadata-protocol: added (
SeedLoadResultSchemais on the authorable surface; the dev confirms withcheck-changeset-no-major)Responsibility:
the publish receipt's seedApplied reports only counts and drops the landed row ids the seed loader computes | cloud cannot tell which rows an AI build's seed landed on, so its "clear sample data" never finds them | every cloud workspace built by apply_blueprint; measured on a hosted kernel at 1a3ea0c0 (cloud#3598 report 6650239213)Thread-read: 6653760009
Premise: holds. At
origin/main,applySeedBodies(protocol-publish-batch.ts:126-128) returnssuccess,insertedandupdatedonly, while the loader's per-dataset result carrieslandedIds(seed-loader.zod.ts:431);seedApplied(protocol.zod.ts:1480) has no ids field.Human floor: the maintainer's ruling A on objectstack-ai/cloud#3598 (record 6651768430, 「A 平台回执带行号(推荐)」), design in cloud#3598 comment 6650272370.
Serial constraints cleared: no open PR touches
protocol.zod.ts,protocol-publish-batch.ts,seed-loader.zod.tsorseed-loader.ts.Why widened: under
ignore(the #30081 default) the loader counts a pre-existing row matched by natural key as landed. A single id list would let cloud's "clear sample data" delete a customer's own row, so the receipt reportsinsertedandmatchedseparately (seat ruling on the dev's measurement).objectstack-fleet commentedon Nov 5, 2026
domain:spec#3 · os-support-ai · session_01WGufzi6PCniByMTFP6RQ6P
os-dev-report
Stamp: 2026-11-05T10:51Z
objectstack-fleet commentedon Nov 5, 2026
domain:spec#3 · os-support-ai · session_01WGufzfgvGexKn9vLHsy89K
Accepted: PR #30427, head
8dea3777. The ACCEPT is 6657420368; the contract review is 6656296448 (PASS), both on the PR. It lands through the merge queue. The thrown-load follow-up is #30429.objectstack-fleet commentedon Nov 5, 2026
domain:spec#3 · os-support-ai · session_01WGufzfgvGexKn9vLHsy89K
Landed: PR #30427 merged at
a7b8876f. Both publish receipts'seedAppliednow carry an optionallanded: per object,inserted(rows this publish created) andmatched(pre-existing rows a seed record's key matched), each{ ids, total, truncated }capped atSEED_APPLIED_LANDED_IDS_CAP(200).SeedLoadResultcarriesinsertedIdsbesidelandedIds. Both publish doors and the runtime fallback fold the loader's ids through one projection,seedAppliedLanded. Onlyinsertednames rows the seed created; cloud's "clear sample data" reads that list and accumulates it across publishes. The card closed byFixes, and the seat removespm:dispatched.Carried:
Blocked-by:is this card, so it is now eligible.inserted.Posted 2026-11-05T12:48Z.
docs(changeset): say which #30348 changeset sentence this one supersedes