core/docs/analysis/gsm8k-capability-strike-batch4-lookback-2026-06-17.md
Shay e8f5a347d5
feat(derivation): capability strike batch 4 goal-residual lift (#814)
* feat(derivation): capability strike batch 4 goal-residual lift

Scout-guided Batch 4 re-wires resolve_promotable_goal_residual serving
promotion (Gate A2e) for train_sample 0037. product_bridge stays disabled
per held-out wrong=0 bisection.

Ephemeral train_sample: 9/41/0 → 10/40/0, wrong=0 preserved.
report.json untouched.

* test(gsm8k): refresh composition corpus prose for A2e

* fix(derivation): refuse comparative goal-residual questions

* test(derivation): guard goal-residual against comparative more-than
2026-06-17 20:21:18 -07:00

82 lines
No EOL
3 KiB
Markdown

# GSM8K Capability Strike Batch 4 — Lookback (2026-06-17)
## Scout-guided target selection
Scout run (`scripts/gsm8k_sealed_attempt_scout.py --limit 50`) on #813 baseline:
| Serving | Sealed (resolve_pooled) |
|---------|-------------------------|
| 9 / 41 / 0 | 3 / 39 / 8 |
**Top lift recommendations:**
1. `lift_skill_gap_recognized_no_injection_discrete_count_statement` — cases **0003**, **0021** (n=2)
2. Same family — case **0037** (n=1)
**Scout interpretation:** First refusal on 0037 is DCS no-injection on the goal clause, but sealed/aggressive `compose_goal_residual` already commits **3.0**. The coherent family is **goal_residual** (R4), not discrete_count_statement injection.
**Deferred (scout + bisection):**
- **0003/0021** — `resolve_promotable_product` works on train_sample but product_bridge is **0 correct / 5 wrong** on held-out 1,319; stays disabled.
- **0007/0047/0004** — no sealed-correct signal; higher wrong-risk.
## Baseline (ephemeral, pre-change)
| Metric | Value |
|--------|-------|
| correct | **9** |
| refused | **41** |
| wrong | **0** |
Committed `report.json` unchanged (6/44/0 historical pin).
## After (ephemeral live scoring)
| Metric | Value |
|--------|-------|
| correct | **10** |
| refused | **40** |
| wrong | **0** |
**Newly admitted:** `gsm8k-train-sample-v1-0037`
**Preserved:** `0002`, `0008`, `0014`, `0018`, `0024`, `0025`, `0029`, `0038`, `0042`
## Family implemented
**Gate A2e `goal_residual_question`** — re-wired serving promotion for `resolve_promotable_goal_residual` only:
- Goal anchor: `wants/needs/...` + single goal quantity
- Progress clauses: licensed change cues, same referent, all **subtract**
- Question: residual-to-goal (`meet goal`, `how much more`, …)
- Self-verification gate: `compose_goal_residual` (grounding ∧ unit ∧ completeness ∧ uniqueness)
**product_bridge stays disabled** (held-out wrong=0 breach).
## Why not overfit
- No case-id branches; uses existing R4 production + gain-goal divergence firewall (`test_r4_goal_residual.py`).
- Sibling: Maria save/earn goal → 9 (not 31 possession trap).
- Confusers refuse: no goal language, no residual question, cross-referent progress.
- 0003/0021 still refuse (product bridge off).
- Held-out bisection documented goal_residual **0/0** (inert); product **5 wrong**.
## Validation
```bash
git diff --check origin/main...HEAD
pytest tests/test_math_candidate_graph_goal_residual_lift.py -q
pytest tests/test_gsm8k_sealed_attempt_scout.py -q
pytest tests/test_gsm8k_frontier_report.py -q
pytest tests/test_gsm8k_post_gate_a1_frontier_microscope.py -q
pytest tests/test_math_candidate_graph_fraction_portion.py -q
pytest tests/test_math_candidate_graph_unit_partition_injection.py -q
pytest tests/test_math_candidate_graph_container_of_product.py -q
pytest tests/test_math_candidate_graph_peer_partition_question.py -q
```
## Non-goals
- No product_bridge re-wire (0003/0021).
- No report.json rebaseline.
- No sealed-lane movement.
- No DCS injector widening for `wants to lose` as InitialPossession.