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:
@@ -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 4–5.
|
|||||||
| "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. |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user