# PREREG-W1 · R-LS-IQ3, llama-server 3cf03257 whole on the desktop's larger card, driven by the harness's own client (exploratory); R-LB-IQ3-n2 as the fallback

*Internal: names the desktop, the desktop's larger card, the desktop's smaller card, the laptop and local paths; not for shipping. Times are UTC from `date -u`.*

| | |
|---|---|
| **Registered** | 2026-10-05T16:23:56Z (`date -u` on the laptop, read by `stamp-prereg-w1.sh` as it wrote this row), by the lead, before any W1 reading (the window opens 2026-10-06T07:30:00Z) |
| **Pins at registration** | `kit/SHA256SUMS` c8c388e2bff21bc47d14caf95be25f686ece5a50ec343b5b5fb0aafd575b888f (its `row.conf` = R-LS-IQ3); `kit/rows/R-LS-IQ3.conf` bac1672bda6b35280c2892152d6b37ef8f7fc035d4d342bf73d91ad3f7cc285a; `kit/rows/R-LB-IQ3-n2.conf` 0257e79dd06ecd523105042f1fe25de4dd5f95f4b5080e126cf9f4b2eaac138f; `kit/client/CLIENT-SHA256SUMS` f11815c678a09da7778425b29c1413edcd25b668a8dc302b8d271d4ee47a2464; the verified fallback of part 1a `kit-1a-2875ed08/SHA256SUMS` 2875ed082048b751ed93913382a5c4ff49a0db27c569088b604aebc5fb850c37; PREREG-BANDS withheld-2026-09-29 |
| **Before any reading** | Yes, by construction: no W1 reading can exist before the window opens at 2026-10-06T07:30:00Z, and the stamp command refuses from that second on |
| **Drafted** | 2026-10-05 by the lane `desktop-w1-kit1b` (Opus), from PLAN-W1 §2.4 and §2.6 (with §15's folds), PREREG-BANDS, PREREG-W0 §5 and §10, and part 1b's kit (`KIT1B.md`) |
| **Preamble** | `~/bench-archive/LANE-PREAMBLE.md` v3.1, sha256 `07986860dd5975c7…` |
| **Authority** | an operator, 2026-10-05: "let's designate [his night] for the desktop bench windows, and start running whatever benches we need to do on the desktop in that window each night" (D-096), "please keep the train rolling overnight w/ your recs" (D-117); window 0 measured clean, branch A (D-20261005-120); the lead's rulings D-20261005-118 (Q-1..Q-4, F-1 (b)) |
| **Status** | **Exploratory.** Not a row of the Strata bench PREREG (`plans-2026-10-02/strata-bench/PREREG.md`); it adds no arm there and changes none of that file's bands or gates |

---

## 0 · How it is registered

On the laptop, no sudo, once, before 07:30:00Z on 2026-10-06 (target: with READY, 02:00Z):

```
bash /workshop/bench-archive/plans-2026-10-05/desktop-window-1/stamp-prereg-w1.sh
```

It refuses at or after 2026-10-06T07:30:00Z, refuses if this file is already stamped, writes the stamp and the pins
into the two draft rows above (Registered, Pins at registration), and prints `STAMPED PREREG-W1 <stamp>Z · sha256 <digest>` for the ledger row. The
choice the window runs (R-LS-IQ3, or R-LB-IQ3-n2: on part 1a's verified kit `kit-1a-2875ed08/` if part 1b does not
verify, or on part 1b's scripts if 1b verifies but the R-LS stage fails) is the one READY names; both rows are
registered here, so the fallback needs no second registration under the clock (PLAN-W1 §2.4, L-4).

## 1 · R-LS-IQ3: what the row measures

How fast llama.cpp at `3cf03257f219afbe7334045ff7c6a06ac68c627d` serves Qwen3.8-Flash-Next (ISTA-DASLab GSQ-RCO IQ3_S,
the two shard files the laptop's L arms use) when the model sits **whole on the desktop's larger card**, the desktop's NVIDIA RTX PRO 6000
Blackwell Workstation Edition (96 GB), measured the way the laptop's L-IQ3-t8 was measured: `llama-server` started
once, the Strata bench harness's own client (`inner.py`, copied byte for byte) sending the frozen `SLICES.json`
prompts at 4,038 / 32,038 / 128,037 tokens, 256 greedy tokens, thinking off, the decode timed on the client's clock
(`engine.decode_chat_sse` + `finish_record`, `seatlib.RULES["engine_timing"]`). Order (the laptop's): 4K × 3, 32K × 3,
128K × 3, one server start; the first run of each context after the load is labelled `first-after-load`, and each
context's figure is **the median of its 3 runs, the first-after-load run included** (the laptop PREREG's A2).

The laptop side it pairs with (`plans-2026-10-02/strata-bench/records/L-IQ3-t8/speed/a1/rows.jsonl`, every row
`status ok`): decode (client clock) 24.424 / 23.96 / 24.743 tok/s at 4K (median 24.424), 20.938 / 20.663 / 20.477 at
32K (median 20.663), 14.33 / 14.194 / 14.24 at 128K (median 14.24). Every cross-box sentence names the box and the
regime: "this box, every layer on the card" against "that box, 34 of 48 expert layers on its CPU", never the card
alone (PLAN-v2 §2.4, fold M-I-6).

## 2 · R-LS-IQ3's identity

| Item | Value |
|---|---|
| Label | **R-LS-IQ3** (row id `w1-r-ls-iq3`, `kit/rows/R-LS-IQ3.conf`, ROW_KIND `llama-server`) |
| Box and card | the desktop; **the desktop's larger card only** (PCI bus withheld-2026-10-13; `CUDA_DEVICE_ORDER=PCI_BUS_ID`, `CUDA_VISIBLE_DEVICES=<the desktop's larger card's index>`, resolved from the bus id and checked by name by `window.sh`); the desktop's smaller card (the 3090 Ti) hidden from the process |
| Engine bytes | `llama-server` `19cb1008…`, `libllama-server-impl.so` `e4497f6d…`, `libmtmd.so.0.4.1` `1c8995c0…`, `libllama.so.0.4.1` `5b1527c8…`, `libllama-common.so.0.4.1` `93ba9355…`, `libggml.so.0.24.0` `32c1988c…`, `libggml-base.so.0.24.0` `c7f1c7c8…`, `libggml-cpu.so.0.24.0` `c2208c56…`, `libggml-cuda.so.0.24.0` `957241ac…` (window 0's STAGE §4 table), and the CUDA 13.4 runtime `libcudart.so.13.4.92` `7fb00519…`, `libcublas.so.13.8.0.4` `c0c5a5f1…`, `libcublasLt.so.13.8.0.4` `d3b51f22…`; `ldd` on the desktop resolves `libcudart`/`libcublas`/`libcublasLt.so.13` to the staged 13.4 folder (read 2026-10-05T11:28:06Z, part 1b's read-only read); the row records the server's resolved libraries from `/proc/<pid>/maps` (`server-maps.txt`) |
| Files | the IQ3_S pair, `…-00001-of-00002.gguf` `4c1eb2ce…` and `…-00002-of-00002.gguf` `316b46f3…` (window 0's pins, read on the desktop by its stage) |
| Client bytes | 22 files (`lib.sh` CLIENT_FILES): `inner.py`'s whole local import closure (18 modules), the frame file `framing.py` opens at import (`vendor/vllm-seats/prompts/frame/gemma4-canonical.json`), `units.py` (the sandbox argv), `vendor/jev/kit/articles.json`, `records/SLICES.json` `withheld-2026-09-29`; copied from a frozen snapshot of the harness's verified state (`strata-bench/snew-verify-receipts/MORNING-HARNESS-SHA256SUMS`, 21 of 21 equal) into `kit/client/`, staged at `~/desktop-window-1/client/`; each carries a `FILE_SHA` line in `row.conf` (36 in all with the engine's 14) |
| The engine line | built by the client's own `engines.llama_argv` with the desktop's paths and `--n-cpu-moe 0`, flag for flag L-IQ3-t8's `server_argv` but for the binary, the `-m` path and that one value (part 1b's test compares them element by element): `llama-server -m <shard 1> --host <loopback> --port withheld-2026-10-13 -ngl 99 --n-cpu-moe 0 -c 131072 -fa on -ctk q8_0 -ctv q8_0 -lm mmap --lazy-mode on -fit off -np 1 --cache-ram 0 --no-webui --jinja -lv 4 -t 8 -tb 8`; the API key generated inside `inner.py` and passed by environment only |
| The client's spec | L-IQ3-t8's `spec.json` keys and values but for `arm`, `run_dir`, `server_argv` and `slices_path` (the port, withheld-2026-10-13, is the laptop's own): speed phase, contexts 4K/32K/128K, 3 repeats, 256 tokens, health timeout 1,200 s, request timeout 2,400 s, `egress_mode netns`, model name `qwen3.8-flash-next-iq3_s`, `expect_commit` 3cf03257 |
| Egress | the fence of record: `inner.py`'s own `netns` mode inside `units.bwrap_argv`'s sandbox (`bwrap --unshare-net --unshare-pid --die-with-parent`, a tmpfs over /run and /tmp, everything read-only but the row's run folder), proved by `inner.py`'s own probe before any engine starts; the second fence: `IPAddressDeny=any` + `IPAddressAllow=localhost` on the row's system unit (enforced by root's manager), read once in the unit by `inner.py`'s own `ipfilter` probe (recorded, never a gate). Q-2, D-20261005-118. Each row records which fences held (`fences.json`) |
| Conditions | the desktop's larger card's cap **300 W** (D-20260927-008; PREREG-BANDS' row), read back before the row; the seats down per D-098 (docent-vllm, ollama, comfyui if active, the reranker; the warm-seats and reconcile timers paused); `ollama-11435` on the desktop's smaller card **kept up**; the desktop's larger card read near-empty first; the row unit `MemoryMax=80G`, `KillMode=control-group`, `TimeoutStopSec=20`, `RuntimeMaxSec` to 09:10:00Z, no nice/CPU property set (the unit's defaults); each printed in the row's files (`row-meta.txt`, `fences.json`, the `PRE-ROW` receipt) |
| MemoryMax arithmetic | 80G as window 0's row, which loaded the same pair through the same file mapping under it and finished 6 of 6 (D-20261005-120). Host memory holds the two input lookup tables through the mapping (322.07 + 27,465.95 MiB, file-backed and reclaimable) and the server's own heap; the KV cache is on the card. The memory receipts (§5) read `memory.events` max/oom/oom_kill and `memory.peak` per run |

## 3 · The band, copied from PREREG-BANDS

From `plans-2026-10-05/desktop-nightly/PREREG-BANDS.md` (registered 2026-10-05T03:01:33Z, sha256
`withheld-2026-09-29`), **line 20**, byte for byte:

> | **R-LS-IQ3** | llama-server 3cf03257, the harness client, `--n-cpu-moe 0`, 300 W | **85-160 tok/s** (the same arithmetic; the client clock adds nothing measurable) | 40-85, 160-347 | < 40 | > 347 |

and its inputs, lines 8-9: the desktop's larger card's published 1,792 GB/s over ~5.159 GB per generated token (PREREG-W0 §4), a
ceiling of **347 tok/s** (1,792 ÷ 5.159 = 347.4); no MTP. The banded figure is **decode at 4K, the median of 3**
(§1). **32K and 128K are exploratory, no band** (PREREG-BANDS line 34, rule (6)). **Nothing from window 0's reading
enters the band** (it was drawn before that reading). Window 0's reading enters only as named operating inputs: its
VRAM peak with the 131,072-token depth, 55,744 MiB (`gpu-1hz.csv`, D-20261005-120), says the 128K slices are expected
to fit on the card beside the model [an input, not a claim]; its row took 07:38:01Z-07:41:32Z, so the time budget
below the 09:10:00Z hard end is wide.

## 4 · The placement test (stop rule 5), against BOTH CPU_Mapped lines by name

Read from the server's own log (`R-LS-IQ3.run/server.log`) by `rowserver.py`'s `placement()` at /health and written to
`placement.json`, each line quoted:

1. `offloaded 49/49 layers to GPU`.
2. `CUDA0 model buffer size` within ± 2 % of **52,844 MiB** (18,870.50 + 34 × 999.22, from L-IQ3-t8's `server.log`
   lines 182-184), i.e. 51,787.12-53,900.88 MiB; exactly one CUDA buffer, named `CUDA0`. Window 0's reading of the
   same buffer, 51,945.51 MiB (−1.7 %), is printed beside it as a cross-check, never as a new number.
3. **The input lookup table `token_embd`'s line:** the `CPU_Mapped model buffer size` line that is NOT the n-gram
   table's, at most **2,400 MiB** (35,835.49 − 34 × 999.22 = 1,862 MiB; window 0 read 322.07 MiB = 337,715,200 B).
4. **The n-gram table's line:** the `CPU_Mapped model buffer size` line whose size the server's own line `add: tensor
   per_layer_token_embd.weight (size = 27465 MiB) lazy read enabled` names, at **27,465.95 MiB ± 0.5** (per_layer_token_embd,
   28,800,138,240 B = 27,465.95 MiB, exactly as window 0 read it, D-20261005-120). PREREG-W0 §10.2 built its threshold
   from the first CPU_Mapped line only; this registration names both lines before W1's reading.
5. No other model buffer line (no `CPU` expert buffer, no `CUDA1`); exactly two `CPU_Mapped` lines.

Otherwise the row is **VOID**. If the lines are absent or named otherwise, the row prints **"placement unread"**,
never "whole". The wording rule: "every layer on the card; the input lookup tables (token embedding 322 MiB, the n-gram
table of shard 2) in host memory, as both engines place them". Recorded, never a stop.

## 5 · The gates on every run, and the receipts

- **The identity gate** (fold M-B-5): before the launch, the client's own `prompts.prompt` with its own `nonces`
  rebuilds the nine prompts from the pinned `SLICES.json`, and their sha256 must equal L-IQ3-t8's nine, or nothing
  launches (rc 7). After the run, a run counts only if its `prompt_sha256` AND the server's `prompt_tokens` equal
  L-IQ3-t8's for the same context and repeat (`row.conf` PROMPT lines): 4K `b42c6a18…` `9744fee0…` `214ec62f…`
  (4,038 tokens), 32K `507b7bc9…` `c8a1ccb2…` `d6c96405…` (32,038), 128K `2491e963…` `94613594…` `38d3c9a3…`
  (128,037). A run that misses is **withheld** (`identity.json`), never reported.
- **The slices guard** (PLAN-W1 §2.3.5a): `slices_path` points at the pinned copy inside the client (read-only inside
  the sandbox); absent or of another sha, the launch is refused before any server (rc 4), so `inner.py` never builds a
  fresh `SLICES.json`.
- **The engine identity**: the server's `build N (<commit>)` banner must name 3cf03257, else `preflight_refused`.
- **G0**: one CUDA device, no Vulkan, the offload line read; a refusal is final (the attempt rule).
- **The recount road** (named before READY; run after the window): the laptop's own `llama-tokenize`
  (`/data/strata-bench/build/llama.cpp-3cf03257-cpu`, the laptop's A6 T-2 argv) recounts each completion. Until it
  reads, every decode prints **`withheld (COUNT-UNVERIFIED)`** (D-20261002-054's rule for the laptop). The row
  assembly the laptop's driver does (`rows.jsonl`: `finish`, `joined_rows`, `speed_row`, `count_check`,
  `driver.py:560-698`) runs on the laptop after the window, beside the recount; on the desktop the row writes `inner-rows.jsonl`
  (`inner.py`'s own) and the kit's receipts.
- **The replay test** (before READY): on the same stub SSE input, `inner-rows.jsonl` from the harness's inner speed
  path and from the the desktop wrapper are byte-identical once the clock-derived keys are set aside (part 1b's
  `tests/test_kit1b.py replay` on the laptop; `daylight-checks.sh` runs the the desktop half on the desktop before READY).
- **The memory receipts** (fold M-I-7): the row cgroup's `memory.stat` (`pgmajfault` delta per run, the page
  counts), `memory.events` (low/high/max/oom/oom_kill), `memory.peak` and `memory.current` at the launch, at /health,
  at each run's start and end and at the end (`memory-receipts.jsonl`); the server's resolved CUDA libraries from
  `/proc/<pid>/maps` (fold M-I-8).

## 6 · The stop rules

1. **No drill, no row.** The row runs only after the window's restore drill reads GREEN (D-098).
2. **The desktop's larger card near-empty at the start**, read after the seats go down; any tenant still on the desktop's larger card means no row.
3. **The bytes are checked first.** Every `FILE_SHA` file (36) reads its sha256 as an operator at the window's open, seats
   up; every one but the two shards again right before the launch; the slices guard; any mismatch means no row.
4. **The card is checked.** G0 must read one CUDA device and no Vulkan device; anything else is a G0 refusal (final).
   `placement.json` quotes the server's `using device CUDA0 (…)` line: a name other than the RTX PRO 6000 Blackwell
   makes the row **VOID** (the lead's read, with the rows).
5. **The placement is checked** (§4): VOID otherwise.
6. **The hard runtime cap**: the row unit's `RuntimeMaxSec` ends it by **09:10:00Z**, whatever it is doing; a cut row
   keeps its finished runs, labelled "cut at the cap".
7. **The UPS**: OB, LB or FSD once, or `battery.runtime` under 300 s on 3 consecutive 1 s samples, or unreadable on 3
   in a row: the watcher stops the row and restores.
8. **Heat**: the desktop's larger card above 85 C on 3 consecutive 1 s samples stops the row.
9. **A crash is a finding**: a CUDA error, an out-of-memory error, an abort or a server exit mid-phase ends the row; it
   is recorded with its log and never re-run within the window.
10. **One run.** No request is repeated to move a reading into a band.
11. **The restore runs regardless**: the row's end or death fires the watcher's restore, the deadline restore at
    09:20:00Z restores no matter what, the morning check at 10:05Z pages on anything but RESTORED by parts, and
    an operator's backup paste is the manual road only (D-098).
12. **The egress fence holds**: `inner.py`'s netns probe must read `enforced` before the server starts, else
    `preflight_refused` (no figure; the restore runs).
13. **The identity gate** (§5): nothing launches unless the nine digests match; a run that misses afterwards is
    withheld.

## 7 · The attempt rule, the cut-row rule, the out-of-band rule, the cross-night rule

- **The attempt rule** (PREREG-W0 §10.3 with the laptop's server mapping): an a1 whose three 4K runs finished with
  status ok and identity ok is **never re-run**, whatever its band and whatever ended the row later; the finished runs
  stand, labelled with the end reason. a2 runs only if a1 has no three such 4K runs; a2 is then the figure of record
  whatever its direction, a1 printed beside it. `exited_before_ready` is a slip (a2 may run on a later night); a G0
  refusal is final; a mid-phase engine crash is a finding. A new build sha is a new label, never an attempt.
- **The cut-row rule** (registered here before the first attempt, as PLAN-v2 §1.2 requires of server rows): a
  context's figure exists only when all three of its runs finished with status ok and identity ok; a row cut or
  stopped after the 4K runs keeps its 4K figure (and any whole later context), each labelled with the end reason; a
  context with fewer than three such runs prints its runs and no figure.
- **Out of band** (PREREG-W0 §10.4, the laptop's A1-4): an outside-band reading prints `OUT-OF-BAND (opened: no)`, and
  nothing quotes it until the lead has read the server log, the rows and the box's state (`gpu-1hz.csv` clocks,
  temperature and power, `ups.csv`, `row-meta.txt`, the desktop's smaller card's busy share).
- **The cross-night rule** (PREREG-BANDS lines 28-32, rule (3)): a difference between rows from different windows is
  reported as a difference only when it exceeds the larger of 10 % or 3 × the larger row's spread across its
  repetitions; otherwise "within unmeasured night-to-night variation". Every compared row prints the cap read back,
  `MemoryMax`, nice/CPU properties, `CUDA_VISIBLE_DEVICES`, the stop set, the desktop's smaller card's seat state, and the desktop's larger card's
  temperature and SM clock per run. R-LS-IQ3 is compared with nothing on the desktop but itself until a Strata row exists.

## 8 · What R-LS-IQ3 does NOT claim (PLAN-v2 §6)

- Not "the 6000 is N × the laptop card": the two boxes run different regimes (every layer on the card against 34 of
  48 expert layers on the laptop's CPU), on different CPUs and memory.
- Nothing beside the live seats: the seats are down for the row.
- Nothing about quality: no quality block runs.
- No energy or cost figure: watts are recorded beside the row and claim nothing.
- No Strata comparison until a Strata row exists on the desktop (W2's R-S139-IQ3 at the earliest).
- One box, one night, one build: it speaks for llama.cpp 3cf03257 as built on the desktop, nothing newer.
- No decode figure before the recount reads (§5).

## 9 · The fallback: R-LB-IQ3-n2 (PLAN-W1 §2.6), one paragraph

If part 1b does not verify by the 04:00:00Z no-go, the window runs **R-LB-IQ3-n2** on part 1a's row kind
(`kit/rows/R-LB-IQ3-n2.conf`, ROW_KIND `llama-bench`; on the part-1a road the window reads `kit-1a-2875ed08/row.conf`, byte-equal, sha256 `0257e79d…`): PREREG-W0 §3's argv flag for flag (`-ngl 99 -ncmoe 0 -sm none
-mg 0 -fa on -ctk q8_0 -ctv q8_0 -lm mmap -lzm on -t 8 -b 2048 -ub 512 -p 512 -n 128 -d 0,32768,131072 -r 3 -o json -v
--progress`), window 0's 13 `FILE_SHA` lines, 300 W, `SHARDS_AFTER_ROW=keep`, `OUT_DIR=/workshop/desktop-window-1/row`.
Its band is PREREG-BANDS **line 16**, byte for byte:

> | R-LB-IQ3-n2 | llama.cpp 3cf03257, llama-bench, 300 W (a noise read) | 85-160 tok/s (R-LB-IQ3's band) | 40-85, 160-347 | < 40 | > 347 |

It is banded on `tg128@d0`, the mean of its 3
repetitions. It is **a noise read, never an attempt**, and never a replacement for R-LB-IQ3 a1's figure (106.42 tok/s,
D-20261005-120); it is read against R-LB-IQ3 only under the cross-night rule (§7). Its placement test is PREREG-W0
§10.2 with the second `CPU_Mapped` line named as §4 item 4 names it (27,465.95 MiB, per_layer_token_embd), registered
here before its reading; its stop rules are PREREG-W0 §5 with §10's amendments; its attempt rule is PREREG-W0 §10.3.

## 10 · What follows

W2 (Wed 2026-10-07, D-105 as Q-3 moved it) is R-S139-IQ3, Strata v0.1.39 under its own registration (PREREG-W2, with
the residency receipts); R-LS-IQ3 is the same-instrument llama.cpp reference every Strata row on the desktop needs before any
sentence may compare the two (PREREG-W0 §10.5).
