update
This commit is contained in:
@@ -0,0 +1,314 @@
|
||||
# Pre8 Completion and Validation
|
||||
|
||||
## Final Verdict
|
||||
|
||||
Pre8 overall status is **FAIL**.
|
||||
|
||||
The required implementation, static review, revert review, build matrix, basic
|
||||
plain/LZ4 smoke, and selected test suite were all executed. The selected suite
|
||||
did not pass its required gate. In particular, TC004 produced a definite DUT
|
||||
failure while twelve other DUT verdicts were blocked by test-harness defects or
|
||||
prior test residue. Under the status definition in `planning/pre8`, a required
|
||||
action that ran and failed a gate is `FAIL`, not `PASS` or `PARTIAL`.
|
||||
|
||||
This overall verdict does not erase the narrower successful results:
|
||||
|
||||
| Validation layer | Verdict | Scope |
|
||||
| --- | --- | --- |
|
||||
| Source implementation | PASS | Planned loader placement and xattr iterator work is present in the final source tree. |
|
||||
| Static source review | PASS | Allowlist, token-equivalence, references, xattr invariants, and protected paths passed review. |
|
||||
| Revert and history review | PASS | Accepted replacement commits passed their defined direct-parent and final-HEAD checks; historical failures remain disclosed. |
|
||||
| Four build configurations | PASS | `default`, `debug`, `zstdio0`, and `zstdio1` built and passed module load/unload smoke. |
|
||||
| Basic plain/LZ4 smoke | PASS | Independent run `20260812T210345.913633Z-770842-a2868dd9`. |
|
||||
| Selected 19-case suite | FAIL | Automation: 5 PASS / 9 FAIL / 4 ERROR / 1 NOT_RUN. Audited DUT: 6 PASS / 1 FAIL / 12 BLOCKED. |
|
||||
| Pre8 overall | **FAIL** | A required selected-suite gate ran and failed. |
|
||||
|
||||
No claim is made that Pre8, repo22, the LZMA issue, or the test harness was
|
||||
fixed by this validation work.
|
||||
|
||||
## Final DUT Identity
|
||||
|
||||
The final repository identity used by both selected-suite and basic-smoke
|
||||
evidence is:
|
||||
|
||||
```text
|
||||
parent repository commit: d1f5b686e8945d06b6e8c0a0188b2262de0b4ac2
|
||||
parent repository tree: 19f450085cad49d06f6fe05d180313f13d4347f0
|
||||
repo-pre-8 tree: 497736695fcc4285760b24c5954c34d32b8af49f
|
||||
repo-pre-8/src tree: cbf93a19df8d1ce2fb66e2aeb7276a4ea6d4dcc2
|
||||
```
|
||||
|
||||
Selected-suite DUT archive:
|
||||
|
||||
```text
|
||||
bbcfd8a6a28faba3f7c5c7e827bde5578774be6e08b83d05485d58ee16a7fb6f
|
||||
```
|
||||
|
||||
Basic-smoke DUT archive:
|
||||
|
||||
```text
|
||||
402459ba6a6f55696d06474f7494a69ef1a5fe49063d565cacadece37e8b9ce1
|
||||
```
|
||||
|
||||
The different archive hashes belong to different runners and archive
|
||||
procedures. Both reports bind their run to the same final repository commit
|
||||
and `repo-pre-8/src` tree.
|
||||
|
||||
## Source Delivery
|
||||
|
||||
### Accepted implementation
|
||||
|
||||
The final accepted source changes are:
|
||||
|
||||
1. `3d28d96fc48753231b1899fce6189e586cf988c6`
|
||||
(`erofs: unify inline and shared xattr iteration`)
|
||||
2. `aac1412056f9ae7269f7c0f85c0233ade8cc662a`
|
||||
(`erofs: move codec config loaders atomically`)
|
||||
|
||||
The xattr commit introduces common private inline/shared iteration while
|
||||
preserving the reviewed lookup order, list order, namespace and errno timing,
|
||||
inline/shared validation differences, buffer ownership, and output accounting.
|
||||
|
||||
The atomic loader replacement moves the LZMA, DEFLATE, and ZSTD configuration
|
||||
loaders to their backend files. The loader bodies remain token-equivalent to
|
||||
the baseline, dispatch calls remain in the core, decode functions are not
|
||||
changed, and no Linux page/folio or descriptor ABI was introduced.
|
||||
|
||||
### Superseded split-loader history
|
||||
|
||||
The following pushed commits remain in history and must not be described as
|
||||
accepted independent delivery units:
|
||||
|
||||
| Commit | Historical final-HEAD inverse result | Final disposition |
|
||||
| --- | --- | --- |
|
||||
| `dd7f2483d468ec4397a863c7a871391ea1bc2c4c` | FAIL: conflict in `decompressor.c`; `internal.h` auto-merged as staged content | Superseded by `aac1412`; failure permanently retained. |
|
||||
| `0dba0ea223bee8626b8cd3371562f87ed975a99f` | FAIL: conflict in `decompressor.c`; `internal.h` auto-merged as staged content | Superseded by `aac1412`; failure permanently retained. |
|
||||
| `7c47f6d` | PASS | Superseded with the split-loader group by `aac1412`. |
|
||||
|
||||
All three split commits passed direct-parent restoration at the point where
|
||||
they were introduced. That fact does not overwrite the two final-HEAD inverse
|
||||
failures. The split group was reverted by `96f041f`, then replayed as the one
|
||||
accepted atomic commit `aac1412`. Commit `3d28d96` was not superseded.
|
||||
|
||||
### Static and revert verdict
|
||||
|
||||
Final static and revert status is **PASS**:
|
||||
|
||||
- the implementation remained within the planned source allowlist;
|
||||
- protected trees and unrelated paths were unchanged;
|
||||
- all three moved loader bodies matched their baseline implementations;
|
||||
- declaration, definition, and dispatch-call closure was correct;
|
||||
- the ZSTD availability and `windowlog > 10` rejection order was preserved;
|
||||
- codec decode bodies were unchanged;
|
||||
- the xattr iterator behavior and ownership matrix passed independent review;
|
||||
- `aac1412` restored its direct parent exactly when reverted;
|
||||
- `aac1412` independently reverted from final HEAD without changing xattr;
|
||||
- `3d28d96` independently reverted from final HEAD without changing the
|
||||
accepted loader layout;
|
||||
- final `repo-pre-8/src` matched the reviewed functional source tree;
|
||||
- `git diff --check` and worktree cleanliness checks passed at static handoff.
|
||||
|
||||
The detailed history record is
|
||||
`repo-pre-8/docs/pre8-loader-history-correction.md`.
|
||||
|
||||
## Build Validation
|
||||
|
||||
The selected-suite runner built four module configurations. Every
|
||||
configuration passed build completion, SHA256 recording, unresolved-symbol
|
||||
checks, and an actual `kldload`/`kldunload` smoke before case execution.
|
||||
|
||||
| Configuration | Verdict | SHA256 | Size |
|
||||
| --- | --- | --- | --- |
|
||||
| `default` | PASS | `348cb1f5a91d47e1412747d285c795c49375a61a66cfb3d35d22f38ecfde6ea0` | 47,272 bytes |
|
||||
| `debug` | PASS | `274189804511d249b34fbb3c223e9525b07c7c6266ec39d016ad2f33185001c7` | **UNKNOWN**; the harness did not persist size evidence before VM destruction |
|
||||
| `zstdio0` | PASS | `348cb1f5a91d47e1412747d285c795c49375a61a66cfb3d35d22f38ecfde6ea0` | 47,272 bytes; byte-identical to `default` |
|
||||
| `zstdio1` | PASS | `6cdb8e01fdac7805cb7ae12a9d1804b00d3e5cf37ef8b2f583137d36ee70426e` | 51,368 bytes |
|
||||
|
||||
The missing debug size is not reconstructed or inferred. No KLD or other
|
||||
binary was committed.
|
||||
|
||||
## Basic Plain/LZ4 Smoke
|
||||
|
||||
Independent basic smoke run:
|
||||
|
||||
```text
|
||||
run ID: 20260812T210345.913633Z-770842-a2868dd9
|
||||
automation: PASS
|
||||
runner exit: 0
|
||||
DUT result: PASS for plain and LZ4 basic differential scope
|
||||
guest: FreeBSD 15.0-RELEASE-p8 amd64
|
||||
KLD SHA256: 527fe80ad7307d0200cfc4fec84c6fb86b914e89889e4a42ff0613fc24465015
|
||||
KLD size: 47,272 bytes
|
||||
```
|
||||
|
||||
All twelve runner stages passed. The run created a deterministic corpus with
|
||||
256 regular files, 9 symlinks, and 43 directories. Both the plain and LZ4
|
||||
images mounted read-only, passed a 307-entry differential preflight, completed
|
||||
all four workers, and unmounted cleanly. The test QEMU exited gracefully, its
|
||||
overlay and large temporary data were removed, and ports 10000 and 10001 were
|
||||
released.
|
||||
|
||||
This result covers only plain/LZ4 basic mount, traversal, read, differential,
|
||||
unmount, and cleanup behavior. It does not override the selected-suite
|
||||
failures or blocked verdicts.
|
||||
|
||||
Evidence:
|
||||
|
||||
- `/work/tests-dev/erofsstress/demo-result/repo-pre-8-smoke-20260812/20260812T210345.913633Z-770842-a2868dd9/audit-report.md`
|
||||
- `/work/tests-dev/erofsstress/demo-result/repo-pre-8-smoke-20260812/20260812T210345.913633Z-770842-a2868dd9/result.json`
|
||||
- tests-dev commit `374b8e3ab4b0df24d6761802b70c694e2896d5fd`
|
||||
|
||||
## Selected Suite
|
||||
|
||||
Primary run:
|
||||
|
||||
```text
|
||||
run ID: pre8-required-20260812T194817Z
|
||||
cases: 19
|
||||
automation: 5 PASS / 9 FAIL / 4 ERROR / 1 NOT_RUN
|
||||
runner exit: 3
|
||||
duration: 1892.44 seconds
|
||||
audited DUT: 6 PASS / 1 FAIL / 12 BLOCKED
|
||||
```
|
||||
|
||||
The automation status is the runner's result. The DUT status is a separate
|
||||
evidence audit. An automation failure caused by a harness defect is not changed
|
||||
to automation PASS. Likewise, a positive command observed before a missing
|
||||
negative check does not make the full DUT case PASS.
|
||||
|
||||
### Per-case matrix
|
||||
|
||||
| Case | Automation | DUT | Audited observation |
|
||||
| --- | --- | --- | --- |
|
||||
| TC005 | FAIL | BLOCKED | Inline listing and both requested user xattr values succeeded. The missing-xattr `ENOATTR` assertion was never invoked because the truss output directory did not exist. |
|
||||
| TC013 | PASS | PASS | Invalid NID returned `EINTEGRITY` (`ERR#97`) twice; mount, unmount, and zero-state checks passed. |
|
||||
| TC079 | PASS | PASS | Packed user and trusted prefix values matched expected data and cleanup passed. |
|
||||
| TC080 | FAIL | BLOCKED | Four packed-prefix values were correct. The missing-suffix `ENOATTR` assertion was not invoked because the truss output directory was absent. |
|
||||
| TC082 | FAIL | BLOCKED | ACL bytes and ordering were observed, but automation compared spaced hex against an unspaced prefix; the user-namespace negative assertion also was not invoked. |
|
||||
| TC067 | FAIL | PASS | Both shared files, the local xattr, and listing matched the fixture. Automation incorrectly expected one additional trailing `!`. |
|
||||
| TC068 | FAIL | BLOCKED | Shared listing succeeded. The nonexistent lookup was not invoked because truss could not create its output file. |
|
||||
| TC069 | PASS | PASS | Three shared xattrs were listed and all exact values were read; cleanup passed. |
|
||||
| TC081 | PASS | PASS | Metabox shared, shared-prefix, and packed-prefix xattrs were listed and read from both files; cleanup passed. |
|
||||
| TC117 | FAIL | BLOCKED | Both corrupt fixtures mounted and valid local shared data remained readable. Corrupt-entry errno assertions were not invoked because truss failed first. |
|
||||
| TC135 | PASS | PASS | Metabox, packed, and primary-prefix fallback values matched expected data. |
|
||||
| TC138 | FAIL | BLOCKED | Valid unordered and empty-header ACLs were read. Three malformed ACL assertions were not invoked because the scratch directory was absent. |
|
||||
| TC140 | FAIL | BLOCKED | Positive compressed and fragment metabox carrier hashes and xattrs passed. Four negative mount commands were not invoked because truss failed opening its trace. |
|
||||
| TC142 | FAIL | BLOCKED | Positive fragment-backed compressed metabox hash and xattrs passed. Four negative mount commands were not invoked for the same reason. |
|
||||
| TC004 | ERROR | **FAIL** | LZMA image mounted, but SHA256 of the mounted 8 MiB `level.dat` timed out after 30 seconds. The process remained running and left the mount and `md0` busy. |
|
||||
| TC084 | ERROR; follow-up FAIL | BLOCKED | Primary run was contaminated by TC004 residue. Fresh follow-up mounted LZ4 and found the target, but guest `dump.erofs` was absent before content verification. |
|
||||
| TC102 | ERROR; follow-up FAIL | BLOCKED | Primary run was contaminated by TC004 residue. Fresh follow-up mounted DEFLATE, but missing guest `dump.erofs` prevented algorithm and content verification. |
|
||||
| TC105 | ERROR; follow-up FAIL | BLOCKED | Primary run was contaminated by TC004 residue. Fresh follow-up mounted ZSTD with `zstdio1`, but missing guest `dump.erofs` prevented verification. |
|
||||
| TC145 | NOT_RUN; follow-up ERROR | BLOCKED | Both zstdio modules built and initial load smoke passed. The follow-up queried and unloaded module name `erofs` instead of the loaded artifact name, so functional mount/read gates were not reached. |
|
||||
|
||||
### Definite DUT failure
|
||||
|
||||
TC004 is a definite observed DUT failure for this test run:
|
||||
|
||||
1. `lzma-level6.erofs` attached as `md0`.
|
||||
2. The read-only EROFS mount succeeded.
|
||||
3. The mounted `level.dat` existed.
|
||||
4. SHA256 of the source file completed and returned
|
||||
`ddda39737f0f6093e828a032ec161511fefbb1fa361bc6cbffdbc91e48e4c461`.
|
||||
5. SHA256 of the mounted 8 MiB file did not finish within 30 seconds.
|
||||
6. The timed-out `sha256` process remained alive.
|
||||
7. Unmount and `mdconfig -d` returned `Device busy`.
|
||||
|
||||
This evidence does **not** prove that Pre8 introduced the problem. No matching
|
||||
Pre7 or pre-change comparison run with the same image, guest, module build,
|
||||
and command is available. The issue is recorded separately in
|
||||
`issues/pre8-lzma-read-timeout.md` without an attribution claim.
|
||||
|
||||
### Codec follow-up
|
||||
|
||||
Fresh follow-up run:
|
||||
|
||||
```text
|
||||
run ID: pre8-codec-followup-20260812T202059Z
|
||||
cases: TC084, TC102, TC105, TC145
|
||||
automation: 3 FAIL / 1 ERROR
|
||||
runner exit: 1
|
||||
duration: 1136.92 seconds
|
||||
audited DUT: 4 BLOCKED
|
||||
```
|
||||
|
||||
The follow-up isolated these cases from TC004 residue, but it did not produce
|
||||
codec functional PASS verdicts. TC084, TC102, and TC105 were blocked by absent
|
||||
guest `dump.erofs`. TC145 was blocked by incorrect module-name lookup/unload
|
||||
and cleanup behavior in the harness. These results remain FAIL/ERROR in
|
||||
automation and BLOCKED for the DUT.
|
||||
|
||||
The harness findings are recorded in
|
||||
`issues/pre8-test-harness-blockers.md`. No harness modification is part of
|
||||
Pre8 source delivery.
|
||||
|
||||
Selected-suite evidence:
|
||||
|
||||
- `/work/tests-dev/demo-result/repo-pre-8-smoke-20260812/summary.md`
|
||||
- `/work/tests-dev/demo-result/repo-pre-8-smoke-20260812/summary.json`
|
||||
- `/work/tests-dev/demo-result/repo-pre-8-smoke-20260812/pre8-required-20260812T194817Z/summary.json`
|
||||
- `/work/tests-dev/demo-result/repo-pre-8-smoke-20260812/pre8-required-20260812T194817Z/evidence/`
|
||||
- `/work/tests-dev/demo-result/repo-pre-8-smoke-20260812/pre8-codec-followup-20260812T202059Z/summary.json`
|
||||
- `/work/tests-dev/demo-result/repo-pre-8-smoke-20260812/pre8-codec-followup-20260812T202059Z/evidence/`
|
||||
- tests-dev commit `46e6840f1b8918414af76c9a5731322c697eee8b`
|
||||
|
||||
## Fixtures and Immutable Inputs
|
||||
|
||||
The common base image was not modified:
|
||||
|
||||
```text
|
||||
path: /work/tests-dev/lfs/freebsd-15-dev-src-20260811.bp
|
||||
format: qcow2
|
||||
mode: 0444
|
||||
size: 16,515,530,752 bytes
|
||||
SHA256: 67f359621f23a1d745f0889370cbb99a096cee3e99a0b2f3bb18fc7a91bf6fef
|
||||
```
|
||||
|
||||
Selected primary fixture deployment identities:
|
||||
|
||||
| Group | Manifest SHA256 | Checksum-list SHA256 |
|
||||
| --- | --- | --- |
|
||||
| G1 | `9ffe9e695a6544cb010a5d4ba1e0c2c09d7455e6d7e28cc81da54d2dd954f2f2` | `db416004ff6b00ad286e50da506168b35a544a7da5619042225198843e4c741c` |
|
||||
| G4 | `6200842757dae30f3a5b0683d726d339a24e55dff98cd084597462289a9308aa` | `229c84c5436cf9b5b659ded375097fba13621c20a2cf2d845f146df737836622` |
|
||||
| G5 | `c9540baafb53b3783233c3950f4d8548c28585cd32335dadc14db613692a8978` | `d08138b1bd51579cbf5461a73abce9d7fddc9cdb8ace1329c9f1581d41e1095f` |
|
||||
|
||||
Follow-up G5 deployment identities:
|
||||
|
||||
```text
|
||||
manifest: 9be85e48115f2dd2cae058f2a4ea7438512f28e647c30476d049d6b8025b02fd
|
||||
checksum list: 7513425c98400f641523083bf0d06b2d548aa3163dfcdfe980dca2b0e1900acd
|
||||
```
|
||||
|
||||
Deployment hashes can include run-specific metadata. Image, source, generator,
|
||||
and checksum evidence remains beneath each run's `fixture-evidence/` and
|
||||
per-case evidence directories.
|
||||
|
||||
## Cleanup and Guard Integrity
|
||||
|
||||
- The selected primary and follow-up QEMUs were force-destroyed by the runner
|
||||
after their final errors.
|
||||
- Their run-owned overlays were deleted.
|
||||
- Ports 10000 and 10001 were released and closed.
|
||||
- The independent basic-smoke QEMU shut down gracefully and its overlay was
|
||||
removed.
|
||||
- Guard PID 26318 retained its identity and TCP port 9222 remained active.
|
||||
- Base-image SHA256, mode, and size were unchanged before and after the runs.
|
||||
- The DUT commit and source tree remained unchanged and clean.
|
||||
- No DUT source, repo22 source, base image, test source, fixture generator, or
|
||||
`oldtests` content was modified during validation.
|
||||
|
||||
Cleanup of the disposable VM does not change TC004's case-level cleanup result:
|
||||
the case itself failed to terminate its read process and could not unmount or
|
||||
detach `md0`. VM destruction only removed the run environment afterward.
|
||||
|
||||
## Final Handoff
|
||||
|
||||
Pre8 delivers the planned source-responsibility changes and passes static,
|
||||
revert, build, and basic plain/LZ4 smoke validation. It does not satisfy the
|
||||
full required validation gate because the selected suite contains one definite
|
||||
DUT failure and twelve blocked DUT cases. The honest final status is therefore
|
||||
**FAIL**.
|
||||
|
||||
Open follow-up records:
|
||||
|
||||
- `issues/pre8-lzma-read-timeout.md`
|
||||
- `issues/pre8-test-harness-blockers.md`
|
||||
Reference in New Issue
Block a user