chore(plan): re-scope T-486 — account picker at new-project init, not welcome

Per the design pivot: the account choice is only a real decision at project
birth, so it belongs as a roadblock in the new-project / init-in-a-new-dir flow
(evolving the dead-end _NotARepoDialog), not a welcome-screen list. Opening an
existing project never prompts.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-28 08:06:42 +02:00
co-authored by Claude Opus 4.8
parent 8a9167bdfd
commit 6d7b96f115
2 changed files with 10 additions and 0 deletions
@@ -7199,3 +7199,7 @@ Done: the Claude pane account badge (ClaudeAccountBadge) in the pane chrome trai
INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FFW49WBTT3ESK6QG0XZ1VN2G', 'status', 'in_progress', 'done', NULL, '2026-06-27 22:43:31', '2026-06-27 22:43:31.769', '2026-06-27 22:43:31.769', NULL, '34a8c26c8c71d27fdcb1e60e3ffa1ea0', 2) ON CONFLICT(hash) DO NOTHING;
INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FGN13H42TP2MP3T27CTSCDRW', 'description', NULL, 'Done: ClaudeLoginDialog hosts a parameterized TerminalPane running ''claude login'' with CLAUDE_CONFIG_DIR=<dir> in a modal (ctx.dialog.show), wired from the accountActionChannel ''login'' action. TerminalPane gained argv/env/cwdOverride params (default still the login shell). The CLI owns the OAuth browser flow (D-64). No runtime dep on builtin.terminal — the login pane reuses the TerminalPane widget, which spawns via the always-present pane.spawn IPC. Tests: parameterized spawn args + dialog host wiring.', NULL, '2026-06-27 22:52:31', '2026-06-27 22:52:31.121', '2026-06-27 22:52:31.121', NULL, '1e158c1dcb4bf9eafecb8c26cc4936d2', 2) ON CONFLICT(hash) DO NOTHING;
INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FGN13H42TP2MP3T27CTSCDRW', 'status', 'backlog', 'done', NULL, '2026-06-27 22:52:31', '2026-06-27 22:52:31.156', '2026-06-27 22:52:31.156', NULL, '620a851447b74c2553407fac431b1e18', 2) ON CONFLICT(hash) DO NOTHING;
INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FGPG4WNNH3BWDRVZXYQTW7Z0', 'description', 'Split from T-481. The welcome view (lib/builtin/welcome) is intentionally decoupled from feature builtins — peer builtins only import the shared builtin, never each other. Dropping ClaudeAccountsListControl directly into welcome_view.dart would make welcome import claude (a new peer coupling) and risks the centered welcome layout overflowing. Do it cleanly via a welcome-section contribution point that the claude extension contributes the accounts section to.', 'Split from T-481. The welcome view (lib/builtin/welcome) is intentionally decoupled from feature builtins — peer builtins only import the shared builtin, never each other. Dropping ClaudeAccountsListControl directly into welcome_view.dart would make welcome import claude (a new peer coupling) and risks the centered welcome layout overflowing. Do it cleanly via a welcome-section contribution point that the claude extension contributes the accounts section to.
Design pivot (user, 2026-06-28): NOT a welcome-screen accounts list. The account choice is only a real decision at project BIRTH, so make it a roadblock step in the NEW-project / init-in-a-new-dir flow. Opening an existing project must NOT prompt it already has a binding, or defaults to the main account; the user switches later via Settings or the pane badge. Dependency/blocker: there is no new-project-init flow today open-folder either finds a git repo and opens it, or dead-ends at _NotARepoDialog (welcome_view.dart:633). So this ticket needs that init flow as its host: evolve _NotARepoDialog into an ''Initialize this folder as a clide project?'' step whose final screen is the account picker (registered accounts + Default + Add account). Supersedes the original welcome-view-section framing.', NULL, '2026-06-28 06:06:02', '2026-06-28 06:06:02.734', '2026-06-28 06:06:02.734', NULL, '4f8c0f4ffc6abb768860c063e397bb25', 2) ON CONFLICT(hash) DO NOTHING;
INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FGPG4WNNH3BWDRVZXYQTW7Z0', 'title', 'Per-repo Claude account: welcome-view accounts section (needs a welcome-section contribution point)', 'Per-repo Claude account: account picker as a roadblock in the new-project init flow', NULL, '2026-06-28 06:06:11', '2026-06-28 06:06:11.027', '2026-06-28 06:06:11.027', NULL, '01698c61271b9a35fb3f74ee8252168d', 2) ON CONFLICT(hash) DO NOTHING;
+6
View File
@@ -9159,3 +9159,9 @@ All actions go through T-480''s CLI verbs; this widget never writes the registry
Done: the Claude pane account badge (ClaudeAccountBadge) in the pane chrome trailing slot shows the bound account (or ''default''), colour-tinted per account via accountAccent (theme tokens, hash-indexed), tap opens the account picker; hidden when no accounts registered. The welcome-view accounts section is split to T-486 (welcome is builtin-decoupled; needs a contribution point to avoid welcome->claude peer coupling).', 'done', 'medium', NULL, NULL, NULL, '2026-06-25 09:16:42', '2026-06-27 22:43:31.769', NULL, '065f5914ac6b963342be92e0ea65ab82', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash);
INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FGN13H42TP2MP3T27CTSCDRW', 'task', '06FDXN3ZBRS6JK7Q8G6JVSPXFC', 'claude account login: spawn a CLAUDE_CONFIG_DIR=<dir> claude login terminal pane', 'Done: ClaudeLoginDialog hosts a parameterized TerminalPane running ''claude login'' with CLAUDE_CONFIG_DIR=<dir> in a modal (ctx.dialog.show), wired from the accountActionChannel ''login'' action. TerminalPane gained argv/env/cwdOverride params (default still the login shell). The CLI owns the OAuth browser flow (D-64). No runtime dep on builtin.terminal — the login pane reuses the TerminalPane widget, which spawns via the always-present pane.spawn IPC. Tests: parameterized spawn args + dialog host wiring.', 'backlog', 'medium', NULL, NULL, NULL, '2026-06-27 19:17:59.712', '2026-06-27 22:52:31.121', NULL, 'd52f43050d3e2b14eecd47aff90ea836', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash);
INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FGN13H42TP2MP3T27CTSCDRW', 'task', '06FDXN3ZBRS6JK7Q8G6JVSPXFC', 'claude account login: spawn a CLAUDE_CONFIG_DIR=<dir> claude login terminal pane', 'Done: ClaudeLoginDialog hosts a parameterized TerminalPane running ''claude login'' with CLAUDE_CONFIG_DIR=<dir> in a modal (ctx.dialog.show), wired from the accountActionChannel ''login'' action. TerminalPane gained argv/env/cwdOverride params (default still the login shell). The CLI owns the OAuth browser flow (D-64). No runtime dep on builtin.terminal — the login pane reuses the TerminalPane widget, which spawns via the always-present pane.spawn IPC. Tests: parameterized spawn args + dialog host wiring.', 'done', 'medium', NULL, NULL, NULL, '2026-06-27 19:17:59.712', '2026-06-27 22:52:31.156', NULL, 'c0e79a87fa88a49a38e8b469b194a96a', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash);
INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FGPG4WNNH3BWDRVZXYQTW7Z0', 'task', '06FDXN3ZBRS6JK7Q8G6JVSPXFC', 'Per-repo Claude account: welcome-view accounts section (needs a welcome-section contribution point)', 'Split from T-481. The welcome view (lib/builtin/welcome) is intentionally decoupled from feature builtins — peer builtins only import the shared builtin, never each other. Dropping ClaudeAccountsListControl directly into welcome_view.dart would make welcome import claude (a new peer coupling) and risks the centered welcome layout overflowing. Do it cleanly via a welcome-section contribution point that the claude extension contributes the accounts section to.
Design pivot (user, 2026-06-28): NOT a welcome-screen accounts list. The account choice is only a real decision at project BIRTH, so make it a roadblock step in the NEW-project / init-in-a-new-dir flow. Opening an existing project must NOT prompt it already has a binding, or defaults to the main account; the user switches later via Settings or the pane badge. Dependency/blocker: there is no new-project-init flow today open-folder either finds a git repo and opens it, or dead-ends at _NotARepoDialog (welcome_view.dart:633). So this ticket needs that init flow as its host: evolve _NotARepoDialog into an ''Initialize this folder as a clide project?'' step whose final screen is the account picker (registered accounts + Default + Add account). Supersedes the original welcome-view-section framing.', 'backlog', 'medium', NULL, NULL, NULL, '2026-06-27 22:43:31.629', '2026-06-28 06:06:02.734', NULL, 'f83207ffd67fca6658374f34edbfe629', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash);
INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FGPG4WNNH3BWDRVZXYQTW7Z0', 'task', '06FDXN3ZBRS6JK7Q8G6JVSPXFC', 'Per-repo Claude account: account picker as a roadblock in the new-project init flow', 'Split from T-481. The welcome view (lib/builtin/welcome) is intentionally decoupled from feature builtins — peer builtins only import the shared builtin, never each other. Dropping ClaudeAccountsListControl directly into welcome_view.dart would make welcome import claude (a new peer coupling) and risks the centered welcome layout overflowing. Do it cleanly via a welcome-section contribution point that the claude extension contributes the accounts section to.
Design pivot (user, 2026-06-28): NOT a welcome-screen accounts list. The account choice is only a real decision at project BIRTH, so make it a roadblock step in the NEW-project / init-in-a-new-dir flow. Opening an existing project must NOT prompt it already has a binding, or defaults to the main account; the user switches later via Settings or the pane badge. Dependency/blocker: there is no new-project-init flow today open-folder either finds a git repo and opens it, or dead-ends at _NotARepoDialog (welcome_view.dart:633). So this ticket needs that init flow as its host: evolve _NotARepoDialog into an ''Initialize this folder as a clide project?'' step whose final screen is the account picker (registered accounts + Default + Add account). Supersedes the original welcome-view-section framing.', 'backlog', 'medium', NULL, NULL, NULL, '2026-06-27 22:43:31.629', '2026-06-28 06:06:11.027', NULL, '10b21748ad9c80129ccc54e629eb581e', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash);