5.9 KiB
Next Steps — Resume Pointer
Last updated: 2026-05-15. Where we are: Phase 0 + 0.5 done. Phase 1 doc updated for Path B. Interface contracts IC-1..IC-4 frozen (commit
7c40c49). Where we go next: Dispatch T-1.0 — Server Refactor.
This document is the "where did I leave off" anchor. Read this first when
resuming work. The rest of docs/ is reference.
State at end of session
| Item | Status |
|---|---|
| Phase 0 — Stream Spike | ✅ done. Verdict GREEN with caveat (pipe-pane unreliable). Branch feat/spike-stream kept. |
| Phase 0.5 — Control-Mode Spike | ✅ done. Verdict: Path B — tmux control mode. Branch feat/spike-tmux-cc kept. |
| Phase 1 plan | ✅ updated to Path B. T-1.1 now specifies control mode + %output parser. Architecture diagram, risks (R4 + R5) added. |
| Interface Contracts (IC-1..IC-4) | ✅ frozen 2026-05-15. See SYNC.md. |
| Phase 1 implementation | ⛔ not started. T-1.0 is the next dispatch. |
| iOS work | blocked, untouched. |
Branches on remote git.vpsj.de/jay/pi-remote-control:
main— has all docs, no implementation changes yet.feat/spike-stream— Phase 0 PoC, throwaway.feat/spike-tmux-cc— Phase 0.5 PoC, throwaway. Reference impl for T-1.1.
Orchestrator todo list (in order)
These are things only the orchestrator does — not delegatable to a worker subagent.
1. Freeze interface contracts
Open PHASE-1-sidecar.md §Interface Contracts and re-read IC-1..IC-4.
For each: does it still look right after the spikes? Anything to tweak?
Things to double-check:
- IC-1 ClientToServer: do we want to add
{ type:"resize"; cols:int; rows:int }so iPad-Landscape can renegotiate tmux pane size? (Spec said fixed 120×40, but if we ever want elastic, this is the place.) Recommendation: defer, fix at 120×40 for v1, revisit only if it bites. - IC-1 ServerToClient:
treeevent — gruppe T is out of iOS scope, so this can be dropped from the contract OR kept as "reserved, server may emit but client ignores". Recommendation: drop to keep contract tight. - IC-2 REST shape:
/sessions/:id/thumbnailis referenced by iOS-D-01c (Phase 3). Should the endpoint return raw text/plain capture, or a structured JSON{cols,rows,lines:[…]}? Recommendation: raw text/plain — simpler, smaller, client parses lines itself. - IC-3 pairing:
deviceTokenandenvironmentare now mandatory in Phase 2. Pre-Phase-2 they're optional. Mark accordingly. - IC-4 TOML config:
[apns]section can have anenvironment_defaultfor testing convenience? Probably no — environment is per-device. Leave as-is.
After review:
- Edit
SYNC.md"Frozen Interface Contracts" table: set Statusfrozenand fillFrozen atdate. - Commit on main.
2. Dispatch T-1.0 — Server Refactor
Single agent, blocking everyone else. Refactor existing
extensions/remote-control/server.ts (335 lines) and friends into the
modular layout from PHASE-1-sidecar.md §Architecture Sketch.
Prompt template (adapt with concrete contract numbers):
# Task: Phase 1 T-1.0 — Server Refactor
Working dir: /Users/jay/.pi/agent/git/git.vpsj.de/jay/pi-remote-control
Read first:
- docs/NEXT-STEPS.md (state of play)
- docs/PHASE-1-sidecar.md §Architecture Sketch and §Task Breakdown row T-1.0
- docs/SYNC.md (claim the task)
- existing code: extensions/remote-control/{index,server,html,messages,auth,config}.ts
Goal:
- Carve existing server.ts into the server/ + server/routes/ + server/upgrade.ts
structure from the phase doc.
- Keep the LEGACY HTML client (html.ts) working end-to-end. Add comments
tagging these legacy paths.
- No new features. No new endpoints. Just structural refactor + ensure
existing tests / smoke usage still works.
- After your refactor lands, the directory layout matches the Phase-1
Architecture Sketch.
Out of scope: anything touching tmux/, buffer/, pi/, auth/{pairing,tls}.ts,
apns/, cli/. Those are for later T-1.* tasks.
Branch: feat/p1-t1-0-server-refactor
After T-1.0 merges into main, the parallel fan-out becomes available.
3. Plan the parallel fan-out
Once T-1.0 is in main:
- 5 worker dispatches in parallel: T-1.1, T-1.2, T-1.3, T-1.4, T-1.10.
- Each gets a tight prompt referencing their row in
PHASE-1-sidecar.mdand the relevant frozen ICs. - T-1.1 explicitly says: use control mode, reference
spike-cc.tsonfeat/spike-tmux-cc, follow R-CC-1..R-CC-5 expectations.
T-1.5, T-1.6, T-1.7 follow as their deps come in.
Reading order for resumption
docs/NEXT-STEPS.md(this file)docs/SYNC.md— current claims, gate, contractsdocs/PHASE-1-sidecar.md— what to builddocs/reference/PHASE-0-report.mdandPHASE-0.5-report.md— why we're building it this way- Spec only if you forget the why:
docs/reference/SPEC-ios-app.md
Open questions for next session
OQ-1. Drop the— resolved: dropped. IC-1 frozen 2026-05-15.treeevent from IC-1 ServerToClientOQ-2. Resize message in IC-1?— resolved: deferred, fixed 120×40 for v1.- OQ-3. Should
tmux/manager.tsuse a single long-lived control-mode connection per server, or per session? The spike used per-session for simplicity. Per-server scales better but is more code. Decide before T-1.1 starts. (Not an IC question — T-1.1 implementation detail.) OQ-4. Worker model for T-1.0?— resolved:anthropic/claude-sonnet-4-6withcontext: fresh. Haiku rejected: previous swarm attempt produced broken imports acrossindex.ts/html.ts/messages.tseven on a stronger model (see deletedfeat/p1-t1-0-server-refactorbranch). T-1.0 is the blocker for all parallel fan-out — reliability over cost.
Don't do tomorrow
- Don't merge the spike branches into main. They're reference, not code.
- Don't start T-1.1 before T-1.0 is in main.
- Don't start any iOS task until Phase 1 is at least feature-complete.
- Don't expand scope. Stick to v3 spec; new ideas go into a v4 review round, not into open PRs.