Final source, required gates and candidate assembly
packaging/release/required-gates.json declares all21mandatory local gates.
The evaluator independently keeps the canonical IDs and environment/package
requirements, so an input cannot drop a row or downgrade required. Runtime
lanes, clean source, installed Arch, local provider, three desktop sessions,
real accessibility, performance, process/storage recovery, security, licenses,
export/docs/workflows, the single final review and final owner acceptance all
retain their actual result. GitHub remote CI is a later publication prerequisite;
it is never reported as locally executed or used to invent operator evidence.
Build/test a new allowlisted source export using fresh dependencies and private state. The runtime matrix rebuilds native transport/filesystem addons for each exact selected Node/header pair and runs build/typecheck, full product/release, Python and CTest commands. Retain exact Node/Qt/libuv/toolchain, source and artifact hashes. Source output/cache/build files stay outside the public input set.
A private candidate scope contains actual sourceSha256 (source archive bytes)
and packageSha256 (the exact Arch package). Prepare a new private mode0700
reports directory with mode0600 JSON reports and copied relative evidence files.
Each canonical row has its unchanged observed status/exit/cleanup, human-readable
environment, evidence paths/digests and a scope containing the current source
hash and canonical environment key. Artifact-dependent rows additionally bind
the exact package hash. Reusing an earlier observation requires explicit proof
that its source/toolchain/subject scope still matches; a new scope label alone is
not new execution. Keep original raw reports and any failed/stale observations.
node scripts/qualify-release.mjs --manifest packaging/release/required-gates.json --reports /absolute/private/reports --exceptions /absolute/private/exceptions --scope /absolute/private/scope.json --output /absolute/private/qualification.json
The command validates actual evidence bytes, refuses unsafe paths/symlinks and malformed/corrupt/duplicate inputs, and fails closed for missing rows, scope substitution or failed cleanup. It returns1 while blocked. An accepted exception needs the actual owner's statement/time, exact ID/environment, observed status, precise scope and matching source/package identity. A stale or unrelated exception supplies no authority. Raw not_run/fail results remain in the input; the derived outcome records the owner disposition separately. No synthetic or property-tree success can satisfy an unrun real-operator requirement.
node scripts/assemble-release.mjs --source /absolute/final-export --package /absolute/tilde-assistant-0.1.1-1-x86_64.pkg.tar.zst --qualification /absolute/private/qualification.json --output /absolute/new-artifacts
Assembly pins copies of the actual input bytes, audits bounded archive paths,
links, membership and compression tails before extraction, validates the source
manifest, inspects the actual package/ELF/layout, and compares packaged notices
with the exact source. It recomputes the required-gate result rather than trusting
a changed ready flag. Inventory unresolved items cannot become a passing license
claim. Only the source/package, license/notices/inventory, candidate notes,
public qualification summary, build manifest and checksums are emitted.
Raw private logs, exception statements, host paths and qualification inputs are
not copied to public artifacts. Candidate assembly while blocked is allowed;
its manifest explicitly says verification_pending.
The original single final review, verified finding reproductions/fixes and exact final owner installed-build acceptance are separate evidence. Regenerate/requalify changed artifacts after fixes. Do not initialize a repository or publish anything as a side effect of these local commands. See the public release procedure for later owner-controlled repository, draft workflow and Pages setup.
The package build metadata must identify the exact rendered Arch recipe from the source archive, with that archive SHA256 and its declared Qt version. Assembly retains this recipe digest; a different source or recipe blocks assembly.