Release governance

A release has two independent views: SemVer describes product/API impact, while the governance delta describes what became true or moved forward in the governed project.

The governance delta is computed purely from a previous immutable typed roadmap snapshot, the current typed roadmap, and governed Refs: GV… commit attribution. Human-facing README or changelog text is never interpreted as governance state.

A snapshot preserves each governance identity together with its owning phase, exact definition, and lifecycle state. Once introduced, a GovernanceId is append-only history: its definition and owning phase cannot change and the identity cannot disappear. Corrections or changed intent require a newer governance item; the old item remains present as superseded and points to that replacement. Work abandoned without replacement remains present as cancelled.

The governance delta classifies legitimate roadmap evolution as follows:

Completed governance may be superseded when its definition later needs correction or replacement. Cancelled and superseded states are terminal; their identity, definition, owning phase, and supersession target cannot subsequently be rewritten. The roadmap constructor additionally requires every supersession target to exist and have a greater GovernanceId, making supersession point forward to a newer identity.

A governance delta is invalid if a governed identity disappears, its definition changes, its owning phase changes, a completed item regresses to pending, a terminal lifecycle is rewritten, or phase progression moves backwards. There is deliberately no amended state: even an orthographic correction requires supersession.

The v0.1.0 baseline predates immutable governed roadmap snapshots and is therefore represented conservatively as an absent historical roadmap. Snapshot v2 is the first immutable-identity baseline; all subsequent releases compare the versioned .govenv/roadmap.snapshot artifact directly.

Phase progress is typed separately as introduced, unchanged, advanced, or roadmap-completed. GV55 will consume this delta: major and minor releases must contain governance progress according to the governed policy; patch releases are exempt.

The governed releaseGovernanceImpact section has one typed semantic document with three materialization targets. CHANGELOG.md is the canonical versioned repository-file section and uses a portable Markdown projection. The Release Please pull-request body uses an enriched GitHub projection of the same document. After Release Please publishes a GitHub Release, its body replaces the carried portable changelog section in place with that same enriched GitHub projection and verifies the external section by read-back equality.

Item projections are sparse. The typed release materialization determines which semantic dimensions changed and projections render only those dimensions; unchanged dimensions remain implicit. The governance identity or transition is retained as the minimum context needed to interpret the delta. For supersessions, phase ownership is shown only when the replacement belongs to a different phase, and the proposition diff is shown only when the replacement proposition differs. If both dimensions change, both are projected. GitHub proposition diffs visually distinguish changed spans, while the portable changelog uses standard Markdown diff fences.

GV60  ◇ → ✓
Govern README.md as the canonical output …

GV14 ↪ GV60
- Govern the README as the canonical materialization of Govenv.Readme …
+ Govern README.md as the canonical output of Govenv.Materialization.Readme …

GV40 ↪ GV67
Phase: P6 → P5
{-# OPTIONS --safe #-}

module Govenv.Release where

open import Govenv.Kernel.Release public