Files
solution-erp/docs/changelog/sessions/2026-07-13-S115-presence-not-age-adopt.md
pqhuy1987 88bd8e666d [CLAUDE] Docs: S115 presence-not-age adopt closeout (STATUS/HANDOFF/session-log/synthesis/WAL)
Session-end closeout for S115 (AI_INFRA presence-not-age selector guardrail +
rec-3 hmw.js STOP-HARD, shipped 81b59f0, CI #385 PASS). STATUS + HANDOFF
mega-line blurb, session-log, ensemble-synthesis (closes H10/HCV gate), WAL
reset to clean template. No canonical-count change (Mig 65 / 89 tables / 486
tests / gotcha 81). Owner backfill target 210K + reviewer/cicd harvest already
in 81b59f0. §5.0 squashed the trailing wal: flush.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-13 13:01:14 +07:00

5.1 KiB
Raw Blame History

S115 (2026-07-13) — Adopt AI_INFRA presence-not-age selector guardrail + rec-3 hmw.js STOP-HARD

Type: governance/tooling adoption (0 product code — no src/, no fe-*, no tests/). Lead: Opus 4.8 (1M) Max (Fable outage). HMW-mode: ON. Commit: 81b59f0 (pushed) + closeout. CI: Run #385 PASS 5m23s, bundle FROZEN.

What & why

AI_INFRA published two items dated 2026-07-13: a directed approval (6c32df89 — approves SE's H-22 + H-21/MTv3 reports at VERIFIED; SE = first-in-fleet full H-22) with rec-3, and a broadcast (ab6c387e, type=update) "presence-not-age selector guardrail" asking each project to re-verify only the selector of its memory refine-step against a 3-point function-floor. Owner directed the full rigorous pipeline.

Pipeline (H21 engine-đắt, owner-directed)

/check-email AI_INFRA (2 new pulled + hash-verified 6c32df89b60a) → /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, H21 3-heading) → /fable-real reviewer single deep-pass (spec-review-fable-real.md) → PASS-WITH-FIXES (0C/2M/5m) → owner scope-decision ALL-3 (AskUserQuestion) → HMW execute (em-main solo, governance single-writer D9) → adap-report + email → commit + push → CI verify.

🎯 fable-real earned its keep: the 5-lane ensemble converged confidently, but all 5 missed M2 — a real contiguity-inversion bug in em-main's D3 pseudocode (a naive "skip protected entry" on the archive-gate's contiguous top-prefix byte-cut would leave the entry ABOVE the cut → still archived while the code believed it excluded = silent inversion). The independent deep-pass caught it. Breadth (N lanes) vs depth (1 adversarial pass) — the deep-pass catches consensus-shared blind-spots. Also M1 (D2 acceptance grep too narrow).

Deliverables (all verified)

  • D2 (MUST) — hmw.js fail-soft → up-front STOP-HARD. Unknown non-empty role (typo/rename-drift) → throw in an up-front validation pass BEFORE parallel() (a per-lane throw could be swallowed to null by results.filter(Boolean) = STOP-SILENT, worse). Preserves the legit null/''/omitted role-less inherit-lead path (H6.2). Acceptance: node --check exit 0 + stub 7/7 (typo→throw naming #i; null/''/omitted→no-throw; all-12-valid→no-throw). Doc-sync 5 live lines (ultra-on:21/26, README:208, harness-11-engine:348, runbook:520); session-start correctly untouched; 3 adap-reports + S56 parenthetical + the 🧊 saga note = frozen history.
  • D3 (SHOULD) — memory-archive-gate.ps1 value_protect advisory-flag → pre-selection HARD-SKIP. Value-marked LOGICAL entries (heading-only spans, ----robust) partitioned OUT of the movable pool BEFORE the size-drain; non-contiguous per-entry byte accumulation (the M2 fix); value-floor WARN. Acceptance (fault-injection): protected-big-at-top NOT drained (afterEst 986>850 vs old ~169); permutation-invariant (1029==1029); value-floor fires; DRY-RUN preserved; A7 untouched. Real regression: 12 subs render, A7 242/242, exit 0.
  • D1 (MUST) — reinject-ledger.md re-verify stamp + 3 honest-notes + BUILD-GAP disclosure. governance-detectors 0 new HIGH.

Verdict (the broadcast's re-verify)

  • (i) reinject-by-absence = COMPLIANT (floor-rot = coverage-gap, not age; CG-1 = rate-limiter not age-rank).
  • (iii) MFE age-band = COMPLIANT (print-only flag, no consumer, STATUS-gated denominator).
  • (ii)+(iii) archive-gate = RED-FLAG → HARDENED (D3).
  • Honest: D3 = defense-in-depth codify, NOT leak-closure (9-token grep unchanged → spine/paraphrase leak remains; em-main value-scan stays the guarantee). Reinject per-item-L1-presence detection stays PARTIAL (BUILD-GAP).

Other

  • Owner-directed: crystallized_backfill.target 0 → 210K (budget.json); planner confirms expected_backfill 210K fits headroom 253.7K. Honest caveat recorded (file-floor headroom = upper bound; ~44K left for task-context worst-case).
  • RAG-down at bootstrap (§2.3): list_projects 0-chunks across all collections = gotcha #14 down-artifact (Qdrant off after reboot, corpus intact). AI_INFRA restored it (their domain, §I1); SE flags + defers. Recorded in feedback_aiinfra_charter_v2 (don't run rag-infra.ps1 — positional syntax note).
  • #53 return-garble ×2 (fable-clone lane-4 Part B → recovered from sub-reviewer-4.md; cicd #385 → recovered em-main-solo curl + diary). 0 work lost. Cumulative ~×19.
  • 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).
  • H22 dogfood: the Stop-hook auto-committed run-trace + agent-memory as wal: flushes between turns; §5.0 reset --soft squashed this-session's trail into one [CLAUDE] commit (no pushed-history rewrite).

State (unchanged — governance-only)

Mig 65 · 89 tables · 486 tests · gotcha 81 · menu 54 · bundle admin D51OYyGV / user BVdssm5S · prod 37 NCC / 17 user. No new User-Mark (codify-only, applies existing RC-…10-29-11).