# v1.7.9 — Retract −10pp Goal-Stack Lift Claim Implementation Plan

> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.

**Goal:** Pre-emptively retract the "−10pp goal-stack late-phase trap-rate lift" magnitude claim across every public surface in the hippo-memory repo (README hero + benchmark page + benchmarks subdir READMEs + CHANGELOG retroactive entries + ROADMAP-RESEARCH + RESEARCH + TODOS + v1.7.5/6/7 eval result docs + b3-dlpfc-depth plan + GitHub Release notes for v0.11.0/v0.39.0/v1.7.4/v1.7.5/v1.7.6/v1.7.7), based on cumulative evidence from three pre-registered workload variants (v1.7.5 SANITY_FAIL, v1.7.6 B*=NULL, v1.7.7 SANITY_FAIL). Decouple retraction from v1.8.0 outcome. Pin a `docs/RETRACTION.md` magnitude-smuggling guard for v1.8. Fold in 3 of 4 P2 polish items deferred from v1.7.8 audit (P2-1 Float64Array deferred to v1.7.10 per outside voice).

**Architecture:** Doc-only release plus 3 small code/doc-polish items (P2-2/3/4). The mechanism (dlPFC goal-stack: `pushGoal`/`completeGoal` hooks, `--use-goal-stack`, `applyGoalStackBoost`, MCP/HTTP integration) remains shipped from v1.7.4. The benchmark harness (`--restrict-late-to`, `--budget`, `--eval-strict`, `analyze-v1.7.7.mjs`, `aggregate.mjs::pairedPermutationCI`) remains shipped. v1.8.0 (queued separately, not in this release) explores adversarial trap categories as **mechanism characterisation** (NOT magnitude defense), under the constraints in `docs/RETRACTION.md` shipped this release.

**Tech Stack:** Markdown edits, version bump in 5 manifests, `npm publish`, `gh release create` + `gh release edit` × 6 (retroactive append-only retraction notes on prior tags).

**Semver decision:** 1.7.9 patch because (a) no API surface change, (b) no behavior change in shipped code (P2-2/3/4 are rounding + comment + docstring; P2-1 Float64Array — the only behavior change — is deferred to v1.7.10), (c) the magnitude claim was prose-only, never in machine-readable schema. Alternative `1.8.0-retraction` rejected: 1.8.0 is reserved for the adversarial-categories release; bumping to 1.8.0 here would force renaming the queued release.

---

## Why pre-emptive retraction (deliberate departure from v1.7.7 pre-reg)

The v1.7.7 prereg and `CHANGELOG.md:41-43` read: "The hard-stop retraction clause fires on NOT_SUPPORTED, not SANITY_FAIL — v1.7.7 was SANITY_FAIL. If v1.8 also fails, the magnitude claim should be treated as falsified."

That wording made retraction conditional on v1.8 outcome. v1.7.9 retracts EARLIER. Reasoning (must appear in the v1.7.9 CHANGELOG entry verbatim):

1. **Cumulative evidence is informative without v1.8.** Three pre-registered workload variants tested across distinct knobs (saturation, budget, restricted-window). Every C2 hippo-base late mean returned 0% across every seed.

2. **The v1.7.7 prereg explicitly distinguished SANITY_FAIL (no retraction) from NOT_SUPPORTED (retraction).** v1.7.9 deviates from that distinction on cumulative-evidence grounds. The deviation is declared, not silent.

3. **The original prereg's distinction was wrong.** Three SANITY_FAILs across distinct workload knobs is meaningful negative evidence regardless of formal verdict label. v1.7.9 corrects that prereg design choice. (This is not "more conservative than the pre-reg required" — it is a different choice that prioritises public-surface honesty over completing the full pre-registered escalation chain.)

4. **Decoupling protects against v1.8 timing.** v1.8 is multi-hour eval work with new category authoring + harness tweaks. If v1.8 slips, the false magnitude claim should not stay live in the README and ROADMAP-RESEARCH.

5. **CLAUDE.md "Honest Reporting" requires it.** "If results are null, flat, or worse than the baseline, say so plainly. Do not soften, frame around it, or lead with the one positive metric." Three nulls across three pre-registered variants IS a null. The mechanism stays shipped; the magnitude is a separate claim. v1.8 still runs as planned; the retraction is independent of v1.8 outcome.

This departure is documented explicitly in the v1.7.9 CHANGELOG entry. It is NOT silent or selective retraction.

---

## Cumulative evidence (the basis for retraction)

| Release | Workload knob | Seeds | C2 hippo-base late mean | Verdict | C3 collected? |
|---------|---------------|-------|--------------------------|---------|----------------|
| v1.7.5 | full-late = last 7 of 25 (chronological-third) | 20 | 0.0% (all 20 at 0%) | SANITY_FAIL — saturation | YES (also 0.0%) |
| v1.7.6 | budget sweep {200, 400, 600, 800, 1000} | 10 each | 0.0% (all 50 single-seed runs) | B*=NULL | NO (no B* to use) |
| v1.7.7 | `--restrict-late-to 4` (last 4 of 25) | 20 | 0.0% (k=0 hits across 80 seed-slots) | SANITY_FAIL — N=4 lattice gate | NO (sanity preflight blocked C3) |

Original v0.39 informal eval reported "78% → 14%" over 50 tasks. That magnitude does not reproduce on the formal sequential-learning benchmark across three pre-registered workload variants.

---

## What gets retracted

- Headline "−10pp goal-stack lift on sequential-learning benchmark"
- "78% → 14% over 50 tasks" reproducibility framing across README, benchmarks READMEs, RESEARCH, ROADMAP-RESEARCH, CHANGELOG historical entries
- B3 success criterion "sequential-learning trap-rate −10pp" in `ROADMAP-RESEARCH.md:156`
- All marketing/thesis lines citing the magnitude (`README.md:39` hero bullet; `ROADMAP-RESEARCH.md:28` thesis line)
- Any phrasing that implies a measured magnitude. Replacement language: **"is RETRACTED. The mechanism is shipped; no magnitude is currently claimed."** No "pending", no "unsupported pending", no "untested on a discriminating workload" framing — those read as escape hatches.

## What does NOT get retracted

- The mechanism: `pushGoal` / `completeGoal` hooks, `--use-goal-stack`, `applyGoalStackBoost`, MCP/HTTP integration — all from v1.7.4..v1.7.5, all working as designed.
- The benchmark itself: harness, multi-seed variance, paired permutation CI, lattice gate framework — all working as designed.
- The infrastructure shipped in v1.7.5..v1.7.8 (adapter contract, calibration, `--restrict-late-to`, audit fixes).
- The B3 line item — it continues into v1.8.0 as adversarial-categories **mechanism characterisation** with a magnitude-smuggling guard (`docs/RETRACTION.md`, shipped this release).

---

## Branch + setup

```bash
git -C C:/Users/skf_s/hippo branch --show-current   # confirm master
git -C C:/Users/skf_s/hippo checkout -b feat/v1.7.9-retraction
```

Expected: switched to `feat/v1.7.9-retraction`.

---

## Task 1: Build retraction claim inventory (with literal grep capture)

**Files:**
- Create: `docs/evals/2026-05-09-v1.7.9-retraction-inventory.md`

**Step 1: Re-grep with loosened regex (post-review J1; v1.7.7 inventory's regex missed wider-gap forms)**

```bash
git -C C:/Users/skf_s/hippo grep -nE "(\-10pp|10pp|10 percentage|goal-stack lift|78%?.{0,80}14%?|78 .{0,80}14)" \
  README.md ROADMAP-RESEARCH.md RESEARCH.md CHANGELOG.md TODOS.md \
  benchmarks/README.md benchmarks/sequential-learning/README.md \
  docs/plans/2026-04-29-b3-dlpfc-depth.md \
  docs/evals/2026-05-07-v1.7.5-goal-stack-eval-result.md \
  docs/evals/2026-05-07-v1.7.5-goal-stack-eval-prereg.md \
  docs/evals/2026-05-09-v1.7.6-calibration-result.md \
  docs/evals/2026-05-09-v1.7.7-goal-stack-eval-result.md \
  docs/evals/2026-05-09-v1.7.7-goal-stack-eval-prereg.md \
  docs/evals/2026-05-09-v1.7.7-claim-inventory.md > /tmp/v1.7.9-grep-anchor.txt
cat /tmp/v1.7.9-grep-anchor.txt
```

**Capture the full output verbatim into the inventory file's "Re-grep verification" block.** Do NOT leave a placeholder — embed the actual lines + paths + line numbers. This is the audit anchor.

**Expected hits (verified at HEAD 2026-05-09 by outside voice):**

| Path | Line(s) | Action |
|------|---------|--------|
| `README.md` | 39 | **Hero bullet** "78% → 14% trap rate." Replace with mechanism-only framing (Task 2 step 5) |
| `README.md` | 92, 99, 109, 115 | What's-new blocks for v1.7.5/6/7/8 say "untested" / "open" — append `> Updated v1.7.9: magnitude RETRACTED.` to each (Task 2 step 6) |
| `README.md` | 1003 | Trap-rate table row `\| Hippo \| 40% \| 78% \| 22% \| 14% \| Yes \|` (Task 2 step 2) |
| `README.md` | 1005 | "trap-hit rate drops from 78% to 14%" (Task 2 step 2) |
| `benchmarks/README.md` | 21-24, 88 | Table + comparison cell + bullets (Task 2b) |
| `benchmarks/sequential-learning/README.md` | 70-71 | Table again, NPM-shipped (Task 2b) |
| `RESEARCH.md` | 176 | "(78% trap rate -> 14% over 50 tasks) tests this directly" (Task 4b) |
| `ROADMAP-RESEARCH.md` | 28 | Thesis line "(78% -> 14% baseline over 50 tasks)" (Task 4) |
| `ROADMAP-RESEARCH.md` | 156 | B3 success criterion "−10pp" (Task 4) |
| `ROADMAP-RESEARCH.md` | 158 | v1.7.8 "Status update 2026-05-09" block — refresh (Task 4) |
| `TODOS.md` | 152-163 | B3 `[ ]` line (Task 5) |
| `CHANGELOG.md` | 120 | v1.7.4 "Demonstrate or honestly retire the −10pp..." (Task 3 inline append) |
| `CHANGELOG.md` | ~1327 | v0.11.0 originating entry asserts magnitude (Task 3 inline append — verify exact line via grep) |
| `CHANGELOG.md` | top | (head is currently v1.7.8) — insert v1.7.9 entry above (Task 3) |
| `docs/plans/2026-04-29-b3-dlpfc-depth.md` | 5, 1778, 1962 | "−10pp" cited (Task 6b) |
| `docs/evals/2026-05-07-v1.7.5-goal-stack-eval-result.md` | end | Append v1.7.9 retraction status (Task 6) |
| `docs/evals/2026-05-09-v1.7.6-calibration-result.md` | end | Append v1.7.9 retraction status (Task 6) |
| `docs/evals/2026-05-09-v1.7.7-goal-stack-eval-result.md` | end | Append v1.7.9 retraction status (Task 6) |
| GitHub Releases | v0.11.0, v0.39.0, v1.7.4, v1.7.5, v1.7.6, v1.7.7 | `gh release edit <tag> --notes-file ...` append-only retraction note (Task 13 sub-step) |

**Step 2: Write the inventory file with literal grep output embedded**

```markdown
# v1.7.9 −10pp Retraction Claim Inventory

**Pre-edit inventory.** Captures every location in the public surface that asserts the −10pp goal-stack lift / 78%→14% magnitude / B3 success criterion magnitude. Each row carries the exact post-retraction action.

Generated 2026-05-09, BEFORE running v1.7.9 doc edits.

## Re-grep verification (literal output, captured 2026-05-09)

```text
[paste full output of /tmp/v1.7.9-grep-anchor.txt verbatim]
```

## Retraction targets

[Full table with every line from the grep output, mapped to a Task in the plan. One row per hit. No placeholders.]

## Locations with magnitude strings UNRELATED (no action — verified)

[List any UNRELATED hits (e.g. `docs/plans/2026-04-21-model-aware-hippo.md`); confirm with prose why they don't carry the magnitude.]

## Locations with "goal-stack" describing the MECHANISM (no retraction needed)

Mechanism descriptions are about behavior, not magnitude. Mechanism remains shipped.

## GitHub Releases retroactive retractions (Task 13 sub-step)

| Tag | Original notes assert magnitude? | Append-only retraction text |
|-----|----------------------------------|------------------------------|
| v0.11.0 | YES (originating informal claim) | `> RETRACTED v1.7.9 — see release notes for v1.7.9` |
| v0.39.0 | YES (B3 dlPFC mention) | same |
| v1.7.4 | YES ("Demonstrate or honestly retire the −10pp") | same |
| v1.7.5 | YES (eval STOPPED, hypothesis open) | same |
| v1.7.6 | YES (B*=NULL, hypothesis open) | same |
| v1.7.7 | YES (SANITY_FAIL, magnitude not retracted YET) | same |

## Worktree exclusions

`.claude/worktrees/agent-*/...` is local development scratch, not public surface. Excluded.
```

**Step 3: Commit (pre-edit anchor)**

```bash
git -C C:/Users/skf_s/hippo add docs/evals/2026-05-09-v1.7.9-retraction-inventory.md
git -C C:/Users/skf_s/hippo commit -m "docs: claim inventory for v1.7.9 -10pp retraction (with literal grep anchor)"
```

---

## Task 2: Edit README.md (load-bearing public surface)

**Files:**
- Modify: `README.md` (hero bullet at line 39; v1.7.5/6/7/8 What's-New blocks at lines 92/99/109/115; trap-rate table region at lines 991-1011; insert new What's-New section above v1.7.8)

**Step 1: Read current content for anchors**

Read `README.md` at lines 35-45 (hero bullets), 88-120 (What's-new blocks), 991-1011 (trap-rate table region) to confirm exact text before editing.

**Step 2: Replace the trap-rate table + sentence (lines 997-1005) — drop "pending", prose-only `<details>`**

OLD (verbatim, current):
```markdown
**Hippo v0.11.0 results:**

| Condition | Overall | Early | Mid | Late | Learns? |
|-----------|---------|-------|-----|------|---------|
| No memory | 100% | 100% | 100% | 100% | No |
| Static memory | 20% | 33% | 11% | 14% | No |
| Hippo | 40% | 78% | 22% | 14% | Yes |

The hippo agent's trap-hit rate drops from 78% to 14% as it accumulates error memories with 2x half-life. Static pre-loaded memory helps from the start but doesn't improve. Any memory system can run this benchmark by implementing the [adapter interface](benchmarks/sequential-learning/adapters/interface.mjs).
```

NEW (verbatim replacement):
```markdown
> **v0.11.0 informal results — RETRACTED v1.7.9.** The 78% → 14% magnitude does NOT reproduce on the formal sequential-learning benchmark. Three pre-registered workload variants (v1.7.5 full-late, v1.7.6 budget sweep, v1.7.7 `--restrict-late-to 4`) all returned C2 hippo-base late mean = 0.0% across every seed (the workload's late phase saturates structurally). The mechanism (dlPFC goal-stack: `pushGoal`/`completeGoal` hooks, `--use-goal-stack`) is shipped and exercisable. **The magnitude is RETRACTED. The mechanism is shipped; no magnitude is currently claimed.** v1.8.0 (queued) explores adversarial trap categories as mechanism characterisation under the magnitude-smuggling guard in `docs/RETRACTION.md`. Pre-registration trail: `docs/evals/2026-05-07-v1.7.5-goal-stack-eval-prereg.md`, `docs/evals/2026-05-09-v1.7.6-calibration-result.md`, `docs/evals/2026-05-09-v1.7.7-goal-stack-eval-result.md`. CHANGELOG: see v1.7.9 entry.

<details>
<summary>Original v0.11.0 informal numbers (RETRACTED — preserved as audit trail in git, not reproduced here)</summary>

v0.11.0 reported a single-run informal headline citing late-phase trap-rate decline on the sequential-learning benchmark. The specific numbers are archived at git tag `v0.11.0` and the corresponding `CHANGELOG.md` historical entry. Retained in version control, not reproduced here, since reproduction risks accidental re-citation. See `git show v0.11.0 -- README.md` for the original wording.

</details>

The benchmark, harness, and adapter contract remain shipped. Any memory system can run this benchmark by implementing the [adapter interface](benchmarks/sequential-learning/adapters/interface.mjs).
```

**Note: the `<details>` block intentionally does NOT reproduce the "78%" or "14%" numbers in the rendered README. Audit trail lives in `git log` + the historical CHANGELOG entry, not in the rendered HTML. This is per outside-voice finding D1.**

**Step 3: Append forward-pointer to v1.7.5/6/7/8 What's-New blocks**

For each of the existing `### What's new in v1.7.5`, `### What's new in v1.7.6`, `### What's new in v1.7.7`, `### What's new in v1.7.8` blocks (lines 92, 99, 109, 115 region — confirm via Read), append a single line at the end of each block:

```markdown
> Updated v1.7.9: the −10pp magnitude is RETRACTED. See "What's new in v1.7.9" above and `CHANGELOG.md` v1.7.9 entry.
```

**Step 4: Replace the hero bullet at line 39 (or wherever "78% → 14%" appears in the marketing summary)**

Read lines 35-50 first. Find the "78% → 14% trap rate" bullet. Replace with:

```markdown
- **Sequential Learning Benchmark** — measures whether agents learn from past mistakes. v0.11.0 informal magnitude RETRACTED v1.7.9; mechanism remains shipped. See "What's new in v1.7.9".
```

**Step 5: Add "What's new in v1.7.9" section above the existing `### What's new in v1.7.8` block**

Insert verbatim:

```markdown
### What's new in v1.7.9

- **−10pp goal-stack lift magnitude RETRACTED.** Three pre-registered workload variants (v1.7.5 full-late SANITY_FAIL, v1.7.6 budget sweep B*=NULL, v1.7.7 `--restrict-late-to 4` SANITY_FAIL) all returned C2 hippo-base late mean = 0.0% across every seed. The 78% → 14% headline does not reproduce on the formal harness. Mechanism (dlPFC goal-stack) remains shipped; **no magnitude is currently claimed.**
- **Pre-emptive retraction (deliberate departure from v1.7.7 prereg).** The prereg explicitly distinguished SANITY_FAIL (no retraction) from NOT_SUPPORTED (retraction). v1.7.9 deviates on cumulative-evidence grounds; the deviation is declared, not silent. v1.8 still runs as planned; retraction is independent of v1.8 outcome.
- **`docs/RETRACTION.md`** pinned this release as a magnitude-smuggling guard for v1.8 and beyond.
- **3 P2 polish items folded in** from the v1.7.8 audit (README/result.md rounding consistency with raw-data disclosure, `pairedPermutationCI` docstring, `BAND_LOW`/`BAND_HIGH` provenance comment). The 4th (Float64Array micro-opt in `analyze-v1.7.7.mjs`) is **deferred to v1.7.10** to keep this release doc-only and audit-clean.
```

**Step 6: Commit**

```bash
git -C C:/Users/skf_s/hippo add README.md
git -C C:/Users/skf_s/hippo commit -m "docs(readme): retract -10pp goal-stack lift magnitude (v1.7.9)"
```

---

## Task 2b: Edit `benchmarks/README.md` and `benchmarks/sequential-learning/README.md`

**Files:**
- Modify: `benchmarks/README.md` (lines 21-24, 88; verify via grep)
- Modify: `benchmarks/sequential-learning/README.md` (lines 70-71; verify via grep)

These are NPM-tarball-shipped surfaces. Skipping them leaves the magnitude live in the published package even after the top-level README is retracted. Outside voice flagged this as P0 (A2, A3).

**Step 1: Read both files in full**

Read each file end-to-end to find every magnitude assertion. Confirm anchors with `git -C C:/Users/skf_s/hippo grep -nE "78%|14%|trap.rate.{0,30}-10pp" benchmarks/`.

**Step 2: Replace each magnitude assertion with the same retraction wrapper used in `README.md` Step 2**

For tables: replace the table row (or entire table block) with a top-level `> **v0.11.0 informal results — RETRACTED v1.7.9.**` paragraph followed by a prose-only `<details>` block (NO inline numbers — same pattern as Task 2 Step 2).

For sentences: replace verbatim with: "v0.11.0 reported informal results that did not reproduce on the formal sequential-learning harness across three pre-registered workload variants (v1.7.5/6/7). The mechanism is shipped. The magnitude is RETRACTED. See `CHANGELOG.md` v1.7.9 entry."

For comparison cells (e.g. "78% -> 14% trap rate (learns)"): replace the cell content with "RETRACTED v1.7.9 — mechanism shipped, no magnitude claimed".

**Step 3: Commit**

```bash
git -C C:/Users/skf_s/hippo add benchmarks/README.md benchmarks/sequential-learning/README.md
git -C C:/Users/skf_s/hippo commit -m "docs(benchmarks): retract -10pp magnitude in NPM-shipped READMEs (v1.7.9)"
```

---

## Task 3: Edit `CHANGELOG.md` — insert v1.7.9 entry + retroactive append-only notes

**Files:**
- Modify: `CHANGELOG.md` (insert v1.7.9 entry above line 3 `## 1.7.8`; append inline notes to v1.7.4 entry at line 120 and v0.11.0 entry at ~line 1327)

**Step 1: Insert v1.7.9 entry above `## 1.7.8 (2026-05-09)`**

Insert verbatim:

```markdown
## 1.7.9 (2026-05-09)

Retraction patch + post-audit P2 polish (3 of 4; P2-1 deferred to v1.7.10). The "−10pp goal-stack lift on sequential-learning benchmark" magnitude claim is RETRACTED publicly across the README hero, benchmark READMEs, RESEARCH/ROADMAP-RESEARCH thesis lines, TODOS, the v1.7.5/6/7 eval result docs, the canonical B3 plan, AND the GitHub Release notes for every prior tag that asserted the magnitude (v0.11.0/v0.39.0/v1.7.4/v1.7.5/v1.7.6/v1.7.7). The mechanism (dlPFC goal-stack boost from v1.7.4) and the benchmark harness remain shipped. v1.8.0 (queued separately) explores adversarial trap categories as **mechanism characterisation** under the magnitude-smuggling guard pinned in `docs/RETRACTION.md` this release.

### Retracted

- **−10pp goal-stack late-phase trap-rate lift on the sequential-learning benchmark.** Three pre-registered workload variants tested without producing a discriminating workload: v1.7.5 (full-late = last 7 of 25, C2 SANITY_FAIL on saturation), v1.7.6 (5 budgets × 10 seeds, B*=NULL on workload floor), v1.7.7 (`--restrict-late-to 4`, C2 SANITY_FAIL on N=4 lattice gate). C2 hippo-base late mean = 0.0% across every seed in every variant. The original v0.39 informal "78% → 14% over 50 tasks" headline does not reproduce on the formal multi-seed harness across three pre-registered workload knobs. **The magnitude is RETRACTED. The mechanism is shipped; no magnitude is currently claimed.**
- **Departure from v1.7.7 pre-reg (deliberate, declared).** The v1.7.7 prereg explicitly distinguished SANITY_FAIL (no retraction) from NOT_SUPPORTED (retraction). v1.7.9 deviates from that distinction on cumulative-evidence grounds. The original prereg's distinction was wrong: three SANITY_FAILs across distinct workload knobs is meaningful negative evidence regardless of formal verdict label. v1.7.9 retracts on cumulative evidence rather than waiting for v1.8. This prioritises public-surface honesty over completing the full pre-registered escalation chain. v1.8 still runs as planned; the retraction is independent of v1.8 outcome.

### Preserved (NOT retracted)

- **Mechanism:** `pushGoal` / `completeGoal` adapter hooks, `--use-goal-stack` flag, `applyGoalStackBoost` helper, MCP `hippo_recall` boost, HTTP `GET /v1/memories?session_id=` boost — all shipped from v1.7.4..v1.7.5, all working as designed.
- **Benchmark harness:** multi-seed adapter contract, paired permutation CI, lattice gate framework, `--restrict-late-to`, `--budget`, `--eval-strict`, `analyze-v1.7.7.mjs`, `aggregate.mjs::pairedPermutationCI` — all shipped, all reusable for v1.8 and beyond.
- **B3 line item:** continues into v1.8.0 as adversarial-categories **mechanism characterisation** with NO magnitude attached. Constraints pinned in `docs/RETRACTION.md`.

### Added

- **`docs/RETRACTION.md`** — pinned magnitude-smuggling guard. Any v1.8 (or later) result doc that contains pre-registered numeric pass/fail thresholds, "magnitude", "Δ = ", "≥Xpp", "lift", or any framing equivalent to a magnitude claim must reference this doc and explain why the framing does not constitute a retracted-magnitude re-assertion.
- **README "What's new in v1.7.9"** + retraction wrapper at the trap-rate-table region.
- **`docs/evals/2026-05-09-v1.7.9-retraction-inventory.md`** captures every retracted location with literal grep anchor.
- **Forward-pointer blocks on v1.7.5 / v1.7.6 / v1.7.7 eval result docs** linking to v1.7.9 retraction (anchored as `## Update 2026-05-09 (v1.7.9 release)` to disambiguate from same-date v1.7.6/7 update tails).
- **GitHub Release retroactive retraction notes** (append-only) on v0.11.0, v0.39.0, v1.7.4, v1.7.5, v1.7.6, v1.7.7.
- **`benchmarks/README.md` + `benchmarks/sequential-learning/README.md`** retraction wrappers — NPM-tarball-shipped surfaces previously missed.
- **Retroactive notes** appended to `CHANGELOG.md:120` (v1.7.4) and `CHANGELOG.md` v0.11.0 entry (`> RETRACTED v1.7.9` and `> Retired v1.7.9.`).
- **Thesis-line retractions** in `RESEARCH.md:176` and `ROADMAP-RESEARCH.md:28`.
- **Forward-pointer block** at top of `docs/plans/2026-04-29-b3-dlpfc-depth.md`.

### Fixed (P2 polish from v1.7.8 audit — 3 of 4; P2-1 deferred)

- **(P2-2) README ↔ result.md rounding consistency.** README "What's new in v1.7.7" cited "early=77%, mid=5%" while `docs/evals/2026-05-09-v1.7.7-goal-stack-eval-result.md` reported "77.28%, 4.50%". Both now use one decimal place: "77.3%, 4.5%". **Underlying values unchanged in raw JSON at `results/v1.7.7-eval-C2-hippo-base/benchmark-1778313821987.json`. Math unchanged; only display rounding adjusted. The retraction release does not modify any computed numbers.**
- **(P2-3) `pairedPermutationCI` docstring.** Clarified the implementation as a recentred-percentile bootstrap (sign-flip Monte Carlo) rather than bias-corrected (BCa); documented the 10k resample default and the n<5 short-circuit semantics.
- **(P2-4) `BAND_LOW` / `BAND_HIGH` provenance comment.** `calibrate.mjs` band constants now carry an inline comment citing the v1.7.6 plan v2 commit (`c670ac9`) as the pre-registration anchor and explaining the v1.7.6 derivation (±10pp around v0.11.0 informal headline, since superseded by v1.7.7's N=4 lattice gate `[0.05, 0.50]` — and now retracted v1.7.9).

### Deferred to v1.7.10

- **(P2-1) `Float64Array(1 << n)` micro-opt in `analyze-v1.7.7.mjs::exactPairedPermutationCI`.** Behavior-changing micro-opt in a retraction release would create a "fiddling with numbers in the same release that retracts numbers" audit smell. Deferred. To be shipped as a standalone v1.7.10 perf patch.

### Tests

- Test count unchanged vs v1.7.8 (P2-2/3/4 are rounding + comment + docstring; no new tests added). Actual count to be re-verified by `npx vitest run` pre-publish; final count cited in commit message and `/ship-check` output, not in this CHANGELOG entry.

```

**Step 2: Append `> RETRACTED v1.7.9 — see top of file` to the v0.11.0 historical entry**

```bash
git -C C:/Users/skf_s/hippo grep -nE "^## (0\.11\.0|v0\.11\.0)" CHANGELOG.md
```

Locate the v0.11.0 entry. Immediately after the entry's first line (the heading), append a blockquote line:

```markdown
> **RETRACTED v1.7.9** — the 78% → 14% magnitude does not reproduce on the formal sequential-learning harness across three pre-registered workload variants (v1.7.5/6/7). See `## 1.7.9` at top of file. Mechanism remains shipped.
```

**Step 3: Append `> Retired v1.7.9.` inline at line 120** (v1.7.4 "Demonstrate or honestly retire the −10pp..." item)

After the line containing "Demonstrate or honestly retire the −10pp trap-rate claim", append:

```markdown
> **Retired v1.7.9** — the −10pp magnitude is RETRACTED. See `## 1.7.9` at top of file.
```

**Step 4: Commit**

```bash
git -C C:/Users/skf_s/hippo add CHANGELOG.md
git -C C:/Users/skf_s/hippo commit -m "docs(changelog): v1.7.9 -10pp retraction entry + retroactive notes on v0.11.0/v1.7.4"
```

---

## Task 4: Edit `ROADMAP-RESEARCH.md` (B3 success criterion + thesis line 28)

**Files:**
- Modify: `ROADMAP-RESEARCH.md` lines 28, 156, 158

**Step 1: Update line 28 — strikethrough the magnitude half**

OLD (line 28, partial — verify exact wording via Read):
```markdown
... (78% -> 14% baseline over 50 tasks) ...
```

NEW:
```markdown
... ~~(78% -> 14% baseline over 50 tasks)~~ **(RETRACTED v1.7.9 — see CHANGELOG)** ...
```

**Step 2: Update line 156 — strikethrough −10pp half**

OLD:
```markdown
**Effort:** 12d. **Success:** sequential-learning trap-rate −10pp; fire-rate lift p<0.05 on goal-tagged subset.
```

NEW:
```markdown
**Effort:** 12d. **Success:** ~~sequential-learning trap-rate −10pp~~ **(RETRACTED v1.7.9 — see Status update below)**; fire-rate lift p<0.05 on goal-tagged subset.
```

**Step 3: Replace the v1.7.8 "Status update" block (line 158) with v1.7.9 RETRACTED block**

OLD (line 158, single line — see grep output for verbatim):
```markdown
> **Status update 2026-05-09 (v1.7.8 audit honesty fix):** the −10pp magnitude has been tested across three pre-registered workload variants without discrimination — v1.7.5 SANITY_FAIL on full-late (last 7), v1.7.6 B*=NULL across 5 budgets × 10 seeds, v1.7.7 SANITY_FAIL on `--restrict-late-to 4` (last 4 of 25). Mechanism shipped from v1.7.4 (commit `9af9962` MVP + v1.7.4 depth). v1.8 is the last pre-registered escalation: adversarial trap categories with PRE-COMMITTED constraints (≥3 new categories, <40% Jaccard overlap with v1.7.5 lessons, same N-lattice gate, categories authored BEFORE C3). If v1.8 also fails, treat the −10pp magnitude as falsified pending a fundamentally different benchmark. See `docs/evals/2026-05-09-v1.7.7-goal-stack-eval-result.md`.
```

NEW:
```markdown
> **Status update 2026-05-09 (v1.7.9 retraction):** the −10pp magnitude is **RETRACTED publicly** based on cumulative evidence from three pre-registered workload variants — v1.7.5 SANITY_FAIL on full-late (last 7), v1.7.6 B*=NULL across 5 budgets × 10 seeds, v1.7.7 SANITY_FAIL on `--restrict-late-to 4` (last 4 of 25). Every C2 hippo-base late mean returned 0% across every seed. v1.7.9 retracts on cumulative evidence rather than waiting for v1.8 — the v1.7.7 prereg's SANITY_FAIL ≠ NOT_SUPPORTED distinction was wrong; three SANITY_FAILs across distinct knobs is meaningful negative evidence regardless of formal verdict label. The mechanism (commit `9af9962` MVP + v1.7.4 depth) remains shipped; **no magnitude is currently claimed.** v1.8.0 (queued) explores adversarial trap categories as **mechanism characterisation** under the magnitude-smuggling guard in `docs/RETRACTION.md`. See `CHANGELOG.md` v1.7.9 entry and `docs/evals/2026-05-09-v1.7.9-retraction-inventory.md`.
```

**Step 4: Commit**

```bash
git -C C:/Users/skf_s/hippo add ROADMAP-RESEARCH.md
git -C C:/Users/skf_s/hippo commit -m "docs(roadmap): retract -10pp B3 success criterion + thesis line (v1.7.9)"
```

---

## Task 4b: Edit `RESEARCH.md` (line 176 thesis claim)

**Files:**
- Modify: `RESEARCH.md` line 176

**Step 1: Read line 170-180 for context**

**Step 2: Replace the parenthetical magnitude assertion**

OLD (line 176, expected — verify):
```markdown
The sequential learning benchmark (78% trap rate -> 14% over 50 tasks) tests this directly.
```

NEW:
```markdown
The sequential learning benchmark tests this directly. (v0.11.0 informal "78% → 14%" magnitude RETRACTED v1.7.9 — see `CHANGELOG.md` v1.7.9 entry. Mechanism remains shipped; no magnitude is currently claimed.)
```

**Step 3: Commit**

```bash
git -C C:/Users/skf_s/hippo add RESEARCH.md
git -C C:/Users/skf_s/hippo commit -m "docs(research): retract -10pp thesis citation at line 176 (v1.7.9)"
```

---

## Task 5: Edit `TODOS.md` (B3 follow-up line)

**Files:**
- Modify: `TODOS.md` lines 152-163

**Step 1: Replace open `[ ]` line with closed `[x]` retraction line + new framed `[ ]` v1.8 line**

OLD (lines 152-163, verbatim):
```markdown
- [ ] **B3 follow-up: −10pp goal-stack hypothesis test** → **v1.8**. v1.7.6
  tested budget reduction (B\*=NULL); v1.7.7 tested `--restrict-late-to 4`
  (C2 SANITY_FAIL, late mean 0.00% across 20 seeds, C3 NOT collected per
  pre-reg). Three workload variants attempted; none discriminating. Per
  pre-committed escalation in v1.7.7 prereg, v1.8 ships adversarial trap
  categories with PRE-COMMITTED constraints: ≥3 new categories beyond the
  existing 10; lessons must use vocabulary with <40% Jaccard overlap vs
  v1.5 lessons; same N-lattice gate; same C2-before-C3 sanity preflight;
  categories authored BEFORE running C3. If v1.8 also SANITY_FAIL or
  NOT_SUPPORTED, treat the −10pp magnitude as falsified pending a
  fundamentally different benchmark. See
  `docs/evals/2026-05-09-v1.7.7-goal-stack-eval-result.md`.
```

NEW:
```markdown
- [x] **B3 follow-up: −10pp goal-stack lift magnitude RETRACTED v1.7.9.**
  Cumulative evidence across three pre-registered workload variants:
  v1.7.5 SANITY_FAIL on full-late (last 7), v1.7.6 B\*=NULL across 5
  budgets × 10 seeds, v1.7.7 SANITY_FAIL on `--restrict-late-to 4`
  (last 4 of 25). Every C2 hippo-base late mean returned 0% across every
  seed. v1.7.9 retracts on cumulative evidence rather than waiting for
  v1.8 — the v1.7.7 prereg's SANITY_FAIL ≠ NOT_SUPPORTED distinction
  was wrong. Mechanism (`pushGoal`/`completeGoal`,
  `--use-goal-stack`, `applyGoalStackBoost`) remains shipped from v1.7.4.
  See `CHANGELOG.md` v1.7.9 entry,
  `docs/evals/2026-05-09-v1.7.9-retraction-inventory.md`,
  and `docs/RETRACTION.md`.

- [ ] **B3 follow-up: adversarial trap categories** → **v1.8.0**.
  **Mechanism characterisation only — NO magnitude claim, NO
  pre-registered ≥Xpp threshold, NO pass/fail decision rule on a
  magnitude.** Goal: characterise mechanism behaviour on adversarial
  categories; report only on/off comparison and per-seed rates.
  Workload-validity constraints inherited from the v1.7.7 prereg's
  pre-committed escalation (≥3 new categories beyond the existing 10;
  lessons must use vocabulary with <40% Jaccard overlap vs v1.5
  lessons; C2-before-C3 sanity preflight; categories authored BEFORE
  running C3). The N-lattice gate (`mean ∈ [0.05, 0.50]` AND ≥3
  distinct seeds non-zero) inherited from v1.7.7 IS used as a
  **discrimination check on workload validity**, NOT as a magnitude
  claim about the mechanism. Any v1.8 result-doc framing must satisfy
  the `docs/RETRACTION.md` magnitude-smuggling guard. See
  `docs/evals/2026-05-09-v1.7.7-goal-stack-eval-result.md`
  for the constraint set.
```

**Step 2: Commit**

```bash
git -C C:/Users/skf_s/hippo add TODOS.md
git -C C:/Users/skf_s/hippo commit -m "docs(todos): close B3 -10pp magnitude as retracted; reframe v1.8 (v1.7.9)"
```

---

## Task 5b: Pin `docs/RETRACTION.md` magnitude-smuggling guard

**Files:**
- Create: `docs/RETRACTION.md`

**Step 1: Write the file**

```markdown
# Retraction & magnitude-smuggling guard

This doc pins the v1.7.9 retraction of the "−10pp goal-stack late-phase trap-rate lift" magnitude claim and is the guard for any future release (especially v1.8.0 adversarial trap categories) against re-asserting a retracted magnitude under a different name.

## What was retracted

The v0.11.0 informal "78% → 14% over 50 tasks" headline did not reproduce on the formal sequential-learning benchmark across three pre-registered workload variants (v1.7.5 full-late SANITY_FAIL, v1.7.6 budget sweep B*=NULL, v1.7.7 `--restrict-late-to 4` SANITY_FAIL). C2 hippo-base late mean = 0.0% across every seed in every variant.

**The magnitude is RETRACTED. The mechanism is shipped; no magnitude is currently claimed.** See `CHANGELOG.md` v1.7.9 entry for the full retraction.

## What this guards against

Re-asserting the retracted magnitude under a different name. Specifically, any of the following in a future result doc, README, CHANGELOG, RESEARCH/ROADMAP-RESEARCH update, or marketing copy:

- `Δ = ` followed by a percentage-point number on late-phase trap rate
- `Xpp lift`, `Xpp drop`, `≥Xpp`, `−Xpp`, `+Xpp`
- "magnitude" applied to the goal-stack mechanism's effect on trap rate
- A pre-registered numeric pass/fail threshold on a single trap-rate metric
- "Lift" or "improvement" applied to the goal-stack mechanism without explicit "this is workload-validity, not magnitude" framing

## What this does NOT guard against

Legitimate workload-validity gates and discrimination checks are explicitly allowed:

- The N-lattice gate (`mean ∈ [0.05, 0.50]` AND ≥3 distinct seeds non-zero) IS a discrimination check on workload validity. It is not a magnitude claim about the mechanism.
- Per-seed rate reporting on individual conditions (C2, C3) for descriptive purposes.
- Hook failure counts.
- On/off comparisons that report whether the mechanism produced detectable behavioral differences (rather than asserting a specific magnitude).

## Workflow for v1.8 and beyond

Any v1.8.0+ result doc, CHANGELOG entry, or README update touching the sequential-learning benchmark MUST:

1. Reference this `docs/RETRACTION.md`.
2. State explicitly: "This release does not re-assert the retracted −10pp magnitude."
3. If reporting any number that could be read as a magnitude lift, frame it as workload-validity or descriptive characterisation, not as a mechanism-magnitude claim.
4. Pass an outside-voice review on whether the framing satisfies the guard. The v1.7.9 ship chain established this pattern; future releases inherit it.

## When this guard sunsets

This guard sunsets if and only if a future eval produces a discriminating workload (C2 hippo-base late mean within the N-lattice gate band) AND a properly pre-registered hypothesis test at that workload returns SUPPORTED with paired CI lower bound > 0. Until then, the magnitude is retracted, and any future release must satisfy this guard.

## Related documents

- `CHANGELOG.md` v1.7.9 entry (top of file)
- `docs/evals/2026-05-09-v1.7.9-retraction-inventory.md` (literal grep anchor + retraction targets)
- `docs/evals/2026-05-09-v1.7.7-goal-stack-eval-result.md` (last formal eval before retraction)
- `docs/evals/2026-05-09-v1.7.7-goal-stack-eval-prereg.md` (the prereg whose SANITY_FAIL ≠ NOT_SUPPORTED distinction v1.7.9 corrects)
- `README.md` "What's new in v1.7.9" section
- `ROADMAP-RESEARCH.md:158` v1.7.9 status update block
```

**Step 2: Commit**

```bash
git -C C:/Users/skf_s/hippo add docs/RETRACTION.md
git -C C:/Users/skf_s/hippo commit -m "docs: pin RETRACTION.md magnitude-smuggling guard for v1.8+ (v1.7.9)"
```

---

## Task 6: Add forward-pointers to v1.7.5/6/7 eval result docs

**Files:**
- Modify: `docs/evals/2026-05-07-v1.7.5-goal-stack-eval-result.md` (append at end)
- Modify: `docs/evals/2026-05-09-v1.7.6-calibration-result.md` (append at end)
- Modify: `docs/evals/2026-05-09-v1.7.7-goal-stack-eval-result.md` (append at end)

**Step 1: Append to each file (using `(v1.7.9 release)` anchor to disambiguate from same-date v1.7.6/7 update tails)**

```markdown

---

## Update 2026-05-09 (v1.7.9 release) — retraction (forward-pointer)

The −10pp goal-stack lift magnitude tested by this eval is **RETRACTED publicly in v1.7.9**, based on cumulative evidence from three pre-registered workload variants (v1.7.5 SANITY_FAIL, v1.7.6 B*=NULL, v1.7.7 SANITY_FAIL — every C2 hippo-base late mean returned 0% across every seed).

v1.7.9 retracts on cumulative evidence rather than waiting for v1.8. The v1.7.7 prereg's SANITY_FAIL ≠ NOT_SUPPORTED distinction was wrong: three SANITY_FAILs across distinct workload knobs is meaningful negative evidence regardless of formal verdict label. The mechanism (`pushGoal`/`completeGoal` hooks, `--use-goal-stack`, `applyGoalStackBoost`) remains shipped from v1.7.4. **The magnitude is RETRACTED. The mechanism is shipped; no magnitude is currently claimed.** v1.8.0 (queued) explores adversarial trap categories as mechanism characterisation under the magnitude-smuggling guard in `docs/RETRACTION.md`.

See:
- `CHANGELOG.md` v1.7.9 entry
- `docs/evals/2026-05-09-v1.7.9-retraction-inventory.md`
- `docs/RETRACTION.md`
- `README.md` "What's new in v1.7.9"
```

**Step 2: Commit (single commit covering all three files)**

```bash
git -C C:/Users/skf_s/hippo add \
  docs/evals/2026-05-07-v1.7.5-goal-stack-eval-result.md \
  docs/evals/2026-05-09-v1.7.6-calibration-result.md \
  docs/evals/2026-05-09-v1.7.7-goal-stack-eval-result.md
git -C C:/Users/skf_s/hippo commit -m "docs(evals): forward-pointers to v1.7.9 retraction"
```

---

## Task 6b: Edit `docs/plans/2026-04-29-b3-dlpfc-depth.md` (canonical B3 plan)

**Files:**
- Modify: `docs/plans/2026-04-29-b3-dlpfc-depth.md` — verify lines 5/1778/1962 cite "−10pp" (per outside voice A8); prepend retraction header at top of file

**Step 1: Re-grep**

```bash
git -C C:/Users/skf_s/hippo grep -nE "(\-10pp|honestly retire|trap-rate.{0,30}-10pp)" docs/plans/2026-04-29-b3-dlpfc-depth.md
```

**Step 2: Prepend a header block immediately after the existing first heading**

Insert verbatim:

```markdown
> **RETRACTED v1.7.9.** The −10pp goal-stack late-phase trap-rate lift magnitude cited in this plan was retracted publicly in v1.7.9. See `CHANGELOG.md` v1.7.9 entry and `docs/RETRACTION.md`. The mechanism described here is shipped; no magnitude is currently claimed. This plan is preserved as the original B3 design document; do not cite the magnitude from it.
```

**Step 3: Commit**

```bash
git -C C:/Users/skf_s/hippo add docs/plans/2026-04-29-b3-dlpfc-depth.md
git -C C:/Users/skf_s/hippo commit -m "docs(plans): prepend v1.7.9 retraction header to b3-dlpfc-depth plan"
```

---

## Task 7: P2-2 — README ↔ result.md rounding consistency (with raw-data disclosure)

**Files:**
- Modify: `README.md` "What's new in v1.7.7" block ("early=77%, mid=5%" → "early=77.3%, mid=4.5%")
- Modify: `docs/evals/2026-05-09-v1.7.7-goal-stack-eval-result.md` (table cells "77.28%" / "4.50%" → "77.3%" / "4.5%" and matching prose)

**Step 1: Find the inconsistency**

```bash
git -C C:/Users/skf_s/hippo grep -nE "(77%|77\.28%|77\.3%|4\.5%|4\.50%|mid=5)" README.md docs/evals/
```

**Step 2: Standardise to one decimal place — "77.3%, 4.5%" — in both locations**

OLD (README, "What's new in v1.7.7" block):
```markdown
... Adapter not starved (early=77%, mid=5%); the workload is structurally easy in late phase regardless of window size.
```

NEW (README):
```markdown
... Adapter not starved (early=77.3%, mid=4.5%); the workload is structurally easy in late phase regardless of window size.
```

OLD (result.md table + prose, lines around 32-36):
```markdown
| C2 hippo-base | 77.28% | 4.50% | **0.00%** | All 20 seeds at 0% |
...
**Adapter starvation check (post-review P1-6):** NO. Early mean 77.28% indicates active recall-and-miss in the first 11 trap encounters; mid mean 4.50% indicates rapid learning in the middle 10.
```

NEW (result.md):
```markdown
| C2 hippo-base | 77.3% | 4.5% | **0.00%** | All 20 seeds at 0% |
...
**Adapter starvation check (post-review P1-6):** NO. Early mean 77.3% indicates active recall-and-miss in the first 11 trap encounters; mid mean 4.5% indicates rapid learning in the middle 10.
```

**Step 3: Disclosure footer in result.md (raw-data unchanged)**

Append at the end of the result.md "Measured numbers" subsection:

```markdown
> **Display rounding note (v1.7.9, P2-2):** display rounding standardised to one decimal place. Underlying values unchanged in raw JSON at `results/v1.7.7-eval-C2-hippo-base/benchmark-1778313821987.json`. The retraction release does not modify any computed numbers.
```

**Step 4: Commit**

```bash
git -C C:/Users/skf_s/hippo add README.md docs/evals/2026-05-09-v1.7.7-goal-stack-eval-result.md
git -C C:/Users/skf_s/hippo commit -m "docs: standardize v1.7.7 early/mid rounding to one decimal (P2-2, v1.7.9; raw values unchanged)"
```

---

## Task 8: P2-3 — `pairedPermutationCI` docstring tightening

**Files:**
- Modify: `benchmarks/sequential-learning/aggregate.mjs::pairedPermutationCI`

**Step 1: Read current docstring**

**Step 2: Replace docstring with tightened version**

```javascript
/**
 * Paired permutation CI via recentred-percentile sign-flip Monte Carlo.
 *
 * Implementation: 10,000 (default) sign-flip resamples of paired diffs.
 * For each resample, multiply each diff by ±1 (random sign), compute the mean,
 * then read the 2.5th and 97.5th percentiles of the resampled-mean distribution.
 *
 * Reports a recentred-percentile interval, NOT bias-corrected (BCa) — sufficient
 * for the symmetric, bounded paired diffs in this benchmark.
 *
 * For n < 5, returns {ciLow: 0, ciHigh: 0} as a guard against unstable tails on
 * tiny samples; callers must check this case explicitly. Larger n (n >= 10)
 * produces a usable t-band-equivalent interval.
 *
 * @param {number[]} pairedDiffs - paired (treatment - control) values.
 * @param {number} [resamples=10000] - Monte Carlo iterations.
 * @returns {{mean: number, ciLow: number, ciHigh: number, n: number}}
 */
```

**Step 3: Run aggregate tests**

```bash
cd C:/Users/skf_s/hippo
npx vitest run tests/sl-aggregate.test.ts
```

Expected: all aggregate tests pass.

**Step 4: Commit**

```bash
git -C C:/Users/skf_s/hippo add benchmarks/sequential-learning/aggregate.mjs
git -C C:/Users/skf_s/hippo commit -m "docs(aggregate): tighten pairedPermutationCI docstring (P2-3, v1.7.9)"
```

---

## Task 9: P2-4 — `BAND_LOW` / `BAND_HIGH` provenance comment (with SHA verification)

**Files:**
- Modify: `benchmarks/sequential-learning/calibrate.mjs`

**Step 1: Verify SHAs reachable (post-review J2)**

```bash
git -C C:/Users/skf_s/hippo cat-file -e c670ac9 9cd83de
```

If either errors with "missing", surface it and substitute the most recent SHA reachable on `master` for the v1.7.6 plan v2 / `calibrate.mjs` files via `git log --follow`.

**Step 2: Find the constant declarations**

```bash
git -C C:/Users/skf_s/hippo grep -n "BAND_LOW\|BAND_HIGH" benchmarks/sequential-learning/calibrate.mjs
```

**Step 3: Insert provenance comment immediately above the declarations**

```javascript
// P2-4 (v1.7.9): provenance comment for BAND_LOW / BAND_HIGH.
// Pre-registration anchor: v1.7.6 plan v2 (commit c670ac9, 2026-05-07) +
// calibrate.mjs (commit 9cd83de, 2026-05-07).
// Derivation: ±10pp around the v0.11.0 informal headline of 14% late-phase
// trap-rate. The headline magnitude was RETRACTED v1.7.9 (see CHANGELOG and
// docs/RETRACTION.md) based on cumulative evidence from v1.7.5/6/7 (every
// C2 hippo-base late mean returned 0% across every seed across three
// pre-registered variants). The band itself is preserved here for historical
// reproducibility of the v1.7.6 calibration sweep. Future calibration should
// use the v1.7.7 N=4 lattice gate ([0.05, 0.50] AND >=3 distinct seeds
// non-zero) — see analyze-v1.7.7.mjs for the current sanity-gate shape.
```

**Step 4: Verify calibrate tests still pass**

```bash
cd C:/Users/skf_s/hippo
npx vitest run tests/sl-calibrate.test.ts
```

Expected: 11 tests pass.

**Step 5: Commit**

```bash
git -C C:/Users/skf_s/hippo add benchmarks/sequential-learning/calibrate.mjs
git -C C:/Users/skf_s/hippo commit -m "docs(calibrate): BAND_LOW/BAND_HIGH provenance + retraction note (P2-4, v1.7.9)"
```

---

## Task 10: Bump version 1.7.8 → 1.7.9 across 5 manifests

**Files (NEVER use `npm version` — manually Edit each):**

1. `package.json` (root)
2. `openclaw.plugin.json` (root)
3. `extensions/openclaw-plugin/package.json`
4. `extensions/openclaw-plugin/openclaw.plugin.json`
5. `src/version.ts` (`PACKAGE_VERSION` constant)

**Step 1: Edit each manifest from `"1.7.8"` to `"1.7.9"`** (Edit tool exact-match per file).

**Step 2: Sync `package-lock.json`**

```bash
cd C:/Users/skf_s/hippo
npm install
```

**Step 3: Verify no manifest still has 1.7.8**

```bash
git -C C:/Users/skf_s/hippo grep -nE '"version".*"1\.7\.8"' --include='*.json' -- ':!node_modules' ':!package-lock.json'
git -C C:/Users/skf_s/hippo grep -n '1\.7\.8' src/version.ts
```

Expected: no matches in either grep.

**Step 4: Commit**

```bash
git -C C:/Users/skf_s/hippo add \
  package.json package-lock.json \
  openclaw.plugin.json \
  extensions/openclaw-plugin/package.json \
  extensions/openclaw-plugin/openclaw.plugin.json \
  src/version.ts
git -C C:/Users/skf_s/hippo commit -m "chore: bump to v1.7.9 (patch — doc-only retraction; semver decision in plan)"
```

---

## Task 11: Run full test suite

```bash
cd C:/Users/skf_s/hippo
npm run build
npx vitest run 2>&1 | tee /tmp/v1.7.9-vitest.log
```

**Expected:**
- `npm run build`: 0 errors, 0 warnings.
- `npx vitest run`: ALL passing, 0 regressions vs v1.7.8 baseline.

Capture the actual test-pass count from the vitest output footer. This number goes in:
- The Task 10 commit message tail (`chore: bump to v1.7.9 ... — N tests passing`)
- The `/ship-check` output
- The `hippo remember` line in Task 13

If any test fails: STOP, debug, fix, re-run before proceeding.

---

## Task 12: Outside voice on the staged retraction diff (pre-publish)

This is in addition to the pre-execution outside voice (already run on the plan). It catches drift between plan and executed reality.

**Step 1: Stage the diff for review**

```bash
git -C C:/Users/skf_s/hippo log --oneline master..feat/v1.7.9-retraction
git -C C:/Users/skf_s/hippo diff master..feat/v1.7.9-retraction --stat
```

**Step 2: Dispatch one `senior-code-reviewer` agent against the staged diff**

Brief: "Verify v1.7.9 execution matches the plan at `docs/plans/2026-05-09-v1.7.9-retract-10pp-claim.md`. Specifically:
1. All retraction targets in the inventory are actually retracted in the diff (no missed file edits).
2. No 'pending' / 'unsupported pending' / 'untested on a discriminating workload' phrasing leaked back in.
3. No magnitude smuggling via N-lattice gate, 'measurable lift', or similar.
4. The `<details>` block does NOT reproduce 78% / 14% in the rendered HTML.
5. `docs/RETRACTION.md` exists and matches the plan's specification.
6. The version bump hits all 5 manifests, no stragglers at 1.7.8.
7. P2-1 Float64Array is NOT in the diff (deferred to v1.7.10).
8. CHANGELOG entry contains the deliberate-departure-from-prereg paragraph verbatim per plan.
9. GitHub Release retroactive notes are listed for v0.11.0/v0.39.0/v1.7.4/v1.7.5/v1.7.6/v1.7.7 in Task 13.

Report P0/P1/P2/P3 findings only. <=300 words. No fixes — flag only."

**Step 3: Address any P0/P1 findings before proceeding to Task 13**

P0/P1 findings = block /publish-repo. P2/P3 may roll to v1.7.10 with a TODOS line.

---

## Task 13: /self-review → /review → /ship-check → /publish-repo (with retroactive GH-Release notes + dual `hippo remember`)

**Step 1: /self-review on the v1.7.9 changes**

Walk all commits on `feat/v1.7.9-retraction` since branching from `master`. Verify:
- Inventory file matches exactly the verbatim shape committed, with literal grep output embedded (not placeholder).
- README retraction wraps the original table in prose-only `<details>` (no inline 78% / 14%); hero bullet at line 39 retracted; v1.7.5/6/7/8 What's-New blocks each carry the forward-pointer.
- CHANGELOG v1.7.9 entry includes the deliberate-departure-from-prereg paragraph verbatim; v0.11.0 + v1.7.4 entries each carry retroactive `> RETRACTED v1.7.9` notes; no "1480 passing" hardcoded number; "Process note" self-praise NOT in CHANGELOG (moved to commit message).
- ROADMAP-RESEARCH:28, 156, 158 all updated.
- RESEARCH.md:176 updated.
- TODOS old `[ ]` line replaced with both `[x]` retraction line AND new `[ ]` v1.8 mechanism-characterisation line that explicitly disclaims "NO magnitude claim, NO pre-registered ≥Xpp threshold, NO pass/fail decision rule on a magnitude".
- `docs/RETRACTION.md` exists, references v1.8 magnitude-smuggling guard.
- All three eval result docs append the forward-pointer block with `(v1.7.9 release)` anchor.
- `docs/plans/2026-04-29-b3-dlpfc-depth.md` carries the prepended retraction header.
- benchmarks/README.md + benchmarks/sequential-learning/README.md retracted.
- P2-2 rounding has the raw-data disclosure footer.
- P2-3 docstring rewrite preserves function signature.
- P2-4 BAND comment is inline above declarations + cites valid SHAs.
- All 5 manifests at 1.7.9; package-lock.json synced.
- P2-1 Float64Array NOT touched (deferred).

If any drift: fix in a NEW commit (never amend).

**Step 2: /review on the branch (full skill flow)**

Address every P0 / P1 finding before /ship-check. P2 / P3 may roll to v1.7.10 if non-blocking; document in the final v1.7.9 CHANGELOG "Deferred to v1.7.10" tail (currently has only P2-1; append any P2/P3 findings here).

**Step 3: /ship-check**

Output the formal ship-verdict block per skill convention. If verdict is anything other than **"Ship it"**: STOP, fix, re-run.

**Step 4: /publish-repo (with retroactive GH-Release notes)**

- Bump confirmed at 1.7.9 across 5 manifests.
- `npm run build` succeeds; `npx vitest run` passes; capture actual test count.
- Commit chain merged to `master` via `--no-ff`.
- `git tag v1.7.9 && git push origin master && git push origin v1.7.9`.
- `npm publish` — wait for confirmation.
- `gh release create v1.7.9 --title "v1.7.9 — −10pp goal-stack lift retracted" --notes-file /tmp/v1.7.9-notes.md --latest`.
- **Retroactive GH-Release append-only notes** (per outside-voice A10) — for each prior tag, run:

  ```bash
  for tag in v0.11.0 v0.39.0 v1.7.4 v1.7.5 v1.7.6 v1.7.7; do
    gh release view "$tag" --json body --jq '.body' > /tmp/$tag-body.md
    printf "\n\n---\n\n> **RETRACTED v1.7.9** — see release notes for [v1.7.9](https://github.com/kitfunso/hippo-memory/releases/tag/v1.7.9). The −10pp goal-stack late-phase trap-rate lift magnitude does not reproduce on the formal sequential-learning benchmark across three pre-registered workload variants. Mechanism remains shipped.\n" >> /tmp/$tag-body.md
    gh release edit "$tag" --notes-file /tmp/$tag-body.md
  done
  ```

  Verify each: `gh release view v0.11.0 --json body --jq '.body' | tail -5`. Each should now end with the retraction blockquote.

- `npm install -g hippo-memory@1.7.9` then `hippo --version` → `1.7.9`.

- **Dual `hippo remember` (per outside-voice M1):**

  ```bash
  hippo remember "v1.7.9 shipped: pre-emptive -10pp magnitude retraction (cumulative evidence from v1.7.5/6/7), workflow chain followed end-to-end, GH releases for v0.11.0/v0.39.0/v1.7.4/v1.7.5/v1.7.6/v1.7.7 carry retroactive retraction notes" --tags workflow-discipline,retraction
  hippo remember --error "decision precedent: 3 nulls across 3 pre-registered variants triggers pre-emptive retraction even if individual prereg said 'wait for next eval'. The SANITY_FAIL ≠ NOT_SUPPORTED distinction was wrong design; cumulative evidence beats single-verdict label." --tags decision-precedent,prereg-design
  ```

**Step 5: Update plan's Decision log with outside-voice resolutions (per outside-voice N2)**

Before final commit on this branch (or in a follow-up doc commit), append "## Outside voice resolutions (2026-05-09)" subsection to this plan file with item-by-item disposition (accept/reject/defer) for each consolidated finding. Commit as `docs(plans): record outside-voice resolutions on v1.7.9 plan`.

**Step 6: Final report to user**

Brief: branch merged, tag pushed, npm published, gh release created + 6 retroactive retraction notes appended, global install verified, dual hippo memory captured, N tests passing (substitute actual count).

---

## Risk register

| Risk | Likelihood | Impact | Mitigation |
|------|------------|--------|------------|
| Outside voice (Task 12) flags pre-emptive retraction as a pre-reg violation | Low | High | Plan documents the deliberate-departure reasoning in 5 anchored bullets; CHANGELOG entry + ROADMAP status update + TODOS line all repeat it verbatim. Stance: declared deviation, not silent. |
| Reviewer flags `<details>` block as soft retraction | Medium | High | Per D1, `<details>` is prose-only — no inline 78%/14% numbers. Audit trail in `git log` + historical CHANGELOG entry, NOT in rendered HTML. |
| Reviewer flags v1.8 reframing as "magnitude smuggled in via mechanism characterisation" | Medium | High | TODOS line explicitly says "NO magnitude claim, NO pre-registered ≥Xpp threshold". `docs/RETRACTION.md` pinned this release as commit-time guard for v1.8 PRs. Task 12 outside voice on staged diff catches drift. |
| Inventory misses a retraction target | Medium | High | Task 1 uses loosened regex (`78%?.{0,80}14%?`) and embeds literal grep output in the inventory commit. Task 12 staged-diff outside voice cross-checks. |
| `gh release edit` fails on a tag (network / auth / not-latest semantics) | Medium | Medium | Per-tag loop in Task 13 is idempotent; verify with `gh release view <tag> --json body --jq '.body' \| tail -5` after each. If fails, retry; if persistent, document in commit + open issue for follow-up. |
| Test count drift between v1.7.8 (1480) and v1.7.9 actual count | Low | Medium | Per E1, CHANGELOG no longer hardcodes 1480; actual count cited in commit message + ship-check + hippo remember after Task 11 reports it. |
| Pre-commit hook fails on commits | Low | Medium | Per CLAUDE.md "NEVER use `--no-verify`". If hook fails, fix the failure; never bypass. |
| `<details>` doesn't render in npm registry README preview (npmjs.com strips most HTML) | Medium | Low | npm-page reader sees the prose retraction paragraph (which is plain markdown) regardless of whether `<details>` collapses. The retraction headline is in the prose, not the collapsed block. Acceptable. |
| `npm publish` fails npm auth | Low | High | `npm whoami` before /publish-repo; if not logged in, log in first. |
| SHA `c670ac9` or `9cd83de` rewritten / unreachable for the BAND comment | Low | Low | Per J2, Task 9 Step 1 verifies via `git cat-file -e` before applying. |
| Retroactive GH-Release retraction note breaks "latest" or release-feed metadata | Low | Low | `gh release edit` on prior tags does NOT change `--latest`. Only v1.7.9's `gh release create` carries `--latest`. Verify post-edit. |

---

## Decision log

This plan deliberately departs from the v1.7.7 pre-reg in one specific way: it triggers retraction BEFORE v1.8 runs, on cumulative evidence rather than a single NOT_SUPPORTED verdict.

**Justification (committed in plan + CHANGELOG):**
1. Three nulls across three pre-registered workload knobs is informative without v1.8.
2. The v1.7.7 prereg's SANITY_FAIL ≠ NOT_SUPPORTED distinction was wrong: three SANITY_FAILs across distinct knobs is meaningful negative evidence.
3. Decoupling protects against v1.8 timing slip.
4. CLAUDE.md "Honest Reporting" requires plain framing of nulls; v1.7.7 framing ("pending", "untested on a discriminating workload") was an escape hatch.
5. v1.8 still runs as planned; retraction is independent of v1.8 outcome.

**What this plan does NOT do:**
- Does NOT retract the mechanism (still shipped).
- Does NOT retract the benchmark (still shipped).
- Does NOT cancel v1.8 (queued, reframed as mechanism characterisation under `docs/RETRACTION.md` guard).
- Does NOT silently delete or memory-hole the original 78%→14% numbers (preserved in `git log v0.11.0` + historical CHANGELOG entry; NOT in rendered HTML).

**Outside voice resolutions (to be appended after Task 13 Step 5):**
- Pre-execution outside voice (Task 0, run 2026-05-09): senior-code-reviewer × 2 (in-house + adversarial). 27 consolidated findings; all P0 + most P1 accepted; P1 G1 (Float64Array deferral) accepted. Full disposition table to be appended at Task 13 Step 5.
- Pre-publish outside voice (Task 12): senior-code-reviewer on staged diff. P0/P1 findings block /publish-repo.

---

## Time budget

- Task 1 (inventory + literal grep capture): ~15 min doc work.
- Task 2 (README hero + retraction wrapper + 4 What's-New forward-pointers + new What's-New): ~25 min.
- Task 2b (benchmarks/README + benchmarks/sequential-learning/README): ~15 min.
- Task 3 (CHANGELOG v1.7.9 + retroactive notes on v0.11.0/v1.7.4): ~25 min.
- Task 4 (ROADMAP-RESEARCH 28/156/158): ~10 min.
- Task 4b (RESEARCH.md:176): ~5 min.
- Task 5 (TODOS B3 lines): ~10 min.
- Task 5b (docs/RETRACTION.md): ~15 min.
- Task 6 (3 eval forward-pointers): ~10 min.
- Task 6b (b3-dlpfc-depth retraction header): ~5 min.
- Task 7 (P2-2 rounding + disclosure): ~10 min.
- Task 8 (P2-3 docstring): ~5 min.
- Task 9 (P2-4 BAND comment + SHA verify): ~10 min.
- Task 10 (version bump + verify): ~10 min.
- Task 11 (test suite): ~3 min subprocess.
- Task 12 (staged-diff outside voice): ~10 min subprocess.
- Task 13 (ship chain + 6 retroactive GH-Release edits + dual hippo remember + decision log update): ~45 min.
- **Total wall time: ~3.5 hours.**

---

## Pre-registration commit ordering (CRITICAL — workflow chain holds)

1. Branch: `feat/v1.7.9-retraction` from `master`
2. Task 1 — inventory (with literal grep) → commit
3. Task 2 — README retraction → commit
4. Task 2b — benchmarks READMEs → commit
5. Task 3 — CHANGELOG v1.7.9 + retroactive notes → commit
6. Task 4 — ROADMAP-RESEARCH 28/156/158 → commit
7. Task 4b — RESEARCH.md:176 → commit
8. Task 5 — TODOS B3 → commit
9. Task 5b — docs/RETRACTION.md → commit
10. Task 6 — eval result-doc forward-pointers → commit
11. Task 6b — b3-dlpfc-depth header → commit
12. Task 7 — P2-2 rounding → commit
13. Task 8 — P2-3 docstring → commit
14. Task 9 — P2-4 BAND comment → commit
15. Task 10 — version bump → commit
16. Task 11 — test suite passes (no commit; verification only)
17. Task 12 — staged-diff outside voice (no commit; gating only)
18. Task 13 — `/self-review` → `/review` → `/ship-check` → `/publish-repo` (+ retroactive GH-Release notes + dual `hippo remember` + decision-log update)

14 atomic commits on `feat/v1.7.9-retraction` + decision-log update commit. Merge to `master` via `--no-ff` after `/ship-check` returns "Ship it".

---

## Deferred to v1.7.10

- **(P2-1) `Float64Array(1 << n)` micro-opt** in `analyze-v1.7.7.mjs::exactPairedPermutationCI`. Behavior-changing micro-opt deferred per outside-voice G1 to keep the v1.7.9 retraction release doc-only and audit-clean. Standalone v1.7.10 perf patch.
- Task 12 staged-diff outside voice returned **CLEAN** with zero findings — nothing to defer.

---

## Outside voice resolutions (2026-05-09, post-publish appendix)

### Pre-execution outside voice (Task 0)

Two parallel `senior-code-reviewer` agents run on the v1 plan: in-house arch critique + adversarial cross-model proxy. **27 consolidated findings**: 13 P0, 9 P1, 3 P2, 2 P3. All accepted into the plan v2 before execution. Disposition:

| Group | Items | Disposition |
|-------|-------|-------------|
| A. Missed retraction targets | A1-A9 | **Accepted all** — added README:39 hero, benchmarks/README, benchmarks/sequential-learning/README, RESEARCH:176, ROADMAP-RESEARCH:28, CHANGELOG:120 + ~1327, b3-dlpfc-depth header, GH-Release retroactive notes. |
| B. Soft-retraction language | B1-B3 | **Accepted all** — dropped "pending" verbatim; named the prereg-distinction-was-wrong departure honestly; replaced "more conservative than required" rhetoric. |
| C. v1.8 magnitude smuggling | C1-C3 | **Accepted all** — TODOS rewritten with explicit "NO magnitude claim" disclaimers; N-lattice gate framed as workload-validity not magnitude; `docs/RETRACTION.md` pinned as commit-time guard. |
| D. README `<details>` headline leak | D1 | **Accepted** — `<details>` body is prose-only; specific 78%/14% numbers archived in git, not rendered HTML. |
| E. Test count unverified | E1 | **Accepted** — CHANGELOG no longer hardcodes "1480"; actual count cited in commit message + ship-check. |
| F. Semver decision unstated | F1 | **Accepted** — added Semver decision subsection: 1.7.9 patch (no API/behavior change). |
| G. P2 polish in retraction release | G1, G2 | **G1 accepted (defer P2-1 Float64Array to v1.7.10); G2 kept with raw-data disclosure.** |
| H. Audit-trail timing collision | H1 | **Accepted** — forward-pointers anchored as `## Update 2026-05-09 (v1.7.9 release)`. |
| I. Workflow gap pre-publish | I1 | **Accepted** — Task 12 staged-diff outside voice added; ran clean. |
| J. Edit-time risks | J1, J2, J3 | **All accepted** — grep regex loosened, SHAs verified via `cat-file -e` (both reachable), Float64Array Step 0 moot since deferred. |
| K. CHANGELOG self-praise | K1 | **Accepted** — Process note dropped from CHANGELOG; in commit message only. |
| L. Inventory shape | L1 | **Accepted** — literal grep output embedded in inventory commit. |
| M. Hippo-memory record | M1 | **Accepted** — dual `hippo remember` (success + decision-precedent). |
| N. Risk register gaps | N1, N2 | **N1 accepted** as risk-register row; **N2 accepted** (this subsection). |

### Pre-publish staged-diff outside voice (Task 12)

One `senior-code-reviewer` against `feat/v1.7.9-retraction` (15 commits, 22 files). Verdict: **"Clean. No findings. /publish-repo authorised."** All 13 plan-match criteria + non-negotiables satisfied.

### Ship outcome (2026-05-09)

- Branch merged to master via `--no-ff` (commit `727cc9f`).
- Tag `v1.7.9` pushed.
- npm: `hippo-memory@1.7.9` published.
- GitHub Release: `https://github.com/kitfunso/hippo-memory/releases/tag/v1.7.9` (latest).
- Retroactive retraction notes appended to GH Releases for v1.7.4/v1.7.5/v1.7.6/v1.7.7 (v0.11.0/v0.39.0 had no GH Release pages — retraction covered via CHANGELOG retroactive notes + ROADMAP-RESEARCH + B3 plan header).
- Global install: `hippo --version` → `1.7.9` ✓.
- Tests: 1480 passing, 2 skipped, 0 failed, 0 regressions vs v1.7.8.
- Dual `hippo remember`: workflow-discipline + decision-precedent entries captured.
