Binary packaging gate
scripts/package-binaries.nu PREFIX OUTPUT --smoke WORK/smoke.json creates a
fresh deterministic tar.gz locally. It does not publish or run a proof.
Before staging, the script requires a completed schema1
installed-compiler-warrior-v1 smoke receipt with all_checks_passed=true,
matching source provenance and exactly three binary records. The current
builder and smoke must also bind the exact source-verification.json SHA-256,
including source/vendor manifest identities; source_verified must be true.
Packaging rechecks the complete source/vendor inventories against that receipt.
The smoke script must match the hash recorded during its execution and is
copied from the verified source archive. It hashes each
actual installed binary and requires equality with both candidate and smoke
receipts. It also checks the current sources.json digest against the candidate.
Missing receipt, wrong provenance, missing/duplicate binary records, changed
binary or existing output aborts. Copied binary bytes are checked again before
archiving; symlinks are materialized as ordinary executable files. The smoke
fixture_files must name exactly the three state JSON files and match actual
prefix fixture hashes; copied fixture bytes are checked again. Alternate smoke
fixtures cannot authorize different bytes shipped from the prefix.
The archive root is cyber-tools, containing:
- bin/trident, bin/trisha and bin/joy;
- share/trisha-release-smoke with the three public state fixture JSON files and the current smoke-release.nu script;
- candidate.json, source-verification.json and smoke.json;
- licenses/trident.txt, licenses/trisha.txt and licenses/joy.txt;
- README.txt with installation and test/platform limitations.
The packaged candidate receipt omits the build host's absolute source path. Installed smoke only needs its provenance and binary hashes. The archive helper normalizes metadata with epoch0 and the fixed cyber-tools root. Output must be new; the staging directory is removed on success or failure.
Initial mechanics validation, before the genuine installed proof run:
Nushell syntax check passed; temporary missing-receipt and changed-binary cases
both rejected without creating an archive. Changed fixture bytes and injected
mktemp/chmod failures also rejected without an archive. External staging and
permission commands have checked exit status. The combined temporary regression
harness is /tmp/test-binary-packaging.py; all five negative gates passed. Synthetic-only positive fixtures
produced byte-identical archives twice, with all three binaries, sanitized
candidate receipt and shipped smoke script. These synthetic tests establish
packager mechanics, not successful product smoke. A real binary archive still
requires the genuine completed smoke receipt generated by the owner's full
installed proof/check workflow.
The actual macOS arm64 archive subsequently passed that gate on 2026-09-12:
/tmp/cyber-tools-v7-darwin-aarch64-20260912-rehearsal.tar.gz, SHA-256
3bc8a02090bd91e80364e0368f65a945391889c2ade078776dd7b96b0ca1d544.
It contains the exact three binaries and public fixtures in the completed
installed smoke receipt. The source
remains rehearsal 1; later harness, tests, bootstrap and documentation edits
must be included in the final source candidate without relabeling this build.
Receipts are trusted local test evidence, not signatures against a malicious operator who fabricates both receipts. Smoke coverage is limited to its explicit checks: it does not establish live Neptune admission, universal formal safety, GPU proving or arbitrary platform compatibility. Source/licenses are obtained from candidate.source before that local path is removed from the shipped receipt.