Run / Adversarial review

R05 / Run

Adversarial review

How Guild Stack challenges AI work before trusting it: independent review packets, bounded rounds, recorded verdicts, and no silent weak sign-offs.
First move
Inspect verdict strength and findings
Expected receipt
review_result.v1
Last verified
Jul 5, 2026

Page evidence and guidance

Read as StartWhat the reviewer checks and what happens when it finds a problem. SteerReviewer independence, packets, verdicts, retries, and stop conditions. ExtendBroker contracts, host pairing, liveness, schemas, and inconclusive states.

Use this page when you need to make a Guild Stack result harder to trust too early. You can require an independent reviewer, inspect the packet and result, see whether the review was strong, weak, or skipped, and prove that a gate passed because the current artifact matched the reviewed artifact.

Try it: /guild:guild "<brief>" --review=cross - on the shipped strong path, Claude-authored work is reviewed by Codex at the broker gates. Other author/reviewer pairings record weak or skipped review until their result adapters ship.

Operational mapChallenge the bound artifact, then route the verdict.
  1. Packetscope + checksum
  2. Challengeindependent review
  3. Verdictfindings + posture
  4. Reworkbounded fix round
  5. Verifycurrent artifact
Packet -> result -> fix -> gate. The gate passes only when the result matches the current artifact and no blocking findings remain.

Packet to gate

The review broker is a gate component, not a separate phase. It takes the current artifact, packages it into a review packet, receives a structured result, and either passes the gate or sends the artifact back for rework.

StepArtifactAudit asks
Packet.guild/runs/<run-id>/review/<gate>/packet-<round>.mdWhat artifact, scope, round, and SHA-256 did the reviewer receive?
Result.guild/runs/<run-id>/review/<gate>/result-<round>.jsonDid the result parse, match the packet, satisfy the verdict, and carry no blocking findings?
FixUpdated spec, plan, handoff, quality report, or ops recordWere blockers fixed in-scope, and did out-of-scope findings become followups instead of hidden blockers?
Gate.guild/runs/<run-id>/review/<gate>/trail.md plus the gate outcomeWas this a strong, weak, skipped, or human force-pass path?

Strong, weak, and skipped review

The headline rule: the reviewer should not share a brain with the producer. Cross-host review is the strongest posture; same-host review and skipped review are recorded as weaker paths, never upgraded silently.

Review postureWhat happensRecorded signalGate strength
Cross-host reviewer with a result adapterA different selectable host family reviews the packet.independence: strongStrong. This is the target adversarial posture.
Same-host fresh-context reviewerA different host is unavailable, but policy allows a local fallback.independence: weak or degraded-local trail entryWeaker. The gate may continue only as a recorded fallback.
Skipped reviewReview was not required, or no legal reviewer exists for the selected policy.status: skipped with reasonWeakest. It is an explicit absence of independent review, not a satisfied review_result.v1.
Human force-passThe cap is exceeded or the operator accepts remaining risk.Named human and rationaleHuman decision. It does not pretend the reviewer was satisfied.

The same model family never satisfies cross review. If the proposed reviewer belongs to the producer’s family, selection degrades to the recorded weak path or skips with a reason. Today Codex is the shipped cross-host reviewer family through codex-cli or the Codex plugin adapter when available. Pi and Antigravity can run Guild Stack tasks through standalone package targets, but they are detect-only for review selection until their result adapters ship.

When review fires

The broker is policy-gated. It fires when any of these hold:

  • the work is assessed risk >= high,
  • --review=cross is set, or review: cross is set in .guild/settings.json,
  • --rigor=deep implies cross review, or
  • project config requires it.

Otherwise the broker records status: skipped because gate-level independent review was not required. Local host-side review and rigor loops can still run, but they do not earn a cross-host independence stamp.

The reviewer is strictly read-only. It sees the review packet and the artifact under review, not ambient project context, not permission to edit files, not destructive commands, and not secrets.

Degradation is recorded, never silent

A skipped or weakened review leaves a trail entry with its reason. A later audit can recover exactly which artifacts got strong review, which got weak review, and why.

The gates

Each gate pairs a producer artifact with a reviewer focus:

GateReviewsReviewer looks for
G-initInit artifact / wiki diffMissing context, unsupported facts, stale knowledge.
G-specThe specMissing criteria, ambiguity, weak assumptions, untestable claims.
G-planThe lane planLane-contract defects, unhandled dependencies, vague done criteria.
G-laneEach handoff receiptMissing evidence, incomplete scope, unresolved risk.
G-qualityThe quality reportEnd-to-end gaps, release risk, weak coverage.
G-operationsThe ops record / runbookBlast radius, rollback, observability gaps.
G-diagnoseA /guild:fix diagnosisWeak self-fix plan, unsafe edit proposal, missing evidence.

G-spec fires inside Ideation, G-plan inside Planning, G-lane per lane during Development, and G-quality / G-operations inside their phases. Every load-bearing artifact is challenged at its own boundary. For the command-side view, see the Command Reference review section; this page owns the mechanism.

A review round

Each round is a small, auditable exchange written to disk:

  1. The producer finishes an artifact; the broker issues a review packet stating exactly what is under review, the scope, and the round number.
  2. The reviewer returns a structured result: satisfied or not, plus any blocking findings.
  3. The gate passes only when the result parses, the packet_id matches the issued packet, the reviewed SHA-256 matches the current artifact, the verdict is satisfied, and no blocking findings remain.
  4. Anything less sends the artifact back for rework and a new round.
ArtifactPath
Review packet.guild/runs/<run-id>/review/<gate>/packet-<round>.md
Review result.guild/runs/<run-id>/review/<gate>/result-<round>.json
Review trail.guild/runs/<run-id>/review/<gate>/trail.md

A review of a stale artifact is detectable. If the artifact changed mid-review, the round restarts.

Rounds are capped at 5 by default. The codex_cap settings key or --codex-cap=N can set the cap, clamped from 1 to 10. When the cap is exceeded, Guild Stack surfaces three choices: force-pass as a human decision with name and rationale, extend-cap, or rework. Out-of-scope findings raised after round 1 become followups unless you expand scope.

Two loop families, two sentinels

Guild Stack runs two bounded loop families, and they never share a termination signal:

Loop familyWhere it runsTermination sentinelDefault cap
Clarify / plan-review / implement loops (L1-L4)Inside Ideation, Planning, Development under --rigor=deep## NO MORE QUESTIONS16 rounds
Cross-host adversarial gateThe review broker at each gatereview_result.v1.verdict == "satisfied"5 rounds

Sentinels are parsed structurally, never as loose prose. L-loop sentinels must be standalone lines, appearing exactly once, with nothing unresolved after them. The broker reads the structured review_result.v1 envelope; the textual ## SATISFIED marker is only the legacy Codex-adapter sign-off that gets normalized into that verdict.

A fake sentinel buried in artifact text is ignored. A malformed termination is recorded and costs an extra round. Two consecutive malformed terminations escalate to you; the loop never silently passes.

When the other AI is not available

Cross-host review degrades observably instead of pretending it happened. When review is required but no different-family reviewer is selectable, the broker uses the recorded weak same-host path when policy allows it and still applies the same five gate-pass conditions.

If review is not required, or no legal reviewer exists for the selected policy, the broker records a skip with a reason. A streak of Codex unavailability is recorded in .guild/codex-skip-streak.json, and the codex_skip_enforcement settings key decides what happens next:

SettingBehavior
warnDefault. Surface the streak at every gate without stopping.
blockHard-refuse gate dispatch until cross-host review is restored.

See also