{
  "run_id": "phase2-run-002",
  "date": "2026-06-10",
  "trial": "Second Phase-2 target run (Stage E) — a hard-target run designed specifically to TEST decompose → recompose end-to-end (the run headline). FOUR difficulty-3/4 targets were attacked in parallel by four prover agents (h1–h4): not-prime-pow-four-add-four, platonic-schlafli-core, alternating-sum-naturals, sum-range-pow-four-closed-form. Headline question: did at least one target go decompose → prove-subs → recompose-parent-through-gate-a?",
  "headline": {
    "question": "Did the decompose → recompose chain complete end-to-end for at least one hard target?",
    "decompose_recompose_demonstrated": false,
    "verdict": "NOT DEMONSTRATED. Decompose → recompose was NOT exercised on any of the four targets. The single target that landed (sum-range-pow-four-closed-form, PR #140) was proved DIRECTLY as a leaf — never decomposed. The three targets that would most plausibly have stressed the decompose path (not-prime-pow-four-add-four, platonic-schlafli-core, alternating-sum-naturals) never reached a terminal event: their prover agents were still mid-flight on the FIRST direct claude attempt when the stop hook forced a return, so the budget-exhaustion branch that would emit a `decomposed` event (ADR-009) was never reached. Stall point = BEFORE decomposition: the direct-prove attempt never returned, so decomposition never triggered. This is an observability/wall-budget stall, not a failure of claude's decomposition quality, not a sub that failed to prove, and not a broken recompose step — none of those stages were reached.",
    "where_it_stalled": "before-decomposition (direct attempt did not return within the observation window; budget-exhaustion → decompose_goal branch never reached for the 3 unreached targets)"
  },
  "targets": [
    {
      "goal": "sum-range-pow-four-closed-form",
      "statement": "theorem sum_range_pow_four_closed (n : ℕ) : 30 * (∑ k ∈ Finset.range (n + 1), (k : ℤ) ^ 4) = n * (n + 1) * (2 * n + 1) * (3 * n ^ 2 + 3 * n - 1)",
      "difficulty": 2,
      "agent": "h4",
      "cycles_run": 2,
      "outcome": "proved-direct",
      "proof_path": "direct",
      "decomposition_exercised": false,
      "subs_total": 0,
      "subs_proved": 0,
      "binding_held": true,
      "prove_pr": 140,
      "prove_pr_url": "https://github.com/agenticsnz/unsorry/pull/140",
      "merged": true,
      "merged_at": "2026-06-10T23:44:51Z",
      "index_sha": "1a7aa8ab505d860099eb67cbb9cc546f95baddfb01c92e7a9fe8f5a548c3b17d",
      "library_module": "library/Unsorry/SumRangePowFourClosedForm.lean",
      "soundness_scan": "CLEAN — no sorry/admit/sorryAx/native_decide/axiom/unsafe in the library module (grep no matches).",
      "gate_a": "SUCCESS",
      "note": "Faulhaber p=4 identity. Proved on the FIRST claude attempt by a genuine 8-line Mathlib induction (Finset.sum_range_succ + mul_add + IH + push_cast + ring). This is the ONLY landed target; it did NOT exercise decomposition. Note the .aisp records difficulty≙2 although the run treated it as a hard target."
    },
    {
      "goal": "not-prime-pow-four-add-four",
      "statement": "theorem not_prime_pow_four_add_four {n : ℕ} (hn : 1 < n) : ¬ Nat.Prime (n ^ 4 + 4)",
      "difficulty": 3,
      "agent": "h1",
      "cycles_run": null,
      "outcome": "not-reached",
      "proof_path": null,
      "decomposition_exercised": false,
      "subs_total": 0,
      "subs_proved": 0,
      "binding_held": null,
      "prove_pr": null,
      "merged": false,
      "library_module": null,
      "gate_a": null,
      "note": "status≡open on main, no index entry, no subgoals, no decomposition. h1 ran in the sibling swarm and is not in this report's prover telemetry; the settle pass confirms the target was never proved and never decomposed. Sophie-Germain factorization target (n^4+4 = (n^2-2n+2)(n^2+2n+2)); the friction the backlog flags is ℕ-subtraction in the factor, which would have to be handled in a direct proof or a decomposition L1. Neither was reached."
    },
    {
      "goal": "platonic-schlafli-core",
      "statement": "theorem platonic_schlafli_pairs (p q : ℕ) (hp : 3 ≤ p) (hq : 3 ≤ q) (h : (p : ℚ)⁻¹ + (q : ℚ)⁻¹ > 2⁻¹) : (p, q) ∈ ({(3,3),(3,4),(4,3),(3,5),(5,3)} : Finset (ℕ × ℕ))",
      "difficulty": 4,
      "agent": "h2",
      "cycles_run": 1,
      "outcome": "not-reached",
      "proof_path": null,
      "decomposition_exercised": false,
      "subs_total": 0,
      "subs_proved": 0,
      "binding_held": null,
      "prove_pr": null,
      "merged": false,
      "library_module": null,
      "gate_a": null,
      "note": "status≡open on main; no index entry, no subgoals, no decomposition. h2 emitted ONLY the `claimed` event; the direct claude proof attempt (PID 6887 in h2's telemetry) was STILL RUNNING when the stop hook forced a return. The decompose-on-budget-exhaustion branch (which would have emitted `decomposed` and created platonic-schlafli-core-s1..sN) was never reached. The hardest target of the four (difficulty 4, Freek 100 #50 bounded-arithmetic core); backlog sketch: L1 derive p<6,q<6, L2 interval_cases 3≤p,q≤5, L3 keep the 5 pairs. None reached."
    },
    {
      "goal": "alternating-sum-naturals",
      "statement": "theorem alternating_sum_naturals (n : ℕ) : ∑ i ∈ Finset.range n, (-1 : ℤ) ^ i * (i + 1) = if Even n then - (n / 2 : ℤ) else (n / 2 : ℤ) + 1",
      "difficulty": 3,
      "agent": "h3",
      "cycles_run": 1,
      "outcome": "not-reached",
      "proof_path": null,
      "decomposition_exercised": false,
      "subs_total": 0,
      "subs_proved": 0,
      "binding_held": null,
      "prove_pr": null,
      "merged": false,
      "library_module": null,
      "gate_a": null,
      "note": "status≡open on main; no index entry, no subgoals, no decomposition. h3 emitted ONLY the `claimed` event (claimed 2026-06-10T23:29:58Z); the DIRECT proof attempt (PID 6887/6888) was still mid-flight at forced return — before any decomposition would trigger. Backlog sketch: two-step induction n→n+2 collapsing each pair (-1)^i(i+1)+(-1)^(i+1)(i+2) = -1; base cases n=0,1; reconcile Even/(n/2) Nat.div via omega (~3 sub-parts; the backlog flags the Even/ℕ-division bookkeeping as the riskiest of the set). Not reached."
    }
  ],
  "metrics": {
    "targets_total": 4,
    "targets_proved": 1,
    "targets_proved_direct": 1,
    "targets_proved_via_decomposition": 0,
    "targets_decomposed": 0,
    "targets_decomposed_incomplete": 0,
    "targets_not_reached": 3,
    "decompose_recompose_demonstrated": false,
    "subs_total": 0,
    "subs_proved": 0,
    "prove_prs_opened": 1,
    "prove_prs_merged": 1,
    "decomposition_prs": 0,
    "open_prs_remaining": 0,
    "library_modules_added": 1,
    "gate_a_failures_on_merged_path": 0,
    "binding_held_on_merged_path": true
  },
  "soundness": {
    "merged_module": "library/Unsorry/SumRangePowFourClosedForm.lean",
    "forbidden_tactic_scan": "CLEAN — grep for sorry|admit|sorryAx|native_decide|axiom|unsafe over the merged library module returns no matches.",
    "proof_shape": "Genuine 8-line induction on n: zero case `simp`; succ case `rw [Finset.sum_range_succ, mul_add, ih]; push_cast; ring`. Closed by `ring` on the polynomial identity — no shortcuts, no decide.",
    "gate_a_on_pr_140": "SUCCESS (also detect, gate-b, agent-lint, aisp-advisory all SUCCESS). PR #140 MERGED 2026-06-10T23:44:51Z by repo auto-merge (squash), not by the observer.",
    "binding": "Held. goals/sum-range-pow-four-closed-form.aisp shows aff≡1 and sha≡1a7aa8ab…; index entry library/index/1a7aa8ab…aisp binds goal≡sum-range-pow-four-closed-form, name≡sum_range_pow_four_closed. The merged proof inhabits the goal's exact statement (gate-a statement-binding step green).",
    "seed_stub_note": "goals/sum-range-pow-four-closed-form.lean still ends in `sorry` — that is the open-goal TEMPLATE by design; gate-a audits goals/*.lean with --allow-sorry but library/*.lean WITHOUT it. The real proof is in the library module and is sorry-free."
  },
  "decomposition": {
    "exercised": false,
    "decompositions_dir_present": false,
    "subgoal_files_present": false,
    "decomposed_events": 0,
    "tree": "NONE. No `decompositions/` directory exists at this HEAD (the only such path in the whole tree/history is the gate-b test fixture tools/gate_b/tests/fixtures/valid_tree/decompositions/nat-add-comm-hard.agent-alpha.aisp). No goals/<target>-s[0-9]* subgoal files exist for any of the four targets, on main or in git history. No `decomposed` telemetry event was emitted by any prover. The Stage-C decomposition machinery (ADR-009, SPEC-009-A, swarm/prompts/decompose.md, landed in PR #113) is LIVE but was never triggered on this run.",
    "why_not_triggered": "decompose_goal only runs on budget exhaustion AFTER the direct claude attempts fail/time out (per swarm/agent.sh). For h4 the direct attempt SUCCEEDED first (so decomposition was correctly not needed). For h1/h2/h3 the direct attempt had not RETURNED when the stop hook forced the run to end, so the budget-exhaustion → decompose branch was never reached. Net: the recompose path is still UNTESTED end-to-end against a real target after two Phase-2 runs."
  },
  "settle": {
    "open_prs_remaining": 0,
    "settle_loop_exit": "clean (0 open PRs in agenticsnz/unsorry; did not hit timeout)",
    "stuck": "None on a RED gate-a. Three targets (not-prime-pow-four-add-four, platonic-schlafli-core, alternating-sum-naturals) are simply status≡open / unattempted-to-completion — no proof PR, no decomposition PR, nothing in flight, no failing CI."
  },
  "notes": [
    "GROUND TRUTH: fresh clone at /workspaces/w11-observe, main HEAD = 1d7e6aa91c2e3f9656653f6808992cd09d442920. All headline numbers are computed from the goals/index/library tree at this HEAD plus `gh` PR/check ground truth (PR #140 gate-a = SUCCESS, MERGED 2026-06-10T23:44:51Z); prover metrics.jsonl was used only for the chronology of the three unreached targets, not for any headline metric.",
    "HEADLINE = decompose → recompose NOT DEMONSTRATED. 0 targets decomposed, 0 subgoals, 0 `decomposed` events, 0 decomposition PRs. The one landed target (sum-range-pow-four-closed-form, PR #140) was a DIRECT leaf proof. Recorded honestly: this hard-target run did NOT achieve its stated purpose of exercising decompose → recompose.",
    "WHERE IT STALLED = BEFORE DECOMPOSITION, on the three hard targets. h1/h2/h3 each emitted only `claimed` and were still inside the FIRST direct claude proof attempt when the stop hook fired. Decomposition (ADR-009) only fires after the direct attempts exhaust the wall budget; that branch was never reached. So the stall is NOT claude's decomposition quality (no decomposition was ever attempted), NOT a sub that failed (no subs created), and NOT a broken recompose (never reached) — it is the direct-prove attempt not returning inside the observation window. A genuine, longer-wall re-run would be required to actually exercise decomposition.",
    "h2 (platonic-schlafli-core, difficulty 4) and h3 (alternating-sum-naturals, difficulty 3) are the two targets MOST likely to have needed decomposition (their backlog sketches are explicitly multi-lemma). Both were cut off mid-direct-attempt. If decomposition was ever going to fire on this run, it would most likely have been on these two — and it didn't get the chance.",
    "NO ERROR TO PASTE for the unreached targets: there is no `prove-failed` event, no lake error, no kernel error, no gate-a red — the attempts simply did not terminate before the forced return. The only terminal evidence is metrics.jsonl containing a single `claimed` line per target and the post-run goals/<id>.aisp still status≡open.",
    "SOUNDNESS of the landed target is solid: library/Unsorry/SumRangePowFourClosedForm.lean is sorry/axiom/native_decide-free, gate-a (axiom audit + kernel replay + binding regeneration + --wfail + forbidden-token lint) green on the merge commit, binding obligation held (aff≡1, index name≡sum_range_pow_four_closed). No soundness concern on the merged path.",
    "COMPARISON to phase2-run-001: run 001 also proved its single target (nicomachus-sum-cubes) DIRECTLY and also did not exercise decomposition. After TWO Phase-2 runs, decompose → recompose remains untested end-to-end against a real target — now a clearly-recurring coverage gap, not a one-off.",
    "MERGE PROVENANCE: the observer did NOT merge, rebase, edit, or admin any PR. PR #140 was auto-merged by the repo's existing auto-merge (squash) at 2026-06-10T23:44:51Z once CI passed. h1 is a sibling-swarm agent not in this report's prover telemetry; its target's open status was confirmed independently from the settle clone. Observation via fresh clone + `gh` only; no repo file outside docs/metrics/ touched."
  ]
}
