Release Artifact Policy
This page defines the release-integrity contract behind the Production School Server Runbook.
A production school is deployed from an artifact created by the official Makronexus School Server release builder in mn-school-be. Source checkouts, development Compose files, frontend-only packs, manually assembled bundles, and ad-hoc Docker tags are not production School Server artifacts.
Official release entry point
On the controlled Windows release workstation, use:
mn-school-be\tools\Release-Makronexus-School-Package.cmd
The guided launcher delegates to the canonical backend release engine. Operators do not manually chain npm, Docker, manifest, checksum, signing, air-gap, assembly, smoke-test, or archive commands.
A distributable release must end with:
RELEASE READY
A run ending with RELEASE STOPPED is not distributable even if intermediate files exist.
Immutable release identity
Normal release versions use:
YYYY.MM.DD-N
Example:
2026.08.29-1
Do not reuse a completed release version. The version is an audit identity tying together source commits, image references, signatures, checksums, handoff files, field deployments, backups, incident records, and future updates.
Supported release modes
Standard connected
The builder creates/publishes the frontend and backend production images and resolves immutable digest references for the release manifest.
A stable connected release should resolve image references such as:
ghcr.io/<namespace>/mn-school-fe@sha256:...
ghcr.io/<namespace>/mn-school-be@sha256:...
Do not replace these with latest, guessed tags, or locally rebuilt images.
Offline / USB
The builder creates the same production application images locally and exports the complete release image inventory into the final branded release image archive recorded by RELEASE-REPORT.json.
For release version <releaseVersion>, the current final naming convention is:
makronexus-school-server-<releaseVersion>-offline-images.tar
makronexus-school-server-<releaseVersion>-offline-images.tar.sha256.json
Air-gap image delivery changes image transport only. It does not weaken host qualification, signing, environment validation, appliance automation, zero-touch identity, bootstrap integrity, write authority, or field acceptance.
Canonical handoff shape
The Release Console finalization step renames intermediate school-bundle-release-* packaging names into the public Makronexus artifact naming scheme. Field operators must use the final names in RELEASE-REPORT.json, not intermediate builder filenames copied from old runbooks.
An Offline / USB stable release is expected to contain a shape like:
releases\<releaseVersion>\
├── makronexus-school-server-<releaseVersion>-offline\
├── makronexus-school-server-<releaseVersion>-offline.tar.gz
├── makronexus-school-server-<releaseVersion>-offline.tar.gz.sha256.json
├── makronexus-school-server-<releaseVersion>-offline-images.tar
├── makronexus-school-server-<releaseVersion>-offline-images.tar.sha256.json
├── makronexus-school-release-signing-public.pem
├── INSTALL-SCHOOL-FROM-USB.cmd
├── RELEASE-REPORT.json
├── RELEASE-REPORT.txt
├── MAKRONEXUS-RELEASE-RECEIPT.txt
└── README-FIRST.txt
A connected release uses the same convention with the -connected artifact stem and does not require the offline image archive. Package-only mode uses the -package artifact stem.
RELEASE-REPORT.json is the filename authorityDo not construct release paths from memory or assume the old school-bundle-release-<version> naming. Read these fields from RELEASE-REPORT.json:
artifacts.releaseDirectoryartifacts.archiveartifacts.archiveChecksumartifacts.airgapImageArchivewhen presentartifacts.airgapImageChecksumwhen presentartifacts.publicKeyReferenceCopywhen present
The report describes the final, distributable handoff after Makronexus naming and checksum regeneration.
Release report
RELEASE-REPORT.json is the machine-readable release evidence. Before field distribution, confirm it identifies the intended:
- release version and channel;
- connected/offline mode;
- frontend source commit;
- backend source commit;
- final frontend image reference;
- final backend image reference;
- signing key identity/fingerprint when signed;
- final release directory/archive/checksum names;
- offline image archive/checksum names when applicable;
status: "ready"anddistributable: true.
Keep the report with release approval, deployment, support, replacement, and incident records.
Stable signing policy
Stable production releases are signed by default.
The release private key stays outside Git and outside deployment media. The public key may travel as a reference copy, but trust must come from an independently controlled Makronexus trust record.
The field technician must compare the approved public-key SHA-256 fingerprint with the release trust register before placing the key in the bundle trust location.
Do not treat a public key as trusted merely because it arrived beside the artifact it is supposed to verify.
Trust chain
The production chain is:
The installer re-verifies signed/checksummed bundle content when the corresponding metadata is present. Never edit checksum/signature material to make modified content pass.
Disposable packaging workspace
Release construction uses an isolated packaging workspace rather than mutating the checked-in deploy/school-bundle template.
This is important for reproducibility: generating a release must not silently rewrite source-controlled manifest/signature/checksum state in the developer checkout.
Release workstation gate
A stable source-built release requires clean approved source state. The normal builder refuses stable release creation when frontend/backend repositories are dirty or not on the approved branch.
Do not weaken this gate to package unreviewed source. If emergency release governance requires an exception, document it as an explicit release-policy exception rather than teaching normal operators to bypass the mechanism.
Windows prerequisite media is separate
The Makronexus School Server release includes Windows prerequisite automation, but it does not redistribute third-party Docker Desktop, Git for Windows, or WSL installer binaries.
For a fully offline clean Windows host, the deployment USB therefore contains two classes of media:
Makronexus release handoff
+
approved Windows prerequisite installers
If internet is available temporarily during commissioning, the connected prerequisite bootstrap can acquire/repair those platform components without separate installer media.
Zero-touch field handoff
Normal deployment media must not contain or require the technician to type:
TENANT_ID
LOCAL_SCHOOL_ID
SITE_ID
CLOUD_SYNC_API_KEY
CLOUD_SYNC_HMAC_SECRET
The School Server generates stable site identity and discovers the tenant/school scope from the one-time Cloud enrollment code. Permanent machine credentials remain encrypted server-side.
For an already enrolled appliance, a software update preserves the existing persisted identity and machine credentials. A new release version is not a reason to create a new SITE_ID or request a new enrollment code.
USB/media custody
Never place these on generic release media:
- release-signing private key;
- plaintext production database/application secrets prepared for another school;
- tenant/school/site UUID handoff files for normal zero-touch deployment;
- permanent appliance API/HMAC credentials;
- uncontrolled copies of live school data;
- unapproved installer binaries or altered release files.
Field verification requirements
Before installation or update:
- copy the complete handoff from USB to local School Server storage;
- reject any handoff containing
DO-NOT-DISTRIBUTE.txt; - require
RELEASE-REPORT.jsonto saystatus: "ready"anddistributable: true; - resolve the release directory/archive/checksum filenames from
RELEASE-REPORT.jsonrather than hard-coding intermediate names; - verify the release
.tar.gzwith the report-named.sha256.jsondescriptor before extraction; - independently verify the signing-key fingerprint;
- use the trusted public key for bundle signature verification;
- when using USB images, verify the report-named offline image archive with its checksum descriptor before
docker load; - use
SKIP_IMAGE_PULL=trueonly as the explicit preloaded-image path after the exact manifest images are present locally.
Do not silently fall back from a failed release pull to arbitrary cached images.
Field-proven extraction pattern
The final handoff contains both the branded release directory and its archive. The extractor script lives in the branded release directory. Therefore the safe Windows flow is:
$Report = Get-Content .\RELEASE-REPORT.json -Raw | ConvertFrom-Json
$ReleaseDir = Join-Path $PWD $Report.artifacts.releaseDirectory
$Archive = Join-Path $PWD $Report.artifacts.archive
$Checksum = Join-Path $PWD $Report.artifacts.archiveChecksum
$Extractor = Join-Path $ReleaseDir 'scripts\extract-school-bundle-release.ps1'
powershell.exe -NoProfile -ExecutionPolicy Bypass `
-File $Extractor `
-Archive $Archive `
-ChecksumFile $Checksum `
-OutputDir (Join-Path $PWD 'verified')
Do not try to invoke an extractor path under an intermediate school-bundle-release-<version> directory that is not present in the finalized handoff.
Never use these as production artifacts
Do not use source zips/checkouts, developer Docker Compose files, frontend-only support packs, latest tags, manually rebuilt onsite images, mixed files from multiple releases, hand-edited release manifests, copied checksum/signature files from another version, or a partial handoff missing RELEASE-REPORT.json and integrity evidence.
Release acceptance checklist
- Official builder was used.
- Build ended with
RELEASE READY. - Release version is new and immutable.
-
RELEASE-REPORT.jsonmatches approved source/image intent. -
RELEASE-REPORT.jsonsaysstatus: "ready"anddistributable: true. - Final artifact filenames were taken from
RELEASE-REPORT.json. - Stable signing policy was satisfied.
- Signing-key fingerprint is recorded in the independent trust register.
- Release archive and checksum descriptor are present.
- Offline image archive and checksum descriptor are present when using USB delivery.
- No release-signing private key is on the handoff media.
- No permanent appliance Cloud credentials are on normal technician media.
- No mixed-version files exist.
- Exact release is retained according to rollback/recovery policy.
Continue with the Production School Server Runbook for the complete deployment sequence or Install the School Bundle for detailed installer behavior.