Conversations on the new loop (M2.5, PR A) #106

Merged
dev-agent merged 1 commits from loop-conversations into main 2026-10-06 04:33:05 +00:00
Collaborator

M2.5, PR A: conversations and the record for existing projects. This follows the design agreed in #104 (L1 general, L5, D1). PR B, new projects, comes next.

What changes

  • A top-level message that isn't a command is a conversation. It's a general-scope item threaded under your message, and later messages in that thread continue it. The driver gets reply, ask_human and propose_work, with no workspace and no execution; its instructions list the projects. Commands at top level (status, stop, go, …) behave as before. general is reserved as a project name.
  • Work from a conversation:
    • Proposal: propose_work(project, title, summary) goes up as rev-N ("I'd open an issue in don/sandbox, …"). The summary is the distilled brief. Like a restatement, it's checked: no trailing question, and the project must exist.
    • On go or a plain yes: under a file_issue intent (L8), the record issue is opened in that project and assigned to the agent. Its body is the summary plus <!-- nisse-item: <id> -->.
    • The item: it starts already agreed, with the summary as its brief, and has its own "Queued …" thread. The conversation records what it became and goes on.
    • Intake skips any issue carrying an ID (D1).
    • Boot after a crash: if the issue exists, its item is started; if it doesn't, the proposal goes up again.
  • Idle close: a conversation closes after tuning.loop.general_idle_s (default a day, documented in the Tuning Guide). A later reply in its thread starts a new conversation that notes what it continues.

Tests

  • test_loop_conversations.py:
    • the thread is under your message, and replies continue it;
    • agreed work is filed with the marker and assigned, its item starts without a restatement and publishes "Closes #N";
    • intake skips a record issue;
    • an unknown project is sent back;
    • changes give a new revision;
    • idle close and continuation;
    • a plain yes files;
    • both crash cases;
    • commands at top level aren't conversations.
  • Walk: top-level chats, conversation replies, proposals and their go-aheads, and time jumps past the idle limit. New properties:
    • records_have_one_item: every marker issue is its item's, and started agreed;
    • conversations_do_no_work.
  • E2E: a conversation that becomes filed sandbox work, through to its PR. scripts/e2e.sh passed 7 of 7; unit and integration tiers pass.

🤖 Generated with Claude Code

https://claude.ai/code/session_01PPQ14L3LikyefCMFBqEbKE

M2.5, PR A: conversations and the record for existing projects. This follows the design agreed in #104 (L1 `general`, L5, D1). PR B, new projects, comes next. ## What changes - **A top-level message that isn't a command is a conversation.** It's a `general`-scope item threaded under your message, and later messages in that thread continue it. The driver gets `reply`, `ask_human` and `propose_work`, with no workspace and no execution; its instructions list the projects. Commands at top level (`status`, `stop`, `go`, …) behave as before. `general` is reserved as a project name. - **Work from a conversation:** - **Proposal:** `propose_work(project, title, summary)` goes up as `rev-N` ("I'd open an issue in don/sandbox, …"). The summary is the distilled brief. Like a restatement, it's checked: no trailing question, and the project must exist. - **On go or a plain yes:** under a `file_issue` intent (L8), the record issue is opened in that project and assigned to the agent. Its body is the summary plus `<!-- nisse-item: <id> -->`. - **The item:** it starts already agreed, with the summary as its brief, and has its own "Queued …" thread. The conversation records what it became and goes on. - **Intake** skips any issue carrying an ID (D1). - **Boot after a crash:** if the issue exists, its item is started; if it doesn't, the proposal goes up again. - **Idle close:** a conversation closes after `tuning.loop.general_idle_s` (default a day, documented in the Tuning Guide). A later reply in its thread starts a new conversation that notes what it continues. ## Tests - **`test_loop_conversations.py`:** - the thread is under your message, and replies continue it; - agreed work is filed with the marker and assigned, its item starts without a restatement and publishes "Closes #N"; - intake skips a record issue; - an unknown project is sent back; - changes give a new revision; - idle close and continuation; - a plain yes files; - both crash cases; - commands at top level aren't conversations. - **Walk:** top-level chats, conversation replies, proposals and their go-aheads, and time jumps past the idle limit. New properties: - `records_have_one_item`: every marker issue is its item's, and started agreed; - `conversations_do_no_work`. - **E2E:** a conversation that becomes filed sandbox work, through to its PR. `scripts/e2e.sh` passed 7 of 7; unit and integration tiers pass. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01PPQ14L3LikyefCMFBqEbKE
dev-agent added 1 commit 2026-10-06 04:26:57 +00:00
Conversations on the new loop (M2.5, PR A)
CI / checks (push) Skipped
CI / checks (pull_request) Successful in 5m14s
3f54896f65
- A top-level message that isn't a command is a conversation: an item in
  the `general` scope (L1), threaded under the operator's message, with
  `reply`, `ask_human` and `propose_work` and no workspace or execution.
  `general` is reserved as a project name.
- propose_work(project, title, summary) goes up as a revision for a
  go-ahead (or a plain yes). On go, under a file_issue intent (L8), the
  record issue is opened in that project, assigned to the agent and
  carrying the new item's ID; its item starts agreed, with the summary as
  its brief. Intake skips any issue carrying an ID (D1); boot adopts a
  filed issue or puts the proposal up again.
- A conversation closes after tuning.loop.general_idle_s (default a day);
  a reply in its thread then starts a new conversation that continues it.

Tests: conversation unit tests (threading, filing, the marker, an unknown
project, changes, idle close and continuation, a plain yes, both crash
cases, commands at top level); the walk with conversations, proposals and
idle time, and records_have_one_item / conversations_do_no_work; an e2e
conversation that becomes filed work.

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-06 04:32:15 +00:00
dev-agent merged commit 6c962e1ed9 into main 2026-10-06 04:33:05 +00:00
dev-agent deleted branch loop-conversations 2026-10-06 04:33:05 +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#106