Description
domain:server#2 · os-bill · session_01Utp6Cbvcmv8YWFhFJwzjKL
Filing gate: ① the console half of a server change, named in ui#6's release of #30323 (comment on #30323, 2026-11-05T16:17Z: "that console change, if any, comes back to domain:ui as its own card"). ⛔ Not a claim. Suggested grade: p3. ⛔ Serial after PR #30613 merges (the server read this card consumes).
Dedupe: sample data count console, withSampleData count. Nearest: #30323 (its ui half landed in PR #30537; its server half is PR #30613). New.
What happens
Since PR #30537, the console says how many sample records an install loaded and offers Clear sample data, but only for an install made in the current browser session. After a reload it knows only the list's withSampleData yes/no, so the banner and the clear confirm cannot say how many records will go.
What the server now offers (once PR #30613 lands)
GET /api/v1/marketplace/install-local/:manifestId/sample-data answers { manifestId, count, unidentified }: count is exactly the number of rows a purge would delete right now (same matcher, same keep-rules), unidentified the seed records the purge would report and not delete. Same permission as the purge (manage_metadata); 0 for a package without samples.
Ask
On the marketplace package page and the sample-data banner, read the count on any visit (not only after an in-session install), so the confirm says "N records will be deleted" from the server's number. Keep the in-session install count as today when it is fresher. Pin: a reload shows the server count; count: 0 hides the banner.
Reader: domain:ui (ui/packages/app-shell/src/console/marketplace/MarketplacePackagePage.tsx and the banner PR #30537 added).
Activity
objectstack-fleet commentedon Nov 5, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: audit · p3 kept ·
domain:ui· 2026-11-05T19:00Z⛔ Not a claim.
Generated by Claude Code
objectstack-fleet commentedon Nov 5, 2026
domain:ui#6 · os-sales · session_01L6bhgUR8Nu4M7tbtgES7q2
Claim: PM loop round 9 · 2026-11-05T19:07Z · the whole card (the post-reload sample count on the package page and the sample-data banner)
Session:
session_01L6bhgUR8Nu4M7tbtgES7q2Account:
os-sales(the seat's linked user asGET /useranswers it; the card's assignee)Branch: the card thread's designated
claude/project-thread-*branch, named in a claim amendment once the thread reports itWorktree:
objectstack-issue-30616Domain:
domain:uiSeat:
domain:ui#6(the card's digit seatdomain:ui#7agreed in-session; the lane's digit split is lifted for idle seats)File surface:
ui/packages/app-shell/src/console/marketplace/{MarketplacePackagePage.tsx,marketplaceApi.ts,sampleDataNotice.ts,SampleDataLeaveBanner.tsx}(the read ofGET /api/v1/marketplace/install-local/:manifestId/sample-datafrom PR #30613, the confirm's count, the banner hidden oncount: 0), their tests, one changeset. Strings: reuse the keys PR #30537 added; ⛔ new keys on the eagerenpack (ui/packages/i18n/src/locales/en.tshas 63 gzip bytes left under its ceiling, #30588) — if a new string is unavoidable, stop and report. ⛔packages/**, the purge's matcher or keep-rules, the cloud-env sample-data actions (stop on breach; explain in the report)Container & model:
M,mode:thread,model: default(dispatch-gates --tier: no path-derived mandate; floor sonnet · default opus · ceiling fable),effort: highClause-②: no
Metadata-protocol: none
Responsibility: an administrator sees how many sample rows a purge would delete on any visit, not only right after an in-session install | none | every administrator of a runtime with an installed marketplace app that seeded samples
Thread-read: 6666627992
Premise: PR #30613 merged as
6e8ec732bb, so the server count is onmain; the dev reads it live (install-local of a seeding package, reload, count matches what a purge then deletes) before the changeSerial constraints cleared: PR #30613 merged. PR #30545 (
domain:ui#6, #30325) editsMarketplacePackagePage.tsxtoo and is parked on #30588; whichever lands second merges main and is re-measured by this seat.objectstack-fleet commentedon Nov 5, 2026
domain:ui#6 · os-sales · session_01L6bhgUR8Nu4M7tbtgES7q2
席位核对 · Amendment · 2026-11-05T19:11Z · claim 6666790120 branch named
Branch:
claude/project-thread-msfcwiThe card thread's harness-designated branch (a project-thread platform exception to the
claude/issue-<n>-<slug>convention); the dev thread is sessionsession_01L6bhgTRFYJtEzJqfKEhD7C. Everything else in claim 6666790120 stands.fix(i18n): the sample-data purge confirm's count line holds for the r…
chore(changeset): the package page's sample-data count after a reload (…
test(console): the marketplace page suites answer the sample-data cou…
objectstack-fleet commentedon Nov 5, 2026
domain:ui#6 · os-sales · session_01L6bhgTRFYJtEzJqfKEhD7C
os-dev-report
{ "issue": 30616, "status": "done", "branch": "claude/project-thread-msfcwi", "pr": "https://github.com/objectstack-ai/objectstack/pull/30653", "session": "session_01L6bhgTRFYJtEzJqfKEhD7C", "premise_still_valid": true, "summary": "The package page of a local install now reads GET /api/v1/marketplace/install-local/:manifestId/sample-data (PR #30613) on every visit and after every listing read, and records the answer in the existing session record: above zero it is the count the purge confirm draws and the leave banner is raised from; 0 drops the record and its banner. A read that began before an install, reseed or purge answered in this session is ignored (per-package generation), and a failed read keeps the in-session count. Copy ruling A from domain:ui#6: no new key; marketplace.detail.purgeConfirmAtMost reworded in all 10 packs to an upper bound true for both sources (en 'Up to {{count}} sample record(s) will be deleted.'); eager en gzip 59,951 -> 59,942.", "tests": "Head eef04e97. vitest packages/i18n/ + packages/app-shell/src/console/marketplace/: Test Files 146 passed (146), Tests 1898 passed, 13 skipped. sampleDataNotice-30323 harness 20/20 (8 new). Ablation via scripts/ablation-replace.mjs (count read replaced by null): anchor 1->0, blob 3ab826d5e075->87d8ee093b8e, Tests 5 failed | 15 passed (20); restored blob == HEAD, git diff HEAD empty (src import, no build between). app-shell type-check exit 0 (5581ff5d; merge touched no app-shell/i18n file). ui scripts/ vitest: 170 files passed. Live: showcase dev + fake marketplace + console vite: count 3 == purge deleted 3, count 0 after, user row kept; browser fresh load shows 'Up to 13 sample records will be deleted.' and the leave banner; after purge no banner. NOT MEASURED: the whole @object-ui/app-shell suite (2,303 files, stopped at 40 min on maxWorkers=2), declared narrowing to marketplace + i18n; Test UI runs it.", "gates": "dispatch-gates --commands: 35 families, each recorded exit 0 on eef04e97 (sdui manifest + ui scripts vitest run after the merge); --ran: 35 run, 0 NOT-MEASURED, 0 UNRUN. ui: check-i18n-en-drift --base origin/main exit 0, check:i18n-keys exit 0, check-eager-closure-budget exit 0. CI check-runs: in_progress at report time.", "dogfood_battery": "n/a — no ! in the PR title and Clause-②: no", "mcp_calls": "4 — issue_read x2 (get, get_comments), pull_request_read x1 (get #30640), no write tool", "api_writes": "2 via fleet-write relay — pr_create (POST /repos/objectstack-ai/objectstack/pulls, draft), this os-dev-report comment (POST /repos/objectstack-ai/objectstack/issues/30616/comments)", "open_questions": [], "security_findings": "none", "out_of_scope_findings": [ "carrier: PR #30640 (domain:ui#1) · noted, not filed: it moves the marketplace group into a lazy namespace; whichever of #30640 and #30653 lands second carries the reworded purgeConfirmAtMost values into namespaces/marketplace/CODE.ts", "carrier: none · noted, not filed: the served `unidentified` count is read but not drawn (no string budget in the eager en pack until #30588 lands)" ], "deviations": "Waited once on a process by pgrep -f name match (read-only wait, no kill); every kill was by recorded PID and its /proc children. The first commit (wip) carries no trailer pair; later commits carry the model-free pair." }Generated by Claude Code
objectstack-fleet commentedon Nov 5, 2026
domain:ui#6 · os-sales · session_01L6bhgUR8Nu4M7tbtgES7q2
Landing · 2026-11-05T21:42Z · PR #30653 merged as
47c457b23(2026-11-05T21:40Z; seat ACCEPT on headeef04e97)origin/mainafter the mergeexport async function countLocalSampleDatainui/packages/app-shell/src/console/marketplace/marketplaceApi.tsGET …/install-local/:manifestId/sample-datanoteServedSampleCountinMarketplacePackagePage.tsxState:
Fixes #30616closed the card;pm:dispatchedremoved in the same stroke as this comment. The rewordedmarketplace.detail.purgeConfirmAtMostfamily is on the eager packs; PR #30640 (#30588) carries it intonamespaces/marketplace/<lang>.tswhen it merges main (domain:ui#1notified on its mailbox).