Jonathan Mellette Contact

Method · Receipts for every number

How this site was measured

Every number about the work on this site was measured on 12 October 2026 from each project’s committed tree, its git history, or a command run that day. Figures recorded earlier, on machines that can’t be re-measured from here, are marked recorded. Nothing on this page is collapsed, so it prints whole.

Measured
on one Mac: macOS 26.6.2 (Apple Silicon), Node 26.0.0, git 2.54.0, Python 3.9.6
Instrument
A read-only Node script of 774 lines with no dependencies, plus each project’s own tests and harnesses, run so that nothing in a project changed
Scope
20 entries on this site: 1,119 files in 18 git repositories and 2 folders outside git

The promise and its limits

The home page makes one promise: every number about the work came from the code. That covers the project numbers: lines, dates, commits, tests, benchmark scores, gate verdicts, memory peaks. It doesn’t cover the biography. Career history and the account of how I work are prose. They’re told, not measured, and nothing here pretends otherwise.

Nothing was copied forward: not from a project’s own notes, not from a README’s claims, and not from the previous version of this site. Every figure was re-derived from the project itself, which is how the corrections at the foot of this page were found. Tests and harnesses ran on scratch copies, or in modes that write nothing, so measuring a project never changed it.

Each figure on the site is in one of three states, and the badge says which.

No badge

  • Measured on 12 Oct 2026.
  • Counted from the committed tree, read from git history, or produced by a command run that day.

re-run 12 Oct 2026

  • Used only in the evidence table below.
  • The instrument itself (a test suite, a harness, a self-play gate) was run on 12 Oct 2026, and the result shown is that run’s.

recorded 21 Sep 2026

  • Carried from an earlier run on a machine that can’t be re-measured from here.
  • Every one is listed below under Recorded, not re-run, with its date and its source.

Evidence, abridged

Twelve claims, each with its instrument, its result and its limit

The twelve come from eleven case studies, two of them from OpenEar. Each claim links to the case where its method is written out in full. The last column is what the instrument can’t show, because a result without its limit is only half a receipt.

Results without a badge were measured on 12 Oct 2026 from the project’s own files and records.
ClaimInstrumentResultLimit
FIRST LIGHT’s boards can all be finished A grid-reachability prover inside the 327-test suite 132/132 boards proven, 39 of them with indestructible gold in play re-run 12 Oct 2026 It proves no brick is sealed off, not that every brick is easy to hit. The build’s test step reports a failure but doesn’t yet stop the build.
OpenEar uses the speech recogniser that lost on word error rate A word-error-rate harness over 124.8 min of public-domain audio and three models; its raw outputs re-derived on 12 Oct 3.3% vs 2.9% averaged per recording (pooled: 725 vs 644 errors in 21,801 words, 3.33% vs 2.95%); on the first 21-minute recording, 96% vs 48% of chunks end a sentence, at 36× real time on a CPU vs 19× on a GPU Trained audiobook readers, not live speech.
OpenEar’s translator was re-tested blind against a rival, and kept A blind LLM-judge panel with hidden negative controls; a scorer self-test of 21 controls 960 judgments, 0 judge chunks rejected; NLLB vs MADLAD: Korean 72.9 vs 70.7, Spanish 87.3 vs 87.4 (a tie); self-test 21/21 re-run 12 Oct 2026 LLM judges, not a human panel. Korean translation scores about 14 points below Spanish.
Q&AI ships only when it identifies the likely picks Deterministic self-play; the ship script refuses anything below 98% 368/368, a mean of 15.6 questions against a theoretical floor of 9.94 (log₂ 983). Without the information-gain fix: 96.7%, and the gate fails re-run 12 Oct 2026 Perfect-answer simulation. One wrong answer gives 84.2%; the full 983-character corpus gives 82.6%. A separate deploy command skips the gate, for use straight after a green run.
The framework stops private material before a public push A pre-execution hook on every shell command an AI coding agent runs 13 synthetic events: 8 refused and 5 allowed, every verdict as designed, in 45–153 ms each across two runs re-run 12 Oct 2026 It sees only the agent’s shell commands, and it matches a denylist; it doesn’t understand what it blocks.
Three outages on two Macs were a kernel clock wrap, not load A control host at a different uptime, then Apple’s published XNU source 15,882 vs 3 sockets in TIME_WAIT at 68 vs 6 days of uptime recorded 7 Oct 2026; the guard changes from a plain < to TSTMP_LT in macOS 26.4 That the installed release carries the fix rests on source lineage.
OpenSong fits a 24 GB-class music model to smaller cards A process-versus-device GPU memory log, and a single-variable A/B rig 21,337 → 8,804 MiB on a 4:35 song; Compact peaks at 5,763 MiB with the allocator capped at 6 GiB, emulating an 8 GB card recorded 21 Sep 2026 One RTX 3090. The 12 GB and 8 GB fits are sizing claims, not runs on those cards.
Replicator’s accepted sounds can’t quietly get worse A regression set accepted by ear, seeded renders, and a 0.05 dB gate 6 of 6 within 10−6 dB of baselines accepted four weeks earlier re-run 12 Oct 2026 Acceptance needs a human listener, and the gate runs only when someone runs it.
OpenSign’s verse text is exact Generated from the official text by a script that asserts its sources 710 entries. The AI-recalled first cut had 9 of 30 wrong. 40 references were excluded by hand.
OpenSteward converges with no server A seeded shuffle test of the fold engine 11 events from 3 devices, folded in 500 orders to identical state; 9/9 tests pass re-run 12 Oct 2026 Engine-level, with a toy reducer. Never run across two physical machines.
CartoFancy’s “you’ve lost” is a proof A cross-check against exhaustive search 240 boards × 2 settings agree; 4,000 of 4,000 seeded deals solved re-run 12 Oct 2026 Small boards, and its own seeded deals rather than the classic numbered ones.
OpenOrder is in weekly use The generator’s fingerprint, read across the archive of decks actually projected 29 consecutive Sundays; 31 decks across two congregations An inference from fingerprints, not a usage log. The app has 0 automated tests.

Definitions

What each headline count includes, and what it leaves out

Application

The home page’s 17 applications use this definition, published verbatim from the measuring script’s output:

By that definition there are 17. Eleven are live, released or in regular use: FIRST LIGHT, Q&AI, OpenHouse, Whisper’s Shout and the church website engine are live; OpenEar and OpenVoice are released; OpenOrder, Encounter, OpenSign and ClaudeBar are in use. Six are working builds: OpenSteward, h@ck3r, OpenSong, Replicator, Pocket Puzzles and CartoFancy. Not counted: the agent governance framework (a framework), the infrastructure (operations scripts), and 3dPuzzler and the Platformer (single-scene prototypes).

Each project’s standing is declared from its own evidence (a store page, a release tag, a live address, an archive of real use); its dates are measured. All 17 began between 16 Mar 2026 (OpenEar) and 10 Oct 2026 (CartoFancy). Counting the two prototypes would make 19; counting only what is live, released or in use makes 11, which is why the home page gives 17 alongside 11.

Lines

  • The committed tree only. Lines in each repository’s committed tree at HEAD. Untracked, ignored and uncommitted files never count.
  • Blank lines are in the raw count. The non-blank count sits beside it wherever it matters: 224,947 raw, 207,367 non-blank.
  • Comments are included. FIRST LIGHT is comment-heavy: drop comment lines as well as blank ones and roughly 47,000 of its 81,480 lines remain (a rough line filter, not a parser).
  • Each project’s own source. A per-project list of languages decides what is source. Dependency folders, build output, vendored third-party code, generated UI components, lockfiles, data and content files, documentation and images are left out.
  • Binary only above 1% control bytes. A stray NUL inside a string can’t hide a source file. That rule restored three FIRST LIGHT files that git’s own test treats as binary.
  • Each file counted once, even where two entries include it: ClaudeBar belongs to both the framework and the lab.
  • A read-only script. It allows six read-only git commands and refuses any other, writes only its own output file, and records each repository’s HEAD commit, so every count is tied to a commit. Run again on 12 Oct, it reproduced every figure.

Framework reach

35 is the number of folders in the workspace that carry their own per-project rules file for the agent governance framework: 34 at the top level and 1 nested. The search goes three levels deep and skips dependency and build folders. It includes this portfolio and some projects that aren’t shown here, so it measures the framework’s reach, not the number of things built.

The other headline figures

  • 4 public repositories. GitHub’s API reports OpenEar, OpenOrder, OpenSign and OpenVoice as public, checked 12 Oct 2026. Nothing else is public, so nothing else is linked.
  • 130 builds set live on Steam. Since 16 Aug 2026, the step in FIRST LIGHT’s release pipeline that records a build as live refuses unless the upload log shows the build was sent; the first 23 entries (builds 84–113) were carried over from the hand-kept list it replaced. The record holds 130 events for 130 distinct builds, numbered 84 to 235.
  • 29 consecutive Sundays. The OpenOrder row in the evidence table.
  • 17 applications, 224,947 lines and 35 governed projects. The definitions above, and the table below.

Per project

Lines, dates and commits for every entry on the site, then lines by language

Measured 12 Oct 2026 by the read-only script. Lines are raw / non-blank, from the committed tree at HEAD. Dates run from the earliest commit, counting earlier history kept privately, to the last. Commits are given for original histories only.
ProjectLines (raw / non-blank)First → last commitCommits
FIRST LIGHT81,480 / 77,583 → 4,643
OpenEar6,473 / 5,582 → — history recreated
OpenOrder12,395 / 10,940 → — history recreated
OpenSteward9,004 / 8,061 → 94
Q&AI28,588 / 26,496
including 11,256 lines of one-off data-curation scripts
→ 469
h@ck3r7,820 / 7,015 → 107
OpenVoice5,059 / 4,624 →
a dated note in the code shows work under way by 12 Jun, before the first commit
— history recreated
Encounter4,745 / 4,317 → 32
OpenSign4,429 / 4,083 → — history recreated
OpenSong3,439 / 3,100 → 83
Replicator2,384 / 2,236 → 20
OpenHouse6,188 / 5,854 → 59
Whisper’s Shout2,232 / 1,980 → 31
Church website engine4,371 / 4,017
counted once, through the demo church’s copy plus the shared tooling
→ 143
Framework tooling1,002 / 933
3 Node tools
Not in git; earliest entry in its dated history — not in git
ClaudeBar488 / 430 → 8
Pocket Puzzles7,950 / 6,585 → 30
CartoFancy32,008 / 29,204 → 22
3dPuzzler1,910 / 1,674 → 15
Platformer2,772 / 2,452 → 24
Infrastructure scripts210 / 201— not in git— not in git
All 21, each file counted once224,947 / 207,367 → 5,780
across the 15 repositories with original history
Non-blank lines by language, every project, each file counted once: 207,367 in all
TypeScript124,587
Python23,057
JavaScript19,026
CSS13,819
GDScript9,958
HTML9,012
Shell4,403
Seven others (Batch, PowerShell, Swift, PHP, Rust, shaders, VBScript)3,505

Why some commit counts are missing

OpenEar, OpenOrder, OpenSign and OpenVoice are the four public repositories. Their public histories were recreated (OpenVoice’s at its release in June 2026, the other three in September 2026), so the history on GitHub starts at the recreation, and its commit count measures that, not the work. The table leaves those counts out rather than print a number that means nothing.

Their start dates still come from git. For OpenEar, OpenOrder and OpenSign the earlier history was kept privately, and the script reads it without restoring it: OpenEar’s begins on 16 Mar 2026, OpenOrder’s on 22 Mar and OpenSign’s on 25 Jun. OpenVoice kept no earlier history, so its git dates begin on 23 Jun 2026, and a dated note in its own code shows development under way by 12 Jun.

The other 15 repositories keep their original history: 5,780 commits, 4,643 of them FIRST LIGHT’s. A commit count shows how the work was cut up, not how much of it there was; it’s here because anyone with the repository could check it.

Recorded, not re-run

The figures this site carries from earlier runs

These were recorded before 12 Oct on machines that can’t be re-measured from here: a Windows GPU server, two agent hosts, a single-board computer, a project’s own past. Each carries a recorded badge where it appears, and none was re-run for this site.

Every recorded figure on the site, with the date it was recorded and where it came from. “By 25 Sep 2026”: the source gives no date, so the date is the last commit of the code that records it.
FigureValueRecordedWhere it came from
OpenEar: video memory 0 MB in captions-only mode; about 4.6 GB with translation Windows’ per-process video-memory counters on the GPU machine, as the 0.12.0 release notes record
OpenEar: translation speed 0.28 s (Korean) and 0.33 s (Spanish) per segment for NLLB, against 0.73 s and 0.49 s for MADLAD The public model registry in the repository and the evaluation report behind it; no raw timing log was kept
OpenEar: cost per language About 0.3–0.4 s per sentence for each language some phone is reading By 25 Sep 2026 The broadcast function’s own documentation in the public server code, recorded on the Windows machine
OpenEar: live chunk lengths Median 7.7 s; 39% of chunks run to the 10 s cap By 25 Sep 2026 One live deployment’s log, summarised in the header of the public server code
OpenSong: GPU memory 21,337 → 8,804 MiB on a 4:35 song; 5,763 MiB for Compact with the allocator capped at 6 GiB (an emulated 8 GB card); 7,222 → 32 MiB left after a cancelled job PyTorch’s own counters in the engine’s memory log, written beside each setting in its configuration and, for the cancelled job, in the engine’s own code; one RTX 3090
OpenSong: timings 51.8 vs 35.2 s per 1,000 tokens in the acoustic stage, about 47% slower; Compact at about 4.8× the song’s length; the Windows attention shim about 2.4× faster 20–21 Sep 2026 The A/B rig, one run per setting, and the engine’s configuration notes; one RTX 3090
Infrastructure: ports exhausted at each outage 96–98% of 16,384 ports in TIME_WAIT at three outages (16,083 in July; 15,795 and 15,882 in October); an older harness filled the table about ten times more slowly Jul–Oct 2026 Read on the hosts at the time and written into the operations log
Infrastructure: the uptime control 15,882 of 16,384 ports at 68 days of uptime, against 3 at 6 days Read on both hosts at the time and written into the operations log
Infrastructure: allowlist controls and agent host The listed host got a 200 and a LAN host left off the list got a 403; the agent host has 16 GB of memory The proxy’s own log, whose single DENY line was counted again on 12 Oct; the agent host’s memory as read on it at setup
Infrastructure: edge LLM install About 5 minutes from the first command to a serving web UI Timestamps in one board’s install logs
Q&AI: development history The pre-fix 92% and ~21 questions, the question ranks (41st → 3rd, and 28th → 2nd), the 21 ordering misses traced to one cause, 15.9 → 15.6 questions, the 95.9% → 90.7% score drop, the gate floor’s 80% → 90% → 98% history, the one win that answering “don’t know” cost, the two characters a correct audit left unidentified, the 75% wording threshold, the 4-of-5 to 2-of-5 swing in a five-agent sample, and the ~40% speech-clipping rate 29 May – 11 Jun 2026 The project’s commit history, its harness source and its dated design notes. Today’s engine is measured separately: 368/368.

Corrections since the last version

What re-measuring changed

The previous version of this site carried figures that were true when written, or that were never measured. Re-deriving everything from the projects found these. Each page now carries the measured figure.

Claims on the previous version of the site, and what the projects measure today.
ProjectThe last version saidMeasured now
OpenEar Whisper 2.8% against Parakeet 3.1%, a gap inside the noise, found by a benchmark that chose the model 2.9% against 3.3%, averaged across all five recordings; pooled, 644 against 725 errors in 21,801 words, about one extra error every 270 words. The switch came first; the benchmark, four days later, tested and confirmed it.
OpenOrder 70–86 slides per deck 47–85, median 59, across the 31 decks actually projected. The old range came from a sample of six generated drafts.
FIRST LIGHT A 36-song score, four narrators, 84 tests, release on 1 Sep A 63-track in-game score, counted in the committed music folder (33 on the soundtrack album), five narrators, 327 tests in 24 files. The demo has been live since 18 Aug; the full game releases on 10 Nov 2026.
Q&AI A 98% deploy gate on a regression harness of about 990 cases 98% clean wins on a 368-character cohort. The full corpus is 983 characters, runs at 82.6%, and doesn’t gate deploys.
Encounter 13 releases, as a desktop app 14 tagged releases, v1.1.0 to v1.8.0. It runs as a local server in two browser windows; the desktop shell is shelved.
OpenVoice About 30 minutes from recording to trained voice About 30 minutes of speech is the input; training is 100 LoRA steps.
h@ck3r Packaged for macOS, Windows and Linux; a fuzz run with zero crashes Only Windows installers were ever built, and none survive. The old fuzz covered one program; a seeded fuzz of all 13 on 12 Oct found a crash it had missed, fixed the same day.
The whole site About 90,000 lines; nine applications in five months 224,947 lines of committed first-party source (207,367 non-blank) and 17 applications since March 2026, by the definitions above.

Measured on macOS 26.6.2, Apple Silicon · Node 26.0.0 · git 2.54.0 · Python 3.9.6 · read-only

← Back to how I build