Skip to content
98 changes: 65 additions & 33 deletions specs/igla/own_model.t27
Original file line number Diff line number Diff line change
Expand Up @@ -71,13 +71,35 @@
; 0 vacuous (cells 16-18); playra/tern-tc-9m and tern-tc-9m-t27 200, tern-tc-100m 401 (cells 7
; and 8); the board /state 200 (cell 21). A review of that PR is what the engine asks of cells
; 7, 16, 17, 18 and 27; REVIEWED turns true only in a later PR that names the approving review.
; - live: GET huggingface.co/api/models/playra/tern-tc-9m and .../tern-tc-9m-t27 returned 200;
; .../tern-tc-100m returned 401, the same as a made-up name, so no 100M is public.
; - test on 2026-10-18, t27c with `--backend ml` (#10165), lab checkout at master 8887f17f4:
; ml/host_io_model 3/3 pass, 0 vacuous. `t27c compile specs/ml/host_io_model.t27 --backend ml`
; builds a binary that exits 0 and leaves a real 24-byte /tmp/t27_tokens.bin (bytes 00000000
; 01000000 50c40000 ffffffff 07000000 78563412, sha256 48548924cac8...); with that path made a
; directory the binary aborts, exit 134. So t27c lowers file I/O (Linux syscalls on a real fd)
; and the arena of ml/arena_heap is plain t27 it already lowers: cell 24 has its passing test.
; The backend builds that file-I/O program only; the training binary is the next entry.
; - test on 2026-10-18, same t27c, lab checkout at master 2d358a708, after the PR that added
; ml/train_slice_model (#10186): 5/5 pass, 0 vacuous. `t27c compile
; specs/ml/train_slice_model.t27 --backend ml` builds a binary that runs 20 steps of the
; nn/hslm_backward training step through `use` (loss 3.2975044 to 0.32346588), writes the trained
; trits, biases and both losses to a 379-byte /tmp/t27_train_slice.bin, reads it back byte for
; byte and exits 0; with that path made a directory it aborts, exit 134. So t27c lowers a model
; spec to a training binary, for one 3-head slice; not for the whole 3-block model (cell 25).
; - published on 2026-10-18: playra/tern-tc-100m on Hugging Face, the 100M ternary model of the
; igla-coder-gpu ladder (n_layer 12, d_model 768), trained on RunPod; final.pt sha256
; 620c80b642ff87f06f945f6dbedf122e69fd524e93b7b20d1fd9bfcfd3d08300, both run summaries pinned
; by sha256 in its model_card.t27 (14/14 on the lab). Validation bits per byte 0.4722 against
; 0.4217 for the fp twin of the same recipe: the ternary model is the worse of the two.
; - live: GET huggingface.co/api/models/playra/tern-tc-9m, .../tern-tc-9m-t27 and
; .../tern-tc-100m returned 200 (tern-tc-100m answered 401 before 2026-10-18).
; GET board-production-2dec.up.railway.app/state returned 200 and a made-up path 404; its
; snapshot is dated 2026-10-05, so the board is live and 12 days stale.
; - review: no PR behind any cell has a review, so no DELIVER cell is VERIFIED. #10164 merged on
; 2026-10-18 02:43Z without one. The evidence above is put to review in the PR that adds this
; line, re-taken on the lab at its own base; REVIEWED still waits for a PR that names its review.
; 2026-10-18 02:43Z without one, and #10179, which put the evidence to review, was merged at
; 03:16Z by an auto-merge another session enabled, before the reviewer reached it; #10186
; (cell 25) merged at 03:42Z the same way. The PR that adds this line puts the evidence of
; cells 7, 8, 16, 17, 18, 25 and 27 to review again; REVIEWED still waits for a later PR that
; names the approving review.
; - board on 2026-10-18, cell 26: specs/fpga/ddr3_head_bandwidth.t27 (11/11 tests, 0 vacuous on the
; lab), lowered by t27b verilog around a LiteDRAM core, routed by openXC7 for xc7a200tfbg484-2 and
; flashed on the AX7203 with openFPGALoader -c digilent_hs2. Its UART receipt: 325000 beats
Expand All @@ -90,7 +112,7 @@
; from those that do. This is a sequential read of a pattern, no weight on the board and no
; compute from DDR3, so the cell is a draft at 10 percent, a DELIVER step waiting for its review.
; The engine asks an engineering LEARN step for a source link, a PRACTICE step for a passing test
; and a DELIVER step for a review. So: 1 published, 16 verified, 6 drafts, 4 gaps.
; and a DELIVER step for a review. So: 1 published, 17 verified, 8 drafts, 1 gap.

; PERCENT is a second, separate number per cell: an estimate of how much of that part exists, with
; its basis in SOURCES. It never feeds a status. The lens and overall figures are plain means, every
Expand All @@ -100,9 +122,10 @@
; (PPL 2.96 at ctx 27) were wiped by EXP-002 and survive only in the ledger. In t27 the loss, four
; optimizers and the HSLM spec's forward and backward passes pass, and that spec is now the trained
; model, its VSA path included (see MEASURED); the ternary STE, the training step and the data
; and checkpoint layout now pass too, on a model slice and on bytes; the STE over the whole model,
; heap and file I/O exist as pure t27 contracts (ml/arena_heap, ml/file_io_contract) that t27c does not
; lower, and `t27c --backend ml` does not exist.
; and checkpoint layout now pass too, on a model slice and on bytes; heap and file I/O are t27
; (ml/arena_heap, ml/file_io_contract, ml/host_io_model) and `t27c --backend ml` lowers them to a
; binary that writes a real file, and to a training binary for one head slice
; (ml/train_slice_model); the STE and a training binary over the whole model are not done. A 100M ternary model is public; nothing past 100M parameters is.

; Not claimed: no model quality beyond the numbers in SOURCES; no GIF or MP4, stills only.
; phi^2 + 1/phi^2 = 3 | TRINITY
Expand Down Expand Up @@ -192,7 +215,7 @@ pub const SOURCES : [27]str = [
"igla-coder-gpu results/report_pair_10b.md",
"t27 specs/igla/coder/*.t27: 9 of 9 compile",
"huggingface.co/playra/tern-tc-9m",
"",
"huggingface.co/playra/tern-tc-100m, final.pt sha256 620c80b6...d08300",
"",
"trinity docs/experiments/FOUND_EXPERIMENTS_SUMMARY.md",
"trinity-training src/hslm, 64 Zig files",
Expand All @@ -208,39 +231,39 @@ pub const SOURCES : [27]str = [
"board-production-2dec.up.railway.app/state",
"t27 specs/port/trinity/fpga/openxc7-synth/ternary_matvec.t27",
"t27c test-report on 17 ML specs: 17 compile",
"",
"",
"t27 specs/ml/host_io_model.t27 3/3 via t27c --backend ml (#10165); arena in ml/arena_heap.t27",
"t27 specs/ml/train_slice_model.t27 5/5; its --backend ml binary trains one slice 20 steps (#10186)",
"t27 specs/fpga/ddr3_head_bandwidth.t27: head read 2769 MB/s on the AX7203; no weights on it",
"t27 specs/igla/own_model.t27"
];

/// What would ground each gap; "" for a cell that has its source.
pub const MISSING : [27]str = [
"", "", "", "", "", "", "",
"a public 100M checkpoint: playra/tern-tc-100m answers 401, like a made-up name",
"",
"any run past 100M parameters: none exists",
"", "", "", "", "", "", "",
"",
"",
"", "", "", "", "",
"heap allocation and file I/O lowered by t27c: neither exists; ml/arena_heap.t27 and ml/file_io_contract.t27 are the contract it must meet",
"a t27c backend that lowers a model spec to a training binary: none exists",
"",
"",
"",
""
];

/// The measurements per cell (see the header for how each was taken).
pub const GROUNDED : [27]bool = [true, true, true, true, true, true, true, false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, false, true, true];
pub const TEST_PASS : [27]bool = [false, false, false, true, true, true, false, false, false, false, false, false, true, true, true, false, false, false, false, false, false, true, true, false, false, false, false];
pub const GROUNDED : [27]bool = [true, true, true, true, true, true, true, true, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true];
pub const TEST_PASS : [27]bool = [false, false, false, true, true, true, false, false, false, false, false, false, true, true, true, false, false, false, false, false, false, true, true, true, false, false, false];
pub const REVIEWED : [27]bool = [false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false];
pub const LIVE : [27]bool = [false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false];
pub const LIVE : [27]bool = [false, false, false, false, false, false, true, true, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false];

/// What a host passes the viewer, per cell: the earned status code and the step number as a label.
pub const STATUS : [27]u8 = [4, 4, 4, 4, 4, 4, 3, 0, 0, 4, 4, 4, 4, 4, 4, 3, 3, 3, 4, 4, 5, 4, 4, 0, 0, 3, 3];
pub const STATUS : [27]u8 = [4, 4, 4, 4, 4, 4, 3, 3, 0, 4, 4, 4, 4, 4, 4, 3, 3, 3, 4, 4, 5, 4, 4, 4, 3, 3, 3];
pub const LABELS : [27]str = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27"];

/// Percent of each part that exists, estimated from its source (see the header). Never a status.
pub const PCT : [27]u8 = [60, 70, 80, 80, 60, 100, 50, 0, 0, 100, 100, 20, 80, 65, 95, 75, 55, 40, 70, 15, 60, 40, 100, 0, 0, 10, 50];
pub const PCT : [27]u8 = [60, 70, 80, 80, 60, 100, 50, 90, 0, 100, 100, 20, 80, 65, 95, 75, 55, 40, 70, 15, 60, 40, 100, 60, 30, 10, 50];

/// The t27c test-report counts the PRACTICE cells quote.
pub const ML_SPECS_MEASURED : i32 = 17;
Expand All @@ -265,11 +288,11 @@ pub const ROWS : [20]str = [
"In t27: loss, optimizers, HSLM pass",
"17 of 17 ML specs compile on the lab",
"9 of 9 IGLA CODER specs compile",
"1 published, 16 verified, 6 drafts",
"4 gaps, about 54 percent overall",
"1 published, 17 verified, 8 drafts",
"1 gap, about 61 percent overall",
"Batched f32 HSLM trainer",
"Shadow weights for the whole model",
"File I/O, heap, --backend ml",
"A whole-model training binary",
""
];

Expand Down Expand Up @@ -322,7 +345,7 @@ test every_step_is_a_cell {

test a_gap_is_named_not_filled {
assert gaps_are_named(SOURCES, MISSING, GROUNDED);
assert count_true(GROUNDED) == 23;
assert count_true(GROUNDED) == 26;
var c : i32 = 0;
while (c < CELL_COUNT) {
const i : usize = @intCast(c);
Expand All @@ -336,15 +359,16 @@ test a_gap_is_named_not_filled {

test a_status_is_earned_not_chosen {
assert statuses_earned(STATUS, DOMAIN, GROUNDED, TEST_PASS, REVIEWED, LIVE);
// the evidence slide's "1 published, 16 verified, 6 drafts" and "4 gaps"
// the evidence slide's "1 published, 17 verified, 8 drafts" and "1 gap"
assert count_status(STATUS, STATUS_PUBLISHED) == 1;
assert count_status(STATUS, STATUS_VERIFIED) == 16;
assert count_status(STATUS, STATUS_DRAFT) == 6;
assert count_status(STATUS, STATUS_GAP) == 4;
assert count_status(STATUS, STATUS_VERIFIED) == 17;
assert count_status(STATUS, STATUS_DRAFT) == 8;
assert count_status(STATUS, STATUS_GAP) == 1;
assert count_true(REVIEWED) == 0;
// every passing test is a PRACTICE step: the t27 bench, MultiPL-E and coder specs (cells 4 to
// 6), loss, optimizers, forward pass, matvec, and the ML specs that compile (cell 23)
assert count_true(TEST_PASS) == 8;
// 6), loss, optimizers, forward pass, matvec, the ML specs that compile (cell 23) and the
// file I/O t27c lowers (cell 24)
assert count_true(TEST_PASS) == 9;
var c : i32 = 0;
while (c < CELL_COUNT) {
const i : usize = @intCast(c);
Expand All @@ -356,6 +380,14 @@ test a_status_is_earned_not_chosen {
// the 9M model is live, but a live page does not stand in for a review
assert LIVE[6];
assert STATUS[6] == STATUS_DRAFT;
// and the same holds for the public 100M model (step 8)
assert LIVE[7];
assert STATUS[7] == STATUS_DRAFT;
assert STATUS[23] == STATUS_VERIFIED;
// the slice training binary (step 25) is grounded, but a DELIVER step waits for a review
assert GROUNDED[24];
assert step_stage(24) == STAGE_DELIVER;
assert STATUS[24] == STATUS_DRAFT;
// the board is live and was sourced, so it is the one published cell
assert STATUS[20] == STATUS_PUBLISHED;
}
Expand Down Expand Up @@ -386,11 +418,11 @@ test the_compile_counts_are_the_measured_ones {
}

test percent_per_lens_is_a_plain_mean {
assert mean_pct(0, 9) == 55;
assert mean_pct(0, 9) == 65;
assert mean_pct(9, 9) == 70;
assert mean_pct(18, 9) == 38;
// the evidence slide's "about 54 percent overall"
assert mean_pct(0, CELL_COUNT) == 54;
assert mean_pct(18, 9) == 48;
// the evidence slide's "about 61 percent overall"
assert mean_pct(0, CELL_COUNT) == 61;
}

test the_training_step_cells_are_drafts_until_reviewed {
Expand Down
38 changes: 19 additions & 19 deletions specs/igla/own_model_board.t27
Original file line number Diff line number Diff line change
Expand Up @@ -48,23 +48,23 @@ pub const LENS_CELLS : i32 = 9;

pub const JOB : str = "own_model";
pub const STAGE : str = "own_model";
pub const MSG : str = "1 published, 16 verified, 6 drafts, 4 gaps; 54%";
pub const MSG : str = "1 published, 17 verified, 8 drafts, 1 gaps; 61%";
/// What MSG says once its numbers are taken out.
pub const MSG_WORDS : str = " published, verified, drafts, gaps; %";
pub const OVERALL_PCT : u8 = 54;
pub const PROGRESS : f64 = 0.54;
pub const OVERALL_PCT : u8 = 61;
pub const PROGRESS : f64 = 0.61;

pub const KEY_LENS : str = "lens_pct";
pub const KEY_CELLS : str = "cells";
pub const KEY_STATUS : str = "status";
pub const KEY_PCT : str = "pct";

pub const LENS_PCT : [3]u8 = [55, 70, 38];
pub const CELL_STATUS : [27]u8 = [4, 4, 4, 4, 4, 4, 3, 0, 0, 4, 4, 4, 4, 4, 4, 3, 3, 3, 4, 4, 5, 4, 4, 0, 0, 3, 3];
pub const CELL_PCT : [27]u8 = [60, 70, 80, 80, 60, 100, 50, 0, 0, 100, 100, 20, 80, 65, 95, 75, 55, 40, 70, 15, 60, 40, 100, 0, 0, 10, 50];
pub const LENS_PCT : [3]u8 = [65, 70, 48];
pub const CELL_STATUS : [27]u8 = [4, 4, 4, 4, 4, 4, 3, 3, 0, 4, 4, 4, 4, 4, 4, 3, 3, 3, 4, 4, 5, 4, 4, 4, 3, 3, 3];
pub const CELL_PCT : [27]u8 = [60, 70, 80, 80, 60, 100, 50, 90, 0, 100, 100, 20, 80, 65, 95, 75, 55, 40, 70, 15, 60, 40, 100, 60, 30, 10, 50];

/// The size of the compact metrics object, in bytes, computed from the keys and values above.
pub const METRICS_BYTES : i32 = 627;
pub const METRICS_BYTES : i32 = 630;

pub fn is_digit(ch: u8) -> bool {
return ch >= '0' and ch <= '9';
Expand Down Expand Up @@ -245,10 +245,10 @@ test a_gap_cell_is_never_above_zero_percent {
assert CELL_PCT[i] <= 100;
c = c + 1;
}
// the public 100M model, cell 7, is a gap: drawn at 10 percent it is refused
assert CELL_STATUS[7] == STATUS_GAP;
// the run past 100M parameters, cell 8, is a gap: drawn at 10 percent it is refused
assert CELL_STATUS[8] == STATUS_GAP;
var wrong : [27]u8 = CELL_PCT;
wrong[7] = 10;
wrong[8] = 10;
assert gaps_at_zero(CELL_STATUS, wrong) == false;
}

Expand All @@ -261,9 +261,9 @@ test the_tally_sums_to_twenty_seven {
assert count_status(CELL_STATUS, STATUS_OPEN) == 0;
assert published + verified + drafts + gaps == CELL_COUNT;
assert published == 1;
assert verified == 16;
assert drafts == 6;
assert gaps == 4;
assert verified == 17;
assert drafts == 8;
assert gaps == 1;
}

test the_message_is_the_tally {
Expand All @@ -273,12 +273,12 @@ test the_message_is_the_tally {
const n : i32 = @intCast(MSG.len);
assert n <= MSG_MAX;
// one number wrong, a word changed, or a number added: each refused
assert msg_matches("1 published, 15 verified, 6 drafts, 4 gaps; 54%", STATUS, overall) == false;
assert msg_matches("1 published, 16 verified, 6 drafts, 4 holes; 54%", STATUS, overall) == false;
assert msg_matches("1 published, 16 verified, 6 drafts, 4 gaps; 54% of 100", STATUS, overall) == false;
assert msg_matches(MSG, STATUS, 48) == false;
assert nth_number(MSG, 1) == 16;
assert nth_number(MSG, 4) == 54;
assert msg_matches("1 published, 17 verified, 7 drafts, 1 gaps; 61%", STATUS, overall) == false;
assert msg_matches("1 published, 17 verified, 8 drafts, 1 holes; 61%", STATUS, overall) == false;
assert msg_matches("1 published, 17 verified, 8 drafts, 1 gaps; 61% of 100", STATUS, overall) == false;
assert msg_matches(MSG, STATUS, 60) == false;
assert nth_number(MSG, 2) == 8;
assert nth_number(MSG, 4) == 61;
assert nth_number(MSG, 5) == -1;
}

Expand Down
Loading