Intent Snapshot Schema
Purpose
The intent snapshot is the central record unit in M45.
It exists to:
- Capture interpreted system intent explicitly
- Preserve intent across abstraction levels
- Bind meaning to a stable semantic structure
- Preserve historical interpretation and rationale
- Enable traceability, audit, and safety review
Intent snapshots do not overwrite one another.
They accumulate.
Normative principles
- An intent snapshot is immutable
- Each snapshot is evaluated under exactly one Project Intent Profile
- Each snapshot references the artifacts that informed interpretation
- Changes in meaning result in new snapshots
- Decisions explain transitions between snapshots
- Intent is recorded independently of implementation, workflow state, or certification outcomes
What system intent means in M45
System intent is the structured explanation of:
- Why a system exists
- What goals it must achieve
- What hazards must be controlled
- What constraints, assumptions, and limitations shape the design space
- How that intent is realized across levels of abstraction
M45’s notion of system intent:
- Intent is expressed across multiple abstraction levels, from system purpose to physical realization
- Higher-level intent explains why lower-level decisions exist
- Safety intent is expressed as constraints derived from hazards
- Assumptions and limitations are first-class intent elements
- Intent must remain reviewable as systems, environments, and operations evolve
An intent snapshot captures this intent as interpreted at a specific moment, not as an objective or final truth.
What an intent snapshot contains
An intent snapshot includes:
- Metadata and identity
- Project context and semantic profile
- Project intent axis packages (via the referenced Project Intent Profile)
- Source artifact references
- Intent baseline layer — foundational intent elements (losses, hazards, top-level goals) that exist independently of requirement evidence
- Structured intent elements, including pre-requirement artifacts (hypotheses, pragmatic assumptions, risk tradeoffs, operational constraints)
- Requirement projections — normalized extractions from raw requirements, distinct from raw requirement artifacts
- Belief rationale for intent elements (why something was believed to work)
- Evidence with type, direction, and priority (supporting or counter-evidence, field validation vs formal verification)
- Hazard and safety intent with explicit loss-to-hazard-to-constraint chains
- An intent graph capturing relationships
- Decision record references
- Supersession relationships
It does not include:
- Inference algorithms
- Workflow or review state
- Certification conclusions
- Execution or allocation details
Alignment with intent specifications
An intent snapshot is compatible with intent specifications in the following ways:
Vertical intent levels
Intent elements may correspond to different intent levels, such as:
- System purpose
- System design principles
- Blackbox behavior
- Design representation
- Physical representation
These levels form a means–ends hierarchy.
Higher levels explain why.
Lower levels explain how.
Horizontal concerns
At each intent level, intent elements may address different concerns:
- Environment constraints and assumptions
- Operator interactions and responsibilities
- System behavior and structure
- Verification and validation intent
Explicit relationships
Relationships between intent elements are made explicit through:
- The intent graph
- Decision records
- Snapshot supersession
M45 does not impose a fixed document structure.
Intent structure is represented semantically.
Project intent axis packages
Intent in M45 is structured through intent axes.
Intent axes define the semantic dimensions along which system intent is expressed, reviewed, and evolved.
Axes are grouped into Project Intent Axis Packages.
An axis package represents a coherent semantic lens on system intent, such as:
- Functional and behavioral intent
- Safety and hazard-related intent
- Operational and environmental intent
- Verification and assurance intent
Axis packages are not universal.
They are selected and configured per project through the Project Intent Profile.
Important: Axes are views, not ontology. Axis tagging (axisId) on intent elements is optional metadata used for organization and filtering. Graph relationships (like refines, mitigates, verifies) must not be derived from axis tags. Relationships are defined explicitly through the intent graph edges, independent of axis classification.
Why axis packages exist
Complex systems do not have a single notion of intent.
Different stakeholders reason about the same system using different abstractions and concerns.
Axis packages allow M45 to:
- Represent multiple views of system intent without duplication
- Keep intent snapshots stable as semantic needs evolve
- Support safety-critical reasoning alongside functional reasoning
- Avoid collapsing intent into a single flattened taxonomy
This mirrors intent specifications, where intent is distributed across abstraction levels and concerns, but makes that structure explicit and configurable.
See Project Intent Axis Packages for detailed information.
Intent Snapshot schema
Formal JSON representation
{
"intentSnapshotId": "string",
"projectId": "string",
"profileId": "string",
"profileVersion": "string",
"status": "active | superseded",
"sourceArtifacts": [
{
"artifactId": "string",
"artifactType": "requirement | requirement_projection | designDocument | safetyAnalysis | other",
"reference": "string"
}
],
"intentBaseline": {
"losses": [
{
"intentId": "string",
"label": "string",
"description": "string | null",
"status": "proposed | accepted | modified | rejected"
}
],
"hazards": [
{
"intentId": "string",
"label": "string",
"description": "string | null",
"status": "proposed | accepted | modified | rejected"
}
],
"topLevelGoals": [
{
"intentId": "string",
"label": "string",
"description": "string | null",
"status": "proposed | accepted | modified | rejected"
}
]
},
"intentElements": [
{
"intentId": "string",
"axisId": "string | null",
"intentLevel": "system_purpose | design_principle | blackbox_behavior | design_representation | physical_representation",
"concern": "environment | operator | system | verification",
"intentKind": "goal | constraint | assumption | limitation | hazard | behavior | design_principle | vnv_intent | hypothesis | pragmatic_assumption | risk_tradeoff | operational_constraint",
"label": "string",
"description": "string | null",
"beliefRationale": "string | null",
"status": "proposed | accepted | modified | rejected",
"supportingArtifacts": [
{
"artifactId": "string",
"reference": "string",
"evidenceType": "formal_verification | field_validation | operational_counter_evidence | analysis | test | simulation | review | other",
"evidenceDirection": "supporting | counter",
"evidencePriority": "low | medium | high"
}
],
"constraintCriticality": "safety | mission | regulatory | other | null",
"preservation": "required | best_effort | null",
"encodingVerdict": "encoded | partially_encoded | not_encoded | null",
"encodingRationale": "string | null",
"verificationMethod": "test | analysis | inspection | simulation | formal | null",
"verificationLevel": "unit | integration | subsystem | system | flight_test | null",
"acceptanceCriteriaRef": "string | null",
"targetEvidence": ["string"]
}
],
"requirementProjections": [
{
"projectionId": "string",
"label": "string",
"description": "string | null",
"sourceRequirementId": "string | null",
"sourceArtifactId": "string",
"sourceReference": "string"
}
],
"intentGraph": {
"nodes": [
{
"intentId": "string"
}
],
"edges": [
{
"edgeId": "string",
"type": "refines | motivates | satisfies | constrains | assumes | mitigates | verifies | implements | encoded_by | specified_by | evidenced_by | leads_to | supported_by | encoded_from | enforces",
"fromIntentId": "string",
"toIntentId": "string",
"rationale": "string | null"
}
]
},
"decisionRecords": [
{
"decisionRecordId": "string"
}
],
"createdAt": "ISO-8601 timestamp",
"createdBy": {
"name": "string",
"role": "string",
"organization": "string"
},
"supersedesSnapshotId": "string | null"
}
Field definitions
intentSnapshotId
Type: string
Stable identifier for the snapshot.
projectId
Type: string
Identifier for the project to which this snapshot belongs.
profileId
Type: string
Identifier of the Project Intent Profile under which this snapshot was evaluated.
profileVersion
Type: string
Version of the Project Intent Profile used for this snapshot.
status
Type: enum
Values:
activesuperseded
An active snapshot is the current interpretation. A superseded snapshot has been replaced by a newer one.
sourceArtifacts
Type: array of objects
References the artifacts that informed the interpretation captured in this snapshot.
Each artifact reference includes:
artifactId: Stable identifier for the artifactartifactType: Type of artifact. Must be one of:requirement— Raw requirement artifact (e.g., from a requirements database, ReqIF exchange file, or other requirement management source)requirement_projection— Normalized obligation extracted from a raw requirement (see Requirement projections below)designDocument— Design documentsafetyAnalysis— Safety analysis documentother— Other artifact types
reference: Location or identifier within the artifact
Semantic distinction: requirement represents the raw requirement text as it appears in source artifacts, independent of storage or exchange format. requirement_projection represents the normalized, interpreted obligation extracted from that raw requirement. This separation enforces the structural distinction between intent and requirements, avoiding the failure mode where an intent statement is "supported" by a vague SHALL when it is actually only weakly implied.
intentBaseline
Type: object
The Intent Baseline layer captures foundational intent elements that exist independently of requirement evidence. These elements form the minimal semantic foundation for system intent reasoning.
The intent baseline includes:
losses— Unacceptable outcomes that the system must preventhazards— System-level hazardous states (not component failures) that could lead to lossestopLevelGoals— Mission/operational goals that motivate the system
Key property: Elements in the intent baseline can exist with zero requirement evidence and are allowed to be hypotheses. They represent the foundational reasoning layer that precedes formal requirement specification.
Baseline elements are represented as normal intent elements (with intentId, label, description, status) but are explicitly separated to emphasize their foundational role. They participate in the intent graph like other intent elements.
See Intent baseline below for detailed field definitions.
intentElements
Type: array of objects
The core semantic claims about the system. See Intent elements below for detailed field definitions.
requirementProjections
Type: array of objects
Normalized extractions from raw requirements. A requirement projection represents the interpreted obligation extracted from a raw requirement artifact, distinct from the raw requirement text itself.
Each requirement projection includes:
projectionId: Stable identifier for the requirement projectionlabel: Human-readable label for the projectiondescription: Detailed description of the normalized obligationsourceRequirementId: Identifier of the source requirement (if available)sourceArtifactId: Identifier of the source artifact containing the raw requirementsourceReference: Location or identifier within the source artifact
Semantic distinction: Requirement projections are separate from raw requirement artifacts (reqif_requirement). This separation enforces that:
- Intent elements are supported by requirement projections (normalized obligations)
- Requirement projections are encoded from raw requirements
- This avoids the failure mode where an intent statement is "supported" by a vague SHALL when it is actually only weakly implied
See Requirement projections below for detailed field definitions.
intentGraph
Type: object
Captures explicit relationships between intent elements, requirement projections, and artifacts. See The intent graph below.
decisionRecords
Type: array of objects
References to decision records that explain changes in interpreted intent.
Each reference includes:
decisionRecordId: Identifier for the decision record
createdAt
Type: ISO-8601 timestamp
Timestamp when the snapshot was created.
createdBy
Type: object
Identifies the human author of the snapshot.
Fields:
name: Author namerole: Author roleorganization: Author organization
supersedesSnapshotId
Type: string | null
References the immediately prior snapshot, if any.
This establishes the historical chain of interpreted intent.
Intent baseline
The intent baseline captures foundational intent elements that exist independently of requirement evidence. These elements form the minimal semantic foundation for system intent reasoning.
losses
Type: array of objects
Unacceptable outcomes that the system must prevent. Losses represent the fundamental "why" — what bad things must not happen.
Each loss includes:
intentId: Stable identifier for the loss (references an intent element in the intent graph)label: Human-readable label for the lossdescription: Detailed description of the unacceptable outcomestatus: Review status (proposed|accepted|modified|rejected)
Key property: Losses can exist with zero requirement evidence and are allowed to be hypotheses. They represent foundational reasoning that precedes formal requirement specification.
Losses participate in the intent graph. A loss leads_to one or more hazards.
hazards
Type: array of objects
System-level hazardous states (not component failures) that could lead to losses. Hazards represent conditions that, if uncontrolled, could result in unacceptable loss.
Each hazard includes:
intentId: Stable identifier for the hazard (references an intent element in the intent graph)label: Human-readable label for the hazarddescription: Detailed description of the hazardous statestatus: Review status (proposed|accepted|modified|rejected)
Key property: Hazards can exist with zero requirement evidence and are allowed to be hypotheses. They represent foundational reasoning that precedes formal requirement specification.
Hazards participate in the intent graph. A hazard is leads_to by one or more losses, and mitigates one or more constraints.
topLevelGoals
Type: array of objects
Mission/operational goals that motivate the system. Top-level goals represent the fundamental "why" — what good things the system must achieve.
Each top-level goal includes:
intentId: Stable identifier for the goal (references an intent element in the intent graph)label: Human-readable label for the goaldescription: Detailed description of the mission/operational goalstatus: Review status (proposed|accepted|modified|rejected)
Key property: Top-level goals can exist with zero requirement evidence and are allowed to be hypotheses. They represent foundational reasoning that precedes formal requirement specification.
Top-level goals participate in the intent graph and may motivate lower-level goals, constraints, and behaviors.
Requirement projections
Requirement projections represent normalized extractions from raw requirements. They capture the interpreted obligation extracted from a raw requirement artifact, distinct from the raw requirement text itself.
projectionId
Type: string
Stable identifier for the requirement projection within the snapshot.
label
Type: string
Human-readable label for the requirement projection.
description
Type: string | null
Detailed description of the normalized obligation extracted from the raw requirement.
sourceRequirementId
Type: string | null
Identifier of the source requirement (if available). This may reference a requirement ID from a requirements database, ReqIF exchange file, or other requirement management system.
sourceArtifactId
Type: string
Identifier of the source artifact containing the raw requirement. This must reference an artifact in sourceArtifacts with artifactType: "requirement".
sourceReference
Type: string
Location or identifier within the source artifact where the raw requirement can be found.
Semantic distinction: Requirement projections are separate from raw requirement artifacts (requirement). This separation enforces that:
- Intent elements are
supported_byrequirement projections (normalized obligations) - Requirement projections are
encoded_fromraw requirements - This avoids the failure mode where an intent statement is "supported" by a vague SHALL when it is actually only weakly implied
Requirement projections participate in the intent graph:
- An intent element may be
supported_bya requirement projection - A requirement projection is
encoded_froma raw requirement artifact - A constraint may be
enforcedby requirement projections (or requirement projectionsenforceconstraints)
Intent elements
Each intent element represents a semantic claim about the system.
Examples:
- A system goal
- A safety constraint
- A hazard that must be controlled
- A blackbox behavioral expectation
- A design principle guiding lower-level choices
- A verification intent
- A hypothesis about system behavior
- A pragmatic assumption made under operational constraints
- A risk tradeoff decision
- A constraint discovered during operations
Intent elements are not requirements.
They express meaning, not obligation.
Requirements remain as artifacts. Intent elements express the interpreted meaning of those requirements, not the requirements themselves. Intent elements reference requirement artifacts via supportingArtifacts and graph edges like encoded_by or specified_by for semantic traceability.
Intent snapshots record why something was believed to work, not just that it met a specification. This includes pre-requirement artifacts (hypotheses, pragmatic assumptions, risk tradeoffs, operational constraints) that capture the reasoning and operational basis for design decisions.
This distinction aligns with Leveson's framework, which distinguishes between intent constraints, requirements, and design decisions across abstraction levels. The semantics must be crisp to support mechanical verification of constraint preservation and requirement coverage.
intentId
Type: string
Stable identifier for the intent element within the snapshot.
axisId
Type: string | null
Optional metadata — Axis under which the intent element is classified.
An axis defines a specific semantic dimension of system intent, such as:
- Function
- Mode
- Hazard
- Safety constraint
- Assumption
- Verification objective
Axes are defined in axis definitions and grouped into axis packages.
Important: axisId is optional metadata used for organization and filtering. It is a view, not part of the ontology. Graph relationships (like refines, mitigates, verifies) must not be derived from axis tags. Relationships are defined explicitly through the intent graph edges, independent of axis classification.
If provided, the axisId must belong to an axis from a package enabled by the Project Intent Profile referenced by the snapshot. This constraint lives in validation logic and documentation, not in the snapshot payload, keeping snapshots compact and timeless.
May be null if the intent element is not classified under any axis.
See:
intentLevel
Type: enum
The abstraction level at which the intent is expressed.
Values:
system_purposedesign_principleblackbox_behaviordesign_representationphysical_representation
These levels form a means–ends hierarchy. Higher levels explain why. Lower levels explain how.
concern
Type: enum
The horizontal concern addressed by this intent element.
Values:
environmentoperatorsystemverification
intentKind
Type: enum
The semantic nature of the intent element.
Values:
goal
A high-level objective or purpose the system must achieve.
Example: Provide accurate navigation guidance to the flight crew.
constraint
A restriction or limitation that bounds the design space or system behavior. Constraints may be preservation invariants that must be maintained through refinement and allocation.
Example: Navigation solution accuracy must not degrade below 10 meters horizontal position error.
assumption
A foundational belief about the system or its environment that must hold for the intent itself to be valid.
Example: The aircraft will only operate within the environmental envelope defined in CS-25.
limitation
A known restriction or boundary of the system's capabilities or scope.
Example: The navigation system does not provide guidance below 50 feet above ground level.
hazard
A system-level condition that could lead to unacceptable loss.
Example: Loss of navigation capability during approach phase.
behavior
A description of how the system behaves or responds in specific situations.
Example: When GPS signal is lost, the system transitions to inertial navigation mode within 100 milliseconds.
design_principle
A guiding principle that informs design decisions and lower-level choices.
Example: Fail-safe design: system defaults to most conservative mode when uncertainty exceeds threshold.
vnv_intent
Verification and validation intent, describing how an intent element should be verified or validated. VNV intent elements should include structured verification metadata: verificationMethod, verificationLevel, acceptanceCriteriaRef, and optionally targetEvidence.
Example: Verify navigation accuracy requirement through flight test data analysis comparing computed position to surveyed ground truth.
hypothesis
A testable belief about how the system should work or why a design choice is appropriate.
Example: Using dual-redundant sensors will reduce false alarm rate below 0.1% while maintaining detection sensitivity.
pragmatic_assumption
An assumption made under operational constraints, time pressure, or practical considerations, distinct from foundational assumptions.
Example: Assume worst-case crosswind conditions are out of scope for the initial flight test campaign so envelope expansion can proceed incrementally.
risk_tradeoff
A documented tradeoff between risks, capturing what risks were accepted in favor of others.
Example: Accept increased computational latency to prioritize safety-critical path execution over non-critical features.
operational_constraint
A constraint identified during operations, integration, testing, or deployment rather than upfront design.
Example: Integration testing revealed that sensor fusion algorithm must complete within 50ms to avoid buffer overflow in downstream systems.
Safety-critical intent elements typically include hazard and constraint kinds.
Pre-requirement artifacts (hypothesis, pragmatic_assumption, risk_tradeoff, operational_constraint) capture intent that exists before formal requirements are established. They record why something was believed to work, not just that it met a specification.
label
Type: string
Human-readable label for the intent element.
description
Type: string | null
Detailed description of the intent element. May be null if the label is self-explanatory.
beliefRationale
Type: string | null
Records why this intent element was believed to work or be appropriate, not just what it specifies.
This field captures the reasoning, justification, or operational basis for the intent element. It is particularly important for pre-requirement artifacts (hypotheses, pragmatic assumptions, risk tradeoffs) and operational constraints.
Examples:
- Why a hypothesis was formed
- What operational experience informed a pragmatic assumption
- What operational conditions led to discovering a constraint
- Why a risk tradeoff was acceptable
May be null if the rationale is captured elsewhere (e.g., in decision records or the description field).
status
Type: enum
Review status of the intent element.
Values:
proposedacceptedmodifiedrejected
supportingArtifacts
Type: array of objects
Artifacts that provide evidence for this specific intent element.
Each reference includes:
artifactId: Identifier for the artifactreference: Location or identifier within the artifactevidenceType: Type of evidence provided (see Evidence types below)evidenceDirection: Whether the evidence supports or contradicts the intent element (supporting|counter)evidencePriority: Priority/weight of this evidence (low|medium|high)
Evidence priority is used to privilege field validation over formal verification when both are available. Field validation evidence should typically be assigned higher priority than formal verification evidence for the same intent element.
constraintCriticality
Type: enum | null
Applies to: Intent elements with intentKind: "constraint"
The criticality category of a constraint that must be preserved through refinement and allocation.
Values:
safety— Safety-critical constraint derived from hazardsmission— Mission-critical constraintregulatory— Regulatory or certification constraintother— Other criticality categorynull— Not applicable (for non-constraint intent elements or constraints without explicit criticality)
This field enables mechanical checks: every constraint with preservation: "required" and constraintCriticality: "safety" must trace into lower-level intents and into requirements and verification intent.
preservation
Type: enum | null
Applies to: Intent elements with intentKind: "constraint"
Whether this constraint must be preserved as a preservation invariant through refinement and allocation.
Values:
required— The constraint must be preserved through all refinement and allocation stepsbest_effort— The constraint should be preserved where feasible, but may be relaxed under documented rationalenull— Not applicable (for non-constraint intent elements or constraints without explicit preservation requirement)
Constraints with preservation: "required" are preservation invariants that must trace into lower-level intents and into requirements and verification intent. This enables mechanical verification of constraint preservation across abstraction levels.
Promotion to constraint: For constraints with constraintCriticality: "safety", the intent graph must include an explicit chain: loss → hazard (via leads_to) → constraint (via mitigates). This ensures Leveson-aligned safety reasoning where constraints are derived from hazards, which are derived from losses.
verificationMethod
Type: enum | null
Applies to: Intent elements with intentKind: "vnv_intent"
The method used to verify or validate the intent element.
Values:
test— Testing (unit, integration, system, flight test)analysis— Engineering analysis, trade studiesinspection— Code review, design review, inspectionsimulation— Simulation-based verificationformal— Formal methods (proofs, model checking, static analysis)null— Not applicable (for non-VNV intent elements) or method not yet specified
verificationLevel
Type: enum | null
Applies to: Intent elements with intentKind: "vnv_intent"
The level at which verification or validation should occur, following the principle of verifying at the lowest feasible level.
Values:
unit— Unit-level verificationintegration— Integration-level verificationsubsystem— Subsystem-level verificationsystem— System-level verificationflight_test— Flight test or operational validationnull— Not applicable (for non-VNV intent elements) or level not yet specified
acceptanceCriteriaRef
Type: string | null
Applies to: Intent elements with intentKind: "vnv_intent"
Reference to an artifact (e.g., a requirement, test specification, or acceptance criteria document) that defines the acceptance criteria for this verification intent.
May be null if acceptance criteria are captured in the description field or elsewhere.
targetEvidence
Type: array of strings
Applies to: Intent elements with intentKind: "vnv_intent"
Optional array specifying what artifact types should exist as evidence for this verification intent.
Examples:
["test_report", "flight_test_data"]["formal_proof", "model_checking_report"]["analysis_report", "simulation_results"]
May be empty if not specified.
encodingVerdict
Type: enum | null
Applies to: Intent elements with intentKind: "constraint" and preservation: "required"
Explicit sufficiency verdict indicating whether the constraint is adequately encoded in the requirement set.
Values:
encoded— The constraint is fully encoded by one or more requirement projectionspartially_encoded— The constraint is partially encoded, with identified coverage gapsnot_encoded— The constraint is not encoded in the requirement setnull— Verdict not yet determined or not applicable
This field bridges Leveson semantics (constraints derived from hazards) and Kefalas rigor (requirement coverage verification). It states whether the requirement set actually encodes the constraint.
When encodingVerdict is partially_encoded or not_encoded, encodingRationale must document the coverage gaps and link to the enforcing projections (if any) and missing requirements.
encodingRationale
Type: string | null
Applies to: Intent elements with intentKind: "constraint" and preservation: "required"
Rationale explaining the encodingVerdict, including:
- Links to enforcing requirement projections (if
encodedorpartially_encoded) - Identification of coverage gaps (if
partially_encodedornot_encoded) - Justification for the verdict
May be null if the rationale is captured elsewhere or if encodingVerdict is null.
Evidence types
Type: enum
The type of evidence provided by the artifact.
Values:
formal_verification— Formal proofs, model checking, static analysisfield_validation— Operational data, flight test results, field observationsoperational_counter_evidence— Field data or observations that contradict the intent elementanalysis— Engineering analysis, trade studies, risk assessmentstest— Test results (unit, integration, system)simulation— Simulation resultsreview— Review findings, inspection resultsother— Other types of evidence
Evidence direction:
supporting— The evidence supports the intent elementcounter— The evidence contradicts or challenges the intent element
Counter-evidence is critical for safety and certification workflows. Operational counter-evidence should be ingested and tracked, not ignored, even when formal verification exists.
Evidence priority:
low— Lower priority evidence (e.g., formal verification when field validation exists)medium— Standard priority evidencehigh— High priority evidence (e.g., field validation, operational counter-evidence)
When multiple evidence types exist for the same intent element, field validation should be privileged over formal verification. Operational counter-evidence should typically be assigned high priority.
Hazards and safety intent
Hazards are first-class intent elements, captured both in the intent baseline and as regular intent elements.
A hazard intent element represents:
- A system-level condition that could lead to unacceptable loss
- Independent of implementation or mitigation
- System-level hazardous states, not component failures
Safety intent is expressed through:
- Losses — Unacceptable outcomes that must be prevented
- Hazards — System-level hazardous states that could lead to losses
- Safety constraints — Constraints derived from hazards to mitigate them
- Explicit chains — Loss → Hazard → Constraint relationships in the intent graph
Leveson-aligned safety reasoning: For constraints with constraintCriticality: "safety", the intent graph must include an explicit chain:
loss→hazard(vialeads_toedge)constraint→hazard(viamitigatesedge)
This ensures auditable safety reasoning where constraints are derived from hazards, which are derived from losses.
Safety is controlled through constraints, not components.
Safety and certification workflows should ingest operational counter-evidence, not ignore it. When operational data contradicts formal verification, the counter-evidence should be recorded with high priority in the supportingArtifacts array, and the intent element's beliefRationale should explain how the contradiction is being addressed.
The intent graph
The intent graph captures explicit relationships between intent elements, requirement projections, and artifacts.
It represents:
- Means–ends reasoning
- Safety rationale (loss → hazard → constraint chains)
- Design justification
- Verification intent
- Intent-to-requirement traceability (intent elements ↔ requirement projections ↔ raw requirements)
The intent graph is descriptive, not executable.
nodes
Type: array of objects
References to intent elements that participate in the graph.
Each node includes:
intentId: Identifier of the intent element
Note: Requirement projections are not listed in the nodes array. They are referenced directly in edges via their projectionId when using edge types like supported_by, encoded_from, or enforces.
edges
Type: array of objects
Explicit relationships between intent elements, requirement projections, and artifacts.
Each edge includes:
edgeId: Stable identifier for the edgetype: Relationship type (see Edge types below)fromIntentId: Source identifier (may be anintentIdorprojectionId, depending on edge type)toIntentId: Target identifier (may be anintentIdorprojectionId, depending on edge type)rationale: Optional explanation of the relationship
Edge identifier semantics:
- For edges between intent elements: use
intentIdvalues - For edges involving requirement projections: use
projectionIdvalues - For edges involving artifacts: use
artifactIdvalues
The edge type determines which identifiers are valid. For example:
supported_by:fromIntentId= intent element,toIntentId= requirement projectionencoded_from:fromIntentId= requirement projection,toIntentId= raw requirement artifactleads_to:fromIntentId= loss,toIntentId= hazardmitigates:fromIntentId= constraint,toIntentId= hazard
Edge types
Common edge types include:
motivates— Higher-level intent explains why lower-level intent existssatisfies— Lower-level intent fulfills higher-level intentconstrains— A constraint restricts design or behaviorassumes— A decision relies on an assumptionmitigates— A constraint mitigates a hazard (constraint → hazard). Required for safety-critical constraints.verifies— Verification intent validates another intent elementimplements— Physical realization implements design intentleads_to— A loss leads to a hazard (loss → hazard). Required for Leveson-aligned safety reasoning.supported_by— An intent element is supported by a requirement projection (intent element → requirement projection). This provides semantic traceability from intent to normalized requirement obligations.encoded_from— A requirement projection is encoded from a raw requirement artifact (requirement projection → raw requirement artifact). This separates normalized obligations from raw requirement text.enforces— A requirement projection enforces a constraint (requirement projection → constraint). Alternative direction: constraint → requirement projection viaencoded_by.encoded_by— An intent element is encoded by a requirement artifact (intent element → requirement artifact reference). This provides semantic traceability from intent to normative requirements. Note: For requirement projections, usesupported_byinstead.specified_by— An intent element is specified by a requirement artifact (intent element → requirement artifact reference). Alternative toencoded_bywith equivalent semantics.evidenced_by— An intent element is evidenced by an evidence artifact (intent element → evidence artifact reference). This provides semantic traceability separate fromsupportingArtifacts, enabling explicit graph-based evidence relationships.
Safety constraint chain requirements:
For constraints with constraintCriticality: "safety", the intent graph must include:
loss→hazard(vialeads_to)constraint→hazard(viamitigates)
This ensures Leveson-aligned safety reasoning where constraints are derived from hazards, which are derived from losses.
Requirement projection relationships:
The separation between raw requirements and requirement projections is enforced through:
intent_element→requirement_projection(viasupported_by)requirement_projection→raw_requirement_artifact(viaencoded_from)requirement_projection→constraint(viaenforces) orconstraint→requirement_projection(viaencoded_by)
This avoids the failure mode where an intent statement is "supported" by a vague SHALL when it is actually only weakly implied.
The supported_by, encoded_from, and enforces edge types form the backbone for "map requirements to intent axes" and "preserve constraints across refinement" workflows. They enable mechanical checks that every preservation-required constraint traces into requirement projections and verification intent.
Edges may include rationale text.
Pre-requirement artifacts and relationships:
Pre-requirement artifacts (hypotheses, pragmatic assumptions, risk tradeoffs, operational constraints) often motivate or inform formal requirements:
- A
hypothesismaymotivateaconstraintor other intent element - A
pragmatic_assumptionmay be connected viaassumesedges to intent elements that depend on it - A
risk_tradeoffmaymotivatedesign decisions or constraints - An
operational_constraintmayconstrainsexisting intent elements ormotivatesnew ones
These relationships capture the evolution from pre-requirement reasoning to formal specification, preserving the "why" behind requirements.
Intent-to-requirement traceability:
Intent elements reference requirement artifacts through:
supportingArtifactsarray (for evidence and context)supported_bygraph edges (for semantic traceability from intent to requirement projections)encoded_byorspecified_bygraph edges (for direct traceability to raw requirement artifacts, less preferred)
Requirements remain as artifacts. Intent elements express the interpreted meaning of those requirements, not the requirements themselves. The supported_by edges provide explicit semantic trace from intent to requirement projections (normalized obligations), enabling mechanical checks for constraint preservation and requirement coverage.
Decision records
Decision records explain changes in interpreted intent.
They capture:
- Why an intent element was accepted, modified, or rejected
- Why one interpretation was chosen over alternatives
- Why a new snapshot superseded a prior one
Decision records are the authority boundary.
See the decisionRecords field in Field definitions above.
Relationship to other records
- Artifacts provide evidence
- Intent snapshots capture interpreted meaning
- Decision records justify interpretation and change
- Project intent profiles define semantic structure
Together, these form the M45 context layer.
Design intent
The intent snapshot exists to make meaning:
- Explicit rather than implicit
- Structured rather than scattered
- Versioned rather than overwritten
- Reviewable rather than assumed
This enables safety-critical engineering without automating authority.
Version History
Version 0.6 (Current)
- Added
intentBaselinesection withlosses,hazards, andtopLevelGoalsthat can exist with zero requirement evidence and are allowed to be hypotheses. This makes "intent above requirements" explicit as a first-class layer. - Separated raw requirement evidence from requirement projection evidence:
- Added
requirementProjectionsarray for normalized obligations extracted from raw requirements - Distinguished
artifactType: "requirement"(raw) fromartifactType: "requirement_projection"(normalized) - Added edge types:
supported_by(intent → requirement projection),encoded_from(requirement projection → raw requirement),enforces(requirement projection → constraint)
- Added
- Made "promotion to constraint" require explicit loss/hazard chain:
- Added
leads_toedge type (loss → hazard) - Required
mitigatesedge (constraint → hazard) for safety-critical constraints - Updated safety intent section to document the loss → hazard → constraint chain requirement
- Added
- Made
axisIdoptional metadata (views, not ontology):- Changed
axisIdtype fromstringtostring | null - Clarified that axis tagging is optional metadata for organization/filtering
- Emphasized that graph relationships must not be derived from axis tags
- Changed
- Added explicit sufficiency verdict per promoted constraint:
- Added
encodingVerdictfield (encoded|partially_encoded|not_encoded|null) - Added
encodingRationalefield for documenting coverage gaps and links to enforcing projections - This bridges Leveson semantics and Kefalas rigor by stating whether requirements actually encode constraints
- Added
Version 0.5
- Removed
intentKind: "requirement"from intent snapshots. Requirements remain as artifacts; intent elements reference them viasupportingArtifactsand graph edges likeencoded_byorspecified_by. This aligns with Leveson's distinction between intent constraints, requirements, and design decisions. - Added
constraintCriticalityfield to constraint intent elements (values:safety,mission,regulatory,other, ornull) - Added
preservationfield to constraint intent elements (values:required,best_effort, ornull) to support preservation invariants that must be maintained through refinement and allocation - Extended
vnv_intentelements with structured verification fields:verificationMethod,verificationLevel,acceptanceCriteriaRef, andtargetEvidenceto support mechanical "three balls" alignment checks - Added
encoded_by,specified_by, andevidenced_byedge types to intent graph for explicit semantic traceability from intent to requirements and evidence
Version 0.4
- Added pre-requirement artifacts as first-class intent kinds:
hypothesis,pragmatic_assumption,risk_tradeoff,operational_constraint - Added
beliefRationalefield to intent elements to record why something was believed to work - Enhanced
supportingArtifactswithevidenceType,evidenceDirection, andevidencePriorityto support field validation over formal verification and operational counter-evidence - Removed
confidencefield - Added definitions and examples for all
intentKindvalues
Version 0.3
- Adapted schema definitions based on Leveson's Intent Specifications