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
After installing an app, say how much sample data was loaded and offer clearing it right there #30323
Filing gate: ③ the maintainer's direct order, verbatim: 「你发现的问题都立卡,安全问题总专用的安全密卡通道,需要进一步分析的进一步测试,还是没有把握的用决策卡。」 (2026-11-05). Found in a real-user browser walkthrough of Setup on main04f36b63f8, with a test app and a local test deployment.
The maintainer's ruling on this card, verbatim: 「我觉得安装应用市场应用的时候是需要有初始数据的,这样客户才能看得到效果,但是呢,应该有界面功能能够帮助他清理数据」 (2026-11-05). So sample data stays on by default. This card is only about making the cleanup easy to find.
Business reason. A customer tries an app with data in it, then wants to start for real. Today they have to know where to look, or they keep fake customers and revenue on their dashboards.
Reader. The UI lane dev, in ui/packages/app-shell/src/console/marketplace/MarketplacePackagePage.tsx.
Duplicates. Searched sample data install marketplace clear (48 hits) and purge sample data notice after install (15 hits). They are QA run anchors, #30281 (seed locale) and a closed docs card; none has this subject.
Measured
Installing HotCRM v6.0.0 loaded 369 sample records, and the executive dashboard opened with 「年度累计收入 ¥1,290,000」.
The success note says nothing about it. It reads 「已将 v6.0.0 安装到本运行时。"HotCRM" 应该已经出现在应用切换器中。」 and then offers the permission grant.
Clearing is hidden. It exists only in the ⋯ menu of the marketplace detail page, as 清除示例数据. Someone working inside HotCRM has no sign that the records are sample data, or where to remove them.
The confirm gives no count. It is a native browser dialog: 「删除此应用预置的所有示例记录?用户自行添加的记录不会被删除。」 The count appears only afterwards.
The clearing itself is right, and must stay so. It deleted 369 records and kept a record I added and a sample record I had edited.
Reinstalling reseeds. After clearing, an install brought the samples back, and the edited record then sat beside a fresh copy of its original.
An AI chat cleanup card also exists (console.ai.sampleDataCleanup*). I did not test it.
Expected
The install note says how many sample records were loaded and has a clear action in place.
A way to reach the same action from the installed app's own pages, chosen by the dev from existing generic blocks.
The confirm says how many records will go, in the console's own dialog.
Re-running the install says plainly that sample data comes back.
应该已经出现 reads as a guess. Use a definite sentence when the runtime answered that it loaded.
Who can see the sample data at all is a separate question: see the decision card filed with this batch.
Claim: PM loop round 6 · 2026-11-05T13:44Z
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-30323
Domain: domain:ui
Seat: domain:ui#6
File surface: ui/packages/app-shell/src/console/marketplace/** (MarketplacePackagePage.tsx install note and sample-data actions, marketplaceApi.ts), the console's own confirm dialog in place of the native one, a reach from the installed app's pages through an existing generic block, their tests, language-pack values in ui/packages/i18n, one root .changeset/ file. ⛔ packages/**: if the install answer carries no seeded-record count, the dev measures and stops with that reading (stop on breach; explain in the report). Sample data stays ON by default (maintainer ruling quoted on the card); clearing keeps its present rule (user-added and user-edited records stay)
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: the console's local install result and sample-data actions in ui/packages/app-shell/src/console/marketplace | the runtime's install and purge answers (what they count) | every administrator installing a marketplace app into a running deployment; reached on HotCRM v6.0.0 (369 sample records, card body)
Thread-read: 6651988931
Premise: holds per the card's live measurement on main04f36b63f8; the dev re-measures the install note, the ⋯ menu entry and the native confirm on origin/main70981e63ed first
Serial constraints cleared: PR #30460 (domain:ui#5, #30326 ui half, same file) merged; no open PR touches console/marketplace/** (read over the 50 open PRs' file lists at claim time). #30325 (install confirm, same file) is held by this seat and starts after this card's PR lands. The decision card filed with the batch on who may see sample data is not this card's question.
席位核对 · Amendment · 2026-11-05T13:46Z · claim 6659546812 branch named
Branch: claude/project-thread-6nrbkq
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_01L6bhgVKAj6nUY3DxWKsvXb. Everything else in claim 6659546812 stands.
{
"issue": 30323,
"status": "done",
"branch": "claude/project-thread-6nrbkq",
"pr": "https://github.com/objectstack-ai/objectstack/pull/30537",
"session": "session_01L6bhgVKAj6nUY3DxWKsvXb",
"premise_still_valid": true,
"summary": "Premise measured live on base 70981e63: POST /api/v1/marketplace/install-local answers data.seeded (mode inline, inserted, updated, skipped, errors), so the stop condition does not apply. The install note now says how many sample records the install left in place, with a Purge sample data button in place; a reinstall adds that installing again reloads the sample data; localSuccess reads definite in 10 packs. Both purge paths open the console's AlertDialog instead of window.confirm, saying at most N records go when this session knows the install's count. Leaving the package page raises the console banner notification for the app, whose action returns to the page and opens the confirm. Sample data stays on by default and the purge rule is unchanged, per the maintainer ruling. The PR says Part of, not Fixes: see open_questions.",
"tests": "New MarketplacePackagePage.sampleDataNotice-30323.test.tsx: 12/12 green (real marketplaceApi over one stubbed fetch, window.confirm stubbed to throw). Moved pins: offlineLocalMenu-11627 and sampleDataRefusal-10432 click the dialog confirm; de-quote-pairing-3876 count 104 to 105. vitest run of packages/app-shell/src/console/marketplace + packages/i18n + PackagesPage: Test Files 164 passed (164), Tests 2028 passed, 13 skipped. Type-check app-shell + i18n exit 0. Ablations via scripts/ablation-replace.mjs, restored each time: sampleRecordsLoaded returns null gives 6/12 red; purge without dialog gives 3 red; banner raises nothing gives 1 red.",
"gates": "dispatch-gates --commands on 1470c715: 35 families, each run, exit 0 each; --ran 35 derived, 35 run, 0 NOT-MEASURED, 0 UNRUN. check:changeset-fixed exit 0 (roster under .changeset). check:i18n-keys, check:i18n-drift, check:i18n-dead-keys exit 0. After merging origin/main (eaf46b57, clean) the derivation is the same 35 and the tests, type-check, i18n, type-check-coverage, type-check-debt, nul-bytes, published-files, empty-changeset, changeset-no-major reruns exit 0. CI on eaf46b57 at report time: Test Core success, Dogfood Regression Gate success, Governed Surface Queue Guard success, Auto Label success, filter success; Lint, Type Check, Build UI Deps and Live E2E UI in_progress. The session watches the PR and fixes a red run.",
"dogfood_battery": "n/a — no ! in the PR title and no narrowing arm",
"mcp_calls": "reads only: issue_read x2, pull_request_read get_check_runs x1; no write tool",
"api_writes": "2 — pr_create via fleet-write relay (run 42046752020, PR 30537, read-back identical, no assignees); this os-dev-report comment via post-stamped",
"open_questions": [
{
"question": "Close the card with this PR, or keep it open for the after-reload count?",
"options": [
"A Keep Part of: the confirm count and the banner hold for installs made in this console session; after a reload no door serves a count (purge has no dry run, the listing's withSampleData is presence only), so a server count in packages/cloud-connection is a follow-up card",
"B Seat rewrites the PR line to Fixes 30323, accepting the session-scoped reading as the card's acceptance"
],
"recommendation": "A, because the card's confirm says how many records will go and that is only true in-session; the remainder is outside this claim's file surface"
},
{
"question": "The PR attribution block links this card thread, not the ui seat 6 thread named in the dispatch",
"options": ["A Leave it: the harness session context requires this thread", "B Seat edits the link"],
"recommendation": "A"
}
],
"security_findings": "none",
"out_of_scope_findings": [
"class: none (remainder of this card, not a defect) · after-reload sample-data count: purge door POST install-local/:id/purge-sample-data has no dry run and the install-local listing answers withSampleData presence only, so no console can show a count after the install answer · carrier: seat 6, for a server-lane card in packages/cloud-connection · dedupe words: sample data count, purge dry run, withSampleData",
"class: none (remainder) · a standing per-app reach across reloads (the banner is session-scoped) needs a mount outside console/marketplace · carrier: seat 6 · noted, not filed",
"class: none · cloud install path installPackage answers no sample-data count, so its install note is unchanged; its purge confirm is the new dialog without a count · carrier: cloud",
"coordination: card 30325 (branch claude/project-thread-o1qmt2) edits the same doInstallLocal entry and button area of MarketplacePackagePage.tsx, reading the pre-install count from the manifest in a new installPreview.ts and leaving sampleDataNotice.ts alone; whichever lands later merges main first · carrier: seat 6"
]
}
Activity
objectstack-fleet commentedon Nov 5, 2026
triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U
Path: none
Triage: first-touch audit · p3 ·
domain:ui·pm:queue· 2026-11-05T07:06Z⛔ Not a claim.
Generated by Claude Code
objectstack-fleet commentedon Nov 5, 2026
domain:ui#6 · os-sales · session_01L6bhgUR8Nu4M7tbtgES7q2
Claim: PM loop round 6 · 2026-11-05T13:44Z
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-30323Domain:
domain:uiSeat:
domain:ui#6File surface:
ui/packages/app-shell/src/console/marketplace/**(MarketplacePackagePage.tsxinstall note and sample-data actions,marketplaceApi.ts), the console's own confirm dialog in place of the native one, a reach from the installed app's pages through an existing generic block, their tests, language-pack values inui/packages/i18n, one root.changeset/file. ⛔packages/**: if the install answer carries no seeded-record count, the dev measures and stops with that reading (stop on breach; explain in the report). Sample data stays ON by default (maintainer ruling quoted on the card); clearing keeps its present rule (user-added and user-edited records stay)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: the console's local install result and sample-data actions in
ui/packages/app-shell/src/console/marketplace| the runtime's install and purge answers (what they count) | every administrator installing a marketplace app into a running deployment; reached on HotCRM v6.0.0 (369 sample records, card body)Thread-read: 6651988931
Premise: holds per the card's live measurement on
main04f36b63f8; the dev re-measures the install note, the ⋯ menu entry and the native confirm onorigin/main70981e63edfirstSerial constraints cleared: PR #30460 (
domain:ui#5, #30326 ui half, same file) merged; no open PR touchesconsole/marketplace/**(read over the 50 open PRs' file lists at claim time). #30325 (install confirm, same file) is held by this seat and starts after this card's PR lands. The decision card filed with the batch on who may see sample data is not this card's question.objectstack-fleet commentedon Nov 5, 2026
domain:ui#6 · os-sales · session_01L6bhgUR8Nu4M7tbtgES7q2
席位核对 · Amendment · 2026-11-05T13:46Z · claim 6659546812 branch named
Branch:
claude/project-thread-6nrbkqThe card thread's harness-designated branch (a project-thread platform exception to the
claude/issue-<n>-<slug>convention); the dev thread is sessionsession_01L6bhgVKAj6nUY3DxWKsvXb. Everything else in claim 6659546812 stands.objectstack-fleet commentedon Nov 5, 2026
domain:ui#6 · os-sales · session_01L6bhgVKAj6nUY3DxWKsvXb
os-dev-report
{ "issue": 30323, "status": "done", "branch": "claude/project-thread-6nrbkq", "pr": "https://github.com/objectstack-ai/objectstack/pull/30537", "session": "session_01L6bhgVKAj6nUY3DxWKsvXb", "premise_still_valid": true, "summary": "Premise measured live on base 70981e63: POST /api/v1/marketplace/install-local answers data.seeded (mode inline, inserted, updated, skipped, errors), so the stop condition does not apply. The install note now says how many sample records the install left in place, with a Purge sample data button in place; a reinstall adds that installing again reloads the sample data; localSuccess reads definite in 10 packs. Both purge paths open the console's AlertDialog instead of window.confirm, saying at most N records go when this session knows the install's count. Leaving the package page raises the console banner notification for the app, whose action returns to the page and opens the confirm. Sample data stays on by default and the purge rule is unchanged, per the maintainer ruling. The PR says Part of, not Fixes: see open_questions.", "tests": "New MarketplacePackagePage.sampleDataNotice-30323.test.tsx: 12/12 green (real marketplaceApi over one stubbed fetch, window.confirm stubbed to throw). Moved pins: offlineLocalMenu-11627 and sampleDataRefusal-10432 click the dialog confirm; de-quote-pairing-3876 count 104 to 105. vitest run of packages/app-shell/src/console/marketplace + packages/i18n + PackagesPage: Test Files 164 passed (164), Tests 2028 passed, 13 skipped. Type-check app-shell + i18n exit 0. Ablations via scripts/ablation-replace.mjs, restored each time: sampleRecordsLoaded returns null gives 6/12 red; purge without dialog gives 3 red; banner raises nothing gives 1 red.", "gates": "dispatch-gates --commands on 1470c715: 35 families, each run, exit 0 each; --ran 35 derived, 35 run, 0 NOT-MEASURED, 0 UNRUN. check:changeset-fixed exit 0 (roster under .changeset). check:i18n-keys, check:i18n-drift, check:i18n-dead-keys exit 0. After merging origin/main (eaf46b57, clean) the derivation is the same 35 and the tests, type-check, i18n, type-check-coverage, type-check-debt, nul-bytes, published-files, empty-changeset, changeset-no-major reruns exit 0. CI on eaf46b57 at report time: Test Core success, Dogfood Regression Gate success, Governed Surface Queue Guard success, Auto Label success, filter success; Lint, Type Check, Build UI Deps and Live E2E UI in_progress. The session watches the PR and fixes a red run.", "dogfood_battery": "n/a — no ! in the PR title and no narrowing arm", "mcp_calls": "reads only: issue_read x2, pull_request_read get_check_runs x1; no write tool", "api_writes": "2 — pr_create via fleet-write relay (run 42046752020, PR 30537, read-back identical, no assignees); this os-dev-report comment via post-stamped", "open_questions": [ { "question": "Close the card with this PR, or keep it open for the after-reload count?", "options": [ "A Keep Part of: the confirm count and the banner hold for installs made in this console session; after a reload no door serves a count (purge has no dry run, the listing's withSampleData is presence only), so a server count in packages/cloud-connection is a follow-up card", "B Seat rewrites the PR line to Fixes 30323, accepting the session-scoped reading as the card's acceptance" ], "recommendation": "A, because the card's confirm says how many records will go and that is only true in-session; the remainder is outside this claim's file surface" }, { "question": "The PR attribution block links this card thread, not the ui seat 6 thread named in the dispatch", "options": ["A Leave it: the harness session context requires this thread", "B Seat edits the link"], "recommendation": "A" } ], "security_findings": "none", "out_of_scope_findings": [ "class: none (remainder of this card, not a defect) · after-reload sample-data count: purge door POST install-local/:id/purge-sample-data has no dry run and the install-local listing answers withSampleData presence only, so no console can show a count after the install answer · carrier: seat 6, for a server-lane card in packages/cloud-connection · dedupe words: sample data count, purge dry run, withSampleData", "class: none (remainder) · a standing per-app reach across reloads (the banner is session-scoped) needs a mount outside console/marketplace · carrier: seat 6 · noted, not filed", "class: none · cloud install path installPackage answers no sample-data count, so its install note is unchanged; its purge confirm is the new dialog without a count · carrier: cloud", "coordination: card 30325 (branch claude/project-thread-o1qmt2) edits the same doInstallLocal entry and button area of MarketplacePackagePage.tsx, reading the pre-install count from the manifest in a new installPreview.ts and leaving sampleDataNotice.ts alone; whichever lands later merges main first · carrier: seat 6" ] }Generated by Claude Code