Files
Robert Allan JamesandClaude Sonnet 5 60907503f9 docs: record item 4.6 fix, aarch64 BYE crash fix, and DoE campaign in CHANGELOG/ROADMAP
CHANGELOG.md: new 2026-08-18 entry for today's work, plus a post-split
note explaining the branch-tag convention no longer applies (this repo
is now LithosAnanke-only, master as sole production line).

docs/lithosananke/ROADMAP.md: M7.1 section predates all the real
Tripod/Stadium/ACL work and was silently stale -- added a dated
redirect to FABRIC.md/FABRIC-2.md (matching the doc's own existing
pattern for the M8 section) rather than rewriting the whole section.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-18 20:27:05 -04:00

210 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Changelog
Milestone-level achievements only — not a commit log. For full history see
`git log` on the relevant branch. Two products share this file:
**StarForth** (hosted FORTH-79 VM, `master`) and **LithosAnanke** (bare-metal
UEFI kernel, `lithosananke`). Entries are tagged by which branch(es) they
landed on. **Post-split note (2026-08-18):** the combined monorepo this
convention describes has been split into two separate repositories;
LithosAnanke now lives here with `master` as its sole production line (no
`lithosananke` branch in this repo). Entries below this note carry no
branch tag for that reason.
## 2026-08-18 — Item 4.6 (Artemis Stadium migration) quota-ordering bug fixed; aarch64 `BYE` crash fixed; full 3-arch DoE campaign clean
Artemis's 30-rep surface stress campaign (item 4.6, migrating her block-heat
arena to Stadium admission-on-allocate) was failing 100% of trials on all
three architectures. Root-caused to `capsule_birth.c`: `stadium_grant_quota()`
ran after IDENTITY exec, but Artemis's `init.4th` auto-runs the stress
campaign as part of that same IDENTITY exec, so every `STADIUM-ADMIT` call
hit a nonexistent quota slot and refused unconditionally. Moved the grant
before IDENTITY exec. Verified 30/30 reps PASS on amd64, aarch64, and
riscv64 (was 30/30 FAIL on all three).
Separately fixed a long-standing aarch64-only crash on `BYE` (present since
at least 2026-08-08): `arch_cold_reset()` issued PSCI `SYSTEM_RESET` via
`smc #0`, but this QEMU/AAVMF boot configuration has no genuine EL3/TrustZone
secure monitor to answer an SMC — PSCI here is served via HVC instead. The
instruction was trapping into the kernel's own exception handler on every
boot, not corrupting memory or racing anything, despite investigation
initially suspecting both. Root-caused via live gdb single-stepping, which
also surfaced and fixed a real debugging-environment gotcha along the way:
`starkernel_kernel.elf` is not the binary that actually runs under
`MONOLITHIC_BUILD` (`starkernel_loader.efi` is, a completely separately-linked
artifact) — every earlier breakpoint attempt had been aimed at the wrong
file. Fixed: `smc #0``hvc #0`. First clean aarch64 `BYE` exit recorded.
Also fixed, found incidentally during the aarch64 investigation: PSCI
`SYSTEM_RESET`'s function ID used the SMC64 calling convention (`0xC4000009`),
which isn't a real PSCI function ID (`SYSTEM_RESET` has no SMC64 variant) —
corrected to the valid SMC32 encoding (`0x84000009`).
Full three-arch DoE campaign (`L8-DOE`, 48 trials each) re-run clean on all
three architectures post-fix: stress campaigns 30/30 PASS, clean `BYE` exit,
no exceptions. Full investigation trail, evidence, and dead ends in
`FABRIC-2.md` Sections H and I.
## 2026-07-24 — Kernel 3-arch acceptance test re-run; amd64 dict_hash non-determinism root-caused (`lithosananke`)
Re-ran the standing kernel acceptance test (`ARCH={amd64,aarch64,riscv64}
clean qemu`) after this session's changes. All three booted cleanly to `ok>`
with `PARITY:OK` and Hera/Hermes/Artemis E2E PASS, but amd64's `dict_hash`
didn't match aarch64/riscv64 (which matched each other and the established
reference exactly). Root-caused rather than dismissed: `capsule_dict_hash_hook()`
(`src/starkernel/capsule/capsule_vm_hooks.c`) folds each word's
`execution_heat` into the hash, and amd64's own boot log says its timer
falls back to "RELATIVE mode (no determinism guarantees)" under this
QEMU/hypervisor setup (no invariant TSC) — aarch64/riscv64 get proper
deterministic hardware timers. Heartbeat tick count during boot, and
therefore `dict_hash`, can legitimately vary run-to-run on amd64 from host
scheduling jitter alone. Pre-existing, self-documented in the boot log,
consistent with already-recorded ACL-RWT campaign data (amd64's baseline
tick count was already distinct from aarch64/riscv64's). Not a regression
from any change this session. Logs and DoE run data committed as usual.
## 2026-07-24 — amd64 ISR `.hidden` fix extended to aarch64/riscv64; hosted `blk_ram` sizing bug fixed (`lithosananke`)
Surveyed both branches for ASM files and C99 fallback layers on request;
confirmed via SHA-256 that all six ASM-optimization headers plus
`arch_detect.h` are byte-identical between `master` and `lithosananke`, but
found `amd64/isr.S` had genuinely diverged — `lithosananke` carries a real
fix (`.hidden` directives preventing GOT-indirection corruption of the
runtime ASLR-relocation-delta computation) that `master` never received.
Ported it there (see `master`'s entry below). Investigated whether the same
GOT-indirection bug class applies to aarch64/riscv64: it doesn't structurally
(`interrupts.c` on those architectures only *calls* the vector-install
function via PC-relative branches; nothing reads an asm-defined symbol's
address from C) — added `.hidden` anyway as defensive hardening on request,
working around a real ELF-vs-PE/COFF assembler incompatibility for the
aarch64 loader (`.hidden` guarded with `#ifndef _WIN32`, since that loader
is assembled via `clang-18 --target=aarch64-pc-windows-msvc`). Verified with
full three-arch QEMU acceptance.
Separately, discovered and fixed (with explicit sign-off) a severe
pre-existing bug: the hosted StarForth VM could not start at all on
`lithosananke`, on any architecture. `src/main.c`'s block-I/O RAM buffer was
hardcoded to the old `1024*1024`-byte size, stale relative to a deliberate
`BLK_RAM_BLOCKS=2080` block-subsystem redesign (moving the RAM/ramdrive
boundary to user-visible LBN 2048) that the kernel-side bootstrap already
correctly followed. Fixed to derive the buffer size from the same shared
constants; verified across all three hosted architectures via QEMU
(native amd64, `qemu-aarch64-static`, `qemu-riscv64-static`).
## 2026-07-24 — pgo build option removed; hosted 3-arch acceptance test documented (both)
Removed the `TARGET=pgo` profile and its associated `pgo`/`pgo-build`/
`pgo-perf`/`pgo-valgrind`/`bench-compare` targets from the hosted `Makefile`
on both branches, plus the now-orphaned `scripts/pgo-workload.sh`. Verified
`make TARGET=pgo` now errors cleanly on each branch.
Also proved out and documented, for the first time, that the hosted VM
starts cleanly not just on amd64 but on aarch64 and riscv64 too (cross-built,
run under `qemu-{aarch64,riscv64}-static` user-mode emulation) —
`docs/lithosananke/hosted-acceptance-test/README.md`. This is what surfaced
the `blk_ram` sizing bug above.
## 2026-07-07 2026-07-08 — Kconfig build-configuration system (both, committed on `lithosananke`)
A Linux-kernel-style Kconfig system replaces the two Makefiles' scattered,
drifting `?=` knobs with one discoverable, optional configuration tree.
Vendored the real `scripts/kconfig` tooling (`conf`/`mconf`/`qconf`
headless, ncurses, and Qt frontends) into `tools/kconfig/`, wrote a ~40-symbol
tree (`Kconfig.arch`/`variant`/`physics`/`heartbeat`/`kernel`), and bridged it
into both Makefiles via `mk/Kconfig.mk`. Entirely opt-in: nothing changes for
a plain `make` until a developer generates a per-architecture
`build/$(ARCH)/.config`, and command-line overrides always win regardless.
Found and reported two real, previously-invisible drift bugs along the way
(`TRANSITION_WINDOW_SIZE` diverging live in kernel builds, `MINIMUM_PREFETCH_ROI`
off by an order of magnitude in its Q48.16 encoding); the latter was fixed on
request. Documented in `docs/working/architecture/getting-started/DEVELOPER.md`.
## 2026-07-07 — Artemis/riscv64 determinism gap closed (`lithosananke`)
Root-caused a `dict_hash` divergence on riscv64 that had been mis-attributed
to an architecture quirk: Loop #3 heat decay was reading real wall-clock
nanoseconds instead of the heartbeat's execution-driven tick counter, making
it sensitive to a riscv64-specific I/O busy-wait. Converted decay to be
purely tick-based across all six call sites touching it. All four VM
identities (Hera, Artemis, Hermes ×2, Mama) now byte-identical across
amd64/aarch64/riscv64.
## 2026-07-05 2026-07-07 — VM Fleet Attractor experiment concluded (`lithosananke`)
Multi-week investigation into giving the L8 Jacquard mode selector a real
per-VM physics channel (dynamic fleet heat replacing hardcoded
`compudynamics.4th`/`fleet-k.4th` constants) reached a validated end state:
a 180-run, three-architecture DoE campaign found the self-tuning inference
loop was starved by a shared-counter bug, replaced a log-linear regression
estimator with direct rate recovery once fixed, and closed with L8 wired
into a real causal channel into fleet tuning — the pathway earlier iterations
had found architecturally missing. Three-arch acceptance confirmed throughout.
## 2026-07-04 — K-PUSH dictionary-shadowing corruption fixed (`lithosananke`)
Multi-day trap-and-debug campaign closed: FORTH-79 word shadowing broke
under the dictionary's heat-based reorganization, corrupting `K-PUSH`.
Root-caused and fixed; three-arch confirmed.
## 2026-07-03 — Artemis BAM storage subsystem, Phase 1 (`lithosananke`)
Block Allocation Map storage for the Artemis VM accepted: Q48.16 block heat
tracking, `ART-COOL`/`ART-REAP` reclamation words.
## 2026-06-27 2026-06-30 — Hermes inter-VM messaging complete (`lithosananke`)
17-block message/channel layer between VMs finished and verified: 16/16
inter-VM smoke tests passing, three-arch. Follow-on "completion steps" batch
(async delivery, channel negotiation, K-FLEET integration) landed the same
week. `INPUT_BUFFER_SIZE` restored to 1025 on this branch with the correct
line-vs-block-buffer rationale (see note below on master's divergence).
## 2026-06-23 2026-06-25 — Tripod (Hermes/Artemis) scaffold stood up (`lithosananke`)
Named multi-VM roles (Hermes, Artemis) with dedicated prompts and
`CONNECT-HERMES`/`CONNECT-ARTEMIS` wiring; verified booting live,
pre-REPL, on all three architectures. Compudynamics — the physics-runtime
tuning discipline — ported into FORTH itself via `VM-EXEC`/`VM-STEP`
primitives, the first self-hosted physics orchestration. K≡1.0 conservation
wired end-to-end (Phase 6+7) with Artemis block storage passing
`PHASE6-TEST` green.
## 2026-06-17 — LaTeX publication system completed (`master`)
Three-volume formal documentation system finished: 11 publications, 209
source scraps at 100% coverage, clean build. StarForth version bumped to
v3.1.0 / LithosAnanke to v1.5.3 in the same window.
## 2026-06-16 — LithosAnanke v1.5.1-FINAL — framebuffer/VT100 console milestone (`lithosananke`)
Closed the framebuffer terminal milestone; three-arch re-acceptance.
ACL-RWT DoE campaign confirmed the same day as the first genuinely
ACL-active campaign (an interpreter-hook bug that had silently bypassed ACL
checks in every prior run was fixed just before this one) — all nine cells
of a 3×3 Latin square (seeds × architectures), **+0.0054%+0.0088% overhead,
CV = 0.000%**. Report finalized for patent support material.
## 2026-06-13 2026-06-14 — Word-level ACL system, Phases 17 complete (both)
C infrastructure (`acl_ttl`/`acl_allow`/`acl_mode`/`acl_pinned` fields on
every dictionary entry), the `ACL.4th` FORTH policy layer, the `zuse`
bootstrap superuser, Isabelle/HOL proof stubs, and LithosAnanke kernel
parity all landed — all three kernel architectures boot to `zuse)ok>`.
Phase 8 (Ed25519 PKI / thumbdrive challenge-response) is the only remaining
item on the ACL roadmap.
## 2026-06-11 2026-06-12 — Bare-metal ACL baseline DoE campaign (`lithosananke`)
3×3 Latin-square baseline campaign (seeds × architectures, 30 replicates
each) completed across all nine cells. Analysis report drafted, revised
through a peer-review pass, and prepared for SSRN submission.
---
**Known issue surfaced while compiling this changelog, not yet resolved:**
`master`'s `include/vm.h` currently defines `INPUT_BUFFER_SIZE` as `256`,
violating the project's own documented invariant (it must be `1025``LOAD`
copies up to 1024 bytes of block content through the same `vm_interpret()`
path interactive REPL lines use, so anything past byte 255 is silently
dropped under the 256 cap). `lithosananke` has the correct value. Not fixed
as part of this changelog/README pass; flagged for a future session.