core/docs
Shay 619cd62227 fix(adr-0174-phase3a): multi-actor pronoun hazard defense + test backfills + ADR amendment
All findings from the 2026-05-28 Phase 1-3a lookback review addressed
in one commit on the Phase 3a branch:

Wrong=0 hazard defense (the load-bearing fix):
- generate/math_candidate_graph.py: Phase 3a wiring now collects the
  set of distinct proper-noun subjects seen in prior context. When
  more than one exists, refuses with no_antecedent_ambiguous trace
  event rather than guessing the most-recent (which was gender-blind
  single-binding — wrong attribution in multi-actor problems).
- Refusals from the statement loop now preserve _statement_trace via
  reader_trace in CandidateGraphResult (pre-existing latent issue:
  Phase 2/3 trace events were dropped on early statement refusal).
- New tests assert: ambiguous case refuses with correct trace; single-
  actor case still resolves normally.

Test coverage backfills (closes the 13 untested predicate-name gaps):
- TestCheckConstraintsInitialPredicateNames — 3 tests asserting the
  exact predicate name on initial.value_grounds / initial.unit_grounds
  / initial.entity_grounds failure paths.
- TestCheckConstraintsOperationPredicateNames — 3 tests asserting
  operation.verb_grounds / operation.value_grounds / operation.unit_grounds
  failure-predicate-name parity.
- TestCheckConstraintsComposedInitialPath — 4 tests for the RAT-1
  composed_initial path which was entirely untested in Phase 2
  (parity manually verified during lookback review; now automated).

ADR amendment (honest doc vs impl drift):
- docs/decisions/ADR-0174-held-hypothesis-comprehension.md: appended
  'Implementation Notes' section documenting:
  - reevaluate signature differs from spec text (shipped is more
    composable; treat as amended)
  - Phase 2 wires per-candidate, not per-token (per-token is Phase 5)
  - Lookback recompute is candidate-level, not token-level
  - Hypothesis.constraint_state is never populated by Phase 2
  - Multi-actor pronoun hazard defense rationale
  - Honest LOC accounting: Phases 1-3a net +1,500 lines (Phase 5
    delivers the projected net removal)
  - Test coverage backfill summary

Cosmetic:
- lookback.py:297 unreachable raise — added # type: ignore[unreachable]
  with comment explaining defensive future-proofing for Phase 3b.

Acceptance verified:
- 124/124 Phase 1+2+3a + reader tests pass (was 95/95 before backfills)
- Smoke 67/67, packs 141/141
- train_sample 3/47/0 preserved (wrong=0 invariant held)
- Multi-actor hazard live-tested: parse_and_solve refuses the
  Alice/Bob/She case with no_antecedent_ambiguous trace event

See CLAUDE.md §Lookback Review Discipline and memory
feedback-lookback-review-discipline for the doctrine that surfaced
all of these issues at the right time.
2026-05-28 10:49:20 -07:00
..
adr
architecture
audit fix(phase2): close W-006/W-010/W-013/W-014/W-019 operator decisions (#270) 2026-05-25 11:34:19 -07:00
briefs feat(W-019): learning-arc demo — engine-authored proposal from contemplation (ADR-0152) (#276) 2026-05-25 13:03:10 -07:00
curriculum
decisions fix(adr-0174-phase3a): multi-actor pronoun hazard defense + test backfills + ADR amendment 2026-05-28 10:49:20 -07:00
evals
handoff feat(adr-0174-phase3a): lookback re-evaluation operator + pronoun resolution substrate 2026-05-28 10:49:20 -07:00
handoffs docs(handoff): Brief 11 — Phase 2 reader closure + capability snapshot sequencing (#342) 2026-05-27 05:03:40 -07:00
implementation
plans docs(plan): add CORE general advancement path (#314) 2026-05-26 18:32:08 -07:00
research docs(epistemic): align audit terminology with runtime enum 2026-05-28 04:17:19 -07:00
sessions docs(session): 2026-05-26 corridor closure — first GSM8K lift + workbench operational (#305) 2026-05-26 13:49:08 -07:00
workbench feat(W-028): chat surface + trace drawer (#303) 2026-05-26 13:22:11 -07:00
admissibility-exemplars.md feat(ADR-0163.B.2): four new exemplar corpora — discrete_count_statement, multiplicative_aggregation, currency_amount, plus temporal_aggregation v2 widening (#306) 2026-05-26 14:36:59 -07:00
capability_roadmap.md
ethics_packs.md
EVAL_AUDIT_2026-05-20.md
eval_methodology.md
formation_pipeline_plan.md
frontier_baselines.md
gaps.md
hitl-backpressure.md feat(ADR-0161.3): submission-time invariants — duplicate + dependent_on_pending auto-reject (#313) 2026-05-26 16:46:25 -07:00
holdout_recipients.txt
identity_packs.md
master-plan-post-substrate-audit.md docs(session): 2026-05-26 corridor closure — first GSM8K lift + workbench operational (#305) 2026-05-26 13:49:08 -07:00
pack_inventory_2026-05-21.md
position_paper.md Update position_paper.md 2026-05-27 18:27:18 -07:00
PROGRESS.md docs(session): 2026-05-26 corridor closure — first GSM8K lift + workbench operational (#305) 2026-05-26 13:49:08 -07:00
recognizer-registry.md feat(ADR-0163.D): wire ratified RecognizerSpecs into math_candidate_graph admissibility surface (#302) 2026-05-26 13:11:47 -07:00
refusal-taxonomy.md feat(ADR-0163.A): refusal taxonomy lane — shape categorization of GSM8K admissibility gaps (#297) 2026-05-26 11:27:11 -07:00
reviewers.yaml fix(quarantine): drain all 60 quarantined tests — QUARANTINE=∅ (#267) 2026-05-25 11:22:12 -07:00
runtime_contracts.md
RUST.md
safety_packs.md
teaching_order.md
test-debt-quarantine.md ci: full-pytest gate + QUARANTINE registry (49 known failures, uv) (#263) 2026-05-25 06:21:04 -07:00
truth_seeking_schema.md
Whitepaper.md
Yellowpaper.md