# Release Payload Inventory, Deduplication, and Media Sizing **Status**: Repository-derived planning baseline; no build authority. **Observed source revision**: `bea082a2014a3edc31cb006108b952c8adbbc8bc` plus the uncommitted specification changes in this task. **Observed artifact fact**: `autoinstall/cezen-ai-ubuntu2204.iso` is 0 bytes and is not usable as a release or sizing baseline. ## Inventory Rules Every payload object has one canonical inventory row containing object ID, class, immutable upstream identity, license, architecture, media type, compressed/download bytes, unpacked bytes, on-target bytes, digest, source URL/repository, included artifacts, activation profiles, dedup group, and evidence status. No bytes are counted from model names, tags, estimates, sparse files, or expected upstream size. The release manifest is generated from the finalized inventory. The inventory is not reconstructed from an ISO after publication except as independent verification. ## Four-Artifact Boundary | Artifact | Embedded boundary | Explicit exclusions | Current sizing state | |---|---|---|---| | Online Universal Server | Ubuntu boot/install base, network/preflight/acquisition client, trust roots, signed-index support, local recovery/help | Platform payload, optional/large models and mutable default-branch source | Current checked-in ISO is 0 bytes; no valid measured size | | Offline Workstation AMD64 | Ubuntu base, universal NVIDIA/CPU-adaptive platform superset, required packages/runtimes/images, local help/recovery, approved small starter models | AMD GPU/ROCm, ARM64 DGX Spark, large optional models, customer license/data | Candidate lists exist; no complete built payload or measured ISO | | Offline Server S/M AMD64 | Ubuntu base plus superset required for both S and M; selection restricted to `starter/basic`; small approved starter models only | Server L/Max selection and large models | No complete inventory/build/size evidence | | Offline Server L/Max AMD64 | Ubuntu base plus enterprise platform superset for L and Max; selection restricted to `pro/max`; only approved bootstrap/small validation models | Large L/Max models, which are separate signed packs | No complete inventory/build/size evidence; current roles do not yet prove a distinct payload | Architecture is part of artifact identity. Any later Workstation ARM64 media has its own inventory and measurements while remaining the same commercial product category. ## Repository-Derived Candidate Inventory ### Common source and trust - Exact platform source revision excluding `.git`, ISOs, offline output, user collateral and secrets. - Boot/autoinstall data, first-boot/browser setup, install orchestration and Ansible roles/playbooks. - Portal, backend, local documentation, recovery and diagnostic tooling. - License public key, artifact trust roots, manifest schemas, signature/revocation policy and SBOM. - Ubuntu installer/base identity and boot metadata. ### Current Workstation offline lists - 26 non-comment APT package names. - 15 non-comment additional Python package requirements plus backend requirements and pinned `chromadb==0.5.23`. - Six container image names: Open WebUI, vLLM, DCGM exporter, Prometheus, node exporter and Grafana. - Miniconda, Ollama runtime, K3s, MinIO and `mc` binaries described by the current offline material. - Ollama `phi3:mini` and `nomic-embed-text` candidate pins plus the Hugging Face Phi-3 snapshot. These are candidate inputs, not complete objects: several versions/tags, licenses, transitive packages, architectures and actual byte/digest inventories remain unresolved. ### Role matrix | Role | Workstation adaptive | Server S | Server M | Server L | Server Max | |---|---|---|---|---|---| | Base, Docker, Ollama, vLLM, ChromaDB, monitoring, backend, ttyd, Nginx | Profile-dependent | Yes | Yes | Yes | Yes | | JupyterLab | Optional/profile | Optional | Yes | Yes | Yes | | K3s, MLflow, MinIO | Not enabled on low profiles; payload decision pending | No | Yes | Yes | Yes | | NVIDIA driver/runtime | Only on supported NVIDIA profile | Hardware-dependent | Hardware-dependent | Required profile decision | Required profile decision | | Large default model | Separate pack | Separate/not required | Separate pack | Separate pack | Separate pack | The existing `entry`, `pro`, and `max` playbooks contain the same role set. Pro/Max differ primarily in model choice, tensor parallelism, quantization and hardware expectations. Because large models are now separate packs, current repository evidence does not yet prove that Offline Server L/Max needs a materially different boot payload from the Server M superset. The agreed separate L/Max artifact may still be justified by support boundary, validation, driver/runtime, capacity or enterprise policy, but that distinction must be explicit before implementation. ## Deduplication Policy 1. Every object is identified by SHA-256 of exact bytes. Identical digests share one dedup group. 2. Within one artifact, store identical package/wheel/image/model/runtime objects once; manifests may reference the same object from multiple profiles/tiers. 3. Container layers are deduplicated by compressed layer digest, not image tag. 4. Python wheels and APT packages are deduplicated by exact file digest and architecture; different builds/architectures are distinct even when package/version text matches. 5. Model weights are deduplicated only when exact object digests match. Similar model names or quantizations are distinct. 6. Shared source, local help and portal/backend copies use one canonical payload object and explicit install destinations rather than duplicated archives. 7. Deduplication across separately distributed ISOs does not reduce each customer's media size and is reported only as build-store efficiency, never as ISO byte reduction. 8. Compression savings and filesystem sparse allocation are recorded separately from logical bytes. ## Measurement Worksheet For each build candidate record exact bytes: | Component class | Unique compressed bytes | ISO/on-media bytes | Unpacked target bytes | Staging bytes | Rollback bytes | Evidence | |---|---:|---:|---:|---:|---:|---| | Ubuntu boot/install base | TBD | TBD | TBD | TBD | N/A | Base ISO digest/signature required | | Platform source/config/help | TBD | TBD | TBD | TBD | TBD | Exact revision/archive digest | | APT packages/repository metadata | TBD | TBD | TBD | TBD | TBD | Resolved package manifest | | Python/Conda environments | TBD | TBD | TBD | TBD | TBD | Wheel/conda explicit lock | | Runtime binaries | TBD | TBD | TBD | TBD | TBD | Immutable URLs/digests/licenses | | Container layers | TBD | TBD | TBD | TBD | TBD | Digest/layer inventory | | Starter model objects | TBD | TBD | TBD | TBD | TBD | Exact model/layer inventory | | Trust/SBOM/provenance/manifests | TBD | TBD | TBD | TBD | TBD | Signed build output | | ISO filesystem/boot overhead | N/A | TBD | N/A | N/A | N/A | Final image measurement | Totals MUST distinguish download/media bytes, target bytes, temporary staging, last-known-good rollback and operational free space. Target disk minimum is not the same as USB capacity. ## Media Capacity Rule After final ISO bytes are measured, compute `required_flash_bytes = final_iso_bytes + tool/filesystem overhead`, then add at least 20% headroom. Publish the smallest commonly available USB capacity above that result. Recommend the next larger capacity when field reliability or signed forecast growth requires it. Record exact arithmetic and artifact digest. Current 2–4 GB Online and 35–50 GB Workstation numbers remain labelled estimates only. Offline Server S/M and L/Max sizes remain unpublished until their resolved inventories are built and deduplicated. Large-model-pack media is sized independently from boot media. ## Evidence Gate 1. Resolve every input to immutable version/revision/digest, architecture and redistribution license. 2. Produce SBOM and object inventory before assembly; verify every fetched byte. 3. Fail the build for missing, extra, duplicate-path/different-digest or mutable-tag objects. 4. Build from a clean staging host, record logical and physical bytes, and verify manifest totals. 5. Extract the ISO independently and reconcile every embedded object to the signed inventory. 6. Complete zero-network install and record actual peak target/staging/rollback disk usage. 7. Repeat the build to assess reproducibility; unexplained digest differences block release. 8. Product/delivery approve the L/Max split justification after comparing its resolved payload to M. ## Open Decisions - Exact immutable Ubuntu, APT, Python/Conda, runtime, image and binary inputs/licenses. - Whether K3s/MinIO tooling belongs in Workstation media when disabled for lower profiles. - Small bootstrap-model boundary for Server S/M and L/Max. - Concrete platform difference justifying separate Offline Server L/Max media after large models are removed. - Compression format/level, reproducible timestamps/ordering, SBOM/provenance formats and build host. - Published USB capacities only after real artifact and flashing measurements.