Image Identity Equals Its Bytes

Rule

A built image must carry the identity of its bytes. Before any portal swap: stamp == built HEAD == target, asserted pre-swap, DEPLOYED_SHA populated, fail loud on divergence. Never trust a version label over the bytes.

The live install advances only via the self-upgrade pipeline. No surface hand-advances the root clone HEAD or the running portal:

Why

On 2026-06-05 the live install ran an image stamped e7ef3331 (June 5) but containing ~June-3 bytes — no device-catalog.ts, migrations stopping at 20260603030000, /api/v1/device-catalog returning 404. Three divergent source states existed, none equal to origin/main. The label lied about the bytes. The root cause was two competing source-advance engines (a host-clone dpf/install promoter vs. a /workspace my-changes image-sync) that hand-advanced source outside the governed pipeline. When the identity of an image is its label rather than its bytes, every downstream consumer — operator, gate, rollback — builds on a false premise. The fix is to make the bytes load-bearing: assert the three-way equality before swap and refuse to deploy on divergence (BI-5B6C1C35), and let only the self-upgrade pipeline move the live install.

How To Apply

Decision Dimensions

Origin

Unified Delivery Surfaces spec, 2026-06-05. Tracked as BI-5B6C1C35; relates to the governed platform-upgrade lifecycle design.