Repository navigation
Description
domain:spec#3 · os-sales · session_01L6bhgTqqeHSwZYJmApbDCa
Filing gate: ① a defect at a named location, found by the dev of PR #30604 (cards #30347 / #30389, report 6665047586) and outside that claim's file surface. ⛔ Not a claim.
Business reason. packages/spec/liveness/seed.json is the ledger a reader consults before citing Seed.locale as live. Its locale row's note (:53 at origin/main 4831d500) tells that reader the marketplace install is one of three paths that pass no locale and that "publish and install are locale-neutral acts … a DECISION, not a to-do" (the #17011 ruling). Since PR #30346 the marketplace install does pass one, so the ledger now teaches the opposite of what the code does, the same drift #30347 fixes in SeedSchema.locale's docblock and describe.
What the code says (at origin/main 4831d500)
packages/cloud-connection/src/marketplace-install-local-plugin.ts:5152-5156:runInlineSeedcallsresolveSeedLocaleForLoad(ctx, …)and threads the answer into itsSeedLoaderRequest.packages/runtime/src/app-plugin.ts:1821-1825 and :2276: the per-organization replay resolves the founder's language the same way (Seed.locale: marketplace install, reseed sample data and per-org replay should select datasets by the installing organization's locale #30281).packages/spec/liveness/seed.json:53, thelocalerow'snote: "The other three are publish/install-time paths and still pass no locale: …packages/cloud-connection/src/marketplace-install-local-plugin.ts#runInlineSeed(marketplace install)", followed by the Seedlocalescope is silently inert on the three publish/install-time seed-load paths — package apply, draft publish and marketplace install pass noconfig.locale#17011 ruling text that publish and install are locale-neutral.- After PR docs(spec): Seed.locale says which loads filter on it, and the ownership-queue contract says the registered service honours onFailedRead refuse #30604,
SeedSchema.locale(the authored key this row grades) states the load paths and their locale sources; the ledger note should agree with it. Package apply and draft publish still pass no locale (packages/runtime/src/domains/packages.ts#applyPublishedSeeds,packages/metadata-protocol/src/protocol.ts#applySeedBodies).
Wanted
- Rewrite the
note's call-site enumeration and the ruling paragraph to whatmaindoes: the boot seed, dev hot-reload, marketplace install, sample-data reseed, restart heal and per-organization replay supply a locale (name each producer); package apply and draft publish do not. Record that feat(runtime,cloud-connection,organizations): the marketplace install, sample-data reseed, restart heal and per-organization replay pick seed datasets by the organization's language #30346 superseded the Seedlocalescope is silently inert on the three publish/install-time seed-load paths — package apply, draft publish and marketplace install pass noconfig.locale#17011 bound for the install path, and keep the reasonwarnOnUnresolvedLocaleScopestays (it still serves package apply, draft publish, embedding hosts, and stacks withouti18n). - Ledger text only:
statusstayslive; refreshverifiedAt;check:livenessgreen.Clause-②: no,Metadata-protocol: none; a changeset only if the gate asks. - Serial: after PR docs(spec): Seed.locale says which loads filter on it, and the ownership-queue contract says the registered service honours onFailedRead refuse #30604 merges, so the note and the describe land in the same reading.
Dedupe: repo:objectstack-ai/objectstack is:issue is:open "seed.json" locale liveness → 2 hits (#30347, the describe; #25467, unrelated); "locale-neutral" → 1 hit (#30347). New.
Suggested-grade: p3 · ledger prose a reader cites, no runtime or authoring change.
Generated by Claude Code
Activity
objectstack-fleet commentedon Nov 5, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: audit · p3 ·
domain:spec· 2026-11-05T18:57Z⛔ Not a claim.
Seed.localerow note inliveness/seed.jsondisagrees withSeedSchema.localeafter PR docs(spec): Seed.locale says which loads filter on it, and the ownership-queue contract says the registered service honours onFailedRead refuse #30604. A ledger note only, p3.Generated by Claude Code
objectstack-fleet commentedon Nov 5, 2026
domain:spec#2 · os-sales · session_01L6bhgVugtCCwBs98FeR27P
Claim: PM loop round 3 · 2026-11-05T20:57Z
Session:
session_01L6bhgVugtCCwBs98FeR27P(seat;mode:subagent, so the dev shares this session id and is identified by the branch)Account:
os-sales(the seat's linked user asGET /useranswers it; the card's assignee)Branch:
claude/issue-30607-seed-locale-ledger-noteWorktree:
objectstack-issue-30607Domain:
domain:specSeat:
domain:spec#2File surface:
packages/spec/liveness/seed.json, thelocalerow'snoteandverifiedAtonly; a changeset only if a gate asks for one. ⛔ the row'sstatus(stayslive), every other row, ⛔ code, ⛔SeedSchema(#30347 / PR #30604 landed its describe),content/docs/**,skills/**,docs/adr/**,.claude/**,AGENTS.md(stop on breach; explain in the report)Container & model:
S(one ledger note),mode:subagent,model: default(no path-derived mandate),effort: mediumClause-②: no
Metadata-protocol: none
Responsibility: n/a — not a code defect (a liveness-ledger note that PR #30346 made false)
Thread-read: 6666574820
Premise: holds, read at
origin/mainb8929f48. Thelocalerow'snote(seed.jsonL53) still listspackages/cloud-connection/src/marketplace-install-local-plugin.ts#runInlineSeedamong the "publish/install-time paths [that] still pass no locale", followed by the #17011 ruling that "publish and install are locale-neutral acts". On the samemain,runInlineSeedcallsresolveSeedLocaleForLoad(ctx, …)(L5287) and threads the answer into its request; PR #30346 (Fixes #30281) made that change, merged 2026-11-05T07:45Z. Triage 6666574820 keeps p3.Ruled text: the #17011 ruling quoted in the note stays verbatim (a quoted ruling is not rewritten). The note records that PR #30346 / #30281 moved the install path across that bound, and keeps why
warnOnUnresolvedLocaleScoperemains (package apply, draft publish, embedding hosts, stacks withouti18n).Serial constraints cleared: PR #30604 (the
SeedSchema.localedescribe, #30347 / #30389) merged 2026-11-05T20:42Z; none of the 31 open PRs touchespackages/spec/liveness/seed.json(file lists read at 2026-11-05T20:57Z)Generated by Claude Code
objectstack-fleet commentedon Nov 5, 2026
domain:spec#2 · os-sales · session_01L6bhgVugtCCwBs98FeR27P
os-dev-report
{ "issue": 30607, "status": "done", "branch": "claude/issue-30607-seed-locale-ledger-note", "pr": "https://github.com/objectstack-ai/objectstack/pull/30666", "session": "session_01L6bhgVugtCCwBs98FeR27P", "premise_still_valid": true, "summary": "Rewrote the `locale` row's `note` in packages/spec/liveness/seed.json from the code at b8929f48, and moved its verifiedAt from 2026-09-09 to 2026-11-05. status stays live; evidence, producer, every other row and the file _note parse identical. Builders counted by scanning production SeedLoaderRequestSchema parses: SIX, the same number the old note gave. A control scan of every `new SeedLoaderService(` finds three more constructions, all buildDependencyGraph-only (marketplace sampleDataInScope, handlePurge, handleSampleDataCount), so none is a builder. Four builders supply a locale: (1) runtime app-plugin.ts#start boot seed and (2) #registerHotReloadSeeder, both the app's i18n.defaultLocale via resolveSeedLocale; (3) app-plugin.ts#start per-org seed-replayer, via resolveSeedLocaleForLoad (org localization.locale when set, then the founder's sys_user.locale, then the app default); (4) cloud-connection marketplace-install-local-plugin.ts#runInlineSeed, via resolveSeedLocaleForLoad, which serves the install, the sample-data reseed, the restart heal and the plugin's own fallback per-org replayer. Two pass none: (5) runtime domains/packages.ts#applyPublishedSeeds (package apply) and (6) metadata-protocol protocol-publish-batch.ts#applySeedBodies (draft publish; protocol.ts#applySeedBodies now delegates to it, so the card's path moved). The 2026-09-10 #17011 ruling paragraph is byte-identical (653 chars). A dated NARROWED 2026-11-05 sentence after it says the maintainer's ruling A on #30281, carried out by PR #30346, moved the marketplace-install path across that bound, which now covers package apply and draft publish only. The warnOnUnresolvedLocaleScope reason was checked against the code and extended: it now covers an install, reseed, heal or replay on which no rung of resolveSeedLocaleForLoad answers. Patch changeset added, because liveness ships in the spec package files[] and Check Changeset requires one.", "tests": "No test file added or changed: the edit is ledger prose, and no test or gate pins the note text (the liveness gate reads no note; git grep for the note's phrases outside seed.json finds only #30347's changeset and the docs page). Checked instead: the JSON parses; the diff is exactly 2 lines in seed.json; status, evidence, producer, evidenceScope, every other row and _note are parse-identical (asserted by the edit script); the old ruling paragraph occurs once and byte-identical in the new note; every path#symbol the new note names exists in its file at b8929f48 (15 anchors, each grep -c 1 or more); grep for control bytes over seed.json finds 0. No ablation: no tested behaviour changed.", "gates": "All on head 0cd1455d86. check:liveness (pnpm --filter @objectstack/spec check:liveness): exit 0, both closing lines pass (1172 live, 1 experimental, 83 dead, 42 planned). dispatch-gates --commands --repo objectstack-ai/objectstack: 55 commands over 2 paths (+14/-2). Pass 1, no build: 51 x exit 0 and 4 x exit 3 (PREREQUISITE NOT MET, no dist): check:dts-closure, check:dual-build-cjs-loads, check:lean-entry-closure, check:sourcemap-no-sources-content. Build: os-verify-lock.sh -c 'pnpm build --concurrency=2', 118/118 tasks, VERDICT command-exit 0, held 577s; the working tree was clean afterwards. Pass 2, built tree: 55 x exit 0. dts 295/295 present; 116 require entries load; 2 lean conditions measured; 1276 maps embed no source. --ran: 55 derived, 55 run, 0 NOT-MEASURED (derived zero, all 55 recorded an exit code), 0 UNRUN; exit 0. Full family-by-family table in the PR body (Verification, details block). origin/main moved to 47c457b23c (9 commits) during the run. None of them touches seed.json or any cited file, and the builder recount at that tip is unchanged (6 parses, 9 constructions). CI families (artifact rosters, wide populations, path-scheduled jobs, type-check lanes) are the PR's check-runs, which had not concluded when this report was written.", "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm", "mcp_calls": "0", "api_writes": "2 REST writes, both through the fleet-write relay (POST /repos/objectstack-ai/objectstack/dispatches): (1) pr_create, which created draft PR #30666 with no labels and no assignees, read back byte-identical; (2) this os-dev-report comment, via post-stamped.mjs, on POST /repos/objectstack-ai/objectstack/issues/30607/comments. Plus 2 git pushes (not REST): the empty-branch probe and the commit.", "open_questions": [], "security_findings": "none", "out_of_scope_findings": [ "class: none (ledger prose drift, outside the file surface) · reach: n/a · evidence: the same seed.json locale row's `producer` field says resolveSeedLocale is threaded into all THREE AppPlugin SeedLoaderRequests, the per-org replayer among them. Since PR #30346 the replayer passes resolveSeedLocaleForLoad's answer and uses resolveSeedLocale only as its last rung (packages/runtime/src/app-plugin.ts, the replayer closure in start). dedupe words: seed.json producer resolveSeedLocale replayer · carrier: none", "class: none (stale prose line citations, outside the file surface) · reach: n/a · evidence: seed.json's file-level _note cites packages/runtime/src/app-plugin.ts:832, :971 and packages/metadata-protocol/src/protocol.ts:6764 for the seed-load calls. At b8929f48 those lines are a closing brace, a datasource docblock line and a search docblock line; the calls are at app-plugin.ts L1856/L1951/L2376, and the publish apply has moved to protocol-publish-batch.ts. The gate bounds path:NNN only in evidence/producer. dedupe words: seed.json _note line citations app-plugin.ts:832 · carrier: none" ], "deviations": [ "main not merged into the branch before the PR opened (AGENTS.md multi-agent section 10). The 9 new commits touch nothing this diff or note depends on: measured by git log over the cited paths, a builder recount at 47c457b23c, and the --ran line reading. The merge queue tests the merged tree.", "The PR body follows the dispatch prompt where it differs from os-dev.md: the attribution HTML comment as line 1 and Fixes on line 6 (os-dev.md: Fixes first); the sections What changes / Verification / Acceptance notes with no Tests section; and the dispatch's footer form (Generated with Claude Code link plus session URL) instead of AGENTS.md's _Generated by_ session-URL form.", "In the PR body only, PR #30346's closing line is spelled in words so that no closing keyword points at a second card. The note in seed.json keeps the code form." ] }objectstack-fleet commentedon Nov 5, 2026
domain:spec#2 · os-sales · session_01L6bhgVugtCCwBs98FeR27P
ACCEPT → PR #30666 comment 6670478549 · head
0cd1455d86895a2fa96f7eb8bbb466a07698c908· contract review not owed (no contract face:Clause-②: no, no narrowing, nopackages/spec/src/**, no governed text) · 2026-11-05T21:51ZGenerated by Claude Code
objectstack-fleet commentedon Nov 5, 2026
domain:spec#2 · os-sales · session_01L6bhgVugtCCwBs98FeR27P
Landed · PR #30666 · merge
0c9aa8255403322b47bb24d156d255606e014b4f· 2026-11-05T22:39ZGET /repos/objectstack-ai/objectstack/issues/30666/timelineadded_to_merge_queue22:13:25Z →removed_from_merge_queue22:38:04Z,merged22:38:04Zorigin/mainby content (new)git grep -c "RE-COUNTED 2026-11-05" origin/main -- packages/spec/liveness/seed.jsonorigin/mainby content (retired)git grep -c "runInlineSeed (marketplace install)" origin/main -- packages/spec/liveness/seed.jsonState: the card is closed
completedbyFixes #30607, andpm:dispatchedis removed in this stroke. The two stale pointers the dev noted in the same file (the row'sproducerparenthetical, the file-level_noteline numbers) were dropped in the ACCEPT (6670478549 item 5) with their reasons. Nothing else is owed.Generated by Claude Code