The core principle
Put product truth in structured fields, not in prose summaries. A summary is useful for humans skimming the tree, but tools cannot reliably parse prose. If a value shapes scope, acceptance criteria, a dependency, or a measurement rule, it belongs infields or refs.
- Premise
- Intent
- Standard
- Service
- Question Card
A premise explains why the product (or a feature within it) should exist. Write premises before intents. Every intent should ultimately serve at least one premise.Key fields for a premise:
evidence_confidence:low,medium, orhigh— how certain you are the premise is trueevidence_provenance: where the evidence came from (interview, analytics, research, doc)product_implication: what the product must or must not do if this premise holds
Refs: storing relationships correctly
Relationships between primitives go inrefs, not in summary prose. There are five approved ref roles. The four canonical tree edges for primitive relationships are:
| Edge | Meaning |
|---|---|
intent --serves--> premise | The intent addresses a root product premise |
intent --contains_premise--> premise | The intent owns a subordinate premise |
intent --requires--> service | The intent depends on a service |
intent --governed_by--> standard | The intent must obey a standard |
questions, is used on refs where a question card or flag explicitly references the primitives it is questioning or blocking. Store only the outgoing edge from the source record.
Do not store inverse edges. Views derive inverse labels automatically. If you write premise --serves--> intent, you are duplicating the edge and making the tree harder to validate.
Explicit refs include from, role, and to:
from as the current primitive id. Use compact refs only for outgoing edges:
What NOT to put in primitives
Artifacts: when to use refs instead of inline content
Store bulky samples, mockups, screenshots, snippets, and generated outputs as artifacts. Reference them by id or path in the primitive’sartifacts field rather than inlining their content.