Skip to main content
Verification is independent by construction. Two reviewers with different context packets gate completion, and neither is the worker who produced the artifact. Inspect a run’s reviews:
voss review is read-only — it reads persisted .review.json sidecars and constructs no live providers.

Reviewer-A — authors the bar

Reviewer-A derives the verification bar from the original human idea — not the EM’s acceptance criteria, tickets, or any prior review. It runs with a fresh memory per card so there is no cross-card bleed.
  • For code cards it authors a test, runs it via shell_run, and the exit code is the verdict.
  • For AI cards it authors a PASS/FAIL rubric, then judges against it.
Worker agents cannot author their own final gate.

Reviewer-B — judges narrative-blind

Reviewer-B judges the artifact, diff, and Reviewer-A’s verification summary using only the card’s own attributes — original idea, acceptance criteria, artifact, diff, and A’s summary. It sees no EM plan, tickets, or A’s reasoning process, so it cannot be talked into a pass by the orchestrator’s narrative. It runs at two tiers: fast at intermediate gates, strong at the gate to Done. If Reviewer-A’s verification has diverged from what the original idea requires, Reviewer-B can return block to abort the lineage.

The verdict

Both reviewers emit a frozen ReviewerVerdict:

Persisted artifacts

Each card writes a <node_id>.review.json sidecar (mode 0o600) next to its session-tree node, under .voss/sessions/<root_id>/:
These sidecars are the evidence the board gates Done on, and the input to voss review.