# repo22 G2 Full Manual Regression Report Started: 2026-08-09 06:07 UTC Completed: 2026-08-09 07:10 UTC Baseline: `cd0e985b5ac54a4b7acb7042422329ad1729fb3e` Branch: `manual-g2-20260809T060709Z` Guest: FreeBSD 15.0-RELEASE-p8 amd64, QEMU TCG, isolated port 9223 Overlay: `/work/build/repo22-manual-g2-20260809T060709Z-freebsd15-overlay.qcow2` ## Scope and Result The exact assigned set was executed manually from the numbered Markdown procedures. No CI, runner, result wrapper, or unassigned TC was used. | Test | Result | Primary evidence | |---|---|---| | TC002 | PASS | Real CRC32C ranges; valid mount; bad covered byte `ERR#97` | | TC008 | PASS | Bad magic `ERR#22`; 1023-byte provider `ERR#6`; empty md `EINVAL` | | TC010 | PASS | Qualified 16 TiB sparse provider; exact 64-bit `df` total | | TC015 | PASS | Bad block size/root/feature returned 22/97/45 | | TC016 | PASS | Checksum-field-only mutation returned `ERR#97` | | TC017 | PASS | Raw union fields; short `ERR#6`; qualified sparse mount | | TC018 | PASS | Exact read at physical offset 17592191561728 | | TC112 | PASS | Bad magic field returned `ERR#22` before root load | | TC113 | PASS | Resolved inode `openat` returned `ERR#45` | | TC114 | PASS | OOB FLAT_PLAIN `read` returned `ERR#97` | | TC115 | PASS | Future algorithm bit returned `ERR#45` | | TC116 | PASS | FBT decompressor entry count 1; `read` returned `ERR#5` | | TC119 | PASS | FLAT_PLAIN changed byte/hash returned without kernel error | Count: 13 assigned, 13 PASS, 0 KERNEL-FAIL, 0 SHELVED, 0 ENV, 0 duplicate, 0 omitted, 0 extra. ## Build and Guest Both configurations were built natively in the isolated guest with kernel `-Werror`, `FREEBSD_SRC=/tmp/repo22-freebsd15-src`, and FreeBSD source `15.0-RELEASE-p9`. The running guest was `15.0-RELEASE-p8`. | Configuration | KLD SHA256 | Result | |---|---|---| | `WITH_ZSTDIO=0` | `482e9c072c949f0459c422aa1efd9b35a2d99cf90b25bb01e59e00b440b6d0fe` | PASS | | `WITH_ZSTDIO=1` | `8349c97c7ced253fff32a9e706f29313f309cb63a270e4e39a4501426f2b95c6` | PASS | The ZSTDIO KLD was loaded as ID 5 and was the only repo22 test KLD. It had the expected FreeBSD `ZSTD_*` references and no unresolved `bcmp`. The disabled KLD had neither `ZSTD_*` nor `bcmp` unresolved symbols. ## Fixture Qualification `tests/prepare_error_fixtures.sh` ran twice in independent empty host directories with erofs-utils 1.8.6. Both `SHA256SUMS` files were identical and self-verified. Every field mutation records its exact field/path and old/new value. Same-size corruption variants preserve provider length; short and empty providers record their intentionally different lengths. The helper independently proved the 4096-byte-block checksum forms: ```text canonical: field 1028 cleared, CRC32C [1024,4096), initial 0xffffffff kernel: CRC32C [1032,4096), seed 0x5045b54a valid control: stored=canonical=kernel=0xf7429681 ``` Raw transcripts, build logs, KLDs, guest logs, fixture trees, and the overlay remain untracked under `/work/build/repo22-manual-g2-20260809T060709Z*`. ## TC002 Result: **PASS**. Commands: helper `inspect`; `sha256`; dynamic `mdconfig`; valid `mount`/`cmp`; direct negative `mount`; independent `truss`. Hashes: valid `eb97860671931c76a171d13caa70ddc2c9731c6cdef1e99b9a3deb580baf70ae`; bad CRC `3f684e8cb03e3cb20a1920dccf23d9b7b19bc09d5745be04608e195c541ebf73`. Both were 7622656 bytes. The corruption changed byte 1088 without recomputing CRC; calculated checksum became `0x202160ab` while stored remained `0xf7429681`. Valid data matched; bad direct mount rc was 1 and `nmount` returned errno 97. Cleanup: mount absent and exact md detached. ## TC008 Result: **PASS**. Commands: `wc -c`, `sha256`, dynamic `mdconfig`, direct `mount`, and `truss` for each attachable provider. Hashes: bad magic `d1bc3aec03c58dae1b74b54d895c0a72e5b3088f05907ab2f6a0cb8dc38a615f`; 1023-byte provider `5724796860baa23469b3118eff2567c96a0b64b7dadaf99eafb7ba3c65b9aa56`; empty provider `e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855`. Bad magic returned errno 22. The 1023-byte md attached and mount returned errno 6. The zero-byte provider was rejected by `mdconfig` with `EINVAL`. Cleanup: zero mounts and md units after all three subcases. ## TC010 Result: **PASS**, not SHELVED. Commands: copy qualified prefix, `truncate -s 17592193667072`, `stat`, dynamic `mdconfig`, `diskinfo`, `mount`, `df -kT`, `df -iT`, and `cmp`. Prefix hash: `d3ffadc6fc9e73f85a8a5973b4ac5ee2a2da57b4e8baeccd259fa4325a2146cf`. Fields were `blocks_hi=1`, `blocks_lo=1861`, `rootnid_8b=36`, and `total_blocks=4294969157`. The sparse file allocated 15232 UFS blocks while GEOM reported all 17592193667072 bytes. `df -k` total and Used were exactly 17179876628; Avail was zero. Cleanup: unmounted, md detached, sparse provider removed. The former environmental issue is now RESOLVED. ## TC015 Result: **PASS**. Commands: evidence/hash/length checks; three dynamic md attachments; direct mount status followed by independent `truss` errno capture. Hashes: bad block size `b5c52c44ace6f693e39161102acde157efec2fce34eb4fef198681dfc7942b58`; bad root `9cdd61eb99b2e7f45d2505b3b95d6427f8f636e117b5ffabed064a3f83997d55`; unknown feature `95d19a490c38657a8c579a10f1f12088ab43c1819aa9b37ae86b841bb26a592a`. All were 7622656 bytes with recomputed valid CRC. Direct mount rc was 1 for each; `nmount` returned 22, 97, and 45 respectively. Cleanup: zero mounts/md. ## TC016 Result: **PASS**. Commands: field evidence, `sha256`, `wc -c`, direct mount, and `truss`. Hash: `04249f6b7d9b7322c171f1727408130d23cb0b83709aad7a4b77b39358a8dfe6`. The 7622656-byte image changed only checksum `0xf7429681 -> 0xf7429680`. Direct mount rc was 1 and `nmount` returned errno 97. Cleanup: no mount/md. ## TC017 Result: **PASS** with both negative guard and positive dynamic coverage. Commands: raw `od` at offsets 1038/1060/1136; small-prefix mount; sparse provider creation; `diskinfo`; positive mount; `cmp`; `df -kT`. Hash: `d3ffadc6fc9e73f85a8a5973b4ac5ee2a2da57b4e8baeccd259fa4325a2146cf`. Raw values were high 1, low 1861, root 36. The short prefix returned errno 6. The qualified provider mounted and reported exactly 17179876628 one-KiB blocks. Cleanup: unmounted, detached, sparse provider removed. ## TC018 Result: **PASS** with real I/O above 16 TiB. Commands: sparse provider creation; high-offset `dd`; two raw `read_probe` calls; low-decoy and high-source `cmp`/hash; dynamic md mount and mounted hash. Prefix hash: `cfd86ed1e39528d958e32819282c7fd87191f80a25d9575078dad473f40563a8`. The inode encoded `startblk_hi=1`, low 1347, combined block 4294968643, and physical offset 17592191561728. The original low payload at 5517312 was zeroed: its hash was `6a4875ddaceaa91fb3369f0f6d962f77442daf1b1d97733457d12bcabdf79441`. Raw high and mounted hashes both matched source `25eb31e024bc60745d68a5f7318753951804c7858b576cb698a4260af4a334a3`. Cleanup: unmounted, detached, sparse provider and probe outputs removed. ## TC112 Result: **PASS**. Commands: raw magic `od`, hash/length, direct mount, and `truss`. Hash: `d1bc3aec03c58dae1b74b54d895c0a72e5b3088f05907ab2f6a0cb8dc38a615f`. Magic was `0x21444142`; provider length remained 7622656. The canonical CRC was invalid as required after changing magic, while the unchanged production suffix checksum still matched `0xf7429681`. Direct rc was 1 and `nmount` returned errno 22. Cleanup: no mount/md. ## TC113 Result: **PASS**. Commands: structured path inspection; mount/control `cmp`; direct and trussed `read_probe expect-error ... 45`; second control `cmp`. Hash: `28d972c4065927326607fcd51dabff81cc88a28e2343f6056e55d04418172814`. Resolved NID 52 at inode offset 1664 changed format `0x0001 -> 0x8001` with valid CRC and equal provider length. `openat` returned errno 45; unaffected data remained exact. Cleanup: clean unmount and md detach. ## TC114 Result: **PASS**. Commands: path inspection; mount/control `cmp`; direct and trussed `read_probe expect-error ... 97`; second control `cmp`. Hash: `2afcb9dde4c8eaf30bb2541d00be36f726f5cf151d887e0d999803b3993285ed`. NID 54 field offset 1744 changed start block `1349 -> 1861`, equal to declared blocks, with valid CRC and equal media size. Target `read` returned errno 97; control remained exact. Cleanup: clean unmount and md detach. ## TC115 Result: **PASS**. Commands: raw field `od`, hash/length, direct mount, and `truss`. Hash: `a8d7d9cf0abcf34a5cd2366059c0294e08fdd20d02ed3b5b21005ddf78c69029`. `available_compr_algs` at byte 1106 changed `0x0000 -> 0x8000`; CRC was recomputed and media remained 716800 bytes. Direct rc was 1 and `nmount` returned errno 45. Cleanup: no mount/md. ## TC116 Result: **PASS** with direct decompressor-path proof. Commands: parsed `dump.erofs -e` evidence; failed userspace extraction record; mount/control `cmp`; FBT enumeration and count; direct/trussed `read_probe`. Hash: `f442785ea7cdbdc3f64b2ff89ea04942460cbdc5bea5615cbed237029edda8d8`. The equal-length 716800-byte image changed 64 bytes at 4128, wholly inside the parsed first physical extent `[4096,69632)`. Mount succeeded, excluding the media-size precheck. `fbt:erofs-zstdio:z_erofs_decompress:entry` counted one call for the target command, and `read` returned errno 5. Control remained exact. Cleanup: unmounted/detached; `dtraceall` and dependencies unloaded. ## TC119 Result: **PASS** with the revised real integrity semantics. Commands: path/field evidence; image/source hashes; mount; complete mounted hash; two one-byte `read_probe` calls; byte compare; control `cmp`. Hash: `74b54f998481f9e55b30f2393ee780e3b46144157a54b4dc0fc0c044c160bb5a`. The equal-length image flipped `/plain.bin` file offset 257 at provider byte 5525761 from `0x00` to `0x80`; the valid superblock CRC remained unchanged. Source hash was `5647f05ec18958947d32874eeb788fa396a05d0bab7c1b71f112ceb7e9b31eee`; mounted hash was `e98bb2acaecb24ab86112478bc8cc1e3668c127b449fe2e664dc4804f9477d81`. Reads succeeded, the target byte differed, and control matched. Cleanup: clean unmount and md detach. ## Harness Notes Four incomplete attempts were discarded and are not PASS evidence: 1. TC002 repeated host Python inspection in a guest without Python and exited before md attachment. 2. TC002 initially trusted `truss` wrapper status; the qualified run separated direct mount rc from syscall tracing because FreeBSD `truss -o` returned 0 around a failing mount. 3. TC008 had a stray patch marker after its second subcase; trap cleanup ran and the complete three-subcase command was repeated. 4. TC010 initially asserted the `df` Used column was free blocks; the qualified run used the correct `f_bfree=0` interpretation and repeated all steps. ## Final Cleanup Per-TC cleanup ended with zero EROFS mounts and zero md providers. Global dmesg changed from 102 to 104 lines; both new lines were the expected `md0: truncating fractional last sector by 511 bytes` from TC008. New panic, fatal trap, page fault, general-protection fault, and double-fault count was zero. The exact test KLD unloaded successfully, leaving zero EROFS modules. The guest shut down normally and QEMU PID 285696 exited after 12 seconds. Port 9223 no longer has a VM process. ## Issues No kernel issue was found and no TC remains SHELVED. The former TC010 provider issue is retained as a resolved record in `issues/TC010-48bit-statfs-large-provider.md`.