Spectre 0.2.9 adds governed Definition changes without changing any durable State, Run, or canonical Instance writer. State remains writer v5, Run remains writer v2, and Instance checkpoints remain schema 4. Existing bootstrap Candidates continue to activate through the same API.
Upgrade checklist
- Pin
spectreto tag0.2.9and compile with warnings as errors. - Run
Spectre.Foundation.Conformance.matrix/0and keep every existing checkpoint, Definition, runtime Skill, and data-execution fixture in the upgrade suite. - Import
test/fixtures/compatibility/0.2.9/governance-v1.jsoninto any application-specific compatibility gate. - If governed Candidates are used, configure a durable Definition Store and persist the external checker id/version map in Instance options.
- Keep approval actors and activation authority in trusted host code. Do not derive them from a ChangeSet, model output, or Skill data.
- Treat rollback as a new activation commit and reconcile external Effects and Skill state explicitly.
- Execute GC plans only inside a backend transaction or lease that rechecks a complete reference inventory.
- Publish a non-empty protected evaluation corpus whose closure digest comes
from
EvaluationDelta.protected_corpus_digest!/1; it binds complete normalized case content, sorted by id. Pass the same cases throughprotected_cases:when building each delta. - Persist semantic-live profile, variability, and expiry evidence when policy
requires that gate. Decide explicitly whether emergency restart/rollback
may use the narrowly scoped expired-receipt host flags documented in
GOVERNANCE.md.
Compatibility details
Spectre.Definition.Candidate schema remains version 1. Governed Candidates
add an optional governance field and use source governed_host; legacy
Candidate bytes omit that field and retain their exact identity.
The Store adds immutable gate-receipt artifacts. Candidate publication and fetch now revalidate all governed receipt bindings, while bootstrap Candidate behavior remains unchanged. Governed activation and restart recovery require the configured checker versions used during review.
The new portable schema versions are all 1:
- ChangeSet and Candidate governance state;
- gate receipt and receipt Ref;
- evaluation delta and Human Report generator;
- conservative GC plan.
The 0.2.9 tag did not exist while these contracts were hardened (the latest
published tag was 0.2.8). Development snapshots of the 0.2.9 Candidate state,
evaluation delta, Human Report, receipt, or compatibility fixture are not a
supported durable format: regenerate them from the final 0.2.9 APIs. Schema 1
denotes the finalized release contract, not those untagged pre-release bytes.
Behavioral changes
- A stale ChangeSet fails instead of rebasing implicitly.
- Candidate-owned evaluation cases can only add obligations; they cannot improve the protected score.
- Required gate options are additive. The constitutional floor cannot be reduced, evaluation deltas allow no protected regressions, and any attached failed receipt rejects the Candidate.
EvaluationDelta.new/3now requiresprotected_cases:and binds full case content.max_regressionsmust be exactly zero andmin_score_deltacannot be negative; hosts that previously tolerated regressions must tighten policy.- Prompt and applicability ceilings are sealed into governed Candidate state
and rechecked at activation/recovery;
scopes: []is a wildcard and cannot pass a finite scope ceiling. - Medium- and high-risk Candidates require human approval under the default policy.
- Approval emits a new Candidate Ref but does not activate it; explicit host rejection emits a terminal rejected Candidate Ref.
- Rollback targets an ancestor Candidate and increments activation generation; it never promises to undo external Effects.
- A GC inventory marked complete must actually be closed over Candidate and Definition lineage.
- An incomplete GC inventory remains valid only as conservative retain-only evidence. Definition Refs now require lowercase hexadecimal canonical text.
See Governed Definition Changes for the full host workflow.