One recorded run of a framework such as RICE or Kano over a chosen set of entities, with results kept per entity.
A framework exercise is one recorded run of a framework, such as MoSCoW, RICE, or the Kano model, over a chosen set of entities. It captures the act of applying a method at a moment in time: which framework was run, what it was run over, and the verdict it produced for each item. The point is to make that run a durable, comparable object rather than a conversation that evaporates once the meeting is over.
Teams apply frameworks constantly, yet the output usually lands in a throwaway spreadsheet, detached from the things it scored. The alternative many tools reach for is worse: they stamp the verdict straight onto the entity, so a featureFeatureProduct SpecificationA product capability or featureView reference → grows a rice_score field. That conflates two different claims. The entity is a lasting fact about the product; the score is a fact about one exercise's view of it on one day. Recording the run as its own node keeps the two apart, so a feature can be scored in March and again in June, by RICE and by MoSCoW, without any single verdict overwriting the entity or the others.
You apply a framework to a set of entities, for example RICE across the features you are weighing for next quarter. The exercise becomes a node that includes each feature it touches. Each feature's reach, impact, confidence, effort, and resulting score ride on that include link, not on the feature. Run MoSCoW over the same features a month later and you get a second exercise, a second set of links, and a clean before and after, with both feature nodes untouched.
Because a framework can change after the fact, an exercise can keep an inputs_snapshot, a frozen copy of the framework's input spec at the moment it ran. If the framework later adds an input or rescales a field, the historical exercise still renders exactly as it was scored.
This is the design decisionDecisionStrategyA recorded decision with context, rationale, and consequencesView reference → that makes the type work. A MoSCoW bucket, a RICE number, a canvas slot, a funnelFunnelGrowthA conversion funnel tracking user progressionView reference → stage: each is a value that exists only inside a specific exercise, so it is a fact about the relationship between the exercise and the entity, not about the entity itself. UPG records it on the Framework Exerciseincludesany entitycross-domain edge, the same principle that models ownership as an edge rather than an owner field. The link is also polymorphic: an exercise can include any entity type, not only features, so you can score opportunitiesOpportunityDiscoveryA validated gap worth solvingView reference →, sort needsNeedUserA user need, pain, desire, or constraintView reference →, or run a canvas over business-model entities through one mechanism.framework_exercise_includes_node
A framework exercise lives in the WorkspaceWorkspaceA spatial thinking space for arranging entitiesView reference → domain, the space for exploration rather than settled product truth. It anchors to a workspace and reaches its subjects through workspaceFramework Exerciseincludesany entitycross-domain, the edge that carries each per-entity result. It moves through three phases, framework_exercise_includes_nodedraft, active, and archived, mirroring the life of the analysis it represents. The workspace is deliberately transient: when an exercise surfaces something worth keeping, such as a decision or a reprioritised roadmapRoadmapProduct SpecificationA strategic plan of features and milestonesView reference →, promote it into the durable graph rather than leaving it to age inside the workspace.
Type-specific fields on BaseNode
framework_idstringWhich framework this exercise runs: a framework id (e.g. 'moscow', 'rice-scoring', 'kano-model'). Resolves against the framework catalog.
inputs_snapshotobjectOptional frozen copy of the framework's input spec at apply time, so a historical exercise still renders correctly if the framework definition later evolves (inputs added, removed, or rescaled).
idstringrequiredUnique identifier (UUID)
typeNodeTyperequiredDiscriminator for the entity type
titlestringrequiredDisplay name
descriptionstringOptional detailed description
statusstringLifecycle status
tagsstring[]Freeform tags for filtering
3 phases, initial: draft