v0.14.0¶
Release Date: 2026-06-07
Highlights¶
- Strategic Planning Canvases: 7 canvas types for opportunity discovery and product planning
- Multi-Format Rendering: D2, SVG, Mermaid, and Lit/JSON output formats
- Prioritization Models: RICE and Kano scoring for feature prioritization
- Dependency Updates: Migration to priority-frameworks and structured-evaluation v0.7.0
Overview¶
v0.14.0 introduces strategic planning canvas types following industry-standard frameworks from Osterwalder (BMC), Torres (OST), Patton (Opportunity Canvas), Cagan/SVPG (Opportunity Assessment), Efimov (Feature Canvas), and Gothelf (Lean UX Canvas). Each canvas supports multiple output formats for integration with documentation, diagrams, and web applications.
New Features¶
Strategic Planning Canvases¶
| Canvas | Framework | Description |
|---|---|---|
| BMC | Business Model Canvas (Osterwalder) | 9-block business model visualization |
| OST | Opportunity Solution Tree (Torres) | Tree structure for outcome-driven discovery |
| Opportunity | Opportunity Canvas (Patton) | 9-block opportunity assessment |
| OpportunityAssessment | SVPG (Cagan) | 10-question go/no-go evaluation |
| OpportunitySpec | Merged Patton + Cagan | 12-box discovery + business case |
| Feature | Feature Canvas (Efimov) | Feature definition and validation |
| LeanUX | Lean UX Canvas (Gothelf) | Hypothesis-driven product design |
import (
"github.com/grokify/prism-roadmap/canvas"
"github.com/grokify/prism-roadmap/canvas/render"
)
// Create an Opportunity Solution Tree
ost := canvas.NewOpportunitySolutionTree("ost-1", "User Onboarding")
ost.Outcome = canvas.OSTOutcome{
ID: "O1",
Description: "Increase activation to 60%",
Opportunities: []canvas.OSTOpportunity{
{
ID: "OP1",
Description: "Users don't understand value prop",
Solutions: []canvas.OSTSolution{
{ID: "S1", Description: "Interactive tutorial"},
},
},
},
}
// Render to D2
c := canvas.NewOST(ost)
d2Output, _ := render.Render(c, render.FormatD2, render.OSTOptions())
Multi-Format Rendering¶
| Format | Extension | Description |
|---|---|---|
d2 | .d2 | D2 diagram language text |
d2svg | .svg | D2 rendered to SVG (via d2 CLI) |
mermaid | .mmd | Mermaid diagram syntax |
lit | .json | Lit component JSON data |
// Render to different formats
d2Text, _ := render.Render(c, render.FormatD2, opts)
svg, _ := render.Render(c, render.FormatD2SVG, opts)
mermaid, _ := render.Render(c, render.FormatMermaid, opts)
litJSON, _ := render.Render(c, render.FormatLit, opts)
RICE and Kano Prioritization¶
import "github.com/grokify/prism-roadmap/prioritization"
// RICE scoring
rice := prioritization.RICEScore{
Reach: 1000, // Users affected
Impact: 2, // 0.25, 0.5, 1, 2, 3
Confidence: 0.8, // 0-1
Effort: 5, // Person-weeks
}
score := rice.Score() // (1000 * 2 * 0.8) / 5 = 320
// Kano categorization
kano := prioritization.KanoCategory("performance")
// Categories: basic, performance, excitement, indifferent, reverse
Canvas Templates and Rubrics¶
The templates/ and rubrics/ directories include assets for LLM-assisted workflows:
templates/opportunity-spec.md- OpportunitySpec markdown templaterubrics/opportunity-spec.rubric.yaml- LLM-as-Judge evaluation criteria
Dependency Changes¶
structured-evaluation v0.7.0¶
Upgraded to structured-evaluation v0.7.0 which includes:
- Report Validation:
rubric.ValidateReport()for correctness checking - Lint Command:
sevaluation lint report.json --strict - Enum Constraints: JSON Schema with strict enum validation
import "github.com/plexusone/structured-evaluation/rubric"
// Validate generated reports
result := rubric.ValidateReport(report)
if !result.Valid {
for _, issue := range result.Issues {
fmt.Printf("[%s] %s: %s\n", issue.Severity, issue.Path, issue.Message)
}
}
priority-frameworks¶
Migrated Priority and MoSCoW types to the shared priority-frameworks library:
import "github.com/grokify/priority-frameworks"
// Priority levels
priority := priorityframeworks.PriorityCritical
// MoSCoW categories
moscow := priorityframeworks.MoSCoWMust
Migration Guide¶
Package Rename: evaluation → rubric¶
If you were using the evaluation integration:
// Before (v0.13.0)
import "github.com/plexusone/structured-evaluation/evaluation"
report := prd.ScoreToEvaluationReport(doc, filename)
// After (v0.14.0)
import "github.com/plexusone/structured-evaluation/rubric"
report := prd.ScoreToRubric(doc, filename)
Priority Types¶
If you were using Priority or MoSCoW types directly:
// Before
priority := prd.PriorityCritical
// After (type alias, no change needed in most cases)
// The types are now aliased from priority-frameworks
Examples¶
See examples/canvas/ for complete canvas examples with rendered outputs:
- D2 diagrams (
.d2) - SVG renders (
.svg) - Mermaid diagrams (
.mmd) - HTML visualizations (
.html)
Documentation¶
- Strategic Canvases Overview
- Business Model Canvas
- Opportunity Solution Tree
- Prioritization (RICE & Kano)
Full Changelog¶
See CHANGELOG.md for the complete list of changes.