happy-stacks 0.4.0 → 0.5.0

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.
Files changed (104) hide show
  1. package/README.md +64 -33
  2. package/bin/happys.mjs +44 -1
  3. package/docs/codex-mcp-resume.md +130 -0
  4. package/docs/commit-audits/happy/leeroy-wip.commit-analysis.md +17640 -0
  5. package/docs/commit-audits/happy/leeroy-wip.commit-export.fuller-stat.md +3845 -0
  6. package/docs/commit-audits/happy/leeroy-wip.commit-inventory.md +102 -0
  7. package/docs/commit-audits/happy/leeroy-wip.commit-manual-review.md +1452 -0
  8. package/docs/commit-audits/happy/leeroy-wip.manual-review-queue.md +116 -0
  9. package/docs/happy-development.md +1 -2
  10. package/docs/monorepo-migration.md +286 -0
  11. package/docs/server-flavors.md +19 -3
  12. package/docs/stacks.md +35 -0
  13. package/package.json +1 -1
  14. package/scripts/auth.mjs +21 -3
  15. package/scripts/build.mjs +1 -1
  16. package/scripts/dev.mjs +20 -7
  17. package/scripts/doctor.mjs +0 -4
  18. package/scripts/edison.mjs +2 -2
  19. package/scripts/env.mjs +150 -0
  20. package/scripts/env_cmd.test.mjs +128 -0
  21. package/scripts/init.mjs +5 -2
  22. package/scripts/install.mjs +99 -57
  23. package/scripts/migrate.mjs +3 -12
  24. package/scripts/monorepo.mjs +1096 -0
  25. package/scripts/monorepo_port.test.mjs +1470 -0
  26. package/scripts/review.mjs +715 -24
  27. package/scripts/review_pr.mjs +5 -20
  28. package/scripts/run.mjs +21 -15
  29. package/scripts/setup.mjs +147 -25
  30. package/scripts/setup_pr.mjs +19 -28
  31. package/scripts/stack.mjs +493 -157
  32. package/scripts/stack_archive_cmd.test.mjs +91 -0
  33. package/scripts/stack_editor_workspace_monorepo_root.test.mjs +65 -0
  34. package/scripts/stack_env_cmd.test.mjs +87 -0
  35. package/scripts/stack_happy_cmd.test.mjs +126 -0
  36. package/scripts/stack_interactive_monorepo_group.test.mjs +71 -0
  37. package/scripts/stack_monorepo_defaults.test.mjs +62 -0
  38. package/scripts/stack_monorepo_server_light_from_happy_spec.test.mjs +66 -0
  39. package/scripts/stack_server_flavors_defaults.test.mjs +55 -0
  40. package/scripts/stack_shorthand_cmd.test.mjs +55 -0
  41. package/scripts/stack_wt_list.test.mjs +128 -0
  42. package/scripts/tui.mjs +88 -2
  43. package/scripts/utils/cli/cli_registry.mjs +20 -5
  44. package/scripts/utils/cli/cwd_scope.mjs +56 -2
  45. package/scripts/utils/cli/cwd_scope.test.mjs +40 -7
  46. package/scripts/utils/cli/prereqs.mjs +8 -5
  47. package/scripts/utils/cli/prereqs.test.mjs +34 -0
  48. package/scripts/utils/cli/wizard.mjs +17 -9
  49. package/scripts/utils/cli/wizard_prompt_worktree_source_lazy.test.mjs +60 -0
  50. package/scripts/utils/dev/daemon.mjs +14 -1
  51. package/scripts/utils/dev/expo_dev.mjs +188 -4
  52. package/scripts/utils/dev/server.mjs +21 -17
  53. package/scripts/utils/edison/git_roots.mjs +29 -0
  54. package/scripts/utils/edison/git_roots.test.mjs +36 -0
  55. package/scripts/utils/env/env.mjs +7 -3
  56. package/scripts/utils/env/env_file.mjs +4 -2
  57. package/scripts/utils/env/env_file.test.mjs +44 -0
  58. package/scripts/utils/git/worktrees.mjs +63 -12
  59. package/scripts/utils/git/worktrees_monorepo.test.mjs +54 -0
  60. package/scripts/utils/net/tcp_forward.mjs +162 -0
  61. package/scripts/utils/paths/paths.mjs +118 -3
  62. package/scripts/utils/paths/paths_monorepo.test.mjs +58 -0
  63. package/scripts/utils/paths/paths_server_flavors.test.mjs +45 -0
  64. package/scripts/utils/proc/commands.mjs +2 -3
  65. package/scripts/utils/proc/pm.mjs +113 -16
  66. package/scripts/utils/proc/pm_spawn.test.mjs +76 -0
  67. package/scripts/utils/proc/pm_stack_cache_env.test.mjs +142 -0
  68. package/scripts/utils/proc/proc.mjs +68 -10
  69. package/scripts/utils/proc/proc.test.mjs +77 -0
  70. package/scripts/utils/review/chunks.mjs +55 -0
  71. package/scripts/utils/review/chunks.test.mjs +51 -0
  72. package/scripts/utils/review/findings.mjs +165 -0
  73. package/scripts/utils/review/findings.test.mjs +85 -0
  74. package/scripts/utils/review/head_slice.mjs +153 -0
  75. package/scripts/utils/review/head_slice.test.mjs +91 -0
  76. package/scripts/utils/review/instructions/deep.md +20 -0
  77. package/scripts/utils/review/runners/coderabbit.mjs +56 -14
  78. package/scripts/utils/review/runners/coderabbit.test.mjs +59 -0
  79. package/scripts/utils/review/runners/codex.mjs +32 -22
  80. package/scripts/utils/review/runners/codex.test.mjs +35 -0
  81. package/scripts/utils/review/slices.mjs +140 -0
  82. package/scripts/utils/review/slices.test.mjs +32 -0
  83. package/scripts/utils/server/flavor_scripts.mjs +98 -0
  84. package/scripts/utils/server/flavor_scripts.test.mjs +146 -0
  85. package/scripts/utils/server/prisma_import.mjs +37 -0
  86. package/scripts/utils/server/prisma_import.test.mjs +70 -0
  87. package/scripts/utils/server/ui_env.mjs +14 -0
  88. package/scripts/utils/server/ui_env.test.mjs +46 -0
  89. package/scripts/utils/server/validate.mjs +53 -16
  90. package/scripts/utils/server/validate.test.mjs +89 -0
  91. package/scripts/utils/stack/editor_workspace.mjs +4 -4
  92. package/scripts/utils/stack/interactive_stack_config.mjs +185 -0
  93. package/scripts/utils/stack/startup.mjs +113 -13
  94. package/scripts/utils/stack/startup_server_light_dirs.test.mjs +64 -0
  95. package/scripts/utils/stack/startup_server_light_generate.test.mjs +70 -0
  96. package/scripts/utils/stack/startup_server_light_legacy.test.mjs +88 -0
  97. package/scripts/utils/tailscale/ip.mjs +116 -0
  98. package/scripts/utils/ui/ansi.mjs +39 -0
  99. package/scripts/where.mjs +2 -2
  100. package/scripts/worktrees.mjs +627 -137
  101. package/scripts/worktrees_archive_cmd.test.mjs +245 -0
  102. package/scripts/worktrees_cursor_monorepo_root.test.mjs +63 -0
  103. package/scripts/worktrees_list_specs_no_recurse.test.mjs +33 -0
  104. package/scripts/worktrees_monorepo_use_group.test.mjs +67 -0
@@ -0,0 +1,1452 @@
1
+ # leeroy-wip manual review notes (priority queue)
2
+
3
+ Generated: 2026-01-24
4
+ Source queue: docs/commit-audits/happy/leeroy-wip.manual-review-queue.md
5
+
6
+ Rule: only fill sections when you have actually read the diff (`git show <sha>`).
7
+
8
+ ---
9
+
10
+ ## 001 2026-01-17 58528a7c37d3 `crypto`
11
+
12
+ - Subject: chore(crypto): patch react-native-libsodium
13
+ - Reasons: safety/security-sensitive area
14
+
15
+ ### Manual Review Notes
16
+
17
+ - Adds an iOS pods patch for `@more-tech/react-native-libsodium` (`react-native-libsodium.podspec`).
18
+ - Change: when `ENV['RCT_USE_RN_DEP'] != '1'`, the podspec no longer blindly uses `folly_version` (which can be undefined during evaluation in some Expo / RN >= 0.81 setups). It now:
19
+ - uses `folly_version` when defined
20
+ - otherwise falls back to an unpinned `s.dependency 'RCT-Folly'`
21
+ - Purpose: prevent pod install / podspec evaluation failures caused by an undefined `folly_version`.
22
+
23
+ ### Verdict
24
+
25
+ - Keep/squash/split/drop/reorder: keep, but likely squash with other libsodium/postinstall patching commits in the same topic (to keep “patch-package maintenance” cohesive).
26
+ - Depends on: expo iOS build pipeline uses `expo-app/patches/*` (patch-package or equivalent); ensure the patch is applied in postinstall.
27
+
28
+ ### Rewrite Commit Message
29
+
30
+ - Keep as-is: `chore(crypto): patch react-native-libsodium`
31
+
32
+ ---
33
+
34
+ ## 004 2026-01-17 4890a471df31 `auth`
35
+
36
+ - Subject: fix(auth): harden tokenStorage web persistence
37
+ - Reasons: safety/security-sensitive area
38
+
39
+ ### Manual Review Notes
40
+
41
+ - Adds web-focused hardening for token persistence and aligns native token storage with storage scoping:
42
+ - Web `getCredentials()` now reads `localStorage` once and guards JSON parsing in a `try/catch`, returning `null` on invalid JSON instead of throwing.
43
+ - Web `setCredentials()` / `removeCredentials()` now guard `localStorage.setItem/removeItem` errors (quota/security errors) and return `false` on failure.
44
+ - Native path now uses a scoped key via `scopedStorageId(AUTH_KEY, scope)` (scope read from env) and caches credentials **per key** (`credentialsCacheKey`) to avoid returning stale data if the scope changes.
45
+ - Cache JSON parsing is guarded; cache parse errors fall through to SecureStore read.
46
+ - Adds focused vitest coverage for the web behavior:
47
+ - invalid JSON → `null`
48
+ - set/remove exceptions → `false`
49
+ - single `getItem` call per `getCredentials()`
50
+
51
+ ### Verdict
52
+
53
+ - Keep/squash/split/drop/reorder: keep; belongs in an “auth storage / storage scoping” topic (likely near other storage-scope commits).
54
+ - Depends on: `readStorageScopeFromEnv` + `scopedStorageId` semantics; verify ordering so the utility exists before this commit in the rewritten history.
55
+
56
+ ### Rewrite Commit Message
57
+
58
+ - Keep as-is: `fix(auth): harden tokenStorage web persistence`
59
+
60
+ ---
61
+
62
+ ## 005 2026-01-17 4adc41d92af0 `sync`
63
+
64
+ - Subject: feat(sync): add permission mode types and mapping
65
+ - Reasons: safety/security-sensitive area
66
+
67
+ ### Manual Review Notes
68
+
69
+ - Introduces shared permission-mode primitives and cross-agent mapping:
70
+ - Adds `PermissionMode` union containing Claude modes (`default`, `acceptEdits`, `plan`, `bypassPermissions`) and Codex/Gemini modes (`default`, `read-only`, `safe-yolo`, `yolo`).
71
+ - Adds validators/normalizers:
72
+ - `isPermissionMode`
73
+ - `normalizePermissionModeForAgentFlavor` (clamps incompatible modes to `default`)
74
+ - `normalizeProfileDefaultPermissionMode` (profile defaultPermissionMode is restricted to Claude modes; codex-like values clamp to `default`)
75
+ - Adds `mapPermissionModeAcrossAgents(mode, from, to)` to map between Claude ↔ Codex/Gemini permission sets (and preserve Codex↔Gemini modes).
76
+ - Adds `MODEL_MODES` and `isModelMode` with tests (note: this couples model-mode validation to this commit; consider whether it belongs in the same topic or a separate “model modes” commit).
77
+ - Adds tests that cover:
78
+ - the mapping table between agents
79
+ - normalization/clamping behavior
80
+ - basic `isPermissionMode` / `isModelMode` validation
81
+ - Coherence: all changes are in `expo-app/sources/sync/*` and are tightly related to permissions/modes, but the model-mode validation is adjacent rather than strictly permission-specific.
82
+
83
+ ### Verdict
84
+
85
+ - Keep/squash/split/drop/reorder: keep; foundational for later permission-mode persistence and UI toggles. Consider splitting out `MODEL_MODES/isModelMode` into its own commit if it ends up being used broadly outside permission-mode work.
86
+ - Depends on: `expo-app/sources/sync/modelOptions` `AgentType` definition; any later commits that persist/restore permission modes should come after this.
87
+
88
+ ### Rewrite Commit Message
89
+
90
+ - Suggested tweak (optional): `feat(permission): add permission mode types and cross-agent mapping` (current `feat(sync): ...` is acceptable since files live under `sync/`).
91
+
92
+ ---
93
+
94
+ ## 017 2026-01-17 65bae55a0b61 `i18n`
95
+
96
+ - Subject: refactor(i18n): separate translation types and content
97
+ - Reasons: diff summary skipped (large change (+1756/-1006))
98
+
99
+ ### Manual Review Notes
100
+
101
+ TODO
102
+
103
+ ### Verdict
104
+
105
+ - Keep/squash/split/drop/reorder: TODO
106
+ - Depends on: TODO
107
+
108
+ ### Rewrite Commit Message
109
+
110
+ TODO
111
+
112
+ ---
113
+
114
+ ## 018 2026-01-17 2993b5c860ff `new-session`
115
+
116
+ - Subject: fix(new-session): restore standard modal flow
117
+ - Reasons: diff summary skipped (large change (+3142/-1629))
118
+
119
+ ### Manual Review Notes
120
+
121
+ TODO
122
+
123
+ ### Verdict
124
+
125
+ - Keep/squash/split/drop/reorder: TODO
126
+ - Depends on: TODO
127
+
128
+ ### Rewrite Commit Message
129
+
130
+ TODO
131
+
132
+ ---
133
+
134
+ ## 019 2026-01-17 9e08047d2478 `profiles`
135
+
136
+ - Subject: fix(profiles): harden routing, grouping, and editing
137
+ - Reasons: diff summary skipped (large change (+1319/-857))
138
+
139
+ ### Manual Review Notes
140
+
141
+ TODO
142
+
143
+ ### Verdict
144
+
145
+ - Keep/squash/split/drop/reorder: TODO
146
+ - Depends on: TODO
147
+
148
+ ### Rewrite Commit Message
149
+
150
+ TODO
151
+
152
+ ---
153
+
154
+ ## 020 2026-01-17 8d9f56e85e5a `ui`
155
+
156
+ - Subject: refactor(ui): unify list selectors and modal primitives
157
+ - Reasons: diff summary skipped (too many files (28)); safety/security-sensitive area
158
+
159
+ ### Manual Review Notes
160
+
161
+ TODO
162
+
163
+ ### Verdict
164
+
165
+ - Keep/squash/split/drop/reorder: TODO
166
+ - Depends on: TODO
167
+
168
+ ### Rewrite Commit Message
169
+
170
+ TODO
171
+
172
+ ---
173
+
174
+ ## 022 2026-01-17 2d4675a5d051 `agent-input`
175
+
176
+ - Subject: fix(agent-input): use compact permission badges
177
+ - Reasons: safety/security-sensitive area
178
+
179
+ ### Manual Review Notes
180
+
181
+ TODO
182
+
183
+ ### Verdict
184
+
185
+ - Keep/squash/split/drop/reorder: TODO
186
+ - Depends on: TODO
187
+
188
+ ### Rewrite Commit Message
189
+
190
+ TODO
191
+
192
+ ---
193
+
194
+ ## 027 2026-01-18 7899bbd8433e `profiles`
195
+
196
+ - Subject: feat(profiles): add API key requirements flow
197
+ - Reasons: safety/security-sensitive area
198
+
199
+ ### Manual Review Notes
200
+
201
+ TODO
202
+
203
+ ### Verdict
204
+
205
+ - Keep/squash/split/drop/reorder: TODO
206
+ - Depends on: TODO
207
+
208
+ ### Rewrite Commit Message
209
+
210
+ TODO
211
+
212
+ ---
213
+
214
+ ## 028 2026-01-18 0023ba1ea5aa `i18n`
215
+
216
+ - Subject: refactor(i18n): update translations and tooling
217
+ - Reasons: diff summary skipped (large change (+2913/-143))
218
+
219
+ ### Manual Review Notes
220
+
221
+ TODO
222
+
223
+ ### Verdict
224
+
225
+ - Keep/squash/split/drop/reorder: TODO
226
+ - Depends on: TODO
227
+
228
+ ### Rewrite Commit Message
229
+
230
+ TODO
231
+
232
+ ---
233
+
234
+ ## 033 2026-01-18 daa0b4527d7f `new-session`
235
+
236
+ - Subject: feat(new-session): add api key selection and wizard extraction
237
+ - Reasons: diff summary skipped (large change (+1719/-1116))
238
+
239
+ ### Manual Review Notes
240
+
241
+ TODO
242
+
243
+ ### Verdict
244
+
245
+ - Keep/squash/split/drop/reorder: TODO
246
+ - Depends on: TODO
247
+
248
+ ### Rewrite Commit Message
249
+
250
+ TODO
251
+
252
+ ---
253
+
254
+ ## 036 2026-01-18 97ca69e0a735 `i18n`
255
+
256
+ - Subject: refactor(i18n): replace remaining UI literals
257
+ - Reasons: safety/security-sensitive area
258
+
259
+ ### Manual Review Notes
260
+
261
+ TODO
262
+
263
+ ### Verdict
264
+
265
+ - Keep/squash/split/drop/reorder: TODO
266
+ - Depends on: TODO
267
+
268
+ ### Rewrite Commit Message
269
+
270
+ TODO
271
+
272
+ ---
273
+
274
+ ## 038 2026-01-18 7976b877259c `experiments`
275
+
276
+ - Subject: feat(experiments): gate Zen, file viewer, and voice auth flow
277
+ - Reasons: safety/security-sensitive area
278
+
279
+ ### Manual Review Notes
280
+
281
+ TODO
282
+
283
+ ### Verdict
284
+
285
+ - Keep/squash/split/drop/reorder: TODO
286
+ - Depends on: TODO
287
+
288
+ ### Rewrite Commit Message
289
+
290
+ TODO
291
+
292
+ ---
293
+
294
+ ## 039 2026-01-21 6ed379f82c34 `ui`
295
+
296
+ - Subject: refactor(ui): add modal + popover overlay primitives
297
+ - Reasons: diff summary skipped (too many files (43))
298
+
299
+ ### Manual Review Notes
300
+
301
+ TODO
302
+
303
+ ### Verdict
304
+
305
+ - Keep/squash/split/drop/reorder: TODO
306
+ - Depends on: TODO
307
+
308
+ ### Rewrite Commit Message
309
+
310
+ TODO
311
+
312
+ ---
313
+
314
+ ## 040 2026-01-21 f0787de5308e `sync`
315
+
316
+ - Subject: feat(sync): add secrets + terminal settings primitives
317
+ - Reasons: diff summary skipped (too many files (60)); safety/security-sensitive area
318
+
319
+ ### Manual Review Notes
320
+
321
+ TODO
322
+
323
+ ### Verdict
324
+
325
+ - Keep/squash/split/drop/reorder: TODO
326
+ - Depends on: TODO
327
+
328
+ ### Rewrite Commit Message
329
+
330
+ TODO
331
+
332
+ ---
333
+
334
+ ## 041 2026-01-21 66ee1eaf88a6 `secrets`
335
+
336
+ - Subject: feat(secrets): add secrets management + requirement resolver
337
+ - Reasons: diff summary skipped (too many files (29)); safety/security-sensitive area
338
+
339
+ ### Manual Review Notes
340
+
341
+ TODO
342
+
343
+ ### Verdict
344
+
345
+ - Keep/squash/split/drop/reorder: TODO
346
+ - Depends on: TODO
347
+
348
+ ### Rewrite Commit Message
349
+
350
+ TODO
351
+
352
+ ---
353
+
354
+ ## 043 2026-01-21 bc779e4f7909 `new-session`
355
+
356
+ - Subject: refactor(new-session): integrate secrets + terminal spawn options
357
+ - Reasons: safety/security-sensitive area
358
+
359
+ ### Manual Review Notes
360
+
361
+ TODO
362
+
363
+ ### Verdict
364
+
365
+ - Keep/squash/split/drop/reorder: TODO
366
+ - Depends on: TODO
367
+
368
+ ### Rewrite Commit Message
369
+
370
+ TODO
371
+
372
+ ---
373
+
374
+ ## 049 2026-01-21 2e956f32f220 `new`
375
+
376
+ - Subject: fix(new): keep pick screens above iOS modal
377
+ - Reasons: safety/security-sensitive area
378
+
379
+ ### Manual Review Notes
380
+
381
+ TODO
382
+
383
+ ### Verdict
384
+
385
+ - Keep/squash/split/drop/reorder: TODO
386
+ - Depends on: TODO
387
+
388
+ ### Rewrite Commit Message
389
+
390
+ TODO
391
+
392
+ ---
393
+
394
+ ## 057 2026-01-21 ff7bec72358f `secrets`
395
+
396
+ - Subject: fix(secrets): tighten callback deps and fix indentation
397
+ - Reasons: safety/security-sensitive area
398
+
399
+ ### Manual Review Notes
400
+
401
+ TODO
402
+
403
+ ### Verdict
404
+
405
+ - Keep/squash/split/drop/reorder: TODO
406
+ - Depends on: TODO
407
+
408
+ ### Rewrite Commit Message
409
+
410
+ TODO
411
+
412
+ ---
413
+
414
+ ## 058 2026-01-21 1bb65f5dd494 `new-session`
415
+
416
+ - Subject: fix(new-session): avoid stuck secret requirement modal guard
417
+ - Reasons: safety/security-sensitive area
418
+
419
+ ### Manual Review Notes
420
+
421
+ TODO
422
+
423
+ ### Verdict
424
+
425
+ - Keep/squash/split/drop/reorder: TODO
426
+ - Depends on: TODO
427
+
428
+ ### Rewrite Commit Message
429
+
430
+ TODO
431
+
432
+ ---
433
+
434
+ ## 060 2026-01-22 bb09f91de715 `settings`
435
+
436
+ - Subject: fix(settings): keep valid secrets when one entry is invalid
437
+ - Reasons: safety/security-sensitive area
438
+
439
+ ### Manual Review Notes
440
+
441
+ TODO
442
+
443
+ ### Verdict
444
+
445
+ - Keep/squash/split/drop/reorder: TODO
446
+ - Depends on: TODO
447
+
448
+ ### Rewrite Commit Message
449
+
450
+ TODO
451
+
452
+ ---
453
+
454
+ ## 061 2026-01-22 765423af52b4 `agent-input`
455
+
456
+ - Subject: fix(agent-input): cycle permission mode from normalized state
457
+ - Reasons: safety/security-sensitive area
458
+
459
+ ### Manual Review Notes
460
+
461
+ TODO
462
+
463
+ ### Verdict
464
+
465
+ - Keep/squash/split/drop/reorder: TODO
466
+ - Depends on: TODO
467
+
468
+ ### Rewrite Commit Message
469
+
470
+ TODO
471
+
472
+ ---
473
+
474
+ ## 063 2026-01-22 2ed3100311c7 `secrets`
475
+
476
+ - Subject: fix(secrets): hide values when using secret vault
477
+ - Reasons: safety/security-sensitive area
478
+
479
+ ### Manual Review Notes
480
+
481
+ TODO
482
+
483
+ ### Verdict
484
+
485
+ - Keep/squash/split/drop/reorder: TODO
486
+ - Depends on: TODO
487
+
488
+ ### Rewrite Commit Message
489
+
490
+ TODO
491
+
492
+ ---
493
+
494
+ ## 064 2026-01-22 e5848c480522 `ui`
495
+
496
+ - Subject: fix(ui): harden overlays and permission cycling
497
+ - Reasons: safety/security-sensitive area
498
+
499
+ ### Manual Review Notes
500
+
501
+ TODO
502
+
503
+ ### Verdict
504
+
505
+ - Keep/squash/split/drop/reorder: TODO
506
+ - Depends on: TODO
507
+
508
+ ### Rewrite Commit Message
509
+
510
+ TODO
511
+
512
+ ---
513
+
514
+ ## 065 2026-01-13 69fdcff96a4c `sync`
515
+
516
+ - Subject: fix(sync): restore session permission mode from last message
517
+ - Reasons: safety/security-sensitive area
518
+
519
+ ### Manual Review Notes
520
+
521
+ TODO
522
+
523
+ ### Verdict
524
+
525
+ - Keep/squash/split/drop/reorder: TODO
526
+ - Depends on: TODO
527
+
528
+ ### Rewrite Commit Message
529
+
530
+ TODO
531
+
532
+ ---
533
+
534
+ ## 066 2026-01-13 9b499c5dccce `sync`
535
+
536
+ - Subject: fix(sync): persist permission mode timestamp for restart-safe arbitration
537
+ - Reasons: safety/security-sensitive area
538
+
539
+ ### Manual Review Notes
540
+
541
+ TODO
542
+
543
+ ### Verdict
544
+
545
+ - Keep/squash/split/drop/reorder: TODO
546
+ - Depends on: TODO
547
+
548
+ ### Rewrite Commit Message
549
+
550
+ TODO
551
+
552
+ ---
553
+
554
+ ## 067 2026-01-13 def8852509d0 `sync`
555
+
556
+ - Subject: fix(sync): persist permission mode reliably across devices
557
+ - Reasons: safety/security-sensitive area
558
+
559
+ ### Manual Review Notes
560
+
561
+ TODO
562
+
563
+ ### Verdict
564
+
565
+ - Keep/squash/split/drop/reorder: TODO
566
+ - Depends on: TODO
567
+
568
+ ### Rewrite Commit Message
569
+
570
+ TODO
571
+
572
+ ---
573
+
574
+ ## 069 2026-01-06 c06b6202b5d4 `expo-app`
575
+
576
+ - Subject: Add copy-to-clipboard button to message blocks
577
+ - Reasons: non-Conventional-Commits subject
578
+
579
+ ### Manual Review Notes
580
+
581
+ TODO
582
+
583
+ ### Verdict
584
+
585
+ - Keep/squash/split/drop/reorder: TODO
586
+ - Depends on: TODO
587
+
588
+ ### Rewrite Commit Message
589
+
590
+ TODO
591
+
592
+ ---
593
+
594
+ ## 072 2026-01-21 82d74454c3c4 `typecheck`
595
+
596
+ - Subject: fix(typecheck): restore permission imports and Popover web styles
597
+ - Reasons: safety/security-sensitive area
598
+
599
+ ### Manual Review Notes
600
+
601
+ TODO
602
+
603
+ ### Verdict
604
+
605
+ - Keep/squash/split/drop/reorder: TODO
606
+ - Depends on: TODO
607
+
608
+ ### Rewrite Commit Message
609
+
610
+ TODO
611
+
612
+ ---
613
+
614
+ ## 086 2026-01-13 86330e263595 `security`
615
+
616
+ - Subject: fix(security): redact spawn secrets from daemon logs
617
+ - Reasons: safety/security-sensitive area
618
+
619
+ ### Manual Review Notes
620
+
621
+ TODO
622
+
623
+ ### Verdict
624
+
625
+ - Keep/squash/split/drop/reorder: TODO
626
+ - Depends on: TODO
627
+
628
+ ### Rewrite Commit Message
629
+
630
+ TODO
631
+
632
+ ---
633
+
634
+ ## 089 2026-01-13 ef418bc4dda3 `pr107`
635
+
636
+ - Subject: fix(pr107): redact profile secrets in doctor + align tmux tmpDir
637
+ - Reasons: safety/security-sensitive area
638
+
639
+ ### Manual Review Notes
640
+
641
+ TODO
642
+
643
+ ### Verdict
644
+
645
+ - Keep/squash/split/drop/reorder: TODO
646
+ - Depends on: TODO
647
+
648
+ ### Rewrite Commit Message
649
+
650
+ TODO
651
+
652
+ ---
653
+
654
+ ## 096 2026-01-15 2973f7fe6861 `codex`
655
+
656
+ - Subject: fix(codex): harden MCP command detection
657
+ - Reasons: safety/security-sensitive area
658
+
659
+ ### Manual Review Notes
660
+
661
+ TODO
662
+
663
+ ### Verdict
664
+
665
+ - Keep/squash/split/drop/reorder: TODO
666
+ - Depends on: TODO
667
+
668
+ ### Rewrite Commit Message
669
+
670
+ TODO
671
+
672
+ ---
673
+
674
+ ## 099 2026-01-15 c52227082c2b `tmux`
675
+
676
+ - Subject: fix(tmux): correct env, tmpdir, and session selection
677
+ - Reasons: safety/security-sensitive area
678
+
679
+ ### Manual Review Notes
680
+
681
+ TODO
682
+
683
+ ### Verdict
684
+
685
+ - Keep/squash/split/drop/reorder: TODO
686
+ - Depends on: TODO
687
+
688
+ ### Rewrite Commit Message
689
+
690
+ TODO
691
+
692
+ ---
693
+
694
+ ## 113 2026-01-21 51782fdbfbcd `codex`
695
+
696
+ - Subject: test(codex): reset transport instances between tests
697
+ - Reasons: safety/security-sensitive area
698
+
699
+ ### Manual Review Notes
700
+
701
+ TODO
702
+
703
+ ### Verdict
704
+
705
+ - Keep/squash/split/drop/reorder: TODO
706
+ - Depends on: TODO
707
+
708
+ ### Rewrite Commit Message
709
+
710
+ TODO
711
+
712
+ ---
713
+
714
+ ## 124 2026-01-13 8b88dcd73d40 `claude`
715
+
716
+ - Subject: fix(claude): carry permission mode across remote/local switches
717
+ - Reasons: safety/security-sensitive area
718
+
719
+ ### Manual Review Notes
720
+
721
+ TODO
722
+
723
+ ### Verdict
724
+
725
+ - Keep/squash/split/drop/reorder: TODO
726
+ - Depends on: TODO
727
+
728
+ ### Rewrite Commit Message
729
+
730
+ TODO
731
+
732
+ ---
733
+
734
+ ## 125 2026-01-13 8f0e10c9428b `claude`
735
+
736
+ - Subject: fix(claude): publish permission mode in session metadata
737
+ - Reasons: safety/security-sensitive area
738
+
739
+ ### Manual Review Notes
740
+
741
+ TODO
742
+
743
+ ### Verdict
744
+
745
+ - Keep/squash/split/drop/reorder: TODO
746
+ - Depends on: TODO
747
+
748
+ ### Rewrite Commit Message
749
+
750
+ TODO
751
+
752
+ ---
753
+
754
+ ## 126 2026-01-13 ffad20faa406 `cli`
755
+
756
+ - Subject: fix(cli): publish permission mode for codex/gemini sessions
757
+ - Reasons: safety/security-sensitive area
758
+
759
+ ### Manual Review Notes
760
+
761
+ TODO
762
+
763
+ ### Verdict
764
+
765
+ - Keep/squash/split/drop/reorder: TODO
766
+ - Depends on: TODO
767
+
768
+ ### Rewrite Commit Message
769
+
770
+ TODO
771
+
772
+ ---
773
+
774
+ ## 137 2026-01-12 68a6ba4bc244 `fork`
775
+
776
+ - Subject: feat(fork): enable Codex inactive-session resume via codex-reply
777
+ - Reasons: safety/security-sensitive area
778
+
779
+ ### Manual Review Notes
780
+
781
+ TODO
782
+
783
+ ### Verdict
784
+
785
+ - Keep/squash/split/drop/reorder: TODO
786
+ - Depends on: TODO
787
+
788
+ ### Rewrite Commit Message
789
+
790
+ TODO
791
+
792
+ ---
793
+
794
+ ## 140 2026-01-22 9c40c54018c2 `cli`
795
+
796
+ - Subject: Revert "fix(tools): support Windows arm64 tool unpacking"
797
+ - Reasons: non-Conventional-Commits subject; revert commit
798
+
799
+ ### Manual Review Notes
800
+
801
+ TODO
802
+
803
+ ### Verdict
804
+
805
+ - Keep/squash/split/drop/reorder: TODO
806
+ - Depends on: TODO
807
+
808
+ ### Rewrite Commit Message
809
+
810
+ TODO
811
+
812
+ ---
813
+
814
+ ## 141 2026-01-22 ab35b47ff699 `resume`
815
+
816
+ - Subject: fix(resume): make inactive resume reliable; gate Codex resume
817
+ - Reasons: multiple major areas: cli, expo-app; safety/security-sensitive area
818
+
819
+ ### Manual Review Notes
820
+
821
+ TODO
822
+
823
+ ### Verdict
824
+
825
+ - Keep/squash/split/drop/reorder: TODO
826
+ - Depends on: TODO
827
+
828
+ ### Rewrite Commit Message
829
+
830
+ TODO
831
+
832
+ ---
833
+
834
+ ## 144 2026-01-22 0140ae276869 `codex`
835
+
836
+ - Subject: refactor(codex): install mcp resume server via install-dep
837
+ - Reasons: multiple major areas: cli, expo-app; safety/security-sensitive area
838
+
839
+ ### Manual Review Notes
840
+
841
+ TODO
842
+
843
+ ### Verdict
844
+
845
+ - Keep/squash/split/drop/reorder: TODO
846
+ - Depends on: TODO
847
+
848
+ ### Rewrite Commit Message
849
+
850
+ TODO
851
+
852
+ ---
853
+
854
+ ## 146 2026-01-22 e1deb6db8ddb `codex`
855
+
856
+ - Subject: refactor(codex): add dep-status and drop codex-resume RPCs
857
+ - Reasons: multiple major areas: cli, expo-app
858
+
859
+ ### Manual Review Notes
860
+
861
+ TODO
862
+
863
+ ### Verdict
864
+
865
+ - Keep/squash/split/drop/reorder: TODO
866
+ - Depends on: TODO
867
+
868
+ ### Rewrite Commit Message
869
+
870
+ TODO
871
+
872
+ ---
873
+
874
+ ## 148 2026-01-22 8bebf04aca92 `cli`
875
+
876
+ - Subject: refactor(cli): modularize capabilities and env preview
877
+ - Reasons: diff summary skipped (large change (+1296/-908)); safety/security-sensitive area
878
+
879
+ ### Manual Review Notes
880
+
881
+ TODO
882
+
883
+ ### Verdict
884
+
885
+ - Keep/squash/split/drop/reorder: TODO
886
+ - Depends on: TODO
887
+
888
+ ### Rewrite Commit Message
889
+
890
+ TODO
891
+
892
+ ---
893
+
894
+ ## 150 2026-01-22 a5cac698f15b `cli`
895
+
896
+ - Subject: feat(cli): harden session queue, switching, and lifecycle
897
+ - Reasons: safety/security-sensitive area
898
+
899
+ ### Manual Review Notes
900
+
901
+ TODO
902
+
903
+ ### Verdict
904
+
905
+ - Keep/squash/split/drop/reorder: TODO
906
+ - Depends on: TODO
907
+
908
+ ### Rewrite Commit Message
909
+
910
+ TODO
911
+
912
+ ---
913
+
914
+ ## 151 2026-01-22 3fc704424e8d `app`
915
+
916
+ - Subject: feat(app): add pending queue, discard markers, and capabilities
917
+ - Reasons: diff summary skipped (too many files (44))
918
+
919
+ ### Manual Review Notes
920
+
921
+ TODO
922
+
923
+ ### Verdict
924
+
925
+ - Keep/squash/split/drop/reorder: TODO
926
+ - Depends on: TODO
927
+
928
+ ### Rewrite Commit Message
929
+
930
+ TODO
931
+
932
+ ---
933
+
934
+ ## 156 2026-01-22 8c16ee8f9cef `auth`
935
+
936
+ - Subject: fix(auth): surface auth failures and gate unauth routes
937
+ - Reasons: safety/security-sensitive area
938
+
939
+ ### Manual Review Notes
940
+
941
+ TODO
942
+
943
+ ### Verdict
944
+
945
+ - Keep/squash/split/drop/reorder: TODO
946
+ - Depends on: TODO
947
+
948
+ ### Rewrite Commit Message
949
+
950
+ TODO
951
+
952
+ ---
953
+
954
+ ## 158 2026-01-22 3b3609fed434 `rpc`
955
+
956
+ - Subject: fix(rpc): add structured code for missing RPC methods
957
+ - Reasons: multiple major areas: expo-app, server
958
+
959
+ ### Manual Review Notes
960
+
961
+ TODO
962
+
963
+ ### Verdict
964
+
965
+ - Keep/squash/split/drop/reorder: TODO
966
+ - Depends on: TODO
967
+
968
+ ### Rewrite Commit Message
969
+
970
+ TODO
971
+
972
+ ---
973
+
974
+ ## 160 2026-01-22 7fbe1f1cc727 `permission`
975
+
976
+ - Subject: fix(permission): avoid no-op permissionModeUpdatedAt bumps
977
+ - Reasons: safety/security-sensitive area
978
+
979
+ ### Manual Review Notes
980
+
981
+ TODO
982
+
983
+ ### Verdict
984
+
985
+ - Keep/squash/split/drop/reorder: TODO
986
+ - Depends on: TODO
987
+
988
+ ### Rewrite Commit Message
989
+
990
+ TODO
991
+
992
+ ---
993
+
994
+ ## 162 2026-01-22 ee0bec2a0b90 `resume`
995
+
996
+ - Subject: Delete INACTIVE_SESSION_RESUME.md
997
+ - Reasons: non-Conventional-Commits subject
998
+
999
+ ### Manual Review Notes
1000
+
1001
+ TODO
1002
+
1003
+ ### Verdict
1004
+
1005
+ - Keep/squash/split/drop/reorder: TODO
1006
+ - Depends on: TODO
1007
+
1008
+ ### Rewrite Commit Message
1009
+
1010
+ TODO
1011
+
1012
+ ---
1013
+
1014
+ ## 165 2026-01-23 8b3f39f22664 `cli`
1015
+
1016
+ - Subject: feat(cli): add interaction.respond for AskUserQuestion
1017
+ - Reasons: safety/security-sensitive area
1018
+
1019
+ ### Manual Review Notes
1020
+
1021
+ TODO
1022
+
1023
+ ### Verdict
1024
+
1025
+ - Keep/squash/split/drop/reorder: TODO
1026
+ - Depends on: TODO
1027
+
1028
+ ### Rewrite Commit Message
1029
+
1030
+ TODO
1031
+
1032
+ ---
1033
+
1034
+ ## 166 2025-12-24 ed4bc007308a `codex`
1035
+
1036
+ - Subject: feat: add execpolicy approval option for Codex
1037
+ - Reasons: safety/security-sensitive area
1038
+
1039
+ ### Manual Review Notes
1040
+
1041
+ TODO
1042
+
1043
+ ### Verdict
1044
+
1045
+ - Keep/squash/split/drop/reorder: TODO
1046
+ - Depends on: TODO
1047
+
1048
+ ### Rewrite Commit Message
1049
+
1050
+ TODO
1051
+
1052
+ ---
1053
+
1054
+ ## 167 2025-12-24 78adc9c58811 `codex`
1055
+
1056
+ - Subject: feat(codex): support execpolicy approvals and MCP tool calls
1057
+ - Reasons: safety/security-sensitive area
1058
+
1059
+ ### Manual Review Notes
1060
+
1061
+ TODO
1062
+
1063
+ ### Verdict
1064
+
1065
+ - Keep/squash/split/drop/reorder: TODO
1066
+ - Depends on: TODO
1067
+
1068
+ ### Rewrite Commit Message
1069
+
1070
+ TODO
1071
+
1072
+ ---
1073
+
1074
+ ## 168 2026-01-22 9dfa09bef8d8 `i18n`
1075
+
1076
+ - Subject: fix(i18n): add Codex execpolicy button text
1077
+ - Reasons: safety/security-sensitive area
1078
+
1079
+ ### Manual Review Notes
1080
+
1081
+ TODO
1082
+
1083
+ ### Verdict
1084
+
1085
+ - Keep/squash/split/drop/reorder: TODO
1086
+ - Depends on: TODO
1087
+
1088
+ ### Rewrite Commit Message
1089
+
1090
+ TODO
1091
+
1092
+ ---
1093
+
1094
+ ## 169 2026-01-22 559d39da116d `reducer`
1095
+
1096
+ - Subject: fix(reducer): keep permission messages idempotent
1097
+ - Reasons: safety/security-sensitive area
1098
+
1099
+ ### Manual Review Notes
1100
+
1101
+ TODO
1102
+
1103
+ ### Verdict
1104
+
1105
+ - Keep/squash/split/drop/reorder: TODO
1106
+ - Depends on: TODO
1107
+
1108
+ ### Rewrite Commit Message
1109
+
1110
+ TODO
1111
+
1112
+ ---
1113
+
1114
+ ## 171 2026-01-19 d06d5a833f8e `claude`
1115
+
1116
+ - Subject: Add signal forwarding to claudeLocal.ts
1117
+ - Reasons: non-Conventional-Commits subject
1118
+
1119
+ ### Manual Review Notes
1120
+
1121
+ TODO
1122
+
1123
+ ### Verdict
1124
+
1125
+ - Keep/squash/split/drop/reorder: TODO
1126
+ - Depends on: TODO
1127
+
1128
+ ### Rewrite Commit Message
1129
+
1130
+ TODO
1131
+
1132
+ ---
1133
+
1134
+ ## 174 2025-12-24 e956463db3e2 `codex`
1135
+
1136
+ - Subject: fix: use runtime execPath for MCP bridge
1137
+ - Reasons: safety/security-sensitive area
1138
+
1139
+ ### Manual Review Notes
1140
+
1141
+ TODO
1142
+
1143
+ ### Verdict
1144
+
1145
+ - Keep/squash/split/drop/reorder: TODO
1146
+ - Depends on: TODO
1147
+
1148
+ ### Rewrite Commit Message
1149
+
1150
+ TODO
1151
+
1152
+ ---
1153
+
1154
+ ## 175 2026-01-23 f0a7d8d0b40c `codex`
1155
+
1156
+ - Subject: fix(codex): use mcp tool call id for approvals
1157
+ - Reasons: safety/security-sensitive area
1158
+
1159
+ ### Manual Review Notes
1160
+
1161
+ TODO
1162
+
1163
+ ### Verdict
1164
+
1165
+ - Keep/squash/split/drop/reorder: TODO
1166
+ - Depends on: TODO
1167
+
1168
+ ### Rewrite Commit Message
1169
+
1170
+ TODO
1171
+
1172
+ ---
1173
+
1174
+ ## 176 2026-01-22 da620b6865ad `server`
1175
+
1176
+ - Subject: feat(server): add full/light flavors with sqlite migrations
1177
+ - Reasons: diff summary skipped (too many files (38))
1178
+
1179
+ ### Manual Review Notes
1180
+
1181
+ TODO
1182
+
1183
+ ### Verdict
1184
+
1185
+ - Keep/squash/split/drop/reorder: TODO
1186
+ - Depends on: TODO
1187
+
1188
+ ### Rewrite Commit Message
1189
+
1190
+ TODO
1191
+
1192
+ ---
1193
+
1194
+ ## 183 2026-01-23 46186162ae14 `happy-cli`
1195
+
1196
+ - Subject: test(happy-cli): fix timer cleanup and MCP schema mocks
1197
+ - Reasons: safety/security-sensitive area
1198
+
1199
+ ### Manual Review Notes
1200
+
1201
+ TODO
1202
+
1203
+ ### Verdict
1204
+
1205
+ - Keep/squash/split/drop/reorder: TODO
1206
+ - Depends on: TODO
1207
+
1208
+ ### Rewrite Commit Message
1209
+
1210
+ TODO
1211
+
1212
+ ---
1213
+
1214
+ ## 208 2026-01-23 61a18ac95e17 `tools`
1215
+
1216
+ - Subject: fix(tools): require permission id for ExitPlanMode actions
1217
+ - Reasons: safety/security-sensitive area
1218
+
1219
+ ### Manual Review Notes
1220
+
1221
+ TODO
1222
+
1223
+ ### Verdict
1224
+
1225
+ - Keep/squash/split/drop/reorder: TODO
1226
+ - Depends on: TODO
1227
+
1228
+ ### Rewrite Commit Message
1229
+
1230
+ TODO
1231
+
1232
+ ---
1233
+
1234
+ ## 209 2026-01-23 5b36c9bf91c1 `tools`
1235
+
1236
+ - Subject: test(tools): avoid null permission in ExitPlanToolView tests
1237
+ - Reasons: safety/security-sensitive area
1238
+
1239
+ ### Manual Review Notes
1240
+
1241
+ TODO
1242
+
1243
+ ### Verdict
1244
+
1245
+ - Keep/squash/split/drop/reorder: TODO
1246
+ - Depends on: TODO
1247
+
1248
+ ### Rewrite Commit Message
1249
+
1250
+ TODO
1251
+
1252
+ ---
1253
+
1254
+ ## 211 2026-01-23 55428fb0253c `tools`
1255
+
1256
+ - Subject: fix(tools): alert when AskUserQuestion permission id is missing
1257
+ - Reasons: safety/security-sensitive area
1258
+
1259
+ ### Manual Review Notes
1260
+
1261
+ TODO
1262
+
1263
+ ### Verdict
1264
+
1265
+ - Keep/squash/split/drop/reorder: TODO
1266
+ - Depends on: TODO
1267
+
1268
+ ### Rewrite Commit Message
1269
+
1270
+ TODO
1271
+
1272
+ ---
1273
+
1274
+ ## 212 2026-01-23 dc6955f88abd `terminal`
1275
+
1276
+ - Subject: fix(terminal): prevent sessionId path traversal in attachment info
1277
+ - Reasons: safety/security-sensitive area
1278
+
1279
+ ### Manual Review Notes
1280
+
1281
+ TODO
1282
+
1283
+ ### Verdict
1284
+
1285
+ - Keep/squash/split/drop/reorder: TODO
1286
+ - Depends on: TODO
1287
+
1288
+ ### Rewrite Commit Message
1289
+
1290
+ TODO
1291
+
1292
+ ---
1293
+
1294
+ ## 226 2026-01-23 c461ed1cb4ef `permission`
1295
+
1296
+ - Subject: feat(permission): add permission mode option helpers
1297
+ - Reasons: safety/security-sensitive area
1298
+
1299
+ ### Manual Review Notes
1300
+
1301
+ TODO
1302
+
1303
+ ### Verdict
1304
+
1305
+ - Keep/squash/split/drop/reorder: TODO
1306
+ - Depends on: TODO
1307
+
1308
+ ### Rewrite Commit Message
1309
+
1310
+ TODO
1311
+
1312
+ ---
1313
+
1314
+ ## 228 2026-01-23 523989b4de8e `server-light`
1315
+
1316
+ - Subject: fix(server-light): avoid master secret race
1317
+ - Reasons: safety/security-sensitive area
1318
+
1319
+ ### Manual Review Notes
1320
+
1321
+ TODO
1322
+
1323
+ ### Verdict
1324
+
1325
+ - Keep/squash/split/drop/reorder: TODO
1326
+ - Depends on: TODO
1327
+
1328
+ ### Rewrite Commit Message
1329
+
1330
+ TODO
1331
+
1332
+ ---
1333
+
1334
+ ## 237 2026-01-23 241f0ae24b1d `cli`
1335
+
1336
+ - Subject: test(cli): prevent legacy sessionId path traversal
1337
+ - Reasons: safety/security-sensitive area
1338
+
1339
+ ### Manual Review Notes
1340
+
1341
+ TODO
1342
+
1343
+ ### Verdict
1344
+
1345
+ - Keep/squash/split/drop/reorder: TODO
1346
+ - Depends on: TODO
1347
+
1348
+ ### Rewrite Commit Message
1349
+
1350
+ TODO
1351
+
1352
+ ---
1353
+
1354
+ ## 238 2026-01-23 a1e4a6dd3fbd `cli`
1355
+
1356
+ - Subject: fix(cli): block legacy sessionId path traversal
1357
+ - Reasons: safety/security-sensitive area
1358
+
1359
+ ### Manual Review Notes
1360
+
1361
+ TODO
1362
+
1363
+ ### Verdict
1364
+
1365
+ - Keep/squash/split/drop/reorder: TODO
1366
+ - Depends on: TODO
1367
+
1368
+ ### Rewrite Commit Message
1369
+
1370
+ TODO
1371
+
1372
+ ---
1373
+
1374
+ ## 241 2026-01-23 1464402758bf `codex`
1375
+
1376
+ - Subject: fix(codex): preserve falsy MCP tool results
1377
+ - Reasons: safety/security-sensitive area
1378
+
1379
+ ### Manual Review Notes
1380
+
1381
+ TODO
1382
+
1383
+ ### Verdict
1384
+
1385
+ - Keep/squash/split/drop/reorder: TODO
1386
+ - Depends on: TODO
1387
+
1388
+ ### Rewrite Commit Message
1389
+
1390
+ TODO
1391
+
1392
+ ---
1393
+
1394
+ ## 247 2026-01-23 24b607abfa07 `server`
1395
+
1396
+ - Subject: Refactor schema sync and centralize Prisma types
1397
+ - Reasons: non-Conventional-Commits subject; diff summary skipped (too many files (29))
1398
+
1399
+ ### Manual Review Notes
1400
+
1401
+ TODO
1402
+
1403
+ ### Verdict
1404
+
1405
+ - Keep/squash/split/drop/reorder: TODO
1406
+ - Depends on: TODO
1407
+
1408
+ ### Rewrite Commit Message
1409
+
1410
+ TODO
1411
+
1412
+ ---
1413
+
1414
+ ## 248 2026-01-23 bf3027799623 `expo-app`
1415
+
1416
+ - Subject: Set EXPO_UNSTABLE_WEB_MODAL env var in Expo scripts
1417
+ - Reasons: non-Conventional-Commits subject
1418
+
1419
+ ### Manual Review Notes
1420
+
1421
+ TODO
1422
+
1423
+ ### Verdict
1424
+
1425
+ - Keep/squash/split/drop/reorder: TODO
1426
+ - Depends on: TODO
1427
+
1428
+ ### Rewrite Commit Message
1429
+
1430
+ TODO
1431
+
1432
+ ---
1433
+
1434
+ ## 249 2026-01-23 c803115dcbdc `expo-app`
1435
+
1436
+ - Subject: Improve postinstall script for symlinked paths and patching
1437
+ - Reasons: non-Conventional-Commits subject
1438
+
1439
+ ### Manual Review Notes
1440
+
1441
+ TODO
1442
+
1443
+ ### Verdict
1444
+
1445
+ - Keep/squash/split/drop/reorder: TODO
1446
+ - Depends on: TODO
1447
+
1448
+ ### Rewrite Commit Message
1449
+
1450
+ TODO
1451
+
1452
+ ---