Keep the planning call flowing: whole rounds again, and a notetaker that writes after either speaker

Merged
CH
18d ago
+57-22

Summary

  • Luke started pausing after every answer on a planning call. The cause was #1760: the planning model returned one question per call, so each answer waited on a full backend round trip before Luke could ask the next question.

  • planning.ts: Pocock's "How to plan" section is back word for word, with rounds. A new line tells the planning model that Luke asks its questions himself, one at a time, so answers can arrive mid-round. The return line is back to the GPT-Live delegation guide's own sentence. #1761's code-facts sentence stays, reworded so it keeps code questions out of a round instead of reading as "look up the repository every turn".

  • instructions.ts: the planning role line is back to role and leading the conversation, as the guide's template has it. A new labelled Conversation policy (planning scene only) says to ask one question at a time and to carry on with the next question while the backend works. "Never ask the developer for a fact about the code" is now a "Delegate to the backend when" condition.

  • Long silences (second commit). A test call's transcript showed four silences of 2.5 to 4.5 minutes. Each came right after Luke said he'd "finish the plan and bring it back for your sign-off". But the notetaker only wrote after the developer spoke, so nothing happened until they asked "are we done?". plan-scribe.ts now starts a run after a 1-second quiet gap whoever spoke last. GPT-Live has no end-of-turn event, so the quiet gap stands in for one. Luke's voice prompt now says "A notetaker writes the plan live as you talk; you never write it yourself."

  • New test in apps/web/tests/plan-scribe.test.ts: what Luke says is written into the plan without waiting on the developer. It fails on the old notetaker.

Evidence

  • Platform-independent checks: ./scripts/check.sh exit 0
  • macOS Electron verification (./scripts/verify.sh): not run. CI could not verify this PR. These are prompt changes only, and the behavior needs a live planning call on a Mac.

Visual evidence

  • Fixture screenshots inspected: not attached (no UI change)

Physical-device evidence

  • Screenshot or screen recording: not attached
  • Physical-notch check: not performed
  • Device/display configuration: not recorded

Invariants

  • ./scripts/check.sh green; no renderer/UI change.
  • JSON Schema goldens unchanged.
  • Every behavior change has, in this PR, the test that fails without it. The notetaker change has one. The prompt wording has none, because a test of the text would only detect that it changed; the check for it is a live planning call.
  • Gateway envelope goldens unchanged.
  • No new as type assertion.
  • No effect import in an OpenClaw-ported file.
  • No Effect.runPromise/runSync/runFork outside the runtime edges.
  • No new raw async primitives.
  • No discarded Effect, Stream, or Layer.
  • Test count: +1 (plan-scribe.test.ts).
  • No hand-rolled file replaced.
  • packages/live/AGENTS.md already describes the labelled policy shape; no doc sentence names the changed wording.
  • PRIVACY.md unchanged.
  • Package deps unchanged.
  • Barrel/door rule unaffected.

Notes

  • Follow-up verification: a planning call on a Mac. Luke should ask one question at a time, move straight to the next question after each answer, and never ask about the code. If he flows fine anyway, the Conversation policy's second sentence is the one to cut.

šŸ¤– Generated with Claude Code


Open workspace in Conductor