0.3.0 fixed the "non-range commit after a sealed range can never ship" bug by consuming superseded seal artifacts at pass time (clearSupersededSealArtifacts: cleared when pinned to a non-HEAD commit or to a tip reachable from origin/<baseBranch>; only an unpushed sealed tip at HEAD is kept).
That is write-side hygiene at the human trust anchor. Consider complementing it read-side in sealedHeadBinding():
- Ignore a seal/binding when a newer human-signed gate exists (
gate.passedAt > seal.sealedAt/boundAt with the gate lacking its own sealedHeadOid), and/or
- Ignore a seal whose
sealedHeadOid is already reachable from the remote base (consumed), evaluated at check time.
Rationale: pass-time consumption only helps users running the fixed binary at pass time; stale artifacts written by older versions, or restored from backups, still hard-block shipping until the next pass. Read-side supersession is fail-closed to add (both artifacts are human-signed, so timestamp ordering is trustworthy; replaying old signed artifacts can only block, never open).
Keep the invariant: agent-runnable surfaces must never delete artifacts; read-side logic only changes what binds.
0.3.0 fixed the "non-range commit after a sealed range can never ship" bug by consuming superseded seal artifacts at
passtime (clearSupersededSealArtifacts: cleared when pinned to a non-HEAD commit or to a tip reachable fromorigin/<baseBranch>; only an unpushed sealed tip at HEAD is kept).That is write-side hygiene at the human trust anchor. Consider complementing it read-side in
sealedHeadBinding():gate.passedAt > seal.sealedAt/boundAtwith the gate lacking its ownsealedHeadOid), and/orsealedHeadOidis already reachable from the remote base (consumed), evaluated at check time.Rationale: pass-time consumption only helps users running the fixed binary at pass time; stale artifacts written by older versions, or restored from backups, still hard-block shipping until the next pass. Read-side supersession is fail-closed to add (both artifacts are human-signed, so timestamp ordering is trustworthy; replaying old signed artifacts can only block, never open).
Keep the invariant: agent-runnable surfaces must never delete artifacts; read-side logic only changes what binds.