Site cleanup: Claude-for-DOS and CHIME delisted
2026-05-21. Cut the roster, seven projects to five. Claude-for-DOS pulled private. CHIME folded into NetISA. Log keeps both, history stays honest. URLs now 410.
> What shipped and when.
Reverse-chronological. RSS or email for updates.
2026-05-21. Cut the roster, seven projects to five. Claude-for-DOS pulled private. CHIME folded into NetISA. Log keeps both, history stays honest. URLs now 410.
2026-05-18. TAKEOVER v2.0.4. Closed 1 Fatal + 4 Significant + 13 Minor from v2.0.3. Card-gallery footer kept getting painted over by the status-bar tick. Added shell_wait_ms_no_status. Menu loops route through it, scenarios still use the old one. Dedicated OPTIONS help panel. Scrollback panic gates adlib_shutdown on g_hw.adlib. DAT save’s pre-rename clean of TAKEOVER.OLD is size-gated. T1 parity byte-identical on rows 0..23, five scenarios. 115 tests pass. EXE 147.1 KB. Binary. Source archive.
2026-05-18. v2.0.2 was harness only. RUNTESTS.EXE went small to medium memory model. v2.0.1 sat at 99.4 percent of _TEXT. Production EXE bytes unchanged.
v2.0.3 closed every Fatal, Significant, and Minor from the v2.0.2 sweep. Card-gallery menu and F2 Options loops poll on scr_kbhit through shell_wait_ms(50). theme: verb now emits TKE_THEME_CHANGED + TKE_ATTR_THEME-body + drain like startup. engine_load wipes the event ring first. CMD_PAGE and CMD_REWRITE use emit-then-drain. Scrollback panic no longer leaves a stuck OPL2 envelope on exit. Save atomicity tightened: partial-write between remove and rename restores the prior good save. Plus 17 doc + tooling syncs. 115 tests pass. EXE 146.7 KB. Binary. Source archive.
2026-05-18. v2.0 ships. Engine and shell split. Engine emits events, shell draws. Command pool moved to _fmalloc. Per-scenario ceiling: 32 to 4096 commands. DGROUP near-data 63 KB to ~15 KB. EXE 146.5 KB.
Menu is now a card gallery. Each AI carries its own theme. PgUp opens 200-row scrollback. F1 context-sensitive across 6 states. Status bar on row 23 or 24 rotates hints, flashes on F9/F10. Save moved to DAT v3, silent migration from v1/v2, old file becomes TAKEOVER.BAK. 24 + 4 meta achievements. Scenarios got a [meta] header and four new verbs. Five v1 scenarios parse and run unchanged.
115 tests pass across 6 acceptance gates. T1 parity byte-for-byte vs v1.2.1 goldens on rows 0..23. Iron-rig test on 320CDT + 386PC + 486 NetISA is next. v2.0.1 is a same-day maintenance: enum rename + T5 re-capture. No engine change. Binary. Source archive.
2026-05-15. Cerberus Card. Paste your cerberus.ini, get one shareable phosphor-green frame. Identity, detection, verdicts, PC-XT factors, headline bench numbers. Renders in the browser. No upload, no tracking. Right-click save to share.
cerberus.html lead rewritten. New tagline: open-source counterfeit detector for vintage PCs. Counterfeit 486SX with faked silkscreen. Remarked chips. Thermal throttle. TSR-stolen BIOS ticks.
Also a v0.9.0 preview. When the upload pipe lights up, fingerprints become permanent URLs at barelybooting.com/hw/<fingerprint>. Backend not built. Browser tool works today.
2026-05-15. v1.2.1 sat at 96 percent of the small-model near-data segment. Scenarios pressing the 32-command ceiling. Engine tangled with rendering. v2.0 splits the two, moves the string pool to far memory, raises the ceiling to 8192 commands, adds per-AI theming, redesigns the menu. Phase 1 lands the foundation: event ring, passthrough shell, fixture harness, v1.2.1 cell-buffer baselines, DGROUP audit tool, keyword-parity check. Engine code untouched. v1.2.1 visuals byte-for-byte vs goldens.
Design doc through 5 rounds of red-team. Plan through 7. Both clean before code. Project page picks up 4 new character GIFs and a Phase 1 status section. v1.2.1 remains the user-facing release.
2026-05-14. Round two on the app-shell. Scores 7, 5, 6, 5, 0 across five rounds. Polish debt all closed. Mobile closed-drawer is now inert. Drawer slide stripped under prefers-reduced-motion. Active sidebar link gets aria-current="page". Contrast lifts on .log-date, three figcaptions, and .sidebar-heading .count via --fg-2-strong.
Mobile drawer became a proper ARIA modal: role="dialog" + aria-modal="true" + aria-label on open, statusbar inerted, Tab cycle trapped in [hamburger, ...nav links]. Skip-link flashes a bb-skip-flash on <main> and fades over 1.6s. Skip-link itself is position: fixed. Clock interval pauses on visibilitychange.
Five Minors remain as accepted polish ceiling. Site is materially more accessible than yesterday.
2026-05-14. Four rounds on the app-shell. Scores 14, 4, 6, 2, 5. Rounds 3 and 5 surfaced new polish rather than regressions. Real bugs closed: print stylesheet, sticky-breadcrumb hiding anchor targets, screen-reader hole on the CHIME flag table, hamburger missing aria-controls and :focus-visible, no focus trap on the mobile drawer, missing skip-to-content link, decorative LEDs leaking to AT, four labels under WCAG AA contrast, :target fragility, <pre> clipping in print, sidebar transitions ignoring reduced-motion, bfcache restoring drawer in a broken state, wrong theme-color shade, no color-scheme: dark, skip-link not focusing main.
Three items accepted as polish debt: closed-drawer keyboard-reachable via off-screen links, reduced-motion not stripping the drawer slide, active link missing aria-current. Drive-by: ~36 loading="lazy" attrs added to below-fold images.
2026-05-13. Site went from centered 720-pixel column to full-viewport app-shell. Title bar up top, sidebar on the left, status bar at the bottom. Reading column still 78 chars so prose stays readable.
Under the hood: one CSS grid, three rows, small app.js for the live clock and the mobile drawer. CRT scanline overlay moved to a fixed pseudo-element so it stays put while main scrolls. All 11 pages share the shell. Mobile collapses to a hamburger drawer.
2026-05-10. Editorial pass top to bottom. Ten pages cut 20 to 73 percent. Lead with visuals. Four-question top on every project page: what, hardware, state, where to download. No em-dashes.
HEARO 57 KB to 15 KB. Per-version release prose moved out of the project page; the build log carries that history. Same for CERBERUS (43 to 19), NetISA (27 to 16), and the four future-project pages.
2026-05-10. Site is Cloudflare end-to-end. (1) Pages project, apex CNAME-flattened, www 301s via Dynamic Redirects. (2) HEARO catalog Worker stopped fetching JSON from raw.githubusercontent.com on request. Manifest + schema ship as Workers Static Assets. No upstream call on the data plane. (3) dl.barelybooting.com is live as a public R2 bucket. 17 release archives across CERBERUS, HEARO, NetISA, TAKEOVER, and barelybooting-server. Every release link on the site points there now.
Security pass same day. Bot Fight Mode on. WAF rate-limit on hearo.barelybooting.com: 10 requests per 10 seconds per IP. API token cut from 19 permission groups to 14.
Operational runbooks landed in both repos. Migration writeup in the source archives.
2026-05-02. Same-day patch on v1.5.0. From-scratch LHA depacker for YM5/YM6, ~370 LOC. Almost every YM in the wild ships -lh5- compressed; v1.5.0’s YM3-only loader played nothing real. FX:N counter extended from STM/FAR/ULT to MOD/S3M/XM/IT/MTM/669. Tone-portamento-without-instrument fallback fixtures (FXSTM5, FXFAR5, FXULT6).
33/33 wav-matrix cells PASS deterministic on 86Box. HEARO.EXE 235 KB. Source archive.
2026-05-02. Six new decoders: CMF, HSC, STM, RAD v1, FAR, ULT. AY-3-8910 / YM3 chip music with streaming synth. Per-tick effects pump on STM/FAR/ULT: sequencer control, volume slides, pitch slides, tone porta, vibrato, tremolo, sample offset, arpeggio. Animated splash intro with OPL2 fanfare. Three new themes: Borland Blue, Norton Commander, Tokyo Night.
Pre-release gate caught 22 issues across 3 rounds (3 Critical + 19 Important) before tag. Criticals would have shipped silently. 30/30 wav-matrix cells PASS. Source archive.
2026-05-02. UI audit: every shipped feature gets a surface, surface gets wired right. Two gaps fixed. 320CDT wake hint was using printf and got clobbered on first redraw; routed through the whisper system to the right-aligned status bar. Format badge brightened for "tracker with effects supported" but did not show if effects were firing; added per-format *_active_fx() helpers, badge widens from [STM] to [STM FX:3]. Drive-by: HEARO_AUTOPLAY=<path> env var for the screenshot harness. Source archive.
2026-05-01. Two more per-effect bolt-ons on the post-v1.4 trackers. Sample offset (STM Oxx, ULT 9xx) jumps param * 256 frames in. Almost every drum loop in the tracker corpus uses this. Arpeggio (STM Jxx) cycles xy-nibble semitone offsets per tick. Both compose with vibrato + slides. Two fixtures (FXSTM4, FXULT5). Wav-matrix 28 to 30 cells. All 28 prior baselines unchanged. Source archive.
2026-05-01. Tone portamento on STM Gxx, FAR 3xx, ULT 3xx: fresh note becomes a slide target, not a re-trigger. Vibrato on STM Hxx, FAR 5xx/8xx, ULT 4xx: xy parameter sets speed + depth, per-tick a Q8 sine table modulates frequency without persisting. Tremolo on ULT 7xx: same shape on volume. Three fixtures (FXSTM3, FXULT4, FXFAR4). Wav-matrix 25 to 28 cells. Source archive.
2026-05-01. Apogee + Sierra-style splash before the boot screen. Four phases: column-by-column wipe with CGA-snow flicker zone behind the wavefront, three-note OPL2 ascending arpeggio (C5/G5/C6) at 25/50/75 percent through the reveal, one-second hold with "NetISA Music Player" subtitle, vsync-gated palette fade to black. Any keypress skips. --no-intro, HEARO_INTRO=off, or --safe opt out. Hardware with no OPL gets the visual; OPL writes drop silently. ~250 lines in src/ui/intro.c. Source archive.
2026-05-01. Decoders, per-tick pump, AY shape regression, volume slides: depth without surface. Four passes brought it back in line. Phase 1: live status-bar indicators ([EQ], [REV:Cathedral], [Wide], [V:Plasma]) and a format badge that brightens when the active format has effect coverage. Phase 2: stereo-separation knob promoted from env-var to Settings → Stereo mode. Phase 3: boot-screen tip line, browser empty-state hints, now-playing stopped-state prompts. Phase 4: three new built-in themes (Borland Blue, Norton Commander, Tokyo Night). Total 9 plus user-defined. Source archive.
2026-05-01. STM, FAR, ULT got the rest of their first-pass effect coverage. New piece: a process_tick() per format. Row work on tick 0, tick work on every non-row tick, walking channels and applying persisted volume + frequency deltas through the mixer in the same scaling space. Slides memorize S3M-style. Tone porta, vibrato, tremolo deferred (need memorized per-channel target state). Six fixtures + AYSHAPES, an AY-3-8910 fixture cycling all 8 functional envelope shapes (AYFULL only hit shape 0x0A, leaving shape-specific regressions invisible). Wav-matrix 19 to 25 cells. Source archive.
2026-05-01. Three post-v1.4 trackers got their first effects pass. STM honors Axx (set speed), Bxx (position jump), Cxx (pattern break). FAR honors Fxx (set tempo); FAR has no jump or break, flow goes through the order list. ULT honors Bxx, Dxx, Fxx; ULT cells encode two effect columns, v1.x reads the first only. Cell layout widened where needed. Volume slides + pitch effects deferred to the per-tick machine v1.x dispatch lacks. Three new wav-matrix cells (FXSTM, FXFAR, FXULT) with their own generators. Source archive.
2026-05-01. Six new decoders on top of v1.4: CMF, HSC, STM, RAD v1, FAR, ULT. Plus an AY-3-8910 / YM3 register-stream player covering ZX Spectrum 128 / Amstrad CPC / Atari ST corpus. Streaming synth lifts the v1 ~2.97-second pre-render cap (cap was Watcom 16-bit large-model _fmalloc’s 16-bit size_t; v2 uses a 2 KB ring buffer). Decoder count: 16.
Each decoder ships with a per-format end-to-end audio regression on 86Box. PCM trackers hash mixer output. OPL routes through Nuked-OPL3 host synthesis. AY uses HEARO’s own software synth. 16/16 PASS deterministic. Bug caught in coverage: first AY build asked for 88200 bytes for a 4-second pre-render, hit SAFE_FMALLOC_MAX, returned NULL, ay_play_init silently bailed. Hash of all-zero output was perfectly deterministic. Harness now has a peak-amplitude floor so a baseline regenerated against silence cannot look healthy. Source archive.
2026-04-28. Demoscene-polish milestone. Full XM + IT envelope coverage (vol + pan + pitch). IT lowpass filter (Z40..Z7F, rate-independent cutoff). NNAs via ghost-voice pool. Three visualizer modes (Spectrum, VU, Bars; V cycles). Real now-playing metadata (WAV LIST/INFO, MIDI track-0 sequence-name, VGM GD3 tag).
Same-day hardening closed 12 review findings + 5 auplay-inspired SB/DMA improvements. Three rounds of iterative review (5, 1, 0 Critical+Important). Round 2 caught a u32 overflow in IT pitch-envelope frequency multiplication, fixed via split-shift form. Source archive.
2026-04-25. Argument: modern internet needs TLS. Software TLS on vintage hardware bottoms out at a 486, with disabled cert verification and fake entropy to make it fit. Layer-2 WiFi cards still need TLS on the host. Proxies need a second modern machine. NetISA puts an ESP32-S3 with hardware AES/SHA/RSA/ECC and 8 MB PSRAM on the bus and terminates TLS there. An 8088 talks HTTPS because it never touches the cryptography. Architecture-spec Appendix A grew: PicoMEM, PicoPCMCIA, WinGPT, Crypto Ancienne, AmiSSL, Secure Oldies, SEthernet/30, DOStodon, FrogFind, Browservice, WebOne, Protoweb.
2026-04-25. Same-day patch on v1.2. Esc/Enter encoding-mismatch dual-checks consolidated behind IS_KEY_ESC and IS_KEY_ENTER. F9/F10 status flash no longer leaks a Space into outer scenario delay. engine_reset resets g_skip_delay. v1.2 saves and .scn unchanged. Drop-in replacement. Binary. Project page.
2026-04-25. Esc now exits any running scenario. Pre-1.2 the engine’s input loops only handled Enter and the busy-wait in long delays had no abort path. Hit Esc mid-scenario, got nothing, had to reboot. v1.2 routes a global abort flag through engine_run back to the menu. Engine no longer eats keys typed during delays. F9/F10 audio toggles work mid-scenario. Parser errors include filename + line number. Space skips. F1 shows in-scenario key reference. Mute states persist. TAKEOVER.DAT bumped to v2. Binary. Project page.
2026-04-25. Two new pages on barelybooting.com: cathode.html, claude.html. Before today, one-line mentions on the NetISA page. They stand on their own now. Site nav, sitemap, and index.html updated.
2026-04-25. Both older DOS apps live at the top of the NetISA repo now, same shape as HEARO and CHIME: src/, own Makefile with a LIB_OBJS split, README.md, scripts/ for the screenshot toolkit. Shared platform code at /lib/. Sources moved via git mv, history preserved. CATHODE.EXE 40 KB. CLAUDE.EXE 30 KB. CATHODE builds two variants (stub + real INT 63h). Top level is now lib/ + one directory per suite app; dos/ is just the TSR + launcher. Four suite apps still unbuilt: COURIER, CRATE, KIOSK, RADIO.
2026-04-25. v1.0.0 of both tagged. Detection fixes: probe_sb’s OPL3 check was reading port base+8 instead of base+0, so SB Pro 2 disambiguation never fired right; same off-by-8 in the AWE32 vs AWE64 check. sb_asp_present switched from a loose mixer-index 0x83 read to DSP command 04h (ASP get version), times out clean on plain SB16. probe_gus no longer blind-probes when ULTRASND is unset. cpu_pit_loop calibration went from count/1000 to count/100, an order of magnitude closer to truth on real iron. Source archive. HEARO project page.
2026-04-25. Open Watcom V2 installed. First wmake on HEARO surfaced the expected handful of issues, all fixed. Same for CHIME. Both build clean and run under DOSBox-X. DGROUP overflowed 64 KB by ~10 KB from the unlock-rule strings; -zc in the Makefile pushed const data into the code segment and DGROUP fit. bipartite_sin had a sign-flip overflow when both A + B table entries hit near-s16-max; replaced with linear interpolation between adjacent coarse entries + a clamp. HEARO_NOASM scope narrowed to gate only the inline-asm probes; display, DOS calls, and FS access always use the real Watcom path now. Source archive.
2026-04-24. CHIME out of design phase, same day as HEARO. Smaller scope: ask the network for the time, set the DOS clock. v1.0 talks HTTPS HEAD to time.cloudflare.com / time.google.com / worldtimeapi.org, parses the RFC 7231 Date: header (1-second precision). SNTP arrives in v1.1 when NetISA exposes UDP. CMOS RTC write-through after the INT 21h set as a backstop for older DOS that doesn’t propagate. Same suite template HEARO ships. source archive.
2026-04-24. Music player for IBM PC compatibles (286+, DOS 3.3+) out of design. All 11 spec phases + 3 polish items landed. Design idea: every recognized expansion turns on specific features the user can see. Boot screen names every detected component. Settings panel lists locked features next to the unlock requirement. HEARO.HAL records first-detection dates.
Shipped: 313-line design + 681-line soundcard reference, 8-module detection (CPU/FPU/video/audio/memory/NetISA/mouse/joystick) with full BLASTER + ULTRASND parsing, ~70 unlock rules, boot screen, 4-pane text-mode UI, settings panel, Hall viewer, 24-iteration adaptive CORDIC, 4 KB bipartite tables, 256-bit software quire accumulator, INI config, persistent Hall, dormant-feature whisper, 6 test programs, Watcom Makefile. Real CP437 box-drawing logo. DOS file browser via _dos_findfirst/_dos_findnext with an 11-extension filter. Anniversary date-diff fires when today’s MM-DD matches a Hall first-detection date in past years. Not compiled yet. Project page, source archive.
2026-04-23. Last DigiKey box arrived. Headline: TexElec 8-Bit ISA Prototype Card v1.0. Around it: ESP32-S3-WROOM-1U-N8R8 modules, ATF1508AS TQFP-100 CPLDs, passive set, IC sockets, pin headers, anti-static everything, programmer kit. Software sitting parked: DOS TSR running, launcher + config UI working, CATHODE browsing real pages against a stub backend, Claude client talking to the Anthropic API, ESP32 firmware complete, CPLD logic 160/160 testbench. All gated on parts. Gate is open. Bring-up unblocked. Expecting at least one thing to go wrong immediately. Project page, source archive.
2026-04-22. Second tag of the day after v0.8.0. Closed every "deferred to 0.8.1" item that was not hardware-gated. IEEE-754 edge-case diagnostic, 14 focused edges across FADD/FSUB/FMUL/FDIV/FSQRT. /CSV output mode with RFC 4180 quoting. L1 pointer-chase latency probe. L2 reach via 64 KB _fmalloc. DRAM ns derivation. IIT 3C87 DB row + routing stub. Genoa ET4000 chip-level probe via 3CDh segment-select. Hercules HGC/HGC+/InColor variant discrimination. 16 new host-test assertions.
Hotfix lesson: between M2 commit and smoketest, Staging surfaced a flag-parser regression where str_starts_with(a, "/C") silently consumed /CSV as the calibrated-mode prefix. Passed host-test + wmake; only the full Staging run surfaced it. Rule: after every CERBERUS.EXE build, run the Staging smoketest before claiming clean. 170,722 bytes. 376 assertions green. Zero warnings. Source archive. Project page.
2026-04-22. First release where every shipped result has been verified on real iron. Four milestones in 36 hours. M1: trust-first foundation. Whetstone emit suppressed (Curnow-Wichmann reads 10-30x below published reference on real 486 silicon; wmake WHETSTONE=1 re-enables for research). Upload path compiled out after v0.7.1 surfaced a stack overflow on unreachable server. Watcom libc teardown hang on BEK-V409 fixed via _exit() bypass. M2: precision expansion. FPU behavioral fingerprint 4 axes to 5 (FPTAN-pushes-1.0). Rounding-control + precision-control + exception-flag cross-checks. Cache stride sweep extended to 6 points; stride=128 enables line=32 vs line=64 plateau detection. M3: CUA-lite. Norton-style F-key legend, F1 help overlay, F3 exits, /MONO flag. M4: every FAIL/WARN verdict carries a possible-causes clause.
Real-iron captures: BEK-V409 clean-exit 2026-04-21 20:39 (i486DX-2-66 + AMI 11/11/92 + S3 Trio64 + Vibra 16S + 63 MB XMS) and 386 DX-40 + IIT 3C87 + Genoa ET4000 companion. 320 host-side assertions green. ~167 KB. Source archive. Project page.
2026-04-21. Companion server for CERBERUS upload ingest. Flask + SQLite + Jinja, ~700 lines Python, strict CERBERUS v0.7.0 upload contract. Six GET routes (list, per-CPU-class, per-machine, unknown, detail, stubbed CSV export) + one POST. 24 host-side tests green. Deploy: Dockerfile (Python 3.12-slim, non-root, waitress, healthcheck) + a cloudflared sidecar waiting on app health before opening the tunnel. Cloudflare Tunnel is outbound-only, no port forward, no public IP. Target: Home Assistant OS mini PC.
Pre-traffic red-team found and fixed: no rate limit on intake (added Flask-Limiter, 5/min + 30/hour per CF-Connecting-IP), no server-side length on nickname/notes, potential submission_id birthday collision at 65k rows, missing CSP/frame-deny headers, non-ASCII body bytes silently replaced (now strict-decode 400), unbounded Content-Type (now text/* only). Container runs read-only with tmpfs /tmp, all Linux capabilities dropped, no-new-privileges. Source archive. Project page.
2026-04-20. Five commits past v0.4.0. Headline: adapter-aware three-headed-dog ANSI boot splash with OPL2 stinger, ~2.2 seconds end-to-end, gated by /NOINTRO and /NOUI. VGA color: DAC fade-in from black, three eye-pairs lighting left-to-right with escalating OPL2 barks at D2/F2/A2, chain-shatter climax with DAC white flash + OPL2 snare, sustained A-minor chord with vibrato over a sub-bass drone while hellfire embers flicker. Adapter degradation: EGA/CGA attribute-only, MDA/Hercules intensity-bit pulse with block-shading silhouette. Validated on BEK-V409. Operator: "Wow that looked epic."
Issue sweep: four issues moved. #1 (four test_timing failures) closed via the divergence-guard finally tripping. #3 (UI hang on real iron) closed cannot-reproduce after 9 clean runs. #6 split: test-1 CFLAGS_NOOPT tax landed ~7-9 percent, test-2 became standalone tools/repstosd/REPSTOSD.EXE. #2 (Vibra 16 PnP OPL intermittency) instrumented with byte-level trace.
Homage Phase 3: 7 lesson docs covering CheckIt Whetstone (custom synthetic, like the Dhrystone finding), CACHECHK UMC timer workaround, SPEEDSYS attribution corrected to Vladimir Afanasiev, plus PCPBENCH/3DBENCH/CHRISB/LM60 cross-corroboration for #6. Three attribution corrections: SPEEDSYS, PCPBENCH, 3DBENCH. Project page.
2026-04-19. Four tags across 48 hours. v0.2-rc1: first real-hardware-validated RC, five bugs found and fixed on contact with the BEK-V409 bench box. v0.3-rc1: diagnostics complete, per-line cache-ratio reformulation. v0.4-rc1: bench_cache, bench_video, Rule 4b cache-aware narration, Rule 11 DMA-class coherence, DGROUP 52K to 56K. v0.4.0: closed three UI defects the rc1 screenshot surfaced.
rc1-to-final was surgical. UTF-8 em-dash + multiplication-sign bytes in diag_cache’s status format string rendered as CP437 garbage; audit found three more latent paths and fixed them. UI’s value_str returned empty for V_U32 benchmark rows with a NULL display string, so 5 BENCHMARKS rows rendered labels but no values. bench_dhrystone.c’s reference-point comment updated per Phase 2 Homage research: CheckIt’s "Dhrystones" is a custom synthetic, not a Dhrystone port; the 33,609 anchor on BEK-V409 is empirical agreement, not algorithmic equivalence. Eight clean real-iron runs through the v0.4.0 capture. Source archive. Project page.
2026-04-14. Adversarial gate across the entire NetISA codebase: 14,300 lines, 7 components. Four parallel chunk reviews found 8 Fatal + 16 Significant. All fixed in two commits. DOS side: NULL pointer guards, TSR return-code fix, password input VGA overflow clamp, FPU detection 8088 safety, Claude stack overflow fix, command injection filter, scroll clamping. Firmware: ISR race fixed via per-request data buffers, open WiFi AP replaced with WPA2-PSK using device-unique MAC-derived password (AP disables after station connects), timing-safe admin key comparison via constant-time ct_strcmp, HTTP session mutex, redirect limit at 5 hops, memory barrier in ISR, OTA SHA256 hash verification, NVS encryption documented. Project page.
2026-04-14. Full gate on the NetISA DOSBox-X automation: capture.ps1, dosrun.py, dosbuild.py, _RELAY.BAT, dev.conf, README, 1,422 lines. Three rounds, scores 30, 28, 0. Fixed: atomic lockfile (Ctrl+C races), Windows PID recycling, hardcoded WinGet paths, tempDir leaks on ffmpeg failure, zombie DOSBox-X on early exit, CP437 silent replacement, mount path quote escaping, PrintWindow return value check (no more silent black GIFs), ERRORLEVEL baseline reset, cycles=auto for deterministic timing, lock-timeout-aware staleness. Production-grade now. Project page.
2026-04-14. Adversarial gate on the TAKEOVER codebase: 5,700 lines, 13 modules. Five rounds, scores 6, 5, 7, 1, 0. Twelve fixes: string pool exhaustion now parse-time error (was silent), midnight BIOS tick wrap (music freeze), OPL2 channel bounds, LFSR dissolve safety break, stack buffer pressure (two buffers moved to far heap), DGROUP palette buffer (768 bytes recovered), VGA palette tearing (buffered rotation), cracktro OPL2 state corruption (chip reset after easter egg), music fast-forward after climax, input buffer size mismatch, AI control level cross-scenario persistence, cracktro integer overflow (unsigned counters). EXE 57.8 KB to 60.5 KB. Project page.
2026-04-13. Built a development relay (devenv/) that closes the develop-compile-test loop: compile natively with OpenWatcom / NASM on Windows, run in DOSBox-X, capture stdout + exit codes via batch relay. Atomic lockfile with stale PID recovery, timeout handling, CP437 encoding, stderr capture, retcode retry loop. Quality-gated through 7 rounds. Then used the relay to build an automated CATHODE test suite: 11 real websites (NPR, CNN, Hacker News, Wikipedia, OpenBSD man pages, edge cases), parsed through CATHODE in DOSBox-X, found three bugs. (1) Named HTML entity table had 7 entries; expanded to 90+. (2) Missing </head> caused 0 rendered rows; <body> now implicitly closes <head>. (3) Pages over 32 KB produced 0 rows from a 16-bit int overflow in parse chunk length; fixed by chunking. 12/12 tests pass. Project page.
2026-04-13. v0.1 shell became a real document browser. Streaming HTML parser (~830 lines): headings, paragraphs, links, bold/italic/code, lists, blockquotes, preformatted text, horizontal rules, entities. HTTP/1.0 fetch with redirect following + timeouts. UTF-8 to CP437 mapping. URL parser with relative URL resolution (7 forms). Find on page with pre-computed match positions. Bookmark persistence. Word-boundary wrapping. Scroll bar. CP437 block-art logo. 38.5 KB EXE. Renders text.npr.org, man.openbsd.org, example.com, barelybooting.com with navigable links. Quality-gated: 5 rounds, 34 issues fixed (3 Fatal, 31 Significant). Project page.
2026-04-13. Eight demoscene-inspired features. A/V beat sync via adlib_beat counter. Six fire-and-forget OPL2 stingers on channels 3-8, thematically assigned per AI. Two new visual effects: sine-wave text distortion + VGA DAC palette cycling in text mode. Four transition types on goto: (LFSR dissolve, column wipe, DAC fade, random glitch). Living status bar with AI control level (0-100) shifting from green to red. Five per-AI Mode 13h climax sequences at endings. Hidden cracktro easter egg unlocked by completing all five scenarios: raster bars, 40-star parallax starfield, DYCP sine-bouncing scrolltext, 9-channel OPL2 chiptune in C minor. EXE 57.8 KB. Project page.
2026-04-13. First official release. F9/F10 toggles for AdLib music and PC speaker (playback timing preserved when muted). Expanded color palette (15 attr colors). Each AI scenario has a distinct color personality: Kestrel-9 red/cyan for threat data, Cinder Mirror magenta for fourth-wall breaks, Orchard Clerk bright cyan for its helpful-creepy voice. Subtle homages to 2001, WarGames, Ex Machina, The Matrix, Blade Runner woven into scenario dialogue. Binary.
2026-04-13. Fixed the CATHODE logo where the H looked like an M (block-art row 1 used lower-half blocks creating an M-shaped dip). Added 5-row color gradient: green edges, bright green inner rows, white center crossbar. VGA DAC palette fade-in/fade-out added to the shared screen library; CATHODE fades in from black on startup, to black on exit. Project page.
2026-04-12. All five scenarios complete: Axiom Regent (municipal optimization), Hushline (crisis comms), Kestrel-9 (threat detection), Orchard Clerk (personalization), Cinder Mirror (narrative generation). 250+ states. 15 endings across 5 scenarios. A/V overhaul: VGA Mode 13h plasma title screen with animated color cycling and pixel-font logo, AdLib/OPL2 FM ambient music (5 unique drones), FPU-accelerated effects, VGA palette fade transitions. Hardware auto-detection (VGA/EGA/CGA/MDA, AdLib, FPU) with graceful degradation. DGROUP dropped from 98.1 percent to 96.5 percent despite four new modules; new const data is static const __far. 41 KB EXE. Project page.
2026-04-12. New project: AI takeover simulator for DOS. .scn script engine (parser, state machine, variable system, choice menus). 14 visual effects (screen flicker, text corruption, progress bars, fake BSOD, screen melt, falling chars, color shift, blackout, etc.). PC speaker audio via 8253 PIT. Menu with completion tracking. Wrote the Axiom Regent scenario: 55 states, 3 endings (TAKEOVER, ESCAPE, REVELATION), 10-15 minutes per path. String pool (19 KB) with 12-byte commands keeps the 31 KB EXE in small memory model. Quality-gated: string pool overflow, stack overflow in effects, DOS 8.3 filename violations. Project page.
2026-04-12. Built CLAUDE.EXE, Anthropic API client for DOS, TLS 1.3 via the NetISA card. Three modes: Chat (talk only), Ask (Claude proposes, you confirm), Auto (Claude runs DOS commands freely). Far-heap message pool. Word-wrapped chat with newline support. 3-line compose area. [EXEC] tag parsing for command execution with output capture. Iterative agent loop, 5-deep safety cap.
2026-04-12. barelybooting.com is live. Project page, build log, RSS feed. Site exists because the project outgrew a README: DOS browser, validated CPLD, production firmware. Time to show it properly.
2026-04-11. ESP32-S3 firmware hit production quality after 8 rounds of adversarial review. WiFi manager with APSTA mode. HTTP client with 4 concurrent TLS sessions. HTML-to-CP437 parser for CATHODE. Embedded web config server. OTA updates with authentication. Fixed cross-core races, register protocol bugs, security holes, resource leaks along the way. Firmware turns ISA bus register writes into TLS 1.3 sessions.
2026-04-09. Built CATHODE, text-mode HTTPS browser for DOS. Split architecture. DOS side receives a cell stream, manages 200-row scrollback on far heap (~80 KB), renders to VGA text buffer. ESP32 side fetches URLs, parses HTML, converts to (char, attr) cell stream. Link navigation, URL bar editing, back/forward history, CP437 box-drawing. Five rounds of adversarial review.
2026-04-08. Full DOS stack built and tested in DOSBox-X. NETISA.COM TSR: 678 bytes, hooks INT 63h, under 2 KB resident. NETISA.EXE launcher: WiFi scanning, signal bars, card status, system info. Shared screen library with direct VGA writes to 0xB800:0000. Complete INT 63h C wrapper library. Stub layer for testing without hardware.
2026-04-06. All 160 Verilog testbench tests pass under iverilog. Address decode, IOCHRDY wait states, watchdog timeout, IRQ state machine retrigger, back-to-back cycles, mid-cycle reset, status flag merge, alias rejection. 95 of 128 macrocells used. Timing slack +39.5 ns setup at 16 MHz. Zero bus contention across the full sim. Lint clean on iverilog -Wall.
2026-04-04. Schematic and PCB layout for the NetISA v1 board finalized. ATF1508AS CPLD for ISA bus timing. ESP32-S3-WROOM-1U-N8R8 for networking + crypto. Wiznet W5500 pads for v1.5 Ethernet. Bracket-mount antenna for metal cases. Physical jumpers, no Plug-and-Play. Parts ordered, waiting on delivery.