Skip to content

Name a quick-propose session for its project, not its id - #172

Merged
MJohnson459 merged 1 commit into
mainfrom
name-propose-session-for-project
Aug 14, 2026
Merged

MJohnson459 merged 1 commit into
mainfrom
name-propose-session-for-project

Conversation

@MJohnson459

Copy link
Copy Markdown
Contributor

A quick propose (n) launched its headless agent under voro-propose-<project_id>, while the interactive planning session beside it (N), on the same project, was named voro-plan-<project>. In claude agents the two read as different kinds of thing, and the bare number was the one shape a Voro-composed session name otherwise reserves for a task id.

Launch::Propose now carries the project's name, sanitised through the same sanitize_for_name the Plan arms use, so a quick propose on the voro project is voro-propose-voro with slug propose-voro, and odm 2 reduces to voro-propose-odm-2 exactly as a planning session's does. dispatch::propose() builds the launch from the project it already loads; the project_id parameter stays, since it is what the caller has and what default_repo needs. The variant's doc comment, which used to argue that the id served because propose already occupied the position a bare number would be read in, now says what Plan's says: a task-less launch names its project by name, and the two share one convention.

Nothing else about the quick propose moves — it still runs the dispatch verb, opens no session row, moves no state, and still refuses an agent whose dispatch template carries {task_id}.

Docs updated in the same change, per CLAUDE.md: DESIGN.md §8's {session_name} paragraph now states the invariant over both task-less launches rather than planning alone; docs/agent-integration.md's {session_name} bullet lists the propose form beside the others, keeping the "bare number is always a task id" justification that now covers it; the embedded voro.toml starter comment gained the form; CHANGELOG.md has a ### Changed entry.

Tests: a_quick_propose_names_its_project_and_has_no_task rewritten against a project name (voro-propose-mote / propose-mote, still no task id, still distinct from a dispatch's name); the plan sanitising test extended to cover both variants and renamed a_task_less_launch_sanitizes_its_project_name; and a new dispatch::tests::propose_names_its_session_for_the_project proves end-to-end, through a stub agent that echoes {session_name} to a marker, that a project named odm 2 spawns voro-propose-odm-2 and stamps its prompt file propose-odm-2-*.

Verified: cargo test --workspace (859 tests, 0 failed), cargo clippy --workspace --all-targets -- -D warnings clean, cargo fmt --all --check clean, and rg 'voro-propose|propose-\{?project_id' shows no stale text.

A quick propose launched under `voro-propose-<project_id>` while the
planning session beside it, on the same project, was named
`voro-plan-<project>`. In `claude agents` the two read as different
kinds of thing, and the bare number was the one shape a Voro-composed
session name otherwise reserves for a task id.

`Launch::Propose` now carries the project's name, sanitised as
`Launch::Plan` sanitises it, so `n` on the `voro` project opens
`voro-propose-voro` and stamps its prompt and log files `propose-voro`.
The two task-less launches share one convention; nothing else about the
quick propose moves.
@MJohnson459
MJohnson459 merged commit 70faf6e into main Aug 14, 2026
7 checks passed
@MJohnson459
MJohnson459 deleted the name-propose-session-for-project branch August 14, 2026 17:12
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