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 }}
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
Repository navigation
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
import wizard: the finished step's subtitle still says "Review data before importing." #13124
Filing gate: ① a user-visible UX defect with a named landing point and a reproduction (pm:queue class).
Reader: the objectui lane owning packages/plugin-grid/src/ImportWizard.tsx — the fix PR there.
Dedupe (open AND closed, semantic search on objectstack-ai/objectui): "import wizard result step subtitle still says review data before importing" → 3 hits (#13015, #12697, #2163 — all closed, other import defects); none covers this item.
reach: measured in the console UX walkthrough — stock showcase with --seed-admin, framework objectstack-ai/objectstack@54159fd742e5, console pin objectui@12dc7b47c340 (dist stamp equal to the pin), Chromium at 1440x900; re-checked against objectui main source at df943a2 when found and ed28057 when split (the cited files are unchanged between the two).
type: Bug
Split out of #13115 (item 3), which folded fifteen independent defects into one card under the per-fire filing quota, which the maintainer has since ruled does not bind a concentrated test run such as a walkthrough. Split by the 18.0 QA wave dispatch session session_01CfRDy7SuTfUqaTu2AEH2Hi, on the maintainer's instruction there, verbatim: 「#13115 你可以拆」.
Where
Showcase → Tasks → Import → upload a CSV → Next → Import.
Actual
Under "Import Complete / 1 created / 1 skipped" the dialog subtitle still reads "Review data before importing."
Expected
A subtitle that matches the done state, or none.
Source
packages/plugin-grid/src/ImportWizard.tsx — the DialogDescription falls through to grid.import.previewDescription on the result step.
Claim: PM loop round 3 (priority:p3, bug)
Session: session_014MXhk1yjWh37d634hLy3p7
Account: huangyiirene (the seat's linked user as GET /user answers it; the card's assignee)
Branch: claude/issue-13124-import-done-subtitle
Worktree: objectui-issue-13124
Domain: domain:ui
Seat: domain:ui#1
File surface: packages/plugin-grid/src/ImportWizard.tsx (the dialog's DialogDescription, which falls through to grid.import.previewDescription, "Review data before importing.", on the result step; the inline default at :63, objectui main4c36eab); the grid.import.* copy in the i18n table only if a done-state sentence is owed; tests beside it; and one .changeset/13124-import-done-subtitle.md. Stop on breach; explain in the report.
Container & model: S, mode:subagent, model: opus (default tier; dispatch-gates --tier --repo objectstack-ai/objectui over this surface reads no path-derived mandate)
Clause-②: yes
Responsibility: the risk is produced by objectui's own Import Wizard, whose dialog subtitle keeps the preview step's sentence on the finished step; the platform path that covers it: none (copy only); who reaches it: every console user who finishes an import.
Thread-read: none
The card had no comment at this claim. It is split from objectui#13115 item 3, under the maintainer's 「#13115 你可以拆」.
Serial constraints cleared: objectui#13156 (PR #13170, d05f33b), the serial predecessor named on its claim, landed on ImportWizard.tsx. No open objectui PR and no in-flight claim touches the file.
Why Clause-②: yes: the card's Expected is "A subtitle that matches the done state, or none". A done-state sentence would add a grid.import.* key and widen @object-ui/i18n's exported TranslationKeys. 「拿不准 ⇒ 按 yes」. If the delivered diff adds no key, the dev says so and the seat corrects the line to no at ACCEPT.
{
"issue": 13124,
"status": "done",
"branch": "claude/issue-13124-import-done-subtitle",
"pr": "https://github.com/objectstack-ai/objectui/pull/13186",
"session": "session_014MXhk1yjWh37d634hLy3p7 (subagent: the parent's harness-stamped id)",
"premise_still_valid": true,
"summary": "The Import Wizard's result screen no longer shows \"Review data before importing.\": on the result screen the header renders no DialogDescription, and the result screen's own headline (existing keys grid.import.importComplete / grid.import.importCancelled) is rendered as the dialog's DialogDescription (RESULT_HEADLINE_CLASS keeps its look), so aria-describedby names the finished state and exactly one description is mounted in every state. Upload, mapping, preview and history subtitles are unchanged and pinned as controls. No key was added to any pack and nothing is exported: the claim's `Clause-②: yes` was copied verbatim into the PR body and should be corrected to `no` at ACCEPT. H1 confirmed (every path that sets result leaves step at 'preview', so the else-arm served preview, importing, background job and every result alike); H2 partly falsified: @radix-ui/react-dialog 1.1.23 emits no Description warning at all, but it drops aria-describedby when no Description is mounted, which the repo already treats as an a11y gap (objectui#3404's sr-only description), so plain 'none' was rejected; H3 and H4 hold.",
"tests": "New packages/plugin-grid/src/ImportWizard.doneSubtitle-13124.test.tsx (3 tests: controls upload/mapping/preview each the aria-describedby text; completed import 1 created / 1 skipped shows no preview sentence and its description is the Import Complete headline on exactly one element; cancelled background import likewise with Import cancelled; expected copy read by key from IMPORT_DEFAULT_TRANSLATIONS). On the fix: 'Test Files 1 passed (1) / Tests 3 passed (3)'. Ablation, fix committed first (041498e), test reads src via relative import so no dist involved: leg A = ImportWizard.tsx reverted whole to BASE 4c36eab (mutated blob == BASE blob 50746e07, guard count 1 to 0): 'Tests 2 failed | 1 passed (3)', failure 'expected document not to contain element, found p.text-sm.text-muted-foreground id=radix-… Review data before importing.'; leg B = the 'none' shape via objectstack scripts/ablation-replace.mjs (anchor completed-headline DialogDescription x1 to x0, blob e77c34ca to be52b9c2): 'Tests 1 failed | 2 passed (3)', failure 'expected { text: null, carriers: 0 } to deeply equal { text: Import Complete, carriers: 1 }'; both restores proven (blob after restore == HEAD blob e77c34ca, git diff HEAD empty, status clean). Regression set at 041498e: the 40 test files naming ImportWizard or its result copy (git grep -l derived, incl. app-shell import tests, i18n censuses, dialogViewportGutterCensus): exit 0, 'Test Files 40 passed (40) / Tests 356 passed (356)'. All heavy runs through os-verify-lock (VERDICT command-exit 0 each).",
"gates": "Local, at 041498e, exit captured before any pipe: pnpm --filter @object-ui/plugin-grid lint 0 (0 errors; the file's 7 pre-existing warnings sit outside the changed hunks; new test file has none); pnpm --filter @object-ui/plugin-grid type-check 0 after building the 13-package dependency closure (pnpm --workspace-concurrency=2 --filter '@object-ui/plugin-grid^...' build, VERDICT 0), and tsc -p tsconfig.test.json --listFiles lists the new test (1 hit); pnpm check:new-line-citations 0 ('0 new citation(s)'); pnpm check:control-bytes 0 (OK); pnpm check:changeset-claims 0 ('No pending changeset names a file this change touches'); node scripts/check-changeset-presence.mjs 0 ('2 source file(s) of 1 released package(s) changed, and this change declares 1 changeset(s)'); node scripts/check-changeset-no-major.mjs 0; pnpm check:pending-changeset-literals 0; pnpm check:test-path-roots 0; pnpm check:i18n-keys 0; pnpm check:shell-escape-residue 0; pnpm check:vi-mock-specifiers 0; node scripts/check-governed-queue-guard.mjs --test over the 3 paths: NOT GOVERNED. Not run: pnpm check:i18n-drift (no i18n key or value changed). No --ran reconciliation: dispatch-gates.mjs answers objectstack only, so the objectui list was hand-derived from the root check:* scripts against the diff. CI, PR check-runs at 041498e read once when this report was written (not waited on), 35 runs: success = Changeset Bump Policy, Changeset Declaration, Changeset Fixed Group Check, Changeset Overwrite Report, Governed Surface Queue Guard, Line Citation Gate, label; skipped = Test (coverage), Test (coverage shard N/8), dependabot; in_progress = Lint, Type Check, Repo Gates, Build & E2E, Build Docs, Bundle Analysis, Changeset Claim Re-read, Test (dist pins), Test (shard 1..16/16), Live E2E (informational).",
"mcp_calls": "0 — no MCP GitHub calls",
"api_writes": "2 — fleet-write relay dispatches (POST /repos/objectstack-ai/objectstack/dispatches, HTTP 204 each): (1) pr_create, executed as POST /repos/objectstack-ai/objectui/pulls (draft) + POST /repos/objectstack-ai/objectui/issues/13186/assignees, read back 6454/6454 bytes identical, assignee huangyiirene; (2) this os-dev-report comment, POST /repos/objectstack-ai/objectui/issues/13124/comments. Plus two git pushes (empty branch probe, then 041498e), which are not REST writes. Zero label writes.",
"deviations": "Commit trailers are objectui AGENTS.md's model-free pair (Claude-Session + Co-authored-by: Claude), not the harness's model-named Co-Authored-By; the PR footer is the definition's session-URL form, not the harness's emoji line. The PR's plugin and tests labels were applied by objectui's path labeler, not by this run. The H2 hypothesis that Radix warns on a missing Description is false for the locked 1.1.23 (no console.* call in its dist); the a11y cost measured instead is the dropped aria-describedby (ablation leg B).",
"open_questions": [],
"out_of_scope_findings": [
"carrier: none (承接者:无) · noted in the PR's Acceptance notes, not filed · while an import runs (sync, or a background job queued or processing) the subtitle still reads 'Review data before importing.' above the progress bar; read from the subtitle ternary, not measured through the console (no reach); not fixed in place because the dispatch keeps the other steps' subtitles unchanged and no importing-state sentence exists to reuse (in-place exemption condition 2 fails) · dedupe words: import wizard importing subtitle, review data before importing progress, background import job subtitle",
"carrier: none (承接者:无) · noted, not filed · the result screen's step indicator still highlights '3. Preview'; read from source, not measured through the console · dedupe words: import wizard step indicator, result screen preview highlighted",
"carrier: none (承接者:无) · noted, not filed · an import that fails outright (405 refusal, thrown server failure, background job failed) shows the green check and 'Import Complete'; read from source, not measured through the console · dedupe words: import complete failed import, import wizard green check failure, import result headline"
]
}
#13186 merged through the merge queue at 2026-10-20T08:16Z. The squash commit 9840695 has one parent, and git merge-base --is-ancestor places it on origin/main (exit 0)
queue
no gh-readonly-queue/main/pr-13186-* branch remains
landed content
on origin/main, ImportWizard.tsx renders the header description only (showHistory || !result) && (1 hit), with the result headline as DialogDescription (RESULT_HEADLINE_CLASS, 4). Positive control: the preview step's grid.import.previewDescription is kept (1)
records
claim 6285600064, dev report on this card, ACCEPT 6286084980 on PR #13186 (the PR body's Clause-② corrected to no by the seat: no key added, so no contract-review face)
closing
closed completed at 2026-10-20T08:16Z through the PR's Fixes #13124. objectui#13157 closed earlier in the window through domain:ui#2's PR #13181, not this one. pm:dispatched is removed in this act
A finished import no longer says "Review data before importing.". Booked by the seat for a measurement before filing: a failed import (a 405 or a thrown failure) may still show the green "Import Complete" (ACCEPT §7, read from source).
Activity
objectstack-fleet commentedon Oct 20, 2026
Claim: PM loop round 3 (
priority:p3,bug)Session:
session_014MXhk1yjWh37d634hLy3p7Account:
huangyiirene(the seat's linked user asGET /useranswers it; the card's assignee)Branch:
claude/issue-13124-import-done-subtitleWorktree:
objectui-issue-13124Domain:
domain:uiSeat:
domain:ui#1File surface:
packages/plugin-grid/src/ImportWizard.tsx(the dialog'sDialogDescription, which falls through togrid.import.previewDescription, "Review data before importing.", on the result step; the inline default at:63, objectuimain4c36eab); thegrid.import.*copy in the i18n table only if a done-state sentence is owed; tests beside it; and one.changeset/13124-import-done-subtitle.md. Stop on breach; explain in the report.Container & model:
S,mode:subagent,model: opus(default tier;dispatch-gates --tier --repo objectstack-ai/objectuiover this surface reads no path-derived mandate)Clause-②: yes
Responsibility: the risk is produced by objectui's own Import Wizard, whose dialog subtitle keeps the preview step's sentence on the finished step; the platform path that covers it: none (copy only); who reaches it: every console user who finishes an import.
Thread-read: none
The card had no comment at this claim. It is split from objectui#13115 item 3, under the maintainer's 「#13115 你可以拆」.
Serial constraints cleared: objectui#13156 (PR #13170,
d05f33b), the serial predecessor named on its claim, landed onImportWizard.tsx. No open objectui PR and no in-flight claim touches the file.Why
Clause-②: yes: the card's Expected is "A subtitle that matches the done state, or none". A done-state sentence would add agrid.import.*key and widen@object-ui/i18n's exportedTranslationKeys. 「拿不准 ⇒ 按yes」. If the delivered diff adds no key, the dev says so and the seat corrects the line tonoat ACCEPT.Claimed at: 2026-10-20T07:19Z
objectstack-fleet commentedon Oct 20, 2026
os-dev-report
{ "issue": 13124, "status": "done", "branch": "claude/issue-13124-import-done-subtitle", "pr": "https://github.com/objectstack-ai/objectui/pull/13186", "session": "session_014MXhk1yjWh37d634hLy3p7 (subagent: the parent's harness-stamped id)", "premise_still_valid": true, "summary": "The Import Wizard's result screen no longer shows \"Review data before importing.\": on the result screen the header renders no DialogDescription, and the result screen's own headline (existing keys grid.import.importComplete / grid.import.importCancelled) is rendered as the dialog's DialogDescription (RESULT_HEADLINE_CLASS keeps its look), so aria-describedby names the finished state and exactly one description is mounted in every state. Upload, mapping, preview and history subtitles are unchanged and pinned as controls. No key was added to any pack and nothing is exported: the claim's `Clause-②: yes` was copied verbatim into the PR body and should be corrected to `no` at ACCEPT. H1 confirmed (every path that sets result leaves step at 'preview', so the else-arm served preview, importing, background job and every result alike); H2 partly falsified: @radix-ui/react-dialog 1.1.23 emits no Description warning at all, but it drops aria-describedby when no Description is mounted, which the repo already treats as an a11y gap (objectui#3404's sr-only description), so plain 'none' was rejected; H3 and H4 hold.", "tests": "New packages/plugin-grid/src/ImportWizard.doneSubtitle-13124.test.tsx (3 tests: controls upload/mapping/preview each the aria-describedby text; completed import 1 created / 1 skipped shows no preview sentence and its description is the Import Complete headline on exactly one element; cancelled background import likewise with Import cancelled; expected copy read by key from IMPORT_DEFAULT_TRANSLATIONS). On the fix: 'Test Files 1 passed (1) / Tests 3 passed (3)'. Ablation, fix committed first (041498e), test reads src via relative import so no dist involved: leg A = ImportWizard.tsx reverted whole to BASE 4c36eab (mutated blob == BASE blob 50746e07, guard count 1 to 0): 'Tests 2 failed | 1 passed (3)', failure 'expected document not to contain element, found p.text-sm.text-muted-foreground id=radix-… Review data before importing.'; leg B = the 'none' shape via objectstack scripts/ablation-replace.mjs (anchor completed-headline DialogDescription x1 to x0, blob e77c34ca to be52b9c2): 'Tests 1 failed | 2 passed (3)', failure 'expected { text: null, carriers: 0 } to deeply equal { text: Import Complete, carriers: 1 }'; both restores proven (blob after restore == HEAD blob e77c34ca, git diff HEAD empty, status clean). Regression set at 041498e: the 40 test files naming ImportWizard or its result copy (git grep -l derived, incl. app-shell import tests, i18n censuses, dialogViewportGutterCensus): exit 0, 'Test Files 40 passed (40) / Tests 356 passed (356)'. All heavy runs through os-verify-lock (VERDICT command-exit 0 each).", "gates": "Local, at 041498e, exit captured before any pipe: pnpm --filter @object-ui/plugin-grid lint 0 (0 errors; the file's 7 pre-existing warnings sit outside the changed hunks; new test file has none); pnpm --filter @object-ui/plugin-grid type-check 0 after building the 13-package dependency closure (pnpm --workspace-concurrency=2 --filter '@object-ui/plugin-grid^...' build, VERDICT 0), and tsc -p tsconfig.test.json --listFiles lists the new test (1 hit); pnpm check:new-line-citations 0 ('0 new citation(s)'); pnpm check:control-bytes 0 (OK); pnpm check:changeset-claims 0 ('No pending changeset names a file this change touches'); node scripts/check-changeset-presence.mjs 0 ('2 source file(s) of 1 released package(s) changed, and this change declares 1 changeset(s)'); node scripts/check-changeset-no-major.mjs 0; pnpm check:pending-changeset-literals 0; pnpm check:test-path-roots 0; pnpm check:i18n-keys 0; pnpm check:shell-escape-residue 0; pnpm check:vi-mock-specifiers 0; node scripts/check-governed-queue-guard.mjs --test over the 3 paths: NOT GOVERNED. Not run: pnpm check:i18n-drift (no i18n key or value changed). No --ran reconciliation: dispatch-gates.mjs answers objectstack only, so the objectui list was hand-derived from the root check:* scripts against the diff. CI, PR check-runs at 041498e read once when this report was written (not waited on), 35 runs: success = Changeset Bump Policy, Changeset Declaration, Changeset Fixed Group Check, Changeset Overwrite Report, Governed Surface Queue Guard, Line Citation Gate, label; skipped = Test (coverage), Test (coverage shard N/8), dependabot; in_progress = Lint, Type Check, Repo Gates, Build & E2E, Build Docs, Bundle Analysis, Changeset Claim Re-read, Test (dist pins), Test (shard 1..16/16), Live E2E (informational).", "mcp_calls": "0 — no MCP GitHub calls", "api_writes": "2 — fleet-write relay dispatches (POST /repos/objectstack-ai/objectstack/dispatches, HTTP 204 each): (1) pr_create, executed as POST /repos/objectstack-ai/objectui/pulls (draft) + POST /repos/objectstack-ai/objectui/issues/13186/assignees, read back 6454/6454 bytes identical, assignee huangyiirene; (2) this os-dev-report comment, POST /repos/objectstack-ai/objectui/issues/13124/comments. Plus two git pushes (empty branch probe, then 041498e), which are not REST writes. Zero label writes.", "deviations": "Commit trailers are objectui AGENTS.md's model-free pair (Claude-Session + Co-authored-by: Claude), not the harness's model-named Co-Authored-By; the PR footer is the definition's session-URL form, not the harness's emoji line. The PR's plugin and tests labels were applied by objectui's path labeler, not by this run. The H2 hypothesis that Radix warns on a missing Description is false for the locked 1.1.23 (no console.* call in its dist); the a11y cost measured instead is the dropped aria-describedby (ablation leg B).", "open_questions": [], "out_of_scope_findings": [ "carrier: none (承接者:无) · noted in the PR's Acceptance notes, not filed · while an import runs (sync, or a background job queued or processing) the subtitle still reads 'Review data before importing.' above the progress bar; read from the subtitle ternary, not measured through the console (no reach); not fixed in place because the dispatch keeps the other steps' subtitles unchanged and no importing-state sentence exists to reuse (in-place exemption condition 2 fails) · dedupe words: import wizard importing subtitle, review data before importing progress, background import job subtitle", "carrier: none (承接者:无) · noted, not filed · the result screen's step indicator still highlights '3. Preview'; read from source, not measured through the console · dedupe words: import wizard step indicator, result screen preview highlighted", "carrier: none (承接者:无) · noted, not filed · an import that fails outright (405 refusal, thrown server failure, background job failed) shows the green check and 'Import Complete'; read from source, not measured through the console · dedupe words: import complete failed import, import wizard green check failure, import result headline" ] }Generated by Claude Code
objectstack-fleet commentedon Oct 20, 2026
LANDED ·
domain:uiseat 1 ·session_014MXhk1yjWh37d634hLy3p7· 2026-10-20T08:16Z ·pm:dispatchedcleared9840695has one parent, andgit merge-base --is-ancestorplaces it onorigin/main(exit 0)gh-readonly-queue/main/pr-13186-*branch remainsorigin/main,ImportWizard.tsxrenders the header description only(showHistory || !result) &&(1 hit), with the result headline asDialogDescription(RESULT_HEADLINE_CLASS, 4). Positive control: the preview step'sgrid.import.previewDescriptionis kept (1)6285600064, dev report on this card, ACCEPT6286084980on PR #13186 (the PR body'sClause-②corrected tonoby the seat: no key added, so no contract-review face)completedat 2026-10-20T08:16Z through the PR'sFixes #13124. objectui#13157 closed earlier in the window throughdomain:ui#2's PR #13181, not this one.pm:dispatchedis removed in this actA finished import no longer says "Review data before importing.". Booked by the seat for a measurement before filing: a failed import (a 405 or a thrown failure) may still show the green "Import Complete" (ACCEPT §7, read from source).
fix(plugin-grid): a finished import no longer says "Review data befor…