1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
# Legacy comparison status
## Current native semantic-comparison baseline
The native builder can collect portable semantic facts directly from either a
rootfs tar archive or its companion manifest and compare:
- package name/version records when supplied by a build manifest;
- regular-file SHA-256 digests, symlinks, and hardlinks;
- RT initrd path and SHA-256 digest;
- enabled systemd service symlinks; and
- archive member paths and kinds.
Legacy tar paths using a leading `./` are normalized before comparison. Hasher
metadata paths containing `.host` or `.fakedata` are excluded on both sides.
This comparison deliberately does not claim byte-for-byte tar equivalence.
Validated native plan command:
```text
$ cargo run -- plan --spec profiles/alt-controller.toml
target: alt-controller
architecture: x86_64
format: tar
stages:
1. resolve
2. install
3. finalize-rootfs
4. initramfs
5. package
6. manifest
```
## Validation status
The Rust toolchain now provides the required formatting and lint components.
The current native implementation is green under the complete required gate:
```text
$ cargo test
69 integration tests passed
$ cargo fmt --check
success
$ cargo clippy -- -D warnings
success
```
This supersedes the earlier missing-component report. Continue running this
same gate after each native-builder slice.
## Verification-runner readiness mismatch
The workspace-level verifier correctly completed the Rust build and test
phases, but its detected web-service readiness probe is not applicable to this
CLI binary. Exact command evidence from this workspace:
```text
$ hermes verify --json
{"recipe":"Rust project","ok":false,"phases":[{"phase":"build","command":"cargo build","exitCode":0,"ok":true},{"phase":"test","command":"cargo test","exitCode":0,"ok":true}],"readiness":{"url":"http://127.0.0.1:8000/","ready":false,"error":"<urlopen error [Errno 111] Connection refused>"}}
```
The launched `alt-controller-image` process printed its Clap command help and
exited normally; it is not an HTTP server and intentionally does not listen on
port 8000. The corrective action is to configure the verifier for this CLI as
a build-and-test-only Rust project, without an HTTP readiness probe. Until
then, `cargo build --release`, `cargo test`, and explicit CLI smoke commands
are the applicable project validations.
## Next comparison action
Produce a native Controller artifact in an isolated workspace, collect its
companion manifest, and run `alt-controller-image compare` against the observed
legacy Controller tarball. Record every semantic delta as deliberate or
unresolved in this document.
## Current native build blocker: unavailable Hasher privilege helper
The native CLI reached its typed `HasherInstaller` boundary and invoked `hsh`
without invoking GNU Make, `mkimage`, or `mkimage-profiles`, but this host does
not permit Hasher's installed privilege helper to run. Exact command evidence:
```text
$ ./target/release/alt-controller-image build --spec profiles/alt-controller.toml --workspace /mnt/hermes-workspace/alt-controller-native-work-20260812-tick --output /mnt/hermes-workspace/alt-controller-native-20260812-tick.tar
hsh: /usr/libexec/hasher-priv/getconf.sh: cannot access getconf helper.
error: hsh exited with exit status: 1
build_exit=1 cleanup_exit=0
```
`cleanup_exit=0` verifies that the executor removed the newly created workspace
and that no tarball or companion manifest remained after the failed installer.
No native artifact was produced, so no native-versus-legacy semantic comparison
can honestly be recorded yet. The next corrective action is to run the same
native CLI build in an environment where the host's Hasher privilege helper is
usable (or have the host Hasher installation repaired), then inspect its
generated companion manifest and compare it with the observed legacy Controller
tarball.
|