How the project got here

UOR-R4 began in June 2026 as an attempt to run a language model without a transformer or heavy arithmetic, using the geometry of primes, rotations and symmetry groups. Over four months it tried five broad approaches. Each was replaced when it hit a wall, and each left lessons. The 32 steps below are the audit's "eras", read from the GitHub archive (items #1 to #2495). The work has been careful and open about its failures, and it has not yet produced a model that holds a conversation.

A timeline from 10 June to 19 October 2026. A top band shows five phases, A to E, divided into 32 numbered eras. An area chart below shows catalog records per day, with nothing before 21 July and a peak of 74 on 13 October.

Five phases and 32 eras on one time axis, with the number of catalog records per day underneath (1,051 of the catalog's 1,173 records carry a date). Era spans come from the archive audit; the daily counts come from archive/catalog.jsonl. The figure draws Phase E to 19 October; the era snapshot below ends on 15 October.

Terms follow the glossary. #N is an issue or pull request number in UOR-Foundation/uor-r4. Every row below is a measurement of what a recorded item said, at that item's scope, unless marked otherwise. Eras overlap on their edges, and some items were read by title only (docs/labs/repo-renormalization-2026-10-19/audit/eras/eras.json, field notes).

Phase A: compile a teacher into tables (10 June to 26 August)

In plain words: watch a real language model, the "teacher", and compile what it does into lookup tables and a graph that a CPU can run with no multiplications.

EraDatesWhat was tried, and what happened
01 Prime routerto 21 JulA router over sparse 512-dimension prime vectors (#1) and hypervector algebra (#9), folded into the graph-compiler plan (#10)
02 R4G1 graph compiler21 to 26 JulThe graph file format, certificates, and the rule that only serving must be multiplication-free (#11, #157). Mostly structure
03 Quality chain23 to 24 JulA 16-fix plan began at 0.3% against a 31.7% baseline (#65). A metric reading zero hid a real loss (#102). The Furey algebra code was never wired into inference (#103, #249)
04 Token-index pivot26 JulBad scores came from tokenizer indexing, not the runtime (#201)
05 Integer store27 Jul to 3 AugShift-and-add assignment gave smaller, more accurate stores with zero multiplies (#243). Phase-clock addressing was negative (#392)
06 Geometry as substrate3 to 6 AugE8 codebooks beat sign codes at equal bits (#395). A zeta-grid headline was a storage artifact (#440)
07 Broad text5 to 8 AugThe 26 to 27% ceiling on broad text came from the teacher, not the store (#437)
08 Bigger teacher8 to 12 AugSmolLM2-360M became the pinned baseline (#509, #516). Ruled-out mechanisms were kept behind gates (#515)
09 Serving10 to 19 AugA corpus-ordering bug was a major cause of garbage output (#755)
10 Plan S0 to S719 to 26 AugTruth baseline 29.52% against 28.12% (#821). Abstention, coherent free-running text and planning all ended as LIMIT. Fixed W(3,3) geometry showed no advantage (#929)

Why it ended. Gains measured with the teacher's text supplied never became coherent text the model wrote itself. The reset in #948 made a learned geometric decoder the objective.

Phase B: a learned geometric decoder (25 August to 8 September)

In plain words: learn a model directly, after first checking that ordinary attention can live inside the geometry.

EraDatesWhat was tried, and what happened
11 Decoder reset25 to 29 AugA one-layer R4 mixer gained 4.44%, short of its 5% bar (#951). Route-native attention worked on exact identities (#969)
12 The #973 programme28 Aug to 3 SepSoftmax attention reproduced exactly in R4/Spin coordinates (#1002). A 7.15M-parameter model could continue text but not chat (#1017). A copied cell scored 99.17% (#1050)
13 Build first3 to 5 SepThe owner replaced a rule that forbade running code (#1111) and restored a single Rust model path (#1125)
14 Native model v05 to 8 SepTyped Stop/Copy/Add selection with a 663-answer regression set (#1140). An honesty pass withdrew fabricated scorecards (#1198). The project got its name (#1174)

Why it ended. No single mechanism failed. A lab closed the early-September ladder on 29 September in favour of one plan of record (#1507).

Phase C: native learner and exact memory (8 to 25 September)

In plain words: teach a home-grown Rust model to remember exact facts and versions, then find out why it still could not write prose.

EraDatesWhat was tried, and what happened
15 Version-intent cycles8 to 12 SepExact versioned memory, with rules for abstention and sealed reports (#1222, #1224). The shared-core gate failed (#1229)
16 Addressed attention12 to 17 SepEmission was the first bottleneck (#1230). Typed attention exported to exact Boolean tables (#1254). Passes came on constructed panels only (#1264)
17 Falsification sweep19 to 20 SepAttention in the vector-symbolic layer (VSA) was inert, and the trained model and shipped artifact differed by 0.57 bits per byte (BPB) (#1284). The readout took 99.97% of per-token compute (#1287)
18 Relational readers20 to 23 SepA reader-policy gain did not reproduce (#1330), and H4 tied a categorical control (#1344)
19 Prose deficit23 to 25 SepDoubling training changed nothing (#1366). The recurrent learner scored 2.110 negative log-likelihood (NLL, lower is better) against 2.085 for the ordinary model and 1.574 for the transformer (#1389). Integer serving shipped (#1397), prose stayed at 0 of 5 (#1398)

Why it ended. The offline learning ladder reached integer serving but not prose, so focus moved to a chat model and parallel labs.

Phase D: the geometric stack, labs, chat and memory (26 September to 11 October)

In plain words: train a deeper "geometric stack" on GPUs, serve it in integers, and push it toward chat and memory with several AI labs working in parallel.

EraDatesWhat was tried, and what happened
20 Serving contract26 to 29 SepThe stack reached parity with a transformer control (#1437). Fixed E8 and H4 codebooks lost to k-means (#1456). Integer serving, on a dense model with every multiply replaced by a table read, cost 4.3 times more energy than its float parent (#1449)
21 Durable labs29 Sep to 2 OctThe learned pointer copied the most recent value (#1558). An exact log with a prime sieve did the retrieval (#1559, #1607)
22 Scale ladder2 to 5 OctCUDA training and a 1.39B-token chat corpus (#1660). Retrieval caused 2.2% of failing rows (#1708). A constant reply beat every model on tier C (#1733)
23 Contest5 to 6 OctThe weak part was representation, not the output head (#1780). The geometric read's measured gain was seed reliability (#1798)
24 End-to-end serving6 to 9 OctA chat stack served multiplier-free and bit-exact (0.93277 BPB at 64 windows; the 0.877 float figure used 512, so the pair is not comparable) (#1893, #1899). Data mattered more than size (#1913)
25 Constructor line6 to 10 OctM2 stayed at 8 of 512 complete replies (#1882) until the rule on three negatives stopped the line
26 Instruction following9 OctCompliance was 0 of 6 (#1918) until each demand was paired with its short answer (#1958)
27 Governance reset9 to 10 OctMain became the single source of truth (#2015) and the rule that a negative closes a configuration only was written (#2165). Geometric operations were 0.05% of the stack's arithmetic (#2186)
28 Pointer and binding9 to 11 OctThe pointer used softmax and could not be served (#2072). Read binding was KEEP (#2190)
29 M2 replies10 OctReplies rose from 8 to 437 of 512 on development rows (#2162), then scored 0 of 128 on a fresh draw (#2164)

Why it ended. The fresh failure showed the development panel had been fit, and later bans on softmax and matrix multiplication made this path non-compliant (#2164, #2251, #2263).

Phase E: lawful operators and the discrete substrate (10 to 15 October)

In plain words: replace softmax and matrix multiplication with true geometric operations, then learn on exact integers.

EraDatesWhat was tried, and what happened
30 Mechanism rungs10 to 13 OctSoftmax-free rank reads were REJECT (#2160). Quaternion matrices and icosian weights were KEEP (#2193, #2216). The starling read lost entries to eviction at long context (#2239)
31 Operator phase12 to 14 OctSoftmax and matmul were banned (#2251, #2263). A rank-margin loss, the Hamilton gate and SpiralCore/FBS projection were added. Controls passed and nothing was trained
32 Discrete substrate13 to 15 OctInteger learning passed its CUDA controls (#2379). In the pilot, top-8 hits rose from 173 to 1,169 while aggregate loss also rose (#2449, #2454). The prime-zeta construction qualified (#2473)

After the snapshot (15 to 19 October). The owner re-allowed offline float training on 18 October, with an export-gap check. The K16 runs then completed with no KEEP: the best top-1 was 65 and 463 of 14,287 rows, below a unigram table at 1,226 (K16 outcome). The A8 address-cell dose ended at its registered first diagnostic stop (A8 dose). Training stays held until the owner releases it (charter ยง5.1).

Where the effort went

Bars showing, for each of 14 weeks from 20 July to 19 October, the share of records that were model results. For the eight weeks from 31 August the share is 60%, 79%, 38%, 43%, 80%, 78%, 11% and 13% in order, with a sharp drop in the week of 12 October.

Share of each week's records that were model results (positive, negative, inconclusive or a diagnostic stop). Source: archive/catalog.jsonl, counted by ISO week (for example week 36 is 59 of 99 records, week 42 is 34 of 309); see also the corrected table in docs/labs/repo-renormalization-2026-10-19/audit/synthesis.md section 3. The figure shows 14 weeks, from week 30 (20 July).

The chart is a measurement of the audit's record counts. Results fell from 78% of the week's records in the week of 5 October to 11% in the week of 12 October.

WindowModel-line resultsOther model-line recordsGovernance and operationsResults share
9 to 11 Oct8321477%
12 to 18 Oct3411615711%
19 Oct421713%

Part of the fall was ordered, not chosen. On 12 and 13 October the owner's bans on softmax and matmul, the GPU-only rule and the Rust-first rule forced a rebuild of the substrate and many tool ports. So the 89% of non-result records that week is an upper bound on discretionary process. Many of the 34 "results" that week are kernel parity or qualification passes, not learning. Five training efforts have run on the discrete path since 13 October (the A2 pilot, Dose 1, rows Dose 2, K16 and A8), and none produced a KEEP. Source: docs/labs/repo-renormalization-2026-10-19/audit/synthesis.md section 3, from the audit's records/*.jsonl.

Go deeper