Repository navigation
Tags
Tags
feat: OODA self-improvement arena — Stockfish vs @cvs/engine, review,… … retrain, loop Hosts the recursive-improvement harness for the CVS engine (linked as @cvs/engine, file: dep). arena/: players (UCI-at-the-boundary, throw-safe vs chess.js beta.8), match, lightweight Stockfish review, disagreement detection + "play it out" branch harvest, TrainingPosition bridge, and ooda.ts (observe→orient→decide→act with a fixed holdout + plateau stop). First run: holdout top-1 vs Stockfish 13.0% → 26.1% after one retrain round, then plateau-stopped (deterministic engines replay). Run via npm run arena:ooda. Pure-logic arena tests green; arena/out/ gitignored. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
fix: phase-aware quiet-move copy — retire the absolute "nothing impor… …tant changed" A sub-gate quiet move now gets a phase-aware neutral frame instead of the flat, too-absolute "Solid move — nothing important changed": opening → development / central-control framing middlegame → "changes piece activity and defensive relationships" endgame → "pawn races, king activity, rook activity" Still flagged confidence=low_salience_fallback. phaseOf exported from features.ts. 3 new phase tests; 2 existing silence tests updated. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
feat: narrator salience honesty — confidence field + better headline …
…choice
Addresses the export critique's five iterations:
1+2. diff.ts: drop the tactic-sounding "quiet refutation"; "punishes" is reserved
for a CLEAR edge (>=1.5), a modest edge "keeps the advantage", a still-worse
reply is "best resistance" (never "punishes").
3. saliency.ts: now_attacked was MISSING from TYPE_PRIORITY (scored 0, lost ties to
now_defended) — the "F2 is now defended" bug. A new threat now outranks a
consolidation, so the headline picks the most chess-important fact.
4. explain.ts: clearer removal_of_guard wording (full "queen-trade" reframing deferred).
5. ExplanationConfidence on MoveAnalysis (certain_tactical | engine_pv |
semantic_overlay | low_salience_fallback), threaded into the JSON export, so the
UI/consumer can avoid sounding decisive on a generic delta.
290 tests pass (2 new); only the live-OpenAI test fails (no key in CI).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
feat: deepen + flag forcing sacrifices the base depth misjudges
A forcing/sacrificial move scored adverse at depth 14 (Kasparov's 24.Rxd4
reads as an inaccuracy) is now re-searched deeper. The deeper eval stays the
oracle — never overridden by a heuristic 'this must be brilliant' claim:
- 'sound' : the deeper search lifts it out of the adverse band; surface that
a forcing line the shallow pass misjudged actually holds up.
- 'stands' : still adverse; keep the tactical explanation and add a caution
that sharp forcing lines can outrun even deep search.
A failed/timed-out deep search NEVER downgrades the good shallow verdict.
New pure deepcheck.ts (isForcingMove/isSacrifice/deepCheckTrigger/withDeepCheck),
MoveAnalysis.deepCheck threaded into the JSON export. 14 new tests; 288 pass.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
PreviousNext