voyage/lib/validators
Kjell Tore Guttormsen cb7c13b408
feat(review): the security engine chosen and Claude Security converted (E 3.1)
lib/review/security-engine.mjs (decisions 175, 196, 219):
- choose: Claude Security when available and base..head has committed
  changes; else /security-review when origin/HEAD resolves and
  origin/HEAD...HEAD is non-empty; else no engine (no-engine, no-origin,
  empty-diff), which is "not measured", never 0. A git failure or bad
  usage is exit 2, never a reason.
- convert: reads the newest CLAUDE-SECURITY-<ts>/ report whose stamp is a
  changes scan of exactly base..head; confidence high becomes engine
  findings through toReviewerPayload, the rest go to below_threshold and
  never into findings. An unverified scan, missing researcher counts,
  fewer researchers returned than dispatched, an empty diff or scope, or
  a malformed record is exit 2.
- NO_ENGINE_REVIEWER: with no engine chosen the expected reviewer
  security-engine never reports, so the verdict gate exits 2.

ENGINES gains claude-security (its own reviewer and brief_ref, the
engines' key) with a per-engine label for the written action; it is a
security engine in isSecurityFinding, RAN_ENGINES, the coordinator
contract (out-of-scope and brief-conflict rules) and the coordinator
prose; engine:below-threshold is an unverified reason fed like
engineOutOfScope. Pins of the changed coordinator prose follow.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 13:29:59 +01:00
..
architecture-discovery.mjs fix: round 7 of the release review of 6.3.0, for 6.3.1 2026-10-11 09:11:57 +02:00
brief-review-stamp.mjs fix: round 7 of the release review of 6.3.0, for 6.3.1 2026-10-11 09:11:57 +02:00
brief-validator.mjs feat(brief): optional threat model in the brief (decision 164, 218) 2026-11-08 08:47:51 +01:00
intent-approval.mjs feat(brief): optional threat model in the brief (decision 164, 218) 2026-11-08 08:47:51 +01:00
plan-gate.mjs docs(gate): decision 221 stated where the plan loop reads it 2026-11-08 12:23:25 +01:00
plan-validator.mjs chore(cleanup): R-b R3 — profiles, phase signals and the effort dialog removed, one fixed path per command 2026-11-07 21:12:57 +01:00
progress-validator.mjs fix: round 7 of the release review of 6.3.0, for 6.3.1 2026-10-11 09:11:57 +02:00
query-privacy-gate.mjs chore(cleanup): R-b R2 — STORM loop, cap hook and the --engine research choice removed 2026-11-07 20:32:38 +01:00
research-validator.mjs fix: round 7 of the release review of 6.3.0, for 6.3.1 2026-10-11 09:11:57 +02:00
review-validator.mjs feat(review): the security engine chosen and Claude Security converted (E 3.1) 2026-11-08 13:29:59 +01:00
session-state-validator.mjs fix: round 7 of the release review of 6.3.0, for 6.3.1 2026-10-11 09:11:57 +02:00