From 3d42a406ba6abfcb5eeb76476dd35d02940f660e Mon Sep 17 00:00:00 2001 From: santoshkumarradha Date: Sun, 27 Sep 2026 12:33:51 -0400 Subject: [PATCH 1/8] fix(standing): preserve approved one-time action in execution handoff --- internal/manual/chat/asking-from-home.md | 2 +- internal/manual/chat/keeping-an-eye.md | 20 ++++++-- internal/session/answers.go | 22 +++++++-- internal/session/answers_test.go | 18 +++++++ internal/session/standing_test.go | 63 +++++++++++++++++------- internal/session/tools_standing.go | 31 ++++++++++-- internal/tui3/standing.go | 12 ++--- internal/tui3/standing_test.go | 13 +++++ 8 files changed, 142 insertions(+), 39 deletions(-) diff --git a/internal/manual/chat/asking-from-home.md b/internal/manual/chat/asking-from-home.md index f7d4405577..50cee1db55 100644 --- a/internal/manual/chat/asking-from-home.md +++ b/internal/manual/chat/asking-from-home.md @@ -307,7 +307,7 @@ on home says `? waiting on you` for as long as it does. **The card stays after you answer it.** It does not disappear — it settles in place, greys out, and its bottom edge carries what was decided in the same words a card in a conversation -uses: `Set it up · Mondays at 9am · set up`, `Only now, don't repeat · done now, nothing kept`, +uses: `Set it up · Mondays at 9am · set up`, `Only now, don't repeat · approved once, not scheduled`, `Change… · you asked for something different`, `not set up`, `ended · nothing was set up`. The answers go, so `1`, `3`, `0` and `o` are ordinary characters again and can be typed into a follow-up. The only card that ever diff --git a/internal/manual/chat/keeping-an-eye.md b/internal/manual/chat/keeping-an-eye.md index faf713c293..695334dee0 100644 --- a/internal/manual/chat/keeping-an-eye.md +++ b/internal/manual/chat/keeping-an-eye.md @@ -939,10 +939,13 @@ piece of the ask still to do. `the card was left unanswered — nothing was set up`. This is the opposite of a task proposal, where silence starts the work: a task is bounded work somebody is watching, and a standing item spends money at times nobody chose. -- **A "do it once" answer sets nothing up.** It answers - `Do it now as an ordinary step and report what happened. The person chose not to repeat it. Do not set it up again unless they ask. Do not investigate codeaf.` - and codeaf does the thing in front of you instead. A **one-off reminder's card - does not offer that answer** — see "Why is there no once on my reminder card". +- **A "do it once" answer approves immediate work, not a schedule.** The settled + card says `approved once, not scheduled`. That is an approval receipt, not + proof that the work has finished. The approved action, workspace, watch probe, + acceptance and spending limits are handed back to the current conversation; + it uses its ordinary tools and permissions and reports the actual result or + a blocker. No standing item is saved. A **one-off reminder's card does not + offer that answer** — see "Why is there no once on my reminder card". - **It will not set a reminder for a moment that has already passed.** The stamp is refused with the current time in it, and codeaf is asked to work it out again from that. @@ -959,3 +962,12 @@ piece of the ask still to do. one: nothing that runs on its own may arm something else that runs on its own. - **Nothing is armed by a matcher.** Nothing runs because a phrase looked like a rule; every single one of these was a card you said yes to. + +## Why does a one-time job say run it then instead of remind me? + +A one-time card that will perform work says `wants to schedule work once`. +Its approval is `Run it then ·