SOPHIA XT
Reproduction · five claims · updated 16 September 2026

Check it yourself

Five claims from this site, each with the artifact, the commands, the expected output and the tolerance. Two of them you can check in under a minute. One costs 2.6 gigabytes of bandwidth. One needs a GPU and a day of your time.

A claim nobody can check is worth less than a smaller claim anyone can. Every entry below names the public artifact, gives the commands in the order you run them, prints what a successful run looks like, and says how far off you can be and still have reproduced it. Every entry also carries a section most pages leave out: what would falsify it.

Every entry says whether we ran its commands ourselves. Four of the five sequences were executed here on 16 September 2026, download and all, and their expected output is a transcript of what printed. The fifth ran in part: its artifact checks ran, its GPU training run did not, and its figures are quoted from the paper rather than reproduced. Each card carries the date, the machine and a block-by-block account.

Running them found three faults in our own documentation, and the sharpest is the best evidence on this page that the commands were executed rather than typed out. The Cassandra T1 repository documents a checksum command that cannot succeed as written: the file it reads lists bare filenames, and it has CRLF line endings, so sha256sum reads a carriage return into every filename and reports that no file was verified. Nobody finds that by reading it. All three corrections are at the bottom of this page, and the command that does work is in the first entry.

One entry reproduces a mechanism rather than our published figures, because the harness that produced them is not public. That is stated in the entry rather than left for you to discover.

claims with commands
5
artifact, commands, expected output, tolerance
sequences executed here
4 of 5
the fifth ran in part, and says which blocks
rejected, with reasons
4
listed rather than quietly dropped
tolerance stated
every entry
so 0.817 against 0.819 is not a guess
How to read this page

Four kinds of checkable, and they are not equal

Reproducibility is not one thing. A hash either matches or it does not. A deterministic program gives you the same answer it gave us. A statistical result gives you a number near ours if you rebuilt part of the pipeline correctly. And a measurement taken on a private harness gives you the behaviour but not the digits. Each entry is labelled with which of those it is, and the label sets what you should expect before you start.

Each entry carries a second label, which is a different question: not what kind of claim it is, but whether we ran these particular commands ourselves. A page that tells you to run something nobody here has run is asking you to debug its typing. Four of the five sequences were executed against a clean clone and their expected output is the transcript. One ran in part, and that card says which blocks ran, which did not, and why.

Labels
What each badge commits us to
LabelWhat you getEntries
Byte-exactA hash either matches or it does not. There is no tolerance to argue about.01
DeterministicThe same input gives the same output on any machine. Timings vary, results do not.02, 03
Partly publicData, base model and method are public. Some of the code is not, so part of this is a reimplementation.04
Mechanism onlyThe behaviour reproduces. Our exact figures came off a harness that is not public, and will not.05
If an entry is labelled byte-exact and your hash differs, one of us is wrong and it is worth saying so in public. If an entry is labelled mechanism only and you reproduce our exact figures, something is wrong in the other direction.
Index
The five, what each costs to check, and whether we ran it
#ClaimCost to checkRan here
01The Cassandra T1 checkpoint is the file we say it isOne minute, or 2.6 GB for the full checkExecuted here
02LTMi-XT coordinates and identifiers are deterministicAbout a minute, offline after installExecuted here
03LENS-XT holds locked positions at exactly 1.0About two minutes, CPU onlyExecuted here
04Anchor-token masking gives a 1.67x held-out advantageA GPU and a working dayPart executed here
05Retrieval memory is bounded by disk, not RAMFour minutes and 2 GB of scratch diskExecuted here
Executed here means the commands in that entry were run against a clean clone on the stated date and the expected output is the transcript. Part executed means some blocks ran and some did not, and the card says which.
The five

Claim, artifact, commands, expected output, falsification

01
Released model · Apache 2.0
Byte-exact Executed here

The Cassandra T1 checkpoint is the file we say it is

The claim

The released epoch-5 FP16 checkpoint reassembles to 2,659,500,664 bytes with SHA-256 D70C813C513F5232A25313FA60338F862020BA942ED26D54F62511766FA5F044. The tokenizer is 2,253,607 bytes with SHA-256 376A9537FCE79B7004237845E6B2C9991661E6BAEEA0B76AF9C9A3C1EB405C4D. The architecture is 28 layers at hidden size 2,048, grouped-query attention with 16 query and 4 key-value heads, SwiGLU at intermediate 5,632, RoPE and RMSNorm, vocabulary 32,768, mask token 32,766. Recorded training cross-entropy ran 3.78, 2.89, 2.67, 2.42, 2.2561 across five epochs.

A hash either matches or it does not. There is no tolerance to argue about.

checkpoint
2,659,500,664 B
reassembled from two LFS parts
tolerance
zero
one wrong character is a failure
check without downloading
under 1 min
LFS pointers carry the part hashes
full verification
2.6 GB
download, then about 3 min to hash
What was measured

File identity and declared architecture. The hash pins the bytes, the part sizes pin the reassembly, and the configuration file states the shape of the network that consumes them.

What this number is not
  • It is not a benchmark. Cassandra T1 publishes no MMLU, HumanEval or GSM8K score, and any percentage attributed to it comes from a draft we withdrew.
  • The loss trajectory is a training log, not a held-out evaluation. It shows the run descended. It does not show the model is good.
  • Output quality is research-stage. Short factual answers are better at epoch 5 than earlier, long-form generation is still unstable, and the repository says so in its own limitations section.
  • The second checkpoint in the repository, the v2 scratch run, is newer by timestamp and worse by inspection. It is published for transparency, not as a baseline.
The commands
In the order a stranger runs them
1. Check the published hashes without downloading the weightsshell
git lfs install
GIT_LFS_SKIP_SMUDGE=1 git clone --depth 1 \
  https://github.com/Chorozion/Casandra-t1-diffusion-edge-model.git cassandra-t1
cd cassandra-t1

# With smudge skipped, each weight file on disk is its LFS pointer:
# the SHA-256 of that part and its exact byte count.
cat weights/cassandra_ep5_fp16.pt.part001 weights/cassandra_ep5_fp16.pt.part002

# The parts must sum to the published reassembled size.
awk '/^size /{s+=$2} END{print s}' weights/cassandra_ep5_fp16.pt.part00*

# The tokenizer is a single object, so its pointer oid IS the published hash.
cat release/tokenizer.json
2. Download and verify for realshell
# 2.6 GB for the epoch-5 checkpoint. Add the v2 parts to --include only if
# you want the other 16 GB as well.
git lfs pull --include="weights/cassandra_ep5_fp16.pt.part*,weights/checksums.sha256,release/tokenizer.json"

# Two things about checksums.sha256 that the repository does not mention.
# It lists bare filenames, so it only verifies from inside weights/. And it
# has CRLF line endings, so sha256sum -c reads a carriage return as part of
# every filename and verifies nothing. Strip it, and select the rows whose
# files you actually pulled.
cd weights
tr -d '\r' < checksums.sha256 | grep cassandra_ep5 | sha256sum -c
cd ..

cat weights/cassandra_ep5_fp16.pt.part00? > cassandra_ep5_fp16.pt
sha256sum cassandra_ep5_fp16.pt
wc -c < cassandra_ep5_fp16.pt
sha256sum release/tokenizer.json
3. Check the architecture against the table aboveshell
python - <<'PY'
import re, pathlib
src = pathlib.Path("src/model/config.py").read_text(encoding="utf-8")
for k in ("vocab_size", "hidden_size", "num_layers", "num_heads",
          "num_kv_heads", "intermediate_size", "mask_token_id"):
    m = re.search(rf"^\s*{k}\s*:\s*\w+\s*=\s*([0-9]+)", src, re.M)
    print(f"{k:>18} = {m.group(1) if m else 'not found'}")
PY
Provenance
Whether we ran this sequence ourselves
Executed here 16 September 2026
git 2.54 with git-lfs 3.7.1 and Python 3.10 on Windows, into an empty directory, on a residential connection

All three blocks were run here, including the 2.6 GB download, and the transcript below is what they printed. The reassembled file hashed to the published value on the first attempt. Running it is also what found the two problems now written into block 2: checksums.sha256 lists bare filenames, and it has CRLF line endings, so the repository's own documented sha256sum -c command verifies nothing and reports that no file was verified.

Expected output
What success looks like
# pointer check
oid sha256:8be8d86aa08a0ba37a2252f67e8b8cb55de7ec11007b10b30d76be94e82dcf41
size 1900000000
oid sha256:d469b42bbdd66fc5ba4f20e1869ad668195d0fd163cd8e1b7e1de51144377813
size 759500664
2659500664
oid sha256:376a9537fce79b7004237845e6b2c9991661e6baeea0b76af9c9a3c1eb405c4d
size 2253607

# after download
cassandra_ep5_fp16.pt.part001: OK
cassandra_ep5_fp16.pt.part002: OK
d70c813c513f5232a25313fa60338f862020ba942ed26d54f62511766fa5f044 *cassandra_ep5_fp16.pt
2659500664
376a9537fce79b7004237845e6b2c9991661e6baeea0b76af9c9a3c1eb405c4d *release/tokenizer.json

# architecture
        vocab_size = 32768
       hidden_size = 2048
        num_layers = 28
         num_heads = 16
      num_kv_heads = 4
 intermediate_size = 5632
     mask_token_id = 32766
Tolerance
How close is close enough

None. Hashes are compared as strings and sizes as integers. Two cosmetic differences are expected and neither is a failure: sha256sum prints lowercase where the repository table prints uppercase, and on a system where it opens files in binary mode it prefixes the filename with an asterisk. If one hex character differs, the file you have is not the file we released, and you should say so publicly rather than work around it.

Hardware and runtime
Pointer check
Any machine with git and git-lfs. Under a minute, a few hundred kilobytes of traffic.
Full verification
2.6 GB download plus 2.6 GB of free disk for the reassembled file, so 5.3 GB in total while both exist. The download took about twenty minutes on a residential connection here, and reassembling and hashing took a few minutes after that.
Running the model
The inference scripts assume CUDA. A 1.3B model in FP16 needs roughly 3 GB of VRAM for weights and more for activations; 8 GB is comfortable. There is no CPU path in the released scripts.
Known friction
The released scripts carry path assumptions from the machine they were written on, and the repository says so. Expect to edit a path before an inference run starts.
What would falsify it

Any one of these, demonstrated, retires the claim from this site.

  • The reassembled file hashes to anything other than D70C813C513F5232A25313FA60338F862020BA942ED26D54F62511766FA5F044.
  • The two parts do not sum to 2,659,500,664 bytes.
  • src/model/config.py declares a different layer count, hidden size or head configuration than the table above.
  • A third party loads the checkpoint and finds a parameter count that cannot be produced by the declared architecture.
02
Retrieval format · Apache 2.0
Deterministic Executed here

LTMi-XT lattice coordinates and identifiers are deterministic

The claim

Over 10,000 trials a breadcrumb maps to the same cell of the 64 by 64 by 64 lattice every time, 10,000 of 10,000. Content-addressed locus identifiers are stable 10,000 of 10,000, and canonical JSON serialisation is stable 10,000 of 10,000. Breadcrumbs that share Topic, Subtopic and Concept land in the same cell 1,000 of 1,000. A 23-locus bundle round-trips through JSONL with 23 loci out.

The same input gives the same output on any machine. Timings vary, results do not.

coordinate stability
10,000 / 10,000
same breadcrumb, same cell
prefix locality
1,000 / 1,000
shared prefix, shared cell
identifier stability
10,000 / 10,000
BLAKE2b over canonical JSON
runtime
under 1 s
no network, no model, no key
What was measured

Format invariants at high N with no language model and no network in the path. The coordinate is derived from a BLAKE2b hash of the breadcrumb prefix, so determinism is a property of the construction, and this run is the check that the implementation matches the construction.

What this number is not
  • It is not a retrieval-quality result. Determinism says a locus always lands in the same place. It does not say that place is useful.
  • It is specifically not evidence that the lattice coordinate carries semantic signal. Our own three-way ablation found the opposite: random coordinates and BLAKE2b coordinates gave byte-identical loss and byte-identical unforced generation, and the coordinate was retired to an audit channel. That negative result is on the XE4 page under retired mechanisms and we are not quietly leaving it out here.
  • Cell utilisation in this run is 0.08% of the 262,144 cells, from 10,000 synthetic breadcrumbs drawn from a small vocabulary. That is a property of the test fixture, not a capacity measurement.
  • The timing entries in the output are machine-dependent and are not part of the claim.
The commands
In the order a stranger runs them
1. Clone, build, runshell
git clone --depth 1 https://github.com/Chorozion/LTMi-XT.git
cd LTMi-XT
npm install
npm run build
node examples/benchmarks/micro_bench.mjs
2. Compare against the run committed to the repositoryshell
node examples/benchmarks/micro_bench.mjs > mine.json

python - <<'PY'
import json
theirs = {t["test"]: t for t in json.load(open("examples/benchmarks/micro_bench_results.json"))}
mine   = {t["test"]: t for t in json.load(open("mine.json"))}
for name in ("lattice_coord_stable", "lattice_prefix_locality",
             "locus_id_stable", "canonical_json_stable", "jsonl_roundtrip_C2"):
    a, b = theirs[name], mine[name]
    key = "match" if name.startswith("jsonl") else "fraction"
    print(f"{name:<26} committed={a[key]}  yours={b[key]}  same={a[key]==b[key]}")
PY
Provenance
Whether we ran this sequence ourselves
Executed here 16 September 2026
Node 22.14 on Windows, clean clone at main, npm install and npm run build from scratch

Both blocks were run here. The five invariant tests matched the file committed to the repository exactly, and the comparison script in block 2 printed same=True on all five. The timing entries did not match and were not expected to: this run measured about 10.7 microseconds per coordinate against the committed file's 17.0.

Expected output
What success looks like
[
  { "test": "lattice_coord_stable",       "trials": 10000, "stable": 10000, "fraction": 1 },
  { "test": "lattice_cell_distinctness",  "trials": 10000, "distinct_cells": 200,
    "max_possible": 262144, "utilization": 0.08 },
  { "test": "lattice_prefix_locality",    "trials": 1000,
    "share_cell_when_prefix_matches": 1000, "fraction": 1 },
  { "test": "locus_id_stable",            "trials": 10000, "stable": 10000, "fraction": 1 },
  { "test": "canonical_json_stable",      "trials": 10000, "stable": 10000, "fraction": 1 },
  { "test": "latticeCoord_perf",          "trials": 10000, "totalMs": ..., "perOpUs": ... },
  { "test": "deriveLocusId_perf",         "trials": 10000, "totalMs": ..., "perOpUs": ... },
  { "test": "canonicalJson_perf",         "trials": 10000, "totalMs": ..., "perOpUs": ... },
  { "test": "chebyshev_perf",             "trials": 10000, "totalMs": ..., "perOpUs": ... },
  { "test": "jsonl_roundtrip_C2",         "loci_in": 23, "loci_out": 23, "match": true },
  { "test": "token_savings_C2_top6",      "full_corpus_bytes": 1056,
    "top6_loci_bytes": 895, "reduction_factor": 1.18 }
]
Tolerance
How close is close enough

The five invariant tests take no tolerance. Every fraction must be exactly 1, prefix locality must be exactly 1,000 of 1,000, and the round-trip must report 23 in and 23 out. The four timing entries are expected to differ from the committed file and from each other run; the committed file records about 17 microseconds per coordinate and a recent run on a current laptop was closer to 11. Neither number is the claim. The token-savings entry at 1.18 is a byte ratio on one 1,056-byte corpus and is reported here only because it is in the output; it is not a token-reduction claim and the file says so itself.

Hardware and runtime
Requirements
Node 20 or newer, npm, about 45 packages of build tooling. No GPU, no API key, no network after the install.
Runtime
npm install and the TypeScript build take roughly 20 seconds. The benchmark itself finishes in well under a second.
Verified on
Node 22.14 on Windows, clean clone at main. The five invariant tests matched the committed file exactly; timings did not, as expected.
What would falsify it

Any one of these, demonstrated, retires the claim from this site.

  • Any of the five invariant fractions comes back below 1.
  • Two breadcrumbs sharing Topic, Subtopic and Concept land in different cells.
  • The same breadcrumb produces different coordinates across two processes, two platforms or two Node versions.
  • A locus identifier changes when only key order in the source JSON changes, which would mean the canonical form is not canonical.
03
Constrained decoding · Apache 2.0
Deterministic Executed here

LENS-XT holds locked token positions at a preservation rate of exactly 1.0

The claim

On a masked-diffusion backend, positions locked by a spec are excluded from the unmasking loop and survive every denoising step, giving an anchor preservation rate of exactly 1.0. On a clean clone at main, pytest collects 259 tests and reports 253 passed, 5 skipped and 1 deselected with no network and no model weights.

The same input gives the same output on any machine. Timings vary, results do not.

anchor preservation
1.0
masked-diffusion backend, by construction
suite at main
253 passed
259 collected, 5 skipped, 1 deselected
runtime
about 8 s
CPU only, no weights needed
on an API backend
below 1.0
best effort via logit bias, asserted as such
What was measured

That the runtime does what the specification says about position locking, and that the property is enforced in code rather than hoped for. The masked-diffusion path excludes locked indices from the set of positions the sampler may touch, so preservation is structural. The suite asserts the rate is 1.0 on that path and asserts it is below 1.0 on the API path, which is the more interesting of the two assertions.

What this number is not
  • It is not a claim about the quality of generated text. Preservation says the locked span comes out unchanged. It says nothing about whether the tokens written around it are any good, and on this base model they often are not.
  • It is not a guarantee on autoregressive APIs. There the runtime uses logit bias and retry, the guarantee level drops to best effort, and the measured rate can fall below 1.0. The suite tests that case explicitly rather than pretending it does not exist.
  • The suite count is not a quality metric. It is reported here because the number is stated elsewhere on this site and a reader should get the same one.
  • The counts below are the default install. Add the optional PyTorch extra and the ten tests in tests/test_ltmi_module.py run instead of skipping: nine pass and one fails. The failure is tests/test_ltmi_module.py::test_variant_factory_set, which asserts the variant registry holds exactly seven base variants when five width-sweep entries have since been added beside them. It is a stale assertion in a test, not a fault in the runtime, and it is filed. If you install the extra and see one red line, that is the line.
The commands
In the order a stranger runs them
1. Install the package and validate a specshell
python -m venv .venv
. .venv/bin/activate          # Windows: .venv\Scripts\activate
pip install lens-xt
lensx --help
2. Run the suite from a cloneshell
git clone --depth 1 https://github.com/Chorozion/lens-xt.git
cd lens-xt
python -m venv .venv
. .venv/bin/activate          # Windows: .venv\Scripts\activate
pip install -e ".[dev,openai,server]"

pytest tests/ -q -m "not live"
3. Run only the locking and preservation assertionsshell
pytest tests/ -q -m "not live" -k "anchor or preserv or lock"

# The two assertions that carry the claim, read them before you trust them:
grep -n "anchor_preservation_rate" tests/test_mdlm_base.py tests/test_openai_backend.py
Provenance
Whether we ran this sequence ourselves
Executed here 16 September 2026
Python 3.10.11 on Windows, two fresh virtual environments, clean clone at main, commit 01e5eed

All three blocks were run here and the transcript below is what they printed. pip install lens-xt resolved to 0.1.0b1 and lensx --help listed explain, parse, run, serve and validate. The suite counts are this run's, not a repeated figure: 259 collected, 253 passed, 5 skipped, 1 deselected. A second run on the same commit with the optional PyTorch extra installed gave 256 passed, 2 skipped and 1 failed, which is the same suite answering a different question about the environment rather than a contradiction. Both are published, with their conditions.

Expected output
What success looks like
$ pytest tests/ -q -m "not live"          # default install, as the commands above
253 passed, 5 skipped, 1 deselected, 1 warning in 3.72s

$ pytest tests/ -q -m "not live"          # same commit, with the PyTorch extra
256 passed, 2 skipped, 1 failed, 1 deselected
FAILED tests/test_ltmi_module.py::test_variant_factory_set

$ pytest tests/ -q -m "not live" -k "anchor or preserv or lock"
54 passed, 1 skipped, 204 deselected, 1 warning in 4.48s

$ grep -n "anchor_preservation_rate" tests/test_mdlm_base.py tests/test_openai_backend.py
tests/test_mdlm_base.py:144:    assert r.metrics["anchor_preservation_rate"] == 1.0
tests/test_mdlm_base.py:179:    assert r.metrics["anchor_preservation_rate"] == 0.0
tests/test_openai_backend.py:198:    assert result.metrics["anchor_preservation_rate"] == pytest.approx(1.0)
tests/test_openai_backend.py:244:    assert result.metrics["anchor_preservation_rate"] < 1.0
tests/test_openai_backend.py:377:    assert result.metrics["anchor_preservation_rate"] >= 1.0
Tolerance
How close is close enough

The preservation assertions take no tolerance: 1.0 means every locked position, and a single altered token fails the test. The suite totals will drift as the repository moves, and a count within a few tests of 253 on a later commit is a healthy suite rather than a failure. A count far below it is not. Exactly one failure is expected if you installed the optional PyTorch extra, and it is the stale registry assertion named above; any other failure is worth reporting.

Hardware and runtime
Requirements
Python 3.10 to 3.12. CPU only. No GPU, no model weights and no API key for anything above.
Runtime
Install takes about a minute. The full suite finishes in under ten seconds.
Verified on
Python 3.10.11 on Windows, clean clone at main, which produced the counts printed above.
The part you cannot run
The live integration against Cassandra T1.5 needs weights that are not in this repository. It is marked live and deselected by default, which is why the deselected count is 1.
What would falsify it

Any one of these, demonstrated, retires the claim from this site.

  • A run where a locked span comes back altered on the masked-diffusion backend.
  • The preservation assertion in tests/test_mdlm_base.py fails rather than passes.
  • The API backend reports exactly 1.0 unconditionally, which would mean the best-effort path is not being measured honestly.
  • A reader constructs a spec whose locked range overlaps a position the sampler still writes to.
04
Training objective · DOI 10.5281/zenodo.20496783
Partly public Part executed here

Anchor-token masking gives a 1.67x out-of-distribution advantage

The claim

Fine-tuning a 1.3B masked-diffusion model on retrieval-grounded pairs under three objectives that differ only in which positions may be masked, anchor-token masking produces a 1.67x pooled held-out advantage over random-position masking, 95% bootstrap CI [1.51, 1.85] over 10,000 resamples, P(anchor greater than random) = 1.000, on 48 held-out queries across four domains. The in-domain advantage is 1.26x, CI [1.18, 1.34], and the two intervals do not overlap. A reverse-asymmetric control falls below random at P = 0.006. A V and O projection ablation reaches 0.416 against the full LoRA's 0.337 at half the trainable parameters, and a Q and K ablation falls to 0.136.

Data, base model and method are public. Some of the code is not, so part of this is a reimplementation.

pooled held-out advantage
1.67x
anchor over random, n = 48
95% bootstrap CI
[1.51, 1.85]
10,000 resamples, percentile
in-domain
1.26x
CI [1.18, 1.34], no overlap with held-out
reverse control
below random
P = 0.006, direction is load-bearing
What was measured

Corpus-vocabulary overlap of the text a fine-tuned model generates after a locked anchor, on domains it never trained on. Three rank-16 LoRA adapters were trained on identical data for 300 steps at sequence length 192, differing only in which class of position the mask draw could touch, then scored on 15 in-domain and 48 held-out queries.

What this number is not
  • The metric is vocabulary overlap, not accuracy and not likelihood. It measures whether the continuation stays in the right vocabulary, which on a model this weak is the only thing worth measuring, and it is not comparable to a benchmark score.
  • It is a low-shot effect that closes. The sweep runs 1.97x to 2.19x at 100 training steps and falls to 1.07x by 1,000 steps on 144 examples. Presented as a permanent objective it would be a misrepresentation; it is one phase of a curriculum.
  • One model, one size, one data regime. There is no evidence here that the effect survives at scale, on a different architecture, or on a different base.
  • The cooking corpus is the weakest of the four domains. The effect there is positive but smaller, and the pooled figure carries it.
Where an outsider stops

Only one of the three training arms is released. eval/lora_finetune.py in the Cassandra repository implements the anchor arm. The random-position and reverse-asymmetric arms, and the overlap scorer that produced the held-out numbers, are not published. The paper specifies all three precisely enough to write, and the three differ from each other by which positions the Bernoulli draw may touch, but a reader running this is reimplementing two arms and a scorer from a written spec rather than executing ours. The Zenodo deposit does not close that gap: it holds the PDF alone. Anyone who wants the exact figures back should expect to write about a hundred lines of Python first, and should expect their point estimate to land near ours rather than on it.

The commands
In the order a stranger runs them
1. Gather the public piecesshell
# 1. The base model (2.6 GB, see claim 01 for the hash check)
git lfs install
git clone --depth 1 https://github.com/Chorozion/Casandra-t1-diffusion-edge-model.git
cd Casandra-t1-diffusion-edge-model
git lfs pull --include="weights/cassandra_ep5_fp16.pt.part*,release/tokenizer.json"
cat weights/cassandra_ep5_fp16.pt.part00? > cassandra_ep5_fp16.pt

# 2. The training corpora, from the LTMi-XT repository
git clone --depth 1 https://github.com/Chorozion/LTMi-XT.git ../LTMi-XT
cp ../LTMi-XT/examples/benchmarks/bundles/C{1,2,3}.json .

# 3. The held-out query set ships in this repository already
ls eval/queries_heldout_extended_v2.json
2. Confirm the corpora are the ones the paper usedshell
sha256sum C1.json C2.json C3.json

# The three bundles are byte-identical to the ones the study trained on.
# Check against the LF hashes in the expected output below. If you are on
# Windows and git rewrote the line endings on checkout, you will get three
# different hashes for the same content, and the expected block names those
# too so you are not sent chasing a corpus problem you do not have.
3. Train the released arm, then write the other twoshell
# The anchor arm, as released. Expect to fix two path assumptions first:
#   - cassandra_loader lives in eval/, not runner/
#   - the bundles are read from the repository root
python eval/lora_finetune.py

# The other two arms differ from it in one place. In the training loop the
# released code restricts the mask draw to answer positions:
#
#     rand_mask = (torch.rand(targets.shape) < ratio) & loss_mask
#
# random-position masking drops the restriction, so the draw may touch the
# question as well; reverse-asymmetric masking inverts it, so the draw may
# touch only the question. Section 3 of the paper states all three. Train
# three adapters from the same seed, then score each on the held-out set by
# corpus-vocabulary overlap and bootstrap the ratio over 10,000 resamples.
Provenance
Whether we ran this sequence ourselves
Part executed here 16 September 2026
Windows, for the artifact checks only. No GPU run was performed.

Only block 2 was run here. The three corpus hashes below are what sha256sum prints against the bundles as the LTMi-XT repository serves them, and they match the bundles the study trained on. They were re-derived from a fresh pull on 16 September 2026 after the first set published here turned out to be the hashes of a Windows checkout with converted line endings, which told every reader on Linux and macOS that their correct corpus was the wrong one. Blocks 1 and 3 were not run: block 1 is a 2.6 GB download and block 3 needs a GPU and two training arms that do not exist in public code. The experimental figures below are quoted from the paper and were not reproduced for this page.

Expected output
What success looks like
sha256sum C1.json C2.json C3.json
b42cb4e14683546ec34e43cc362915cd5c82d8b4a6d862bb94a9bebbfeda1bb3  C1.json
5fe1d6bf54dc248c3806318bfa6f33a79bc0474c7b4a6f2efefd9ef8d13a62b0  C2.json
a34a8ee8e86e943c87e8b660db18f6169bab6df16d5a681103583ad0d7107f13  C3.json

# Those are the files as the repository serves them, with LF line endings.
# On Windows, git may have converted them on checkout. If your three hashes
# are d6da8ff8, c969497f and 3c01a4cd instead, that is the same content with
# CRLF endings and your corpus is correct. Normalise and re-check with:
#   python -c "import sys;p=sys.argv[1];b=open(p,'rb').read().replace(b'
',b'
');open(p,'wb').write(b)" C1.json

# published result, for comparison with whatever your reimplementation prints
pooled held-out   anchor / random = 1.67x   95% CI [1.51, 1.85]   P = 1.000
in-domain         anchor / random = 1.26x   95% CI [1.18, 1.34]
reverse control   below random                                    P = 0.006
ablation          V/O 0.416   full 0.337   Q/K 0.136
Tolerance
How close is close enough

The corpus hashes are byte-exact and take no tolerance. The experimental figures do. A reimplementation with a different scorer and different seeds should be judged on three things rather than on digits: anchor beats random on the held-out set with a bootstrap interval that excludes 1.0; the held-out advantage exceeds the in-domain advantage; and the reverse control lands below random. A run that returns 1.4x or 1.9x with an interval excluding 1.0 has reproduced this. A run that returns 1.05x with an interval spanning 1.0 has not, and we would want to hear about it.

Hardware and runtime
Requirements
One CUDA GPU. A 1.3B model in FP16 with rank-16 LoRA on four projections fits comfortably in 12 GB and was developed on consumer hardware.
Runtime
Measured rather than estimated, on the card the study ran on. Training all three arms takes 5.5 minutes, at 147, 75 and 101 seconds. Generating and scoring all four arms over 504 generations takes 11 minutes. The bootstrap is seconds on a processor. End to end that is about 20 minutes, plus the 2.6 GB download. An earlier version of this page said an hour, which was a guess and was wrong by roughly a factor of three.
The slow part
Writing the two missing arms and the scorer, which is still the cost today because that code is not public yet. Budget a working day, and match the paper's decoding settings exactly: 12 unmasking steps, temperature 0.8, top-p 0.9, repetition penalty 1.3 and a fixed generation seed. This entry changes the day the arms ship, and the 20 minute figure above is what the run itself costs once they have.
Not verified here
We did not re-run the study to publish this page. The corpus hashes, the artifact availability and the released trainer were checked. The training run itself was not repeated.
What would falsify it

Any one of these, demonstrated, retires the claim from this site.

  • Anchor-token masking does not beat random-position masking on a held-out domain at the same training budget.
  • The held-out advantage is smaller than the in-domain advantage, which would make the effect a fit result rather than a generalisation result.
  • The reverse-asymmetric control matches or beats random, which would mean the direction of the asymmetry is not what carries the effect.
  • A Q and K only ablation matches the V and O ablation, which would move the mechanism away from the value and output projections and undercut section 6 of the paper.
  • The advantage fails to decay with training steps, which would contradict our own sweep and suggest the measurement is picking up something else.
05
Memory layer · measured on a private harness
Mechanism only Executed here

Retrieval memory is bounded by disk rather than by RAM

The claim

Streaming retrieval over a disk-backed vector store holds resident memory at 146 MB while the store grows from 100,000 to 1,000,000 vectors. Loading the same index into RAM reaches 2,338 MB on the same data, 16 times more at a million records. The retrieved top-5 sets are byte-identical between the two paths at every size.

The behaviour reproduces. Our exact figures came off a harness that is not public, and will not.

resident, streaming
146 MB
flat across a 10x store increase
resident, load-all
2,338 MB
same data, same queries
results
identical
top-5 sets match byte for byte
our harness
not released
the mechanism below is, and it runs
What was measured

Peak resident set size of one process answering the same query two ways over the same file, at three store sizes, with the returned identifiers compared between the two paths. The point of the measurement is the shape of the curve rather than the height of it: streaming is flat and loading is linear.

What this number is not
  • It is not an approximate-nearest-neighbour result. Both paths do a brute-force scan over every vector. Nothing here says anything about query latency at scale, and past roughly a million records an index is the right answer, not this.
  • It is not a claim that the two paths cost the same. Streaming trades memory for read bandwidth. It reads the whole file on every query, which is exactly the tradeoff you would want stated before adopting it.
  • 146 MB and 2,338 MB are one machine, one embedding dimension and one payload. Both numbers move with the interpreter, the numpy build, the embedding model held in the same process and whether record text is resident.
  • It is not a statement about the public sophia-memory package. See the gap note below, which matters more than the headline.
Where an outsider stops

The script that produced 146 MB and 2,338 MB is not public and there is no plan to publish it, because it is wired into an internal corpus we cannot share. The public sophia-memory package is the product-facing library rather than that harness, and its VectorStore loads the whole matrix into memory on first query, so it is not the streaming path this number came from. We are saying that plainly rather than letting the repository link imply otherwise. What follows reproduces the mechanism and the shape of the curve on synthetic data. It will not reproduce our two numbers, and if a reader reports back that it did, something is wrong.

The commands
In the order a stranger runs them
1. Install two dependenciesshell
python -m venv .venv
. .venv/bin/activate          # Windows: .venv\Scripts\activate
pip install numpy psutil
2. Save this as ram_bench.py and run itpython
import os, gc, tempfile
import numpy as np
import psutil

DIM, K, SIZES = 384, 5, [100_000, 500_000, 1_000_000]
proc = psutil.Process()
rss_mb = lambda: proc.memory_info().rss / (1024 * 1024)

def build(path, n, dim, seed=0):
    rng = np.random.default_rng(seed)
    with open(path, "wb") as fh:
        for start in range(0, n, 50_000):
            rows = min(50_000, n - start)
            block = rng.standard_normal((rows, dim), dtype=np.float32)
            block /= np.linalg.norm(block, axis=1, keepdims=True)
            fh.write(block.tobytes())

def stream_topk(path, n, dim, q, k, chunk=50_000):
    """Bounded buffer. Never holds more than chunk rows at once."""
    best_v = np.full(k, -np.inf, dtype=np.float32)
    best_i = np.full(k, -1, dtype=np.int64)
    peak = rss_mb()
    with open(path, "rb") as fh:
        for start in range(0, n, chunk):
            stop = min(start + chunk, n)
            block = np.fromfile(fh, dtype=np.float32,
                                count=(stop - start) * dim).reshape(stop - start, dim)
            scores = block @ q
            del block
            cat_v = np.concatenate([best_v, scores])
            cat_i = np.concatenate([best_i, np.arange(start, stop, dtype=np.int64)])
            sel = np.argpartition(-cat_v, k)[:k]
            order = sel[np.argsort(-cat_v[sel])]
            best_v, best_i = cat_v[order], cat_i[order]
            peak = max(peak, rss_mb())
    return best_i, peak

def load_all_topk(path, n, dim, q, k):
    mat = np.fromfile(path, dtype=np.float32).reshape(n, dim)
    scores = mat @ q
    peak = rss_mb()
    sel = np.argpartition(-scores, k)[:k]
    return sel[np.argsort(-scores[sel])], peak

tmp = tempfile.mkdtemp(prefix="ram_bench_")
rng = np.random.default_rng(7)
q = rng.standard_normal(DIM, dtype=np.float32); q /= np.linalg.norm(q)
print(f"baseline RSS {rss_mb():.0f} MB")
for n in SIZES:
    path = os.path.join(tmp, f"vec_{n}.f32")
    build(path, n, DIM); gc.collect()
    a, stream_peak = stream_topk(path, n, DIM, q, K); gc.collect()
    b, load_peak = load_all_topk(path, n, DIM, q, K)
    print(f"N={n:>9,}  stream {stream_peak:7.0f} MB   load-all {load_peak:7.0f} MB   "
          f"ratio {load_peak/stream_peak:5.2f}x   top{K} identical {np.array_equal(a, b)}")
    del b; gc.collect(); os.remove(path)
Provenance
Whether we ran this sequence ourselves
Executed here 16 September 2026
Python 3.10 on Windows, numpy and psutil in a fresh virtual environment

Both blocks were run here and the output below is the transcript. The script was written for this page, run, corrected once and run again: the first version used a numpy memmap and did not hold resident memory flat, which is the finding recorded under hardware and runtime. The published figures of 146 MB and 2,338 MB were not reproduced and cannot be from public artifacts, which is what the gap note above says.

Expected output
What success looks like
baseline RSS 28 MB
N=  100,000  stream      30 MB   load-all     176 MB   ratio  5.79x   top5 identical True
N=  500,000  stream      30 MB   load-all     764 MB   ratio 25.05x   top5 identical True
N=1,000,000  stream      30 MB   load-all    1498 MB   ratio 49.41x   top5 identical True
Tolerance
How close is close enough

Judge the shape, not the digits. The streaming column must stay flat within a few megabytes across a tenfold increase in store size. The load-all column must grow roughly linearly and land near the arithmetic size of the file, which at a million 384-dimensional float32 vectors is 1,536,000,000 bytes or about 1,465 MB. The identity column must be True at every size; if the two paths ever disagree on which records come back, the streaming implementation is wrong and the memory saving is worthless. Absolute resident figures vary by tens of megabytes with the interpreter version, the numpy build and the operating system, and none of that is the claim.

Hardware and runtime
Requirements
Python 3.9 or newer, numpy, psutil, and about 2.1 GB of free disk for the three temporary files. No GPU.
Runtime
Roughly two to four minutes, almost all of it generating and writing the synthetic vectors rather than querying them.
Verified on
Python 3.10 on Windows, which produced the output above.
One thing worth knowing
A numpy memmap implementation does not hold resident memory flat on Windows, because mapped file pages count in the process working set. We measured it climbing to 1,495 MB at a million vectors, effectively matching the load-all path. Explicit chunked reads, as written above, do hold flat. If you implement this with memmap and see growth, that is the reason and not a refutation.
What would falsify it

Any one of these, demonstrated, retires the claim from this site.

  • Resident memory on the streaming path grows with the store size rather than staying flat.
  • The two paths return different top-k sets on the same data and the same query.
  • The load-all path does not grow roughly with the size of the file, which would mean the comparison is not measuring what it claims to.
  • Someone demonstrates that the streaming path's read cost makes it unusable at the sizes we quote it for, which would not falsify the memory claim but would make it the wrong thing to have measured.
Considered and rejected

Four claims that did not make the list, and why

These are real results on other pages of this site. None of them is retracted here. Each one failed a different test for this page, and naming the failure is more useful than leaving the claim off and hoping nobody notices the gap between what we assert and what we hand over.

Rejected
/research/xe4

Expert routing at 0.819 top-1 and 0.983 top-3 across 48 experts

The labelled probe set and the bootstrap comparison file behind this number are not published, so there is nothing for a stranger to run. The method is readable, in the compositional-model paper shipped as a PDF in the sophia-memory repository, and the result is real, but a readable method is not a reproduction. The same page already states the gap that matters more than the headline: on free-form queries rather than labelled probes the same router sits at 0.47 to 0.50, and the first funded milestone is gated on closing that. Publishing the probe set is the fix and it has not been done.

The Grad-Shafranov solver agrees with the Cerfon-Freidberg closed form

This one runs in the reader's own browser, which is a better position than most, but the solver lives in this site's bundle rather than in a public repository, so there is no clone to make and no command to give. The parameters are stated on the page in full, an 81 by 121 grid in R and Z, an over-relaxation factor of 1.92, a tolerance of 1e-6 and Solov'ev boundary data in the Cerfon-Freidberg closed form, which makes it reimplementable by anyone who wants to. Reimplementable is not the same as reproducible and we are not going to blur the two.

The fitted reversibility amplification rate of 0.0550 matches an independently measured median Lyapunov exponent of 0.0547

This is the most interesting rejection on the list, because two numbers arrived from two unrelated measurements and agreed to better than one percent. The integrator, the 99,856-particle production ensemble and the initial conditions are not released. Without the seeds a reader measures their own ensemble in their own four-singularity well and gets their own exponent, which tests the physics but does not check our arithmetic. The report PDF carries the full method if someone wants to try.

Rejected
/paper-front

Paper Front ships 228 game files, a signed Android build and a verified Windows installer

Every part of this is checkable, and none of it is a research result. Counting files in a download and verifying a signing certificate are integrity checks on a game. They belong on that page, which already carries them along with a blunt list of what is not true, and putting them here would pad the count at the cost of the point.

Corrections

Three faults this page found in our own documentation

Running the commands turned up one number that does not survive a clean run and two faults in a published procedure. All three are corrected here, and the correction is the one to cite. None of them changes a research result. All three would waste an hour of somebody trying to check one.

Corrected
What the documentation says against what a clean run prints
WhereStated thereWhat a clean run gives
lens-xt test count271 tests passing on this site, and a repository badge reading 249The suite collects 259, and what it reports depends on one optional dependency. On a default install: 253 passed, 5 skipped, 1 deselected. With the PyTorch extra, ten tests in tests/test_ltmi_module.py run instead of skipping and one of them, test_variant_factory_set, fails on a stale registry assertion: 256 passed, 2 skipped, 1 failed. Quote the condition with the count.
Cassandra T1 checksum commandsha256sum -c weights/checksums.sha256, run from the repository rootVerifies nothing from the root, because the file lists bare filenames. It has to run from inside weights/.
Cassandra T1 checksum fileA plain list of SHA-256 hashes and filenamesCRLF line endings, so even from the right directory sha256sum -c reads a carriage return into every filename and reports that no file was verified. Strip the carriage returns first.
The second and third are two faults in one file, and together they mean the repository's own documented verification command cannot succeed as written on Linux, macOS or git-bash. Neither is findable by reading the file. The working command is in claim 01, and it confirms the checkpoint hashes to its published value.
If a run disagrees

Tell us, and say so publicly

A failed reproduction is more useful to us than a successful one, and it is worth more to a reader than either. If a hash differs, a deterministic test comes back below 1, or a reimplementation of claim 04 fails to separate anchor from random on held-out data, the result belongs in the open. Send it and we will either fix the artifact or retire the claim from this site, and this page will say which.