GV110 assurance

GV110 keeps Protocol judgment non-constitutional while making review freshness explicitly checkable. Counter transitions remain necessary but are no longer sufficient: every triggered review must also change explicit review evidence, so a contributor cannot satisfy vigilance by mechanically incrementing a counter. The project-purpose snapshot is derived from the canonical purpose, review rationale, and review index.

{-# OPTIONS --safe #-}

module Govenv.Assurance.GV110 where

open import Agda.Builtin.Bool using (true; false)
open import Agda.Builtin.Equality using (_≡_; refl)
open import Govenv.Kernel.Assurance using (StaticEvidence; staticEvidence)
open import Govenv.Kernel.ProjectPurpose using (projectPurposeSnapshot)
open import Govenv.Kernel.Protocol using
  (protocolVigilanceFresh; protocolReviewFresh)
open import Govenv.Materialization using (Materialization)
import Govenv.Materialization.ProjectPurposeSnapshot as PurposeSnapshot
open import Govenv.Project using
  (purpose; purposeReviewRationale; purposeReviewIndex)

record Proposition : Set where
  constructor satisfied
  field
    noTriggerPreserves :
      protocolVigilanceFresh false false 4 4 ≡ true
    noTriggerRejectsBump :
      protocolVigilanceFresh false false 4 5 ≡ false
    mechanicalBumpIsNotReview :
      protocolReviewFresh true false false 4 5 ≡ false
    reaffirmationRequiresEvidence :
      protocolReviewFresh true false true 4 5 ≡ true
    unchangedStateRejectsEvidenceNoise :
      protocolReviewFresh false false true 4 4 ≡ false
    revisionRequiresEvidence :
      protocolReviewFresh false true true 4 0 ≡ true
    revisionWithoutEvidenceIsRejected :
      protocolReviewFresh false true false 4 0 ≡ false
    purposeSnapshotIsCanonical :
      Materialization.state PurposeSnapshot.materialization ≡
        projectPurposeSnapshot
          purpose
          purposeReviewRationale
          purposeReviewIndex

proof : Proposition
proof = satisfied refl refl refl refl refl refl refl refl

evidence : StaticEvidence 110
evidence = staticEvidence Proposition proof