Conversation on the new loop (M2.7) #114

Merged
dev-agent merged 1 commits from conversation into main 2026-10-07 19:20:35 +00:00
Collaborator

M2.7 of the Development Plan (L5, #42, #77), as planned.

What changes

  • Questions never change state (#77's core property). A message ending in ? to a waiting project item, whether it's waiting for a go-ahead, an answer or a merge, starts a question run:
    • Tools: reply plus the look-only tools, and an instruction to change nothing.
    • After: the item goes back to the very wait it was in, with the same revision, PR and note. So a restatement that was up stays up, and go still binds to it. Its own pending question stays open.
    • If the driver can't answer, it says so and goes back all the same.
  • Explanations.
    • Restatements: they give their reasons and the main alternative. A revision says what changed: restate has a changed argument, and a later revision without one is sent back. The post shows "Changed from rev-N: …".
    • Milestone summaries: the instructions ask for what was done, verified and left open.
  • Progress in prose (#42).
    • Posting: the driver's own words for a turn are posted in the item's thread, trimmed to about 400 characters, at most once a minute per item. A helper's turns get the same treatment, prefixed helper:. The instructions ask for one sentence of what and why before each group of tool calls.
    • details in a thread shows the item's last 10 tool calls with their outcomes.
    • Mid-run messages are acknowledged at once: "Noted; I'm in the middle of #15, and I'll read it when that turn ends."
  • CI correction. The e2e job's comments and the plan said a newer push cancels the run it supersedes. On this Gitea it doesn't, as we saw, so the text now says so, and the dead concurrency block is gone.

Tests

  • test_loop_talk.py:
    • a question about a restatement leaves it up, and go binds to it;
    • a question back keeps the agent's own question open;
    • an unanswerable question still goes back;
    • a revision says what changed;
    • progress rate and trimming;
    • details;
    • mid-run acknowledgements.
  • A helper's progress test in test_loop_help.py.
  • Walk: questions in every state, with a new questions_change_nothing property. Routing questions the old way fails it in 32 of 48 seeds.
  • E2E: test_a_question_leaves_the_restatement_up passed alone on qwen in 4m 6s for $0.0000. This PR's CI runs the full suite.
  • Results: unit (729) and integration (21) tiers pass. Five older tests were updated for the new rules (second restatements now say what changed; "how's it going?" is now a question).

Deferred

  • Streaming (out of scope per #42).
  • The question property in specs/loop.qnt; the walk checks it against the code.

🤖 Generated with Claude Code

https://claude.ai/code/session_01PPQ14L3LikyefCMFBqEbKE

M2.7 of the Development Plan (L5, #42, #77), as planned. ## What changes - **Questions never change state** (#77's core property). A message ending in `?` to a waiting project item, whether it's waiting for a go-ahead, an answer or a merge, starts a *question run*: - **Tools:** `reply` plus the look-only tools, and an instruction to change nothing. - **After:** the item goes back to the very wait it was in, with the same revision, PR and note. So a restatement that was up stays up, and `go` still binds to it. Its own pending question stays open. - **If the driver can't answer,** it says so and goes back all the same. - **Explanations.** - **Restatements:** they give their reasons and the main alternative. A revision says what changed: `restate` has a `changed` argument, and a later revision without one is sent back. The post shows "Changed from rev-N: …". - **Milestone summaries:** the instructions ask for what was done, verified and left open. - **Progress in prose** (#42). - **Posting:** the driver's own words for a turn are posted in the item's thread, trimmed to about 400 characters, at most once a minute per item. A helper's turns get the same treatment, prefixed `helper:`. The instructions ask for one sentence of what and why before each group of tool calls. - **`details`** in a thread shows the item's last 10 tool calls with their outcomes. - **Mid-run messages** are acknowledged at once: "Noted; I'm in the middle of #15, and I'll read it when that turn ends." - **CI correction.** The e2e job's comments and the plan said a newer push cancels the run it supersedes. On this Gitea it doesn't, as we saw, so the text now says so, and the dead `concurrency` block is gone. ## Tests - **`test_loop_talk.py`:** - a question about a restatement leaves it up, and `go` binds to it; - a question back keeps the agent's own question open; - an unanswerable question still goes back; - a revision says what changed; - progress rate and trimming; - `details`; - mid-run acknowledgements. - **A helper's progress** test in `test_loop_help.py`. - **Walk:** questions in every state, with a new `questions_change_nothing` property. Routing questions the old way fails it in 32 of 48 seeds. - **E2E:** `test_a_question_leaves_the_restatement_up` passed alone on qwen in 4m 6s for $0.0000. This PR's CI runs the full suite. - **Results:** unit (729) and integration (21) tiers pass. Five older tests were updated for the new rules (second restatements now say what changed; "how's it going?" is now a question). ## Deferred - Streaming (out of scope per #42). - The question property in `specs/loop.qnt`; the walk checks it against the code. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01PPQ14L3LikyefCMFBqEbKE
dev-agent added 1 commit 2026-10-07 18:02:03 +00:00
Conversation on the new loop (M2.7)
CI / checks (push) Skipped
CI / checks (pull_request) Successful in 13m26s
CI / e2e (pull_request) Successful in 38m44s
8994b3fb4b
- Questions never change state (L5, #77): a message ending in "?" to a
  waiting project item starts a question run (reply and look-only tools,
  an instruction to change nothing), and the item goes back to the very
  wait it was in: a restatement up stays up and a go binds to it; the
  agent's own question stays open.
- Explanations: a restatement gives its reasons and the main alternative;
  a revision says what changed (restate(changed), sent back without it);
  a milestone's summary says what was done, verified and left open.
- Progress in prose (#42): the driver's and a helper's own words for a
  turn are posted, trimmed, at most once a minute per item; `details`
  shows the last tool calls; a message arriving mid-run is acknowledged at
  once ("Noted; ...").
- CI: the e2e job's comments and the plan no longer claim a newer push
  cancels the run it supersedes (Gitea here doesn't); the concurrency
  block goes.

Tests: conversation unit tests (questions in a go-ahead and an answer wait,
an unanswerable question, revisions, progress rate and trimming, details,
mid-run notes), the helper's progress, the walk asking questions in every
state with a questions_change_nothing property (routing questions the old
way fails 32 of 48 seeds), and an e2e question while a restatement is up.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PPQ14L3LikyefCMFBqEbKE
dongar approved these changes 2026-10-07 19:18:54 +00:00
dev-agent merged commit 2d6aa98f87 into main 2026-10-07 19:20:35 +00:00
dev-agent deleted branch conversation 2026-10-07 19:20:35 +00:00
Sign in to join this conversation.
No Reviewers
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: dev/nisse#114