The plug-and-play stick (#92 Tasks 1-3) and a BAM flush that moves only the volume (#155) #159

Merged
rajames merged 58 commits from StarForth-v4.0.0 into master 2026-11-08 17:51:56 +00:00
Owner

What and why

The plug-and-play stick, three tasks of five (#92, plan docs/v4.0.0/plans/2026-10-29-stick-5-proxy-zuse-and-real-zuse.md), and a fix it called for (#155):

  • Task 1 -- the proxy Zuse: a stick's first boot mints its own Zuse, reads her back, then writes the genesis marker's new version 2 (the proxy's key and the real Zuse's). v4 reads a version 1 marker as a proxy with no real Zuse; v3's genesis is unchanged. A freshly written PC stick reaches [zuse@Hera] ok> with nothing set up.

  • Task 2 -- Artemis grows to fill the stick: a GPT writer (gpt_grow_last) and the volume grown to its partition, metadata only, capped at 256 GiB (R1; STICK.md 5a amended). The image's Artemis BAM is sized for the cap (mkartemis --bam-for).

  • Task 3 -- every acceptance run is a first boot: a v4 qemu boot attaches a fresh data stick and nothing else; the minted pair stays for the tests that name it and for system=v3. accept stick-high boots the PC stick as built.

  • #155 -- a BAM flush moves only the pages that hold the volume: SAVE-BUFFERS on a 16 GiB stick 5-6 s -> 1.1 s, the BAM's bytes on disk unchanged.

  • README: brought up to date -- v4.0.0-alpha.3, Try it, the plug-and-play stick, the acceptance gate, signed capsules, v3's retirement (it still said v2.1.0).

Tasks 4-5 (MINT-ZUSE, the fixed screen) follow in their own PR. Records: FABRIC-3 XLVIII.8-14, which also hold today's rulings -- retire v3 (#156, its own milestone), the v4 dictionary and the .com Documents page (#157), a DoE per release (#158), the Book of Fabric published (#138).

Closes #155

Acceptance

The Acceptance check runs on this pull request by itself. Note here anything it does not cover:

  • Logs from runs made by hand are committed in logs/: each task's tests seen to fail first, then pass, its regressions, and its full acceptance (verdicts in logs/20261108-044725/, logs/20261108-123847/verdicts/, logs/20261108-132124/verdicts/, logs/20261108-145611/verdicts/)
  • Hardware this was tried on, if any: none yet -- the SER5 bench steps come with Task 5
  • Not covered by Acceptance: stick_grow / stick_small (16 GiB and 4 GiB sticks) and bam_flush -- run by hand, logs committed. One run of v3_keys failed on a lost virtio request and passed on its rerun (FABRIC-3 XLVIII.13).

The record

  • docs/fabric/FABRIC-3.md has the ruling and what was built, if this is design work
  • CHANGELOG.md, if it is a milestone -- at alpha.4
  • Nothing in this PR is a fix nobody asked for (.claude/CLAUDE.md, Hard Rules): #155 was ruled ("Next up #155")

🤖 Generated with Claude Code

https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2

## What and why The plug-and-play stick, three tasks of five (#92, plan `docs/v4.0.0/plans/2026-10-29-stick-5-proxy-zuse-and-real-zuse.md`), and a fix it called for (#155): - **Task 1 -- the proxy Zuse:** a stick's first boot mints its own Zuse, reads her back, then writes the genesis marker's new version 2 (the proxy's key and the real Zuse's). v4 reads a version 1 marker as a proxy with no real Zuse; v3's genesis is unchanged. A freshly written PC stick reaches `[zuse@Hera] ok>` with nothing set up. - **Task 2 -- Artemis grows to fill the stick:** a GPT writer (`gpt_grow_last`) and the volume grown to its partition, metadata only, capped at 256 GiB (R1; STICK.md 5a amended). The image's Artemis BAM is sized for the cap (`mkartemis --bam-for`). - **Task 3 -- every acceptance run is a first boot:** a v4 `qemu` boot attaches a fresh data stick and nothing else; the minted pair stays for the tests that name it and for `system=v3`. `accept stick-high` boots the PC stick as built. - **#155 -- a BAM flush moves only the pages that hold the volume:** `SAVE-BUFFERS` on a 16 GiB stick 5-6 s -> 1.1 s, the BAM's bytes on disk unchanged. - **README:** brought up to date -- v4.0.0-alpha.3, Try it, the plug-and-play stick, the acceptance gate, signed capsules, v3's retirement (it still said v2.1.0). Tasks 4-5 (`MINT-ZUSE`, the fixed screen) follow in their own PR. Records: FABRIC-3 XLVIII.8-14, which also hold today's rulings -- retire v3 (#156, its own milestone), the v4 dictionary and the .com Documents page (#157), a DoE per release (#158), the Book of Fabric published (#138). Closes #155 ## Acceptance The **Acceptance** check runs on this pull request by itself. Note here anything it does not cover: - [x] Logs from runs made by hand are committed in `logs/`: each task's tests seen to fail first, then pass, its regressions, and its full acceptance (verdicts in `logs/20261108-044725/`, `logs/20261108-123847/verdicts/`, `logs/20261108-132124/verdicts/`, `logs/20261108-145611/verdicts/`) - [ ] Hardware this was tried on, if any: none yet -- the SER5 bench steps come with Task 5 - Not covered by Acceptance: `stick_grow` / `stick_small` (16 GiB and 4 GiB sticks) and `bam_flush` -- run by hand, logs committed. One run of `v3_keys` failed on a lost virtio request and passed on its rerun (FABRIC-3 XLVIII.13). ## The record - [x] `docs/fabric/FABRIC-3.md` has the ruling and what was built, if this is design work - [ ] `CHANGELOG.md`, if it is a milestone -- at alpha.4 - [x] Nothing in this PR is a fix nobody asked for (`.claude/CLAUDE.md`, Hard Rules): #155 was ruled ("Next up #155") 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
rajames added 56 commits 2026-11-08 15:04:12 +00:00
Work in progress on StarForth-v4.0.0; not yet accepted (plan
2026-10-29-stick-5, Task 1).

- zuse_genesis_marker.h: the marker's version 2 -- the proxy's key and the
  real Zuse's -- beside version 1.
- capsule_zuse_boot.c: capsule_zuse_boot_check_key() (the identity-record
  half of the check) and capsule_zuse_boot_genesis_mint() (the mint half of
  v3's genesis) split out; v3's two callers unchanged in behaviour.
- sk_v4_marker.c: the v4 boot reads version 1 as a proxy with no real Zuse,
  and writes version 2.
- sk_v4_identity.c: no marker and a blank identity partition -> genesis:
  mint, read back, then the marker; the proxy logs in. A marker with a real
  key: no session for the proxy (the fixed screen is Task 5).
- qemu_session.py: boot()/shutdown(), so a mode can boot twice; modes
  genesis and stick_genesis; stick_boot now expects genesis and the prompt.

Logs: genesis on amd64 before the change (both boots: "no genesis on this
disk", FAIL) and after (minted, then recognised: PASS). The DoE CSV of
032532 is from a run whose QEMU never started (no display; its empty log
directory was removed).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
The genesis line and [zuse@Hera] ok> passed; the run omitted the KERNEL_ARGS=--log-level=info that plan stick-3 runs stick_boot with.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Also the DoE CSV of the stick_boot run (20261108-035439), missed from its commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Artemis attached and Zuse confirmed; the run omitted the info log level its blk: disk check reads.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
The reruns of 035439 and 035956, with the log level their plans run them at.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
feat(kernel): the proxy Zuse -- a stick's first boot mints its own Zuse; the genesis marker's version 2 (#92, Task 1)
Build / Image RASPI (push) Successful in 3m35s
Build / Image PC (push) Successful in 3m52s
Build / Image MILKV (push) Successful in 3m29s
Build / v4 tests (32- and 64-bit cells) (push) Successful in 11m18s
4c38a7b1e6
Task 1 of plan 2026-10-29-stick-5, accepted in full:
- amd64, aarch64, riscv64: PARITY:V4_POST tests=538 pass=538 fail=0,
  POST: PASSED, [zuse@Hera] ok>; dict_hash 0xfec8c47cfc6f437f on the three
- the PC stick loaded high: 538/538, POST: PASSED, the prompt
- make -C v4 test-32: 39 programs, 0 failures

The logs of the acceptance boots (aarch64 044253, riscv64 044558, the stick
high 044725; amd64 044115 is already in), the four accept-*.txt verdicts and
test-32's output. The plan's Task 1 steps ticked; FABRIC-3 XLVIII.8.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Plan 2026-10-29-stick-5, Task 2, steps 1-2:
- qemu_session.py: --stick-gib N (the session's copy of the stick extended,
  sparse); modes stick_grow (16 GiB: grown, over 12000000 user blocks, the
  prompt, the first boot's time; the second boot of the same copy not grown
  again; sfdisk --verify clean) and stick_small (4 GiB: under 8 GB, not grown,
  said so).
- kernel/Makefile: STICK_GIB and STICK_FRESH on qemu-stick, for those.
- check_images.sh: the PC stick's and data stick's Artemis BAM sized for the
  256 GiB cap (6144 devblocks).

Before the change: stick_grow FAIL (no growth line, 1137649 user blocks,
sfdisk: the backup GPT not at the end); stick_small FAIL (no line);
check_images.sh FAIL on the two BAM checks only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Not yet accepted (plan 2026-10-29-stick-5, Task 2, step 3).
- gpt.c: the writer, gpt_grow_last() -- the backup entry array and header to
  the disk's end, the last partition to the last usable sector (whole MiB,
  capped), both headers' CRCs, the backup before the primary, the
  protective MBR's size; gpt_alternate_lba().
- sk_v4_grow.c: the volume grown to its partition -- its fence (the Artemis
  signature, Zuse's genesis marker) moved to the new top, the header last;
  the partition grown no further than the BAM tracks (the block subsystem
  places the fence by the device's size, so a volume must fill it).
- sk_v4_identity.c: a stick of 8 GB or more whose GPT ends short of the disk
  is grown before its partitions are opened; "Artemis: grown to fill the
  stick" / "under 8 GB -- not grown" / "past 256 GiB ... left unused".
- block_subsystem: blk_volume_compute_totals() (compute_totals_from_B,
  public) and blk_subsys_set_format_bam_for(); v3's behaviour unchanged.
- mkartemis --bam-for, mkdiskimage.sh --bam-for, kernel/Makefile
  STICK_GROW_MIN_BYTES / STICK_ARTEMIS_CAP_GIB: the stick's and data stick's
  Artemis BAM sized for 256 GiB (6144 devblocks). STICK.md 5a: 256 GiB (R1).

After: stick_grow PASS (16 GiB: 12129370 user blocks, 8 s POST to prompt;
second boot not grown, recognised; sfdisk --verify: no errors), stick_small
PASS, check_images.sh PASS.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
feat(kernel): Artemis grows to fill the stick at its first boot -- metadata only, capped at 256 GiB (#92, Task 2)
Build / Image RASPI (push) Successful in 3m30s
Build / Image PC (push) Successful in 3m51s
Build / Image MILKV (push) Successful in 3m47s
Build / v4 tests (32- and 64-bit cells) (push) Successful in 11m40s
f81b5d0563
Task 2 of plan 2026-10-29-stick-5, accepted in full:
- amd64, aarch64, riscv64: PARITY:V4_POST tests=538 pass=538 fail=0,
  POST: PASSED, [zuse@Hera] ok>; dict_hash 0xfec8c47cfc6f437f on the three
- the PC stick loaded high: 538/538, POST: PASSED, the prompt
- make -C v4 test-32: 39 programs, 0 failures

The acceptance boots' logs, the accept-*.txt verdicts and test-32's output
(logs/20261108-123847/verdicts/). The plan's Task 2 steps ticked; FABRIC-3
XLVIII.9, with one item for a ruling: blk_flush rewrites the whole BAM, now
sized for 256 GiB.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Not yet accepted (plan 2026-10-29-stick-5, Task 3).
- kernel/Makefile: a v4 `qemu` boot attaches a fresh data stick
  (DATASTICK=1) and nothing else; ARTDISK/ZUSEDISK keep the minted pair only
  for system=v3 (QEMU_V3_BOOT, from KERNEL_ARGS).
- qemu_session.py: the Makefile's defaults for every mode but those that ask
  for the pair by name (stick_artemis, two_sticks, artemis_unsigned,
  raw_ident, v3_keys) or for no drive; `zuse` now expects the genesis line.
- nightly.sh: accept stick-high runs stick_genesis (the stick as built).
- .claude/CLAUDE.md "The disks", the stick-high line; disk/README.md (the
  pair: tests and v3 only); STICK.md 11, increments 3 and 5 done.

Before the change: zuse on amd64 FAIL -- the pair's "identity confirmed",
no genesis line (logs/20261108-130732).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
system=v3: Hestia logged 'virtio_blk: request never completed'; Hera reached the Zuse drive's attach and no further. Task 1's v3_keys (logs/20261108-043612) has no such line and passed. The drives were the same three, passed explicitly. To be rerun; bisected against Task 1 if it fails again.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
test(build): acceptance boots a fresh data stick -- every run is a first boot (#92, Task 3)
Build / Image RASPI (push) Successful in 3m22s
Build / Image PC (push) Successful in 3m41s
Build / Image MILKV (push) Successful in 3m56s
Build / v4 tests (32- and 64-bit cells) (push) Successful in 11m30s
b399cb7c35
Task 3 of plan 2026-10-29-stick-5, accepted in full:
- amd64, aarch64, riscv64: the proxy Zuse minted on a fresh data stick,
  PARITY:V4_POST tests=538 pass=538 fail=0, POST: PASSED, [zuse@Hera] ok>;
  dict_hash 0xfec8c47cfc6f437f on the three
- the PC stick as built, loaded high (stick_genesis): 538/538, the prompt
- make -C v4 test-32: 39 programs, 0 failures

Regressions pass. v3_keys failed once (a virtio_blk request never completed,
logs/20261108-132844) and passed on its rerun (logs/20261108-141539).
The plan's Task 3 steps ticked; FABRIC-3 XLVIII.13.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Not yet accepted. bam_flush_to_disk() and bam_sync_from_disk() read and
wrote every page of the BAM; with the stick's BAM sized for 256 GiB (6144
devblocks, 24 MiB) every flush of a dirty block moved 24 MiB each way.
They now touch only the pages that hold the slot's bits -- its reserved
bits and one per user block (bam_pages_used()) -- the pages past them are
never set, so the bytes on disk are the same.

Test (qemu_session.py bam_flush, --target qemu-stick --stick-gib 16):
three SAVE-BUFFERS of an Artemis block, each timed, then the BAM hashed.
Before: 5.1 / 5.6 / 6.1 s (the 2 s limit fails; it was set after seeing
this baseline). After: 1.1 / 1.1 / 1.1 s. The BAM's bytes the same either
way: sha256 79197a40...b9e44b50, 5 non-zero bytes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
fix(blocks): a BAM flush reads and writes only the pages that hold the volume's bits (#155)
Build / Image RASPI (push) Successful in 3m34s
Build / Image PC (push) Successful in 4m40s
Build / Image MILKV (push) Successful in 5m6s
Build / v4 tests (32- and 64-bit cells) (push) Successful in 12m47s
Acceptance / Acceptance (pull_request) Successful in 18m32s
929f0e13c5
Accepted in full:
- amd64, aarch64, riscv64: PARITY:V4_POST tests=538 pass=538 fail=0,
  POST: PASSED, [zuse@Hera] ok> on a fresh data stick; dict_hash
  0xfec8c47cfc6f437f on the three
- the PC stick as built, loaded high: 538/538, the prompt
- make -C v4 test-32: 39 programs, 0 failures
- regressions: v3_keys, genesis on the three, stick_grow, midpull, hotplug

SAVE-BUFFERS on the 16 GiB stick: 5.1-6.1 s before, 1.1 s after; the BAM's
bytes the same (verdicts in logs/20261108-145611/verdicts/). FABRIC-3
XLVIII.14.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
rajames added 1 commit 2026-11-08 15:33:08 +00:00
docs(readme): v4.0.0-alpha.3, Try it, the plug-and-play stick, the acceptance gate
Build / Image RASPI (push) Successful in 5m33s
Build / Image PC (push) Successful in 4m12s
Build / Image MILKV (push) Successful in 6m1s
Build / v4 tests (32- and 64-bit cells) (push) Successful in 11m14s
Acceptance / Acceptance (pull_request) Successful in 19m46s
186680724e
The README still named v2.1.0 and an old dict_hash. Now: the version
(kernel 4.0.0-alpha.3, engine 3.2.0) and the release; Try it on the .com;
the stick (plug and play, the proxy Zuse, growth -- #92 Tasks 1-3), M9 on
the stick's GPT partitions; how a change reaches master (the acceptance
gate, every run a first boot); signed capsules and the Root CA; v3's
retirement (#156); `make write_stick`, `qemu-stick-high`; the stick and the
Book of Fabric in the documentation table. v4's dict_hash 0xfec8c47cfc6f437f.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
rajames scheduled this pull request to auto merge when all checks succeed 2026-11-08 16:12:32 +00:00
rajames closed this pull request 2026-11-08 16:12:51 +00:00
rajames reopened this pull request 2026-11-08 16:16:36 +00:00
rajames scheduled this pull request to auto merge when all checks succeed 2026-11-08 17:29:09 +00:00
rajames added 1 commit 2026-11-08 17:31:35 +00:00
No file changes: master's only commit not on this branch is the merge of #154, whose contents are already here. Gitea's branch protection requires the PR branch to contain the base.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GE3SDvQn5EoxdGufk84zz2
rajames merged commit 594d2f93f0 into master 2026-11-08 17:51:56 +00:00
Sign in to join this conversation.