* 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
3 KiB
3 KiB
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:
lift_skill_gap_recognized_no_injection_discrete_count_statement— cases 0003, 0021 (n=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_productworks 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
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 loseas InitialPossession.