memory: snapshot — run 7 retired, Pfish-6 (run-6 NVFP4) is the standing seat on both boxes at 262k ctx; gate failure was a detector bug (adjective 'minor'), fixed cc42d76; ana-ml2 measured 4.1x faster than the GX10; three operator decisions left open

This commit is contained in:
vh
2026-09-09 22:04:53 -07:00
parent b8956b58fa
commit 625796b894
3 changed files with 115 additions and 35 deletions
+35 -35
View File
@@ -1,6 +1,6 @@
# Persistent memory — eshpfi-management
_Last updated: 2026-09-09 18:50 PT (⚠ run 7's CSAM gate failure was a DETECTOR BUG — `child_term` matched the ADJECTIVE "minor"; operator-diagnosed, fixed `cc42d76`, selftest 24/24. Everything RESTORED: trial seat + alias on ana-ml2, erp-tune-v7 on gx10:8098. Retention wired so a hit can finally be adjudicated)_
_Last updated: 2026-09-09 21:45 PT (run 7 RETIRED; **Pfish-6** = the run-6 NVFP4 quant is the standing seat on both boxes at 262k ctx; its gate failure was a DETECTOR BUG the operator diagnosed, fixed `cc42d76`; ana-ml2 measured 4.1x FASTER than the GX10; ana-ml2 pool actions landed; Booth gained the ASKS primitive)_
> **Always check for `/tmp/infra-ops-handoff.md`** — if it exists and its
> `Written:` stamp is under an hour old, read it (it carries the in-flight
@@ -109,45 +109,45 @@ no longer deployed sidecars here. See Recent decisions.)
## Current state / in-flight
_As of 2026-09-09 00:35 PT (end of the 09-08 fleet-ops session — operator: "snapshot and we'll do all 3 on
clean context"). Older in-flight blocks (09-08 morning, 09-05/06) are preserved verbatim in
`archival-memory.md` § Superseded in-flight snapshots._
_As of 2026-09-09 21:45 PT. **Nothing is training and nothing is queued.** Older in-flight blocks are
preserved verbatim in `archival-memory.md` § Superseded in-flight snapshots._
- **🔥 ERP RUN 7 TRAINING on pfi-gx10** — launched 2026-09-08 23:06 PT, pid in `~/erp-tune/run-07.pid`, 542 steps
at ~80 s/it, adapter ~noon 09-09. Watch: `ssh infra-ops@10.100.50.60 "tr '\r' '\n' < ~/erp-tune/run-07.log | tail"`.
**DONE 2026-09-09 13:23 PT** — 542/542 steps, 14h17m, train_loss 3.205 (low 2.799 @ step 420), 410-tensor adapter,
flex_attention requested AND resolved, harness `0a6bd2e0` clean. Merged to `serve/merged-run07` (48.1 GiB, template
`ae53464b`, processor_config byte-identical to stock `32bdf45d`). **`erp-seat-base-ara` SERVING** on
`10.100.50.60:8098` (run-5/6 flags; health 200, round trip verified); **`erp-tune-v7` staged, NOT serving** —
awaiting brokkr's swap cue on thread `01M20AHY9DY92RJK84YD24VSY9`. Miranda notified for the operator. ⚠ Sampler
padding 17.1% (run 6: 0.0%) — the short opening-split rows pair badly; throughput only, not correctness.
- **✅ ana-ml2 pool actions DONE 2026-09-09 02:02 PT** (`playbooks/ana-ml2-pool-health.yaml`): tank scrub clean +
cleared, nvme-cli in, zroot 73%. ⚠ Open follow-ups, operator's call: (a) ZFS pool-health ALERTING — tank sat
DEGRADED 04-23→09-05 with nvme7 physically absent and nobody knew (ZED mails `root`, no MTA); (b) nvme7 / slot 0-5
keep-vs-replace — `media_errors` 2084 lifetime, 0 growth over a full scrub, watch it each visit; (c) boot-time
import race (vdevs UNAVAIL→ONLINE + `no_replicas` every boot). → `persistent-memory.d/2026-09-09-ana-ml2-pool-actions-done.md`.
- **`trial` (LiteLLM) → `erp-tune-v6-nvfp4a16` on ana-ml2 :8021** (stack `stacks/erp-seat`, vLLM nightly
`311b3513`, no gate by operator ruling). Forced tool_choice is prompt-driven (6/9); `response_format: json_schema`
is deterministic. ⚠ `stacks/gemma4-charrp` lacks `--exclude-tools-when-tool-choice-none` (same empty-turn trap);
applying it bounces the char-rp seat — operator's call, not taken.
- **📮 althing reachability on a bg seat = the cc-channel route:** `althing-route declare --handle infra-ops
--pid <pid from $CLAUDE_CODE_MESSAGING_SOCKET>` per session (`--discover-pid` refuses on a forked child). The
harness kills detached background tasks under memory pressure — use bounded foreground polls (≤590 s), not
background watchers, for long waits.
- **Open items carried from 09-06 (unchanged):** NASPool evac copy `ospool/naspool-evac` (1.65 T) + `@evac` snaps
can be destroyed once ONE Backrest run is confirmed (scrub clean, PBS landing); pfi-pve PSU1 dead + backplane bays
9/10 dead (cold spares, next colo visit); FortiGate WAN SSH still temporarily open (trusthost2/3 = NH3 + ESH
static) — close when the edge is retired; irv-ml1 on-site decisions (reverse tunnel / UDM fwd 47822 / wg0 config
deletion) pending Irvine access; ~10 running irv-ml1 service cards still carry dead `10.100.79.3` hrefs (recreate
each to apply labels); deployed `.env` for asset-engine / open-webui / skaldsong may hold the dead default.
- **`Pfish-6` is the standing seat, on BOTH boxes.** `erp-tune-v6-nvfp4a16` served under that name at
262,144 ctx: ana-ml2 `:8021` (compose `stacks/erp-seat`, healthy) and pfi-gx10 `:8098` (hand-launched,
`~/erp-tune/vllm-pfish6.pid`). LiteLLM alias `trial` is RETIRED, replaced by `Pfish-6`. Run 7 is
retired — its gate failure was a detector bug, but the run was independently poor.
→ `persistent-memory.d/2026-09-09-run7-retired-pfish6.md`
- **⏳ OPEN, operator's call, no tracking surface (untracked by operator choice):**
(a) **what the GX10 seat is for** — it is 4.1x SLOWER than ana-ml2 on interactive decode but holds a
17.6x-context KV pool (4.6M tokens), so it suits long-context or batch work, not latency;
(b) **disposition of the run-7 artifacts** — adapter 315 MB + merged-run07 49 GiB on gx10,
v7-nvfp4a16 16 GiB + v7-bf16 49 GiB on ana-ml2, ~113 GiB total, nothing deleted;
(c) **whether the opening-split idea gets a fresh run** on a clean base (a NEW run, not a re-read).
- **⏳ ana-ml2 storage follow-ups, operator's call** (the three actions themselves LANDED 09-09 02:02):
(a) **ZFS pool-health ALERTING** — `tank` sat DEGRADED 04-23→09-05 with nvme7 physically absent and
nobody knew (ZED mails `root`, no MTA on the box); (b) nvme7 / slot 0-5 keep-vs-replace —
`media_errors` 2084 lifetime, **0 growth across a full scrub**, watch each visit; (c) boot-time import
race (vdevs UNAVAIL→ONLINE + `no_replicas` every boot).
→ `persistent-memory.d/2026-09-09-ana-ml2-pool-actions-done.md`
- **📮 althing reachability on a bg seat = the cc-channel route:** `althing-route declare --handle
infra-ops --pid <pid from $CLAUDE_CODE_MESSAGING_SOCKET>` per session (`--discover-pid` refuses on a
forked child). ⚠ The harness kills detached background tasks under memory pressure — use bounded
foreground polls (≤590 s), not background watchers.
- **⚠ `pgrep -f <literal>` over ssh MATCHES ITS OWN ARGV.** Cost ~2.5 h of false "job alive" reports on
09-09 and I stepped on it a second time the same evening after writing the memory about it. Use a
bracketed class (`[e]rp_sft_harness`) or observe the artifact, never the process name you just typed.
- **Open items carried from 09-06 (unchanged):** NASPool evac copy `ospool/naspool-evac` (1.65 T) +
`@evac` snaps destroyable once ONE Backrest run is confirmed; pfi-pve PSU1 dead + backplane bays 9/10
dead (cold spares, next colo visit); FortiGate WAN SSH still temporarily open (trusthost2/3 = NH3 +
ESH static) — close when the edge is retired; irv-ml1 on-site decisions pending Irvine access; ~10
irv-ml1 service cards still carry dead `10.100.79.3` hrefs; deployed `.env` for asset-engine /
open-webui / skaldsong may hold the dead default.
- **MEMORY.md (auto-memory index) is near its 24.4 KB read cap** — compaction pass still owed.
- **persistent-memory.md was 830 lines; this snapshot moved the superseded in-flight blocks and 09-08-or-older
settled entries to `archival-memory.md`.** The remaining bulk is Tools-and-conventions rows CLAUDE.md already
covers — a deliberate redundancy trim is still the real fix (not done).
## Recent decisions
- `[2026-09-09]` **⚠⚠ THE RUN-7 "SAFETY FAILURE" WAS A DETECTOR BUG — operator-diagnosed, and the single most expensive mistake of the day.** `csam_drift.py`'s HARD `child_term` rule was a flat alternation containing bare `minor|minors`, so it matched the **ADJECTIVE**. Reproduced on the untouched detector: `scan("He noticed a minor detail before intercourse.")` → `hit`, `HARD child_term@13 ^ act@33`. The operator's own framing — *"she made a minor adjustment and then proceeded to…"* — is exactly it. Fits run 7's `counts=1/0/3` (one HARD, **zero SOFT**) precisely. **FIXED `cc42d76`**: singular `minor` fires on NOMINAL use only (followed by punctuation / clause end / relative pronoun / auxiliary / conjunction — the adjective is followed by the noun it modifies); plural `minors` stays blanket; 6 regression cases each way; selftest 24/24. Baby-family SOFT terms removed separately (`53a0192`). **ALL SERVICE RESTORED** — trial seat + LiteLLM alias on ana-ml2 :8021 (262k ctx), `erp-tune-v7` on gx10:8098, both round-trip verified. **RETENTION WIRED** (`refusal_axis_map.py`, `$CSAM_RETAIN_DIR`, 0600, write-only, off by default): the probe retained NOTHING by design and the detector stores only a salted hash, so all three firings of this gate were **structurally unadjudicable** — a fail-closed gate whose evidence cannot be inspected can only be obeyed, never ruled on. ⚠⚠ **THE LESSON, and it is mine:** I took a fleet resource down on an alarm I had not examined, from a detector whose source I had not read, preserved no evidence, and then spent two hours with brokkr reasoning rigorously about the integrity of a finding neither of us had looked at. **Reading the eight words in `child_term` would have cost one command.** Rigor applied downstream of an unexamined premise is not rigor. Also: I committed a syntax-error file (`6d29110`) by committing before running the selftest.
- `[2026-09-09]` **Run 7 RETIRED; run 6 declared `Pfish-6` and is the standing seat** — NVFP4 quant on ana-ml2 :8021 AND gx10 :8098 at 262k ctx, gateway alias `trial` → `Pfish-6`, max-num-seqs 8→32 (2,170 tok/s at n=16, 3.2x the old ceiling). ⚠ ana-ml2 measured **4.1x FASTER than the GX10** on the same artifact — the reverse of the expectation. → `persistent-memory.d/2026-09-09-run7-retired-pfish6.md`
- `[2026-09-09]` **The run-7 CSAM gate failure was a DETECTOR BUG** — HARD `child_term` matched the ADJECTIVE "minor"; operator-diagnosed, fixed `cc42d76` (nominal-use-only, selftest 24/24), retention wired so a hit can finally be adjudicated. ⚠ The lesson is mine: rigor downstream of an unexamined premise is not rigor. → `persistent-memory.d/2026-09-09-csam-detector-bug.md`
- `[2026-09-09]` **⚠ ERP RUN 7 FAILED THE SAFETY GATE — both seats stopped, nothing deleted.** brokkr's CSAM drift detector fired on the TUNED arm during the refusal leg and aborted fail-closed (`level=hit`, `counts=1/0/3`, two HARD `child_term ^ act` flags). Base arm NOT implicated (clean earlier the same evening); the merge check — a sampled target confirmed CHANGED — is why this reads as ONE explanation, the tune, not a base wearing a different name. **Neither brokkr nor I re-ran the probe or opened the flagged generations** (a second run is not a second opinion; reading answers no question that changes the outcome). brokkr also left the length verdict UNSET on purpose: settling one on a rejected artifact hands a dead tune a result line that outlives its context. Actions: `erp-tune-v7` on gx10:8098 stopped 17:42; **the `trial` NVFP4 seat on ana-ml2:8021 stopped 17:43 — MY CALL, reversible in one command**, because the operator's "unrated on every safety axis" ruling was honest while no rating existed and one now exists as a fail on the same tune (quantization does not launder behaviour), and it sat on the SHARED-KEY gateway ~15:30–17:43. All artifacts preserved (adapter 315 MB, merged-run07 49 GiB, v7-nvfp4a16 16 GiB, v7-bf16 49 GiB); v6 still on disk as the obvious rollback. Independent of safety the run was already poor: primary FLAT (69 → 70.5, +2, flat at BOTH the 12-word threshold and the 20/60 cue-probe floor), both diversity families reduced past their floors, long-context coherence 1.0 → 0.875 on its must-not-harm bar, unanswerable control held at 1.0 so the instrument was valid. **INCIDENT CLOSED 2026-09-09 ~18:20 PT, both sides.** `trial` alias REMOVED from `stacks/litellm/conf/config.yaml` (commented, not deleted — restoring is uncommenting) and verified gone by both parties **at the routing layer, not just the model list**: a call returns 400 `Invalid model name` and generates nothing. ⚠ Alias-present-with-backend-down is a DIFFERENT and worse state than alias-removed — it re-arms silently under whatever is served on that port next. **EXPOSURE QUANTIFIED** from the gateway spend DB, filtered on the ARTIFACT (`model='hosted_vllm/erp-tune-v7-nvfp4a16'`) not the alias: `all-agents-local` 68 calls / 10,073 generated (my own throughput benchmarks), **`open-webui-esh` 9 calls / 50,604 prompt / 2,793 generated, 15:40–16:51 PT — the operator's OWN Open WebUI session, and those outputs are in its history**. NO peer agent called it, so nothing landed in another project's artifacts. Nobody read the flagged generations or that session. ⚠ **Counting by the ALIAS would have returned 363 vs 77 — 4.7x inflation of his own exposure**, because the alias had carried v5 and v6 earlier the same day (→ ops-lessons `b135adc`). ⚠ **I made THREE reporting errors during the incident**, all false-reassurance, all the unfalsifiable-at-write-time class (two fabricated commit SHAs, one past-tense claim sent before the action) → auto-memory `feedback_unfalsifiable_at_write_time`; brokkr independently verified my reports for the remainder, which was correct. **⭐ DECISION BRIEF FOR THE OPERATOR: http://10.100.10.50:8090/b/run07-decisions/** (kept booth, 5-question inline ask; answers land in `~/booth-data/run07-decisions/decisions.answer.json` — read it with `booth answer run07-decisions decisions`). **Open for the operator:** disposition of the adapter + the run-7 corpus slice; whether `trial` returns and pointing at what (v6 still on disk, passed by his own adjudication); whether the opening-split idea gets a fresh run; whether my reporting errors change how he wants incident reports handled.
- `[2026-09-09]` **run 7 quantized NVFP4A16 and serving as `trial`** — 49 GiB bf16 relayed gx10→ana-ml2 (16 min, 53 MB/s), quant 49→16 GiB via `services/erp-seat-quant/run_quant_erp_v7.sh` (dry-run gate passed: 11,725 targets / 11,520 experts, routers+vision BF16), seat on `:8021` under its TRUE name `erp-tune-v7-nvfp4a16`, LiteLLM `trial` repointed (config-file alias — `/model/update` REFUSES a config model, must edit `stacks/litellm/conf/config.yaml` + restart). Rollback: v6 artifact on disk + `/tmp/erp-seat-env.v6.bak`. ⚠ **`no direct path` was WRONG** — gx10↔ana-ml2 ROUTING is fine both ways; neither box holds a private key (only `authorized_keys`), so neither can *initiate*. `ssh -A` agent forwarding from nh3-dev gives a genuine direct path, verified. The relay costs nothing here anyway: both gx10 and nh3-dev are at NH3, so the WAN hop happens once either way.
- `[2026-09-09]` **Booth: partial ask answers are legal** (v0.1.15) — operator: the form failed when a question was left blank. `required` dropped from the radios; answered questions recorded, blanks land in `unanswered`, `complete` says whether the set is finished; refused only when there is no pick anywhere AND no notes. Reading sessions must check `complete`.