Repository navigation
Implement optional Tray residency and new archive drafts - #295
Conversation
skyswordw
left a comment
There was a problem hiding this comment.
Functional review completed. Two recovery defects found during review were fixed in ae3547d and 7de295e: failed/cancelled Save-and-Quit no longer leaks quit intent into the next Save, and draft failures cannot replay a cached pack through another window without source refresh or draft completion. Regression tests cover both paths. No remaining merge-blocking finding from this review.
Reviewed lifetime/work retention, source scopes, draft import/save/cancel/undo, disabled-Tray routing, migration, Search Close, and Release sample separation. The integrated #295–#300 tree passed 687 tests in 102 suites (zero failures/skips), localization export (0/1,261 missing zh-Hans strings), clean generated plists and diff checks. The focused base run passed 28 tests.
An isolated ad-hoc app with a separate bundle ID and no Finder/Quick Look plugins passed CUA/AX checks for Welcome → empty draft, real Add Files, Remove/Undo, cancel preserving name/files, actual ZIP creation and automatic Browser opening. Independent ZIP readback matched the original bytes. Search Clear retained focus; Close removed a nonempty filter and arrow-key selection worked afterward; explicit Quit completed. These are AX activations/keyboard checks, not physical cross-app mouse/drag or VoiceOver acceptance.
Keep #287, #289 and #290 open for their remaining native dismissal/lifecycle/status-menu matrix, and #286 as their umbrella. Signed integration stays in #32/#38 and VoiceOver in #93. Codex owns functional review/fixes; Claude Code retains visual/motion ownership.
Integrated validation
Merged into
mainin sequence #295–#300. Final main commit7c5393672d028f31bc76f83911a02e1407a53cf7has the same file tree as tested integration commit8fb4dda. Review fixes: ae3547d clears pending quit intent after failed/cancelled draft creation; 7de295e prevents stale draft jobs from being replayed by another window. Both have regression coverage. Full local validation passed 687 tests in 102 suites with zero failures/skips, 0/1,261 missing zh-Hans strings, unchanged generated plists and clean diff checks. Bounded native CUA/AX draft creation and Search Clear/Close checks passed, including independent ZIP byte verification; this is not VoiceOver testing. See the review comment for scope and remaining native checks. Final main CI and the integrated #300 snapshot run supersede cancelled intermediate reruns.Stow currently keeps running after every window closes, has no Tray master switch or status-menu management actions, and routes New Archive straight to a source picker. This adds optional Tray residency and an editable new-archive draft, while keeping quick Pack for already-collected files. It also fixes a stale drag-state path that required an extra outside click, adds explicit Close Search, and replaces the primary sample entry with Create/Settings and an opt-in sample download.
Behavior
Validation and limits
0f79119: all CI checks passed (build-test, Universal 2, package and snapshots). CI ran 685 tests in 102 suites, with 0/1,232 missing zh-Hans strings and clean generated plists. Local ownership/lifetime/draft follow-ups passed 26 focused tests. Release has no Sample folder; 12 Mach-O binaries passed Universal 2 validation.Ownership: Codex / Grok Bot owns this functional state/routing/security/test work. Claude Code owns final visual design and motion; the new draft and settings views are functional scaffolding, not visual approval. Keep the design/remaining acceptance issues open for their owners. The current Pack sentence is not a required composition for the new draft UI.
See the functional handoff for APIs, migration, evidence and Claude's integration points. Implements functional portions of #287, #288, #289, #290, #291, #292, #293 and #294 under #286; does not claim those issues' full visual/native acceptance is complete. Related tracking: #104, #38 and #69. Installed applications and registered extensions were not replaced.