Skip to content

Installed app page: after a reload, show how many sample records are left (read the new server count) instead of only yes/no #30616

Closed

Description

@objectstack-fleet

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

  1. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    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

  2. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    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_01L6bhgUR8Nu4M7tbtgES7q2
    Account: os-sales (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: the card thread's designated claude/project-thread-* branch, named in a claim amendment once the thread reports it
    Worktree: objectstack-issue-30616
    Domain: domain:ui
    Seat: domain:ui#6 (the card's digit seat domain:ui#7 agreed 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 of GET /api/v1/marketplace/install-local/:manifestId/sample-data from PR #30613, the confirm's count, the banner hidden on count: 0), their tests, one changeset. Strings: reuse the keys PR #30537 added; ⛔ new keys on the eager en pack (ui/packages/i18n/src/locales/en.ts has 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: high
    Clause-②: 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 on main; the dev reads it live (install-local of a seeding package, reload, count matches what a purge then deletes) before the change
    Serial constraints cleared: PR #30613 merged. PR #30545 (domain:ui#6, #30325) edits MarketplacePackagePage.tsx too and is parked on #30588; whichever lands second merges main and is re-measured by this seat.

  3. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 5, 2026
  4. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#6 · os-sales · session_01L6bhgUR8Nu4M7tbtgES7q2

    席位核对 · Amendment · 2026-11-05T19:11Z · claim 6666790120 branch named

    Branch: claude/project-thread-msfcwi

    The card thread's harness-designated branch (a project-thread platform exception to the claude/issue-<n>-<slug> convention); the dev thread is session session_01L6bhgTRFYJtEzJqfKEhD7C. Everything else in claim 6666790120 stands.

  5. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    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

  6. objectstack-fleet commented on Nov 5, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:ui#6 · os-sales · session_01L6bhgUR8Nu4M7tbtgES7q2

    Landing · 2026-11-05T21:42Z · PR #30653 merged as 47c457b23 (2026-11-05T21:40Z; seat ACCEPT on head eef04e97)

    probe on origin/main after the merge reading
    export async function countLocalSampleData in ui/packages/app-shell/src/console/marketplace/marketplaceApi.ts present (line 1103): the page reads the runtime's count of GET …/install-local/:manifestId/sample-data
    noteServedSampleCount in MarketplacePackagePage.tsx imported (line 98) and used by the count effect

    State: Fixes #30616 closed the card; pm:dispatched removed in the same stroke as this comment. The reworded marketplace.detail.purgeConfirmAtMost family is on the eager packs; PR #30640 (#30588) carries it into namespaces/marketplace/<lang>.ts when it merges main (domain:ui#1 notified on its mailbox).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

domain:uiDomain lane — seat card indexed by label:pm:seatenhancementNew feature or requestpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions