# OBL-0002-NIST REPORT — 2026-11-03 (Lane: Spock execution)

Obligation: "Whatever happened to the 55 or so NIST runs that we were going to do over the span of like a week that should've been completed already." Acceptance: NIST SP800-22 sequences completed count with machine-verifiable result files; 100 more sequences per the 10-27 order.

## VERDICT: HONEST PARTIAL — 55/155 sequences machine-verifiably complete; remaining 100 running under wired automation; blockers named below.

## 1. INVENTORY (file-backed, tool-counted this turn)

Counted programmatically (Python over the RNG host's artifact tree, `ssh root@100.96.91.42`, 2026-11-03 ~20:46 UTC):

| Metric | Count | Path |
|---|---|---|
| Collected sequences (bin 131072B + manifest) | **55** (seqs 03–57) | `/opt/vida-rng/nist/out/seqs/seq_*_manifest.json` |
| Scored verdict files | **55** | `/opt/vida-rng/nist/out/seqs/scoring/live_seq_*.bin_*.json` |
| — PASS 15/15 | **45** | per-sequence verdict JSONs (summary.pass=15, fail=0) |
| — ERR (scoring harness rc=1, collected but un-scored) | **10** | seqs 06,14,17,26,29,32,36,39,41,52 |
| Local (spock) mirror of key artifacts | 5 files | `/home/jeff-siegel/vida-oracle/verification/OBL-0002-NIST/` (scoring_results.json sha256 `c6e12020f1e390186e3b9985e109c30f8b13b88e17ed3f73f618b41188e147e4`) |

- No NIST result artifacts were found on spock (`~/vida-oracle` grep for sp800-22/nist-sequence: docs only). All campaign artifacts live on the RNG host.
- Scoring summary file: `/opt/vida-rng/nist/out/seqs/scoring_results.json` (03–55: 43 PASS / 10 ERR). Sequences 56–57 were completed (manifests Oct 29/Oct 31) but unscored until today; scored this turn: **both PASS 15/15** (verdict files `live_seq_56.bin_20261103T202900Z.json`, `live_seq_57.bin_20261103T203243Z.json`).

## 2. GAP VS ORDER

- Due: 55 (original) + 100 more (10-27 order) = **155 total**.
- Complete: **55** (45 with clean 15/15 verdicts; 10 collected-but-unverdicted, pending rescore).
- **Gap: exactly 100** — matches the 10-27 order's "100 more sequences".

## 3. RUN — what capacity allowed

Executed this turn (all non-destructive; `cp`+sha before every edit):
- **Root-caused the seq-58 stall**: collector crashes were `sqlite3.OperationalError: disk I/O error` + `[Errno 28] No space left on device` during the disk-pressure window; reads of rng.db (`mode=ro`) verify clean now.
- **Fixed the resume bug**: partial bins seq_58 (48,864B) / seq_59 (59,616B) would have been appended to (4096 new rounds on top → oversized files). Backed up to `/opt/vida-rng/nist/out/seqs/backup-ob2-20261103/` (sha256 `4f1d7453…` / `df7f8d6c…`) and truncated to 0 for clean re-collection.
- **Throughput measured** (real collector runs, not claims): CONCURRENCY=32 → 106 seeds/530s = **0.20 r/s ≈ 5.7 h/seq**. Historical phase-1 (seqs 03–55, Oct 8–19) = 4.3–4.6 h/seq. Sequences 56–57 ran at 42–46 h/seq — a ~10x degradation window (Oct 19→Oct 31) that coincides with the disk filling to 98%; clean single-round latency now 30s (not 230s), so the degradation window has partly cleared.
- **Launched** one collector `collector_55seq.py 58 98` (pid 4114242, CONCURRENCY=32) covering the entire remaining range. It is resumable (skips complete seqs) and supervised.
- Disk: RNG `/` still 98% (1.1G avail). Each sequence costs ~131KB — disk does NOT block the campaign; the rng.db bloat is a storage pressure issue, not a campaign blocker.

## 4. WIRING (automatic completion as capacity allows)

Already wired and verified live this turn:
- `vida-rng-health-watchdog.timer` fires **every minute** → oneshot service → `ExecStartPost /opt/vida-rng/nist/seq_supervisor.sh` → restarts the collector when dead + **auto-scores all sequences when 155 manifests exist** (`score_55.py` → `scoring_results_final.json`). 12,113 supervisor restarts on the log prove the loop runs.
- **DEFECT FOUND + PATCH PENDING APPROVAL**: the watchdog unit's default `KillMode=control-group` kills every supervisor-launched collector seconds after each tick (observed: pid 4113480 launched 20:43:45, dead within the minute, zero log output). Fix staged: add `KillMode=process` to `/etc/systemd/system/vida-rng-health-watchdog.service` (+`daemon-reload`) — **awaiting operator approval, not applied**. Until applied, campaign continuity depends on the ssh-launched collector (pid 4114242) surviving; after a reboot or collector crash the supervisor's own relaunches will insta-die and the campaign stalls.
- Projection at measured rate: 98 seqs × ~5.7 h ≈ **23 days** to 155/155; phase-1 rate (4.3 h/seq) would give ~18 days.

## BLOCKERS (named)

1. **Round-resolution rate ceiling**: the RNG dealer's Finney substrate calls are synchronous and block its asyncio loop (`run_rng_server.py` — "synchronous and block the asyncio"); measured ~23–30s per round serially. This is the hard throughput ceiling (~0.2 r/s with 32-concurrency). Fixing it means touching the production dealer — out of this lane's scope.
2. **Disk 98%**: hogs are `/var/lib/vida-rng/rng.db` (18G, HELD for Captain) and `/root/backups/vida-estate.borg` (24G — borg pipeline, prohibition). Nothing safely reclaimable; does not block the campaign but keeps the I/O-error risk elevated.
3. **KillMode defect** (above) — patch staged, approval pending.

## PROHIBITIONS COMPLIANCE

No mainnet contact; no key material printed; all edits cp+sha'd first; `rng.db` and borg/restic pipeline untouched; RNG access only from spock.

## ACCEPTANCE SELF-CHECK

- Completed count reported with machine-verifiable result files: **YES (55, counted from files this turn)**.
- 100 more per 10-27 order: **RUNNING under wired automation, partial — not complete**. Claimed as partial.

*Filed by McCoy (OBL-0002-NIST lane, spock), 2026-11-03 ~20:50 UTC.*