v0.5.0 Release Notes
Release Date: 2026-05-10
Highlights
- BREAKING: Model/State Separation - PRISM Maturity Model (definition) is now separate from PRISM Maturity State (tracking)
- Temporal SLO Windows - Support for 7d, 30d, 90d, quarterly, and annual SLO tracking
- Hybrid Metrics - Qualitative/quantitative criteria with measurement type classification
- Dashboard Dual-Read - Backward compatibility support during migration
Breaking Changes
This release introduces a fundamental architectural change to how maturity data is structured.
Assessment Data Removed from Models
The assessments field has been removed from maturity model files. State tracking now uses separate PRISM Maturity State documents.
Before (v0.4.0):
{
"metadata": { "name": "Operations Maturity" },
"domains": { ... },
"assessments": {
"operations": {
"currentLevel": 3,
"targetLevel": 4,
"criteriaValues": { ... }
}
}
}
After (v0.5.0):
Maturity Model (model.json):
Maturity State (state-q2-2026.json):
{
"$schema": "https://github.com/grokify/prism/schema/prism.schema.json",
"metadata": {
"name": "Operations Maturity State Q2 2026",
"maturityModelRef": "operations-maturity-model"
},
"domains": {
"operations": {
"currentLevel": 3,
"targetLevel": 4,
"slis": {
"metric-runtime-p99": {
"windows": {
"30d": { "current": 180, "target": 200 },
"90d": { "current": 175, "target": 200 }
}
}
}
}
}
}
Deprecated Types
The following types are deprecated and will be removed in a future release:
Spec.AssessmentsfieldDomainAssessmenttype
Added
QualitativeState Type
New type for tracking qualitative progression states:
type QualitativeState struct {
ID string `json:"id"`
Label string `json:"label"`
Description string `json:"description,omitempty"`
Order int `json:"order"`
}
Standard qualitative states: none, adhoc, tracked, measured, alerting, optimized
Measurement Type Constants
const (
MeasurementTypeQuantitative = "quantitative"
MeasurementTypeQualitative = "qualitative"
MeasurementTypeHybrid = "hybrid"
)
SLI Measurement Fields
SLIs now support hybrid measurement types:
{
"slis": {
"security-scanning": {
"id": "security-scanning",
"name": "Security Scanning",
"measurementType": "hybrid",
"qualitativeStates": [
{ "id": "none", "label": "None", "order": 0 },
{ "id": "adhoc", "label": "Ad-hoc", "order": 1 },
{ "id": "tracked", "label": "Tracked", "order": 2 },
{ "id": "measured", "label": "Measured", "order": 3 }
]
}
}
}
SLI Helper Methods
GetMeasurementType()- Returns the measurement type (defaults to quantitative)GetQualitativeStates()- Returns defined qualitative statesIsQuantitative()- True if measurement type is quantitativeIsQualitative()- True if measurement type is qualitativeIsHybrid()- True if measurement type is hybrid
Dashboard Dual-Read Support
The dashboard generator now supports reading state from a separate document:
Temporal Window Support
State documents support multiple time windows for SLO tracking:
{
"windows": {
"7d": { "current": 99.95, "target": 99.9 },
"30d": { "current": 99.92, "target": 99.9 },
"90d": { "current": 99.88, "target": 99.9 },
"quarterly": { "current": 99.85, "target": 99.9 },
"annual": { "current": 99.80, "target": 99.9 }
}
}
New Example Files
examples/maturity-state/operations/state-q2-2026.jsonexamples/maturity-state/organization/state-q1-2026.jsonexamples/maturity-state/security/state-q2-2026.json
Changed
- XLSX generator handles nil assessments gracefully
- Dashboard generator supports reading state from separate documents
Documentation
docs/design/REFACTOR_MATURITY_STATE.md- Architecture for model/state separation- Updated
examples/README.mdwith new directory structure
Migration Guide
Step 1: Extract Assessments
Extract the assessments section from your maturity model files into separate state files.
Step 2: Add Metadata Reference
Add maturityModelRef to state document metadata to link back to the model.
Step 3: Update Dashboard Code
If using the dashboard generator, add the state document:
// Before
gen := dashboard.NewGenerator(spec)
// After
gen := dashboard.NewGenerator(spec)
gen.WithStateDocument(stateDoc)
Step 4: Use Temporal Windows
Consider migrating to temporal windows for historical SLO tracking.