Feature planning MVP: plans, planning calls, and the notetaker
Merged
CH
14d ago+23831+23831+01234567890123456789012345678901234567890123456789-1227-1227-0123456789012345678901234567890123456789
Summary
Merges the feature-planning MVP integration branch into main: 46 PRs (#1729 through #1779), each already reviewed and merged into charles/feature-planning-mvp.
- Named feature plans stored per account with a fixed template, and
update_plan(LUKE-334, LUKE-352). Migrations0049_plan,0050_voice_session_plan,0051_plan_fields,0052_voice_session_detached,0053_plan_template_reset,0054_plan_command,0055_plan_folder_off_service(0053 wipes every plan's document; 0054 drops the repository columns). - The planning model runs on the hosted brain over a plan conversation, leads the call, and uses the grilling skill (LUKE-336, LUKE-351, #1747).
- GitHub connection and repository reads through GitHub's hosted MCP tools, including on Vercel Previews (LUKE-338, LUKE-348).
- Bounded public web search and page reads for the planning model (LUKE-339).
- GPT Live connected to the planning model on the selected plan; review by voice, handoff prompt, copy (LUKE-340, LUKE-342).
- Planning lives in the notch panel's Plans tab; the planning window is removed; Sessions and Conversation tabs are hidden for now (LUKE-347, LUKE-349, LUKE-350).
- A notetaker writes the plan during a planning call and streams drafts to the Mac, replacing polling (#1748 through #1751).
- A planning call is seeded with its saved plan; the Mac logs why a voice call ended (#1753, #1754).
- The planning model explores a real clone of the plan's repository instead of GitHub's MCP file reads (#1757).
- Hosted voice calls survive longer: the socket is pinged every 30s, and a dropped device socket detaches the call instead of ending it, with an orphan sweep (#1756, #1758).
- Planning call polish: one question at a time, the repository answers code questions instead of Luke asking, and the plan's typing caret gets its own accent (#1759, #1760, #1761).
- A standing question queue replaces planning rounds, and each question goes to the voice the moment it's ready; the notetaker writes after either speaker (#1762, #1764, #1768, #1770).
- The Plans tab says Thinking while the model works, shows the voice and backend separately, tells GPT-Live when Luke reads the repository, and edits the plan like a person at a streaming model's pace (#1763, #1765, #1766, #1767, #1771).
- Luke opens as an ordinary Mac app window with a Dock tile instead of the notch panel (#1775).
- GitHub sign-in asks for
repo; the plan template is reworked for a coding agent and the handoff prompt is dropped; a stop button and a mute indicator on the plan's call (#1774, #1776, #1778). - The planning model reads a local folder on the Mac instead of a GitHub clone: the service queues shell commands that the Mac runs with
/bin/bashin the plan's folder, as the user, and returns the output (#1777). This replaces the sandboxed clone from #1757. #1779 runs each command undersandbox-execwith a deny-by-default profile: no network, no writes, reads only in the plan's folder and system paths,.envfiles refused, and a clean environment.
Evidence
- Platform-independent checks: CI on this PR
- macOS Electron verification (
./scripts/verify.sh):not runon this merge PR
CI could not verify the Mac side of this change: it runs on Linux only and builds nothing for the Mac. Mac evidence lives in the individual PRs (for example #1738's planning-window capture), not here.
Visual evidence
- Fixture screenshots inspected:
not attached
Physical-device evidence
- Screenshot or screen recording:
not attached - Physical-notch check:
not performed - Device/display configuration:
not recorded
Invariants
See each constituent PR. Points specific to the merge:
- JSON Schema goldens changed: new goldens for the plan, GitHub, and planning tool wire shapes, plus
sessionCreateFrame/sessionOpeningFramegaining the plan field. No existing golden lost a field. PRIVACY.mdchanged, and it is a product decision: new "Feature plans" and "How the plan is written during a planning call" sections, the allowance line now covers the notetaker, and #1757 adds a disclosure for the repository clone. #1731 marks the wording as proposed, so it needs sign-off before this merges.
Notes
- Blockers or follow-up verification: sign-off on the
PRIVACY.mdwording; averify.shpass on a Mac against the merged tree.
š¤ Generated with Claude Code