AdversarialJudge rationale carries the skeptics' reasons (kxqep)
AdversarialJudge already asked each skeptic for {"refuted": true|false, "reason": "..."}; the
winning candidate's verdict.rationale now names the refuting skeptics' reasons instead of just
the refuted/total count, e.g. refuted 2/3: (1) missed the stated edge case; (2) contradicts the constraint in the prompt. A surviving candidate's rationale is unchanged.
Regression guard (stub CompletionFn, no live provider): npm run selftest:adversarial-reason.
Known Limitations and Deferred Work: at most 3 reasons are shown per rationale, and each reason
is capped to 300 characters (newlines stripped) before it is folded in — a skeptic with more than
3 co-refuting peers, or a very long reason, is summarized rather than shown in full. The Verdict
type (src/core/Judge.ts) has no raw/details field, so the full per-skeptic vote list is not
persisted anywhere beyond the capped rationale string.
Judge phase is fail-bounded (T551)
Every judge (ConsensusJudge, LlmJudge, AdversarialJudge, DiffJudge, BehaviorJudge, SwarmMergeJudge/LaneMergeJudge) is raced against CYBERINEJUDGETIMEOUTMS (default 60000ms) in...
Auto-evolve: Cyberine authors and implements its own task (mine -> implement -> gate)
The self-improvement loop with NO human-written task: a read-only worker surveys the repo and AUTHORS one small improvement spec (strict TASK/FILES/WHY/SPEC/ACCEPTANCE format, hard-bounded: 1-3...