{{ crumb }}
{{ title }}
READ-ONLY
AS OF 2026-08-17
PROJECT STATE
Measurement is sound. The material is the weaker half.
int4 calibration closed on 2026-08-17 with limited claims, and source pack v3 replaced 78 shared documents with 260 distinct ones. What remains is corpus quality, not calibration: every stratum is still synthetic, data/raw/ is still empty, and the FP8 gate is still UNMET — one rental was attempted on 2026-08-17 and produced no arm.
{{ s.value }}
{{ s.label }}
{{ s.note }}
SEQUENCING
{{ step.tag }}
{{ step.state }}
{{ step.what }}
{{ step.detail }}
WHAT THE OFFICE ADD-IN GETS
Distillation compared with today's shipping models
student served via Ollama
on the user's laptop
on the user's laptop
| MODEL | BASE | TRAINED WEIGHTS | WHAT IT ADDS | STATUS |
|---|---|---|---|---|
| {{ m.name }} | {{ m.base }} | {{ m.weights }} | {{ m.adds }} | {{ m.status }} |
PROMOTION GATES — train/qlora_9b.yaml
{{ g.name }}
{{ g.source }}
{{ g.threshold }}
MIN PASS RATE
Distillation reliably buys reasoning while quietly costing Indonesian voice and JSON-contract adherence, and Studio breaks outright when the edit contract drifts. Run evals before and after; do not promote an adapter that regresses either.
FINDING WITH ADD-IN IMPACT
reasoning_effort: "none" does nothing on a harmony model.
tantular_office_addin/src/tantularClient.js sends that field to stop thinking from consuming short budgets — the intent router allots 4 tokens. reasoning_strength is a chat-template variable defaulting to 'high', not the API field, which is why ~230 tokens went to reasoning before any content appeared. The control must be passed as a template kwarg.
Standing constraint: do not use either teacher to teach Indonesian. Import reasoning and agentic behaviour, keep the voice.
calibration/INT4_WAIVER.md — ACCEPTED 2026-08-13
Unmet. Not loosened, not removed, not passed by another route.
The threshold stands exactly as committed. verify_corpus.py --gate continues to fail on int4 traces and exits 1, and that failure is correct. Overriding it requires this waiver, by reference, in the training run's record.
Accepted by ghifiardi (project owner) · scope: Q4_K_M teacher muse-glimmer:30b on ai19 · review trigger: availability of a 48GB Ada or 80GB Hopper host
FP8 CORPUS GATE
UNMET
exit 1, by design
waiver named as authorization,
never as a pass
waiver named as authorization,
never as a pass
MAY BE CLAIMED
{{ c.text }}
The correct description: "trained from an int4 teacher under a recorded waiver; FP8 comparison not performed."
MAY NOT BE CLAIMED
{{ c.text }}
A quantized teacher's error is baked permanently into the student. The magnitude is unknown and unmeasurable without the treatment arm; no number in the repository bounds it.
int4 calibration — CLOSED WITH LIMITED CLAIMS
INT4_CLOSURE.md · closed 2026-08-17 · supersedes nothing
CLOSURE MAY CLAIM
{{ c.text }}
CLOSURE MAY NOT CLAIM
{{ c.text }}
A single-session pass B is not scheduled. It would only be needed to claim reproducibility without a session qualifier, and the qualified claim is the one being made. What comes next is not calibration: the measurement side is sound enough that further calibration effort would be measuring a corpus whose material is the weaker half.
THE FIVE CONDITIONS
{{ c.n }}
{{ c.title }}
{{ c.body }}
{{ c.state }}
{{ c.note }}
WHAT EACH DATA DIRECTORY IS, AND IS NOT
| PATH | N | ROLE | CORPUS? |
|---|---|---|---|
| {{ p.path }} | {{ p.n }} | {{ p.role }} | {{ p.corpus }} |
REMAINING SEQUENCE
{{ s.n }}
{{ s.text }}
{{ s.state }}
ENFORCED, NOT MERELY PROMISED
Replicated, or excluded — never one arbitrary sample.
The waiver's volatile-family condition is checked by verify_corpus.py --gate, which fails if a family known to flip a metric appears in the corpus with a single trace. Families are read from noise_floor.<arm>.json — and under v3 that set is empty, so the check currently passes vacuously rather than enforcing anything.
A local MLX/int4 teacher is a different teacher path and is not covered: ("int4_mlx", "mac-validate") is absent from WAIVER_COVERED, so those traces fail the gate as unauthorised.
A prompt set and a source pack together make an instrument. Three now exist, and each measurement names which one produced it. Numbers from two instruments are not a measurement of change — the file names are the trap here, because both noise-floor files carry a v2 that means source pack, not prompt set.
| PROMPT SET | PACK | FAM. | DISTINCT | REPEATED | WHAT IT MEASURED | STATE |
|---|---|---|---|---|---|---|
| {{ i.set }} | {{ i.pack }} | {{ i.fam }} | {{ i.distinct }} | {{ i.repeated }} | {{ i.measured }} | {{ i.state }} |
v3 keeps every v2 instruction byte-identical and swaps in each family's own document, asserted identical across all ten prompts of a kind before use. The tasks had to stay the same or nothing measured against v2 would inform anything about v3 — the change is more material, not different work. It is still a new instrument: new source pack and new prompt set, so its results share no baseline with v1 or v2 and need their own measurement before any reproducibility claim.
PACK AUDIT — FOUR INVARIANTS, GATING
{{ a.check }}
{{ a.what }}
{{ a.state }}
Shared-within-a-split and straddling-splits are not the same check. Two families in one split sharing a document is repetition inflation; two families in different splits sharing one is leakage that invalidates every eval number. A pack can pass one and fail the other.
Digest equality is only the coarse failure. Near-identical documents differing in a serial number would pass it, so the audit also reports how much each split's vocabulary varies and whether the split worlds stay separable.
ROUTER POOL CEILING — TIGHTEST MARGIN 0
Router documents vary by topic alone, so a split's topic pool is the ceiling on how many distinct router documents one kind can yield there. Margin 0 means distinctness rests on index spacing rather than on having room.
{{ r.kind }}
{{ r.split }}
{{ r.ratio }}
{{ r.margin }}
A pack audit runs on a written pack, by which point the expensive part is done and the failure reads as "two families share a document" with no indication of the cause. tests/test_router_pool_regression.py fails at the point of change instead — raising instances_per_kind, reseeding the splits, or trimming a topic pool.
IDENTITY, NOT JUST STRUCTURE — src/verify_pass_provenance.py
{{ c.name }}
{{ c.what }}
Once more than one instrument exists, a v2 trace sitting in a v3 corpus passes every structural check — right families, right splits, intact provenance — and corrupts every number computed from it, because it answers a different prompt about a different document.
Checks reached 26 strata, from 8
src/author_checks.py
Only 8 of 26 strata carried a check, all router, so constraints_ok 1.0 described the router alone and source_preserved was computed on zero traces — while the edit prompts were literally instructing "Pertahankan angka persis seperti sumber" with nothing verifying it.
{{ c.metric }}
{{ c.n }}
{{ c.note }}
Checks are derived through each prompt's source_sha256, never read off the prose — a transcribed figure gives a check that fails when the transcription is wrong and passes when it is wrong in the same way as the source. They are scoring metadata and are not rendered, so adding them re-scores passes already on disk rather than forcing a regeneration.
inventory.py status reports 260/260 families ready. Read that carefully: it counts resolution, not distinctness. Every family resolves to an artifact, but under source pack v2 not to a distinct one — 260 families carried 78 documents, and a training set inherits each one about 3.33 times behind an identical prompt. Source pack v3 authors 260.
V2 — 78 DOCUMENTS / 260 FAMILIES
V3 — 260 DOCUMENTS / 260 FAMILIES
0 / 26 kinds backed by approved REAL material — under either pack
{{ c.value }}
{{ c.label }}
{{ c.note }}
| KIND | FAM. | DOCS v2 | DOCS v3 | REAL SOURCE | STATE | |
|---|---|---|---|---|---|---|
| {{ k.kind }} | {{ k.families }} | 3 · shared | 10 · distinct | not approved | not approved | SYNTHETIC |
V2 REPETITION, DISTRIBUTED
{{ d.docs }}
{{ d.shared }}
Seven documents were repeated eight times. This is the 3.3× repetition inflation the FAMILY-WEIGHTED view has been flagging all along, which is why the UNIQUE-PROMPT view at n=78 is the primary one.
No split leakage, under either pack
0 documents span more than one split. The pack is organised per (kind, split), so a train document never backs an eval family, and the invariant splits.py exists to protect holds.
TWO CANDIDATE NEXT STEPS — NOT ALTERNATIVES
{{ s.n }}. {{ s.title }}
{{ s.state }}
{{ s.body }}
{{ s.gate }}
These are different claims rather than options. Per-family artifacts buy corpus breadth and remove the repetition inflation. Approved real material is what any statement about real Office documents requires, and no amount of the first substitutes for the second.
It also caps the corpus: 260 families carried 78 documents' worth of information, so eval and challenge were narrower than their family counts suggested — 54 eval families over roughly 26 distinct documents.
{{ vizLabel }}
{{ run.command }}
{{ line.text }}
{{ l.label }}
{{ run.gridNote }}
{{ b.label }}
{{ b.value }}
INFRASTRUCTURE FAILURES
{{ run.infra }}
{{ run.infraNote }}
{{ run.infraFile }}
TRACE OUTCOMES
{{ q.label }}
{{ q.value }}
{{ run.qualityNote }}
PRODUCTION EQUIVALENCE, WITHIN A RUN
VALIDATED
The canonical harmony rendering reproduces Ollama's chat endpoint 52/52 per-prompt — identical token counts, identical answers, every aggregate metric matching to four decimals.
REPEATABILITY ACROSS RUNS, PROMPT SET V1
REFUTED
18 of 52 families (34.6%) differ between two runs of the same arm — same weights, same hash-verified bytes, temperature 0.0, seed 0, concurrency 4.
METRIC STABILITY ACROSS PASSES, PROMPT SET V2
Δ 0.0
On every metric with coverage, at 21/26 strata, plus table fidelity 1.0 in both passes. Carries a qualifier that must travel with the number: resumed session boundary.
THE NOISE FLOOR AGAINST THE PRE-REGISTERED BOUNDS — AMENDMENT 8
| METRIC | RUN A | RUN B | |Δ| | BOUND | STATE |
|---|---|---|---|---|---|
| {{ f.metric }} | {{ f.a }} | {{ f.b }} | {{ f.delta }} | {{ f.bound }} | {{ f.state }} |
Run-to-run variance alone breaches the critical tolerance on two metrics. A single-run int4-vs-FP8 comparison therefore cannot support a verdict: noise would produce a FAIL, or a spurious PASS, with no precision effect present. Thresholds are not revised — loosening them after seeing variance is exactly what pre-registration exists to prevent. The study design is what was insufficient.
ANSWER TEXT IS LESS STABLE THAN THE METRICS — PROMPT SET V2, 78 PROMPTS
{{ a.what }}
{{ a.n }}
The same 6 prompts drift in mode mixture, one of them completely: prose:umum::0005 produced disjoint answers, one mode in each pass with no overlap — an unchecked open-ended stratum. As under v1, the competing modes are acceptable answers, so textual variance did not move a metric.
Mode-set membership alone would miss a prompt whose modes went 4:1 in one pass and 1:4 in the other. The mixture is what a training corpus inherits, so drift is reported as well as membership.
DID THE SESSION BOUNDARY CAUSE IT?
{{ b.k }}
{{ b.v }}
The post-boundary slice holds 69.2% of traces, so 5-of-6 falling there is close to what position-independence predicts. No evidence the resume caused the variance — and n=6 is far too small to rule a boundary effect out. The analysis can decline to convict the resume; it cannot clear it.
4 of the 6 differing prompts sit in the 5 unchecked open-ended prose strata, where more answer freedom is expected by construction. Those strata still contribute to no constraint or preservation metric.
BIMODAL, NOT DIFFUSE — AMENDMENT 10
{{ b.what }}
{{ b.value }}
The runtime is not randomly noisy. It lands in one of two stable states and is fully deterministic within each — consistent with batched inference, where request grouping under load selects a computational path. The three metric-flipping families show the same shape: refusal=[0.0, 1.0, 0.0], with r1 the outlier and r0 and r2 agreeing exactly.
WHY THE SUMMARY STATISTICS MISLEAD
A stdev of 0.0222 suggests a tight distribution to average out with more samples. That is the wrong model.
{{ m.text }}
The 49 metric-stable families support per-prompt claims. The 3 volatile ones do not, at any effect size, and are reported separately rather than folded into an aggregate.
THREE FLOORS — NOT A SERIES, NOT INTERCHANGEABLE
{{ p.name }}
{{ p.state }}
{{ p.meta }}
{{ p.note }}
Prompt set v1 reported 2/78 set differences and 11/78 mixture drift; prompt set v2 reports 6/78 and 6/78. Those must not be read as a trend. The prompt sets differ, pass B here has a session boundary and v1's passes had their own interruption history, and n is small in both — two numbers from two instruments are not a measurement of change.
REPEATED CROSSOVER — AMENDMENT 9
{{ c.rule }}
{{ c.why }}
NULL EXPERIMENT — same int4 data as both arms
EFFECT (armB - armA) all metrics: mean delta 0.0
NOISE FLOOR recovered constraints_ok 0.0294, refusal 0.0385
NOISE FLOOR recovered constraints_ok 0.0294, refusal 0.0385
The harness reports zero effect where there is none, and independently recovers the floor measured directly.
Concurrency 1 is a serving-configuration finding, not a determinism proof. Answers were identical 12/12 and reasoning 8/12 — variance lives in the reasoning channel. A verdict that only holds at concurrency 1 describes a configuration nobody will deploy, so the FP8 verdict uses the deployment concurrency and replication policy.
STUDY — int4-vs-fp8-teacher-calibration
One arm measured, and one arm is not enough.
The FP8 arm cannot be measured until an Ada/Hopper host exists. Even with it, a single paired run could not support a verdict: the control's own noise floor exceeds two critical thresholds.
VERDICT
NO
VERDICT
VERDICT
rule: all_critical_pass
_and_all_quality_pass
_and_all_quality_pass
STUDY — int4-vs-fp8-teacher-calibration
One arm measured, and one arm is not enough.
The FP8 arm cannot be measured until an Ada/Hopper host exists. Even with it, a single paired run could not support a verdict: the control's own noise floor exceeds two critical thresholds, so the comparison now runs as a repeated crossover.
VERDICT
NO VERDICT
all_critical_pass_and
_all_quality_pass
_all_quality_pass
THREE PROTOCOLS, NEVER MERGED — AMENDMENT 6
{{ p.path }}
{{ p.status }}
{{ p.protocol }}
{{ p.use }}
Three different measurements of the same weights, reported side by side. Merging them would average distinct protocols into a number describing none of them — and study_report.py sets arms beside each other in two columns rather than concatenating them.
{{ a.name }}
{{ a.state }}
{{ f.k }}
{{ f.v }}
PRE-REGISTERED CRITERIA, WITH THE MEASURED CONTROL FLOOR BESIDE THEM
| BAND | METRIC | BOUND | CONTROL FLOOR | FP8 | STATE |
|---|---|---|---|---|---|
| {{ m.band }} | {{ m.metric }} | {{ m.bound }} | {{ m.floor }} | {{ m.fp8 }} | {{ m.state }} |
PROTOCOL AMENDMENTS — EXECUTION PATH ONLY
{{ a.n }}
{{ a.title }}
{{ a.body }}
SCOPE OF ANY RESULT
int4 on ai19 / Ollama versus FP8 on rented Ada-or-Hopper / vLLM
This answers the practical shipping question. It does not isolate precision: quantization and serving runtime vary together, and any result must be reported with that scope attached.
THE FP8 ARM IS BLOCKED, NOT ANNOTATED
compare_arms.py refuses the comparison unless per-prompt prompt_sha256 and template_sha256 are identical across arms, reasoning_strength, temperature, seed, max_tokens and stop_sequences all match, and the family sets are the same.
Termination is reported side by side and never equated. vLLM exposes stop_reason; Ollama's bare "stop" stays ambiguous, and eos_applied_by_runtime is null for Ollama to show the evidence is missing rather than checked.
INTERNAL — ai19, 2× RTX 3090
Every trace ever generated
Prompt sets v1, v2 and v3 all came from here, at int4 over an SSH tunnel. Compute capability 8.6 has no FP8 tensor cores, so this host cannot produce the treatment arm at any price — that is silicon, not configuration.
int4_ollama Q4_K_M · data_egress internal · concurrency 4 · shared production box
RENTED — 48GB ADA / L40S
The study has never been run
Not failed, not inconclusive: only the baseline arm was ever generated. One rental was attempted on 2026-08-17 and produced no arm. Everything needed is prepared and tested — the blind-review harness was exercised end to end against a simulated treatment arm.
fp8 compressed-tensors · data_egress external · cc 8.9+ AND driver ≥ 580
WHAT THE 2026-08-17 RENTAL COST, IN ORDER
{{ p.n }}
{{ p.title }}
{{ p.error }}
{{ p.body }}
CAUGHT NOW BY
{{ p.caught }}
Compute capability 8.9 says the silicon can do FP8. It says nothing about whether the driver can run current vLLM, whose kernels are built against CUDA 13. Torch was fine throughout — uv resolved cu129 and CUDA 12.x minor-version compatibility covered it — so torch imported, allocated GPU tensors and named the device correctly. Only vLLM's own extension failed, and only at the last step.
ORDER OF OPERATIONS — CHEAPEST REJECTION FIRST
| # | STEP | NEEDS | REJECTS |
|---|---|---|---|
| {{ o.n }} | {{ o.step }} | {{ o.needs }} | {{ o.rejects }} |
Do not download the model until step 0.5 passes. Every failure in the 2026-08-17 rental was detectable before that point.
CARD CHOICE IS LOAD-BEARING
{{ c.card }}
{{ c.cap }}
{{ c.result }}
Do not take the A6000 at $0.33/hr
It is Ampere, has no FP8 path, and would silently serve int4 — producing a “treatment arm” identical to the baseline. An arm that reports the same quantization as the baseline is int4 compared with itself, and cannot fail the study no matter what it produces.
Gate 3 is the backstop; blind_review.py prepare also aborts on it. Catching it after an hour of rental is the expensive way.
preflight.py cannot do this check. It reports quantization from configs/hosts/<host>.yaml — the config's claim, not a measurement. Point it at an A6000 while using the rented-48gb config and it prints fp8 for a card with no FP8 silicon.
SIX GATES IN run_fp8_arm.sh
{{ g.name }}
{{ g.aborts }}
Two serving traps, neither obvious:
port the RunPod PyTorch template runs nginx on 8001, the
repo's default — and answers HTTP 200 on /v1/models
with an HTML page. Use 8010.
quant do NOT pass --quantization fp8. The checkpoint
declares compressed-tensors / FP8_BLOCK and vLLM
refuses the mismatch. Letting it decide is also better
evidence — gate 2 then verifies what vLLM selected
rather than echoing our own argument.
repo's default — and answers HTTP 200 on /v1/models
with an HTML page. Use 8010.
quant do NOT pass --quantization fp8. The checkpoint
declares compressed-tensors / FP8_BLOCK and vLLM
refuses the mismatch. Letting it decide is also better
evidence — gate 2 then verifies what vLLM selected
rather than echoing our own argument.
COST CONTROL ON SOMEONE ELSE'S HARDWARE
{{ c.what }}
{{ c.why }}
runpodctl IS UNAUTHENTICATED BY DEFAULT
Measured 2026-08-17: the binary is at /usr/bin/runpodctl, the pod id is right, and stop_pod.sh --check still fails — the container carries no RunPod credentials. Authenticating it means putting an account-wide API key on a rented third-party box.
If you decline that, drop both flags and stop the pod from the console yourself. The budget watchdog still applies; only the unattended auto-stop is given up — and it removes the retrieval race, since nothing stops the pod out from under the scp.
THE RETRIEVAL RACE — ORDER IS THE OPPOSITE OF NATURAL
{{ a.file }}
{{ a.when }}
A stopped pod runs no sshd, so scp to it fails — but --on-finish stops the pod from inside the EXIT trap. By the time the run returns, the arm is stranded on a box you cannot reach. That tension is deliberate: the auto-stop must survive a crash, so it cannot wait for a human to copy files first.
Fix with stop_pod.sh --delay 600, which keeps the crash protection intact. The delay also applies on abort, so a failed gate idles ten minutes — about $0.13, cheap insurance against a stranded arm. A stopped pod keeps its volume; a terminated one does not.
All three files must be on your machine and verified before terminating. hardware.json is the only evidence the silicon could do FP8, and it exists nowhere else.
AND THEN, ON ANY MACHINE WITH NO GPU
{{ s.step }}
{{ s.title }}
{{ s.body }}
{{ s.note }}
WHAT A VERDICT WOULD LICENSE
{{ o.verdict }}
{{ o.body }}
Either way, INT4_WAIVER.md gets updated: its current text says the magnitude of quantization loss is “unknown and unmeasurable without the treatment arm” and that “no number in this repository bounds it.” After this run, one does.
WHAT THIS DOES NOT SETTLE
{{ n.text }}
Scope is 52 synthetic calibration prompts, deliberately not the 260-family corpus: the study measures runtime quality loss, and the calibration set is where the baseline still has headroom to move. v3 sits at ceiling and would compare vacuously.
refusal 0.0192
constraints_ok 0.9706
the only two with room
A model disappeared out from under this study once already: the gateway kept advertising ollama/muse-glimmer-30b in /v1/models while returning HTTP 400 for it, and 52 calls failed. Worse than failing loudly would be a model being silently replaced — the run completes, the numbers look fine, and they describe different weights than the ones being compared. Both arms now preflight first, and a signature mismatch fails the run.
RECORDED SIGNATURE
int4/signature.json
{{ s.k }}
{{ s.v }}
PREFLIGHT OK
ai19-ollama matches the pinned arm.
DRIFT DETECTED — GATEWAY ARM
2026-08-13
{{ d.k }}
{{ d.was }} {{ d.now }}
PREFLIGHT FAIL — model 'ollama/muse-glimmer-30b' is listed but not callable (400)
Results from this endpoint are not comparable to the recorded arm.
PINNED FIELDS
{{ p.field }}
{{ p.note }}
endpoint is excluded deliberately: a tunnel may bind a different local port, which does not change what is being measured.
RENDERING PARITY — RESOLVED IN AMENDMENT 7
families compared 52
identical token counts 52/52
identical answers 52/52
identical token counts 52/52
identical answers 52/52
every aggregate metric matches to four decimals
Seven candidate serializations were probed and none reproduced the chat endpoint. Amendment 5 was right that the divergence was response-side and wrong that it mattered: the probe "failed" only because raw multi-channel output was compared against parsed chat output. The canonical harmony rendering is what Ollama's chat endpoint produces.
{{ c.name }}
sha={{ c.sha }}
{{ c.match }}
THE BUDGET-EXHAUSTION HYPOTHESIS WAS REFUTED
Raw mode terminates on EOS unaided. The slowness was contention on a shared box, not runaway generation.
{{ t.k }}
{{ t.v }}
So run 2 was reclassified from DIAGNOSTIC to PARITY VALIDATION, on much stronger evidence than it was launched to gather.
FINALIZED PROTOCOL
{{ p.text }}
Canonical rendering: chat_template.jinja, probe hash 3c923547bfe3acab, template sha256 114f55ebdc1804c1 recorded on every trace.
TEACHERS — configs/teachers/
{{ t.name }}
{{ t.license }}
{{ t.arch }}
Teach it for
{{ t.teach }}
{{ r.k }}
{{ r.v }}
{{ t.warn }}
HOSTS — configs/hosts/
| HOST | GPU | QUANT | FP8 | EGRESS | ROLE |
|---|---|---|---|---|---|
| {{ h.name }} {{ h.url }} |
{{ h.gpu }} | {{ h.quant }} | {{ h.fp8 }} | {{ h.egress }} | {{ h.role }} |
RULES THE LOADER AND THE SESSION ENFORCE
{{ r.rule }}
{{ r.why }}
EGRESS GATE — WHAT THE WAIVER ALLOWS
--teacher muse-glimmer
--host ai19-ollama (data_egress: internal)
--prompts prompts/expanded.jsonl
260 families · source_class: synthetic · egress_ai19_approved: true
GATE PASSES
Synthetic material, approved internal host.
WHAT THE SAME RUN DOES ELSEWHERE
host 'rented-48gb' runs on third-party hardware (data_egress: external), so real material needs --egress-approval <reference>.
Sending sanitized local material to ai19 over the SSH tunnel is still an egress event. The tunnel reduces the number of observers; it does not make the transfer internal by definition.
calibration/VOLATILITY_v3.md — 2026-08-17
The gate is silent on v3, and silence is not evidence.
volatile_families() returns {} — the v1 floor is stale and skipped by design, and the v2 floor never carried a volatile_families key. So the replication rule passes over an empty set. That is a vacuous pass: not every designated family being replicated, but no family being designated.
V3 VOLATILITY
UNMEASURED
not PASS
not NONE FOUND
no family has been tested
not NONE FOUND
no family has been tested
WHY THE V2 METHOD CANNOT BE REUSED
{{ m.set }}
{{ m.fam }}
{{ m.distinct }}
{{ m.repeated }}
prompt set · families · distinct prompts · repeated prompts
The v2 floor measured volatility from within-run repeat groups — 49 prompts appearing 2 to 8 times inside one pass, because 260 families shared 78 documents. v3 gives every family its own document, so there are no repeat groups to measure. That is a direct and accepted consequence of per-family artifacts, not a defect: distinctness and repeat-based measurement are in tension, and distinctness was chosen deliberately.
It also lowers the resolution of the cross-pass instrument. With one trace per prompt per pass, mode-frequency drift can only be 0 or 1, and the 4:1-against-1:4 mixture shifts the drift metric was built to catch are invisible without three or more samples.
THE V1/V2 LIST MUST NOT BE INHERITED
{{ f.family }}
NOT INHERITED
Those came from prompt set v1 over source pack v2 — different documents behind different prompts. Carrying them into v3 would replicate families chosen by evidence that no longer applies while leaving genuinely volatile v3 families on a single sample. v3's volatile set must be identified from v3's own evidence.
WHAT WILL MEASURE IT
{{ p.n }}
{{ p.text }}
Only once that has run can the replication rule be enforced rather than vacuous. Until then, "are v3's volatile families replicated?" answers: unknown, because none have been identified.
PROBE ROUND 1 — 2026-08-17: 0 CANDIDATES, AND WHY THAT IS NOT AN ANSWER
{{ p.k }}
{{ p.v }}
Two observations cannot separate a stable family from one whose modes happen to agree twice, so the status stays UNMEASURED.
Byte-identity was checked, not assumed — identical files are exactly what a copied or mis-pathed run would produce. Written 84 minutes apart (10:42, 12:06), each runner log showing its own chunk progression, and provenance records no wall-clock or latency_s field, so a fully deterministic generation has nothing left to differ on.
The result is not a batching artifact
Worth checking, because the v1 evidence tied mode selection to batching: if both passes had processed every prompt in the same batch window, identical output would be near-guaranteed and would say nothing about stability. They did not — the resumable runner chunks at 40 with retries, and the two passes landed on different boundaries.
r0 (0,40) (40,55) (55,95) (95,135) (135,175) (175,215) (215,255) (255,260)
passA (0,40) (40,80) (80,120) (120,133) (133,173) (173,213) (213,253) (253,260)
220 of 260 families were generated in a different batch window, with different co-resident prompts, and still produced byte-identical completions. Only the first 40 shared a window.
That is real evidence of stability under the one variable v1 implicated. It is still two observations per family, which is why the status does not move. For contrast, the two v2 passes over the same host and settings have different digests, because 6 of 78 prompts genuinely disagreed — v3 reproduced exactly where v2 did not.
HYPOTHESIS, UNVERIFIED
v2's 260 families shared 78 prompts, so a batch could contain the same prompt several times; v3's prompts are all distinct. If mode selection is tied to batching, repeated identical prompts within a batch are the more likely trigger. Recorded as a lead, not a finding — nothing here tests it.
RECORDED DECISIONS — PROMPT SET V1 EVIDENCE, VOLATILE_DECISIONS.yaml
{{ v.family }}
{{ v.metric }}
{{ v.state }}
{{ o.run }}
{{ o.mode }}
{{ o.note }}
{{ v.rationale }}
DECISION
{{ v.decision }}
{{ v.handling }}
{{ v.meta }}
LABEL MISMATCH — QUARANTINED, NOT DISCARDED
router:EDIT_TEKS::0002 · train
Tolong perbaiki kalimat ini biar lebih formal: 'Kami udah kirim dokumennya kemarin ya pak.'
LABEL SAID
EDIT_TEKS
TEACHER SAID
UBAH_NADA
RESOLUTION
The teacher was right; the seed label was wrong.
"Make this more formal" is a tone change, not a text edit. The label was corrected in the prompt set rather than the trace being dropped.
In the calibration study, quarantining mismatches is off: a wrong label is the result, and removing it would delete exactly what the metric measures.
HOW A TRACE IS REJECTED BEFORE IT REACHES REVIEW
{{ r.name }}
{{ r.what }}
All three of the quality cases look like success at the HTTP layer. A batch that does not yield exactly one answer per item is rejected wholesale — a partial parse would misalign answers against prompts and silently mislabel training data.