4f362a9e62
Adds 8 new axes to FACTOR_FNS that derive from data already present in v4 episodes (no parser/episode-writer changes). Cheapest of the 4-pass factor analysis expansion plan in memory/project_brain_factor_analysis_4passes.md. New axes (string-key buckets, null-safe on missing/legacy fields): - prompt_signal: raw value (new_task / continuation / correction / approval / neutral / null) - classifier_source: classifier_output.source verbatim (llm / regex / prefilter / prefilter_inherited / cache / null) - degraded_mode: true / false - path_type: regulated / improvised / null - retry_count: 0 / 1-2 / 3+ (count events[].kind=retry) - error_count: 0 / 1 / 2+ (count events[].kind=error) - hard_floor_invoked: true / false (primary_rationale.hard_floor.invoked) - iterations_bucket: 0 / 1-3 / 4-10 / 11+ (task_cost.iterations) Together with the 11 existing axes, the factor matrix now covers 19 discrete dimensions. Older v2 episodes without these fields surface as 'null' / 'false' / '0' buckets — no throws, no skipped rows. TDD: 9 tests added in brain-retro-analyzer.test.mjs (one per axis + a smoke that all 8 land on the matrix via analyze() on a minimal v2 episode). Full suite 599/599 GREEN. LEFTHOOK=0 due to known quirk #111 (gitleaks pre-commit hangs on heavy package-lock.json diff in workspace). Manual gitleaks scan: clean. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>