Timeline
Not logged in

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

10 check-ins

2026-09-17
03:53
flow.dot rework: two-column waterfall (client left, Fog right)

- rankdir=TB with per-column step boxes: 1 keygen -> 2 encrypt -> 3 hollow record -> 4 fogrs ship (client column); 5 Mistic FPGA worker -> probe results (+ fhetch_sim local-replay alt) on the Fog column - rank=same pairs keep the trust-boundary crossings horizontal: ship->worker (red: ciphertexts + encrypted weights + trace only) and results->decrypt (blue: ciphertexts only) - polished step labels with accurate numbers (31 ciphertexts = 8+7+16, ~168k instructions, ~1.9 GB, 4-job quota); client square = secret key, prompt, plaintext answers never leave 0700 client_home - rendered design/flow.svg regenerated; README already links it leaf check-in: 87f8b10eac user: andrew tags: trunk

03:47
Add design/flow.dot + rendered flow.svg: end-to-end record/replay pipeline diagram

- Hand-written Graphviz DOT source (repo convention: no Python tooling) - Two trust-boundary clusters: CLIENT (secret key, prompt, plaintext answers) vs SERVER/FOG (ciphertexts + encrypted weights only); red edges mark the boundary crossings, blue returns ciphertexts to the client - 8-step pipeline: keygen -> encrypt (31 packed ciphertexts: 8 per-answer + 7 shared + 16 heads) -> hollow record -> fogrs ship (~1.9 GB, 4-job quota) -> Mistic FPGA worker (~168k instructions, ~1 min) -> probe results -> decrypt/client-side argmax -> e2e-corpus-assert + tripwire; fhetch_sim shown as the dashed local-replay alternative - README: intro now links the SVG + render command - Fix slot-vector count: 31 at V=97 in enc.rs blurb (was wrongly 29) check-in: f18c409524 user: andrew tags: trunk

03:13
README: suggested-steps section + stale-number fixes from the vocab-scale edition

- New 'Suggested steps' section: build -> local roundtrip (cpu/sweep) -> live Fog (fog/fog-sweep, credentials + quota note) -> model-change loop (corpus edit, twin retrain, make data, V mirrors together, gate order), plus budget intuition (head = 5 CTC per position-group; V=10k still ~2 min worker wall) - enc.rs blurb: 29 slot vectors at V=97 (was 27 at V=65) - trace: ~168k instructions / ~1.6 s local replay (was ~160k/1.4 s) check-in: 5cb74bd9f1 user: andrew tags: trunk

03:02
Merge branch vocab-scale into trunk — vocab-ceiling edition. Closes ticket [05ad61aa7ed31a7e99bd4698290ae8e21e91be64]. Generalize answer head to V_GROUPS = ceil(V/FF) (was hard-coded 3 groups); V 65->97 via 32 filler tokens proving the 4-group/16-probe plumbing; geometry sync guard across the Rust/C++ FFI (one-sided V bumps fail loudly); twin checkpoint re-save fix; design/VOCAB_SCALE.md with budget math and Phase A/B gate record. Gates at V=97: build --locked, cpu MATCH on all 16 output cts (168,265 FHETCH instr), check ~2e-8 incl filler lanes, sim PASS, sweep 6/6 + leak tripwire clean, range check in-band. check-in: 187522cece user: andrew tags: trunk
02:49
Vocab 65->97: 32 filler tokens, V_GROUPS 3->4, geometry sync guard

Phase B of the vocab-ceiling edition: pads the vocabulary with 32 synthetic filler tokens (xxq01..xxq32, no training pairs) so the generalized head machinery runs at V_GROUPS=4 / 16 output probes, with zero-padded tail-group lanes exercising the group-3 path.

- corpus.rs: VOCAB_FILLERS; build_vocab() includes them - consts.rs: V=97 (V_GROUPS/N_LOGITS/traces all derive automatically) - llm_common.h: sync C++ V mirror with consts.rs (was 65) - llm_kernel.cpp: llmfog_expected_vocab_size() FFI - backend.rs: assert_kernel_geometry() on every encrypt/server_run/ decrypt path — one-sided V bumps now fail loudly instead of silently cross-shifting logit groups - twin.rs: re-save checkpoint on the perfect-convergence break (the best-eval-only save kept a stale checkpoint that mis-decoded germany->tokyo); twin retrained from scratch at V=97 - data/, twin/model-rs.safetensors: re-exported artifacts

Gates at V=97: build --locked; cpu MATCH on all 16 output cts (16 probes logit0..15, trace cache key groups_4, 168,265 instr); check MATCH everywhere incl. filler lanes (~2e-8); sim PASS; sweep 6/6 + tripwire clean; activations inside band (resid 18.3, logits 88.4). Decode unchanged: paris on the capital-of-france prompt. Full record in design/VOCAB_SCALE.md (Phase B section). leaf check-in: 99b39c8f93 user: andrew tags: closed, vocab-scale

02:33
Generalize answer head to V_GROUPS = ceil(V/FF): vocab ceiling lifted

ctHeadA/B/C triplets -> ctHead[w][g] packing; N_GROUPS/V_GROUPS derived from V and FF; tail groups zero-padded when V % FF != 0.

- run_circuit.{h,cpp}: outputs sized ANSWER_WINDOW * N_GROUPS - kern/llm_kernel.cpp: loadIO/tag_input loops ct_head{w}_{g}; N_LOGITS derived; trace cache keyed with {groups, N} so a stale trace recorded under a different geometry can never silently replay - enc.rs: generic per-(w,g) packing, lane u -> v = g*FF+u - backend.rs/main.rs: decode and check use generic group/lane indices - design/VOCAB_SCALE.md: budget math, binding constraints, gate record

V=65 output byte-identical. Gates green: build --locked, make cpu (differential MATCH, 'paris'), make check (2.6e-8), make sim, make sweep 6/6 + leak tripwire clean. check-in: 0cd3815631 user: andrew tags: vocab-scale

02:05
Create new branch named "vocab-scale" check-in: b79d3a5cfb user: andrew tags: vocab-scale
2026-09-02
21:50
initial empty check-in check-in: ca2205437b user: andrew tags: trunk
21:50
Initial public release: encrypted tiny-QA on the Niobium Fog — Rust CLI + candle twin + OpenFHE C++ kernel. BSD-3-Clause, SPDX headers, LICENSE at root. check-in: f68c4dd827 user: andrew tags: trunk
21:17
Track ignore-glob only: .gitignore retired (git-era leftover), its patterns merged into .fossil-settings/ignore-glob check-in: 81e7460944 user: andrew tags: trunk