From 9310d665084c2ee021abd9903f25b9f538ca3d5a Mon Sep 17 00:00:00 2001 From: Renn F Date: Sun, 3 May 2026 18:04:26 +0200 Subject: [PATCH] chore(post-audit): document notify verb + remove # type: ignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Audit followups before pushing the gateway-restoration batch: - Add notify() row to cell_pm.md, main_pm.md, board.md verb tables. Manifests + routes + MCP + tests all wired in 3a2498a but agents had no prompt-level cue. - Replace # type: ignore[attr-defined] in test_pm_respawn_reset.py with cast('Any', orch) — matches project's no-suppress standard. --- agents/prompts/roles/board.md | 1 + agents/prompts/roles/cell_pm.md | 1 + agents/prompts/roles/main_pm.md | 1 + tests/unit/runtime/test_pm_respawn_reset.py | 3 ++- 4 files changed, 5 insertions(+), 1 deletion(-) diff --git a/agents/prompts/roles/board.md b/agents/prompts/roles/board.md index 0424938c..7cd896f4 100644 --- a/agents/prompts/roles/board.md +++ b/agents/prompts/roles/board.md @@ -27,6 +27,7 @@ If you find yourself reaching for `Bash git`, `Edit`, or any execution tool, sto | `note(text, scope?, task_id?)` | Journal. Required: `scope='decision'` before `escalate_to_ceo`. Auditor uses `scope='reflect'` for observations. | None. | | `evidence(task_id)` | Inspect a task's PR + commits + diff. | None. | | `say(channel, text)` / `dm(recipient, text)` | Channel post / DM. **Auditor cannot use these — silent observer.** Channel slug without `#`. | None for PO/HoM; denied for Auditor. | +| `notify(target, text, priority?)` | Send a formal ack-required notification to an agent (`be-dev-1`, `ceo`, etc.). `priority` is one of `normal`/`high`/`urgent` (default `normal`). **Auditor cannot use this — silent observer.** | None for PO/HoM; denied for Auditor. | | `i_am_idle()` | Exit cleanly. | None. | ## Workflow diff --git a/agents/prompts/roles/cell_pm.md b/agents/prompts/roles/cell_pm.md index 0426d7d6..615f84d8 100644 --- a/agents/prompts/roles/cell_pm.md +++ b/agents/prompts/roles/cell_pm.md @@ -31,6 +31,7 @@ You merge what your developers submit (leaf PRs into your cell branch via `compl | `resume(task_id)` | Resume a paused task. Transitions paused → in_progress. | Task assigned to you and in paused state. | | `note(text, scope?, task_id?)` | Journal. Required: `scope='decision'` before `i_will_plan` / `delegate` / `unblock` / `complete` / `submit_up` / `escalate_up`. | None. | | `say(channel, text)` / `dm(recipient, text)` | Channel post / DM. Channel slug without `#` (e.g. `"backend-cell"`). | None. | +| `notify(target, text, priority?)` | Send a formal ack-required notification to an agent (`be-dev-1`, `ceo`, etc.). `priority` is one of `normal`/`high`/`urgent` (default `normal`). | None. | | `evidence(task_id)` | Inspect a task's PR + commits + diff. | None. | | `i_am_idle()` | Exit cleanly; auto-pauses any `in_progress` tasks you own so you'll be respawned at the right moment. | None. | diff --git a/agents/prompts/roles/main_pm.md b/agents/prompts/roles/main_pm.md index 0ff8350e..b2af73d3 100644 --- a/agents/prompts/roles/main_pm.md +++ b/agents/prompts/roles/main_pm.md @@ -31,6 +31,7 @@ You merge what your Cell PMs submit (cell PRs into your root branch via `complet | `resume(task_id)` | Resume a paused task. Transitions paused → in_progress. | Task assigned to you and in paused state. | | `note(text, scope?, task_id?)` | Journal. Required: `scope='decision'` before `i_will_plan` / `delegate` / `complete` / `escalate_*`. | None. | | `say(channel, text)` / `dm(recipient, text)` | Channel post / DM. Channel slug without `#` (e.g. `"main-pm-board"`). | None. | +| `notify(target, text, priority?)` | Send a formal ack-required notification to an agent (`be-dev-1`, `ceo`, etc.). `priority` is one of `normal`/`high`/`urgent` (default `normal`). | None. | | `evidence(task_id)` | Inspect a task's PR + commits + diff. | None. | | `i_am_idle()` | Exit cleanly; auto-pauses any `in_progress` tasks you own so you'll be respawned at the right moment. | None. | diff --git a/tests/unit/runtime/test_pm_respawn_reset.py b/tests/unit/runtime/test_pm_respawn_reset.py index 29af8b34..96a5f3b7 100644 --- a/tests/unit/runtime/test_pm_respawn_reset.py +++ b/tests/unit/runtime/test_pm_respawn_reset.py @@ -23,6 +23,7 @@ instead of incrementing. from __future__ import annotations from datetime import UTC, datetime +from typing import Any, cast from unittest.mock import AsyncMock, patch from uuid import uuid4 @@ -34,7 +35,7 @@ from roboco.seeds.initial_data import AGENT_UUIDS def _new_orchestrator() -> AgentOrchestrator: """Bypass __init__ so tests don't need a full DI graph.""" orch = AgentOrchestrator.__new__(AgentOrchestrator) - orch._pm_respawn_tracker = {} # type: ignore[attr-defined] + cast("Any", orch)._pm_respawn_tracker = {} return orch