feat(skill): pedigree ревью, idle-guard и запрет поиска чужого хоста

- Зачем:
  - реальный инцидент 2026-07-03: Codex-координатор искал механизм Claude
    вместо своих субагентов, пропустил ревью и записал выдуманную причину;
    там же трижды воспроизведён недоставленный отчёт живого ревьюера.
- Что:
  - Step 7: строка **Reviewer:** (pedigree) во всех трёх итоговых шаблонах;
    в Rules — запрет молча пропускать/подменять ревью.
  - Step 6: idle-уведомление больше не «авторитетный сигнал смерти» —
    unreachable только после повторного idle-without-report вслед за nudge;
    указатель из Step 3 (действует и на Round 1).
  - Step 2: спавн только на исполняющем хосте, запрет щупать чужой механизм;
    две новые строки в Red Flags.
- Проверка:
  - adversarial team review порта: APPROVED (вердикт тиммейта-ревьюера,
    Claude, Agent Teams), NIT-правки формулировок применены.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-03 18:06:45 +03:00
co-authored by Claude Fable 5
parent 8a0e5b8879
commit 2f2f7446a5
+30 -3
View File
@@ -118,6 +118,11 @@ pass it the briefing assembled from `reviewer-prompt.md`.
as the host can spawn a subagent and (optionally) route follow-up as the host can spawn a subagent and (optionally) route follow-up
messages to it. messages to it.
Spawn on the host that is executing this skill. Do not probe for or
shell out to **another** host's mechanism (e.g. looking for the Claude
Code CLI or Agent Teams env vars from inside Codex) — "the other host's
mechanism is unavailable" is never a reason to skip the review.
The reviewer is a full agent session — it explores the repo, runs git The reviewer is a full agent session — it explores the repo, runs git
commands, and reads files on its own. **Do not pre-collect diffs or file commands, and reads files on its own. **Do not pre-collect diffs or file
lists for it.** Pass mode-specific context only: lists for it.** Pass mode-specific context only:
@@ -206,6 +211,11 @@ Then check the verdict line:
| Unclear / missing | Send a message back asking for a clear verdict line | | Unclear / missing | Send a message back asking for a clear verdict line |
| Round 5 reached | Step 7 with the "Max rounds reached" terminal state | | Round 5 reached | Step 7 with the "Max rounds reached" terminal state |
If instead of a response the host delivers an idle notification with no
report attached, apply the idle guard from Step 6 ("Detecting a dead
reviewer"): request the report once before concluding the reviewer is
gone. This applies to Round 1 as much as to re-review rounds.
--- ---
## Step 4: Evaluate findings (do NOT apply yet) ## Step 4: Evaluate findings (do NOT apply yet)
@@ -436,9 +446,13 @@ one of the following is true:
- The host surfaces an explicit shutdown / "teammate exited" / "no such - The host surfaces an explicit shutdown / "teammate exited" / "no such
teammate" event. On Claude Code + Agent Teams this includes the teammate" event. On Claude Code + Agent Teams this includes the
documented case where a resumed session no longer has the previous documented case where a resumed session no longer has the previous
teammates alive, and idle notifications (`TeammateIdle` / teammates alive.
message-delivery events) — when present, these are the authoritative - An idle-without-report **repeats after a nudge**: the reviewer went
liveness signal. idle with no report delivered, you requested the report once, and the
answer was another idle-without-report. (A single idle notification
alone is not a death signal — a live reviewer sometimes goes idle
with its report undelivered on the first attempt, and the nudge
retrieves it; observed repeatedly in practice.)
- Send fails outright (error response, not a success ack). - Send fails outright (error response, not a success ack).
- The reply is overdue (no `TeammateIdle` / message-delivery notification - The reply is overdue (no `TeammateIdle` / message-delivery notification
in a reasonable window) **and** an operator is present to confirm — in a reasonable window) **and** an operator is present to confirm —
@@ -505,11 +519,16 @@ This is a soft signal, not a hard gate.
## Step 7: Final result ## Step 7: Final result
The **Reviewer:** line reports the actual pedigree — what performed the
review (e.g. `Agent Teams teammate, Claude Opus` or `Codex native
subagent, GPT`), not what was planned.
**Approved:** **Approved:**
``` ```
## Team Review — Summary (mode: <mode>) ## Team Review — Summary (mode: <mode>)
**Status:** Approved after N round(s) **Status:** Approved after N round(s)
**Reviewer:** <mechanism, agent type, model line>
[Final review verbatim] [Final review verbatim]
@@ -523,6 +542,7 @@ chose to conclude, or the run is headless):
## Team Review — Summary (mode: <mode>) ## Team Review — Summary (mode: <mode>)
**Status:** NOT VERIFIED — fixes applied, reviewer did not re-verify **Status:** NOT VERIFIED — fixes applied, reviewer did not re-verify
**Reviewer:** <mechanism, agent type, model line>
**Round N findings:** **Round N findings:**
[Verbatim findings from the last reviewer round] [Verbatim findings from the last reviewer round]
@@ -540,6 +560,7 @@ by the reviewer. Manual review of the fixes is required before merging.**
## Team Review — Summary (mode: <mode>) ## Team Review — Summary (mode: <mode>)
**Status:** Maximum reached (5 rounds) — not fully approved **Status:** Maximum reached (5 rounds) — not fully approved
**Reviewer:** <mechanism, agent type, model line>
**Remaining findings:** **Remaining findings:**
[Unresolved issues] [Unresolved issues]
@@ -574,6 +595,10 @@ Do NOT delete plan files that existed before the review.
- Avoid creating auxiliary files (memory files, state files, logs, temporary - Avoid creating auxiliary files (memory files, state files, logs, temporary
markdown) — prefer working within the conversation context markdown) — prefer working within the conversation context
- If a fix contradicts user requirements — skip it and explain why - If a fix contradicts user requirements — skip it and explain why
- Never skip or silently substitute the review. Declaring a spawn or
continuation mechanism unavailable without having attempted it is a
process violation — the **Reviewer:** line in the summary reports
what actually ran
- For re-review, prefer continuation (cheap). Fresh-spawn is the - For re-review, prefer continuation (cheap). Fresh-spawn is the
expensive path — always confirm with the operator before doing it. expensive path — always confirm with the operator before doing it.
In headless runs without operator access, conclude unverified rather In headless runs without operator access, conclude unverified rather
@@ -600,6 +625,8 @@ the skill. Stop, re-read Steps 45.
| "Just paraphrase the findings to save space" | Verbatim. Always verbatim. Paraphrase loses signal. | | "Just paraphrase the findings to save space" | Verbatim. Always verbatim. Paraphrase loses signal. |
| "Severity hasn't dropped in 3 rounds, but I'll push through" | Pause. Surface to operator. Something is structurally off. | | "Severity hasn't dropped in 3 rounds, but I'll push through" | Pause. Surface to operator. Something is structurally off. |
| "Continuation isn't available — let me just spawn a fresh reviewer" | Ask the operator first. Fresh-spawn is expensive; the operator may prefer to conclude unverified. | | "Continuation isn't available — let me just spawn a fresh reviewer" | Ask the operator first. Fresh-spawn is expensive; the operator may prefer to conclude unverified. |
| "This host can't run the skill — skip the review and note why" | Use the host's own subagent mechanism (Step 2). Attempt, then report what actually ran in the **Reviewer:** line. |
| "The reviewer went idle — it must be dead" | Idle ≠ dead. Request the report once (Step 6 idle guard); reports sometimes fail to deliver on the first attempt. |
--- ---