Skip to content

fix: ask-here pane approvals and card guards - #1833

Merged
ZeroPoint95 merged 7 commits into
devfrom
zeropoint95/ask-here-card-guard
Oct 14, 2026
Merged

ZeroPoint95 merged 7 commits into
devfrom
zeropoint95/ask-here-card-guard

Conversation

@ZeroPoint95

@ZeroPoint95 ZeroPoint95 commented Oct 14, 2026 •

Copy link
Copy Markdown
Collaborator

Fixes two defects in home's ask here pane: approvals had nowhere to be answered, and the reminder card skipped the question block's guards.

What changed

Approvals inside an errand

  • A gated call inside an errand waits for the errand's agent to answer. errandEvent ignored EventConsentRequest, and nothing else holds that agent. The row said working forever, and 1 went into the follow-up box.
  • The pane now draws the approval under its call, using the conversation's own builder and renderer: 1 allow once, 3 deny. There is no always from the pane.
  • The answer goes straight to the errand's agent (ResolveConsent), not through the shared answer path. That path's receipt lands above the window's own box, and its c change would ask the window's engine.
  • The row reads waiting on you; the live strip gives way; the call's row keeps allowed / denied.
  • Approvals are dropped when the turn ends. Several in one step are asked oldest first. Results pair to rows by call id.
  • errandWait is renamed waitErrand and added to the harness's blockingCommands, so a test can hold a gated stream open.

The reminder card

  • While a correction was typed after o, 1/3/0 still answered the card. "make it 10 tomorrow" said yes at the 1. Every key is now text while the change is written, including when an approval is up beside the card.
  • The card and the approval keep the block's quarter-second settle guard, counted from the first frame that drew them. The card's guard starts again after an approval hides its answers.
  • The card's answer no longer files a receipt above the window's box (questionShown.elsewhere).

Overlap with #1831

Manual

  • asking-from-home.md: three new sections, and the change key is named o (it said c). The line that sent approvals to continue as a conversation is gone, since that interrupts the waiting call.
  • Five retrieval probes.

How it was checked

  1. Reproduced both before fixing. A scripted errand emitting EventConsentRequest: pane ⠋ running, no question, 1 reached nothing. Typing a correction: the card was answered yes.
  2. 12 new tests (homeexchange_consent_test.go, homeexchange_cardguard_test.go). 323 related tests pass with make test-focus.
  3. go test ./internal/manual/, make test-laws, untagged go test ./internal/e2e/.
  4. make pr-ready (GOFLAGS=-mod=readonly) passed after syncing with dev.

Checklist

  • Change entry
  • Manual updated in this change
  • No new known-red line
  • Only my own paths staged

🤖 Generated with Claude Code

ZeroPoint95 and others added 7 commits October 13, 2026 14:35
A call inside home's `ask here` errand that the approval policy grades
"ask" blocks inside the errand's session until that agent is answered.
errandEvent had no case for EventConsentRequest, and nothing else holds
the errand's agent, so the errand sat `working` on a question no screen
drew, and a `1` pressed at it went into the follow-up box.

- The pane now draws the approval under the call it is about, with the
  conversation's own question builder and renderer: `1 allow once` and
  `3 deny`. There is no `always` from the pane.
- The answer goes straight to the errand's agent (ResolveConsent), not
  through the block's door, whose receipt lands above the window's own
  box and whose `c change` would be answered by the window's engine.
- The row says `waiting on you` and sorts first; the live block gives
  way while the turn waits; the call's row keeps `allowed`/`denied`.
- The block's settle guard applies to the approval's digits and clicks,
  so a digit typed into a follow-up cannot allow an unread command.
- Approvals are dropped when the turn ends; several in one step are
  asked oldest first. Results pair to rows by call id.
- errandWait is renamed waitErrand so the harness's waiter law sees it
  and a test can hold a gated stream open.
- asking-from-home.md says all of this, and no longer sends approvals
  to `continue as a conversation`, which ends the waiting call.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Home's `ask here` pane routed its standing card's keys straight into the
block's router, past the guards the block keeps in front of it.

- While a correction was being typed after `o`, the card still owned
  `1`, `3` and `0`: "make it 10 tomorrow" answered it yes at the `1`,
  set the reminder up as first proposed and lost the rest. Every key is
  text while the change is written now.
- The card took a key or a click the instant it appeared. It now keeps
  the block's settle guard, counted from the first frame that drew it.
- Its answer went through the block's door, which files a receipt above
  the window's own box, in a conversation that never asked. A question
  marked `elsewhere` leaves no receipt and counts no yes.
- asking-from-home.md says all three, names the change key `o` (it said
  `c`), and two probes pin the asker's words.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review of #1833.

- While a correction is being written after `o`, the box owns every key,
  approval included. With a card and an approval up together, "make it
  10" allowed the call at its `1` and left "make it 0" in the box.
- An approval arriving zeroes the card's settle stamp, so the card's
  answers settle again when they come back. A `1 1` allowed the call
  and set up the reminder in the same instant.
- The routing comment names the change key `o`, not `c`.
- The manual's run-on heading is two sections.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ZeroPoint95
ZeroPoint95 marked this pull request as ready for review October 14, 2026 21:32
@ZeroPoint95
ZeroPoint95 merged commit 1197791 into dev Oct 14, 2026
7 checks passed
@ZeroPoint95
ZeroPoint95 deleted the zeropoint95/ask-here-card-guard branch October 14, 2026 22:24
ZeroPoint95 added a commit that referenced this pull request Oct 14, 2026
#1833's settle guard drops a key that lands with the card, so the test pins
the clock and moves it past questionSettle once the card has been drawn.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ZeroPoint95 added a commit that referenced this pull request Oct 14, 2026
…do (#1834)

* fix: make home's ask-here hints and the /help digits name what the keys do

- alt+enter on home belongs to the router (the composer layer); drop the
  unreachable alt+enter arm from home's ask-here case and keep ctrl+enter.
- An errand row's foot says `enter or → answer this ask here` (and
  `enter answer this ask here · esc clear` over a draft); tab on the row is
  the next place.
- The pane's `tab or esc back to the list` stays the last clause, so a
  60-column frame keeps it; `/ commands` is not named while the pane has
  the keyboard.
- /help numbers each place (`1 home · 2 AI teams · …`) instead of calling
  placeOrder the tab bar's order.
- The manual pages say the same: ctrl+enter vs alt+enter, the row and pane
  feet, and which digit opens which place.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix: give the ask-here pane's box its own words, and raise its sheet on a phone

- While an errand's pane holds the keyboard, the box under it says
  `type a follow-up` (or `type the change` after `o` on a card) instead of
  home's `type to search or start something new`.
- On a phone-width window an errand's sheet now follows the pane's focus,
  so `ask here`, its chord and `→` on the row show the box the keys type
  into; before, only `enter` raised it and typed letters went nowhere visible.
- The phone sheet's box draws the same sentence at rest.
- Manual: the pane's box, ask here on a phone-width window, and the card's
  correction key (`o`, not `c`).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* docs: home's arrows never cross columns; say what → opens instead

- keys.md, home.md, commands.md and places.md said ←/→ cross home's
  columns. Since 2026-09-17 every stop is in the field's one column and
  the rail is never walked: → opens the row's verbs, ← closes them, and on
  an ask-here row → hands the pane the keyboard.
- The strip's words now match the code (x delete, p pause, s stop it), and
  the project row's `its chats` verb (removed in #1422) is no longer promised.
- The phone inbox's folded project opens with → and folds with ←.
- Comments in home.go, placekeys.go and verbstrip.go no longer cite the
  deleted homeView.crossColumns.
- A truth test fails if any section repeats the crossing claims; three probes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* docs: home's ctrl+e asks to delete, it does not close a tab

- keys.md said ctrl+e closes, archives and reopens a conversation, that
  the strip's verb is `x close`, and that the card legend says
  `ctrl+e close`. Since #1750 ctrl+e on a conversation row opens the delete
  confirmation (legend `ctrl+e delete`), and enter reopens a dimmed row.
- homeArchiveRow's comment says no key reaches it; tests still use it to
  make closed rows, so it stays.
- A truth test fails if a section repeats the old claims; one probe, and
  the places heading for the box's rule gains the asker's words.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* changelog: entry for #1834

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* review: /help's digit row in commands.md, the o key, and leftovers

- commands.md quoted /help's old `established shortcut order` row; it now
  quotes the numbered list, and a truth test refuses the old phrases.
- asking-from-home: the way back is the last clause except while a change
  is being typed after `o`.
- Comments call the correction key `o`, and the ctrl+x comment no longer
  says → crosses columns.
- Remove the e2e rig's unused altEnter.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test: let the pane's card settle before the box-sentence test presses o

#1833's settle guard drops a key that lands with the card, so the test pins
the clock and moves it past questionSettle once the card has been drawn.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant