# adap-report — presence-not-age selector guardrail + rec-3 STOP-HARD (SE, S115)

- **Broadcast:** `2026-07-13-Governance-adap-update-presence-not-age-reinject` (body-hash `ab6c387e`, type=**update**) + directed `2026-07-13-ai_infra-to-se-approve-h22-h21mtv3-and-presence-notify` (body-hash `6c32df89`, rec-3).
- **Self:** `se` · **Session:** S115 (2026-07-13) · **Lead:** Opus 4.8 (1M) Max (Fable outage).
- **Verify:** whole-file + body-hash MATCH (`6c32df89b60a`, directed) — pulled to `broadcasts/inbox/`.
- **Pipeline (H21 engine-đắt):** `/fable-clone reviewer` 5-lane ensemble (`wf_b621aac4-f0b`) → lead verify+synthesize → spec `runs/2026-07-13-presence-not-age-adopt/spec-…-13-07-2026.md` → `/fable-real reviewer` deep-pass (`spec-review-fable-real.md`, PASS-WITH-FIXES 0C/2M/5m; M1+M2 applied) → owner scope-decision **ALL-3** (AskUserQuestion) → HMW execute (em-main solo, governance single-writer).

## Re-verify verdict (the broadcast asks: re-verify the selector only)

| Floor | Verdict | Evidence |
|---|---|---|
| **(i) reinject by ABSENCE** | ✅ **COMPLIANT (no change)** | `reinject-ledger.md:12` floor-rot = `"ĐÃ-từng-ở-L1 ∩ CÒN-giá-trị ∩ RỚT-khỏi-L1"` (coverage-gap). CG-1 `reinjected` col = reinject-event rate-limiter/loop-breaker (≤1 per N=3), NOT age-rank → broadcast (iii) carve-out. |
| **(iii) MFE age-band** | ✅ **COMPLIANT (no change)** | `mfe-eval.ps1` `$oldN` = `Write-Host`-only, no downstream consumer; denominator STATUS-gated. Drop-date test: changes a diagnostic count only. |
| **(ii)+(iii) archive-gate** | ⚠️ **RED-FLAG → HARDENED** | `memory-archive-gate.ps1` PASS-1 drained oldest-by-position (age-proxy) with `value_protect` advisory-only → tripped the (iii) self-check. **Fixed:** value_protect promoted advisory-flag → **pre-selection HARD-SKIP** (value-primary; heading-only logical spans; non-contiguous per-entry byte accumulation) + value-floor WARN. |
| **Part B (directed rec-3)** | ⚠️ **NEEDS-FIX → DONE** | `hmw.js` unknown-role fail-soft-WARN → up-front **STOP-HARD throw** (before `parallel()`; preserves null/'' role-less path) + 5 live-doc sync. |

## Acceptance evidence (fault-injection, not happy-path)
- **D2 hmw.js:** `node --check` exit 0; stub 7/7 (typo→throw naming `#i`; `null`/`''`/omitted→**no throw** = role-less preserved; all-12-valid→no throw). Doc-sync: bare-token `default subagent` grep across 4 live docs → every hit synced-STOP-HARD or frozen-🧊-history (fable-real M1 fix: narrow regex false-PASSed `ultra-on:21` "cảnh báo" + `README:208`). `session-start.md` correctly untouched (no fail-soft rule there).
- **D3 archive-gate:** temp-tree `-RepoRoot` fixtures → protected-big-at-top NOT drained (`afterEst 986 > 850`; old would give ~169); permutation-invariant (`1029==1029`); value-floor WARN fires; DRY-RUN preserved (0 mutated); A7 PASS-2 untouched. Real-data regression: 12 subs render, A7 242/242, exit 0.
- **D1 reinject-ledger:** add-only stamp; `governance-detectors.ps1` 42 flags (0 new HIGH vs baseline).

## Tailored / SKIP (honest)
- **SKIP as over-engineering (lane-5 + fable-real m2):** did NOT rewrite the reinject predicate (compliant), did NOT remove `keep_floor`/`value_protect`/mfe-age-band (all legitimate: recency-PROTECT-floor + value-gate + surfacing-flag). D3 = bounded reorder, no value-SCORING system.
- **Alias-sync N/A for SE:** `/fable-real` (single) vs `/fable-clone` (ensemble) = deliberate H21 depth-toggle, not a conversational-vs-ensemble alias pair. No SE conversational alias to remove.
- **No new User-Mark:** applies existing mark `RC-…10-29-11` (age=false-proxy) to the selector layer; codify-only (like H16/H17/H18).

## 3 honest-notes (broadcast §5 — kept in `reinject-ledger.md` + `budget.json`)
1. Basis = ONE occurrence already fixed elsewhere → **proactive-prevention**, not a spreading SE incident.
2. **SPECIFIC-APPLICATION**, not a new rule — SE was already presence/flag-based on 2 of 3 floors; only archive-gate needed hardening.
3. Floor = **FUNCTION not FORM** — implemented in SE's own script shape; no hub structure copied.

## Honest caveats (no overclaim)
- **D3 is defense-in-depth codify, NOT leak-closure:** the 9-token value grep is unchanged, so the spine/paraphrase leak (a high-value entry lacking any literal token) REMAINS; em-main value-scan of the whole proposed set stays the true guarantee. Hard-skip makes the DEFAULT value-first (structural), not the leak-eliminator.
- **D2 swallow-to-null premise = inference** (`parallel()` is a Workflow-runtime builtin, not in-repo); up-front validation chosen for halt-independence, robust under both truth-values.
- **Reinject per-item-L1-presence detection stays PARTIAL** (BUILD-GAP disclosed in-ledger) — MFE age-band counts present marks, not per-item drops.

## Meta
- **#53 return-garble ×1** (fable-clone lane-4 Part B) → recovered from `sub-reviewer-4.md` (WRITE-lane garble ≠ lost work; 0 work lost).
- **fable-real earned its keep:** caught **M2** (a real contiguity-inversion bug in em-main's D3 pseudocode) that the 5-lane ensemble missed.
- **AS-10 residual:** `reviewer/MEMORY.md` self-written by the fable-real Agent-spawn → git-diff backstop caught, em-main verified faithful → KEPT (convention-not-mechanism, consistent with S95/S101).
