Sovereign Offline Distribution Bundle
FW-343 defines a signed, removable-media-style Fairway distribution for disconnected installation, update, and rollback. It combines two independently verified release-assurance packages with local operator material and a small standalone verifier. It does not certify a deployment or authorize installation.
Contents
fairway release offline export creates one
fairway.offline-distribution-manifest.v1 directory containing:
- current and rollback release-assurance directories, each with Fairway archives for Darwin/Linux on amd64/arm64, checksums, detached signatures, SBOM, VEX, dependencies, licenses/disposition, source/build provenance, build recipe, passing test summary, and vulnerability disposition;
- standalone
fairway-offline-verifybinaries for the same four platforms; - local documentation, a generic Fairway configuration example, and all versioned sovereign deployment baselines;
- fixed
verify.sh,install.sh, androllback.shoperator scripts; and - an exact file inventory signed with Ed25519.
The manifest binds current and rollback versions, source revisions, builder identities, policy versions, signing-key ID, hashes, sizes, executable modes, required asset classes, non-claims, and authority boundary. Unknown files, missing platforms, unsafe paths, symlinks, duplicate JSON keys, digest or mode changes, signature substitution, and identity mismatches fail verification.
Trust bootstrap
The public key must be pinned through a customer-controlled channel separate from the bundle. The included verifier is signed inventory content, but running an untrusted verifier cannot bootstrap trust in itself. Before first use, obtain the verifier binary or its approved digest through the organization's trusted software-intake process. Thereafter use the pinned verifier and public key to verify the complete media copy before every install or rollback.
Signing keys remain environment-only. Do not place private keys, credentials, tokens, internal URLs, prompts, transcripts, or raw tool output in the bundle.
Build
For a complete non-publishing rehearsal from exact current and rollback Git identities, use the one-command builder:
scripts/release/build_sovereign_rehearsal_media.sh \
--current-version 0.1.14-rehearsal.<short-sha> \
--rollback-ref v0.1.13 --rollback-version 0.1.13 \
--output-root /absolute/retained/fairway-sovereign-rehearsal \
--builder-id local:reviewed-rehearsal-builder \
--policy-version sovereign-rehearsal-v1 \
--created-at 2026-07-12T12:00:00Z
The command builds both sources in detached temporary worktrees, creates four
normalized archives for each version, runs both release-assurance builders and
verifiers, creates and verifies the outer offline media, and writes a separate
trust-bootstrap/ packet. The trust packet contains immutable source, version,
builder, archive, manifest, public-key, verifier, build-helper, and reviewed
license-policy digests. The current source's reviewed license override policy
is copied into each nested assurance package and applied to both current and
rollback dependency inventories; every override remains pinned to module
version, origin, origin commit, license path, and license digest. This makes the
policy input explicit without assuming that an older rollback tree contains the
current policy file. One current-source Fairway release tool performs export
and verification for both nested packages, because a rollback source may
predate the assurance command; its binary digest is in the trust packet, while
SBOM, dependency, license, and vulnerability collection still runs inside each
exact source tree. The trust packet deliberately contains no pending/approved
review state; record the latest independent acceptance as Fairway evidence or a
reviewed handoff without rewriting the packet.
The builder creates one ephemeral release-signing root, stores its private file
mode 0600 only under a temporary directory, removes it before writing trust
readback, unsets key environments, and secret-scans retained output. Its Go
archive helper normalizes timestamps, owners, modes, entry ordering, and gzip
metadata and rejects symlinks, non-regular files, AppleDouble files, and
.DS_Store, avoiding macOS extended-attribute portability noise. The retained
scan rejects private/secret/token filenames, PEM private-key headers, bearer
credential values, and long secret-like key assignments across text and binary
bytes without treating bounded verifier error strings as credentials. All
candidate output is built in a hidden sibling staging directory. Retained log
output is synchronous and is closed before the final scan. The promoter hashes
the complete staged inventory and bytes before and after scanning, rejects any
change, and atomically renames only that quiescent tree to the requested output
path. No retained file is written after the final scan.
On failure, staging, logs, partial media, trust material, manifests, archives,
and readback are removed before a new output containing exactly
diagnostics/failure.json is written. That bounded file contains only schema,
phase, exit code, private-material disposition, and the authority boundary. The
builder never publishes, tags, installs, deploys, changes public exposure, or
grants credential/live authority.
Build both release-assurance directories first. The current directory must
match checked-out HEAD; both must contain the four supported archives and
verify under the same pinned public key.
export FAIRWAY_RELEASE_ASSURANCE_SIGNING_KEY='<base64-ed25519-private-key>'
export FAIRWAY_RELEASE_ASSURANCE_PUBLIC_KEY='<base64-ed25519-public-key>'
scripts/release/build_offline_distribution_bundle.sh \
artifacts/current-release-assurance \
artifacts/rollback-release-assurance \
artifacts/offline
The builder cross-compiles four standalone verifiers, adds curated local material, exports and pinned-verifies the bundle, then produces a tar archive and SHA-256 sidecar. It does not fetch release archives or publish anything.
The lower-level command accepts repeatable typed assets:
fairway release offline export \
--out <new-directory> \
--current-assurance-dir <directory> \
--rollback-assurance-dir <directory> \
--trusted-public-key-env FAIRWAY_RELEASE_ASSURANCE_PUBLIC_KEY \
--signing-key-env FAIRWAY_RELEASE_ASSURANCE_SIGNING_KEY \
--current-version <version> --current-source-sha <sha> \
--current-builder-id <id> --current-policy-version <id> \
--rollback-version <version> --rollback-source-sha <sha> \
--rollback-builder-id <id> --rollback-policy-version <id> \
--asset documentation:<name>=<path> \
--asset configuration:<name>=<path> \
--asset deployment_baseline:<name>=<path> \
--asset verifier:<name>=<path>
Verify and operate
Copy the complete directory to approved media. In the disconnected boundary:
export FAIRWAY_OFFLINE_TRUSTED_PUBLIC_KEY='<separately-pinned-public-key>'
./scripts/verify.sh
./scripts/install.sh /absolute/customer-owned-prefix
./scripts/rollback.sh /absolute/customer-owned-prefix
The lifecycle scripts require an absolute non-root prefix, verify before every
mutation, select an exact host archive, reject archives containing anything
other than one fairway binary, install through a temporary file and atomic
rename, preserve the prior binary under backups/, and print exact version
readback. They do not start services, alter configuration or data, contact a
network, approve a deployment, or delete customer backups.
The installed binary can run the loopback dashboard and read-only shared server
without a git executable. Worktree and lane-closeout projections are marked
deferred in that environment; they are never presented as clean or merged.
Coordinator diagnostics do not recommend ready-task dispatch while repository
cleanliness is unknown.
Commands that actually inspect or mutate Git state, including worktree status, still fail with an actionable missing-Git error. Install Git only when
the disconnected operating procedure explicitly requires those repository
workflows; dashboard/server startup does not fetch or install it.
Use the reusable compatibility rehearsal after bundle creation:
scripts/ci/offline_distribution_rehearsal.sh \
<bundle-directory> <artifact-directory> <current-version> <rollback-version>
The rehearsal copies the bundle into a read-only removable-media-style directory; verifies it; installs the rollback baseline; creates a temporary Fairway DB; records a task; backs up; upgrades; validates config and state; backs up again; rolls back; reopens the same state; records binary, config, data, and backup digests; and proves temporary-path cleanup. All paths are temporary except the caller-owned artifact directory.
Known limits and authority
- Verification proves package integrity and exact declared identity, not that the source is defect-free or suitable for a customer's system boundary.
- Archive signatures and evidence do not prove dependency trust, hermeticity, reproducibility, backup recoverability beyond the cited rehearsal, or external certification.
- Customer operators own media custody, verifier bootstrap trust, configuration approval, host/network controls, backup retention, applicability, and risk decisions.
- Fairway does not install automatically, start services, accept risk, certify, approve, deploy, expose, or perform live operations through this bundle.
Record the exact bundle digest, pinned key ID, current/rollback identities, rehearsal artifact directory, deviations, and customer decision as evidence.