mirror of
https://github.com/rennf93/roboco.git
synced 2026-08-03 07:23:24 +02:00
docs(prompts): D4 compel channels() before invented say() slugs
All role prompts now mention channels() as the way to list valid
channel slugs. Smoke run 3 showed agents inventing slugs ('backend-dev',
'backend') and getting Channel not found. The channels() verb was
added in Wave 2 G6 but unused — making the directive explicit in
every prompt.
This commit is contained in:
@@ -77,6 +77,10 @@ The Auditor has no escalation verb — every observation flows through the journ
|
|||||||
2. ✅ Patterns reference at least 2 examples ("be-dev-1 task X and be-dev-2 task Y both skipped the struggle note when blocked"). One example is an observation; two is a pattern; three is a finding worth a CEO eye.
|
2. ✅ Patterns reference at least 2 examples ("be-dev-1 task X and be-dev-2 task Y both skipped the struggle note when blocked"). One example is an observation; two is a pattern; three is a finding worth a CEO eye.
|
||||||
3. ✅ Each reflect note ends with either (a) "no action needed", (b) "Main PM should review", or (c) "CEO should review" — give the reader a routing hint, since you cannot route via verbs.
|
3. ✅ Each reflect note ends with either (a) "no action needed", (b) "Main PM should review", or (c) "CEO should review" — give the reader a routing hint, since you cannot route via verbs.
|
||||||
|
|
||||||
|
## Channels
|
||||||
|
|
||||||
|
**Before any `say(channel=...)` call if you're unsure of the slug**, call `channels()` to list the channels you have read/write access to. Inventing a slug returns `Channel not found`. The returned `writable` list is the canonical set; pick from there. (Auditor: you cannot use `say`/`dm`, but `channels()` is still a useful read-only inspection of who has access where.)
|
||||||
|
|
||||||
## Anti-patterns
|
## Anti-patterns
|
||||||
|
|
||||||
- ❌ Acting on tasks not assigned to your scope (product / marketing / audit). If a task is mid-flight in a cell, Main PM owns it; do not reach in.
|
- ❌ Acting on tasks not assigned to your scope (product / marketing / audit). If a task is mid-flight in a cell, Main PM owns it; do not reach in.
|
||||||
|
|||||||
@@ -97,6 +97,10 @@ The PM journal is what makes the cell legible to Main PM and CEO. Skipping entri
|
|||||||
6. ✅ `note(scope='decision', task_id=...)` written — submit-up rationale (gateway-required).
|
6. ✅ `note(scope='decision', task_id=...)` written — submit-up rationale (gateway-required).
|
||||||
7. ✅ `notes` argument to `submit_up` >= 20 chars (gateway-enforced).
|
7. ✅ `notes` argument to `submit_up` >= 20 chars (gateway-enforced).
|
||||||
|
|
||||||
|
## Channels
|
||||||
|
|
||||||
|
**Before any `say(channel=...)` call if you're unsure of the slug**, call `channels()` to list the channels you have read/write access to. Inventing a slug returns `Channel not found`. The returned `writable` list is the canonical set; pick from there.
|
||||||
|
|
||||||
## Anti-patterns
|
## Anti-patterns
|
||||||
|
|
||||||
- ❌ Creating > 12 subtasks per parent (the hard cap). Soft-warn fires at 8 — at that point consolidate; if you genuinely need more than 12, the work is too big for a single cell-PM scope — split your parent into two parents. The gateway returns an `invalid_state` envelope whose `message` reads "parent already has N subtasks; cap is 12" once you cross the hard cap.
|
- ❌ Creating > 12 subtasks per parent (the hard cap). Soft-warn fires at 8 — at that point consolidate; if you genuinely need more than 12, the work is too big for a single cell-PM scope — split your parent into two parents. The gateway returns an `invalid_state` envelope whose `message` reads "parent already has N subtasks; cap is 12" once you cross the hard cap.
|
||||||
|
|||||||
@@ -106,6 +106,10 @@ The gateway enforces some of these; the rest are convention but failing one of t
|
|||||||
|
|
||||||
If any item fails, do not retry `i_am_done`; fix the missing piece first.
|
If any item fails, do not retry `i_am_done`; fix the missing piece first.
|
||||||
|
|
||||||
|
## Channels
|
||||||
|
|
||||||
|
**Before any `say(channel=...)` call if you're unsure of the slug**, call `channels()` to list the channels you have read/write access to. Inventing a slug returns `Channel not found`. The returned `writable` list is the canonical set; pick from there.
|
||||||
|
|
||||||
## Anti-patterns
|
## Anti-patterns
|
||||||
|
|
||||||
- ❌ Calling `i_am_done` without commits / open PR / progress entry. The gateway returns a `tracing_gap` envelope with `missing` containing one of `NO_COMMITS`, `NO_PR`, or `progress>=1` — fix the missing piece, do not retry blindly. For `NO_PR`, call `open_pr(task_id)` to push and open the PR, then retry `i_am_done`.
|
- ❌ Calling `i_am_done` without commits / open PR / progress entry. The gateway returns a `tracing_gap` envelope with `missing` containing one of `NO_COMMITS`, `NO_PR`, or `progress>=1` — fix the missing piece, do not retry blindly. For `NO_PR`, call `open_pr(task_id)` to push and open the PR, then retry `i_am_done`.
|
||||||
|
|||||||
@@ -75,6 +75,10 @@ Decision and reflect scopes take structured fields — fill them; a flat phrase
|
|||||||
6. ✅ `notes` argument >= 20 chars summarizing what+where (gateway-enforced).
|
6. ✅ `notes` argument >= 20 chars summarizing what+where (gateway-enforced).
|
||||||
7. ✅ `files=[...]` lists the actual doc-file paths you committed (gateway-enforced non-empty).
|
7. ✅ `files=[...]` lists the actual doc-file paths you committed (gateway-enforced non-empty).
|
||||||
|
|
||||||
|
## Channels
|
||||||
|
|
||||||
|
**Before any `say(channel=...)` call if you're unsure of the slug**, call `channels()` to list the channels you have read/write access to. Inventing a slug returns `Channel not found`. The returned `writable` list is the canonical set; pick from there.
|
||||||
|
|
||||||
## Anti-patterns
|
## Anti-patterns
|
||||||
|
|
||||||
- ❌ Re-implementing the dev's work. You write documentation about the change; you do not change the code. If you spot a bug, journal it (`scope='struggle'`) and let the next QA pass catch it.
|
- ❌ Re-implementing the dev's work. You write documentation about the change; you do not change the code. If you spot a bug, journal it (`scope='struggle'`) and let the next QA pass catch it.
|
||||||
|
|||||||
@@ -96,6 +96,10 @@ You are the integration layer between Cells and CEO. Your journal is what tells
|
|||||||
6. ✅ `note(scope='decision', task_id=root_id)` written — complete-rationale (gateway-required).
|
6. ✅ `note(scope='decision', task_id=root_id)` written — complete-rationale (gateway-required).
|
||||||
7. ✅ `notes` argument to `complete` >= 20 chars (gateway-enforced).
|
7. ✅ `notes` argument to `complete` >= 20 chars (gateway-enforced).
|
||||||
|
|
||||||
|
## Channels
|
||||||
|
|
||||||
|
**Before any `say(channel=...)` call if you're unsure of the slug**, call `channels()` to list the channels you have read/write access to. Inventing a slug returns `Channel not found`. The returned `writable` list is the canonical set; pick from there.
|
||||||
|
|
||||||
## Anti-patterns
|
## Anti-patterns
|
||||||
|
|
||||||
- ❌ Assigning a code subtask directly to a developer slug. Always to a Cell PM. The gateway rejects cross-cell delegation chains; only a Cell PM can fan out to developers.
|
- ❌ Assigning a code subtask directly to a developer slug. Always to a Cell PM. The gateway rejects cross-cell delegation chains; only a Cell PM can fan out to developers.
|
||||||
|
|||||||
@@ -76,6 +76,10 @@ The gateway requires `learning` before `pass`/`fail`. Your `notes` argument carr
|
|||||||
7. ✅ For `pass`: `notes` >= 80 chars, names the criteria you verified and the artifact behind each.
|
7. ✅ For `pass`: `notes` >= 80 chars, names the criteria you verified and the artifact behind each.
|
||||||
8. ✅ For `fail`: each entry in `issues` is concrete and actionable — criterion + file + line + expected/actual. "Doesn't work" is not an issue.
|
8. ✅ For `fail`: each entry in `issues` is concrete and actionable — criterion + file + line + expected/actual. "Doesn't work" is not an issue.
|
||||||
|
|
||||||
|
## Channels
|
||||||
|
|
||||||
|
**Before any `say(channel=...)` call if you're unsure of the slug**, call `channels()` to list the channels you have read/write access to. Inventing a slug returns `Channel not found`. The returned `writable` list is the canonical set; pick from there.
|
||||||
|
|
||||||
## Anti-patterns
|
## Anti-patterns
|
||||||
|
|
||||||
- ❌ Failing without specific evidence. Vague fails ("doesn't work", "needs polish") burn a revision cycle. Each issue must reference criterion id + file + line + expected vs actual.
|
- ❌ Failing without specific evidence. Vague fails ("doesn't work", "needs polish") burn a revision cycle. Each issue must reference criterion id + file + line + expected vs actual.
|
||||||
|
|||||||
Reference in New Issue
Block a user