Project Trajectory

98 days, 374 commits, 16 releases. Scrutinizer was a sprint through the frontier of biologically-inspired rendering, where theoretical correctness meets visual stability at 60fps.

This page documents the development arc. For the vision science and shader implementation, see Inside the Math.

November 2025 – February 2026

The Numbers

Scrutinizer was built in a 98-day sprint, from November 2025 through February 2026. Here's how it compares to its sibling project, Psychodeli+ (a year-long evolution of a 1996 screensaver into an AI-directed audio-reactive visualizer).

Metric Scrutinizer Psychodeli+
Commits 374 1,703
Calendar span 98 days 340 days
Active days 37 (38%) 175 (52%)
Lines written / deleted +46,908 / -13,504 +492,839 / -271,393
Net codebase 11,057 lines / 42 files ~130k lines / 275 files
Shader lines 2,052 (3 files) ~4,500 (2 files)
Documentation 46 markdown files 128 markdown files
Golden captures 95 PNGs / 8 versions 78 images (essay)
Releases 16 tags (v1.0–v1.6.0) Continuous deploy
Reverts 7 (3 in one day) ~15
Peak commits/day 63 (Nov 23) 45
Longest streak 14 days 29 days
AI co-authored* 3 (1%) 88 (41% in Feb)

Scrutinizer is a sprint where Psychodeli+ is a marathon. It shipped one release every 6 days and made 63 commits on launch day. Every perceptual experiment ran through the shader, which was touched in 9% of all commits.

*AI co-author counts reflect git workflow. The co-author tag records who runs git commit, which does not show who wrote the code. In Scrutinizer, the developer handled all git commits directly. In Psychodeli+, the AI agent started making commits.

Monthly Churn

2025-11 | +24,680  -7,555   (net +17k)   ← THE BIG BANG
2025-12 | +17,690  -4,916   (net +13k)   ← Perceptual accuracy push
2026-01 |  +2,218    -374   (net +2k)    ← Mobile + calibration
2026-02 |  +2,320    -659   (net +2k)    ← De-monolith refactor

The Revert Graph: Where Fidelity Meets Stability

The reverts are the most telling part of the git history. On December 13, 2025, three rollbacks happened within 30 minutes. Each one pulled the shader back to a less ambitious but more stable tier of perceptual fidelity.

Most of the engineering effort went into the gap between "theoretically correct" and "visually stable at 60fps."

Nov 22, 2025, 17:10
Initial commit
Electron scaffolding, first peripheral.frag
Nov 23, 17:58
Fix: white screen when disabling foveal view
First stability issue: the shader had no bypass path
Dec 11, 06:37
WIP: Investigating vertical line artifact
Pushing toward Tier 1.6. Shader complexity was causing rendering artifacts.
Dec 13, 14:41
Revert: roll back shader to Tier 1.6 (v1.4.1 stable)
First retreat. Tier 1.7 had visual corruption.
Dec 13, 14:50 (9 min later)
Revert: roll back to Tier 1.5 (Coupled Warp + MIP Pooling)
Tier 1.6 still unstable. Fall back further.
Dec 13, 15:11 (21 min later)
Revert: full visual rollback to v1.3 baseline (Pre-Tier 1.5)
Nuclear option. Back to last known-good before the perceptual push.
Dec 13, later that day
v1.4.1 stabilized
Rebuilt from v1.3 baseline with more conservative parameters. The lesson, kept as the tier system, was to advance one layer at a time.
Dec 17
v1.4.2: Oklab color space
Perceptually uniform desaturation replaces naive HSL. The first stable V4 upgrade after the revert day.
Dec 30, 07:39
Fix shader artifacts and refine scrollbar protection
The artifacts from December's push were finally isolated: scrollbar regions needed special handling.
Jan 31, 2026
v1.5.0 ships
Mobile emulation, foveal calibrator, touch events. The most feature-dense release, built on the stability the reverts established.
Feb 27, 2026
v1.6.0: De-monolith into biologically-motivated modules
scrutinizer.js → GazeModel + VisualMemory + ContentAnalysis. The modules are organized around the biological stages.
The three reverts on December 13th were the project's inflection point. After them, the goal was perceptual plausibility, and biological accuracy became secondary. The human visual system is noisy, approximate, and good enough, and the shader can be too.