v0.20.0¶
Release Date: 2026-08-24
Highlights¶
- COMPASS-RICE adopted as a second, cross-profile-comparable RICE source.
CompassAssessmentandResolveCompassRICEwire compass-rice's six investment-thesis profiles into the assessment IR: each profile normalizes its own domain-specific evidence into the same canonical Reach/Impact/Confidence/Effort shape, so a portfolio mixing customer features, platform investments, risk mitigations, and cost optimizations gets one comparable score instead of one incomparable 0..1 Reach fraction stretched across all of them. - Two-phase profile selection.
ProfileAssignmentimplements "an LLM judge proposes, a PM confirms" for the "exactly one profile generates the canonical score" decision compass-rice's PRD requires (D5) —ProposeProfileAssignment→Confirm/Reject, spec-scoped and surviving assessment cycles likeRankOverride. ToRankInputprefers COMPASS-RICE. WhenOpportunityAssessment.Compassis set, it takes precedence over the legacy ladderRICEfield — the two use incompatible Reach scales and are never mixed for one opportunity.
Overview¶
This is Phase 1 of INIT-OMNIROADMAP-001: bringing COMPASS-RICE into the assessment IR that omniroadmap builds its scoring pipeline on. The ladder-based RICE this package already shipped (v0.19.0) resolves Impact/Confidence from evidence-backed threshold answers, but still scores every opportunity on one undifferentiated Reach scale — exactly the limitation compass-rice's methodology was built to address. This release doesn't replace the ladder RICE (it remains for existing consumers); it adds COMPASS-RICE as the preferred source when an opportunity has adopted a profile, leaving the compile-time decision of whether to require one to the consumer (omniroadmap enforces it as a hard gate; see its own release docs).
See the new COMPASS-RICE section of the Opportunity Prioritization guide for the full pipeline, and docs/specs/initiatives/INIT-OMNIROADMAP-001/ for the PRD/TRD driving the design.
Changes¶
CompassAssessment and ResolveCompassRICE¶
CompassAssessment carries one cycle's COMPASS-RICE judgment: the profile-typed evidence a judge produced (the source of truth, re-normalizable via compass-rice's catalog package), the deterministic Normalized result, the judge's rubric reasoning and verified claims, and whether a human has cleared a NeedsHumanReview-flagged assessment for scoring. ResolveCompassRICE is the single gate: no assessment, or one still awaiting human review, is uncomputable — never silently scored anyway.
ProfileAssignment¶
Records an opportunity's primary investment thesis, two-phase: ProposeProfileAssignment (the judge phase) and Confirm/Reject (the PM phase, both requiring an identity and timestamp). Secondary profiles are recorded as context, never scored — running an opportunity through more than one Normalizer would reopen exactly the score-shopping problem the primary-thesis rule exists to prevent.
RankingPolicy integration¶
ToRankInput resolves Compass via ResolveCompassRICE when present, falling back to the existing ComputeRICE(*a.RICE) path unchanged otherwise. RICEScoreResult gains an additive ProfileID field so a ranked list can show which scores are COMPASS-RICE and which are legacy ladder RICE. OpportunityAssessment.HasEvidence()/EvidenceReferences() fold in CompassAssessment.Claims alongside the existing MoSCoW/RICE/dimension/OKR citations.
Compatibility¶
Fully additive. OpportunityAssessment.Compass is a new, nil-by-default field; RICEScoreResult.ProfileID is a new, empty-by-default field. ToRankInput's behavior is unchanged for any assessment that doesn't set Compass. New dependency on github.com/ProductBuildersHQ/compass-rice v0.4.0.