Skip to content

Frontmatter reference

The exhaustive field contract of every document kind: which properties are allowed, which are required, and what values they accept.

Artifacts defines what each artifact type means and why it exists; this chapter defines the fields. Where the two appear to disagree, the JSON Schemas under schemas/ win: the tables below are maintained by hand against the schemas.

Every kind is a closed object: an unknown property is a PRODUCT002 error, not a warning and not silently ignored. There is no extension point. If you need to record something the schema does not allow, put it in the Markdown body.

Conforming implementations SHOULD expose this contract programmatically (for example as a schema query command), so it can be inspected without a repository.

ColumnMeaning
FieldThe YAML key. a.b is a nested key; a[] is an array element, and a[].b a key of an element object.
RequiredWhether the key must be present. For a nested key, whether it is required when its parent is present.
Typestring, const (one permitted value), enum, array, object.
Allowed valuesThe permitted values, or the regular expression a string must match.
NotesConstraints and guidance carried by the schema itself.

Four fields are common to every Markdown-authored kind: id (stable and immutable, see Identifiers), type, title and status. Artifact status is draft | active | deprecated | retired; the Product Change lifecycle is separate and is listed with its own kind below.

provenance is an optional object accepted by all ten artifact kinds. It records the evidence behind recovered knowledge: where a claim came from and how strongly the evidence supports it.

Set it on recovered (brownfield) artifacts. Leave it unset on greenfield artifacts authored from intent: there is no evidence to cite, and an empty claim of provenance is worse than none.

Provenance is deliberately not authorship metadata. Artifacts forbids author, owner, date, version and review fields because Git history already records who changed what and when. Provenance answers a different question: how far to trust this artifact’s content.

A draft artifact whose provenance.confidence is low produces a PRODUCT111 warning, so the queue of candidates needing human validation is derivable from validation output rather than tracked by hand.

FieldRequiredAllowed valuesMeaning
sourceyesfree textA file path, a URL, a ticket reference, or interview: <person>.
confidenceyeshigh, medium, lowhigh: read directly from a specification scenario or a test. medium: inferred from structured prose. low: inferred from indirect evidence such as a variable name.
recovered-fromnoobservation, inference, interview, documentationHow the knowledge was recovered. Optional, because real evidence is often more than one of these.
provenance:
source: src/orders/validation.ts (limit check), tests/orders/limits.spec.ts
confidence: high
recovered-from: observation

provenance itself is closed: an unrecognised sub-field such as recovered-by is a PRODUCT002 error, and omitting confidence while providing source is too.


The ten artifact types of the current product model.

ACT-. Who or what interacts with the product to achieve a meaningful outcome. See Artifacts → Actor.

FieldRequiredTypeAllowed valuesNotes
idyesstring^ACT-[A-Z0-9]+(-[A-Z0-9]+)*$
typeyesconstactor
titleyesstringMust not be empty.
statusyesenumdraft, active, deprecated, retiredLifecycle of a product artifact.
actor-kindyesenumhuman, external-system, scheduled-process, product
provenancenoobjectEvidence behind recovered knowledge. Set on recovered (brownfield) artifacts only.
provenance.sourceyesstringWhere the knowledge came from: a file path, a URL, a ticket reference, or ‘interview: ’. Must not be empty.
provenance.confidenceyesenumhigh, medium, lowhigh: read directly from a specification scenario or a test. medium: inferred from structured prose. low: inferred from indirect evidence such as a variable name.
provenance.recovered-fromnoenumobservation, inference, interview, documentationHow the knowledge was recovered from the evidence.

JRN-. An end-to-end outcome pursued by an actor. steps defines the main ordered path only; branches and exceptional paths belong in the body. See Artifacts → Journey.

FieldRequiredTypeAllowed valuesNotes
idyesstring^JRN-[A-Z0-9]+(-[A-Z0-9]+)*$
typeyesconstjourney
titleyesstringMust not be empty.
statusyesenumdraft, active, deprecated, retiredLifecycle of a product artifact.
primary-actoryesstring^ACT-[A-Z0-9]+(-[A-Z0-9]+)*$
stepsyesarray of objectThe main ordered journey. Branches and exceptional paths belong in the body. At least one entry.
steps[].use-caseyesstring^UC-[A-Z0-9]+(-[A-Z0-9]+)*$
provenancenoobjectEvidence behind recovered knowledge. Set on recovered (brownfield) artifacts only.
provenance.sourceyesstringWhere the knowledge came from: a file path, a URL, a ticket reference, or ‘interview: ’. Must not be empty.
provenance.confidenceyesenumhigh, medium, lowhigh: read directly from a specification scenario or a test. medium: inferred from structured prose. low: inferred from indirect evidence such as a variable name.
provenance.recovered-fromnoenumobservation, inference, interview, documentationHow the knowledge was recovered from the evidence.

UC-. A concrete interaction through which an actor obtains a product outcome. See Artifacts → Use Case.

FieldRequiredTypeAllowed valuesNotes
idyesstring^UC-[A-Z0-9]+(-[A-Z0-9]+)*$
typeyesconstuse-case
titleyesstringMust not be empty.
statusyesenumdraft, active, deprecated, retiredLifecycle of a product artifact.
primary-actoryesstring^ACT-[A-Z0-9]+(-[A-Z0-9]+)*$
supporting-actorsnoarray of string
supporting-actors[]yesstring^ACT-[A-Z0-9]+(-[A-Z0-9]+)*$
bounded-contextnostring^BC-[A-Z0-9]+(-[A-Z0-9]+)*$
governed-bynoarray of string
governed-by[]yesstring^BR-[A-Z0-9]+(-[A-Z0-9]+)*$
uses-termsnoarray of string
uses-terms[]yesstring^TERM-[A-Z0-9]+(-[A-Z0-9]+)*$
provenancenoobjectEvidence behind recovered knowledge. Set on recovered (brownfield) artifacts only.
provenance.sourceyesstringWhere the knowledge came from: a file path, a URL, a ticket reference, or ‘interview: ’. Must not be empty.
provenance.confidenceyesenumhigh, medium, lowhigh: read directly from a specification scenario or a test. medium: inferred from structured prose. low: inferred from indirect evidence such as a variable name.
provenance.recovered-fromnoenumobservation, inference, interview, documentationHow the knowledge was recovered from the evidence.

BR-. Durable product knowledge that governs behaviour. See Artifacts → Business Rule.

FieldRequiredTypeAllowed valuesNotes
idyesstring^BR-[A-Z0-9]+(-[A-Z0-9]+)*$
typeyesconstbusiness-rule
titleyesstringMust not be empty.
statusyesenumdraft, active, deprecated, retiredLifecycle of a product artifact.
applies-tonoarray of string
applies-to[]yesstring^(JRN|UC|BC)-[A-Z0-9]+(-[A-Z0-9]+)*$A journey, use case or bounded context.
uses-termsnoarray of string
uses-terms[]yesstring^TERM-[A-Z0-9]+(-[A-Z0-9]+)*$
provenancenoobjectEvidence behind recovered knowledge. Set on recovered (brownfield) artifacts only.
provenance.sourceyesstringWhere the knowledge came from: a file path, a URL, a ticket reference, or ‘interview: ’. Must not be empty.
provenance.confidenceyesenumhigh, medium, lowhigh: read directly from a specification scenario or a test. medium: inferred from structured prose. low: inferred from indirect evidence such as a variable name.
provenance.recovered-fromnoenumobservation, inference, interview, documentationHow the knowledge was recovered from the evidence.

TERM-. Shared meaning within a bounded context. Ownership is authored here, on the term, and never on the context. See Artifacts → Domain Term.

FieldRequiredTypeAllowed valuesNotes
idyesstring^TERM-[A-Z0-9]+(-[A-Z0-9]+)*$
typeyesconstdomain-term
titleyesstringMust not be empty.
statusyesenumdraft, active, deprecated, retiredLifecycle of a product artifact.
defined-inyesstring^BC-[A-Z0-9]+(-[A-Z0-9]+)*$Canonical direction of term ownership. Bounded contexts never author owns-terms.
synonymsnoarray of string
synonyms[]yesstringMust not be empty.
uses-termsnoarray of string
uses-terms[]yesstring^TERM-[A-Z0-9]+(-[A-Z0-9]+)*$
provenancenoobjectEvidence behind recovered knowledge. Set on recovered (brownfield) artifacts only.
provenance.sourceyesstringWhere the knowledge came from: a file path, a URL, a ticket reference, or ‘interview: ’. Must not be empty.
provenance.confidenceyesenumhigh, medium, lowhigh: read directly from a specification scenario or a test. medium: inferred from structured prose. low: inferred from indirect evidence such as a variable name.
provenance.recovered-fromnoenumobservation, inference, interview, documentationHow the knowledge was recovered from the evidence.

BC-. A product-language boundary. Note the absence of owns-terms: term ownership is derived from Domain Term.defined-in and MUST NOT be authored here (see Relationships). See Artifacts → Bounded Context.

FieldRequiredTypeAllowed valuesNotes
idyesstring^BC-[A-Z0-9]+(-[A-Z0-9]+)*$
typeyesconstbounded-context
titleyesstringMust not be empty.
statusyesenumdraft, active, deprecated, retiredLifecycle of a product artifact.
provenancenoobjectEvidence behind recovered knowledge. Set on recovered (brownfield) artifacts only.
provenance.sourceyesstringWhere the knowledge came from: a file path, a URL, a ticket reference, or ‘interview: ’. Must not be empty.
provenance.confidenceyesenumhigh, medium, lowhigh: read directly from a specification scenario or a test. medium: inferred from structured prose. low: inferred from indirect evidence such as a variable name.
provenance.recovered-fromnoenumobservation, inference, interview, documentationHow the knowledge was recovered from the evidence.

FR-. A derived product obligation stating what the product must do. derived-from is what keeps it traceable to the knowledge it came from. See Artifacts → Functional Requirement.

Each verification[] entry is exactly one closed form: an inline form with required scenario and optional id, or a reference form with required scenario-ref. The two forms cannot be combined in one entry.

FieldRequiredTypeAllowed valuesNotes
idyesstring^FR-[A-Z0-9]+(-[A-Z0-9]+)*$
typeyesconstfunctional-requirement
titleyesstringMust not be empty.
statusyesenumdraft, active, deprecated, retiredLifecycle of a product artifact.
derived-fromyesarray of stringTraceability to the use cases, business rules or constraints this requirement originates from. At least one entry.
derived-from[]yesstring^(UC|BR|CON)-[A-Z0-9]+(-[A-Z0-9]+)*$
verificationyesarray of objectAt least one entry.
verification[].scenarionostringRequired in the inline form. Must not be empty.
verification[].idnostring^[A-Z0-9]+(-[A-Z0-9]+)*$Optional stable id, unique within the artifact. When present, the inline scenario is citable via anchor (see Citation Contract).
verification[].scenario-refnostring^SB-[A-Z0-9]+(-[A-Z0-9]+)*$Required in the reference form. Canonical relationship to a Structured Behaviour.
uses-termsnoarray of string
uses-terms[]yesstring^TERM-[A-Z0-9]+(-[A-Z0-9]+)*$
provenancenoobjectEvidence behind recovered knowledge. Set on recovered (brownfield) artifacts only.
provenance.sourceyesstringWhere the knowledge came from: a file path, a URL, a ticket reference, or ‘interview: ’. Must not be empty.
provenance.confidenceyesenumhigh, medium, lowhigh: read directly from a specification scenario or a test. medium: inferred from structured prose. low: inferred from indirect evidence such as a variable name.
provenance.recovered-fromnoenumobservation, inference, interview, documentationHow the knowledge was recovered from the evidence.

QR-. A measurable quality obligation. See Artifacts → Quality Requirement.

Each verification[] entry uses the same exact inline-or-reference union as a Functional Requirement.

FieldRequiredTypeAllowed valuesNotes
idyesstring^QR-[A-Z0-9]+(-[A-Z0-9]+)*$
typeyesconstquality-requirement
titleyesstringMust not be empty.
statusyesenumdraft, active, deprecated, retiredLifecycle of a product artifact.
quality-attributeyesstringMust not be empty.
applies-toyesarray of stringAt least one entry.
applies-to[]yesstring^(JRN|UC|BC)-[A-Z0-9]+(-[A-Z0-9]+)*$A journey, use case or bounded context.
verificationyesarray of objectAt least one entry.
verification[].scenarionostringRequired in the inline form. Must not be empty.
verification[].idnostring^[A-Z0-9]+(-[A-Z0-9]+)*$Optional stable id, unique within the artifact. When present, the inline scenario is citable via anchor (see Citation Contract).
verification[].scenario-refnostring^SB-[A-Z0-9]+(-[A-Z0-9]+)*$Required in the reference form. Canonical relationship to a Structured Behaviour.
uses-termsnoarray of string
uses-terms[]yesstring^TERM-[A-Z0-9]+(-[A-Z0-9]+)*$
provenancenoobjectEvidence behind recovered knowledge. Set on recovered (brownfield) artifacts only.
provenance.sourceyesstringWhere the knowledge came from: a file path, a URL, a ticket reference, or ‘interview: ’. Must not be empty.
provenance.confidenceyesenumhigh, medium, lowhigh: read directly from a specification scenario or a test. medium: inferred from structured prose. low: inferred from indirect evidence such as a variable name.
provenance.recovered-fromnoenumobservation, inference, interview, documentationHow the knowledge was recovered from the evidence.

CON-. An externally imposed or deliberately fixed boundary. When applies-to is absent the constraint applies to the entire product. See Artifacts → Constraint.

FieldRequiredTypeAllowed valuesNotes
idyesstring^CON-[A-Z0-9]+(-[A-Z0-9]+)*$
typeyesconstconstraint
titleyesstringMust not be empty.
statusyesenumdraft, active, deprecated, retiredLifecycle of a product artifact.
applies-tonoarray of string
applies-to[]yesstring^(JRN|UC|BC)-[A-Z0-9]+(-[A-Z0-9]+)*$A journey, use case or bounded context.
uses-termsnoarray of string
uses-terms[]yesstring^TERM-[A-Z0-9]+(-[A-Z0-9]+)*$
provenancenoobjectEvidence behind recovered knowledge. Set on recovered (brownfield) artifacts only.
provenance.sourceyesstringWhere the knowledge came from: a file path, a URL, a ticket reference, or ‘interview: ’. Must not be empty.
provenance.confidenceyesenumhigh, medium, lowhigh: read directly from a specification scenario or a test. medium: inferred from structured prose. low: inferred from indirect evidence such as a variable name.
provenance.recovered-fromnoenumobservation, inference, interview, documentationHow the knowledge was recovered from the evidence.

SB-. One concrete, implementation-independent example of accepted observable product behaviour. See Artifacts → Structured Behaviour.

The schema rejects a given[], when or then[] string beginning with the case-sensitive ASCII word GIVEN, WHEN, THEN or AND. Renderers may add those words, but the canonical values remain format-neutral.

FieldRequiredTypeAllowed valuesNotes
idyesstring^SB-[A-Z0-9]+(-[A-Z0-9]+)*$
typeyesconststructured-behaviour
titleyesstringMust not be empty.
statusyesenumdraft, active, deprecated, retiredLifecycle of a product artifact.
illustratesyesarray of stringProduct semantics made concrete by this example. At least one entry.
illustrates[]yesstring^(UC|BR|CON)-[A-Z0-9]+(-[A-Z0-9]+)*$A use case, business rule or constraint.
givennoarray of stringObservable context or preconditions. Entries are ordered and conjunctive. At least one entry when present.
given[]yesstringnot ^(GIVEN|WHEN|THEN|AND)\bMust not be empty.
whenyesstringnot ^(GIVEN|WHEN|THEN|AND)\bThe single product-level stimulus, action or event. Must not be empty.
thenyesarray of stringObservable expected outcomes. Entries are ordered and conjunctive. At least one entry.
then[]yesstringnot ^(GIVEN|WHEN|THEN|AND)\bMust not be empty.
uses-termsnoarray of string
uses-terms[]yesstring^TERM-[A-Z0-9]+(-[A-Z0-9]+)*$
provenancenoobjectEvidence behind recovered knowledge. Set on recovered (brownfield) artifacts only.
provenance.sourceyesstringWhere the knowledge came from: a file path, a URL, a ticket reference, or ‘interview: ’. Must not be empty.
provenance.confidenceyesenumhigh, medium, lowhigh: read directly from a specification scenario or a test. medium: inferred from structured prose. low: inferred from indirect evidence such as a variable name.
provenance.recovered-fromnoenumobservation, inference, interview, documentationHow the knowledge was recovered from the evidence.

CHG-. The Markdown-authored definition of a proposed change to the baseline. Authored by hand and validated through the same schema path as the artifacts. Semantics, lifecycle and overlay rules are in Product Changes.

Note that provenance is not accepted here. Recovered knowledge carries provenance on the proposed artifacts, which are ordinary artifact documents, not on the change itself; this holds for CHG-INITIAL on a brownfield product like any other change.

FieldRequiredTypeAllowed valuesNotes
idyesstring^CHG-[A-Z0-9]+(-[A-Z0-9]+)*$
typeyesconstproduct-change
titleyesstringMust not be empty.
statusyesenumdraft, proposed, approved, applied, rejected, supersededLifecycle of a product change.
base-revisionyesstring^[0-9a-f]{7,40}$Baseline Git revision, or exactly 0000000 only for CHG-INITIAL.
operationsyesobject
operations.addyesarray of string
operations.add[]yesstring^(ACT|JRN|UC|BR|TERM|BC|FR|QR|CON|SB)-[A-Z0-9]+(-[A-Z0-9]+)*$Any artifact of the current product model.
operations.modifyyesarray of string
operations.modify[]yesstring^(ACT|JRN|UC|BR|TERM|BC|FR|QR|CON|SB)-[A-Z0-9]+(-[A-Z0-9]+)*$Any artifact of the current product model.
operations.removeyesarray of string
operations.remove[]yesstring^(ACT|JRN|UC|BR|TERM|BC|FR|QR|CON|SB)-[A-Z0-9]+(-[A-Z0-9]+)*$Any artifact of the current product model.

base-revision normally names the Git commit containing the baseline against which the change was created. The exact seven-character string 0000000 is the reserved no-baseline sentinel only when id is CHG-INITIAL; it records that no commit names the empty Product Definition baseline. An implementation MUST NOT resolve that pair against Git. Other all-zero strings and 0000000 on any other Product Change are ordinary revisions. CHG-INITIAL MAY instead name a real commit at which the Product Definition is empty (RFC 0066).