diff --git a/docs/HANDOFF-2026-05-13-v0.1-shipped.md b/docs/HANDOFF-2026-05-13-v0.1-shipped.md new file mode 100644 index 0000000..0407ff5 --- /dev/null +++ b/docs/HANDOFF-2026-05-13-v0.1-shipped.md @@ -0,0 +1,158 @@ +# Handoff — 2026-05-13: v0.1 shipped + +**Session window:** 2026-05-12 evening fan-out → 2026-05-13 morning merge sequence +**Branch:** `develop`, clean +**HEAD:** `f6637ec3` — `ci(actions): fix typecheck/build order + share webview artifact across jobs (#161)` +**Open PR count:** 0 +**Repo visibility:** flipped from PRIVATE → **PUBLIC** at start of session + +--- + +## What shipped + +**v0.1 milestone is fully merged.** 9 lane PRs + 1 CVE fix + 1 Dependabot batch + 1 CI workflow fix = **12 PRs landed** since yesterday's `ba42b691`. + +### v0.1 lane PRs (in merge order) + +| Merge | PR | Lane | Closes | +|-------|----|------|--------| +| `5bb1e778` | [#150](https://github.com/KofTwentyTwo/Jarvis/pull/150) | F — webview chat scroll | #51 | +| `223310aa` | [#154](https://github.com/KofTwentyTwo/Jarvis/pull/154) | I — GitHub Actions CI workflows | — | +| `b6431597` | [#155](https://github.com/KofTwentyTwo/Jarvis/pull/155) | H — PR + dependency triage report | — | +| `a6f91e6b` | [#151](https://github.com/KofTwentyTwo/Jarvis/pull/151) | D — Bus/HUD S1 | #40, #41 | +| `05411f82` | [#152](https://github.com/KofTwentyTwo/Jarvis/pull/152) | E — Vision | #1, #2, #3 | +| `f59f5d12` | [#153](https://github.com/KofTwentyTwo/Jarvis/pull/153) | B — Memory CRIT | #12, #13, #14, #15, #16 | +| `4b1dd640` | [#158](https://github.com/KofTwentyTwo/Jarvis/pull/158) | A — Voice CRIT | #28, #29, #30, #31, #32, #33, #34, #36 | +| `bc74494a` | [#157](https://github.com/KofTwentyTwo/Jarvis/pull/157) | C — MCP CRIT | #20, #21 | +| `795c3bf5` | [#156](https://github.com/KofTwentyTwo/Jarvis/pull/156) | G — App UX surfaces | #87, #88, #89 | + +### Post-v0.1 cleanup + +| Merge | PR | Scope | +|-------|----|-------| +| `08095281` | [#159](https://github.com/KofTwentyTwo/Jarvis/pull/159) | CVE fix — vite + esbuild via `pnpm.overrides` + vitest@3 bump | +| `a8c7f1a0` | [#160](https://github.com/KofTwentyTwo/Jarvis/pull/160) | Dependabot batch — fiber 9.6.1 + plugin-react 6.0.1 + jsdom 29.1.1 + vite 8.0.12 (closes #144, #145, #147, #148) | +| `f6637ec3` | [#161](https://github.com/KofTwentyTwo/Jarvis/pull/161) | CI workflow fixes — typecheck order + webview-resources artifact shared across jobs | + +### Closed without merge + +- **PR #146** (TypeScript 6.0.3) — deferred to a focused v0.2 PR after CI typecheck order is verified. +- **5 superseded Dependabot PRs** — auto-closed when #160 landed. + +### Total issues closed today + +22 v0.1 audit-finding issues (Memory/Voice/MCP/Bus/HUD/Vision/UX) + #51 B-06 chat scroll + #63 stash triage = **23 issues closed**. + +--- + +## State you should verify + +### CI status + +Last CI run (on `f6637ec3`, post-CI-fix) is **in progress** at the time of writing. The fixes target two known bugs: + +1. **Webview typecheck order** — `pnpm -r build` now runs before `pnpm -r typecheck` so `@jarvis/bus` emits `dist/index.d.ts` before TypeScript reads it. +2. **SPM tests need the webview HUD bundle** — `swift-packages` matrix now depends on `webview` job and downloads the new `webview-resources` artifact to `App/Resources/webview/` so `BusTests` + downstream WKWebView-mounting tests find a real bundle. + +**Verify after lunch:** `gh run list --branch develop --limit 4`. If still failing, the residual issues are likely macOS-15 runner specifics (Xcode toolchain mismatch, missing brew formulas) — fix in a follow-up. + +### Local build + +`bash scripts/check-app-builds.sh` passes against `f6637ec3` on your machine (verified mid-session). + +### Stashes + +``` +$ git stash list +(empty) +``` + +5 dropped, 1 preserved as branch [`wip/voice-log-menu-stash4`](https://github.com/KofTwentyTwo/Jarvis/tree/wip/voice-log-menu-stash4) — archival starting point for v1.1 #52 (Voice Log menu, B-07). The branch is based on old `d8983af` (pre-v0.1); reapplying onto current develop will need manual rebase since Lane A's #158 reshaped `WakeWordDAG`, `VoiceController`, and `AudioGraphOwner`. + +### Worktrees + +All agent worktrees from yesterday's fan-out removed via `git worktree remove --force` + `git worktree prune`. Repo is on a single worktree (the canonical clone). + +--- + +## Three loose ends (none blocking) + +### 1. CircleCI GitHub App integration + +The CircleCI app is still wired at the repo level, but there's no `.circleci/config.yml` on `develop` (the stale `circleci-project-setup` branch was deleted today). Result: every PR shows a red ✗ "CircleCI Pipeline" status check with `No configuration was found in your project`. + +**Fix:** un-wire at https://github.com/settings/installations (manual web step — can't automate via `gh`). With Lane I's GH Actions now canonical, CircleCI is redundant. + +### 2. Dependabot security alerts + +The 2 moderate alerts (Vite path traversal + esbuild dev-server) should auto-close on the next Dependabot scan now that #159 + #160 landed (`vite@8.0.10` pinned via `pnpm.overrides`, `esbuild` dropped from the tree). + +**Verify:** Settings → Code security and analysis → Dependabot alerts. Expected within ~1 hour. If still open after that, run `gh api -X POST /repos/KofTwentyTwo/Jarvis/dependabot/alerts/{N}/dismiss --field state=dismissed --field dismissed_reason=tolerable_risk` per alert (but verifying-via-auto-close is the right outcome). + +### 3. CI workflow may still need polish + +PR #161 fixes the two known bugs but CI has only been validated against the workflow definitions themselves — actual end-to-end pass-on-develop is in flight. If anything else surfaces: +- Cache misses → tune the cache key in `actions/cache@v4` block. +- macOS runner Xcode version mismatch → adjust `sudo xcode-select` fallback path. +- Real-hardware lane only runs on self-hosted runners (user doesn't have one yet) — gated correctly behind `workflow_dispatch.run_real_hardware=true`. + +--- + +## What's next + +### Top of v0.2 queue (23 audit punch-list issues — milestone "Observable + stable") + +Pull live: `gh issue list --milestone "v0.2 — Observable + stable (audit punch-list)"`. + +High-leverage starting points: +- **Memory MED/LOW:** #17, #18, #19 (cleanup after the CRIT cluster landed). +- **MCP MED:** #22 (token cache trigger), #23, #24, #25, #26 (confirmation panel multi-monitor — needs real hardware), #27. +- **Voice MED/LOW:** #35, #37, #38, #39, #54, #55. +- **Bus MED/LOW:** #43, #44, #45, #47. +- **Build LOW:** #46. +- **Live verify:** #62. + +### M-0 substrate (v0.5 prerequisite) + +Migration phase M-0 (10 sub-issues #90–#99) can start in parallel — it's all infrastructure (typed JarvisAPI surface scaffolding) and doesn't touch the running user-facing code paths. + +### Deferred work + +- **#146 TypeScript 6.0.3** — reopen as a focused PR once CI is verified green (the typecheck errors flagged by Lane H were almost certainly the build-order bug fixed in #161). +- **Vitest 4.x major bump** — v0.2 issue per H' recommendation. +- **Vitest@3's `esbuild` plugin-option → `oxc` migration** — v0.2 cleanup, currently a warning per test run. + +### Empirical verification with real models (any time) + +The agent fixes are CI-friendly with stub embedders, but the user-facing semantic memory loop needs the real env to verify. Quick smoke test: + +```bash +ollama list # confirm nomic-embed-text + qwen2.5-coder +# Open Jarvis, have a conversation: +# "remember that I prefer dark mode" +# Close + reopen, then: +# "what did I tell you I prefer?" +# Should come back via search_memory. + +sqlite3 ~/Library/Application\ Support/Jarvis/jarvis.db \ + "SELECT COUNT(*) FROM facts, facts_vec;" +# Both counts should be non-zero and roughly equal. +``` + +--- + +## Methodology notes worth remembering for next session + +Three patterns that worked and one that didn't: + +**Worked:** Worktree-isolated background agents with `isolation: "worktree"`. 10 lanes ran in parallel without stomping each other's state. Each agent pushed its own branch + opened a draft PR. + +**Worked:** The H' "isolated tmp worktree per Dependabot PR" pattern. Lane H' tested 5 Dependabot PRs without polluting the main repo or any other lane's worktree. + +**Worked:** Squash-merging with explicit `Closes #N` in the squash subject (or PR body) for auto-closure. The 22 issues I batch-closed today only need that because I'd used bare `(#N)` references in the subjects, not `Closes #N` keywords. + +**Did NOT work:** Letting subagents run arbitrary `git` commands. Multiple lanes (Lane F, Lane G in particular) ended up mutating the main repo's HEAD because the agent ran `git checkout` / `git stash` operations from the main repo path rather than its worktree path. **For next session:** brief subagents with `**NEVER cd outside your assigned worktree**` as a hard rule. + +--- + +*Authoritative state remains: `.planning/PROJECT.md` (project), `.planning/ROADMAP-2026-05-12.md` (milestone roadmap), GitHub Issues for live triage, GitHub Milestones for v0.2/v0.5/v0.8/v1.0/v1.1 scope. This doc is the day-summary, not the system of record.*