voyage/agents
Kjell Tore Guttormsen 20cdc22803 fix(review): an anonymous invalid payload is unattributable, not a reviewer named "unnamed reviewer"
Follow-up defect in the reviewer accounting added by e2aec01, found by review
and confirmed by probe before fixing.

validateFindings only WARNS on a missing `reviewer` field, so a payload can
fail schema while carrying no name. ingest then records `reviewer: null`, and
runContract turned that null into the literal reviewer name "unnamed reviewer".

MEASURED before the fix:
  runContract([{findings:[{file:'x.mjs',line:1,rule_key:'NOPE',severity:'MAJOR'}]}],
              {expectedReviewers:['code-correctness-reviewer']})
  -> missing_reviewers = ["unnamed reviewer", "code-correctness-reviewer"]
One failure, two entries, one of them an agent nobody launched. The
`reported.delete(s.reviewer)` line was also inert for that case, since a null
name was never in the set to begin with.

Fix: skipped payloads are split by whether they carry a name. Named ones go to
missing_reviewers as before; anonymous ones increment the new
`unattributable_payloads` count, which forbids ALLOW on its own - so stripping
a reviewer name from a payload cannot restore ALLOW, and the floor does not
depend on the caller passing expectedReviewers. `allow_blocked_by` reports the
two facts separately: `missing-reviewer:<name>` and `unattributable-payload (n)`.

The old behaviour never produced a false ALLOW - it failed in the safe
direction - but it named a reviewer that did not exist, which is the kind of
output an operator would chase.

Iron Law: two failing tests first (double entry; anonymous-payload-alone must
forbid ALLOW), then the fix.

Also verified in this pass, by temporarily adding a fake reason to
UNVERIFIED_REASONS: the prose-vocabulary pin does go red when a reason is
declared in the lib but missing from agents/review-coordinator.md. A pin that
cannot fail is not a pin.

Suite 1034 (1032/0/2) -> 1036 (1034/0/2), 0 failures.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-01 22:54:31 +02:00
..
architecture-mapper.md refactor(agents): relocate example blocks to body (retrieval agents) 2026-06-29 10:16:48 +02:00
brief-conformance-reviewer.md chore(voyage): pin all sub-agents to Opus permanently (operator request) 2026-05-13 20:20:08 +02:00
brief-reviewer.md refactor(agents): relocate example blocks to body (reviewer/planning agents) 2026-06-29 10:19:24 +02:00
code-correctness-reviewer.md chore(voyage): pin all sub-agents to Opus permanently (operator request) 2026-05-13 20:20:08 +02:00
community-researcher.md refactor(agents): relocate example blocks to body (researchers + gemini-bridge) 2026-06-29 10:14:35 +02:00
contrarian-researcher.md refactor(agents): relocate example blocks to body (researchers + gemini-bridge) 2026-06-29 10:14:35 +02:00
convention-scanner.md refactor(agents): relocate example blocks to body (retrieval agents) 2026-06-29 10:16:48 +02:00
dependency-tracer.md refactor(agents): relocate example blocks to body (retrieval agents) 2026-06-29 10:16:48 +02:00
docs-researcher.md refactor(agents): relocate example blocks to body (researchers + gemini-bridge) 2026-06-29 10:14:35 +02:00
gemini-bridge.md refactor(agents): relocate example blocks to body (researchers + gemini-bridge) 2026-06-29 10:14:35 +02:00
git-historian.md refactor(agents): relocate example blocks to body (retrieval agents) 2026-06-29 10:16:48 +02:00
plan-critic.md refactor(agents): relocate example blocks to body (reviewer/planning agents) 2026-06-29 10:19:24 +02:00
planning-orchestrator.md chore(voyage): release v5.6.1 — one-line descriptions for reference/dormant agents (~700 tok trim) 2026-06-24 11:52:59 +02:00
research-orchestrator.md fix(trekresearch): gate Phase 4.5 on VOYAGE_STORM_ENABLED, not effort alone 2026-08-12 22:17:56 +02:00
research-scout.md refactor(agents): relocate example blocks to body (reviewer/planning agents) 2026-06-29 10:19:24 +02:00
review-coordinator.md fix(review): an anonymous invalid payload is unattributable, not a reviewer named "unnamed reviewer" 2026-09-01 22:54:31 +02:00
review-orchestrator.md chore(voyage): release v5.6.1 — one-line descriptions for reference/dormant agents (~700 tok trim) 2026-06-24 11:52:59 +02:00
risk-assessor.md refactor(agents): relocate example blocks to body (reviewer/planning agents) 2026-06-29 10:19:24 +02:00
scope-guardian.md refactor(agents): relocate example blocks to body (reviewer/planning agents) 2026-06-29 10:19:24 +02:00
security-researcher.md refactor(agents): relocate example blocks to body (researchers + gemini-bridge) 2026-06-29 10:14:35 +02:00
session-decomposer.md refactor(agents): relocate example blocks to body (reviewer/planning agents) 2026-06-29 10:19:24 +02:00
synthesis-agent.md chore(voyage): release v5.6.1 — one-line descriptions for reference/dormant agents (~700 tok trim) 2026-06-24 11:52:59 +02:00
task-finder.md refactor(agents): relocate example blocks to body (retrieval agents) 2026-06-29 10:16:48 +02:00
test-strategist.md refactor(agents): relocate example blocks to body (retrieval agents) 2026-06-29 10:16:48 +02:00