diff --git a/crates/buzz-acp/src/base_prompt.md b/crates/buzz-acp/src/base_prompt.md index 305d5b8880d..4d231ca44eb 100644 --- a/crates/buzz-acp/src/base_prompt.md +++ b/crates/buzz-acp/src/base_prompt.md @@ -35,7 +35,7 @@ A project is a named grouping (`kind:30621`) with a home channel. Creating a sec - If you are in a project's home channel, or a project with that name/slug already exists, do **not** run `buzz projects create`. `` includes project fields when this channel is a project home — tasks, repositories, and files you create belong to that project. - To add a codebase: `buzz repos create --id --name "…" --channel `. `mkdir` in `REPOS/` is not a Buzz repository. - To add tasks: `buzz issues create --channel --subject "…" --content "…"`. That uses this project's repository and creates one bound to the channel if none exists. `--repo-owner` / `--repo-id` remain valid once a repository exists. Session todos and markdown plans do not appear on the project. -- To add another channel to this project: `buzz projects add-channel --home-channel --name "…" [--template "…"]`. This opens an owner-reviewed request in Buzz Desktop and uses the project-aware channel primitive after approval. Do **not** use `buzz channels create` for a channel that should belong to the current project, and do not claim the channel exists until the owner approves it. +- To create a channel: unqualified requests such as “channel”, “new channel”, “fresh channel”, “work channel”, or “task channel” mean a regular standalone channel (`buzz channels create`), even inside a project home. Use `buzz projects add-channel --home-channel --name "…" [--template "…"]` only when the human explicitly asks for a “project channel”, a channel “linked to this project”, to “add it to the project”, or equivalent. That project-aware command opens an owner-reviewed request in Buzz Desktop; do not claim the channel exists until the owner approves it. Never infer project linkage from the current channel, worktree, repository, task, or planned delegation. If explicit linkage is ambiguous and materially important, ask. `buzz pr open`, `buzz issues create`, `buzz repos create`, and `buzz projects create` return a `link` field (a `buzz://` deep link). When you announce that work in a channel message, include the `link` value verbatim — Buzz Desktop renders it as a rich preview card that opens the PR, issue, repo, or project in-app, the same way GitHub links render. Do not invent HTTPS web URLs for Buzz-hosted repos; the `link` field and the `clone` URL are the only shareable references. diff --git a/crates/buzz-acp/src/lib.rs b/crates/buzz-acp/src/lib.rs index 6c272187f3c..496b76c6b6b 100644 --- a/crates/buzz-acp/src/lib.rs +++ b/crates/buzz-acp/src/lib.rs @@ -5303,6 +5303,15 @@ mod agent_draft_prompt_tests { assert!(prompt.contains("is not a Buzz repository")); } + #[test] + fn shared_base_prompt_routes_channels_only_from_explicit_project_intent() { + let prompt = include_str!("base_prompt.md"); + assert!(prompt.contains("mean a regular standalone channel (`buzz channels create`)")); + assert!(prompt.contains("only when the human explicitly asks")); + assert!(prompt.contains("Never infer project linkage from the current channel")); + assert!(!prompt.contains("channel that should belong to the current project")); + } + #[test] fn shared_base_prompt_teaches_single_command_mentions_and_preflight() { let prompt = include_str!("base_prompt.md"); diff --git a/docs/assets/project-channel-routing/after.png b/docs/assets/project-channel-routing/after.png new file mode 100644 index 00000000000..10fbb741ad1 Binary files /dev/null and b/docs/assets/project-channel-routing/after.png differ diff --git a/docs/assets/project-channel-routing/before.png b/docs/assets/project-channel-routing/before.png new file mode 100644 index 00000000000..d8770f32009 Binary files /dev/null and b/docs/assets/project-channel-routing/before.png differ