happy-stacks 0.6.12 → 0.6.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/commit-audits/happy/_tools/generate-plans.mjs +453 -0
- package/docs/commit-audits/happy/_tools/generate-pr-assignment.mjs +430 -0
- package/docs/commit-audits/happy/_tools/init-pr-assignment-working.mjs +107 -0
- package/docs/commit-audits/happy/leeroy-wip.commit-analysis.md +1849 -0
- package/docs/commit-audits/happy/leeroy-wip.commit-export.fuller-stat.md +747 -1
- package/docs/commit-audits/happy/leeroy-wip.commit-index.json +11740 -0
- package/docs/commit-audits/happy/leeroy-wip.commit-index.tsv +252 -0
- package/docs/commit-audits/happy/leeroy-wip.commit-inventory.md +18 -11
- package/docs/commit-audits/happy/leeroy-wip.commit-manual-review.md +1236 -92
- package/docs/commit-audits/happy/leeroy-wip.maintainers-overview.draft.md +448 -0
- package/docs/commit-audits/happy/leeroy-wip.pr-assignment.draft.tsv +252 -0
- package/docs/commit-audits/happy/leeroy-wip.pr-assignment.working.tsv +288 -0
- package/docs/commit-audits/happy/leeroy-wip.pr-catalog.draft.md +245 -0
- package/docs/commit-audits/happy/leeroy-wip.pr-stack-plan.draft.md +350 -0
- package/docs/commit-audits/happy/leeroy-wip.rewrite-deferred-fragments.tsv +65 -0
- package/docs/commit-audits/happy/leeroy-wip.rewrite-ledger.tsv +56 -0
- package/docs/commit-audits/happy/leeroy-wip.rewrite-process.md +240 -0
- package/docs/commit-audits/happy/leeroy-wip.rewrite-status.tsv +39 -0
- package/docs/commit-audits/happy/leeroy-wip.split-plan.draft.md +93 -0
- package/docs/commit-audits/happy/leeroy-wip.topic-buckets.md +76 -0
- package/docs/commit-audits/happy/pr-desc.extraction-ledger.tsv +279 -0
- package/docs/commit-audits/happy/pr-desc.original.md +0 -0
- package/docs/commit-audits/happy/pr-desc.post-audit-extraction-ledger.tsv +54 -0
- package/docs/commit-audits/happy/pr-desc.working-document.md +536 -0
- package/docs/happy-development.md +18 -1
- package/docs/isolated-linux-vm.md +23 -1
- package/docs/stacks.md +21 -1
- package/package.json +1 -1
- package/scripts/auth.mjs +46 -8
- package/scripts/daemon.mjs +44 -21
- package/scripts/doctor.mjs +2 -2
- package/scripts/doctor_cmd.test.mjs +67 -0
- package/scripts/happy.mjs +18 -5
- package/scripts/provision/linux-ubuntu-review-pr.sh +5 -1
- package/scripts/provision/macos-lima-happy-vm.sh +34 -2
- package/scripts/review.mjs +347 -124
- package/scripts/review_pr.mjs +78 -2
- package/scripts/run.mjs +2 -1
- package/scripts/stack.mjs +265 -19
- package/scripts/stack_daemon_cmd.test.mjs +196 -0
- package/scripts/stack_happy_cmd.test.mjs +103 -0
- package/scripts/utils/cli/prereqs.mjs +12 -1
- package/scripts/utils/dev/daemon.mjs +3 -1
- package/scripts/utils/proc/pm.mjs +1 -1
- package/scripts/utils/review/detached_worktree.mjs +61 -0
- package/scripts/utils/review/detached_worktree.test.mjs +62 -0
- package/scripts/utils/review/findings.mjs +133 -20
- package/scripts/utils/review/findings.test.mjs +88 -1
- package/scripts/utils/review/runners/augment.mjs +71 -0
- package/scripts/utils/review/runners/augment.test.mjs +42 -0
- package/scripts/utils/review/runners/coderabbit.mjs +54 -10
- package/scripts/utils/review/runners/coderabbit.test.mjs +15 -48
- package/scripts/utils/review/sliced_runner.mjs +39 -0
- package/scripts/utils/review/sliced_runner.test.mjs +47 -0
- package/scripts/utils/review/tool_home_seed.mjs +99 -0
- package/scripts/utils/review/tool_home_seed.test.mjs +113 -0
- package/scripts/utils/stack/cli_identities.mjs +29 -0
- package/scripts/utils/stack/startup.mjs +45 -7
- package/scripts/worktrees.mjs +8 -5
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
oldN oldSha oldSubject deferredToPr path kind reason status plannedAt resolvedByNewSha notes
|
|
2
|
+
006 a5fbc3e8ba00ba0f41b9af18ca0c6296414f5533 feat(persistence): scope storage and validate draft modes PR05 expo-app/sources/sync/persistence.test.ts file Persistence correctness tests (draft parsing + model modes) are not part of PR04 storage scoping; apply when executing PR05/PR28. resolved 2026-01-25T19:46:02+0100 20a2d994 Superseded: implemented PR05-owned draft tests as `persistence.drafts.test.ts`. Keep model-mode tests deferred to PR28 (see PR28 row).
|
|
3
|
+
006 a5fbc3e8ba00ba0f41b9af18ca0c6296414f5533 feat(persistence): scope storage and validate draft modes PR05 expo-app/sources/sync/persistence.ts hunk Draft persistence hardening (selectedProfileId in draft; clamp invalid draft fields; loadSettings version guard) belongs with persistence/drafts, not the storage-scope baseline. resolved 2026-01-25T19:46:02+0100 20a2d994 Applied selectedProfileId + settings version guard in PR05. Deferred permission/model clamps to PR10/PR28.
|
|
4
|
+
006 a5fbc3e8ba00ba0f41b9af18ca0c6296414f5533 feat(persistence): scope storage and validate draft modes PR10 expo-app/sources/sync/persistence.ts hunk Clamp persisted permissionMode via shared `isPermissionMode` once permission types land (avoid duplicating validation). pending 2026-01-25T19:57:34+0100
|
|
5
|
+
006 a5fbc3e8ba00ba0f41b9af18ca0c6296414f5533 feat(persistence): scope storage and validate draft modes PR28 expo-app/sources/sync/persistence.ts hunk Clamp persisted modelMode via shared validation once model modes land (avoid duplicating allowlists). pending 2026-01-25T19:57:34+0100
|
|
6
|
+
006 a5fbc3e8ba00ba0f41b9af18ca0c6296414f5533 feat(persistence): scope storage and validate draft modes PR28 expo-app/sources/sync/persistence.test.ts file Original persistence test file also covered session-model-modes; reintroduce equivalent tests when PR28 implements session model mode persistence. pending 2026-01-25T19:57:34+0100
|
|
7
|
+
011 c2d3507357dc7ef150105ff56468ec2f580943f6 fix(settings): make parsing tolerant for profiles PR27 expo-app/sources/sync/sync.ts hunk Settings sync convergence under version-mismatch depends on a `replaceSettings` primitive not yet present in the rewrite base; apply later with sync robustness/replaceSettings work. pending 2026-01-25T20:10:04+0100
|
|
8
|
+
038 7976b877259cac770f41537f44fa70e54df721a2 feat(experiments): gate Zen, file viewer, and voice auth flow PR06 expo-app/sources/-zen/ZenAdd.tsx file Zen i18n literal replacement (`t('zen.*')`) was mixed into the gating commit; keep i18n changes separate but in-slice. pending 2026-01-25T20:10:04+0100 Requires `zen.*` translation keys to exist (fold into PR06 i18n commits or PR03 if revived).
|
|
9
|
+
038 7976b877259cac770f41537f44fa70e54df721a2 feat(experiments): gate Zen, file viewer, and voice auth flow PR06 expo-app/sources/-zen/ZenHome.tsx file Zen i18n literal replacement (`t('zen.*')`) was mixed into the gating commit; keep i18n changes separate but in-slice. pending 2026-01-25T20:10:04+0100
|
|
10
|
+
038 7976b877259cac770f41537f44fa70e54df721a2 feat(experiments): gate Zen, file viewer, and voice auth flow PR06 expo-app/sources/-zen/ZenView.tsx file Zen i18n literal replacement (`t('zen.*')`) was mixed into the gating commit; keep i18n changes separate but in-slice. pending 2026-01-25T20:10:04+0100
|
|
11
|
+
038 7976b877259cac770f41537f44fa70e54df721a2 feat(experiments): gate Zen, file viewer, and voice auth flow PR06 expo-app/sources/-zen/components/ZenHeader.tsx file Zen i18n literal replacement (`t('zen.*')`) was mixed into the gating commit; keep i18n changes separate but in-slice. pending 2026-01-25T20:10:04+0100
|
|
12
|
+
006 a5fbc3e8ba00ba0f41b9af18ca0c6296414f5533 feat(persistence): scope storage and validate draft modes PR28 expo-app/sources/sync/persistence.ts hunk Session model modes persistence (load/save/filter + allowlist) belongs to Model modes end-to-end. pending 2026-01-25T19:46:02+0100
|
|
13
|
+
020 8d9f56e85e5a0abf2a7bdd9eec48c172dad5c110 refactor(ui): unify list selectors and modal primitives PR26 expo-app/sources/components/NewSessionWizard.tsx file Commit 020 also deleted/moved wizard implementation; keep wizard refactors inside PR26 (new-session wizard). pending 2026-01-25T17:35:00+0100 Was present as a deletion in the 020 mega-commit worktree state; intentionally not included in PR02.
|
|
14
|
+
020 8d9f56e85e5a0abf2a7bdd9eec48c172dad5c110 refactor(ui): unify list selectors and modal primitives PR10 expo-app/sources/components/PermissionModeSelector.tsx file Permission-mode selector deletion/refactor is permission-feature work; keep it out of PR02 UI overlays. pending 2026-01-25T17:35:00+0100 Confirm final PR (PR10 vs PR11) when executing permission slices.
|
|
15
|
+
020 8d9f56e85e5a0abf2a7bdd9eec48c172dad5c110 refactor(ui): unify list selectors and modal primitives PR08 expo-app/sources/sync/profileSync.ts file Profile sync deletion/refactor belongs with Profiles. pending 2026-01-25T17:35:00+0100 If this ends up being sync-transport instead of profiles, move to PR27.
|
|
16
|
+
020 8d9f56e85e5a0abf2a7bdd9eec48c172dad5c110 refactor(ui): unify list selectors and modal primitives PR38 expo-app/sources/components/ItemGroup.dividers.ts file ItemGroup helper (dividers) is list-primitive polish; keep with PR38. resolved 2026-01-25T17:35:00+0100 ed3de522 Applied in PR38 via ed3de522 (final list primitives commit).
|
|
17
|
+
020 8d9f56e85e5a0abf2a7bdd9eec48c172dad5c110 refactor(ui): unify list selectors and modal primitives PR38 expo-app/sources/components/ItemGroup.dividers.test.ts file ItemGroup helper test; keep with PR38. resolved 2026-01-25T17:35:00+0100 ed3de522 Applied in PR38 via ed3de522 (final list primitives commit).
|
|
18
|
+
020 8d9f56e85e5a0abf2a7bdd9eec48c172dad5c110 refactor(ui): unify list selectors and modal primitives PR38 expo-app/sources/components/ItemGroup.selectableCount.ts file ItemGroup helper (selectable count); keep with PR38. resolved 2026-01-25T17:35:00+0100 ed3de522 Applied in PR38 via ed3de522 (final list primitives commit).
|
|
19
|
+
020 8d9f56e85e5a0abf2a7bdd9eec48c172dad5c110 refactor(ui): unify list selectors and modal primitives PR38 expo-app/sources/components/ItemGroup.selectableCount.test.ts file ItemGroup helper test; keep with PR38. resolved 2026-01-25T17:35:00+0100 ed3de522 Applied in PR38 via ed3de522 (final list primitives commit).
|
|
20
|
+
020 8d9f56e85e5a0abf2a7bdd9eec48c172dad5c110 refactor(ui): unify list selectors and modal primitives PR02 expo-app/sources/utils/promptUnsavedChangesAlert.ts file Unsaved-changes alert is modal-related (uses modal/alert primitives). pending 2026-01-25T17:35:00+0100 If it stays stable and relevant, it can land in PR02; otherwise defer to PR25.
|
|
21
|
+
020 8d9f56e85e5a0abf2a7bdd9eec48c172dad5c110 refactor(ui): unify list selectors and modal primitives PR02 expo-app/sources/utils/promptUnsavedChangesAlert.test.ts file Tests for promptUnsavedChangesAlert. pending 2026-01-25T17:35:00+0100
|
|
22
|
+
020 8d9f56e85e5a0abf2a7bdd9eec48c172dad5c110 refactor(ui): unify list selectors and modal primitives PR25 expo-app/sources/components/Switch.web.tsx file Switch.web changes are UI polish but not overlay-specific; keep out of PR02 unless required. pending 2026-01-25T17:35:00+0100 Prefer folding into the owning UI PR if a dependency emerges.
|
|
23
|
+
037 5f5b57df5181fdb2879d44c72e1d41b871c0e5ff refactor(ui): improve item rendering and action menu timing PR38 expo-app/sources/components/ItemGroup.tsx hunk ItemGroup selectable-count override optimization depends on selection-context helpers not present in upstream state during PR02. resolved 2026-01-25T17:35:00+0100 ed3de522 Superseded by PR38 list primitives (ItemGroup selection context + selectableItemCountOverride).
|
|
24
|
+
039 6ed379f82c3497512316f23d15b2c2a0556a160e refactor(ui): add modal + popover overlay primitives PR38 expo-app/sources/components/dropdown/DropdownMenu.tsx file Dropdown/menu primitives are list/UI infra; keep separate from core modal/popover foundation. resolved 2026-01-25T17:35:00+0100 ed3de522 Applied in PR38 via ed3de522 (final list primitives commit).
|
|
25
|
+
039 6ed379f82c3497512316f23d15b2c2a0556a160e refactor(ui): add modal + popover overlay primitives PR38 expo-app/sources/components/dropdown/useSelectableMenu.ts file Selectable-menu hook used by dropdown/menu. resolved 2026-01-25T17:35:00+0100 ed3de522 Applied in PR38 via ed3de522 (final list primitives commit).
|
|
26
|
+
039 6ed379f82c3497512316f23d15b2c2a0556a160e refactor(ui): add modal + popover overlay primitives PR38 expo-app/sources/components/SelectableRow.tsx file SelectableRow is list primitive used widely; keep with PR38. resolved 2026-01-25T17:35:00+0100 ed3de522 Applied in PR38 via ed3de522 (final list primitives commit).
|
|
27
|
+
039 6ed379f82c3497512316f23d15b2c2a0556a160e refactor(ui): add modal + popover overlay primitives PR38 expo-app/sources/components/CommandPalette/CommandPalette.tsx file CommandPalette refactor is a large UI primitive; keep with PR38. resolved 2026-01-25T17:35:00+0100 c429a814 No-op: rewrite base already contains the intended CommandPalette structure; remaining CommandPalette refactors are covered by c429a814.
|
|
28
|
+
039 6ed379f82c3497512316f23d15b2c2a0556a160e refactor(ui): add modal + popover overlay primitives PR38 expo-app/sources/components/CommandPalette/CommandPaletteInput.tsx file CommandPalette input refactor (Unistyles + placeholder/autoFocus props) is part of CommandPalette UI primitive changes. resolved 2026-01-25T17:40:00+0100 c429a814 No-op: rewrite base already contains the intended CommandPaletteInput behavior.
|
|
29
|
+
039 6ed379f82c3497512316f23d15b2c2a0556a160e refactor(ui): add modal + popover overlay primitives PR38 expo-app/sources/components/CommandPalette/CommandPaletteItem.tsx file CommandPalette item refactor depends on SelectableRow and updated hover/selection behavior; keep with PR38. resolved 2026-01-25T17:40:00+0100 c429a814 CommandPaletteItem now uses SelectableRow (unifies hover/pressed/selected styling).
|
|
30
|
+
039 6ed379f82c3497512316f23d15b2c2a0556a160e refactor(ui): add modal + popover overlay primitives PR38 expo-app/sources/components/CommandPalette/CommandPaletteModal.tsx file CommandPalette modal wrapper changes are part of the command palette subsystem; keep with PR38. resolved 2026-01-25T17:40:00+0100 c429a814 No-op: CommandPaletteModal is already present in rewrite base (not introduced by old 039).
|
|
31
|
+
039 6ed379f82c3497512316f23d15b2c2a0556a160e refactor(ui): add modal + popover overlay primitives PR38 expo-app/sources/components/CommandPalette/CommandPaletteResults.tsx file CommandPalette results empty state should be localized; keep with PR38. resolved 2026-01-25T17:40:00+0100 c429a814 CommandPaletteResults now uses t('commandPalette.noCommandsFound').
|
|
32
|
+
039 6ed379f82c3497512316f23d15b2c2a0556a160e refactor(ui): add modal + popover overlay primitives PR38 expo-app/sources/components/dropdown/SelectableMenuResults.tsx file Dropdown selectable-results rendering belongs with dropdown/menu primitives in PR38. resolved 2026-01-25T17:40:00+0100 ed3de522 Applied in PR38 via ed3de522 (final list primitives commit).
|
|
33
|
+
039 6ed379f82c3497512316f23d15b2c2a0556a160e refactor(ui): add modal + popover overlay primitives PR38 expo-app/sources/components/dropdown/selectableMenuTypes.ts file Selectable menu types belong with dropdown/menu primitives in PR38. resolved 2026-01-25T17:40:00+0100 ed3de522 Applied in PR38 via ed3de522 (final list primitives commit).
|
|
34
|
+
039 6ed379f82c3497512316f23d15b2c2a0556a160e refactor(ui): add modal + popover overlay primitives PR38 expo-app/sources/components/itemActions/types.ts file Item action type refactor is list-primitive infra; keep with PR38. resolved 2026-01-25T17:40:00+0100 7357579e Added shared item action type and re-exported it from ItemActionsMenuModal.
|
|
35
|
+
059 f7f81497444d9547c9e077e3ad45c41a3293c2a2 fix(modal): prevent non-dismissible WebAlertModal PR26 expo-app/sources/__tests__/app/new/pick/machine.presentation.test.ts file New-session presentation test mocking belongs with new-session wizard PR; keep out of PR02 popover/overlay slice. pending 2026-01-25T17:50:00+0100 Add the @react-navigation/native mock (CommonActions.setParams) when executing PR26.
|
|
36
|
+
054 66c6784513355e763d09dcfc530c09348c1c3a70 fix(ui): apply small review fixes PR28 expo-app/sources/-session/SessionView.tsx hunk Session model-mode UI polish (hoist configurable mode constants/typeguard) belongs with model modes. pending 2026-01-25T18:00:00+0100
|
|
37
|
+
054 66c6784513355e763d09dcfc530c09348c1c3a70 fix(ui): apply small review fixes PR26 expo-app/sources/app/(app)/new/pick/machine.tsx hunk New-session machine picker: use CommonActions.setParams (react-navigation idiomatic). pending 2026-01-25T18:00:00+0100
|
|
38
|
+
054 66c6784513355e763d09dcfc530c09348c1c3a70 fix(ui): apply small review fixes PR18 expo-app/sources/app/(app)/settings/terminal.tsx hunk Terminal settings: guard TextInput value (`tmuxSessionName ?? ''`) to avoid controlled/uncontrolled warnings. pending 2026-01-25T18:00:00+0100
|
|
39
|
+
054 66c6784513355e763d09dcfc530c09348c1c3a70 fix(ui): apply small review fixes PR38 expo-app/sources/components/OptionTiles.tsx hunk OptionTiles: ensure title text uses theme text color (UI primitive styling correctness). resolved 2026-01-25T18:00:00+0100 7357579e No-op: OptionTiles component no longer exists in upstream/rewrite base.
|
|
40
|
+
054 66c6784513355e763d09dcfc530c09348c1c3a70 fix(ui): apply small review fixes PR06 expo-app/sources/components/SettingsView.tsx hunk Settings: clear githubUnavailableReason before retrying GitHub connect (stale error UX). pending 2026-01-25T18:00:00+0100
|
|
41
|
+
054 66c6784513355e763d09dcfc530c09348c1c3a70 fix(ui): apply small review fixes PR38 expo-app/sources/components/dropdown/DropdownMenu.tsx hunk DropdownMenu: fix chevron opacity logic (was always 0). resolved 2026-01-25T18:00:00+0100 ed3de522 Included in PR38 DropdownMenu (ed3de522).
|
|
42
|
+
054 66c6784513355e763d09dcfc530c09348c1c3a70 fix(ui): apply small review fixes PR27 expo-app/sources/utils/sync.ts hunk Sync util: move backoff init into constructor (definite assignment) for correctness/clarity. pending 2026-01-25T18:00:00+0100
|
|
43
|
+
064 e5848c4805226e1c460df58717b182d25f06d504 fix(ui): harden overlays and permission cycling PR26 expo-app/sources/app/(app)/new/NewSessionWizard.tsx hunk New-session wizard wiring: pass `onPermissionModeChange` into AgentInput so permission-mode changes can propagate. pending 2026-01-25T18:10:37+0100 PR02 rewrite intentionally skipped wizard-side wiring; apply during PR26 against the rewritten wizard implementation.
|
|
44
|
+
064 e5848c4805226e1c460df58717b182d25f06d504 fix(ui): harden overlays and permission cycling PR10 expo-app/sources/components/AgentInput.tsx hunk Final permission-cycling reconciliation (Shift+Tab): source-of-truth and mode order must match the rewritten permission framework. pending 2026-01-25T18:10:37+0100 Current rewritten AgentInput differs from the original patch; re-implement behavior rather than cherry-picking hunks.
|
|
45
|
+
248 bf3027799623c286fe138c7b69e140ea90fdfa48 Set EXPO_UNSTABLE_WEB_MODAL env var in Expo scripts PR19 expo-app/sources/app/(app)/session/[id]/info.tsx hunk Session-info gating: show Codex session id / resume affordances for `expCodexAcp` (in addition to `expCodexResume`). pending 2026-01-25T18:16:11+0100 Deferred to keep PR02 focused on Expo web modal behavior; apply during PR19 with the final resume/codex UX.
|
|
46
|
+
275 63cda8b20882dde5746e9f007b0866a0e39c3134 expo-app(ui): add list/pending primitives and polish PR37 expo-app/sources/components/AgentInput.tsx file AgentInput refactor (AgentId, permission-mode options, resume/path row, action-bar logic) is agent-registry UX and must be split out of PR38. pending 2026-01-25T18:29:53+0100 Mixed; likely split further into PR37 (agent registry) + PR19 (resume chip/path row) + PR10/PR11 (permission labels/options).
|
|
47
|
+
275 63cda8b20882dde5746e9f007b0866a0e39c3134 expo-app(ui): add list/pending primitives and polish PR37 expo-app/sources/components/MultiTextInput.tsx file Agent input infra changes should land with the AgentInput/agent-registry slice, not PR38 list primitives. pending 2026-01-25T18:29:53+0100
|
|
48
|
+
275 63cda8b20882dde5746e9f007b0866a0e39c3134 expo-app(ui): add list/pending primitives and polish PR13 expo-app/sources/components/PendingMessagesModal.tsx file Pending queue UI belongs with MessageQueueV1/Pending messages end-to-end. pending 2026-01-25T18:29:53+0100
|
|
49
|
+
275 63cda8b20882dde5746e9f007b0866a0e39c3134 expo-app(ui): add list/pending primitives and polish PR13 expo-app/sources/components/PendingMessagesModal.test.ts file Pending queue UI tests belong with MessageQueueV1/Pending messages end-to-end. pending 2026-01-25T18:29:53+0100
|
|
50
|
+
275 63cda8b20882dde5746e9f007b0866a0e39c3134 expo-app(ui): add list/pending primitives and polish PR13 expo-app/sources/components/PendingQueueIndicator.tsx file Pending queue UI belongs with MessageQueueV1/Pending messages end-to-end. pending 2026-01-25T18:29:53+0100
|
|
51
|
+
275 63cda8b20882dde5746e9f007b0866a0e39c3134 expo-app(ui): add list/pending primitives and polish PR13 expo-app/sources/components/PendingQueueIndicator.test.ts file Pending queue UI tests belong with MessageQueueV1/Pending messages end-to-end. pending 2026-01-25T18:29:53+0100
|
|
52
|
+
275 63cda8b20882dde5746e9f007b0866a0e39c3134 expo-app(ui): add list/pending primitives and polish PR08 expo-app/sources/components/EnvironmentVariableCard.tsx file Env var UI belongs with Profiles/env var UX (may depend on profile model). pending 2026-01-25T18:29:53+0100
|
|
53
|
+
275 63cda8b20882dde5746e9f007b0866a0e39c3134 expo-app(ui): add list/pending primitives and polish PR08 expo-app/sources/components/ProfileEditForm.tsx file Profile editor changes belong with Profiles feature. pending 2026-01-25T18:29:53+0100
|
|
54
|
+
275 63cda8b20882dde5746e9f007b0866a0e39c3134 expo-app(ui): add list/pending primitives and polish PR08 expo-app/sources/components/profiles/ProfilesList.tsx file Profiles list UX belongs with Profiles feature. pending 2026-01-25T18:29:53+0100
|
|
55
|
+
275 63cda8b20882dde5746e9f007b0866a0e39c3134 expo-app(ui): add list/pending primitives and polish PR08 expo-app/sources/components/profiles/profileListModel.ts file Profile list model helper updates belong with Profiles feature. pending 2026-01-25T18:29:53+0100
|
|
56
|
+
275 63cda8b20882dde5746e9f007b0866a0e39c3134 expo-app(ui): add list/pending primitives and polish PR08 expo-app/sources/components/profiles/profileListModel.test.ts file Profile list model tests belong with Profiles feature. pending 2026-01-25T18:29:53+0100
|
|
57
|
+
275 63cda8b20882dde5746e9f007b0866a0e39c3134 expo-app(ui): add list/pending primitives and polish PR08 expo-app/sources/utils/profileConfigRequirements.ts file Profile requirements logic belongs with Profiles feature. pending 2026-01-25T18:29:53+0100
|
|
58
|
+
275 63cda8b20882dde5746e9f007b0866a0e39c3134 expo-app(ui): add list/pending primitives and polish PR08 expo-app/sources/utils/profileConfigRequirements.test.ts file Profile requirements tests belong with Profiles feature. pending 2026-01-25T18:29:53+0100
|
|
59
|
+
275 63cda8b20882dde5746e9f007b0866a0e39c3134 expo-app(ui): add list/pending primitives and polish PR06 expo-app/sources/components/SettingsView.tsx file Settings screen changes belong with Settings feature. pending 2026-01-25T18:29:53+0100
|
|
60
|
+
275 63cda8b20882dde5746e9f007b0866a0e39c3134 expo-app(ui): add list/pending primitives and polish PR25 expo-app/sources/components/MainView.tsx file App shell/layout polish (non-feature-specific) belongs in misc UI polish unless it becomes a dependency. pending 2026-01-25T18:29:53+0100
|
|
61
|
+
275 63cda8b20882dde5746e9f007b0866a0e39c3134 expo-app(ui): add list/pending primitives and polish PR25 expo-app/sources/components/SidebarView.tsx file App shell/layout polish (non-feature-specific) belongs in misc UI polish unless it becomes a dependency. pending 2026-01-25T18:29:53+0100
|
|
62
|
+
275 63cda8b20882dde5746e9f007b0866a0e39c3134 expo-app(ui): add list/pending primitives and polish PR25 expo-app/sources/components/TabBar.tsx file App shell/layout polish (non-feature-specific) belongs in misc UI polish unless it becomes a dependency. pending 2026-01-25T18:29:53+0100
|
|
63
|
+
275 63cda8b20882dde5746e9f007b0866a0e39c3134 expo-app(ui): add list/pending primitives and polish PR25 expo-app/sources/components/Avatar.tsx file Avatar UI polish is generic UI; keep out of PR38 unless required by list primitives. pending 2026-01-25T18:29:53+0100
|
|
64
|
+
275 63cda8b20882dde5746e9f007b0866a0e39c3134 expo-app(ui): add list/pending primitives and polish PR02 expo-app/sources/components/Popover.tsx file Popover changes are overlay primitives; PR02 already rewritten—verify whether this is net-noop vs current and either drop or add a focused follow-up. pending 2026-01-25T18:29:53+0100 PR02 is closed; only reopen if there is a meaningful diff.
|
|
65
|
+
275 63cda8b20882dde5746e9f007b0866a0e39c3134 expo-app(ui): add list/pending primitives and polish PR02 expo-app/sources/components/Popover.test.ts file Popover tests are overlay primitives; PR02 already rewritten—verify whether this is net-noop vs current and either drop or add a focused follow-up. pending 2026-01-25T18:29:53+0100 PR02 is closed; only reopen if there is a meaningful diff.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
oldN oldSha oldSubject finalPr action newSha(s) newSubject(s) notes
|
|
2
|
+
001 58528a7c37d3a4eea2874dbe1258c2626b88cd5e chore(crypto): patch react-native-libsodium PR01 pick 4fd3438312304518f3a5896a96883f340c12ecfa chore(crypto): patch react-native-libsodium cherry-pick (no edits).
|
|
3
|
+
002 552b8da0f62129749a8dd96bc7cfba125e51c1f6 test(deps): add @types/react-test-renderer PR01 pick 002b5bdd4e26175de5c0717af38486b8118ba1c5 test(deps): add @types/react-test-renderer cherry-pick (no edits).
|
|
4
|
+
003 017b15c07ad75413718d9e734b8f40f2ce738ce7 chore(config): harden app variant defaults PR01 pick 4a05b3b6faf71aa7b652c9adb4068f4bb76d86f4 chore(config): harden app variant defaults cherry-pick (no edits).
|
|
5
|
+
012 207ef1b2f57207ad67a08256a11b40863e9fba76 fix(dev): gate CLI detection logging PR01 pick 527d958dd28832955a5930c8011ff04c77229d64 fix(dev): gate CLI detection logging cherry-pick (no edits).
|
|
6
|
+
023 d97924f3ef398638746919a3fee3675b0a12cee6 chore(test): define __DEV__ for vitest PR01 pick 397d4ce715af9326366ae6e14403c0762afd51a3 chore(test): define __DEV__ for vitest cherry-pick (no edits).
|
|
7
|
+
044 cb11d4bdb25a6423f156dd0f9b859b5fbf603857 docs: add AGENTS.md symlink + update CLAUDE.md PR01 pick dde1cd4aa8422cd7be0f0e62f34ee7f00e3b3633 docs: add AGENTS.md symlink + update CLAUDE.md cherry-pick (no edits).
|
|
8
|
+
046 ea2e4d19d63370180f5558093ab3df1b9fb2f75b chore(deps): align react-test-renderer with react PR01 pick d06987ecfedc4c10f2e1329f24a1fb94d1b8b45b chore(deps): align react-test-renderer with react cherry-pick (no edits).
|
|
9
|
+
051 43f23f2f082e149eb2d5d29b43b5c7461eaa5e40 chore(format): replace stray tabs with spaces PR01 drop-net-noop Skipped: conflicts due to deleted files in upstream; formatting-only noise not worth resurrecting.
|
|
10
|
+
052 e1d55fdbd9ee31fb9bb80ce1a65643bef5890d44 fix(i18n): improve untranslated literal scan parsing PR01 drop-net-noop Skipped: target script path deleted upstream; likely superseded by upstream dev tooling.
|
|
11
|
+
108 f7db44dea4586a2a399e6765e31f8ad9d3f61475 docs: add AGENTS.md symlink PR01 pick 7809e86f0ebd34541bb59e20e2ef06f92e46a422 docs: add AGENTS.md symlink cherry-pick (no edits).
|
|
12
|
+
157 320a89e19ca060f23f67c0283cb075b1fd68635c test(happy): run cli and server checks from root scripts PR01 pick 7ef02fb2be31563f8bf5b2cfe4c2290d1b5e78f5 test(happy): run cli and server checks from root scripts Resolved trivial conflict in root package.json (kept added scripts).
|
|
13
|
+
184 ac5bf2f3abfa54b992c42f7249084dab4424a4c7 test(happy-cli): reset modules for runtime override PR01 drop-net-noop Skipped: target test file deleted upstream; net-noise.
|
|
14
|
+
201 ce42bf56d7b682929ce1022293c8cbaa78918711 fix(web): correct libsodium wrapper typing PR01 pick 2c2a0b0e3b83fb930bd13a8d0e39f97f5f31e8f0 fix(web): correct libsodium wrapper typing Resolved conflict by taking the CJS-require + typed export variant.
|
|
15
|
+
202 f0417ca11ac5112ee9f9a38b6d0b3bdbf644749b fix(web): keep libsodium wrapper namespace typing PR01 pick fcb5a992b6841c9e2b60c35c875d4b7c507e3b33 fix(web): keep libsodium wrapper namespace typing cherry-pick (no edits).
|
|
16
|
+
207 61bf70183ebff64ec14716cee0ccf8c1b2a59ea4 test(cli): set DEBUG before importing logger PR01 drop-net-noop Skipped: target test file deleted upstream; net-noise.
|
|
17
|
+
250 0c3b41030bbc4a888e621a6b5787eaac4b581a59 Add Vitest stubs for Expo and React Native modules PR01 squash-into 67323a48f4b922c0de096f70cdda8e9de49bcefe test(expo-app): add Vitest stubs for Expo/RN modules Squashed with old 262 into one final test-infra commit (conflicts resolved; final message rewritten).
|
|
18
|
+
262 2edc5305ca3fa26cd148a5ad9f775fd9d1f4eb41 expo-app(test): harden vitest stubs + unistyles typing PR01 pick+amend 67323a48f4b922c0de096f70cdda8e9de49bcefe test(expo-app): add Vitest stubs for Expo/RN modules Combined with old 250 to represent final state; includes alias hardening, Unistyles typing, and hook-order regression test.
|
|
19
|
+
013 58a892d413d17670aa459491ca3e4c60024d894f fix(command-palette): include navigate dependency PR02 pick ab906ce8c2f54d33a065b0d2de50c97947e82888 fix(command-palette): include navigate dependency cherry-pick (no edits).
|
|
20
|
+
020 8d9f56e85e5a0abf2a7bdd9eec48c172dad5c110 refactor(ui): unify list selectors and modal primitives PR02 split 798b923a7d746a87b64a4b07b87cd38f35b0087e,9d83a2f7709d3eacba1bf518f0624ecfc8bf8c1d,523f3364739c1cb58dadeb83dddc3a5177723f52 refactor(ui): add SearchHeader and harden SearchableListSelector; feat(ui): add row actions with overflow menu; refactor(modal): harden modal primitives and alert behavior Split mega-commit; deferred wizard/profileSync deletions + list-helper hunks to later PR slices (PR26/PR08/PR38).
|
|
21
|
+
022 2d4675a5d051d623b18ca85f284e74c21197237d fix(agent-input): use compact permission badges PR02 pick+resolve a45c277645bbc31264447df2e4e94759e75c3a93 fix(agent-input): use compact permission badges Resolved conflict by computing compact label + rendering it on the settings chip; kept abort button behavior unchanged.
|
|
22
|
+
029 12e75a3b36fa49aa4d91cedd8464e8afcb65e2a8 fix(autocomplete): remove debug suggestion logs PR02 pick cc611ae6380441ac4ff0b0e3e25205ec0b1a0851 fix(autocomplete): remove debug suggestion logs cherry-pick (no edits).
|
|
23
|
+
031 4dc9c7f8759c1f5f1713167ca0888b87463084b3 feat(agent-input): add configurable action bar layout PR06 defer Reordered/deferred: depends on settings schema keys from PR06 (`agentInputActionBarLayout`, `agentInputChipDensity`) and i18n.
|
|
24
|
+
032 e8e42a6087add8e0c3713980c9497c59e34a3fa9 fix(modal): prevent stacked modal touch-blocking on iOS PR02 pick+resolve 13c93a68d12f696ce9d9a33a051ebae93e6b5f99 fix(modal): prevent stacked modal touch-blocking on iOS Resolved conflict in `app/(app)/_layout.tsx` (kept containedModal presentation + explicit close button on iOS).
|
|
25
|
+
035 7ffd0c3428cbbceb7df39396142100da8fd4841d fix(ui): localize error alerts PR02 pick fe7f66c9322c800dec0bf47588bc737ffb540583 fix(ui): localize error alerts cherry-pick (no edits).
|
|
26
|
+
037 5f5b57df5181fdb2879d44c72e1d41b871c0e5ff refactor(ui): improve item rendering and action menu timing PR02 pick+amend bf1a903583c9ad874bcc2eb2ad92e99166b7c9bd refactor(ui): improve item subtitles and action menu timing Kept Item subtitle ReactNode rendering + action menu timing + compact threshold + SessionsList cleanup; deferred ItemGroup selectable-count optimization to PR38 (current upstream ItemGroup lacks the selection context helpers).
|
|
27
|
+
039 6ed379f82c3497512316f23d15b2c2a0556a160e refactor(ui): add modal + popover overlay primitives PR02 split 3fb6ed4ed3e4722c4efe3cdaf4dcbf79b16381f8,c878a8d179e8726a9b8443c73ce0714a4a3e2658,6f27bb96cbc274222c9597965da2d9c3019353d8,94e484a350b1df43cdabca339a3a9d09e91a07d9,4da8e01c68437e2347bf0cf694303392b31f5671 feat(modal): add overlay portal and Radix-backed web modals; feat(popover): add Popover primitive with portal support; feat(ui): add FloatingOverlay edge fades and indicators; feat(ui): add ConnectionStatusControl popover menu; feat(agent-input): allow customizing autocomplete max height Split by subsystem; deferred dropdown/selectable-row/command-palette refactors and other list primitives from old 039 to later PR slices (PR38).
|
|
28
|
+
050 2da2f9349ec5f50932cd3c2834c7b6c2fd0db16f fix(popover): allow web fixed positioning types PR02 pick 6dc0c2b7b10974394b2f25462d646f01d533f7cc fix(popover): allow web fixed positioning types cherry-pick (no edits).
|
|
29
|
+
055 2472b376775cf1ba60b0af98e7abcda7299defba test(modal): make backdrop z-index assertion safer PR02 pick c6925f76fabd2469f39e43851f1e75fba47d540c test(modal): make backdrop z-index assertion safer cherry-pick (no edits).
|
|
30
|
+
059 f7f81497444d9547c9e077e3ad45c41a3293c2a2 fix(modal): prevent non-dismissible WebAlertModal PR02 split eefc1fcd10773b82649341456c22560b7c4aa7ec fix(popover): measure DOM anchors on web and enable native portal Kept popover + connection-status portal/test improvements in PR02; deferred unrelated new-session test mocking to PR26 (tracked in rewrite-deferred-fragments.tsv).
|
|
31
|
+
062 e533db1813a54a9f6901b133b10e6d848e091ac3 fix(popover): add screens cjs helper and fix fixed positioning types PR02 pick+resolve f8ed5c88d126c35536c2e90adaa8ddcee97795f2 fix(popover): add screens cjs helper and fix fixed positioning types Resolved conflicts in Popover.tsx by using a typed fixed-position helper; added react-native-screens CJS helper.
|
|
32
|
+
054 66c6784513355e763d09dcfc530c09348c1c3a70 fix(ui): apply small review fixes PR02 split-defer-all No PR02-owned hunks remain after PR planning; deferred by hunk to PR28/PR26/PR18/PR38/PR06/PR27. See rewrite-deferred-fragments.tsv for exact paths/notes.
|
|
33
|
+
064 e5848c4805226e1c460df58717b182d25f06d504 fix(ui): harden overlays and permission cycling PR02 split 37a65d0e981b8f4add787f43a1bfcba04451fb4e fix(ui): harden overlay portals and iOS popover behavior Applied PR02-owned overlay hardening (OverlayPortal store to prevent provider child rerenders, iOS FullWindowOverlay pointerEvents correctness, closeThen fallback + tests). Deferred new-session wizard wiring and final permission cycling reconciliation to PR26/PR10 (tracked in rewrite-deferred-fragments.tsv).
|
|
34
|
+
163 84df0d2605133a165a381dd6ae65507cfda23795 fix(expo-app): stabilize postinstall and libsodium patches PR02 pick+resolve 554364de85d87920efb3c9fe10769ff6e273fe68 fix(expo-app): stabilize postinstall and libsodium patches Cherry-picked with conflict resolved by keeping the existing web libsodium CJS import (avoids top-level-await issues); switched postinstall to a hoist-aware script; added libsodium-wrappers patch and removed obsolete RN libsodium patch; updated lockfile as needed.
|
|
35
|
+
248 bf3027799623c286fe138c7b69e140ea90fdfa48 Set EXPO_UNSTABLE_WEB_MODAL env var in Expo scripts PR02 split b8486137a83c72745e68564b20f2ac7a4d89490a fix(expo-web): enable web modals and pin expo-router Applied Expo-web modal plumbing + expo-router pin/patch/resolution. Deferred session-info (Codex session id gating) change to PR19 (tracked in rewrite-deferred-fragments.tsv).
|
|
36
|
+
249 c803115dcbdcd55c036e47c0f0cfd6e1bceb9f74 Improve postinstall script for symlinked paths and patching PR02 pick 96a8c336d54e1fe44ff0165b66c2d33f8cfcdcd8 fix(expo): improve postinstall patching for hoisted and local deps cherry-pick (no edits).
|
|
37
|
+
276 10dca4ca7057ad04c6d121110f7fd2f006a411bc chore(expo): pin libsodium-wrappers and align patch-package dirs PR02 pick ad0c5ae9867ce4fc3593b0d30e87e2ea76e47795 chore(expo): pin libsodium-wrappers and align patch-package dirs cherry-pick (no edits); supersedes earlier patch-dir split by co-locating expo-router patch under expo-app/patches and pinning libsodium-wrappers.
|
|
38
|
+
275 63cda8b20882dde5746e9f007b0866a0e39c3134 expo-app(ui): add list/pending primitives and polish PR38 split ed3de522739ed219b5d259aa49942ed4f615c022 feat(ui): add list primitives for selection menus Extracted PR38-owned list primitives (ItemGroup divider/row-position helpers, selection context, SelectableRow, dropdown menu primitives + tests). Deferred the rest of old 275 (AgentInput refactors, pending queue UI, profiles changes, app shell polish, popover tweaks) via rewrite-deferred-fragments.tsv.
|
|
39
|
+
039 6ed379f82c3497512316f23d15b2c2a0556a160e refactor(ui): add modal + popover overlay primitives PR38 deferred-fragment c429a8148e933dd754ba904510f8128a7bb9d068 refactor(ui): make command palette use SelectableRow Applied the PR38-owned CommandPalette refactor fragments (SelectableRow-based items + localized empty state) after introducing SelectableRow in PR38.
|
|
40
|
+
039 6ed379f82c3497512316f23d15b2c2a0556a160e refactor(ui): add modal + popover overlay primitives PR38 deferred-fragment 7357579e594c84ca99cd56c791bb319831d8d5bb refactor(ui): centralize item action types Added shared `itemActions/types.ts` and re-exported from ItemActionsMenuModal to avoid duplicate ItemAction type definitions.
|
|
41
|
+
004 4890a471df312191ae325d5691b61231097df078 fix(auth): harden tokenStorage web persistence PR04 pick 64cbe8634d0db65b24b20272a4ad9e3735b47212 fix(auth): harden tokenStorage web persistence cherry-pick (no edits).
|
|
42
|
+
006 a5fbc3e8ba00ba0f41b9af18ca0c6296414f5533 feat(persistence): scope storage and validate draft modes PR04 split 4bae1291fe99a8919da72e0d55e252830d0be4a4,150a12282ba957b74330a6c727c31627ad92afa4 feat(storage): add storage scoping helpers; feat(storage): scope native persistence by storage scope Split old 006: extracted storageScope helpers + MMKV id scoping. Deferred draft/model-mode persistence hunks to PR05/PR28 (see rewrite-deferred-fragments.tsv).
|
|
43
|
+
156 8c16ee8f9cef04c3ae515ab2ebcb12b5ef317759 fix(auth): surface auth failures and gate unauth routes PR04 pick cc7d04e5e5777bee18db25aa1bc2fea70d248450 fix(auth): surface auth failures and gate unauth routes cherry-pick (no edits).
|
|
44
|
+
177 893ce7af5df079be26925ff7a7c5baf6e9d35088 fix(expo-app): avoid hooks order violation on redirect PR04 pick e0f0fa69d440c7c3f2cc9b74b4ba9d1c8f8a6d36 fix(expo-app): avoid hooks order violation on redirect cherry-pick (no edits).
|
|
45
|
+
256 5537815563059192774839feca13768250362b79 cli(auth): add --no-open to skip browser open PR04 pick 9d308d09e6b78f9b6883c348f31456be7332c772 cli(auth): add --no-open to skip browser open cherry-pick (no edits).
|
|
46
|
+
006 a5fbc3e8ba00ba0f41b9af18ca0c6296414f5533 feat(persistence): scope storage and validate draft modes PR05 deferred-fragment 20a2d994fd2c3ca74f1ae82409db9913665640d3 fix(persistence): persist selectedProfileId and harden settings version Applied PR05-owned draft persistence hardening + tests; left permission/model-mode clamps deferred to PR10/PR28 to avoid duplicating validation.
|
|
47
|
+
115 a8093e3e4ddb6ff974e69d8aa29fe43fce34dbad docs(persistence): update profile schema version comment PR05 pick+resolve 812e7842481298d86a53e80764d042caea347b2f docs(persistence): update profile schema version comment Resolved trivial conflict in cli/src/persistence.ts comment by keeping generic wording; content-only change.
|
|
48
|
+
011 c2d3507357dc7ef150105ff56468ec2f580943f6 fix(settings): make parsing tolerant for profiles PR06 split f212f57fab2715c28749a356a026cd175df56caa fix(settings): make parsing tolerant for profiles Applied tolerant parsing + legacy profile normalization; deferred sync convergence hunk in `expo-app/sources/sync/sync.ts` to PR27 (depends on replaceSettings).
|
|
49
|
+
024 9c19baa833b9e1875e6f5811440db6ff903e4d86 feat(settings): add api keys and experiment toggles PR06 pick 463c97c3e42c8c046761a0e0c8390893c2460669 feat(settings): add api keys and experiment toggles Applied settings schema + persistence for saved API keys and per-experiment toggles (includes resurrected/centralized `profileRouteParams.ts` usage).
|
|
50
|
+
025 21cc6df79f50cf13bfec4545c19b77034d3f3a4c feat(api-keys): add saved API keys UI PR06 pick+resolve 6012c889aeec3064ddc9aa7f2c4f4ace569f1a6b feat(api-keys): add saved API keys UI Applied API keys list/detail UI + selection wiring; resolved SettingsView conflicts by adding API keys nav + usage gating.
|
|
51
|
+
030 679877c26ea934a3d4c0ff9ba68072662af1dc48 feat(settings): expose per-experiment toggles PR06 pick+resolve 724146cb5c765098f1fb253014cbf156a6fc5a1f feat(settings): expose per-experiment toggles Applied Settings UI for per-experiment toggles; resolved minor conflicts and removed now-unused `useProfiles` import to keep TS clean.
|
|
52
|
+
038 7976b877259cac770f41537f44fa70e54df721a2 feat(experiments): gate Zen, file viewer, and voice auth flow PR06 split 62c43e4bffa6bdf05036baca27d0d5a9d82503af feat(experiments): gate Zen, file viewer, and voice auth flow Applied gating behavior for Zen/file viewer/voice auth; deferred Zen i18n literal replacements to PR06 follow-up (tracked in rewrite-deferred-fragments.tsv).
|
|
53
|
+
048 395da4ff31674675c93d443626d50d3baa3f99ed refactor(zen): avoid todo variable shadowing PR06 pick f3aec2f5c2ba1e5ca188fd1303d64006f5636d56 refactor(zen): avoid todo variable shadowing Cherry-picked as tiny Zen readability refactor; can squash into other Zen commits in PR06 if desired.
|
|
54
|
+
196 21e096e9454e4ab8ed684aa90eb544e8dbacb14f fix(i18n): localize session settings item PR06 pick+resolve dc274999ecf65b044b9124eddb628fcd7f6d4708 fix(i18n): localize session settings item Applied with 3-way conflict resolution (SettingsView routing differs in rewrite base); also restored missing `settings.{secrets,terminal,session}` keys across locales to match current SettingsView usage.
|
|
55
|
+
203 b6d3874bf175911f2dea935203994ce6027d6ad1 fix(settings): include Codex resume in master experiment toggle PR06 pick 392bb13cad6b246e00b6781f1f3b033caa77ba91 fix(settings): include Codex resume in master experiment toggle Applied as-is (small correctness fix on master experiments switch).
|
|
56
|
+
223 73ce32d242a050a44cdf4cb70439abcd594fcde1 fix(i18n): translate Spanish experiment subtitles PR06 split 71a768da58c0f9af0c4d85a8bdacdeab613b91f9 fix(i18n): add experiments toggle strings Adapted: upstream refactor moved experiment strings under `settingsFeatures.*`; added missing experiment toggle keys for all locales and applied the Spanish subtitle translations from old 223 (plus expGemini strings required by current features screen).
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
# `leeroy-wip` history rewrite process (non-destructive, auditable)
|
|
2
|
+
|
|
3
|
+
This document defines the **end-to-end process** to rebuild the `leeroy-wip` branch into a clean, coherent commit history while **keeping the original branch untouched** so other agents can continue working.
|
|
4
|
+
|
|
5
|
+
Scope: **planning + execution of the rewrite**, not feature changes.
|
|
6
|
+
|
|
7
|
+
## Goals
|
|
8
|
+
|
|
9
|
+
- Keep `leeroy-wip` **unchanged** and available for ongoing work.
|
|
10
|
+
- Build a new branch (`rewrite/clean-stack`) with a **clean linear history**:
|
|
11
|
+
- commits represent the **final correct state** of each feature/fix (not the “evolution”)
|
|
12
|
+
- keep **useful commit granularity** (avoid 1 mega-commit per PR)
|
|
13
|
+
- improve commit subjects/bodies so reviewers understand **what/why**
|
|
14
|
+
- Create **PR boundary markers** so we can later cut stacked PR branches mechanically.
|
|
15
|
+
- Preserve provenance in a **ledger** (old commits → new commits) so we can:
|
|
16
|
+
- prove equivalence (`range-diff`, `diff --stat`)
|
|
17
|
+
- audit that no commits/features were dropped unintentionally
|
|
18
|
+
|
|
19
|
+
## Non-goals
|
|
20
|
+
|
|
21
|
+
- Do not rebase or otherwise rewrite `leeroy-wip`.
|
|
22
|
+
- Do not “fix” unrelated code during rewrite (rewrite should be behavior-preserving vs the frozen baseline).
|
|
23
|
+
- Do not create backups early “just in case”; backups are taken **right before** rewrite execution.
|
|
24
|
+
|
|
25
|
+
## Source-of-truth inputs
|
|
26
|
+
|
|
27
|
+
- Commit-by-commit deep review: `docs/commit-audits/happy/leeroy-wip.commit-manual-review.md`
|
|
28
|
+
- Commit → final PR assignment (source of truth): `docs/commit-audits/happy/leeroy-wip.pr-assignment.working.tsv`
|
|
29
|
+
- PR definitions: `docs/commit-audits/happy/leeroy-wip.pr-catalog.draft.md`
|
|
30
|
+
- Split guidance: `docs/commit-audits/happy/leeroy-wip.split-plan.draft.md`
|
|
31
|
+
- Patch artifacts (Pass2): `/tmp/leeroy-wip-pass2/NNN.patch`
|
|
32
|
+
|
|
33
|
+
## Tracking outputs (rewrite execution)
|
|
34
|
+
|
|
35
|
+
These two files are the execution control plane (always update them as you go):
|
|
36
|
+
|
|
37
|
+
- Rewrite ledger: `docs/commit-audits/happy/leeroy-wip.rewrite-ledger.tsv`
|
|
38
|
+
- one row per **original commit NNN**
|
|
39
|
+
- records whether it was cherry-picked, split, squashed into another commit, or dropped as a net no-op
|
|
40
|
+
- records the **new commit SHA(s)** created in `rewrite/clean-stack`
|
|
41
|
+
- Rewrite status board: `docs/commit-audits/happy/leeroy-wip.rewrite-status.tsv`
|
|
42
|
+
- one row per **PR slice**
|
|
43
|
+
- records start/end new SHA, boundary tag, validation commands run, notes
|
|
44
|
+
|
|
45
|
+
### Deferred fragment tracking (mandatory when splitting/deferring)
|
|
46
|
+
|
|
47
|
+
To ensure each PR slice represents the **final state** of that feature/fix (and to ensure we don’t “lose” parts of mega-commits), we also maintain:
|
|
48
|
+
|
|
49
|
+
- Deferred fragments tracker: `docs/commit-audits/happy/leeroy-wip.rewrite-deferred-fragments.tsv`
|
|
50
|
+
- one row per **intentionally deferred file/hunk** from an original commit
|
|
51
|
+
- records the **target PR**, path, reason, and resolution status (`pending` → `resolved`)
|
|
52
|
+
|
|
53
|
+
Hard rule:
|
|
54
|
+
- If you split an original commit and do **not** bring all its changes into the current PR slice, you **must** add rows for the deferred pieces immediately.
|
|
55
|
+
|
|
56
|
+
## Hard invariants (must follow)
|
|
57
|
+
|
|
58
|
+
- All git operations must go through `happys wt git ...` (no raw `git` directly).
|
|
59
|
+
- Never modify default checkouts under `components/<component>`; use worktrees only.
|
|
60
|
+
- Never rebase `leeroy-wip`. Never force-push it. Never amend commits on it.
|
|
61
|
+
- Rewrite happens only in the rewrite worktree/branch.
|
|
62
|
+
- Every original commit in scope **must** be accounted for in the ledger (pick/split/squash/drop).
|
|
63
|
+
- By default: **i18n is folded into the owning feature PR**, not centralized, unless explicitly decided otherwise.
|
|
64
|
+
|
|
65
|
+
## Ensuring “final state per PR” is actually true
|
|
66
|
+
|
|
67
|
+
We cannot “prove” final-state correctness until the full rewrite completes and we compare to the frozen baseline (Phase E).
|
|
68
|
+
But we can enforce strong guarantees during execution:
|
|
69
|
+
|
|
70
|
+
1) **PR slices are defined by final feature buckets**, not chronology:
|
|
71
|
+
- The picklist for PRxx includes *all* original commits assigned to PRxx (even if they happened late in `leeroy-wip`).
|
|
72
|
+
- Therefore, bugfixes for a feature are applied in the same PR slice, yielding the feature’s “final state” at the PR boundary.
|
|
73
|
+
|
|
74
|
+
2) **PR boundary means “no more changes for this feature”**:
|
|
75
|
+
- Before tagging `rewrite/prXX-end`, ensure:
|
|
76
|
+
- the working tree is clean
|
|
77
|
+
- all PRxx commits are accounted for in the ledger
|
|
78
|
+
- any deferred fragments have explicit rows in `rewrite-deferred-fragments.tsv`
|
|
79
|
+
|
|
80
|
+
3) **Post-boundary drift detection**:
|
|
81
|
+
- If a later PR slice touches “owned” files from an earlier PR (beyond expected cross-cutting infra), treat that as a signal:
|
|
82
|
+
- either the change belongs in the earlier PR and should be pulled down, or
|
|
83
|
+
- the PR boundaries/ownership need explicit documentation.
|
|
84
|
+
|
|
85
|
+
## Phase A — Freeze a baseline snapshot (right before rewrite execution)
|
|
86
|
+
|
|
87
|
+
Purpose: create immutable anchors so we can prove “rewritten history == baseline end state”.
|
|
88
|
+
|
|
89
|
+
Run in the `leeroy-wip` worktree:
|
|
90
|
+
|
|
91
|
+
1) Record anchors (copy into `leeroy-wip.commit-inventory.md`):
|
|
92
|
+
- `happys wt git happy slopus/tmp/leeroy-wip -- rev-parse upstream/main`
|
|
93
|
+
- `happys wt git happy slopus/tmp/leeroy-wip -- merge-base HEAD upstream/main`
|
|
94
|
+
- `happys wt git happy slopus/tmp/leeroy-wip -- rev-parse HEAD`
|
|
95
|
+
|
|
96
|
+
2) Create immutable refs pointing at the baseline HEAD:
|
|
97
|
+
- `happys wt git happy slopus/tmp/leeroy-wip -- branch backup/leeroy-wip-YYYY-MM-DD HEAD`
|
|
98
|
+
- `happys wt git happy slopus/tmp/leeroy-wip -- tag -a backup/leeroy-wip-YYYY-MM-DD -m "leeroy-wip rewrite baseline" HEAD`
|
|
99
|
+
|
|
100
|
+
3) Create a portable bundle snapshot:
|
|
101
|
+
- `happys wt git happy slopus/tmp/leeroy-wip -- bundle create /tmp/leeroy-wip-YYYY-MM-DD.bundle upstream/main..HEAD`
|
|
102
|
+
|
|
103
|
+
## Phase B — Create one rewrite worktree + one rewrite branch
|
|
104
|
+
|
|
105
|
+
Create a new worktree from `upstream/main` (example names):
|
|
106
|
+
|
|
107
|
+
- Worktree: `slopus/tmp/leeroy-rewrite`
|
|
108
|
+
- Branch: `rewrite/clean-stack`
|
|
109
|
+
|
|
110
|
+
Example:
|
|
111
|
+
- `happys wt new happy tmp/leeroy-rewrite --from=upstream --use`
|
|
112
|
+
- `happys wt git happy slopus/tmp/leeroy-rewrite -- checkout -b rewrite/clean-stack upstream/main`
|
|
113
|
+
|
|
114
|
+
## Phase C — Lock the PR execution order
|
|
115
|
+
|
|
116
|
+
We reconstruct a single linear branch by applying **PR slices** in an intentional order (dependency-safe, but still feature/fix oriented).
|
|
117
|
+
|
|
118
|
+
Rule:
|
|
119
|
+
- Write the final PR order into `leeroy-wip.rewrite-status.tsv` (top-to-bottom).
|
|
120
|
+
- Do not change that order mid-flight without documenting the reason (and updating the TSV).
|
|
121
|
+
|
|
122
|
+
## Phase D — The reconstruction loop (PR slice by PR slice)
|
|
123
|
+
|
|
124
|
+
For each PR (in the locked order):
|
|
125
|
+
|
|
126
|
+
### D1) Compute the PR picklist
|
|
127
|
+
|
|
128
|
+
Use `leeroy-wip.pr-assignment.working.tsv` to list all commits where `finalPr == PRxx`.
|
|
129
|
+
|
|
130
|
+
Picklist must be:
|
|
131
|
+
- ordered by `n` (oldest → newest)
|
|
132
|
+
- include `needsSplit` / “drop/squash” notes
|
|
133
|
+
|
|
134
|
+
### D2) For each commit in the picklist, decide the action (must be ledgered)
|
|
135
|
+
|
|
136
|
+
For commit `NNN`:
|
|
137
|
+
|
|
138
|
+
1) Read the full commit section:
|
|
139
|
+
- `docs/commit-audits/happy/leeroy-wip.commit-manual-review.md` `## NNN ...`
|
|
140
|
+
2) Read the patch (mandatory for split decisions and safety-critical changes):
|
|
141
|
+
- `/tmp/leeroy-wip-pass2/NNN.patch`
|
|
142
|
+
3) Choose one action and record it immediately in the ledger:
|
|
143
|
+
- `pick`: cherry-pick as-is (maybe with message rewrite)
|
|
144
|
+
- `split`: cherry-pick `-n`, then `git add -p`, produce multiple focused commits
|
|
145
|
+
- `squash-into`: do not cherry-pick this commit; absorb its change into another new commit in this PR slice
|
|
146
|
+
- `drop-net-noop`: only when it is a revert pair or true net no-op (must explain)
|
|
147
|
+
- `defer`: only when the *entire* original commit belongs to a later PR slice due to ordering dependencies
|
|
148
|
+
|
|
149
|
+
If the action is `split` and some changes are intentionally not applied:
|
|
150
|
+
- add rows to `leeroy-wip.rewrite-deferred-fragments.tsv` for each deferred file/hunk.
|
|
151
|
+
|
|
152
|
+
### D3) Apply the change in the rewrite worktree
|
|
153
|
+
|
|
154
|
+
Commands (examples; always use `happys wt git happy slopus/tmp/leeroy-rewrite -- ...`):
|
|
155
|
+
|
|
156
|
+
- Pick:
|
|
157
|
+
- `cherry-pick <oldSha>`
|
|
158
|
+
- optionally `--edit` to rewrite subject/body to Conventional Commits
|
|
159
|
+
|
|
160
|
+
- Split:
|
|
161
|
+
- `cherry-pick -n <oldSha>`
|
|
162
|
+
- `git add -p` (multiple times)
|
|
163
|
+
- `git commit -m "feat(scope): ..." -m "<why + constraints + key behavior>"`
|
|
164
|
+
- repeat until the working tree is clean
|
|
165
|
+
|
|
166
|
+
- Squash-into:
|
|
167
|
+
- do not cherry-pick the commit
|
|
168
|
+
- apply the relevant hunks when you build the “final” commit for the feature
|
|
169
|
+
- ledger must point to the “destination” new commit SHA(s)
|
|
170
|
+
|
|
171
|
+
### D4) Commit message rules (mandatory)
|
|
172
|
+
|
|
173
|
+
Each rewritten commit must have:
|
|
174
|
+
- Conventional Commit subject (`feat|fix|refactor|test|chore(scope): ...`)
|
|
175
|
+
- body that answers:
|
|
176
|
+
- **what changed** (observable behavior)
|
|
177
|
+
- **why** (user problem / reliability / safety / invariants)
|
|
178
|
+
- any **constraints** (back-compat, migrations, ordering)
|
|
179
|
+
|
|
180
|
+
Do **not** copy-paste old SHAs into commit messages.
|
|
181
|
+
Provenance is preserved in `leeroy-wip.rewrite-ledger.tsv`.
|
|
182
|
+
|
|
183
|
+
### D5) Close the PR slice
|
|
184
|
+
|
|
185
|
+
When all commits assigned to PRxx are accounted for (ledger complete for those NNNs):
|
|
186
|
+
|
|
187
|
+
1) Run validation appropriate to the slice:
|
|
188
|
+
- `happys typecheck ...`
|
|
189
|
+
- `happys test ...`
|
|
190
|
+
2) Record validation commands + results in `leeroy-wip.rewrite-status.tsv`.
|
|
191
|
+
3) Create a boundary marker at HEAD:
|
|
192
|
+
- tag: `rewrite/prXX-end`
|
|
193
|
+
4) Record:
|
|
194
|
+
- `prEndNewSha`
|
|
195
|
+
- `boundaryTag`
|
|
196
|
+
|
|
197
|
+
## Phase E — Final equivalence proof
|
|
198
|
+
|
|
199
|
+
When `rewrite/clean-stack` is complete:
|
|
200
|
+
|
|
201
|
+
1) Compare to the frozen baseline:
|
|
202
|
+
- `range-diff upstream/main...backup/leeroy-wip-YYYY-MM-DD upstream/main...rewrite/clean-stack`
|
|
203
|
+
- `diff --stat upstream/main...backup/leeroy-wip-YYYY-MM-DD upstream/main...rewrite/clean-stack`
|
|
204
|
+
2) If differences exist:
|
|
205
|
+
- decide if intentional
|
|
206
|
+
- otherwise fix the rewrite branch (do not touch `leeroy-wip`)
|
|
207
|
+
|
|
208
|
+
## Phase F — Cut stacked PR branches from boundary markers (later)
|
|
209
|
+
|
|
210
|
+
Once the full rewrite stack is validated:
|
|
211
|
+
|
|
212
|
+
- PR01 branch = `rewrite/pr01-end`
|
|
213
|
+
- PR02 branch = `rewrite/pr02-end` (base is PR01 boundary)
|
|
214
|
+
- …
|
|
215
|
+
|
|
216
|
+
Because each PR slice has a boundary tag, branch cutting is mechanical and safe.
|
|
217
|
+
|
|
218
|
+
## Handling new commits landing on `leeroy-wip` during rewrite
|
|
219
|
+
|
|
220
|
+
1) Audit only the delta (append to docs; update TSV).
|
|
221
|
+
2) Assign new commits to existing PRs when they belong to an existing final feature/fix.
|
|
222
|
+
3) Only create a new PR bucket when it’s truly a new final feature/fix.
|
|
223
|
+
4) In the rewrite branch:
|
|
224
|
+
- if PR slice not yet closed → incorporate into that PR slice
|
|
225
|
+
- if PR slice already closed → add a new PR slice on top (or reopen only with explicit decision + new boundary tag)
|
|
226
|
+
|
|
227
|
+
## Resume prompt (copy/paste)
|
|
228
|
+
|
|
229
|
+
Use this exact prompt to resume work without losing process invariants:
|
|
230
|
+
|
|
231
|
+
“Continue the `leeroy-wip` rewrite on `slopus/tmp/rewrite-clean-stack`.
|
|
232
|
+
Work on the current PR slice (see `docs/commit-audits/happy/leeroy-wip.rewrite-status.tsv` for which PR is `in_progress`).
|
|
233
|
+
For the next unprocessed original commit(s) in that PR slice:
|
|
234
|
+
1) Read its section in `docs/commit-audits/happy/leeroy-wip.commit-manual-review.md` and its Pass2 patch under `/tmp/leeroy-wip-pass2/NNN.patch`.
|
|
235
|
+
2) Apply via `happys wt git ...` as `pick` or `split` (or explicit `defer`/`drop-net-noop` only when justified).
|
|
236
|
+
3) If splitting and deferring any file/hunk, add rows immediately to `docs/commit-audits/happy/leeroy-wip.rewrite-deferred-fragments.tsv`.
|
|
237
|
+
4) Update `docs/commit-audits/happy/leeroy-wip.rewrite-ledger.tsv` for each original commit touched (old→new mapping + notes).
|
|
238
|
+
5) Update `docs/commit-audits/happy/leeroy-wip.rewrite-status.tsv` notes with what was completed.
|
|
239
|
+
6) Keep the rewrite worktree clean after each commit (`git status` clean).
|
|
240
|
+
Stop after a small batch (5–10 commits or ~1–2 hours of work) and report: new SHAs, which old commits were accounted for, any new defers, and any reclassifications.”
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
order prId prTitle status startedAt finishedAt prStartNewSha prEndNewSha boundaryTag validationCommands notes
|
|
2
|
+
01 PR01 Foundations / DevX completed 2026-01-25T16:48:03+0100 2026-01-25T16:54:19+0100 f1144d58da0498137c639b7d2970f1c89945bbc9 67323a48f4b922c0de096f70cdda8e9de49bcefe rewrite/pr01-end TODO: run stack-scoped typecheck/tests against slopus/tmp/rewrite-clean-stack Applied all PR01 commits; skipped format/untranslated-scan and two deleted tests as net-noise. Combined old 250+262 into a single final Vitest stub commit. Rewrite branch: `slopus/tmp/rewrite-clean-stack`.
|
|
3
|
+
02 PR02 UI modal/overlay/popover system (native + web) + Expo web modal behavior completed 2026-01-25T16:58:13+0100 2026-01-25T18:16:51+0100 67323a48f4b922c0de096f70cdda8e9de49bcefe ad0c5ae9867ce4fc3593b0d30e87e2ea76e47795 rewrite/pr02-end TODO: run stack-scoped typecheck/tests against slopus/tmp/rewrite-clean-stack Applied old 013/022/029/032/035; split old 020 into 3 commits; split old 039 into overlay+Radix web modals + Popover + FloatingOverlay edge fades/indicators + ConnectionStatusControl (+ AgentInputAutocomplete maxHeight); applied old 050/055; split old 059 (kept popover/connection-status bits, deferred new-session test); applied old 062; applied overlay hardening from old 064 as new 37a65d0e (deferred wizard+permission pieces). Accounted: old 054 as split/defer-all (see rewrite-deferred-fragments.tsv + ledger). Applied expo install/web-modal plumbing (old 163/248/249/276) and tagged boundary.
|
|
4
|
+
03 PR38 UI list primitives + pending UI polish completed 2026-01-25T18:16:51+0100 2026-01-25T18:41:24+0100 ad0c5ae9867ce4fc3593b0d30e87e2ea76e47795 7357579e997e17fc928f6b1d4d513437ac49ef1f rewrite/pr38-end TODO: run stack-scoped typecheck/tests against slopus/tmp/rewrite-clean-stack Split old 275; applied PR38-owned list primitives as ed3de522 (ItemGroup dividers/row-position/selection context + SelectableRow + dropdown menu primitives + tests). Applied deferred CommandPalette refactor fragment as c429a814 (SelectableRow-based palette items + localized empty state). Added shared item action types as 7357579e. Deferred remaining old 275 files to PR13/PR08/PR37/PR06/PR25/PR02. Marked PR38 deferred fragments as resolved (including OptionTiles hunk as net-noop since file is gone).
|
|
5
|
+
04 PR03 i18n foundation sweep (optional, early) deferred Default strategy: fold i18n into owning PRs; only run this slice if we explicitly decide to reduce conflict surface.
|
|
6
|
+
05 PR04 Auth + storage scoping (app auth persistence, scoped storage roots) completed 2026-01-25T18:41:24+0100 2026-01-25T19:46:02+0100 7357579e997e17fc928f6b1d4d513437ac49ef1f 150a12282ba957b74330a6c727c31627ad92afa4 rewrite/pr04-end TODO: run stack-scoped typecheck/tests against slopus/tmp/rewrite-clean-stack Applied old 004/156/177/256. Split old 006 into storageScope helpers (4bae1291) + MMKV id scoping + regression test (150a1228). Deferred draft/model-mode hunks from old 006 to PR05/PR28 via rewrite-deferred-fragments.tsv. Baseline for equivalence remains backup/leeroy-wip-2026-01-25-10dca4ca (do not fold post-baseline commits during rewrite).
|
|
7
|
+
06 PR05 Persistence / drafts (draft modes, persistence invariants) completed 2026-01-25T19:46:02+0100 2026-01-25T19:59:46+0100 150a12282ba957b74330a6c727c31627ad92afa4 812e7842481298d86a53e80764d042caea347b2f rewrite/pr05-end Applied PR05-owned deferred fragments from old 006 as 20a2d994 (selectedProfileId + settings version guard + draft tests); picked+resolved old 115 as 812e7842. Deferred permission/model clamps and model-mode tests to PR10/PR28.
|
|
8
|
+
07 PR06 Settings: API keys + experiments + settings screens in_progress 2026-01-25T19:59:46+0100 812e7842481298d86a53e80764d042caea347b2f 71a768da58c0f9af0c4d85a8bdacdeab613b91f9 Settings surfaces used by later features. Applied old 011 (split sync.ts hunk → PR27), 024, 025, 030, 038 (gating only; Zen i18n deferred in-slice), 048, 196, 203, 223 (adapted to `settingsFeatures.*`).
|
|
9
|
+
08 PR07 Env var templates + preview/resolution end-to-end pending Env templates + preview/resolution UX (excluding preview-env RPC if kept separate).
|
|
10
|
+
09 PR15 preview-env feature end-to-end pending Backend/RPC slice; keep narrowly scoped to preview-env.
|
|
11
|
+
10 PR08 Profiles feature (profiles + env var selection UX) pending Depends on env/templates + settings.
|
|
12
|
+
11 PR09 Secrets / vault (SecretString + sealing + tolerant parsing + redaction) pending Includes secret UI + parsing hardening; keep i18n in-slice.
|
|
13
|
+
12 PR10 Permission framework (Claude/cloud baseline) pending Baseline permission types/persistence/arbitration for Claude/cloud.
|
|
14
|
+
13 PR11 Agent permissions (Codex/Gemini): permission modes + allowlists (agent-specific correctness) pending Extends permission behavior beyond Claude; includes per-session allowlists + shell approvals hardening.
|
|
15
|
+
14 PR16 Daemon reliability (ownership + reattach/restart safety) pending Process ownership, idempotency, shutdown policies.
|
|
16
|
+
15 PR17 CLI reliability (socket/metadata waiters + backoff semantics) pending Waiter cleanup/reconnect/backoff correctness.
|
|
17
|
+
16 PR27 Sync robustness (transport/error parsing + backoff semantics) pending App sync robustness not specific to queue/capabilities.
|
|
18
|
+
17 PR28 Model modes (configurable per-session model selection + persistence) pending Per-session model mode correctness + persistence.
|
|
19
|
+
18 PR14 Capabilities feature end-to-end (protocol + wiring + reliability) pending Capabilities protocol + caching + request/retry semantics.
|
|
20
|
+
19 PR37 Agent registry end-to-end (selection + settings + UX helpers) pending Typed agent registry in app; unify selection/toggles and helpers.
|
|
21
|
+
20 PR36 ACP agents end-to-end (runtimes + replay + tool normalization) pending ACP runtimes (Codex ACP/OpenCode) + replay capture/import + normalization.
|
|
22
|
+
21 PR12 Tool interaction: AskUserQuestion + ExitPlan native handling (end-to-end) pending interaction.respond wiring + permission-id guardrails + submit flows.
|
|
23
|
+
22 PR39 Tool UX: normalization + specialized views + tracing pending Normalize tool-call shapes + specialized rendering + tool-trace fixtures.
|
|
24
|
+
23 PR13 MessageQueueV1 + Pending messages (end-to-end) pending Queue semantics + pending/discard + wake behavior.
|
|
25
|
+
24 PR26 New session wizard end-to-end (wizard + pick flows + machine selection) pending New-session flow; keep coherent and split mixed commits.
|
|
26
|
+
25 PR19 Resume feature end-to-end (inactive resume + session lifecycle) pending Resume UX + RPCs + daemon plumbing; keep i18n/a11y in-slice.
|
|
27
|
+
26 PR20 Claude session reliability (switching + transcript/scanner + local runner) pending Claude-specific reliability beyond resume and terminal IO.
|
|
28
|
+
27 PR31 Terminal switching reliability (remote↔local UX + Ink input + signal forwarding) pending Terminal IO + switching reliability; non-tmux specific.
|
|
29
|
+
28 PR18 TMUX end-to-end (headless sessions + attach + settings) pending Tmux only; keep pure tmux concerns here.
|
|
30
|
+
29 PR32 Codex approvals + MCP tool interactions (execpolicy + elicitation) pending Codex approvals + MCP tool-call begin/end + bridge runner compat.
|
|
31
|
+
30 PR21 Codex MCP tool-call result correctness pending Falsy Ok/Err correctness + adjacent fixes.
|
|
32
|
+
31 PR33 Codex special commands (/clear session reset) pending Session boundary reset semantics.
|
|
33
|
+
32 PR30 Agent error surfaces (Codex/Gemini) pending Make agent failures user-visible/actionable; keep focused.
|
|
34
|
+
33 PR29 Sessions & message list UX (inactive grouping, unread, archive reliability) pending Session list UX improvements; keep to browsing + archive behavior.
|
|
35
|
+
34 PR35 Friends: UX + reliability (search errors + follow-ups) pending Inbox/friends gating + reliability fixes.
|
|
36
|
+
35 PR22 Server-light flavor (final feature: lightweight server variant) pending Server flavor work; keep schema/prisma sync coherent.
|
|
37
|
+
36 PR23 Server: optionally serve UI + public files safely (final feature) pending UI serving + public file path hardening.
|
|
38
|
+
37 PR24 Storage: S3 env + bucket validation (final fix) pending S3/Minio fail-fast validation.
|
|
39
|
+
38 PR25 Misc small UX polish (only if it stays small) pending Only truly isolated polish; otherwise fold into owning PR.
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# Split plan (draft)
|
|
2
|
+
|
|
3
|
+
Generated: 2026-01-25T18:08:26.316Z
|
|
4
|
+
|
|
5
|
+
This lists commits whose manual-review verdict suggests **splitting** (mixed concerns).
|
|
6
|
+
The “how to split” is captured here as a checklist so we can execute it mechanically during the rewrite (via `cherry-pick -n` + selective staging).
|
|
7
|
+
|
|
8
|
+
## 054 66c678451335 fix(ui): apply small review fixes
|
|
9
|
+
|
|
10
|
+
- Verdict: split
|
|
11
|
+
- Depends on:
|
|
12
|
+
- none (but many of these are follow-ups to nearby feature commits: session model mode, new picker, settings, dropdown, sync backoff).
|
|
13
|
+
|
|
14
|
+
Files touched:
|
|
15
|
+
- M `expo-app/sources/-session/SessionView.tsx`
|
|
16
|
+
- M `expo-app/sources/app/(app)/new/pick/machine.tsx`
|
|
17
|
+
- M `expo-app/sources/app/(app)/settings/terminal.tsx`
|
|
18
|
+
- M `expo-app/sources/components/ConnectionStatusControl.tsx`
|
|
19
|
+
- M `expo-app/sources/components/OptionTiles.tsx`
|
|
20
|
+
- M `expo-app/sources/components/SettingsView.tsx`
|
|
21
|
+
- M `expo-app/sources/components/dropdown/DropdownMenu.tsx`
|
|
22
|
+
- M `expo-app/sources/utils/sync.ts`
|
|
23
|
+
|
|
24
|
+
Rewrite hints (from manual review):
|
|
25
|
+
- Keep subject (if not splitting): `fix(ui): apply small review fixes`
|
|
26
|
+
- If splitting by topic: convert into multiple commits scoped to the touched features (session model mode, new picker, settings terminal, dropdown chevron opacity, sync backoff).
|
|
27
|
+
|
|
28
|
+
## 059 f7f81497444d fix(modal): prevent non-dismissible WebAlertModal
|
|
29
|
+
|
|
30
|
+
- Verdict: split
|
|
31
|
+
- Depends on:
|
|
32
|
+
-
|
|
33
|
+
|
|
34
|
+
Files touched:
|
|
35
|
+
- M `expo-app/sources/__tests__/app/new/pick/machine.presentation.test.ts`
|
|
36
|
+
- A `expo-app/sources/components/ConnectionStatusControl.popover.test.ts`
|
|
37
|
+
- M `expo-app/sources/components/ConnectionStatusControl.tsx`
|
|
38
|
+
- M `expo-app/sources/components/Popover.test.ts`
|
|
39
|
+
- M `expo-app/sources/components/Popover.tsx`
|
|
40
|
+
- M `expo-app/sources/modal/components/WebAlertModal.tsx`
|
|
41
|
+
|
|
42
|
+
Rewrite hints (from manual review):
|
|
43
|
+
- If kept as a single commit: rewrite subject to reflect the actual scope (Popover + modal + portal).
|
|
44
|
+
- Preferred: split as described above and keep the original subject only for the WebAlertModal change.
|
|
45
|
+
|
|
46
|
+
## 082 3fbdc10018fe fix: tmux parsing/targeting + review feedback
|
|
47
|
+
|
|
48
|
+
- Verdict: split
|
|
49
|
+
- Depends on:
|
|
50
|
+
- tmux semantics and consistent env formatting (this commit documents the assumptions).
|
|
51
|
+
|
|
52
|
+
Files touched:
|
|
53
|
+
- M `cli/bin/happy-dev.mjs`
|
|
54
|
+
- M `cli/docs/bug-fix-plan-2025-01-15-athundt.md`
|
|
55
|
+
- M `cli/scripts/__tests__/ripgrep_launcher.test.ts`
|
|
56
|
+
- M `cli/scripts/claude_version_utils.cjs`
|
|
57
|
+
- M `cli/scripts/claude_version_utils.test.ts`
|
|
58
|
+
- M `cli/scripts/env-wrapper.cjs`
|
|
59
|
+
- M `cli/scripts/ripgrep_launcher.cjs`
|
|
60
|
+
- M `cli/scripts/test-continue-fix.sh`
|
|
61
|
+
- M `cli/src/api/api.test.ts`
|
|
62
|
+
- M `cli/src/api/apiSession.ts`
|
|
63
|
+
- M `cli/src/api/types.ts`
|
|
64
|
+
- M `cli/src/claude/claudeLocal.ts`
|
|
65
|
+
- M `cli/src/claude/runClaude.ts`
|
|
66
|
+
- M `cli/src/utils/tmux.test.ts`
|
|
67
|
+
- M `cli/src/utils/tmux.ts`
|
|
68
|
+
|
|
69
|
+
Rewrite hints (from manual review):
|
|
70
|
+
- Rewrite subject to Conventional Commits: `fix(tmux): correct TMUX parsing and command targeting`
|
|
71
|
+
|
|
72
|
+
## 224 98bc00096e86 fix(i18n): localize Codex resume banner
|
|
73
|
+
|
|
74
|
+
- Verdict: split
|
|
75
|
+
|
|
76
|
+
Files touched:
|
|
77
|
+
- M `expo-app/sources/app/(app)/new/NewSessionWizard.tsx`
|
|
78
|
+
- M `expo-app/sources/text/translations/ca.ts`
|
|
79
|
+
- M `expo-app/sources/text/translations/en.ts`
|
|
80
|
+
- M `expo-app/sources/text/translations/es.ts`
|
|
81
|
+
- M `expo-app/sources/text/translations/it.ts`
|
|
82
|
+
- M `expo-app/sources/text/translations/ja.ts`
|
|
83
|
+
- M `expo-app/sources/text/translations/pl.ts`
|
|
84
|
+
- M `expo-app/sources/text/translations/pt.ts`
|
|
85
|
+
- M `expo-app/sources/text/translations/ru.ts`
|
|
86
|
+
- M `expo-app/sources/text/translations/zh-Hans.ts`
|
|
87
|
+
|
|
88
|
+
Rewrite hints (from manual review):
|
|
89
|
+
- If split:
|
|
90
|
+
- `fix(i18n): localize Codex resume banner`
|
|
91
|
+
- `refactor(new-session): use WizardSectionHeaderRow for wizard sections`
|
|
92
|
+
- `refactor(new-session): centralize permission mode options`
|
|
93
|
+
- If squashed: keep the “fix(i18n)” message but mention the refactor in the body.
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Topic buckets (auto-triage)
|
|
2
|
+
|
|
3
|
+
Generated: 2026-01-25T18:08:26.315Z
|
|
4
|
+
|
|
5
|
+
Counts:
|
|
6
|
+
|
|
7
|
+
- `i18n`: 15
|
|
8
|
+
- `cli`: 15
|
|
9
|
+
- `sync`: 14
|
|
10
|
+
- `ui`: 13
|
|
11
|
+
- `claude`: 13
|
|
12
|
+
- `codex`: 13
|
|
13
|
+
- `expo-app`: 11
|
|
14
|
+
- `server`: 11
|
|
15
|
+
- `resume`: 10
|
|
16
|
+
- `daemon`: 7
|
|
17
|
+
- `tools`: 6
|
|
18
|
+
- `terminal`: 6
|
|
19
|
+
- `session`: 5
|
|
20
|
+
- `settings`: 5
|
|
21
|
+
- `new-session`: 5
|
|
22
|
+
- `profiles`: 5
|
|
23
|
+
- `rpc`: 5
|
|
24
|
+
- `happy`: 5
|
|
25
|
+
- `persistence`: 4
|
|
26
|
+
- `env`: 4
|
|
27
|
+
- `tmux`: 4
|
|
28
|
+
- `happy-cli`: 4
|
|
29
|
+
- `server-light`: 4
|
|
30
|
+
- `agent-input`: 3
|
|
31
|
+
- `modal`: 3
|
|
32
|
+
- `secrets`: 3
|
|
33
|
+
- `queue`: 3
|
|
34
|
+
- `utils`: 3
|
|
35
|
+
- `deps`: 2
|
|
36
|
+
- `auth`: 2
|
|
37
|
+
- `storage`: 2
|
|
38
|
+
- `popover`: 2
|
|
39
|
+
- `sessions`: 2
|
|
40
|
+
- `typecheck`: 2
|
|
41
|
+
- `fork`: 2
|
|
42
|
+
- `pr107`: 2
|
|
43
|
+
- `detect-cli`: 2
|
|
44
|
+
- `app`: 2
|
|
45
|
+
- `permission`: 2
|
|
46
|
+
- `web`: 2
|
|
47
|
+
- `crypto`: 1
|
|
48
|
+
- `config`: 1
|
|
49
|
+
- `dev`: 1
|
|
50
|
+
- `command-palette`: 1
|
|
51
|
+
- `cli-detection`: 1
|
|
52
|
+
- `test`: 1
|
|
53
|
+
- `api-keys`: 1
|
|
54
|
+
- `machine`: 1
|
|
55
|
+
- `autocomplete`: 1
|
|
56
|
+
- `experiments`: 1
|
|
57
|
+
- `zen`: 1
|
|
58
|
+
- `new`: 1
|
|
59
|
+
- `format`: 1
|
|
60
|
+
- `security`: 1
|
|
61
|
+
- `socket`: 1
|
|
62
|
+
- `logging`: 1
|
|
63
|
+
- `runtime`: 1
|
|
64
|
+
- `offline`: 1
|
|
65
|
+
- `gemini`: 1
|
|
66
|
+
- `common`: 1
|
|
67
|
+
- `scanner`: 1
|
|
68
|
+
- `reducer`: 1
|
|
69
|
+
- `ink`: 1
|
|
70
|
+
- `a11y`: 1
|
|
71
|
+
- `hooks`: 1
|
|
72
|
+
- `expo`: 1
|
|
73
|
+
|
|
74
|
+
Notes:
|
|
75
|
+
- These buckets come from `leeroy-wip.commit-analysis.md` and are a starting point, not the final PR grouping.
|
|
76
|
+
- Some buckets (notably `expo-app`, `storage`, `env`, `sync`) will be split across PRs by feature surface during planning.
|