Skip to content

fix(agent): close the correctness gaps from the rc2 review - #207

Merged
arthware-dev merged 6 commits into
feature/rc2from
fix/rc2-review
Oct 13, 2026
Merged

arthware-dev merged 6 commits into
feature/rc2from
fix/rc2-review

Conversation

@arthware-dev

Copy link
Copy Markdown
Contributor

Summary

  • Fixes the five correctness findings from the rc2 review: a list move that lost items, a delete confirmation others or the shell could give, vault commits under the wrong name, nanobot notices taken for answers (lost voice quote, closed questions), spoken answers to the agent's question, and status traces that never stopped.
  • Tools now read the sender per message from nanobot's request context (runtime/turn.py) instead of a global the briefing overwrote.

Test added 6 commits October 13, 2026 10:20
`stack memory list move` skipped adding an item when the other list
already had one whose name contained it, or the same item ticked, and
then removed it from the old list anyway. Moving "Eier" to a list with
"Bio-Eier" or a ticked "Eier" lost the open item.

A move now skips the add only for the same item, open or ticked alike,
and an add uses the same match to say an item is already on the list.
The agent put the name on a vault commit from a module global that each
briefing overwrote. When two rooms were answered at the same time, a
change could be committed as whoever spoke last in the other room.

Tools now read the sender from nanobot's request context, which nanobot
binds per message for as long as it handles that message.
A refused delete waited for a yes keyed by the list alone, so anyone in
any room could confirm it in a later message. The agent's shell could
also run `stack memory list delete --yes` and skip the question.

The yes now counts only from the same person in the same conversation,
and the shell refuses a list delete that carries `--yes`.
The quote of what was heard went on the first outbound message with
text. nanobot's notices carry text too ("Compressing context…"), so
when the context was compacted mid-turn the quote went on the notice,
which the status trace then dropped, and the answer came without it.
The open question had the same blind spot: a notice closed it.

An answer is now a message with text and no event, or the event that
marks a streamed answer; every notice carries an event of its own.
Answering the agent's question needed no name when typed, but a voice
answer was still held to the name rule and dropped. And the question
was recorded for whoever last wrote in the room, so a second person
writing while the agent answered took the question over.

The question gate now sits inside the voice gate, so a spoken answer
passes like a typed one, and the question is for the sender of the
message it answers.
The status trace ran until the agent answered. A turn that is cancelled
sends no answer, and a message whose handoff failed never starts a turn,
so its status loop ran on until the next message in that room.

The status now stops by itself once it is full or after ten minutes,
and a failed handoff stops it at once. What it showed stays.
@arthware-dev
arthware-dev merged commit b9684dc into feature/rc2 Oct 13, 2026
1 check passed
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