diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,82 @@
 
 ## [Unreleased]
 
+## 0.21.0.0 — 2026-10-14
+
+### Breaking Changes
+
+- Candidate mapped construction extends public `Expr`, `MappedDecl`, checked
+  structural/opaque declarations, mapping identities, diagnostic codes, and
+  binding obligation kinds. Library clients constructing those records must
+  supply the optional lift field (`Nothing` for prior declarations), and clients
+  matching constructors must handle the new cases. These source API changes
+  require the shared PVP-major release. Language 6 remains a candidate;
+  publishing the language contract and consumer adoption are separate decisions.
+
+- `Keiro.Dsl.Grammar.ContractType` is now `CScalar ContractScalarType | CList
+  ContractScalarType`; `CTypeId`, `CDeclaredId`, `CText`, and `CInt` belong to
+  `ContractScalarType`. Update library clients to wrap scalar fields in `CScalar`.
+  This requires a PVP-major release, without compatibility pattern synonyms.
+
+- After re-scaffolding, workqueues with reserved snake-case segments use the
+  whole-name spelling: `job_type` now generates `jobTypeJobCodec`,
+  `jobTypePayloadCodec`, and `JobTypeOutcome` instead of the glued `jobtype…`
+  names. Keyword wire-path projection names also change, for example
+  `thingtypeWitness` and `thingtypeGet` become `thingTypeWitness` and
+  `thingTypeGet`. Rename consumer references and recompile. Create-once
+  read-model holes are not overwritten: rename affected query bindings,
+  local type aliases, exports, and contract imports by hand while preserving
+  their application bodies.
+
+### New Features
+
+- Candidate Language 6 supports complete mapped-register `initial` and
+  `mapped(expression)` writes under generated guard/slot ownership, backed by one
+  pure, total, versioned declaration-owned scalar `write-lift` and finite cases.
+  Recursive projected/predicate inputs and mixed Hole ownership remain refused.
+  Used-lift provenance enters fold/snapshot identity; own-revision replay comparison
+  handles lift removal/source replacement. Unused lifts and cases-only edits are
+  replay-neutral build advisories. Schema-1 mapping ledgers remain readable.
+  A compiled lifecycle service and restoring mutation proof run in `just verify`.
+
+- Candidate Language 6 contracts accept `List <typeid | declared id | text | int>`
+  fields under `ContractListFieldSyntax`, generating Haskell lists and ordered JSON
+  arrays with strict required-field and per-element decoding. Lists cannot supply
+  outbox or dedupe identity (`ContractListFieldUsedAsKey`). Resolves
+  [IR-54](../docs/improvement-requests/support-list-fields-in-integration-contracts.md).
+
+### Bug Fixes
+
+- `diff --since` classifies command/event/state removals and writes compatibility
+  and replay-impact reports before the usual breaking gate exits nonzero.
+  Replay analysis resolves each revision against its own declarations, retaining
+  narrow event impact for same-state removals and existing additive/guard controls.
+
+- Contract parsing admits declared IDs named `List`, `Optional`, `Map`, and `Set`
+  as scalars and list elements, including adjacent fields without semicolons.
+  The list keyword is exactly `List`; wrong-case applications are rejected.
+  Nested and unsupported container applications remain invalid.
+
+- Literal/declared contract ID transitions compare resolved admission as well as
+  prefix and shape. Same-prefix admission widening or narrowing is public breaking,
+  including inside a list; equal admission retains the consumer-build advisory.
+
+- Read models with reserved segments now compile because definitions, query
+  contracts, holes, and harness imports share one whole-name stem. Scaffolding
+  also refuses a plain value import from a generated sibling when its known
+  explicit export list proves the name absent; GHC checks unresolved import
+  forms. Fixes [BUG-11](mori://shinzui/keiro/okf/bug-reports/concepts/BUG-11)
+  under [plan 310](../docs/plans/310-derive-generated-declaration-stems-from-whole-logical-names-to-fix-bug-11.md).
+- Generated aggregate harnesses prove Hole-owned live initial transitions with
+  the consumer's history-backed `LiveWitness` through `BehaviorContract`, which
+  now exports `behaviorObligationReport`. Their forward/replay rows are labelled
+  `hole witness filled` and `hole witness verified`; pending or invalid witnesses
+  fail whole-service conformance. Generated-owned probes, replay semantics, wire
+  shapes, fold fingerprints, and snapshot identity are unchanged; this requires
+  no data migration or DSL diff impact. Fixes
+  [BUG-10](mori://shinzui/keiro/okf/bug-reports/concepts/BUG-10) under
+  [plan 309](../docs/plans/309-prove-hole-owned-initial-edges-through-history-backed-witnesses-in-generated-harnesses-to-fix-bug-10.md).
+
 ## 0.20.0.0 — 2026-10-12
 
 ### Breaking Changes
diff --git a/generated-haskell-edition-idiomatic-v2.md b/generated-haskell-edition-idiomatic-v2.md
# file too large to diff: generated-haskell-edition-idiomatic-v2.md
diff --git a/keiro-dsl.cabal b/keiro-dsl.cabal
--- a/keiro-dsl.cabal
+++ b/keiro-dsl.cabal
@@ -1,6 +1,6 @@
 cabal-version: 3.0
 name: keiro-dsl
-version: 0.20.0.0
+version: 0.21.0.0
 synopsis: Typed specification toolchain for keiro services
 description:
   keiro-dsl is the toolchain over a typed `.keiro` specification of a keiro
@@ -163,6 +163,7 @@
   other-modules:
     Keiro.Dsl.AggregateGenerationPlan
     Keiro.Dsl.FieldIdentity
+    Keiro.Dsl.FoldEvidence
     Keiro.Dsl.Frontend.Internal
     Keiro.Dsl.HaskellName
     Keiro.Dsl.Parser.Aggregate
@@ -189,7 +190,7 @@
     directory >=1.3 && <1.4,
     filepath >=1.4 && <1.6,
     keiki >=0.9 && <0.10,
-    keiro-core ^>=0.20.0.0,
+    keiro-core ^>=0.21.0.0,
     keiro-dsl:generated-haskell-language-internal,
     megaparsec >=9.6 && <9.9,
     mmzk-typeid >=0.7 && <0.8,
@@ -225,6 +226,7 @@
     Keiro.Dsl.FrontendProfiles
     Keiro.Dsl.FrontendPublicApiProbe
     Keiro.Dsl.FrontendSurface
+    Keiro.Dsl.MappedRegisterConstruction
     Paths_keiro_dsl
 
   build-depends:
@@ -237,7 +239,7 @@
     filepath >=1.4 && <1.6,
     hspec >=2.11,
     keiki >=0.9 && <0.10,
-    keiro-core ^>=0.20.0.0,
+    keiro-core ^>=0.21.0.0,
     keiro-dsl,
     keiro-dsl:generated-haskell-language-internal,
     mmzk-typeid >=0.7 && <0.8,
@@ -290,7 +292,7 @@
   main-is: Main.hs
   build-depends:
     base >=4.21 && <5,
-    keiro ^>=0.20.0.0,
+    keiro ^>=0.21.0.0,
     keiro-dsl,
     shibuya-core ^>=0.10.0.1,
     text >=2.1 && <2.2,
@@ -391,6 +393,37 @@
     text >=2.1 && <2.2,
     time >=1.12 && <1.15,
 
+test-suite keiro-dsl-conformance-history-dependent-holes
+  import: warnings, generated-output
+  type: exitcode-stdio-1.0
+  default-extensions: OverloadedLabels
+  hs-source-dirs: test/conformance-history-dependent-holes
+  main-is: Main.hs
+  other-modules:
+    Conformance.HistoryDependentHoles.Bindings
+    Conformance.HistoryDependentHoles.Domain
+    Generated.HistoryDependentHoles.Assignment.BehaviorContract
+    Generated.HistoryDependentHoles.Assignment.Codec
+    Generated.HistoryDependentHoles.Assignment.Domain
+    Generated.HistoryDependentHoles.Assignment.EventStream
+    Generated.HistoryDependentHoles.Assignment.Harness
+    Generated.HistoryDependentHoles.Assignment.Projection
+    Generated.HistoryDependentHoles.Assignment.Transducer
+    Generated.HistoryDependentHoles.BehaviorSourceMap
+    Generated.HistoryDependentHoles.ReplayAudit
+    Generated.HistoryDependentHoles.StructuralConformance
+    HistoryDependentHoles.Assignment.BehaviorHoles
+    HistoryDependentHoles.Assignment.Holes
+
+  build-depends:
+    aeson >=2.2 && <2.3,
+    base >=4.21 && <5,
+    containers >=0.6 && <0.8,
+    keiki >=0.9 && <0.10,
+    keiro,
+    text >=2.1 && <2.2,
+    time >=1.12 && <1.15,
+
 test-suite keiro-dsl-conformance-behavior-complete
   import: warnings, generated-output
   type: exitcode-stdio-1.0
@@ -1069,7 +1102,7 @@
     containers >=0.6 && <0.8,
     deepseq >=1.5 && <1.6,
     keiki >=0.9 && <0.10,
-    keiro ^>=0.20.0.0,
+    keiro ^>=0.21.0.0,
     tasty-bench >=0.5 && <0.6,
     text >=2.1 && <2.2,
     time >=1.12 && <1.15,
@@ -1294,6 +1327,31 @@
     mmzk-typeid >=0.7 && <0.8,
     text >=2.1 && <2.2,
 
+-- Plan 312: strict ordered arrays of every admitted public contract scalar.
+test-suite keiro-dsl-conformance-contract-list-fields
+  import: warnings, generated-output
+  type: exitcode-stdio-1.0
+  hs-source-dirs: test/conformance-contract-list-fields
+  main-is: Main.hs
+  other-modules:
+    Conformance.ContractListFields.Bindings
+    Conformance.ContractListFields.Domain
+    Generated.ContractListFields.Nominals
+    Generated.ContractListFields.Nominals.Internal
+    Generated.ContractListFields.Structural.NominalLeaves
+    Generated.ContractListFields.StructuralConformance
+    Generated.ContractListFields.Templates.Contract
+
+  build-depends:
+    aeson >=2.2 && <2.3,
+    base >=4.21 && <5,
+    keiki >=0.9 && <0.10,
+    keiro,
+    keiro-core,
+    keiro-dsl,
+    mmzk-typeid >=0.7 && <0.8,
+    text >=2.1 && <2.2,
+
 -- Language-1 compatibility proof: the historical permissive Text contract DTO
 -- still accepts pre-TypeID-v7 samples and retains its released JSON image.
 test-suite keiro-dsl-conformance-contract-v1-compat
@@ -1438,6 +1496,40 @@
     kiroku-store,
     text >=2.1 && <2.2,
 
+-- Plan 310 / BUG-11: keyword segments in read-model and workqueue names.
+test-suite keiro-dsl-conformance-keyword-segments
+  import: warnings, generated-output
+  type: exitcode-stdio-1.0
+  hs-source-dirs: test/conformance-keyword-segments
+  main-is: Main.hs
+  other-modules:
+    Generated.KeywordSegments.JobType.Queue
+    Generated.KeywordSegments.JobType.QueueCodec
+    Generated.KeywordSegments.JobType.QueuePolicy
+    Generated.KeywordSegments.Nominals
+    Generated.KeywordSegments.Nominals.Internal
+    Generated.KeywordSegments.ProjectionCatalog
+    Generated.KeywordSegments.Structural.NominalLeaves
+    Generated.KeywordSegments.StructuralConformance
+    Generated.KeywordSegments.ValidateCustomType.QueryContract
+    Generated.KeywordSegments.ValidateCustomType.ReadModel
+    Generated.KeywordSegments.ValidateCustomType.ReadModelHarness
+    Generated.KeywordSegments.ValidateCustomType.ReadModelTable
+    KeywordSegments.ProjectionCatalog.ProjectionCatalogHoles
+    KeywordSegments.ValidateCustomType.ReadModelHoles
+
+  build-depends:
+    aeson,
+    base >=4.21 && <5,
+    effectful-core,
+    hasql-transaction,
+    keiki >=0.9 && <0.10,
+    keiro,
+    keiro-core,
+    keiro-pgmq,
+    kiroku-store,
+    text >=2.1 && <2.2,
+
 -- MasterPlan 32 / EP-4: language-5 catalog declarations lower into one
 -- generated runtime-owned facade with typed inline views, catalog-derived
 -- async/query registration, and a group-scoped history-runner entry point.
@@ -2138,3 +2230,37 @@
     text >=2.1 && <2.2,
     time >=1.12 && <1.15,
     uuid >=1.3 && <1.4,
+
+-- Candidate Language 6 guarded mapped construction and replay proof.
+test-suite keiro-dsl-conformance-mapped-register-construction
+  import: warnings, generated-output
+  default-extensions: OverloadedLabels
+  type: exitcode-stdio-1.0
+  hs-source-dirs: test/conformance-mapped-register-construction
+  main-is: Main.hs
+  other-modules:
+    Conformance.MappedRegisterConstruction.Bindings
+    Conformance.MappedRegisterConstruction.Domain
+    Conformance.MappedRegisterConstruction.Lift
+    Generated.MappedRegisterConstruction.BehaviorSourceMap
+    Generated.MappedRegisterConstruction.Lifecycle.BehaviorContract
+    Generated.MappedRegisterConstruction.Lifecycle.Codec
+    Generated.MappedRegisterConstruction.Lifecycle.Domain
+    Generated.MappedRegisterConstruction.Lifecycle.EventStream
+    Generated.MappedRegisterConstruction.Lifecycle.Harness
+    Generated.MappedRegisterConstruction.Lifecycle.Projection
+    Generated.MappedRegisterConstruction.Lifecycle.Transducer
+    Generated.MappedRegisterConstruction.ReplayAudit
+    Generated.MappedRegisterConstruction.StructuralConformance
+    MappedRegisterConstruction.Lifecycle.BehaviorHoles
+
+  build-depends:
+    aeson >=2.2 && <2.3,
+    base >=4.21 && <5,
+    bytestring >=0.12 && <0.13,
+    containers >=0.6 && <0.8,
+    deepseq >=1.4 && <1.6,
+    keiki >=0.9 && <0.10,
+    keiro,
+    text >=2.1 && <2.2,
+    time >=1.12 && <1.15,
diff --git a/record-field-migration-0.15.md b/record-field-migration-0.15.md
--- a/record-field-migration-0.15.md
+++ b/record-field-migration-0.15.md
@@ -9,1431 +9,1461 @@
 serialized, rendered, CLI, and runtime surfaces for review but does not prove byte
 compatibility. Exact byte claims live in named package-test goldens.
 
-Inventory: 313 record-owning declarations, 1546 fields, 1499 strict fields, and 1410 fields exported through a public `Type (..)`.
-
-| Location | Owner | Kind | Public | Current | Target | Type/strictness | Selection replacement | Review risk / observable surface | Deriving |
-| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
-| `keiro-dsl/src/Keiro/Dsl/AggregateGenerationPlan.hs:14` | `TransitionLayoutEntry` | data | no | `layoutDeclarationIndex` | `declarationIndex` | `!Int` | `(.declarationIndex)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/AggregateGenerationPlan.hs:15` | `TransitionLayoutEntry` | data | no | `layoutOutgoingIndex` | `outgoingIndex` | `!Int` | `(.outgoingIndex)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/AggregateGenerationPlan.hs:16` | `TransitionLayoutEntry` | data | no | `layoutTransition` | `transition` | `!Transition` | `(.transition)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/AggregateType.hs:86` | `AggregateSymbols` | data | no | `symbolNominals` | `nominals` | `!(Map Name ResolvedNominalType)` | `(.nominals)`, pattern, or construction | rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/AggregateType.hs:87` | `AggregateSymbols` | data | no | `symbolVertices` | `vertices` | `!(Map Name [Name])` | `(.vertices)`, pattern, or construction | rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/AggregateType.hs:88` | `AggregateSymbols` | data | no | `symbolMapped` | `mapped` | `!(Map MappedKey ResolvedMappedDecl)` | `(.mapped)`, pattern, or construction | rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/AggregateType.hs:125` | `AggregateTypeError` | data | yes | `aggregateTypeErrorLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/AggregateType.hs:126` | `AggregateTypeError` | data | yes | `aggregateTypeErrorUseSite` | `useSite` | `!AggregateUseSite` | `(.useSite)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/AggregateType.hs:127` | `AggregateTypeError` | data | yes | `aggregateTypeErrorReason` | `reason` | `!AggregateTypeErrorReason` | `(.reason)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/AggregateType.hs:261` | `AggregateHaskellSource` | data | no | `aggregateSourceBuiltin` | `builtin` | `!(Maybe Text)` | `(.builtin)`, pattern, or construction | rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/AggregateType.hs:262` | `AggregateHaskellSource` | data | no | `aggregateSourceReference` | `reference` | `!(Maybe HaskellReference)` | `(.reference)`, pattern, or construction | rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/AggregateType.hs:263` | `AggregateHaskellSource` | data | no | `aggregateSourceStaticImports` | `staticImports` | `!(Set Text)` | `(.staticImports)`, pattern, or construction | rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:51` | `BehaviorKey` | newtype | yes | `unBehaviorKey` | `unBehaviorKey` | `Text` | explicit `unBehaviorKey` positional function | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:92` | `BehaviorExactLocation` | data | yes | `exactSourceFile` | `sourceFile` | `!FilePath` | `(.sourceFile)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:93` | `BehaviorExactLocation` | data | yes | `exactSourceLine` | `sourceLine` | `!Int` | `(.sourceLine)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:94` | `BehaviorExactLocation` | data | yes | `exactSourceColumn` | `sourceColumn` | `!Int` | `(.sourceColumn)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:99` | `BehaviorRequirement` | data | yes | `requirementKey` | `key` | `!BehaviorKey` | `(.key)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:100` | `BehaviorRequirement` | data | yes | `requirementOrigin` | `origin` | `!RequirementOrigin` | `(.origin)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:101` | `BehaviorRequirement` | data | yes | `requirementKind` | `kind` | `!ObligationKind` | `(.kind)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:102` | `BehaviorRequirement` | data | yes | `requirementEvidence` | `evidence` | `!EvidenceLevel` | `(.evidence)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:103` | `BehaviorRequirement` | data | yes | `requirementGuardCoverage` | `guardCoverage` | `!GuardCoverage` | `(.guardCoverage)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:104` | `BehaviorRequirement` | data | yes | `requirementContext` | `context` | `!Name` | `(.context)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:105` | `BehaviorRequirement` | data | yes | `requirementAggregate` | `aggregate` | `!Name` | `(.aggregate)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:106` | `BehaviorRequirement` | data | yes | `requirementSource` | `source` | `!Name` | `(.source)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:107` | `BehaviorRequirement` | data | yes | `requirementCommand` | `command` | `!Name` | `(.command)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:108` | `BehaviorRequirement` | data | yes | `requirementTarget` | `target` | `!(Maybe Name)` | `(.target)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:109` | `BehaviorRequirement` | data | yes | `requirementMode` | `mode` | `!(Maybe TransitionMode)` | `(.mode)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:110` | `BehaviorRequirement` | data | yes | `requirementEvents` | `events` | `![Name]` | `(.events)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:111` | `BehaviorRequirement` | data | yes | `requirementOutputs` | `outputs` | `![OutputEvidence]` | `(.outputs)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:112` | `BehaviorRequirement` | data | yes | `requirementDomainOutcome` | `domainOutcome` | `!(Maybe TransitionOutcome)` | `(.domainOutcome)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:113` | `BehaviorRequirement` | data | yes | `requirementLocation` | `location` | `!Loc` | `(.location)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:114` | `BehaviorRequirement` | data | yes | `requirementExactLocation` | `exactLocation` | `!(Maybe BehaviorExactLocation)` | `(.exactLocation)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:115` | `BehaviorRequirement` | data | yes | `requirementOwner` | `owner` | `!(Maybe FilePath)` | `(.owner)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:116` | `BehaviorRequirement` | data | yes | `requirementCanonical` | `canonical` | `!Text` | `(.canonical)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:124` | `BehaviorRecordRow` | data | yes | `behaviorRecordKey` | `key` | `!BehaviorKey` | `(.key)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:125` | `BehaviorRecordRow` | data | yes | `behaviorRecordKind` | `kind` | `!ObligationKind` | `(.kind)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:126` | `BehaviorRecordRow` | data | yes | `behaviorRecordEvidence` | `evidence` | `!EvidenceLevel` | `(.evidence)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:127` | `BehaviorRecordRow` | data | yes | `behaviorRecordAggregate` | `aggregate` | `!Name` | `(.aggregate)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:128` | `BehaviorRecordRow` | data | yes | `behaviorRecordSource` | `source` | `!Name` | `(.source)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:129` | `BehaviorRecordRow` | data | yes | `behaviorRecordCommand` | `command` | `!Name` | `(.command)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:130` | `BehaviorRecordRow` | data | yes | `behaviorRecordOwner` | `owner` | `!(Maybe FilePath)` | `(.owner)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:131` | `BehaviorRecordRow` | data | yes | `behaviorRecordOutputs` | `outputs` | `![OutputEvidence]` | `(.outputs)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:143` | `BehaviorObligationsReport` | data | yes | `behaviorSubject` | `subject` | `!FilePath` | `(.subject)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:144` | `BehaviorObligationsReport` | data | yes | `behaviorWorkspaceService` | `workspaceService` | `!(Maybe Text)` | `(.workspaceService)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:145` | `BehaviorObligationsReport` | data | yes | `behaviorRequirements` | `requirements` | `![BehaviorRequirement]` | `(.requirements)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorSourceMap.hs:38` | `BehaviorSourceFailure` | data | yes | `failureCode` | `code` | `!BehaviorSourceFailureCode` | `(.code)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorSourceMap.hs:39` | `BehaviorSourceFailure` | data | yes | `failureKey` | `key` | `!BehaviorKey` | `(.key)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorSourceMap.hs:40` | `BehaviorSourceFailure` | data | yes | `failureOrigin` | `origin` | `!RequirementOrigin` | `(.origin)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorSourceMap.hs:41` | `BehaviorSourceFailure` | data | yes | `failureAggregate` | `aggregate` | `!Text` | `(.aggregate)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorSourceMap.hs:42` | `BehaviorSourceFailure` | data | yes | `failureState` | `state` | `!Text` | `(.state)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorSourceMap.hs:43` | `BehaviorSourceFailure` | data | yes | `failureCommand` | `command` | `!Text` | `(.command)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorSourceMap.hs:44` | `BehaviorSourceFailure` | data | yes | `failureSourceSubject` | `sourceSubject` | `!SourceSubject` | `(.sourceSubject)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorSourceMap.hs:45` | `BehaviorSourceFailure` | data | yes | `failureSpan` | `span` | `!(Maybe SourceSpan)` | `(.span)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorSourceMap.hs:46` | `BehaviorSourceFailure` | data | yes | `failureMessage` | `message` | `!Text` | `(.message)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorSourceMap.hs:51` | `BehaviorSourceEntry` | data | yes | `behaviorSourceKey` | `key` | `!BehaviorKey` | `(.key)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorSourceMap.hs:52` | `BehaviorSourceEntry` | data | yes | `behaviorSourceFile` | `file` | `!FilePath` | `(.file)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorSourceMap.hs:53` | `BehaviorSourceEntry` | data | yes | `behaviorSourceLine` | `line` | `!Int` | `(.line)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/BehaviorSourceMap.hs:54` | `BehaviorSourceEntry` | data | yes | `behaviorSourceColumn` | `column` | `!Int` | `(.column)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:45` | `CheckReportLanguage` | data | yes | `reportSourceForm` | `sourceForm` | `!Text` | `(.sourceForm)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:46` | `CheckReportLanguage` | data | yes | `reportDeclaredLanguageVersion` | `declaredLanguageVersion` | `!(Maybe LanguageVersion)` | `(.declaredLanguageVersion)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:47` | `CheckReportLanguage` | data | yes | `reportEffectiveLanguageVersion` | `effectiveLanguageVersion` | `!LanguageVersion` | `(.effectiveLanguageVersion)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:48` | `CheckReportLanguage` | data | yes | `reportRuntimeSemantics` | `runtimeSemantics` | `!Text` | `(.runtimeSemantics)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:49` | `CheckReportLanguage` | data | yes | `reportLanguageSupport` | `languageSupport` | `!LanguageSupport` | `(.languageSupport)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:50` | `CheckReportLanguage` | data | yes | `reportStable` | `stable` | `!Bool` | `(.stable)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:55` | `CheckReportEnforcement` | data | yes | `reportMinLanguage` | `minLanguage` | `!(Maybe LanguageVersion)` | `(.minLanguage)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:56` | `CheckReportEnforcement` | data | yes | `reportDenyWarnings` | `denyWarnings` | `!Bool` | `(.denyWarnings)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:57` | `CheckReportEnforcement` | data | yes | `reportDenyCodes` | `denyCodes` | `![DiagnosticCode]` | `(.denyCodes)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:62` | `CheckReportRelated` | data | yes | `relatedFile` | `file` | `!FilePath` | `(.file)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:63` | `CheckReportRelated` | data | yes | `relatedLine` | `line` | `!Int` | `(.line)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:64` | `CheckReportRelated` | data | yes | `relatedNote` | `note` | `!Text` | `(.note)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:69` | `CheckReportEntry` | data | yes | `entryCode` | `code` | `!DiagnosticCode` | `(.code)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:70` | `CheckReportEntry` | data | yes | `entrySeverity` | `severity` | `!Severity` | `(.severity)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:71` | `CheckReportEntry` | data | yes | `entryFile` | `file` | `!FilePath` | `(.file)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:72` | `CheckReportEntry` | data | yes | `entryLine` | `line` | `!Int` | `(.line)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:73` | `CheckReportEntry` | data | yes | `entryMessage` | `message` | `!Text` | `(.message)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:74` | `CheckReportEntry` | data | yes | `entryDenied` | `denied` | `!Bool` | `(.denied)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:75` | `CheckReportEntry` | data | yes | `entryRelated` | `related` | `![CheckReportRelated]` | `(.related)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:80` | `CheckReportSummary` | data | yes | `summaryErrors` | `errors` | `!Int` | `(.errors)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:81` | `CheckReportSummary` | data | yes | `summaryWarnings` | `warnings` | `!Int` | `(.warnings)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:82` | `CheckReportSummary` | data | yes | `summaryDeniedWarnings` | `deniedWarnings` | `!Int` | `(.deniedWarnings)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:87` | `CheckReportMember` | data | yes | `memberPath` | `path` | `!FilePath` | `(.path)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:88` | `CheckReportMember` | data | yes | `memberSourceForm` | `sourceForm` | `!Text` | `(.sourceForm)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:89` | `CheckReportMember` | data | yes | `memberDeclaredLanguageVersion` | `declaredLanguageVersion` | `!(Maybe LanguageVersion)` | `(.declaredLanguageVersion)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:94` | `CheckReportProcessReaction` | data | yes | `process` | `process` | `!Text` | `(.process)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:95` | `CheckReportProcessReaction` | data | yes | `verification` | `verification` | `!Text` | `(.verification)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:96` | `CheckReportProcessReaction` | data | yes | `version` | `version` | `!Natural` | `(.version)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:97` | `CheckReportProcessReaction` | data | yes | `fingerprint` | `fingerprint` | `!Text` | `(.fingerprint)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:98` | `CheckReportProcessReaction` | data | yes | `holeObligations` | `holeObligations` | `![Text]` | `(.holeObligations)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:106` | `CheckReport` | data | no | `reportKind` | `kind` | `!CheckReportKind` | `(.kind)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:107` | `CheckReport` | data | no | `reportSubject` | `subject` | `!FilePath` | `(.subject)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:111` | `CheckReport` | data | no | `reportLanguage` | `language` | `!(Maybe CheckReportLanguage)` | `(.language)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:112` | `CheckReport` | data | no | `reportEnforcement` | `enforcement` | `!CheckReportEnforcement` | `(.enforcement)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:113` | `CheckReport` | data | no | `reportDiagnostics` | `diagnostics` | `![CheckReportEntry]` | `(.diagnostics)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:114` | `CheckReport` | data | no | `reportSummary` | `summary` | `!CheckReportSummary` | `(.summary)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:115` | `CheckReport` | data | no | `reportOk` | `ok` | `!Bool` | `(.ok)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:116` | `CheckReport` | data | no | `reportMembers` | `members` | `![CheckReportMember]` | `(.members)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:117` | `CheckReport` | data | no | `processReactions` | `processReactions` | `![CheckReportProcessReaction]` | `(.processReactions)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:70` | `JsonPointer` | newtype | yes | `unJsonPointer` | `unJsonPointer` | `Text` | explicit `unJsonPointer` positional function | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:85` | `HistoricalCodec` | data | yes | `hcIdentity` | `identity` | `!Text` | `(.identity)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:86` | `HistoricalCodec` | data | yes | `hcVersion` | `version` | `!Text` | `(.version)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:87` | `HistoricalCodec` | data | yes | `hcEncode` | `encode` | `!(a -> Value)` | `(.encode)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:88` | `HistoricalCodec` | data | yes | `hcDecode` | `decode` | `!(Value -> Either Text a)` | `(.decode)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:93` | `CompareObservation` | data | yes | `coCaseName` | `caseName` | `!Text` | `(.caseName)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:94` | `CompareObservation` | data | yes | `coHistoricalValue` | `historicalValue` | `!Value` | `(.historicalValue)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:95` | `CompareObservation` | data | yes | `coGeneratedValue` | `generatedValue` | `!Value` | `(.generatedValue)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:98` | `CompareObservation` | data | yes | `coFixturePath` | `fixturePath` | `!FilePath` | `(.fixturePath)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:99` | `CompareObservation` | data | yes | `coInputValue` | `inputValue` | `!Value` | `(.inputValue)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:100` | `CompareObservation` | data | yes | `coHistoricalDecode` | `historicalDecode` | `!DecodeOutcome` | `(.historicalDecode)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:101` | `CompareObservation` | data | yes | `coGeneratedDecode` | `generatedDecode` | `!DecodeOutcome` | `(.generatedDecode)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:124` | `DeclaredBranch` | data | yes | `dbOrigin` | `origin` | `!FixtureOrigin` | `(.origin)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:125` | `DeclaredBranch` | data | yes | `dbPointer` | `pointer` | `!JsonPointer` | `(.pointer)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:126` | `DeclaredBranch` | data | yes | `dbKind` | `kind` | `!BranchKind` | `(.kind)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:131` | `ObservedBranch` | data | yes | `obOrigin` | `origin` | `!FixtureOrigin` | `(.origin)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:132` | `ObservedBranch` | data | yes | `obPointer` | `pointer` | `!JsonPointer` | `(.pointer)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:133` | `ObservedBranch` | data | yes | `obKind` | `kind` | `!BranchKind` | `(.kind)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:138` | `CoverageGap` | data | yes | `cgOrigin` | `origin` | `!FixtureOrigin` | `(.origin)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:139` | `CoverageGap` | data | yes | `cgPointer` | `pointer` | `!JsonPointer` | `(.pointer)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:140` | `CoverageGap` | data | yes | `cgKind` | `kind` | `!BranchKind` | `(.kind)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:157` | `BranchField` | data | yes | `bfWireKey` | `wireKey` | `!Text` | `(.wireKey)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:158` | `BranchField` | data | yes | `bfPresenceOptional` | `presenceOptional` | `!Bool` | `(.presenceOptional)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:159` | `BranchField` | data | yes | `bfSchema` | `schema` | `!BranchSchema` | `(.schema)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:164` | `BranchArm` | data | yes | `baWireTag` | `wireTag` | `!Text` | `(.wireTag)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:165` | `BranchArm` | data | yes | `baPayloadSchema` | `payloadSchema` | `!(Maybe BranchSchema)` | `(.payloadSchema)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:170` | `CompareProvenance` | data | yes | `cpHistoricalCodecIdentity` | `historicalCodecIdentity` | `!Text` | `(.historicalCodecIdentity)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:171` | `CompareProvenance` | data | yes | `cpHistoricalCodecVersion` | `historicalCodecVersion` | `!Text` | `(.historicalCodecVersion)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:172` | `CompareProvenance` | data | yes | `cpCanonicalType` | `canonicalType` | `!CanonicalTypeId` | `(.canonicalType)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:173` | `CompareProvenance` | data | yes | `cpBindingSymbol` | `bindingSymbol` | `!QualifiedValueName` | `(.bindingSymbol)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:174` | `CompareProvenance` | data | yes | `cpBindingVersion` | `bindingVersion` | `!BindingVersion` | `(.bindingVersion)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:175` | `CompareProvenance` | data | yes | `cpWireFingerprint` | `wireFingerprint` | `!Text` | `(.wireFingerprint)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:180` | `ClassifiedObservation` | data | yes | `classifiedOrigin` | `origin` | `!FixtureOrigin` | `(.origin)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:181` | `ClassifiedObservation` | data | yes | `classifiedName` | `name` | `!Text` | `(.name)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:182` | `ClassifiedObservation` | data | yes | `classifiedVerdict` | `verdict` | `!FixtureVerdict` | `(.verdict)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:187` | `CompareReport` | data | yes | `crProvenance` | `provenance` | `!CompareProvenance` | `(.provenance)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:188` | `CompareReport` | data | yes | `crObservations` | `observations` | `![ClassifiedObservation]` | `(.observations)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:189` | `CompareReport` | data | yes | `crInputIssues` | `inputIssues` | `![CompareInputIssue]` | `(.inputIssues)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:190` | `CompareReport` | data | yes | `crCoverageGaps` | `coverageGaps` | `![CoverageGap]` | `(.coverageGaps)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:191` | `CompareReport` | data | yes | `crAuthority` | `authority` | `!Text` | `(.authority)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:196` | `ReportWriteError` | data | yes | `reportWritePath` | `path` | `!FilePath` | `(.path)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:197` | `ReportWriteError` | data | yes | `reportWriteMessage` | `message` | `!Text` | `(.message)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:58` | `ConformanceFile` | data | yes | `conformanceFilePath` | `path` | `!FilePath` | `(.path)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:59` | `ConformanceFile` | data | yes | `conformanceFileText` | `text` | `!Text` | `(.text)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:60` | `ConformanceFile` | data | yes | `conformanceFileKind` | `kind` | `!ModuleKind` | `(.kind)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:65` | `ConformancePackagePlan` | data | yes | `cppServiceKey` | `serviceKey` | `!ConformanceServiceKey` | `(.serviceKey)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:66` | `ConformancePackagePlan` | data | yes | `cppDirectory` | `directory` | `!FilePath` | `(.directory)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:67` | `ConformancePackagePlan` | data | yes | `cppPackageName` | `packageName` | `!Text` | `(.packageName)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:68` | `ConformancePackagePlan` | data | yes | `cppRuntimePackage` | `runtimePackage` | `!RuntimePackageName` | `(.runtimePackage)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:69` | `ConformancePackagePlan` | data | yes | `cppFacadeModule` | `facadeModule` | `!Text` | `(.facadeModule)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:70` | `ConformancePackagePlan` | data | yes | `cppFiles` | `files` | `![ConformanceFile]` | `(.files)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:78` | `DuplicateFactKey` | data | yes | `duplicateFactSide` | `side` | `!ConformanceFactSide` | `(.side)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:79` | `DuplicateFactKey` | data | yes | `duplicateFactKey` | `key` | `!String` | `(.key)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:101` | `ConformancePackageRecord` | data | yes | `cprSchema` | `schema` | `!Int` | `(.schema)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:102` | `ConformancePackageRecord` | data | yes | `cprServiceKey` | `serviceKey` | `!ConformanceServiceKey` | `(.serviceKey)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:103` | `ConformancePackageRecord` | data | yes | `cprRuntimePackage` | `runtimePackage` | `!RuntimePackageName` | `(.runtimePackage)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:104` | `ConformancePackageRecord` | data | yes | `cprFacadeModule` | `facadeModule` | `!Text` | `(.facadeModule)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:105` | `ConformancePackageRecord` | data | yes | `cprFiles` | `files` | `![(ModuleKind, FilePath)]` | `(.files)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:113` | `ConformanceStaleFile` | data | yes | `conformanceStaleKind` | `kind` | `!ModuleKind` | `(.kind)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:114` | `ConformanceStaleFile` | data | yes | `conformanceStalePath` | `path` | `!FilePath` | `(.path)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:115` | `ConformanceStaleFile` | data | yes | `conformanceStaleBannerPresent` | `bannerPresent` | `!(Maybe Bool)` | `(.bannerPresent)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:120` | `PreparedConformancePackage` | data | no | `preparedRoot` | `root` | `!FilePath` | `(.root)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:121` | `PreparedConformancePackage` | data | no | `preparedPlan` | `plan` | `!ConformancePackagePlan` | `(.plan)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:122` | `PreparedConformancePackage` | data | no | `preparedStale` | `stale` | `![ConformanceStaleFile]` | `(.stale)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:127` | `ConformancePackageReport` | data | yes | `conformanceReportRoot` | `root` | `!FilePath` | `(.root)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:128` | `ConformancePackageReport` | data | yes | `conformanceReportPlan` | `plan` | `!ConformancePackagePlan` | `(.plan)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:129` | `ConformancePackageReport` | data | yes | `conformanceReportDispositions` | `dispositions` | `![(ConformanceFile, ConformanceWriteDisposition)]` | `(.dispositions)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:130` | `ConformancePackageReport` | data | yes | `conformanceReportStale` | `stale` | `![ConformanceStaleFile]` | `(.stale)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:388` | `ConformanceFileRow` | data | no | `conformanceRowKind` | `kind` | `!ModuleKind` | `(.kind)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:389` | `ConformanceFileRow` | data | no | `conformanceRowPath` | `path` | `!FilePath` | `(.path)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/ConsumerTypePlan.hs:27` | `HaskellTypeOccurrence` | newtype | yes | `unHaskellTypeOccurrence` | `unHaskellTypeOccurrence` | `Text` | explicit `unHaskellTypeOccurrence` positional function | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ConsumerTypePlan.hs:38` | `ImportRequirement` | data | yes | `package` | `package` | `!Text` | `(.package)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ConsumerTypePlan.hs:39` | `ImportRequirement` | data | yes | `moduleName` | `moduleName` | `!Text` | `(.moduleName)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ConsumerTypePlan.hs:40` | `ImportRequirement` | data | yes | `occurrence` | `occurrence` | `!Text` | `(.occurrence)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ConsumerTypePlan.hs:45` | `ConsumerTypePlan` | data | yes | `haskellType` | `haskellType` | `!HaskellTypeOccurrence` | `(.haskellType)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ConsumerTypePlan.hs:46` | `ConsumerTypePlan` | data | yes | `imports` | `imports` | `![ImportRequirement]` | `(.imports)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ConsumerTypePlan.hs:47` | `ConsumerTypePlan` | data | yes | `dependencies` | `dependencies` | `!(Set MappedKey)` | `(.dependencies)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ConsumerTypePlan.hs:48` | `ConsumerTypePlan` | data | yes | `nominalDependencies` | `nominalDependencies` | `!(Set Text)` | `(.nominalDependencies)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ConsumerTypePlan.hs:162` | `RenderedType` | data | no | `rendered` | `rendered` | `!Text` | `(.rendered)`, pattern, or construction | rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/ConsumerTypePlan.hs:163` | `RenderedType` | data | no | `precedence` | `precedence` | `!TypePrecedence` | `(.precedence)`, pattern, or construction | rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/ConsumerTypePlan.hs:164` | `RenderedType` | data | no | `requirements` | `requirements` | `!(Set ImportRequirement)` | `(.requirements)`, pattern, or construction | rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/ConsumerTypePlan.hs:165` | `RenderedType` | data | no | `mappedDependencies` | `mappedDependencies` | `!(Set MappedKey)` | `(.mappedDependencies)`, pattern, or construction | rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/ConsumerTypePlan.hs:166` | `RenderedType` | data | no | `nominalDependencies` | `nominalDependencies` | `!(Set Text)` | `(.nominalDependencies)`, pattern, or construction | rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:67` | `RouterSelectionSnapshot` | data | yes | `selectionRouter` | `router` | `!Name` | `(.router)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:68` | `RouterSelectionSnapshot` | data | yes | `selectionVerification` | `verification` | `!SelectionVerification` | `(.verification)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:69` | `RouterSelectionSnapshot` | data | yes | `selectionIdentity` | `identity` | `!(Maybe Text)` | `(.identity)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:70` | `RouterSelectionSnapshot` | data | yes | `selectionVersion` | `version` | `!(Maybe Natural)` | `(.version)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:71` | `RouterSelectionSnapshot` | data | yes | `selectionFingerprint` | `fingerprint` | `!(Maybe Text)` | `(.fingerprint)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:76` | `CoordinationImpact` | data | yes | `coordinationRouter` | `router` | `!Name` | `(.router)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:77` | `CoordinationImpact` | data | yes | `coordinationSeverity` | `severity` | `!CoordinationSeverity` | `(.severity)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:78` | `CoordinationImpact` | data | yes | `coordinationReason` | `reason` | `!CoordinationReason` | `(.reason)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:79` | `CoordinationImpact` | data | yes | `previousVerification` | `previousVerification` | `!SelectionVerification` | `(.previousVerification)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:80` | `CoordinationImpact` | data | yes | `currentVerification` | `currentVerification` | `!SelectionVerification` | `(.currentVerification)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:81` | `CoordinationImpact` | data | yes | `previousIdentity` | `previousIdentity` | `!(Maybe Text)` | `(.previousIdentity)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:82` | `CoordinationImpact` | data | yes | `currentIdentity` | `currentIdentity` | `!(Maybe Text)` | `(.currentIdentity)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:83` | `CoordinationImpact` | data | yes | `previousVersion` | `previousVersion` | `!(Maybe Natural)` | `(.previousVersion)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:84` | `CoordinationImpact` | data | yes | `currentVersion` | `currentVersion` | `!(Maybe Natural)` | `(.currentVersion)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:85` | `CoordinationImpact` | data | yes | `previousFingerprint` | `previousFingerprint` | `!(Maybe Text)` | `(.previousFingerprint)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:86` | `CoordinationImpact` | data | yes | `currentFingerprint` | `currentFingerprint` | `!(Maybe Text)` | `(.currentFingerprint)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:87` | `CoordinationImpact` | data | yes | `affectedUseSites` | `affectedUseSites` | `![UseSite]` | `(.affectedUseSites)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:92` | `RouterSelectionDrift` | data | yes | `driftRouter` | `router` | `!Name` | `(.router)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:93` | `RouterSelectionDrift` | data | yes | `driftPreviousSelection` | `previousSelection` | `!(Maybe RouterSelectionSnapshot)` | `(.previousSelection)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:94` | `RouterSelectionDrift` | data | yes | `driftCurrentSelection` | `currentSelection` | `!(Maybe RouterSelectionSnapshot)` | `(.currentSelection)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:102` | `ProcessReactionSnapshot` | data | yes | `process` | `process` | `!Name` | `(.process)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:103` | `ProcessReactionSnapshot` | data | yes | `verification` | `verification` | `!Text` | `(.verification)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:104` | `ProcessReactionSnapshot` | data | yes | `version` | `version` | `!(Maybe Natural)` | `(.version)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:105` | `ProcessReactionSnapshot` | data | yes | `fingerprint` | `fingerprint` | `!(Maybe Text)` | `(.fingerprint)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:110` | `ProcessReactionDrift` | data | yes | `process` | `process` | `!Name` | `(.process)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:111` | `ProcessReactionDrift` | data | yes | `previousReaction` | `previousReaction` | `!(Maybe ProcessReactionSnapshot)` | `(.previousReaction)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:112` | `ProcessReactionDrift` | data | yes | `currentReaction` | `currentReaction` | `!(Maybe ProcessReactionSnapshot)` | `(.currentReaction)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:302` | `RouterSelectionState` | data | no | `stateSnapshot` | `snapshot` | `!RouterSelectionSnapshot` | `(.snapshot)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:303` | `RouterSelectionState` | data | no | `stateUseSites` | `useSites` | `![UseSite]` | `(.useSites)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:68` | `CoverageRoot` | data | yes | `rootSurface` | `surface` | `!CoverageSurface` | `(.surface)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:69` | `CoverageRoot` | data | yes | `rootConsumer` | `consumer` | `!Text` | `(.consumer)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:70` | `CoverageRoot` | data | yes | `rootPath` | `path` | `!Text` | `(.path)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:71` | `CoverageRoot` | data | yes | `rootMappedType` | `mappedType` | `!Text` | `(.mappedType)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:72` | `CoverageRoot` | data | yes | `rootMode` | `mode` | `!CoverageMode` | `(.mode)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:73` | `CoverageRoot` | data | yes | `rootCanonicalType` | `canonicalType` | `!(Maybe Text)` | `(.canonicalType)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:74` | `CoverageRoot` | data | yes | `rootCodecIdentity` | `codecIdentity` | `!(Maybe Text)` | `(.codecIdentity)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:75` | `CoverageRoot` | data | yes | `rootCodecVersion` | `codecVersion` | `!(Maybe Text)` | `(.codecVersion)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:76` | `CoverageRoot` | data | yes | `rootWireFingerprint` | `wireFingerprint` | `!Text` | `(.wireFingerprint)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:81` | `StructuralBoundary` | data | yes | `structuralRoot` | `root` | `!Text` | `(.root)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:82` | `StructuralBoundary` | data | yes | `structuralPath` | `path` | `!Text` | `(.path)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:83` | `StructuralBoundary` | data | yes | `structuralMappedType` | `mappedType` | `!Text` | `(.mappedType)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:84` | `StructuralBoundary` | data | yes | `structuralCanonicalType` | `canonicalType` | `!Text` | `(.canonicalType)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:85` | `StructuralBoundary` | data | yes | `structuralWireFingerprint` | `wireFingerprint` | `!Text` | `(.wireFingerprint)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:90` | `OpaqueBoundary` | data | yes | `opaqueRoot` | `root` | `!Text` | `(.root)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:91` | `OpaqueBoundary` | data | yes | `opaquePath` | `path` | `!Text` | `(.path)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:92` | `OpaqueBoundary` | data | yes | `opaqueMappedType` | `mappedType` | `!Text` | `(.mappedType)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:93` | `OpaqueBoundary` | data | yes | `opaqueCodecIdentity` | `codecIdentity` | `!Text` | `(.codecIdentity)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:94` | `OpaqueBoundary` | data | yes | `opaqueCodecVersion` | `codecVersion` | `!Text` | `(.codecVersion)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:99` | `JsonBoundary` | data | yes | `jsonSurface` | `surface` | `!CoverageSurface` | `(.surface)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:100` | `JsonBoundary` | data | yes | `jsonRoot` | `root` | `!Text` | `(.root)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:101` | `JsonBoundary` | data | yes | `jsonPath` | `path` | `!Text` | `(.path)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:106` | `NominalBoundary` | data | yes | `root` | `root` | `!Text` | `(.root)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:107` | `NominalBoundary` | data | yes | `path` | `path` | `!Text` | `(.path)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:108` | `NominalBoundary` | data | yes | `position` | `position` | `!Text` | `(.position)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:109` | `NominalBoundary` | data | yes | `nominal` | `nominal` | `!Text` | `(.nominal)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:110` | `NominalBoundary` | data | yes | `kind` | `kind` | `!Text` | `(.kind)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:111` | `NominalBoundary` | data | yes | `prefix` | `prefix` | `!(Maybe Text)` | `(.prefix)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:112` | `NominalBoundary` | data | yes | `domainVersion` | `domainVersion` | `!(Maybe Text)` | `(.domainVersion)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:113` | `NominalBoundary` | data | yes | `canonicalType` | `canonicalType` | `!(Maybe Text)` | `(.canonicalType)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:114` | `NominalBoundary` | data | yes | `ownership` | `ownership` | `!Text` | `(.ownership)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:119` | `SnapshotBoundary` | data | yes | `snapshotRoot` | `root` | `!Text` | `(.root)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:120` | `SnapshotBoundary` | data | yes | `snapshotAggregate` | `aggregate` | `!Text` | `(.aggregate)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:121` | `SnapshotBoundary` | data | yes | `snapshotRegister` | `register` | `!Text` | `(.register)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:122` | `SnapshotBoundary` | data | yes | `snapshotMappedType` | `mappedType` | `!Text` | `(.mappedType)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:123` | `SnapshotBoundary` | data | yes | `snapshotMode` | `mode` | `!CoverageMode` | `(.mode)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:124` | `SnapshotBoundary` | data | yes | `snapshotEncoding` | `encoding` | `!Text` | `(.encoding)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:125` | `SnapshotBoundary` | data | yes | `snapshotInvalidation` | `invalidation` | `!Text` | `(.invalidation)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:126` | `SnapshotBoundary` | data | yes | `snapshotWireFingerprint` | `wireFingerprint` | `!Text` | `(.wireFingerprint)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:127` | `SnapshotBoundary` | data | yes | `snapshotEnabled` | `enabled` | `!Bool` | `(.enabled)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:132` | `UnsupportedSurface` | data | yes | `unsupportedSurface` | `surface` | `!Text` | `(.surface)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:133` | `UnsupportedSurface` | data | yes | `unsupportedSupport` | `support` | `!Text` | `(.support)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:134` | `UnsupportedSurface` | data | yes | `unsupportedReason` | `reason` | `!Text` | `(.reason)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:139` | `CoverageCounts` | data | yes | `totalRoots` | `totalRoots` | `!Int` | `(.totalRoots)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:140` | `CoverageCounts` | data | yes | `structuralRoots` | `structuralRoots` | `!Int` | `(.structuralRoots)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:141` | `CoverageCounts` | data | yes | `opaqueRoots` | `opaqueRoots` | `!Int` | `(.opaqueRoots)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:142` | `CoverageCounts` | data | yes | `jsonBoundaries` | `jsonBoundaries` | `!Int` | `(.jsonBoundaries)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:147` | `CoverageSummary` | data | yes | `aggregateCommandPayloads` | `aggregateCommandPayloads` | `!CoverageCounts` | `(.aggregateCommandPayloads)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:148` | `CoverageSummary` | data | yes | `privateEventPayloads` | `privateEventPayloads` | `!CoverageCounts` | `(.privateEventPayloads)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:149` | `CoverageSummary` | data | yes | `snapshotRegisters` | `snapshotRegisters` | `!CoverageCounts` | `(.snapshotRegisters)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:150` | `CoverageSummary` | data | yes | `workqueuePayloads` | `workqueuePayloads` | `!CoverageCounts` | `(.workqueuePayloads)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:151` | `CoverageSummary` | data | yes | `readModelQueryInputs` | `readModelQueryInputs` | `!CoverageCounts` | `(.readModelQueryInputs)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:152` | `CoverageSummary` | data | yes | `readModelQueryResults` | `readModelQueryResults` | `!CoverageCounts` | `(.readModelQueryResults)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:153` | `CoverageSummary` | data | yes | `projectionTypedConsumers` | `projectionTypedConsumers` | `!CoverageCounts` | `(.projectionTypedConsumers)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:158` | `CoverageFinding` | data | yes | `findingSeverity` | `severity` | `!Severity` | `(.severity)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:159` | `CoverageFinding` | data | yes | `findingCode` | `code` | `!DiagnosticCode` | `(.code)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:160` | `CoverageFinding` | data | yes | `findingRoots` | `roots` | `![Text]` | `(.roots)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:161` | `CoverageFinding` | data | yes | `findingMessage` | `message` | `!Text` | `(.message)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:166` | `CoveragePrevious` | data | yes | `previousReference` | `reference` | `!Text` | `(.reference)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:167` | `CoveragePrevious` | data | yes | `previousSummary` | `summary` | `!CoverageSummary` | `(.summary)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:168` | `CoveragePrevious` | data | yes | `previousOpaqueBoundaries` | `opaqueBoundaries` | `![OpaqueBoundary]` | `(.opaqueBoundaries)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:173` | `CoverageDelta` | data | yes | `aggregateCommandRootDelta` | `aggregateCommandRootDelta` | `!Int` | `(.aggregateCommandRootDelta)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:174` | `CoverageDelta` | data | yes | `privateEventRootDelta` | `privateEventRootDelta` | `!Int` | `(.privateEventRootDelta)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:175` | `CoverageDelta` | data | yes | `snapshotRegisterRootDelta` | `snapshotRegisterRootDelta` | `!Int` | `(.snapshotRegisterRootDelta)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:176` | `CoverageDelta` | data | yes | `workqueuePayloadRootDelta` | `workqueuePayloadRootDelta` | `!Int` | `(.workqueuePayloadRootDelta)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:177` | `CoverageDelta` | data | yes | `readModelQueryInputRootDelta` | `readModelQueryInputRootDelta` | `!Int` | `(.readModelQueryInputRootDelta)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:178` | `CoverageDelta` | data | yes | `readModelQueryResultRootDelta` | `readModelQueryResultRootDelta` | `!Int` | `(.readModelQueryResultRootDelta)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:179` | `CoverageDelta` | data | yes | `projectionTypedConsumerRootDelta` | `projectionTypedConsumerRootDelta` | `!Int` | `(.projectionTypedConsumerRootDelta)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:180` | `CoverageDelta` | data | yes | `opaqueBoundaryDelta` | `opaqueBoundaryDelta` | `!Int` | `(.opaqueBoundaryDelta)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:181` | `CoverageDelta` | data | yes | `addedOpaqueBoundaries` | `addedOpaqueBoundaries` | `![OpaqueBoundary]` | `(.addedOpaqueBoundaries)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:182` | `CoverageDelta` | data | yes | `removedOpaqueBoundaries` | `removedOpaqueBoundaries` | `![OpaqueBoundary]` | `(.removedOpaqueBoundaries)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:187` | `CoverageReport` | data | yes | `coverageSpec` | `spec` | `!FilePath` | `(.spec)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:188` | `CoverageReport` | data | yes | `coverageRoots` | `roots` | `![CoverageRoot]` | `(.roots)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:189` | `CoverageReport` | data | yes | `coverageStructuralBoundaries` | `structuralBoundaries` | `![StructuralBoundary]` | `(.structuralBoundaries)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:190` | `CoverageReport` | data | yes | `coverageOpaqueBoundaries` | `opaqueBoundaries` | `![OpaqueBoundary]` | `(.opaqueBoundaries)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:191` | `CoverageReport` | data | yes | `coverageJsonBoundaries` | `jsonBoundaries` | `![JsonBoundary]` | `(.jsonBoundaries)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:192` | `CoverageReport` | data | yes | `nominalBoundaries` | `nominalBoundaries` | `![NominalBoundary]` | `(.nominalBoundaries)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:193` | `CoverageReport` | data | yes | `coverageSnapshotBoundaries` | `snapshotBoundaries` | `![SnapshotBoundary]` | `(.snapshotBoundaries)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:194` | `CoverageReport` | data | yes | `coverageUnsupportedSurfaces` | `unsupportedSurfaces` | `![UnsupportedSurface]` | `(.unsupportedSurfaces)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:195` | `CoverageReport` | data | yes | `coverageSummary` | `summary` | `!CoverageSummary` | `(.summary)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:196` | `CoverageReport` | data | yes | `coverageFindings` | `findings` | `![CoverageFinding]` | `(.findings)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:197` | `CoverageReport` | data | yes | `coveragePrevious` | `previous` | `!(Maybe CoveragePrevious)` | `(.previous)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:198` | `CoverageReport` | data | yes | `coverageDelta` | `delta` | `!(Maybe CoverageDelta)` | `(.delta)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Diff.hs:143` | `CompatibilityVector` | data | yes | `cvPrivateHistoryRead` | `privateHistoryRead` | `!SurfaceVerdict` | `(.privateHistoryRead)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Diff.hs:144` | `CompatibilityVector` | data | yes | `cvOldBinaryReadNewEvents` | `oldBinaryReadNewEvents` | `!SurfaceVerdict` | `(.oldBinaryReadNewEvents)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Diff.hs:145` | `CompatibilityVector` | data | yes | `cvSnapshotHydration` | `snapshotHydration` | `!SurfaceVerdict` | `(.snapshotHydration)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Diff.hs:146` | `CompatibilityVector` | data | yes | `cvPublicConsumer` | `publicConsumer` | `!SurfaceVerdict` | `(.publicConsumer)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Diff.hs:147` | `CompatibilityVector` | data | yes | `cvPersistedIdentity` | `persistedIdentity` | `!SurfaceVerdict` | `(.persistedIdentity)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Diff.hs:148` | `CompatibilityVector` | data | yes | `cvConsumerBuild` | `consumerBuild` | `!SurfaceVerdict` | `(.consumerBuild)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Diff.hs:149` | `CompatibilityVector` | data | yes | `cvRollout` | `rollout` | `!(Set RolloutConstraint)` | `(.rollout)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Diff.hs:162` | `MappedPersistedImpact` | data | yes | `mappedPersistedSurface` | `surface` | `!MappedPersistedSurface` | `(.surface)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Diff.hs:163` | `MappedPersistedImpact` | data | yes | `mappedPersistedVerdict` | `verdict` | `!SurfaceVerdict` | `(.verdict)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Diff.hs:181` | `ChangeContext` | data | no | `changeContextRoot` | `root` | `!Name` | `(.root)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Diff.hs:182` | `ChangeContext` | data | no | `changeContextPaths` | `paths` | `![Text]` | `(.paths)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Diff.hs:183` | `ChangeContext` | data | no | `contextKind` | `contextKind` | `!ContextKind` | `(.contextKind)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Diff.hs:184` | `ChangeContext` | data | no | `contextOriginalLabel` | `contextOriginalLabel` | `!Label` | `(.contextOriginalLabel)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Diff.hs:195` | `ChangeKind` | data | yes | `ckNode` | `node` | `!Name` | `(.node)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Diff.hs:196` | `ChangeKind` | data | yes | `ckFacet` | `facet` | `!Text` | `(.facet)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Diff.hs:197` | `ChangeKind` | data | yes | `ckSubject` | `subject` | `!Text` | `(.subject)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Diff.hs:198` | `ChangeKind` | data | yes | `ckCode` | `code` | `!DiagnosticCode` | `(.code)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Diff.hs:199` | `ChangeKind` | data | yes | `ckContext` | `context` | `!ChangeContext` | `(.context)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Diff.hs:200` | `ChangeKind` | data | yes | `ckVector` | `vector` | `!CompatibilityVector` | `(.vector)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Diff.hs:201` | `ChangeKind` | data | yes | `ckMappedPersistedImpact` | `mappedPersistedImpact` | `!(Maybe MappedPersistedImpact)` | `(.mappedPersistedImpact)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Diff.hs:202` | `ChangeKind` | data | yes | `ckMappedConsequences` | `mappedConsequences` | `!(Set MappedConsequence)` | `(.mappedConsequences)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Diff.hs:203` | `ChangeKind` | data | yes | `ckPaths` | `paths` | `![Text]` | `(.paths)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Diff.hs:204` | `ChangeKind` | data | yes | `ckDetail` | `detail` | `!Text` | `(.detail)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Diff.hs:708` | `DiffEnv` | data | yes | `deOld` | `old` | `!Spec` | `(.old)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Diff.hs:709` | `DiffEnv` | data | yes | `deNew` | `new` | `!Spec` | `(.new)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Diff.hs:710` | `DiffEnv` | data | yes | `oldService` | `oldService` | `!CheckedService` | `(.oldService)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Diff.hs:711` | `DiffEnv` | data | yes | `newService` | `newService` | `!CheckedService` | `(.newService)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Diff.hs:712` | `DiffEnv` | data | yes | `newValidationErrors` | `newValidationErrors` | `![Diagnostic]` | `(.newValidationErrors)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Diff.hs:764` | `Paired` | data | yes | `prMatched` | `matched` | `![(n, n)]` | `(.matched)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Diff.hs:765` | `Paired` | data | yes | `prAdded` | `added` | `![n]` | `(.added)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Diff.hs:766` | `Paired` | data | yes | `prRemoved` | `removed` | `![n]` | `(.removed)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Diff.hs:1817` | `GuardProposal` | data | no | `proposalBody` | `body` | `!ReplayBodyDelta` | `(.body)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Diff.hs:1818` | `GuardProposal` | data | no | `proposalTwin` | `twin` | `!Transition` | `(.twin)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Diff.hs:2207` | `EventFieldSig` | data | no | `eventFieldDslName` | `dslName` | `!Name` | `(.dslName)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Diff.hs:2208` | `EventFieldSig` | data | no | `eventFieldSelector` | `selector` | `!Name` | `(.selector)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Diff.hs:2209` | `EventFieldSig` | data | no | `eventFieldWireKey` | `wireKey` | `!Text` | `(.wireKey)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Diff.hs:2210` | `EventFieldSig` | data | no | `eventFieldType` | `valueType` | `!(Maybe TypeExpr)` | `(.valueType)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/DiffReport.hs:74` | `DiffReport` | data | no | `reportGate` | `gate` | `!(Set CompatibilitySurface)` | `(.gate)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/DiffReport.hs:75` | `DiffReport` | data | no | `reportFindings` | `findings` | `![Change]` | `(.findings)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/DiffReport.hs:76` | `DiffReport` | data | no | `reportSemanticImpact` | `semanticImpact` | `!(Maybe [MappedImpactDelta])` | `(.semanticImpact)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/DiffReport.hs:77` | `DiffReport` | data | no | `reportCoordinationImpact` | `coordinationImpact` | `!(Maybe [CoordinationImpact])` | `(.coordinationImpact)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/DiffReport.hs:97` | `OwnedSite` | data | yes | `osFile` | `file` | `!FilePath` | `(.file)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/DiffReport.hs:98` | `OwnedSite` | data | yes | `osLine` | `line` | `!Int` | `(.line)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/DiffReport.hs:104` | `WorkspaceChange` | data | yes | `wcChange` | `change` | `!Change` | `(.change)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/DiffReport.hs:105` | `WorkspaceChange` | data | yes | `wcDeclarationSite` | `declarationSite` | `!(Maybe OwnedSite)` | `(.declarationSite)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/DiffReport.hs:106` | `WorkspaceChange` | data | yes | `wcUseSites` | `useSites` | `![(Text, Maybe OwnedSite)]` | `(.useSites)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/DiffReport.hs:112` | `WorkspaceMeta` | data | yes | `wmIdentity` | `identity` | `!Text` | `(.identity)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/DiffReport.hs:113` | `WorkspaceMeta` | data | yes | `wmManifest` | `manifest` | `!FilePath` | `(.manifest)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/DiffReport.hs:114` | `WorkspaceMeta` | data | yes | `wmSince` | `since` | `!Text` | `(.since)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/DiffReport.hs:115` | `WorkspaceMeta` | data | yes | `wmMembersOld` | `membersOld` | `![FilePath]` | `(.membersOld)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/DiffReport.hs:116` | `WorkspaceMeta` | data | yes | `wmMembersNew` | `membersNew` | `![FilePath]` | `(.membersNew)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/DiffReport.hs:117` | `WorkspaceMeta` | data | yes | `wmAdoptionBaseline` | `adoptionBaseline` | `!Bool` | `(.adoptionBaseline)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/DiffReport.hs:122` | `WorkspaceDiffReport` | data | no | `workspaceReportMeta` | `meta` | `!WorkspaceMeta` | `(.meta)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/DiffReport.hs:123` | `WorkspaceDiffReport` | data | no | `workspaceReportGate` | `gate` | `!(Set CompatibilitySurface)` | `(.gate)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/DiffReport.hs:124` | `WorkspaceDiffReport` | data | no | `workspaceReportFindings` | `findings` | `![WorkspaceChange]` | `(.findings)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/DiffReport.hs:125` | `WorkspaceDiffReport` | data | no | `workspaceReportSemanticImpact` | `semanticImpact` | `!(Maybe [MappedImpactDelta])` | `(.semanticImpact)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/DiffReport.hs:126` | `WorkspaceDiffReport` | data | no | `workspaceReportCoordinationImpact` | `coordinationImpact` | `!(Maybe [CoordinationImpact])` | `(.coordinationImpact)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/EventOutput.hs:36` | `CheckedFieldCopy` | data | yes | `outputSelector` | `outputSelector` | `!Name` | `(.outputSelector)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/EventOutput.hs:37` | `CheckedFieldCopy` | data | yes | `outputWireName` | `outputWireName` | `!Text` | `(.outputWireName)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/EventOutput.hs:38` | `CheckedFieldCopy` | data | yes | `outputFieldType` | `outputFieldType` | `!ResolvedAggregateType` | `(.outputFieldType)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/EventOutput.hs:43` | `OutputObligationKey` | newtype | yes | `unOutputObligationKey` | `unOutputObligationKey` | `Text` | explicit `unOutputObligationKey` positional function | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/EventOutput.hs:52` | `EventOutputMapping` | data | yes | `outputSourceCommand` | `sourceCommand` | `!Name` | `(.sourceCommand)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/EventOutput.hs:53` | `EventOutputMapping` | data | yes | `outputFields` | `fields` | `![CheckedFieldCopy]` | `(.fields)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/EventOutput.hs:56` | `EventOutputMapping` | data | yes | `outputObligation` | `obligation` | `!OutputObligationKey` | `(.obligation)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/EventOutput.hs:64` | `EventOutputError` | data | yes | `declaredSourceCommand` | `declaredSourceCommand` | `!Name` | `(.declaredSourceCommand)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/EventOutput.hs:65` | `EventOutputError` | data | yes | `consumingTransitionCommand` | `consumingTransitionCommand` | `!Name` | `(.consumingTransitionCommand)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/EventOutput.hs:66` | `EventOutputError` | data | yes | `emittedEventName` | `emittedEventName` | `!Name` | `(.emittedEventName)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ExplainBindings.hs:46` | `BindingObligation` | data | yes | `obligationMappedName` | `mappedName` | `!Name` | `(.mappedName)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ExplainBindings.hs:47` | `BindingObligation` | data | yes | `obligationPackage` | `package` | `!Text` | `(.package)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ExplainBindings.hs:48` | `BindingObligation` | data | yes | `obligationModule` | `moduleName` | `!Text` | `(.moduleName)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ExplainBindings.hs:49` | `BindingObligation` | data | yes | `obligationSymbol` | `symbol` | `!Text` | `(.symbol)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ExplainBindings.hs:50` | `BindingObligation` | data | yes | `obligationKind` | `kind` | `!BindingObligationKind` | `(.kind)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ExplainBindings.hs:51` | `BindingObligation` | data | yes | `obligationSignature` | `signature` | `!Text` | `(.signature)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ExplainBindings.hs:52` | `BindingObligation` | data | yes | `obligationUseSites` | `useSites` | `![Text]` | `(.useSites)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ExplainBindings.hs:53` | `BindingObligation` | data | yes | `obligationBindingVersion` | `bindingVersion` | `!(Maybe Text)` | `(.bindingVersion)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ExplainBindings.hs:54` | `BindingObligation` | data | yes | `obligationCanonicalType` | `canonicalType` | `!(Maybe Text)` | `(.canonicalType)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ExplainBindings.hs:55` | `BindingObligation` | data | yes | `obligationEqualityContract` | `equalityContract` | `!(Maybe Text)` | `(.equalityContract)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ExplainBindings.hs:56` | `BindingObligation` | data | yes | `obligationIdDomainContract` | `idDomainContract` | `!(Maybe Text)` | `(.idDomainContract)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ExplainBindings.hs:57` | `BindingObligation` | data | yes | `obligationCategory` | `category` | `!Text` | `(.category)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ExplainBindings.hs:62` | `BindingHole` | data | yes | `holeMappedName` | `mappedName` | `!Name` | `(.mappedName)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ExplainBindings.hs:63` | `BindingHole` | data | yes | `holeModule` | `moduleName` | `!Text` | `(.moduleName)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ExplainBindings.hs:64` | `BindingHole` | data | yes | `holeSymbol` | `symbol` | `!Text` | `(.symbol)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ExplainBindings.hs:65` | `BindingHole` | data | yes | `holeKind` | `kind` | `!BindingObligationKind` | `(.kind)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ExplainBindings.hs:66` | `BindingHole` | data | yes | `holePath` | `path` | `!(Maybe Text)` | `(.path)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ExplainBindings.hs:67` | `BindingHole` | data | yes | `holeSignature` | `signature` | `!Text` | `(.signature)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Expression.hs:45` | `ExpressionEnvironment` | data | no | `environmentSpec` | `spec` | `!Spec` | `(.spec)`, pattern, or construction | Haskell API and runtime semantics | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Expression.hs:46` | `ExpressionEnvironment` | data | no | `environmentAggregate` | `aggregate` | `!Aggregate` | `(.aggregate)`, pattern, or construction | Haskell API and runtime semantics | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Expression.hs:47` | `ExpressionEnvironment` | data | no | `environmentTransition` | `transition` | `!Transition` | `(.transition)`, pattern, or construction | Haskell API and runtime semantics | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Expression.hs:48` | `ExpressionEnvironment` | data | no | `environmentSymbols` | `symbols` | `!AggregateSymbols` | `(.symbols)`, pattern, or construction | Haskell API and runtime semantics | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Expression.hs:49` | `ExpressionEnvironment` | data | no | `environmentTypeGraph` | `typeGraph` | `!(Maybe TypeGraph)` | `(.typeGraph)`, pattern, or construction | Haskell API and runtime semantics | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Expression.hs:88` | `ResolvedScalarProjection` | data | yes | `scalarProjectionOwner` | `owner` | `!MappedKey` | `(.owner)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Expression.hs:89` | `ResolvedScalarProjection` | data | yes | `scalarProjectionPointer` | `pointer` | `!Text` | `(.pointer)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Expression.hs:90` | `ResolvedScalarProjection` | data | yes | `scalarProjectionFields` | `fields` | `![Name]` | `(.fields)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Expression.hs:91` | `ResolvedScalarProjection` | data | yes | `terminalNominal` | `terminalNominal` | `!(Maybe NominalLeaf)` | `(.terminalNominal)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Expression.hs:126` | `TypedScalarExpr` | data | yes | `typedScalarType` | `valueType` | `!ResolvedAggregateType` | `(.valueType)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Expression.hs:127` | `TypedScalarExpr` | data | yes | `typedScalarLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Expression.hs:128` | `TypedScalarExpr` | data | yes | `typedScalarNode` | `node` | `!TypedScalarNode` | `(.node)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Expression.hs:150` | `ExpressionDiagnostic` | data | yes | `expressionDiagnosticLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Expression.hs:151` | `ExpressionDiagnostic` | data | yes | `expressionDiagnosticCode` | `code` | `!ExpressionDiagnosticCode` | `(.code)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Expression.hs:152` | `ExpressionDiagnostic` | data | yes | `expressionDiagnosticMessage` | `message` | `!Text` | `(.message)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/FieldIdentity.hs:18` | `ResolvedFieldIdentity` | data | no | `fieldDslName` | `dslName` | `!Name` | `(.dslName)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/FieldIdentity.hs:19` | `ResolvedFieldIdentity` | data | no | `fieldSelector` | `selector` | `!Text` | `(.selector)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/FieldIdentity.hs:20` | `ResolvedFieldIdentity` | data | no | `fieldWireKey` | `wireKey` | `!Text` | `(.wireKey)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/FieldIdentity.hs:21` | `ResolvedFieldIdentity` | data | no | `fieldLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Frontend/Internal.hs:55` | `FrontendContext` | data | no | `source` | `source` | `!FilePath` | `(.source)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Frontend/Internal.hs:56` | `FrontendContext` | data | no | `language` | `language` | `!SourceLanguage` | `(.language)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Frontend/Internal.hs:57` | `FrontendContext` | data | no | `definition` | `definition` | `!LanguageDefinition` | `(.definition)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Frontend/Internal.hs:91` | `FrontendFailure` | data | no | `phase` | `phase` | `!FrontendPhase` | `(.phase)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Frontend/Internal.hs:92` | `FrontendFailure` | data | no | `code` | `code` | `!FrontendErrorCode` | `(.code)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Frontend/Internal.hs:93` | `FrontendFailure` | data | no | `span` | `span` | `!SourceSpan` | `(.span)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Frontend/Internal.hs:94` | `FrontendFailure` | data | no | `message` | `message` | `!Text` | `(.message)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Frontend/Internal.hs:95` | `FrontendFailure` | data | no | `expected` | `expected` | `![Text]` | `(.expected)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Frontend/Internal.hs:96` | `FrontendFailure` | data | no | `supportedVersions` | `supportedVersions` | `![LanguageVersion]` | `(.supportedVersions)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Frontend/Internal.hs:97` | `FrontendFailure` | data | no | `compatibility` | `compatibility` | `!ParseFailure` | `(.compatibility)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Frontend/Internal.hs:143` | `LoweringFailure` | data | no | `code` | `code` | `!LoweringFailureCode` | `(.code)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Frontend/Internal.hs:144` | `LoweringFailure` | data | no | `span` | `span` | `!SourceSpan` | `(.span)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Frontend/Internal.hs:145` | `LoweringFailure` | data | no | `message` | `message` | `!Text` | `(.message)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Goldens.hs:42` | `GoldenPayload` | data | yes | `goldenContext` | `context` | `!Text` | `(.context)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Goldens.hs:43` | `GoldenPayload` | data | yes | `goldenAggregate` | `aggregate` | `!Text` | `(.aggregate)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Goldens.hs:44` | `GoldenPayload` | data | yes | `goldenEvent` | `event` | `!Text` | `(.event)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Goldens.hs:45` | `GoldenPayload` | data | yes | `goldenVersion` | `version` | `!Int` | `(.version)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Goldens.hs:46` | `GoldenPayload` | data | yes | `goldenJson` | `json` | `!Text` | `(.json)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Goldens.hs:47` | `GoldenPayload` | data | yes | `goldenEvidence` | `evidence` | `!GoldenEvidence` | `(.evidence)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:206` | `Loc` | newtype | yes | `unLoc` | `unLoc` | `Int` | explicit `unLoc` positional function | rendered/canonical output | `deriving stock (Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:223` | `IdDecl` | data | yes | `idName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:224` | `IdDecl` | data | yes | `idPrefix` | `prefix` | `!Text` | `(.prefix)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:225` | `IdDecl` | data | yes | `admission` | `admission` | `!IdAdmission` | `(.admission)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:226` | `IdDecl` | data | yes | `idBinding` | `binding` | `!(Maybe NominalBindingDecl)` | `(.binding)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:227` | `IdDecl` | data | yes | `idLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:234` | `EnumDecl` | data | yes | `enumName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:235` | `EnumDecl` | data | yes | `enumCtors` | `ctors` | `![(Name, Text)]` | `(.ctors)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:236` | `EnumDecl` | data | yes | `enumBinding` | `binding` | `!(Maybe NominalBindingDecl)` | `(.binding)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:237` | `EnumDecl` | data | yes | `enumLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:245` | `RuleDecl` | data | yes | `ruleName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:246` | `RuleDecl` | data | yes | `ruleDomain` | `domain` | `!Name` | `(.domain)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:247` | `RuleDecl` | data | yes | `ruleCodomain` | `codomain` | `!Name` | `(.codomain)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:248` | `RuleDecl` | data | yes | `ruleCases` | `cases` | `![(Name, Expr)]` | `(.cases)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:249` | `RuleDecl` | data | yes | `ruleLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:292` | `WireField` | data | yes | `wfHaskell` | `haskell` | `!Name` | `(.haskell)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:293` | `WireField` | data | yes | `wfKey` | `key` | `!Text` | `(.key)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:294` | `WireField` | data | yes | `wfType` | `valueType` | `!TypeExpr` | `(.valueType)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:295` | `WireField` | data | yes | `wfPresence` | `presence` | `!Presence` | `(.presence)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:296` | `WireField` | data | yes | `wfOnMissing` | `onMissing` | `!(Maybe OnMissing)` | `(.onMissing)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:297` | `WireField` | data | yes | `wfLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:305` | `UnionEncoding` | data | yes | `ueTagField` | `tagField` | `!Text` | `(.tagField)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:306` | `UnionEncoding` | data | yes | `ueContentsField` | `contentsField` | `!Text` | `(.contentsField)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:307` | `UnionEncoding` | data | yes | `ueUnknownFields` | `unknownFields` | `!UnknownFields` | `(.unknownFields)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:312` | `WireEnum` | data | yes | `weCtor` | `ctor` | `!Name` | `(.ctor)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:313` | `WireEnum` | data | yes | `weTag` | `tag` | `!Text` | `(.tag)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:314` | `WireEnum` | data | yes | `weLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:319` | `WireArm` | data | yes | `waCtor` | `ctor` | `!Name` | `(.ctor)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:320` | `WireArm` | data | yes | `waTag` | `tag` | `!Text` | `(.tag)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:321` | `WireArm` | data | yes | `waPayload` | `payload` | `!(Maybe TypeExpr)` | `(.payload)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:322` | `WireArm` | data | yes | `waLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:341` | `HaskellSource` | data | yes | `hsPackage` | `package` | `!Text` | `(.package)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:342` | `HaskellSource` | data | yes | `hsModule` | `moduleName` | `!Text` | `(.moduleName)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:343` | `HaskellSource` | data | yes | `hsType` | `valueType` | `!Name` | `(.valueType)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:352` | `NominalBindingDecl` | data | yes | `nominalHaskell` | `haskell` | `!(Maybe HaskellSource)` | `(.haskell)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:353` | `NominalBindingDecl` | data | yes | `nominalBinding` | `binding` | `!(Maybe Text)` | `(.binding)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:354` | `NominalBindingDecl` | data | yes | `nominalBindingVersion` | `bindingVersion` | `!(Maybe Text)` | `(.bindingVersion)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:355` | `NominalBindingDecl` | data | yes | `nominalCanonicalType` | `canonicalType` | `!(Maybe Text)` | `(.canonicalType)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:356` | `NominalBindingDecl` | data | yes | `nominalFixtures` | `fixtures` | `!(Maybe Text)` | `(.fixtures)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:357` | `NominalBindingDecl` | data | yes | `nominalInitial` | `initial` | `!(Maybe Text)` | `(.initial)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:358` | `NominalBindingDecl` | data | yes | `nominalLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:367` | `NominalScalarDecl` | data | yes | `nominalScalarName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:368` | `NominalScalarDecl` | data | yes | `nominalScalarRepresentation` | `representation` | `!Name` | `(.representation)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:369` | `NominalScalarDecl` | data | yes | `nominalScalarBinding` | `binding` | `!NominalBindingDecl` | `(.binding)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:370` | `NominalScalarDecl` | data | yes | `nominalScalarLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:376` | `MappedDecl` | data | yes | `msName` | `msName` | `!Name` | `(.msName)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:377` | `MappedDecl` | data | yes | `msHaskell` | `msHaskell` | `!(Maybe HaskellSource)` | `(.msHaskell)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:378` | `MappedDecl` | data | yes | `msBinding` | `msBinding` | `!(Maybe Text)` | `(.msBinding)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:379` | `MappedDecl` | data | yes | `msBindingVersion` | `msBindingVersion` | `!(Maybe Text)` | `(.msBindingVersion)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:380` | `MappedDecl` | data | yes | `msCanonical` | `msCanonical` | `!(Maybe Text)` | `(.msCanonical)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:381` | `MappedDecl` | data | yes | `msFixtures` | `msFixtures` | `!(Maybe Text)` | `(.msFixtures)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:382` | `MappedDecl` | data | yes | `msInitial` | `msInitial` | `!(Maybe Text)` | `(.msInitial)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:383` | `MappedDecl` | data | yes | `msShape` | `msShape` | `!MappedShape` | `(.msShape)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:384` | `MappedDecl` | data | yes | `msLoc` | `msLoc` | `!Loc` | `(.msLoc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:387` | `MappedDecl` | data | yes | `mrName` | `mrName` | `!Name` | `(.mrName)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:388` | `MappedDecl` | data | yes | `mrHaskell` | `mrHaskell` | `!(Maybe HaskellSource)` | `(.mrHaskell)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:389` | `MappedDecl` | data | yes | `mrBinding` | `mrBinding` | `!(Maybe Text)` | `(.mrBinding)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:390` | `MappedDecl` | data | yes | `mrBindingVersion` | `mrBindingVersion` | `!(Maybe Text)` | `(.mrBindingVersion)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:391` | `MappedDecl` | data | yes | `mrCanonical` | `mrCanonical` | `!(Maybe Text)` | `(.mrCanonical)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:392` | `MappedDecl` | data | yes | `mrFixtures` | `mrFixtures` | `!(Maybe Text)` | `(.mrFixtures)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:393` | `MappedDecl` | data | yes | `mrInitial` | `mrInitial` | `!(Maybe Text)` | `(.mrInitial)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:394` | `MappedDecl` | data | yes | `mrPolicy` | `mrPolicy` | `!RefinedWirePolicy` | `(.mrPolicy)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:395` | `MappedDecl` | data | yes | `mrLoc` | `mrLoc` | `!Loc` | `(.mrLoc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:398` | `MappedDecl` | data | yes | `moName` | `moName` | `!Name` | `(.moName)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:399` | `MappedDecl` | data | yes | `moHaskell` | `moHaskell` | `!(Maybe HaskellSource)` | `(.moHaskell)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:400` | `MappedDecl` | data | yes | `moCodecId` | `moCodecId` | `!(Maybe Text)` | `(.moCodecId)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:401` | `MappedDecl` | data | yes | `moCodecVersion` | `moCodecVersion` | `!(Maybe Text)` | `(.moCodecVersion)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:402` | `MappedDecl` | data | yes | `moFixtures` | `moFixtures` | `!(Maybe Text)` | `(.moFixtures)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:403` | `MappedDecl` | data | yes | `moInitial` | `moInitial` | `!(Maybe Text)` | `(.moInitial)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:404` | `MappedDecl` | data | yes | `moLoc` | `moLoc` | `!Loc` | `(.moLoc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:412` | `Mapping` | data | yes | `mapPairs` | `pairs` | `![(Name, Name)]` | `(.pairs)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:413` | `Mapping` | data | yes | `mapPartial` | `partial` | `!Bool` | `(.partial)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:523` | `RegDecl` | data | yes | `regName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:524` | `RegDecl` | data | yes | `regType` | `valueType` | `!TypeExpr` | `(.valueType)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:525` | `RegDecl` | data | yes | `regInitial` | `initial` | `!RegInitial` | `(.initial)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:526` | `RegDecl` | data | yes | `regLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:534` | `StateDecl` | data | yes | `stName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:535` | `StateDecl` | data | yes | `stTerminal` | `terminal` | `!Bool` | `(.terminal)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:536` | `StateDecl` | data | yes | `stLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:547` | `AggregateField` | data | yes | `aggregateFieldName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:548` | `AggregateField` | data | yes | `aggregateFieldSelector` | `selector` | `!(Maybe Name)` | `(.selector)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:549` | `AggregateField` | data | yes | `aggregateFieldWireKey` | `wireKey` | `!(Maybe Text)` | `(.wireKey)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:550` | `AggregateField` | data | yes | `aggregateFieldType` | `valueType` | `!(Maybe TypeExpr)` | `(.valueType)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:551` | `AggregateField` | data | yes | `aggregateFieldLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:558` | `Field` | data | yes | `fieldName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:559` | `Field` | data | yes | `fieldType` | `valueType` | `!(Maybe Name)` | `(.valueType)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:565` | `Command` | data | yes | `cmdName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:566` | `Command` | data | yes | `cmdFields` | `fields` | `![AggregateField]` | `(.fields)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:567` | `Command` | data | yes | `cmdLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:577` | `Event` | data | yes | `evName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:578` | `Event` | data | yes | `evBody` | `body` | `!EventBody` | `(.body)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:580` | `Event` | data | yes | `evVersion` | `version` | `!Int` | `(.version)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:583` | `Event` | data | yes | `evUpcastFrom` | `upcastFrom` | `!(Maybe (Int, Hole))` | `(.upcastFrom)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:588` | `Event` | data | yes | `evRetiring` | `retiring` | `!Bool` | `(.retiring)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:592` | `Event` | data | yes | `evDeprecated` | `deprecated` | `!Bool` | `(.deprecated)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:593` | `Event` | data | yes | `evLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:611` | `DomainOutcomeTypes` | data | yes | `rejectionType` | `rejectionType` | `!Name` | `(.rejectionType)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:612` | `DomainOutcomeTypes` | data | yes | `noOpType` | `noOpType` | `!Name` | `(.noOpType)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:613` | `DomainOutcomeTypes` | data | yes | `outcomeTypesLoc` | `outcomeTypesLoc` | `!Loc` | `(.outcomeTypesLoc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:633` | `Transition` | data | yes | `tSource` | `source` | `!Name` | `(.source)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:634` | `Transition` | data | yes | `tCommand` | `command` | `!Name` | `(.command)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:635` | `Transition` | data | yes | `tImplementation` | `implementation` | `!TransitionImplementation` | `(.implementation)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:636` | `Transition` | data | yes | `tGuard` | `guard` | `!(Maybe Expr)` | `(.guard)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:637` | `Transition` | data | yes | `tWrites` | `writes` | `![(Name, Expr)]` | `(.writes)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:638` | `Transition` | data | yes | `tEmits` | `emits` | `![Name]` | `(.emits)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:639` | `Transition` | data | yes | `tOutcome` | `outcome` | `!(Maybe TransitionOutcome)` | `(.outcome)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:642` | `Transition` | data | yes | `tOutcomeDuplicateLocs` | `outcomeDuplicateLocs` | `![Loc]` | `(.outcomeDuplicateLocs)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:643` | `Transition` | data | yes | `tGoto` | `goto` | `!Name` | `(.goto)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:644` | `Transition` | data | yes | `tMode` | `mode` | `!TransitionMode` | `(.mode)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:645` | `Transition` | data | yes | `tLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:673` | `WireSpec` | data | yes | `wireKind` | `kind` | `!Text` | `(.kind)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:674` | `WireSpec` | data | yes | `wireFields` | `fields` | `!Text` | `(.fields)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:675` | `WireSpec` | data | yes | `wireSchemaVersion` | `schemaVersion` | `!Int` | `(.schemaVersion)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:682` | `ProjectionSpec` | data | yes | `projTable` | `table` | `!Name` | `(.table)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:683` | `ProjectionSpec` | data | yes | `projConsistency` | `consistency` | `!(Maybe Consistency)` | `(.consistency)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:684` | `ProjectionSpec` | data | yes | `projKey` | `key` | `!Name` | `(.key)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:685` | `ProjectionSpec` | data | yes | `projStatusMap` | `statusMap` | `!(Maybe Mapping)` | `(.statusMap)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:686` | `ProjectionSpec` | data | yes | `projLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:699` | `SnapshotSpec` | data | yes | `snapPolicy` | `policy` | `!SnapPolicy` | `(.policy)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:700` | `SnapshotSpec` | data | yes | `snapCodecVersion` | `codecVersion` | `!Int` | `(.codecVersion)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:701` | `SnapshotSpec` | data | yes | `snapShapeHash` | `shapeHash` | `!Text` | `(.shapeHash)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:702` | `SnapshotSpec` | data | yes | `snapLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:709` | `Aggregate` | data | yes | `aggName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:710` | `Aggregate` | data | yes | `aggRegs` | `regs` | `![RegDecl]` | `(.regs)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:711` | `Aggregate` | data | yes | `aggStates` | `states` | `![StateDecl]` | `(.states)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:712` | `Aggregate` | data | yes | `aggCommands` | `commands` | `![Command]` | `(.commands)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:713` | `Aggregate` | data | yes | `aggEvents` | `events` | `![Event]` | `(.events)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:714` | `Aggregate` | data | yes | `aggTransitions` | `transitions` | `![Transition]` | `(.transitions)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:715` | `Aggregate` | data | yes | `aggDomainOutcomeTypes` | `domainOutcomeTypes` | `!(Maybe DomainOutcomeTypes)` | `(.domainOutcomeTypes)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:718` | `Aggregate` | data | yes | `aggDomainOutcomeDuplicateLocs` | `domainOutcomeDuplicateLocs` | `![Loc]` | `(.domainOutcomeDuplicateLocs)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:719` | `Aggregate` | data | yes | `aggWire` | `wire` | `!(Maybe WireSpec)` | `(.wire)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:720` | `Aggregate` | data | yes | `aggProjection` | `projection` | `!(Maybe ProjectionSpec)` | `(.projection)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:721` | `Aggregate` | data | yes | `aggSnapshot` | `snapshot` | `!(Maybe SnapshotSpec)` | `(.snapshot)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:722` | `Aggregate` | data | yes | `aggLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:732` | `FieldBinding` | data | yes | `fbName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:733` | `FieldBinding` | data | yes | `fbValue` | `value` | `!(Maybe Text)` | `(.value)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:740` | `InputDecl` | data | yes | `inName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:741` | `InputDecl` | data | yes | `inFields` | `fields` | `![Field]` | `(.fields)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:742` | `InputDecl` | data | yes | `inType` | `valueType` | `!(Maybe TypeExpr)` | `(.valueType)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:743` | `InputDecl` | data | yes | `inLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:750` | `CorrelateDecl` | data | yes | `corrField` | `field` | `!Name` | `(.field)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:751` | `CorrelateDecl` | data | yes | `corrVia` | `via` | `!Name` | `(.via)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:759` | `SagaRef` | data | yes | `sagaAgg` | `agg` | `!Name` | `(.agg)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:760` | `SagaRef` | data | yes | `sagaCategory` | `category` | `!Text` | `(.category)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:771` | `DispatchDisposition` | data | yes | `onAppended` | `onAppended` | `!Disp` | `(.onAppended)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:772` | `DispatchDisposition` | data | yes | `onDuplicate` | `onDuplicate` | `!Disp` | `(.onDuplicate)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:773` | `DispatchDisposition` | data | yes | `onFailed` | `onFailed` | `!Disp` | `(.onFailed)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:779` | `AdvanceNode` | data | yes | `advCommand` | `advCommand` | `!Name` | `(.advCommand)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:780` | `AdvanceNode` | data | yes | `advFields` | `advFields` | `![FieldBinding]` | `(.advFields)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:786` | `DispatchNode` | data | yes | `dispTarget` | `target` | `!Name` | `(.target)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:787` | `DispatchNode` | data | yes | `dispKey` | `key` | `!Text` | `(.key)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:788` | `DispatchNode` | data | yes | `dispCommand` | `command` | `!Name` | `(.command)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:789` | `DispatchNode` | data | yes | `dispFields` | `fields` | `![FieldBinding]` | `(.fields)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:790` | `DispatchNode` | data | yes | `disposition` | `osition` | `!DispatchDisposition` | `(.osition)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:791` | `DispatchNode` | data | yes | `dispLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:798` | `HandleNode` | data | yes | `hOn` | `on` | `!Name` | `(.on)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:799` | `HandleNode` | data | yes | `hAdvance` | `advance` | `!AdvanceNode` | `(.advance)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:800` | `HandleNode` | data | yes | `hDispatch` | `dispatch` | `![DispatchNode]` | `(.dispatch)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:801` | `HandleNode` | data | yes | `hSchedule` | `schedule` | `!Name` | `(.schedule)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:807` | `IdExpr` | data | yes | `ideStrategy` | `strategy` | `!IdStrategy` | `(.strategy)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:808` | `IdExpr` | data | yes | `idePrefix` | `prefix` | `!Text` | `(.prefix)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:809` | `IdExpr` | data | yes | `ideField` | `field` | `!Name` | `(.field)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:820` | `FireAtExpr` | data | yes | `faField` | `field` | `!Name` | `(.field)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:821` | `FireAtExpr` | data | yes | `faWindow` | `window` | `!Text` | `(.window)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:831` | `FireDisposition` | data | yes | `onOk` | `onOk` | `!FireOutcome` | `(.onOk)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:832` | `FireDisposition` | data | yes | `onReject` | `onReject` | `!FireOutcome` | `(.onReject)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:833` | `FireDisposition` | data | yes | `onAmbiguous` | `onAmbiguous` | `!FireOutcome` | `(.onAmbiguous)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:834` | `FireDisposition` | data | yes | `onError` | `onError` | `!FireOutcome` | `(.onError)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:835` | `FireDisposition` | data | yes | `notMine` | `notMine` | `!FireOutcome` | `(.notMine)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:841` | `FireNode` | data | yes | `fireTarget` | `target` | `!Name` | `(.target)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:842` | `FireNode` | data | yes | `fireKey` | `key` | `!Text` | `(.key)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:843` | `FireNode` | data | yes | `fireCommand` | `command` | `!Name` | `(.command)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:844` | `FireNode` | data | yes | `fireFields` | `fields` | `![FieldBinding]` | `(.fields)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:845` | `FireNode` | data | yes | `fireFiredEventId` | `firedEventId` | `!IdExpr` | `(.firedEventId)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:846` | `FireNode` | data | yes | `fireDisposition` | `disposition` | `!FireDisposition` | `(.disposition)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:852` | `TimerNode` | data | yes | `tmName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:853` | `TimerNode` | data | yes | `tmId` | `id` | `!IdExpr` | `(.id)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:854` | `TimerNode` | data | yes | `tmFireAt` | `fireAt` | `!FireAtExpr` | `(.fireAt)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:855` | `TimerNode` | data | yes | `tmPayload` | `payload` | `![FieldBinding]` | `(.payload)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:856` | `TimerNode` | data | yes | `tmFire` | `fire` | `!FireNode` | `(.fire)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:857` | `TimerNode` | data | yes | `tmDecodeUnknown` | `decodeUnknown` | `!Name` | `(.decodeUnknown)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:858` | `TimerNode` | data | yes | `tmMaxAttempts` | `maxAttempts` | `!Int` | `(.maxAttempts)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:859` | `TimerNode` | data | yes | `tmDeadLetter` | `deadLetter` | `!Text` | `(.deadLetter)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:860` | `TimerNode` | data | yes | `tmLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:873` | `ReactionBody` | data | yes | `version` | `version` | `!Natural` | `(.version)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:874` | `ReactionBody` | data | yes | `versionLoc` | `versionLoc` | `!Loc` | `(.versionLoc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:875` | `ReactionBody` | data | yes | `inputs` | `inputs` | `!(NonEmpty InputDecl)` | `(.inputs)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:876` | `ReactionBody` | data | yes | `reactions` | `reactions` | `!(NonEmpty ReactionNode)` | `(.reactions)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:877` | `ReactionBody` | data | yes | `timerPolicy` | `timerPolicy` | `!(Maybe TimerPolicy)` | `(.timerPolicy)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:878` | `ReactionBody` | data | yes | `timers` | `timers` | `![ReactionTimerNode]` | `(.timers)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:883` | `ReactionNode` | data | yes | `on` | `on` | `!Name` | `(.on)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:884` | `ReactionNode` | data | yes | `arms` | `arms` | `!(NonEmpty ReactionArm)` | `(.arms)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:885` | `ReactionNode` | data | yes | `loc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:890` | `ReactionArm` | data | yes | `guard` | `guard` | `!ArmGuard` | `(.guard)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:891` | `ReactionArm` | data | yes | `body` | `body` | `!ArmBody` | `(.body)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:892` | `ReactionArm` | data | yes | `loc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:905` | `ArmBody` | data | yes | `advance` | `advance` | `!(Maybe AdvanceReaction)` | `(.advance)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:906` | `ArmBody` | data | yes | `followUps` | `followUps` | `![FollowUp]` | `(.followUps)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:911` | `AdvanceReaction` | data | yes | `command` | `command` | `!Name` | `(.command)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:912` | `AdvanceReaction` | data | yes | `fields` | `fields` | `![FieldBinding]` | `(.fields)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:913` | `AdvanceReaction` | data | yes | `accepted` | `accepted` | `!(Maybe [FollowUp])` | `(.accepted)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:914` | `AdvanceReaction` | data | yes | `silentNoAction` | `silentNoAction` | `!Bool` | `(.silentNoAction)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:915` | `AdvanceReaction` | data | yes | `loc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:926` | `ScheduleNode` | data | yes | `timer` | `timer` | `!Name` | `(.timer)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:927` | `ScheduleNode` | data | yes | `mode` | `mode` | `!ScheduleMode` | `(.mode)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:928` | `ScheduleNode` | data | yes | `fireAt` | `fireAt` | `!FireAtExpr` | `(.fireAt)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:929` | `ScheduleNode` | data | yes | `bindings` | `bindings` | `![FieldBinding]` | `(.bindings)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:930` | `ScheduleNode` | data | yes | `loc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:938` | `TimerPolicy` | data | yes | `maxAttempts` | `maxAttempts` | `!Int` | `(.maxAttempts)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:939` | `TimerPolicy` | data | yes | `deadLetter` | `deadLetter` | `!Text` | `(.deadLetter)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:940` | `TimerPolicy` | data | yes | `loc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:945` | `ReactionTimerNode` | data | yes | `name` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:946` | `ReactionTimerNode` | data | yes | `id` | `id` | `!IdExpr` | `(.id)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:947` | `ReactionTimerNode` | data | yes | `payload` | `payload` | `![PayloadField]` | `(.payload)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:948` | `ReactionTimerNode` | data | yes | `fire` | `fire` | `!FireNode` | `(.fire)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:949` | `ReactionTimerNode` | data | yes | `decodeUnknown` | `decodeUnknown` | `!Name` | `(.decodeUnknown)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:950` | `ReactionTimerNode` | data | yes | `loc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:967` | `ProcessNode` | data | yes | `procId` | `id` | `!Name` | `(.id)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:969` | `ProcessNode` | data | yes | `procName` | `name` | `!Text` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:970` | `ProcessNode` | data | yes | `procCorrelate` | `correlate` | `!CorrelateDecl` | `(.correlate)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:971` | `ProcessNode` | data | yes | `procSaga` | `saga` | `!SagaRef` | `(.saga)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:972` | `ProcessNode` | data | yes | `procTarget` | `target` | `!Name` | `(.target)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:973` | `ProcessNode` | data | yes | `procProjections` | `projections` | `![Name]` | `(.projections)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:974` | `ProcessNode` | data | yes | `body` | `body` | `!ProcessBody` | `(.body)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:975` | `ProcessNode` | data | yes | `procRejected` | `rejected` | `!PolicyChoice` | `(.rejected)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:976` | `ProcessNode` | data | yes | `procPoison` | `poison` | `!PolicyChoice` | `(.poison)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:977` | `ProcessNode` | data | yes | `procLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:994` | `RouterSelectionDecl` | data | yes | `rsIdentity` | `identity` | `!Text` | `(.identity)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:995` | `RouterSelectionDecl` | data | yes | `rsIdentityLoc` | `identityLoc` | `!Loc` | `(.identityLoc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:996` | `RouterSelectionDecl` | data | yes | `rsVersion` | `version` | `!Natural` | `(.version)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:997` | `RouterSelectionDecl` | data | yes | `rsVersionLoc` | `versionLoc` | `!Loc` | `(.versionLoc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:998` | `RouterSelectionDecl` | data | yes | `rsQuery` | `query` | `!Name` | `(.query)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:999` | `RouterSelectionDecl` | data | yes | `rsQueryLoc` | `queryLoc` | `!Loc` | `(.queryLoc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1000` | `RouterSelectionDecl` | data | yes | `rsQueryInput` | `queryInput` | `!Name` | `(.queryInput)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1001` | `RouterSelectionDecl` | data | yes | `rsQueryInputLoc` | `queryInputLoc` | `!Loc` | `(.queryInputLoc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1002` | `RouterSelectionDecl` | data | yes | `rsPredicate` | `predicate` | `!Expr` | `(.predicate)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1003` | `RouterSelectionDecl` | data | yes | `rsRecipient` | `recipient` | `!Expr` | `(.recipient)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1004` | `RouterSelectionDecl` | data | yes | `rsLimit` | `limit` | `!(Maybe (Natural, Loc))` | `(.limit)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1005` | `RouterSelectionDecl` | data | yes | `rsOrder` | `order` | `!Name` | `(.order)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1006` | `RouterSelectionDecl` | data | yes | `rsOrderLoc` | `orderLoc` | `!Loc` | `(.orderLoc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1007` | `RouterSelectionDecl` | data | yes | `rsDedupe` | `dedupe` | `!Name` | `(.dedupe)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1008` | `RouterSelectionDecl` | data | yes | `rsDedupeLoc` | `dedupeLoc` | `!Loc` | `(.dedupeLoc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1009` | `RouterSelectionDecl` | data | yes | `rsEmptyPolicy` | `emptyPolicy` | `!SelectionDispositionSyntax` | `(.emptyPolicy)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1010` | `RouterSelectionDecl` | data | yes | `rsEmptyPolicyLoc` | `emptyPolicyLoc` | `!Loc` | `(.emptyPolicyLoc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1011` | `RouterSelectionDecl` | data | yes | `rsFailurePolicy` | `failurePolicy` | `!SelectionDispositionSyntax` | `(.failurePolicy)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1012` | `RouterSelectionDecl` | data | yes | `rsFailurePolicyLoc` | `failurePolicyLoc` | `!Loc` | `(.failurePolicyLoc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1013` | `RouterSelectionDecl` | data | yes | `rsRedelivery` | `redelivery` | `!Name` | `(.redelivery)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1014` | `RouterSelectionDecl` | data | yes | `rsRedeliveryLoc` | `redeliveryLoc` | `!Loc` | `(.redeliveryLoc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1015` | `RouterSelectionDecl` | data | yes | `rsPartial` | `partial` | `!Name` | `(.partial)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1016` | `RouterSelectionDecl` | data | yes | `rsPartialLoc` | `partialLoc` | `!Loc` | `(.partialLoc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1017` | `RouterSelectionDecl` | data | yes | `rsLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1028` | `ResolveDecl` | data | yes | `rvSource` | `source` | `!ResolveSource` | `(.source)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1029` | `ResolveDecl` | data | yes | `rvRow` | `row` | `![Name]` | `(.row)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1030` | `ResolveDecl` | data | yes | `rvLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1035` | `RouterDispatchNode` | data | yes | `rdCommand` | `command` | `!Name` | `(.command)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1036` | `RouterDispatchNode` | data | yes | `rdFields` | `fields` | `![FieldBinding]` | `(.fields)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1037` | `RouterDispatchNode` | data | yes | `rdDisposition` | `disposition` | `!DispatchDisposition` | `(.disposition)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1038` | `RouterDispatchNode` | data | yes | `rdLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1046` | `RouterNode` | data | yes | `rtId` | `id` | `!Name` | `(.id)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1047` | `RouterNode` | data | yes | `rtName` | `name` | `!Text` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1048` | `RouterNode` | data | yes | `rtInput` | `input` | `!InputDecl` | `(.input)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1049` | `RouterNode` | data | yes | `rtKey` | `key` | `!CorrelateDecl` | `(.key)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1050` | `RouterNode` | data | yes | `rtResolve` | `resolve` | `!ResolveDecl` | `(.resolve)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1051` | `RouterNode` | data | yes | `rtTarget` | `target` | `!Name` | `(.target)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1052` | `RouterNode` | data | yes | `rtProjections` | `projections` | `![Name]` | `(.projections)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1053` | `RouterNode` | data | yes | `rtDispatch` | `dispatch` | `!RouterDispatchNode` | `(.dispatch)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1054` | `RouterNode` | data | yes | `rtRejected` | `rejected` | `!PolicyChoice` | `(.rejected)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1055` | `RouterNode` | data | yes | `rtPoison` | `poison` | `!PolicyChoice` | `(.poison)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1056` | `RouterNode` | data | yes | `rtLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1067` | `ContractField` | data | yes | `cfName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1068` | `ContractField` | data | yes | `cfSelector` | `selector` | `!(Maybe Name)` | `(.selector)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1069` | `ContractField` | data | yes | `cfWireKey` | `wireKey` | `!(Maybe Text)` | `(.wireKey)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1070` | `ContractField` | data | yes | `cfType` | `valueType` | `!ContractType` | `(.valueType)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1071` | `ContractField` | data | yes | `cfLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1077` | `ContractEvent` | data | yes | `ceName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1078` | `ContractEvent` | data | yes | `ceTopic` | `topic` | `!Name` | `(.topic)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1079` | `ContractEvent` | data | yes | `ceFields` | `fields` | `![ContractField]` | `(.fields)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1087` | `ContractNode` | data | yes | `ctrName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1088` | `ContractNode` | data | yes | `ctrSchemaVersion` | `schemaVersion` | `!Int` | `(.schemaVersion)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1089` | `ContractNode` | data | yes | `ctrDiscriminator` | `discriminator` | `!Name` | `(.discriminator)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1091` | `ContractNode` | data | yes | `ctrTopics` | `topics` | `![(Name, Text)]` | `(.topics)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1092` | `ContractNode` | data | yes | `ctrEvents` | `events` | `![ContractEvent]` | `(.events)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1093` | `ContractNode` | data | yes | `ctrLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1109` | `BindRow` | data | yes | `brField` | `field` | `!Name` | `(.field)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1110` | `BindRow` | data | yes | `brSource` | `source` | `!WireSource` | `(.source)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1111` | `BindRow` | data | yes | `brRequired` | `required` | `!Bool` | `(.required)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1112` | `BindRow` | data | yes | `brCrossCheck` | `crossCheck` | `!Bool` | `(.crossCheck)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1128` | `DispositionRow` | data | yes | `drOutcome` | `outcome` | `!Name` | `(.outcome)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1129` | `DispositionRow` | data | yes | `drAction` | `action` | `!InboxAction` | `(.action)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1130` | `DispositionRow` | data | yes | `drLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1137` | `DecodeSpec` | data | yes | `decEnvelope` | `envelope` | `!Text` | `(.envelope)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1138` | `DecodeSpec` | data | yes | `decBodyStrict` | `bodyStrict` | `!Bool` | `(.bodyStrict)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1139` | `DecodeSpec` | data | yes | `decBodySchemaVersion` | `bodySchemaVersion` | `!Int` | `(.bodySchemaVersion)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1155` | `IntakeNode` | data | yes | `inkName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1156` | `IntakeNode` | data | yes | `inkContract` | `contract` | `!Name` | `(.contract)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1157` | `IntakeNode` | data | yes | `inkTopic` | `topic` | `!Name` | `(.topic)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1158` | `IntakeNode` | data | yes | `inkAccept` | `accept` | `![Name]` | `(.accept)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1159` | `IntakeNode` | data | yes | `inkBinds` | `binds` | `![BindRow]` | `(.binds)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1160` | `IntakeNode` | data | yes | `inkDedupeKey` | `dedupeKey` | `!Name` | `(.dedupeKey)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1161` | `IntakeNode` | data | yes | `inkDedupePolicy` | `dedupePolicy` | `!Name` | `(.dedupePolicy)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1162` | `IntakeNode` | data | yes | `idempotence` | `idempotence` | `!IdempotenceMode` | `(.idempotence)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1163` | `IntakeNode` | data | yes | `inkPersist` | `persist` | `!InkPersist` | `(.persist)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1164` | `IntakeNode` | data | yes | `inkDecode` | `decode` | `!DecodeSpec` | `(.decode)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1165` | `IntakeNode` | data | yes | `inkDisposition` | `disposition` | `![DispositionRow]` | `(.disposition)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1166` | `IntakeNode` | data | yes | `inkLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1173` | `DeriveSpec` | newtype | yes | `dsPrefix` | `dsPrefix` | `Maybe Text` | `(.dsPrefix)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1178` | `EmitMapRow` | data | yes | `emrValue` | `value` | `!Text` | `(.value)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1179` | `EmitMapRow` | data | yes | `emrEvent` | `event` | `!Name` | `(.event)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1180` | `EmitMapRow` | data | yes | `emrLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1187` | `EmitNode` | data | yes | `emName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1188` | `EmitNode` | data | yes | `emContract` | `contract` | `!Name` | `(.contract)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1189` | `EmitNode` | data | yes | `emTopic` | `topic` | `!Name` | `(.topic)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1190` | `EmitNode` | data | yes | `emSource` | `source` | `!Text` | `(.source)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1191` | `EmitNode` | data | yes | `emKey` | `key` | `!Name` | `(.key)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1192` | `EmitNode` | data | yes | `emDiscriminant` | `discriminant` | `!Name` | `(.discriminant)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1193` | `EmitNode` | data | yes | `emMap` | `map` | `![EmitMapRow]` | `(.map)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1195` | `EmitNode` | data | yes | `emSkip` | `skip` | `!Bool` | `(.skip)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1196` | `EmitNode` | data | yes | `emMessageId` | `messageId` | `!DeriveSpec` | `(.messageId)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1197` | `EmitNode` | data | yes | `emIdempotencyKey` | `idempotencyKey` | `!DeriveSpec` | `(.idempotencyKey)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1198` | `EmitNode` | data | yes | `emLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1204` | `BackoffSpec` | data | yes | `boKind` | `kind` | `!Name` | `(.kind)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1205` | `BackoffSpec` | data | yes | `boWindow` | `window` | `!Text` | `(.window)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1206` | `BackoffSpec` | data | yes | `boMax` | `max` | `!(Maybe Text)` | `(.max)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1207` | `BackoffSpec` | data | yes | `boMultiplier` | `multiplier` | `!(Maybe Text)` | `(.multiplier)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1213` | `PublisherNode` | data | yes | `pubName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1214` | `PublisherNode` | data | yes | `pubEmit` | `emit` | `!Name` | `(.emit)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1215` | `PublisherNode` | data | yes | `pubOrdering` | `ordering` | `!Name` | `(.ordering)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1216` | `PublisherNode` | data | yes | `pubMaxAttempts` | `maxAttempts` | `!Int` | `(.maxAttempts)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1217` | `PublisherNode` | data | yes | `pubBackoff` | `backoff` | `!BackoffSpec` | `(.backoff)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1219` | `PublisherNode` | data | yes | `pubOutboxField` | `outboxField` | `!Name` | `(.outboxField)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1220` | `PublisherNode` | data | yes | `pubLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1250` | `WqField` | data | yes | `wqfName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1251` | `WqField` | data | yes | `wqfWire` | `wire` | `!Text` | `(.wire)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1252` | `WqField` | data | yes | `wqfType` | `valueType` | `!QueuePayloadType` | `(.valueType)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1253` | `WqField` | data | yes | `wqfLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1260` | `WqDispRow` | data | yes | `wqdOutcome` | `outcome` | `!Name` | `(.outcome)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1261` | `WqDispRow` | data | yes | `wqdAction` | `action` | `!InboxAction` | `(.action)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1262` | `WqDispRow` | data | yes | `wqdLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1272` | `WqGroupKey` | data | yes | `gkField` | `field` | `!Name` | `(.field)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1273` | `WqGroupKey` | data | yes | `gkVia` | `via` | `!Name` | `(.via)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1274` | `WqGroupKey` | data | yes | `gkFixture` | `fixture` | `!(Maybe Text)` | `(.fixture)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1289` | `WorkqueueNode` | data | yes | `wqName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1290` | `WorkqueueNode` | data | yes | `wqLogical` | `logical` | `!Text` | `(.logical)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1291` | `WorkqueueNode` | data | yes | `wqPhysical` | `physical` | `!Text` | `(.physical)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1292` | `WorkqueueNode` | data | yes | `wqDlq` | `dlq` | `!Text` | `(.dlq)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1293` | `WorkqueueNode` | data | yes | `wqTable` | `table` | `!Text` | `(.table)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1294` | `WorkqueueNode` | data | yes | `wqOrdering` | `ordering` | `!WqOrdering` | `(.ordering)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1295` | `WorkqueueNode` | data | yes | `wqGroupKey` | `groupKey` | `!(Maybe WqGroupKey)` | `(.groupKey)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1296` | `WorkqueueNode` | data | yes | `wqProvision` | `provision` | `!WqProvision` | `(.provision)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1297` | `WorkqueueNode` | data | yes | `wqPayloadName` | `payloadName` | `!Name` | `(.payloadName)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1298` | `WorkqueueNode` | data | yes | `wqPayload` | `payload` | `![WqField]` | `(.payload)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1299` | `WorkqueueNode` | data | yes | `wqMaxRetries` | `maxRetries` | `!Int` | `(.maxRetries)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1300` | `WorkqueueNode` | data | yes | `wqDelay` | `delay` | `!Text` | `(.delay)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1301` | `WorkqueueNode` | data | yes | `wqDlqOn` | `dlqOn` | `!Bool` | `(.dlqOn)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1302` | `WorkqueueNode` | data | yes | `wqDisposition` | `disposition` | `![WqDispRow]` | `(.disposition)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1303` | `WorkqueueNode` | data | yes | `wqLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1310` | `PgmqDispatchNode` | data | yes | `pdName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1311` | `PgmqDispatchNode` | data | yes | `pdSourceReadModel` | `sourceReadModel` | `!Name` | `(.sourceReadModel)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1312` | `PgmqDispatchNode` | data | yes | `pdSourceKey` | `sourceKey` | `!Name` | `(.sourceKey)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1313` | `PgmqDispatchNode` | data | yes | `pdFanoutBody` | `fanoutBody` | `!Name` | `(.fanoutBody)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1314` | `PgmqDispatchNode` | data | yes | `pdDedupKey` | `dedupKey` | `!Name` | `(.dedupKey)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1315` | `PgmqDispatchNode` | data | yes | `pdDedupReadModel` | `dedupReadModel` | `!Name` | `(.dedupReadModel)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1316` | `PgmqDispatchNode` | data | yes | `pdDedupReadModelField` | `dedupReadModelField` | `!Text` | `(.dedupReadModelField)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1317` | `PgmqDispatchNode` | data | yes | `pdDedupQueue` | `dedupQueue` | `!Name` | `(.dedupQueue)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1318` | `PgmqDispatchNode` | data | yes | `pdDedupQueueField` | `dedupQueueField` | `!Text` | `(.dedupQueueField)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1319` | `PgmqDispatchNode` | data | yes | `pdEnqueueTo` | `enqueueTo` | `!Name` | `(.enqueueTo)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1320` | `PgmqDispatchNode` | data | yes | `pdLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1328` | `RmColumn` | data | yes | `rmcName` | `rmcName` | `!Text` | `(.rmcName)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1329` | `RmColumn` | data | yes | `rmcType` | `rmcType` | `!Text` | `(.rmcType)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1330` | `RmColumn` | data | yes | `rmcRequired` | `rmcRequired` | `!Bool` | `(.rmcRequired)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1359` | `ReadModelSupply` | data | yes | `legacyConsistency` | `legacyConsistency` | `!Consistency` | `(.legacyConsistency)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1360` | `ReadModelSupply` | data | yes | `legacyScope` | `legacyScope` | `!(Maybe RmScope)` | `(.legacyScope)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1361` | `ReadModelSupply` | data | yes | `legacyFeed` | `legacyFeed` | `!RmFeed` | `(.legacyFeed)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1362` | `ReadModelSupply` | data | yes | `legacySubscription` | `legacySubscription` | `!(Maybe Text)` | `(.legacySubscription)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1370` | `ReadModelQueryTypes` | data | yes | `input` | `input` | `!TypeExpr` | `(.input)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1371` | `ReadModelQueryTypes` | data | yes | `result` | `result` | `!TypeExpr` | `(.result)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1372` | `ReadModelQueryTypes` | data | yes | `inputLoc` | `inputLoc` | `!Loc` | `(.inputLoc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1373` | `ReadModelQueryTypes` | data | yes | `resultLoc` | `resultLoc` | `!Loc` | `(.resultLoc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1380` | `ReadModelNode` | data | yes | `rmName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1381` | `ReadModelNode` | data | yes | `rmTable` | `table` | `!Text` | `(.table)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1382` | `ReadModelNode` | data | yes | `rmSchema` | `schema` | `!Text` | `(.schema)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1383` | `ReadModelNode` | data | yes | `rmColumns` | `columns` | `![RmColumn]` | `(.columns)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1384` | `ReadModelNode` | data | yes | `rmVersion` | `version` | `!Int` | `(.version)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1385` | `ReadModelNode` | data | yes | `rmShape` | `shape` | `!Text` | `(.shape)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1386` | `ReadModelNode` | data | yes | `rmFreshness` | `freshness` | `!QueryFreshnessNode` | `(.freshness)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1387` | `ReadModelNode` | data | yes | `rmSupply` | `supply` | `!ReadModelSupply` | `(.supply)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1388` | `ReadModelNode` | data | yes | `rmGroup` | `group` | `!(Maybe Name)` | `(.group)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1389` | `ReadModelNode` | data | yes | `rmObservedTargets` | `observedTargets` | `![Name]` | `(.observedTargets)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1390` | `ReadModelNode` | data | yes | `rmBackingTarget` | `backingTarget` | `!(Maybe Name)` | `(.backingTarget)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1391` | `ReadModelNode` | data | yes | `queryTypes` | `queryTypes` | `!(Maybe ReadModelQueryTypes)` | `(.queryTypes)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1392` | `ReadModelNode` | data | yes | `rmLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1423` | `ProjectionTargetNode` | data | yes | `ptName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1424` | `ProjectionTargetNode` | data | yes | `ptSchema` | `schema` | `!Text` | `(.schema)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1425` | `ProjectionTargetNode` | data | yes | `ptTable` | `table` | `!Text` | `(.table)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1426` | `ProjectionTargetNode` | data | yes | `ptReset` | `reset` | `!TargetResetPolicy` | `(.reset)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1427` | `ProjectionTargetNode` | data | yes | `ptDependsOn` | `dependsOn` | `![Name]` | `(.dependsOn)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1428` | `ProjectionTargetNode` | data | yes | `ptLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1434` | `RebuildGroupNode` | data | yes | `rgName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1435` | `RebuildGroupNode` | data | yes | `rgTargets` | `targets` | `![Name]` | `(.targets)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1436` | `RebuildGroupNode` | data | yes | `rgOrder` | `order` | `![Name]` | `(.order)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1437` | `RebuildGroupNode` | data | yes | `rgLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1448` | `PromotionObjectNode` | data | yes | `rpoKind` | `kind` | `!PromotionObjectKindNode` | `(.kind)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1449` | `PromotionObjectNode` | data | yes | `rpoGenerationName` | `generationName` | `!Text` | `(.generationName)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1450` | `PromotionObjectNode` | data | yes | `rpoCanonicalName` | `canonicalName` | `!Text` | `(.canonicalName)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1457` | `RevisionTargetNode` | data | yes | `prtTarget` | `target` | `!Name` | `(.target)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1458` | `RevisionTargetNode` | data | yes | `prtSchemaVersion` | `schemaVersion` | `!Text` | `(.schemaVersion)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1459` | `RevisionTargetNode` | data | yes | `prtProvisioner` | `provisioner` | `!Text` | `(.provisioner)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1460` | `RevisionTargetNode` | data | yes | `prtProvisionerVersion` | `provisionerVersion` | `!Int` | `(.provisionerVersion)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1461` | `RevisionTargetNode` | data | yes | `prtExpectedShape` | `expectedShape` | `!Text` | `(.expectedShape)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1462` | `RevisionTargetNode` | data | yes | `prtValidator` | `validator` | `!Text` | `(.validator)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1463` | `RevisionTargetNode` | data | yes | `prtValidatorVersion` | `validatorVersion` | `!Int` | `(.validatorVersion)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1464` | `RevisionTargetNode` | data | yes | `prtPromotionObjects` | `promotionObjects` | `![PromotionObjectNode]` | `(.promotionObjects)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1469` | `ProjectionRevisionNode` | data | yes | `prvName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1470` | `ProjectionRevisionNode` | data | yes | `prvGroup` | `group` | `!Name` | `(.group)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1471` | `ProjectionRevisionNode` | data | yes | `prvTargets` | `targets` | `![RevisionTargetNode]` | `(.targets)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1472` | `ProjectionRevisionNode` | data | yes | `prvLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1480` | `ExternalReadNode` | data | yes | `erName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1481` | `ExternalReadNode` | data | yes | `erVersion` | `version` | `!Int` | `(.version)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1482` | `ExternalReadNode` | data | yes | `erQueryModel` | `queryModel` | `!Name` | `(.queryModel)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1483` | `ExternalReadNode` | data | yes | `erResultSchema` | `resultSchema` | `!Text` | `(.resultSchema)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1484` | `ExternalReadNode` | data | yes | `erResultType` | `resultType` | `!Text` | `(.resultType)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1485` | `ExternalReadNode` | data | yes | `erCompatibleRevisions` | `compatibleRevisions` | `![Name]` | `(.compatibleRevisions)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1486` | `ExternalReadNode` | data | yes | `erSurfaceGeneration` | `surfaceGeneration` | `!Int` | `(.surfaceGeneration)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1487` | `ExternalReadNode` | data | yes | `erLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1522` | `ProjectionOwnerNode` | data | yes | `poName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1523` | `ProjectionOwnerNode` | data | yes | `poSources` | `sources` | `![CatalogSource]` | `(.sources)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1524` | `ProjectionOwnerNode` | data | yes | `poDelivery` | `delivery` | `!ProjectionDelivery` | `(.delivery)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1525` | `ProjectionOwnerNode` | data | yes | `poGroup` | `group` | `!Name` | `(.group)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1526` | `ProjectionOwnerNode` | data | yes | `poTargets` | `targets` | `![Name]` | `(.targets)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1527` | `ProjectionOwnerNode` | data | yes | `poOrder` | `order` | `!Int` | `(.order)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1528` | `ProjectionOwnerNode` | data | yes | `poSubscription` | `subscription` | `!(Maybe Text)` | `(.subscription)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1529` | `ProjectionOwnerNode` | data | yes | `poDedup` | `dedup` | `!(Maybe Text)` | `(.dedup)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1530` | `ProjectionOwnerNode` | data | yes | `poCheckpointOnMissing` | `checkpointOnMissing` | `![CheckpointOnMissingNode]` | `(.checkpointOnMissing)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1531` | `ProjectionOwnerNode` | data | yes | `poReplay` | `replay` | `!ProjectionReplayPolicy` | `(.replay)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1532` | `ProjectionOwnerNode` | data | yes | `poLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1558` | `WorkflowNode` | data | yes | `wfId` | `id` | `!Name` | `(.id)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1560` | `WorkflowNode` | data | yes | `wfStable` | `stable` | `!Text` | `(.stable)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1561` | `WorkflowNode` | data | yes | `wfInput` | `input` | `!Name` | `(.input)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1562` | `WorkflowNode` | data | yes | `wfInputFields` | `inputFields` | `![Field]` | `(.inputFields)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1563` | `WorkflowNode` | data | yes | `wfOutput` | `output` | `!Name` | `(.output)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1565` | `WorkflowNode` | data | yes | `wfIdField` | `idField` | `!(Maybe Name)` | `(.idField)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1566` | `WorkflowNode` | data | yes | `wfIdVia` | `idVia` | `!Name` | `(.idVia)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1567` | `WorkflowNode` | data | yes | `wfBody` | `body` | `![WfBodyItem]` | `(.body)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1568` | `WorkflowNode` | data | yes | `wfLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1588` | `OperationNode` | data | yes | `opName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1589` | `OperationNode` | data | yes | `opShape` | `shape` | `!OperationShape` | `(.shape)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1590` | `OperationNode` | data | yes | `opLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1636` | `Spec` | data | yes | `specContext` | `context` | `!Name` | `(.context)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1637` | `Spec` | data | yes | `specModuleRoot` | `moduleRoot` | `!(Maybe Text)` | `(.moduleRoot)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1638` | `Spec` | data | yes | `specLayout` | `layout` | `!(Maybe Placement)` | `(.layout)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1639` | `Spec` | data | yes | `specIds` | `ids` | `![IdDecl]` | `(.ids)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1640` | `Spec` | data | yes | `specEnums` | `enums` | `![EnumDecl]` | `(.enums)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1641` | `Spec` | data | yes | `specRules` | `rules` | `![RuleDecl]` | `(.rules)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1642` | `Spec` | data | yes | `specNominalScalars` | `nominalScalars` | `![NominalScalarDecl]` | `(.nominalScalars)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1643` | `Spec` | data | yes | `specMapped` | `mapped` | `![MappedDecl]` | `(.mapped)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1644` | `Spec` | data | yes | `specNodes` | `nodes` | `![Node]` | `(.nodes)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/HaskellImport.hs:41` | `HaskellReference` | data | yes | `referenceModule` | `moduleName` | `!Text` | `(.moduleName)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/HaskellImport.hs:42` | `HaskellReference` | data | yes | `referenceName` | `name` | `!Text` | `(.name)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/HaskellImport.hs:43` | `HaskellReference` | data | yes | `referenceNamespace` | `namespace` | `!HaskellNamespace` | `(.namespace)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/HaskellImport.hs:44` | `HaskellReference` | data | yes | `referenceQualification` | `qualification` | `!QualificationPreference` | `(.qualification)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/HaskellImport.hs:49` | `ImportEnvironment` | data | yes | `targetModule` | `targetModule` | `!Text` | `(.targetModule)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/HaskellImport.hs:50` | `ImportEnvironment` | data | yes | `localNames` | `localNames` | `!(Set Text)` | `(.localNames)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/HaskellImport.hs:51` | `ImportEnvironment` | data | yes | `reservedQualifiers` | `reservedQualifiers` | `!(Set Text)` | `(.reservedQualifiers)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/HaskellImport.hs:64` | `HaskellImportPlan` | data | no | `importPlanTargetModule` | `targetModule` | `!Text` | `(.targetModule)`, pattern, or construction | Haskell API and runtime semantics | `none` |
-| `keiro-dsl/src/Keiro/Dsl/HaskellImport.hs:65` | `HaskellImportPlan` | data | no | `importPlanDeclarations` | `declarations` | `!(Set Text)` | `(.declarations)`, pattern, or construction | Haskell API and runtime semantics | `none` |
-| `keiro-dsl/src/Keiro/Dsl/HaskellImport.hs:66` | `HaskellImportPlan` | data | no | `importPlanReferences` | `references` | `!(Map HaskellReference Text)` | `(.references)`, pattern, or construction | Haskell API and runtime semantics | `none` |
-| `keiro-dsl/src/Keiro/Dsl/HaskellName.hs:62` | `DerivedHaskellName` | data | no | `upperCamel` | `upperCamel` | `!UpperCamelName` | `(.upperCamel)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/HaskellName.hs:63` | `DerivedHaskellName` | data | no | `lowerCamel` | `lowerCamel` | `!LowerCamelName` | `(.lowerCamel)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/HaskellName.hs:96` | `NameSite` | data | no | `siteKind` | `kind` | `!NameSiteKind` | `(.kind)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/HaskellName.hs:97` | `NameSite` | data | no | `siteLogicalName` | `logicalName` | `!Text` | `(.logicalName)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/HaskellName.hs:98` | `NameSite` | data | no | `siteOwner` | `owner` | `!Text` | `(.owner)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/HaskellName.hs:99` | `NameSite` | data | no | `siteLine` | `line` | `!Int` | `(.line)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/HaskellName.hs:108` | `HaskellOccurrenceKey` | data | no | `occurrenceModule` | `moduleName` | `!Text` | `(.moduleName)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/HaskellName.hs:109` | `HaskellOccurrenceKey` | data | no | `occurrenceSpace` | `space` | `!HaskellOccurrenceSpace` | `(.space)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/HaskellName.hs:110` | `HaskellOccurrenceKey` | data | no | `occurrenceScope` | `scope` | `!Text` | `(.scope)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/HaskellName.hs:111` | `HaskellOccurrenceKey` | data | no | `occurrenceName` | `name` | `!Text` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/HaskellName.hs:116` | `PlannedOccurrence` | data | no | `plannedOccurrenceKey` | `key` | `!HaskellOccurrenceKey` | `(.key)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/HaskellName.hs:117` | `PlannedOccurrence` | data | no | `plannedOccurrenceSite` | `site` | `!NameSite` | `(.site)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/HaskellSourceMove.hs:28` | `SourceMove` | data | yes | `moveRole` | `role` | `!ModuleRole` | `(.role)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/HaskellSourceMove.hs:29` | `SourceMove` | data | yes | `moveKind` | `kind` | `!ModuleKind` | `(.kind)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/HaskellSourceMove.hs:30` | `SourceMove` | data | yes | `moveOldModule` | `oldModule` | `!Text` | `(.oldModule)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/HaskellSourceMove.hs:31` | `SourceMove` | data | yes | `moveNewModule` | `newModule` | `!Text` | `(.newModule)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/HaskellSourceMove.hs:32` | `SourceMove` | data | yes | `moveOldPath` | `oldPath` | `!FilePath` | `(.oldPath)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/HaskellSourceMove.hs:33` | `SourceMove` | data | yes | `moveNewPath` | `newPath` | `!FilePath` | `(.newPath)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/HaskellSourceMove.hs:34` | `SourceMove` | data | yes | `moveBackupPath` | `backupPath` | `!FilePath` | `(.backupPath)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/HaskellSourceMove.hs:38` | `SourceMove` | data | yes | `moveContentDigest` | `contentDigest` | `!(Maybe Text)` | `(.contentDigest)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/HaskellSourceMove.hs:41` | `SourceMove` | data | yes | `moveTransformedDigest` | `transformedDigest` | `!(Maybe Text)` | `(.transformedDigest)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/LanguageVersion.hs:97` | `SourceLanguage` | data | yes | `declaredLanguageVersion` | `declaredLanguageVersion` | `!LanguageVersion` | `(.declaredLanguageVersion)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/LanguageVersion.hs:98` | `SourceLanguage` | data | yes | `languageVersionLoc` | `languageVersionLoc` | `!Loc` | `(.languageVersionLoc)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/LanguageVersion.hs:120` | `SyntaxProfile` | data | no | `profileIdentifier` | `identifier` | `!Text` | `(.identifier)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/LanguageVersion.hs:121` | `SyntaxProfile` | data | no | `profileFeatures` | `features` | `!(Set LanguageFeature)` | `(.features)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/LanguageVersion.hs:157` | `RuntimeSemanticsProfile` | data | no | `runtimeSemanticsIdentifier` | `identifier` | `!Text` | `(.identifier)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/LanguageVersion.hs:158` | `RuntimeSemanticsProfile` | data | no | `runtimeSemanticsCapabilities` | `capabilities` | `!(Set RuntimeCapability)` | `(.capabilities)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/LanguageVersion.hs:229` | `LanguageDefinition` | data | yes | `definitionVersion` | `version` | `!LanguageVersion` | `(.version)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/LanguageVersion.hs:230` | `LanguageDefinition` | data | yes | `definitionPredecessor` | `predecessor` | `!(Maybe LanguageVersion)` | `(.predecessor)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/LanguageVersion.hs:233` | `LanguageDefinition` | data | yes | `definitionBodyParser` | `bodyParser` | `!LanguageBodyParser` | `(.bodyParser)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/LanguageVersion.hs:234` | `LanguageDefinition` | data | yes | `definitionSyntaxProfile` | `syntaxProfile` | `!SyntaxProfile` | `(.syntaxProfile)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/LanguageVersion.hs:235` | `LanguageDefinition` | data | yes | `definitionRuntimeSemanticsProfile` | `runtimeSemanticsProfile` | `!RuntimeSemanticsProfile` | `(.runtimeSemanticsProfile)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/LanguageVersion.hs:236` | `LanguageDefinition` | data | yes | `definitionSupport` | `support` | `!LanguageSupport` | `(.support)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/LanguageVersion.hs:237` | `LanguageDefinition` | data | yes | `definitionMaturity` | `maturity` | `!LanguageMaturity` | `(.maturity)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/LanguageVersion.hs:478` | `SourceLanguageDiagnostic` | data | yes | `sourceLanguageErrorCode` | `errorCode` | `!SourceLanguageErrorCode` | `(.errorCode)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/LanguageVersion.hs:479` | `SourceLanguageDiagnostic` | data | yes | `sourceLanguageSource` | `source` | `!FilePath` | `(.source)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/LanguageVersion.hs:480` | `SourceLanguageDiagnostic` | data | yes | `sourceLanguageLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/LanguageVersion.hs:481` | `SourceLanguageDiagnostic` | data | yes | `sourceLanguageToken` | `token` | `!(Maybe Text)` | `(.token)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/LanguageVersion.hs:482` | `SourceLanguageDiagnostic` | data | yes | `sourceLanguageDeclaredVersion` | `declaredVersion` | `!(Maybe LanguageVersion)` | `(.declaredVersion)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/LanguageVersion.hs:483` | `SourceLanguageDiagnostic` | data | yes | `sourceLanguageSupportedVersions` | `supportedVersions` | `!(NonEmpty LanguageVersion)` | `(.supportedVersions)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/LanguageVersion.hs:550` | `ParsedSource` | data | yes | `parsedSourceLanguage` | `sourceLanguage` | `!SourceLanguage` | `(.sourceLanguage)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/LanguageVersion.hs:551` | `ParsedSource` | data | yes | `parsedSpec` | `spec` | `!Spec` | `(.spec)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/MappedCodecPlan.hs:42` | `MappedCodecPlan` | data | yes | `consumerType` | `consumerType` | `!ConsumerTypePlan` | `(.consumerType)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/MappedCodecPlan.hs:43` | `MappedCodecPlan` | data | yes | `resolvedExpression` | `resolvedExpression` | `!ResolvedTypeExpr` | `(.resolvedExpression)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/MappedCodecPlan.hs:44` | `MappedCodecPlan` | data | yes | `authority` | `authority` | `!(Set MappedAuthorityMode)` | `(.authority)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:26` | `ConsumerPlan` | data | yes | `consumerPackages` | `packages` | `![Text]` | `(.packages)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:27` | `ConsumerPlan` | data | yes | `consumerModules` | `modules` | `![Text]` | `(.modules)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:28` | `ConsumerPlan` | data | yes | `consumerMappings` | `mappings` | `![MappingIdentity]` | `(.mappings)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:34` | `MappingIdentity` | data | yes | `mappingSpecName` | `specName` | `!Text` | `(.specName)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:35` | `MappingIdentity` | data | yes | `mappingCanonicalType` | `canonicalType` | `!Text` | `(.canonicalType)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:36` | `MappingIdentity` | data | yes | `mappingPackage` | `package` | `!Text` | `(.package)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:37` | `MappingIdentity` | data | yes | `mappingModule` | `moduleName` | `!Text` | `(.moduleName)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:38` | `MappingIdentity` | data | yes | `mappingType` | `valueType` | `!Text` | `(.valueType)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:39` | `MappingIdentity` | data | yes | `mappingBindingSymbol` | `bindingSymbol` | `!Text` | `(.bindingSymbol)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:40` | `MappingIdentity` | data | yes | `mappingBindingVersion` | `bindingVersion` | `!Text` | `(.bindingVersion)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:43` | `MappingIdentity` | data | yes | `mappingSpecName` | `specName` | `!Text` | `(.specName)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:44` | `MappingIdentity` | data | yes | `mappingPackage` | `package` | `!Text` | `(.package)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:45` | `MappingIdentity` | data | yes | `mappingModule` | `moduleName` | `!Text` | `(.moduleName)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:46` | `MappingIdentity` | data | yes | `mappingType` | `valueType` | `!Text` | `(.valueType)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:47` | `MappingIdentity` | data | yes | `mappingCodecIdentity` | `codecIdentity` | `!Text` | `(.codecIdentity)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:48` | `MappingIdentity` | data | yes | `mappingCodecVersion` | `codecVersion` | `!Text` | `(.codecVersion)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:51` | `MappingIdentity` | data | yes | `mappingSpecName` | `specName` | `!Text` | `(.specName)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:52` | `MappingIdentity` | data | yes | `mappingNominalCategory` | `nominalCategory` | `!Text` | `(.nominalCategory)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:53` | `MappingIdentity` | data | yes | `mappingNominalRepresentation` | `nominalRepresentation` | `!Text` | `(.nominalRepresentation)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:54` | `MappingIdentity` | data | yes | `mappingCanonicalType` | `canonicalType` | `!Text` | `(.canonicalType)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:55` | `MappingIdentity` | data | yes | `mappingPackage` | `package` | `!Text` | `(.package)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:56` | `MappingIdentity` | data | yes | `mappingModule` | `moduleName` | `!Text` | `(.moduleName)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:57` | `MappingIdentity` | data | yes | `mappingType` | `valueType` | `!Text` | `(.valueType)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:58` | `MappingIdentity` | data | yes | `mappingBindingSymbol` | `bindingSymbol` | `!Text` | `(.bindingSymbol)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:59` | `MappingIdentity` | data | yes | `mappingBindingVersion` | `bindingVersion` | `!Text` | `(.bindingVersion)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:60` | `MappingIdentity` | data | yes | `mappingFixtureSymbol` | `fixtureSymbol` | `!Text` | `(.fixtureSymbol)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:61` | `MappingIdentity` | data | yes | `mappingInitialSymbol` | `initialSymbol` | `!(Maybe Text)` | `(.initialSymbol)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/MappedDiff.hs:28` | `MappedFinding` | data | yes | `mfDeclaration` | `declaration` | `!Name` | `(.declaration)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/MappedDiff.hs:29` | `MappedFinding` | data | yes | `mfLeaf` | `leaf` | `!Text` | `(.leaf)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/MappedDiff.hs:30` | `MappedFinding` | data | yes | `mfCode` | `code` | `!DiagnosticCode` | `(.code)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/MappedDiff.hs:31` | `MappedFinding` | data | yes | `mfDetail` | `detail` | `!Text` | `(.detail)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/MappedDiff.hs:32` | `MappedFinding` | data | yes | `mfUsePaths` | `usePaths` | `![UsePath]` | `(.usePaths)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/MappedDiff.hs:33` | `MappedFinding` | data | yes | `mfOldUnknownFields` | `oldUnknownFields` | `!(Maybe UnknownFields)` | `(.oldUnknownFields)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/NominalType.hs:70` | `CheckedNominalEquality` | data | yes | `equalityKeyRepresentation` | `keyRepresentation` | `!NominalEqualityKey` | `(.keyRepresentation)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/NominalType.hs:71` | `CheckedNominalEquality` | data | yes | `equalityDomain` | `domain` | `!NominalEqualityDomain` | `(.domain)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/NominalType.hs:72` | `CheckedNominalEquality` | data | yes | `equalityContractVersion` | `contractVersion` | `!Text` | `(.contractVersion)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/NominalType.hs:82` | `ResolvedNominalType` | data | yes | `resolvedNominalName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/NominalType.hs:83` | `ResolvedNominalType` | data | yes | `resolvedNominalRepresentation` | `representation` | `!NominalRepresentation` | `(.representation)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/NominalType.hs:84` | `ResolvedNominalType` | data | yes | `resolvedNominalOwnership` | `ownership` | `!NominalOwnership` | `(.ownership)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/NominalType.hs:85` | `ResolvedNominalType` | data | yes | `resolvedNominalLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Parser/Core.hs:75` | `ContextualParseFailure` | data | no | `contextualFailureCode` | `code` | `!SourceLanguageErrorCode` | `(.code)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Parser/Core.hs:76` | `ContextualParseFailure` | data | no | `contextualFailureFeature` | `feature` | `!(Maybe LanguageFeature)` | `(.feature)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Parser/Core.hs:77` | `ContextualParseFailure` | data | no | `contextualFailureSpan` | `span` | `!SourceSpan` | `(.span)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Parser/Preamble.hs:60` | `InitialLanguageClause` | data | no | `initialLanguageSpan` | `span` | `!SourceSpan` | `(.span)`, pattern, or construction | Haskell API and runtime semantics | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Parser/Preamble.hs:61` | `InitialLanguageClause` | data | no | `initialLanguageText` | `text` | `!Text` | `(.text)`, pattern, or construction | Haskell API and runtime semantics | `none` |
-| `keiro-dsl/src/Keiro/Dsl/ProcessReaction.hs:42` | `CheckedFollowUp` | newtype | yes | `syntax` | `syntax` | `FollowUp` | `(.syntax)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ProcessReaction.hs:46` | `CheckedReactionArm` | data | yes | `input` | `input` | `!Name` | `(.input)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ProcessReaction.hs:47` | `CheckedReactionArm` | data | yes | `ordinal` | `ordinal` | `!Int` | `(.ordinal)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ProcessReaction.hs:48` | `CheckedReactionArm` | data | yes | `guard` | `guard` | `!CheckedReactionGuard` | `(.guard)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ProcessReaction.hs:49` | `CheckedReactionArm` | data | yes | `body` | `body` | `!ArmBody` | `(.body)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ProcessReaction.hs:53` | `CheckedReactionTimer` | newtype | yes | `syntax` | `syntax` | `ReactionTimerNode` | `(.syntax)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ProcessReaction.hs:57` | `CheckedProcessReaction` | data | yes | `version` | `version` | `!Natural` | `(.version)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ProcessReaction.hs:58` | `CheckedProcessReaction` | data | yes | `inputs` | `inputs` | `!(NonEmpty InputDecl)` | `(.inputs)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ProcessReaction.hs:59` | `CheckedProcessReaction` | data | yes | `arms` | `arms` | `![CheckedReactionArm]` | `(.arms)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ProcessReaction.hs:60` | `CheckedProcessReaction` | data | yes | `timers` | `timers` | `![CheckedReactionTimer]` | `(.timers)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ProcessReaction.hs:61` | `CheckedProcessReaction` | data | yes | `fingerprint` | `fingerprint` | `!Text` | `(.fingerprint)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ProcessReaction.hs:62` | `CheckedProcessReaction` | data | yes | `verification` | `verification` | `!Text` | `(.verification)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ProcessReaction.hs:63` | `CheckedProcessReaction` | data | yes | `holeObligations` | `holeObligations` | `![Text]` | `(.holeObligations)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ProcessReaction.hs:90` | `ProcessReactionDiagnostic` | data | yes | `loc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ProcessReaction.hs:91` | `ProcessReactionDiagnostic` | data | yes | `code` | `code` | `!ProcessReactionDiagnosticCode` | `(.code)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ProcessReaction.hs:92` | `ProcessReactionDiagnostic` | data | yes | `message` | `message` | `!Text` | `(.message)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ProjectionMappedImpact.hs:39` | `ProjectionMappedRoot` | data | yes | `consumer` | `consumer` | `!DerivedMappedConsumer` | `(.consumer)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/ProjectionMappedImpact.hs:40` | `ProjectionMappedRoot` | data | yes | `declaration` | `declaration` | `!MappedKey` | `(.declaration)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/ProjectionMappedImpact.hs:41` | `ProjectionMappedRoot` | data | yes | `path` | `path` | `!UsePath` | `(.path)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/ProjectionMappedImpact.hs:49` | `ProjectionOperationalImpact` | data | yes | `consumer` | `consumer` | `!DerivedMappedConsumer` | `(.consumer)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/ProjectionMappedImpact.hs:50` | `ProjectionOperationalImpact` | data | yes | `group` | `group` | `!(Maybe Name)` | `(.group)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/ProjectionMappedImpact.hs:51` | `ProjectionOperationalImpact` | data | yes | `targets` | `targets` | `!(Set Name)` | `(.targets)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/ProjectionMappedImpact.hs:52` | `ProjectionOperationalImpact` | data | yes | `readModels` | `readModels` | `!(Set Name)` | `(.readModels)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/ProjectionMappedImpact.hs:53` | `ProjectionOperationalImpact` | data | yes | `replayable` | `replayable` | `!Bool` | `(.replayable)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/ProjectionMappedImpact.hs:54` | `ProjectionOperationalImpact` | data | yes | `sourceFingerprint` | `sourceFingerprint` | `!Text` | `(.sourceFingerprint)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/ProjectionMappedImpact.hs:62` | `UnsupportedProjectionImpact` | data | yes | `source` | `source` | `!UnsupportedProjectionSource` | `(.source)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/ProjectionMappedImpact.hs:63` | `UnsupportedProjectionImpact` | data | yes | `group` | `group` | `!Name` | `(.group)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/ProjectionMappedImpact.hs:64` | `UnsupportedProjectionImpact` | data | yes | `targets` | `targets` | `!(Set Name)` | `(.targets)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/ProjectionMappedImpact.hs:65` | `UnsupportedProjectionImpact` | data | yes | `readModels` | `readModels` | `!(Set Name)` | `(.readModels)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/ProjectionMappedImpact.hs:66` | `UnsupportedProjectionImpact` | data | yes | `replayable` | `replayable` | `!Bool` | `(.replayable)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/ProjectionMappedImpact.hs:71` | `ProjectionMappedImpact` | data | yes | `roots` | `roots` | `![ProjectionMappedRoot]` | `(.roots)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/ProjectionMappedImpact.hs:72` | `ProjectionMappedImpact` | data | yes | `consumers` | `consumers` | `!(Map MappedKey (Set DerivedMappedConsumer))` | `(.consumers)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/ProjectionMappedImpact.hs:73` | `ProjectionMappedImpact` | data | yes | `operations` | `operations` | `!(Map DerivedMappedConsumer ProjectionOperationalImpact)` | `(.operations)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/ProjectionMappedImpact.hs:74` | `ProjectionMappedImpact` | data | yes | `unsupported` | `unsupported` | `![UnsupportedProjectionImpact]` | `(.unsupported)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/ProjectionSupply.hs:21` | `ResolvedProjectionSupply` | data | yes | `supplyQueryModel` | `queryModel` | `!Name` | `(.queryModel)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ProjectionSupply.hs:22` | `ResolvedProjectionSupply` | data | yes | `supplyProjectionOwner` | `projectionOwner` | `!Name` | `(.projectionOwner)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ProjectionSupply.hs:23` | `ResolvedProjectionSupply` | data | yes | `supplyRebuildGroup` | `rebuildGroup` | `!Name` | `(.rebuildGroup)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ProjectionSupply.hs:24` | `ResolvedProjectionSupply` | data | yes | `supplyObservedTargets` | `observedTargets` | `!(NonEmpty Name)` | `(.observedTargets)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ProjectionSupply.hs:25` | `ResolvedProjectionSupply` | data | yes | `supplyQueryLoc` | `queryLoc` | `!Loc` | `(.queryLoc)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ProjectionSupply.hs:26` | `ResolvedProjectionSupply` | data | yes | `supplyOwnerLoc` | `ownerLoc` | `!Loc` | `(.ownerLoc)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ProjectionSupply.hs:46` | `ProjectionSupplyAnalysis` | data | yes | `resolvedProjectionSupplies` | `resolvedProjectionSupplies` | `![ResolvedProjectionSupply]` | `(.resolvedProjectionSupplies)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ProjectionSupply.hs:47` | `ProjectionSupplyAnalysis` | data | yes | `projectionSupplyIssues` | `projectionSupplyIssues` | `![ProjectionSupplyIssue]` | `(.projectionSupplyIssues)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ReadModelQueryContract.hs:35` | `QueryContractIdentity` | data | yes | `qciReadModel` | `readModel` | `!Name` | `(.readModel)`, pattern, or construction | serialized/wire review risk | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ReadModelQueryContract.hs:36` | `QueryContractIdentity` | data | yes | `qciPosition` | `position` | `!QueryContractPosition` | `(.position)`, pattern, or construction | serialized/wire review risk | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ReadModelQueryContract.hs:37` | `QueryContractIdentity` | data | yes | `qciTypeExpression` | `typeExpression` | `!Text` | `(.typeExpression)`, pattern, or construction | serialized/wire review risk | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ReadModelQueryContract.hs:38` | `QueryContractIdentity` | data | yes | `qciMappedDependencies` | `mappedDependencies` | `![Name]` | `(.mappedDependencies)`, pattern, or construction | serialized/wire review risk | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ReadModelQueryContract.hs:43` | `QueryContractDrift` | data | yes | `qcdKey` | `key` | `!(Name, QueryContractPosition)` | `(.key)`, pattern, or construction | serialized/wire review risk | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ReadModelQueryContract.hs:44` | `QueryContractDrift` | data | yes | `qcdPrevious` | `previous` | `!(Maybe QueryContractIdentity)` | `(.previous)`, pattern, or construction | serialized/wire review risk | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ReadModelQueryContract.hs:45` | `QueryContractDrift` | data | yes | `qcdCurrent` | `current` | `!(Maybe QueryContractIdentity)` | `(.current)`, pattern, or construction | serialized/wire review risk | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ReplayImpact.hs:56` | `AggregateImpact` | data | yes | `eventTypes` | `eventTypes` | `!(Set Name)` | `(.eventTypes)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ReplayImpact.hs:57` | `AggregateImpact` | data | yes | `includeSnapshotStreams` | `includeSnapshotStreams` | `!Bool` | `(.includeSnapshotStreams)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ReplayImpact.hs:72` | `CatalogReplayImpact` | data | yes | `affectedGroups` | `affectedGroups` | `!(Set Name)` | `(.affectedGroups)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ReplayImpact.hs:73` | `CatalogReplayImpact` | data | yes | `affectedTargets` | `affectedTargets` | `!(Set Name)` | `(.affectedTargets)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ReplayImpact.hs:74` | `CatalogReplayImpact` | data | yes | `affectedSources` | `affectedSources` | `!(Set Text)` | `(.affectedSources)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ReplayImpact.hs:75` | `CatalogReplayImpact` | data | yes | `affectedAdapters` | `affectedAdapters` | `!(Set Name)` | `(.affectedAdapters)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ReplayImpact.hs:76` | `CatalogReplayImpact` | data | yes | `invalidatesRunningFingerprint` | `invalidatesRunningFingerprint` | `!Bool` | `(.invalidatesRunningFingerprint)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ReplayImpact.hs:217` | `ReplaySurfaceContext` | data | no | `surfaceSpec` | `spec` | `!Spec` | `(.spec)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/ReplayImpact.hs:218` | `ReplaySurfaceContext` | data | no | `surfaceGraphResult` | `graphResult` | `Either (NE.NonEmpty TypeGraphError) TypeGraph` | `(.graphResult)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/ReplayImpact.hs:219` | `ReplaySurfaceContext` | data | no | `surfaceSymbols` | `symbols` | `AggregateSymbols` | `(.symbols)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:54` | `CheckedReadModelQuery` | data | yes | `checkedQueryName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:55` | `CheckedReadModelQuery` | data | yes | `checkedQueryInputType` | `inputType` | `!ResolvedTypeExpr` | `(.inputType)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:56` | `CheckedReadModelQuery` | data | yes | `checkedQueryResultType` | `resultType` | `!ResolvedTypeExpr` | `(.resultType)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:61` | `CheckedMappedExpr` | data | yes | `checkedMappedExprRoot` | `root` | `!SelectionRoot` | `(.root)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:62` | `CheckedMappedExpr` | data | yes | `checkedMappedExprType` | `valueType` | `!ResolvedTypeExpr` | `(.valueType)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:67` | `CheckedMappedType` | data | yes | `checkedMappedTypeKey` | `key` | `!MappedKey` | `(.key)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:68` | `CheckedMappedType` | data | yes | `checkedMappedTypeConstructor` | `constructor` | `!Name` | `(.constructor)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:69` | `CheckedMappedType` | data | yes | `checkedMappedTypeFields` | `fields` | `![ResolvedWireField]` | `(.fields)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:87` | `CheckedSelectionPathSegment` | data | yes | `checkedPathField` | `field` | `!Name` | `(.field)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:88` | `CheckedSelectionPathSegment` | data | yes | `checkedPathWireKey` | `wireKey` | `!Text` | `(.wireKey)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:89` | `CheckedSelectionPathSegment` | data | yes | `checkedPathOwner` | `owner` | `!MappedKey` | `(.owner)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:94` | `CheckedScalarExpr` | data | yes | `checkedScalarType` | `valueType` | `!SelectionScalarType` | `(.valueType)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:95` | `CheckedScalarExpr` | data | yes | `checkedScalarNode` | `node` | `!CheckedScalarNode` | `(.node)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:96` | `CheckedScalarExpr` | data | yes | `checkedScalarLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:137` | `CheckedRouterSelection` | data | yes | `checkedIdentity` | `identity` | `!Text` | `(.identity)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:138` | `CheckedRouterSelection` | data | yes | `checkedVersion` | `version` | `!Natural` | `(.version)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:139` | `CheckedRouterSelection` | data | yes | `checkedQuery` | `query` | `!CheckedReadModelQuery` | `(.query)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:140` | `CheckedRouterSelection` | data | yes | `checkedInputBinding` | `inputBinding` | `!CheckedMappedExpr` | `(.inputBinding)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:141` | `CheckedRouterSelection` | data | yes | `checkedRowBinding` | `rowBinding` | `!CheckedMappedType` | `(.rowBinding)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:142` | `CheckedRouterSelection` | data | yes | `checkedKey` | `key` | `!CheckedScalarExpr` | `(.key)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:143` | `CheckedRouterSelection` | data | yes | `checkedPredicate` | `predicate` | `!CheckedScalarExpr` | `(.predicate)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:144` | `CheckedRouterSelection` | data | yes | `checkedRecipient` | `recipient` | `!CheckedScalarExpr` | `(.recipient)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:145` | `CheckedRouterSelection` | data | yes | `checkedCommandFields` | `commandFields` | `!(Map Name CheckedScalarExpr)` | `(.commandFields)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:146` | `CheckedRouterSelection` | data | yes | `checkedTarget` | `target` | `!Name` | `(.target)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:147` | `CheckedRouterSelection` | data | yes | `checkedCommand` | `command` | `!Name` | `(.command)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:148` | `CheckedRouterSelection` | data | yes | `checkedLimit` | `limit` | `!Natural` | `(.limit)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:149` | `CheckedRouterSelection` | data | yes | `checkedOrder` | `order` | `!CheckedSelectionOrder` | `(.order)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:150` | `CheckedRouterSelection` | data | yes | `checkedDedupe` | `dedupe` | `!CheckedSelectionDedupe` | `(.dedupe)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:151` | `CheckedRouterSelection` | data | yes | `checkedEmptyPolicy` | `emptyPolicy` | `!CheckedEmptySelectionPolicy` | `(.emptyPolicy)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:152` | `CheckedRouterSelection` | data | yes | `checkedFailurePolicy` | `failurePolicy` | `!CheckedSelectionFailurePolicy` | `(.failurePolicy)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:153` | `CheckedRouterSelection` | data | yes | `checkedRedeliveryPolicy` | `redeliveryPolicy` | `!CheckedRedeliveryPolicy` | `(.redeliveryPolicy)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:154` | `CheckedRouterSelection` | data | yes | `checkedPartialPolicy` | `partialPolicy` | `!CheckedPartialDispatchPolicy` | `(.partialPolicy)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:155` | `CheckedRouterSelection` | data | yes | `checkedFingerprint` | `fingerprint` | `!Text` | `(.fingerprint)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:156` | `CheckedRouterSelection` | data | yes | `checkedUseSites` | `useSites` | `![UseSite]` | `(.useSites)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:193` | `RouterSelectionDiagnostic` | data | yes | `selectionDiagnosticLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:194` | `RouterSelectionDiagnostic` | data | yes | `selectionDiagnosticCode` | `code` | `!RouterSelectionDiagnosticCode` | `(.code)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:195` | `RouterSelectionDiagnostic` | data | yes | `selectionDiagnosticMessage` | `message` | `!Text` | `(.message)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/RuntimePackage.hs:18` | `RuntimePackageName` | newtype | yes | `unRuntimePackageName` | `unRuntimePackageName` | `Text` | explicit `unRuntimePackageName` positional function | Haskell API and runtime semantics | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:155` | `ScaffoldModule` | data | yes | `modulePath` | `path` | `!FilePath` | `(.path)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:156` | `ScaffoldModule` | data | yes | `moduleText` | `text` | `!Text` | `(.text)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:157` | `ScaffoldModule` | data | yes | `kind` | `kind` | `!ModuleKind` | `(.kind)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:158` | `ScaffoldModule` | data | yes | `origin` | `origin` | `!Text` | `(.origin)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:166` | `ModuleRole` | data | yes | `roleOwnerKind` | `ownerKind` | `!Text` | `(.ownerKind)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:167` | `ModuleRole` | data | yes | `roleOwnerName` | `ownerName` | `!Text` | `(.ownerName)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:168` | `ModuleRole` | data | yes | `roleFamily` | `family` | `!Text` | `(.family)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:199` | `Context` | data | yes | `contextName` | `name` | `!Text` | `(.name)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:201` | `Context` | data | yes | `moduleRoot` | `moduleRoot` | `!Text` | `(.moduleRoot)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:203` | `Context` | data | yes | `placement` | `placement` | `!Placement` | `(.placement)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:211` | `NominalUseSite` | data | yes | `nominalUseAggregate` | `aggregate` | `!Name` | `(.aggregate)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:212` | `NominalUseSite` | data | yes | `nominalUseKind` | `kind` | `!AggregateUseSite` | `(.kind)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:220` | `NominalGenerationOwner` | data | yes | `nominalDeclaration` | `declaration` | `!ResolvedNominalType` | `(.declaration)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:221` | `NominalGenerationOwner` | data | yes | `nominalModule` | `moduleName` | `!Text` | `(.moduleName)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:222` | `NominalGenerationOwner` | data | yes | `nominalUseSites` | `useSites` | `!(Set.Set NominalUseSite)` | `(.useSites)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:223` | `NominalGenerationOwner` | data | yes | `nominalEqualityUsed` | `equalityUsed` | `!Bool` | `(.equalityUsed)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:335` | `FirewallSurface` | data | yes | `forbiddenSymbolic` | `forbiddenSymbolic` | `![Text]` | `(.forbiddenSymbolic)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:336` | `FirewallSurface` | data | yes | `forbiddenIdents` | `forbiddenIdents` | `![Text]` | `(.forbiddenIdents)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:337` | `FirewallSurface` | data | yes | `forbiddenQualifiers` | `forbiddenQualifiers` | `![Text]` | `(.forbiddenQualifiers)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:338` | `FirewallSurface` | data | yes | `forbiddenImports` | `forbiddenImports` | `![Text]` | `(.forbiddenImports)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:339` | `FirewallSurface` | data | yes | `restrictedImports` | `restrictedImports` | `![(Text, [Text])]` | `(.restrictedImports)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:490` | `Agg` | data | yes | `aContext` | `context` | `!Context` | `(.context)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:491` | `Agg` | data | yes | `aCheckedService` | `checkedService` | `!CheckedService` | `(.checkedService)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:492` | `Agg` | data | yes | `aLanguageContract` | `languageContract` | `!EffectiveLanguageContract` | `(.languageContract)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:493` | `Agg` | data | yes | `aSpec` | `spec` | `!Spec` | `(.spec)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:494` | `Agg` | data | yes | `aAggregate` | `aggregate` | `!Aggregate` | `(.aggregate)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:495` | `Agg` | data | yes | `aCtxPascal` | `ctxPascal` | `!Text` | `(.ctxPascal)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:496` | `Agg` | data | yes | `aName` | `name` | `!Text` | `(.name)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:497` | `Agg` | data | yes | `aLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:498` | `Agg` | data | yes | `aVertexType` | `vertexType` | `!Text` | `(.vertexType)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:499` | `Agg` | data | yes | `aIds` | `ids` | `![IdDecl]` | `(.ids)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:500` | `Agg` | data | yes | `aEnums` | `enums` | `![EnumDecl]` | `(.enums)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:501` | `Agg` | data | yes | `aRegs` | `regs` | `![ResolvedRegister]` | `(.regs)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:502` | `Agg` | data | yes | `aStates` | `states` | `![StateDecl]` | `(.states)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:503` | `Agg` | data | yes | `aCommands` | `commands` | `![ResolvedCtor]` | `(.commands)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:504` | `Agg` | data | yes | `aEvents` | `events` | `![ResolvedCtor]` | `(.events)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:505` | `Agg` | data | yes | `aDomainOutcomeTypes` | `domainOutcomeTypes` | `!(Maybe ResolvedDomainOutcomeTypes)` | `(.domainOutcomeTypes)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:507` | `Agg` | data | yes | `aGeneratedNominals` | `generatedNominals` | `![ResolvedNominalType]` | `(.generatedNominals)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:508` | `Agg` | data | yes | `aTransitions` | `transitions` | `![Transition]` | `(.transitions)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:509` | `Agg` | data | yes | `aOutputMappings` | `outputMappings` | `!(Map.Map (Int, Int) EventOutputMapping)` | `(.outputMappings)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:510` | `Agg` | data | yes | `aWire` | `wire` | `!WireSpec` | `(.wire)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:511` | `Agg` | data | yes | `aProjection` | `projection` | `!(Maybe ProjectionSpec)` | `(.projection)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:512` | `Agg` | data | yes | `aSnapshot` | `snapshot` | `!(Maybe SnapshotSpec)` | `(.snapshot)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:513` | `Agg` | data | yes | `aFoldFingerprint` | `foldFingerprint` | `!Text` | `(.foldFingerprint)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:514` | `Agg` | data | yes | `aReadModels` | `readModels` | `![ReadModelNode]` | `(.readModels)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:515` | `Agg` | data | yes | `aTypeGraph` | `typeGraph` | `!(Maybe TypeGraph)` | `(.typeGraph)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:516` | `Agg` | data | yes | `aSymbols` | `symbols` | `!AggregateSymbols` | `(.symbols)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:518` | `Agg` | data | yes | `aGenPrefix` | `genPrefix` | `!Text` | `(.genPrefix)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:520` | `Agg` | data | yes | `aHolePrefix` | `holePrefix` | `!Text` | `(.holePrefix)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:524` | `ResolvedDomainOutcomeTypes` | data | yes | `resolvedRejectionType` | `rejectionType` | `!ResolvedAggregateType` | `(.rejectionType)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:525` | `ResolvedDomainOutcomeTypes` | data | yes | `resolvedNoOpType` | `noOpType` | `!ResolvedAggregateType` | `(.noOpType)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:533` | `ResolvedRegister` | data | yes | `rrName` | `name` | `!Name` | `(.name)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:534` | `ResolvedRegister` | data | yes | `rrType` | `valueType` | `!ResolvedAggregateType` | `(.valueType)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:535` | `ResolvedRegister` | data | yes | `rrInitial` | `initial` | `!ResolvedRegisterInitial` | `(.initial)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:536` | `ResolvedRegister` | data | yes | `rrLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:543` | `ResolvedCtor` | data | yes | `rcName` | `name` | `!Text` | `(.name)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:545` | `ResolvedCtor` | data | yes | `rcFields` | `fields` | `![(ResolvedFieldIdentity, ResolvedAggregateType)]` | `(.fields)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:547` | `ResolvedCtor` | data | yes | `rcVersion` | `version` | `!Int` | `(.version)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:549` | `ResolvedCtor` | data | yes | `rcUpcastFrom` | `upcastFrom` | `!(Maybe Int)` | `(.upcastFrom)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:2540` | `RenderedShapeType` | data | no | `renderedShapeTypePrecedence` | `precedence` | `!ShapeTypePrecedence` | `(.precedence)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:2541` | `RenderedShapeType` | data | no | `renderedShapeTypeText` | `text` | `!Text` | `(.text)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:2556` | `StructuralProjection` | data | yes | `spTag` | `tag` | `!Text` | `(.tag)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:2557` | `StructuralProjection` | data | yes | `spWitness` | `witness` | `!Text` | `(.witness)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:2558` | `StructuralProjection` | data | yes | `getter` | `getter` | `!Text` | `(.getter)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:2559` | `StructuralProjection` | data | yes | `rawGetter` | `rawGetter` | `!(Maybe Text)` | `(.rawGetter)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:2560` | `StructuralProjection` | data | yes | `spPointer` | `pointer` | `!Text` | `(.pointer)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:2561` | `StructuralProjection` | data | yes | `spOwner` | `owner` | `!HaskellSource` | `(.owner)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:2562` | `StructuralProjection` | data | yes | `spResult` | `result` | `!Text` | `(.result)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:2563` | `StructuralProjection` | data | yes | `spCanonical` | `canonical` | `!CanonicalTypeId` | `(.canonical)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:2564` | `StructuralProjection` | data | yes | `spBinding` | `binding` | `!QualifiedValueName` | `(.binding)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:2565` | `StructuralProjection` | data | yes | `fixtures` | `fixtures` | `!QualifiedValueName` | `(.fixtures)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:2566` | `StructuralProjection` | data | yes | `terminalNominal` | `terminalNominal` | `!(Maybe NominalLeaf)` | `(.terminalNominal)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:2567` | `StructuralProjection` | data | yes | `spSelectors` | `selectors` | `![(Text, Text)]` | `(.selectors)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:4384` | `ResolvedQueueField` | data | no | `resolvedQueueField` | `field` | `!WqField` | `(.field)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:4385` | `ResolvedQueueField` | data | no | `resolvedQueueExpression` | `expression` | `!(Maybe ResolvedTypeExpr)` | `(.expression)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:4386` | `ResolvedQueueField` | data | no | `resolvedQueueCodecPlan` | `codecPlan` | `!(Maybe MappedCodecPlan)` | `(.codecPlan)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:8476` | `ResolvedGeneratedTransition` | data | no | `resolvedTransitionIndex` | `index` | `!Int` | `(.index)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:8477` | `ResolvedGeneratedTransition` | data | no | `resolvedTransitionSource` | `source` | `!Transition` | `(.source)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:8478` | `ResolvedGeneratedTransition` | data | no | `resolvedTransitionGuard` | `guard` | `!(Maybe TypedScalarExpr)` | `(.guard)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:8479` | `ResolvedGeneratedTransition` | data | no | `resolvedTransitionWrites` | `writes` | `![(Name, TypedScalarExpr)]` | `(.writes)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:8487` | `ResolvedSilentOutcome` | data | no | `resolvedSilentLayout` | `layout` | `!TransitionLayoutEntry` | `(.layout)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:8488` | `ResolvedSilentOutcome` | data | no | `resolvedSilentKind` | `kind` | `!SilentOutcomeKind` | `(.kind)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:8489` | `ResolvedSilentOutcome` | data | no | `resolvedSilentReason` | `reason` | `!TypedScalarExpr` | `(.reason)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:8625` | `ProjectionAlias` | data | no | `projectionAliasTarget` | `target` | `!ProjectionAliasTarget` | `(.target)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:8626` | `ProjectionAlias` | data | no | `projectionAliasName` | `name` | `!Text` | `(.name)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:8702` | `RenderedKeikiExpr` | data | no | `renderedKeikiText` | `text` | `!Text` | `(.text)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:8703` | `RenderedKeikiExpr` | data | no | `renderedKeikiPrecedence` | `precedence` | `!Int` | `(.precedence)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:46` | `ScaffoldRecord` | data | yes | `recSpecPath` | `specPath` | `!Text` | `(.specPath)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:47` | `ScaffoldRecord` | data | yes | `recModuleRoot` | `moduleRoot` | `!Text` | `(.moduleRoot)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:48` | `ScaffoldRecord` | data | yes | `recLayout` | `layout` | `!Text` | `(.layout)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:49` | `ScaffoldRecord` | data | yes | `recSourceLanguage` | `sourceLanguage` | `!SourceLanguage` | `(.sourceLanguage)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:50` | `ScaffoldRecord` | data | yes | `recLanguageContract` | `languageContract` | `!EffectiveLanguageContract` | `(.languageContract)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:51` | `ScaffoldRecord` | data | yes | `recNamingEdition` | `namingEdition` | `!GeneratedHaskellNamingEdition` | `(.namingEdition)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:52` | `ScaffoldRecord` | data | yes | `recModuleRoles` | `moduleRoles` | `![ScaffoldModuleRoleRow]` | `(.moduleRoles)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:53` | `ScaffoldRecord` | data | yes | `recFiles` | `files` | `![(ModuleKind, FilePath)]` | `(.files)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:54` | `ScaffoldRecord` | data | yes | `recMappings` | `mappings` | `![MappingIdentity]` | `(.mappings)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:55` | `ScaffoldRecord` | data | yes | `recIdDomains` | `idDomains` | `![Text]` | `(.idDomains)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:56` | `ScaffoldRecord` | data | yes | `recNominalEqualities` | `nominalEqualities` | `![Text]` | `(.nominalEqualities)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:57` | `ScaffoldRecord` | data | yes | `recBindingObligations` | `bindingObligations` | `![BindingHole]` | `(.bindingObligations)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:58` | `ScaffoldRecord` | data | yes | `recBehaviorRequirements` | `behaviorRequirements` | `![BehaviorRecordRow]` | `(.behaviorRequirements)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:59` | `ScaffoldRecord` | data | yes | `recProjectionCatalogFacts` | `projectionCatalogFacts` | `![Text]` | `(.projectionCatalogFacts)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:60` | `ScaffoldRecord` | data | yes | `recQueryContractBaseline` | `queryContractBaseline` | `!Bool` | `(.queryContractBaseline)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:61` | `ScaffoldRecord` | data | yes | `recQueryContracts` | `queryContracts` | `![QueryContractIdentity]` | `(.queryContracts)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:62` | `ScaffoldRecord` | data | yes | `recRouterSelections` | `routerSelections` | `![RouterSelectionSnapshot]` | `(.routerSelections)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:63` | `ScaffoldRecord` | data | yes | `processReactions` | `processReactions` | `![ProcessReactionRecordRow]` | `(.processReactions)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:64` | `ScaffoldRecord` | data | yes | `recSemanticImpact` | `semanticImpact` | `!(Maybe SemanticImpactSnapshot)` | `(.semanticImpact)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:69` | `ScaffoldModuleRoleRow` | data | yes | `srrRole` | `role` | `!ModuleRole` | `(.role)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:70` | `ScaffoldModuleRoleRow` | data | yes | `srrKind` | `kind` | `!ModuleKind` | `(.kind)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:71` | `ScaffoldModuleRoleRow` | data | yes | `srrPath` | `path` | `!FilePath` | `(.path)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:79` | `ProcessReactionRecordRow` | data | yes | `processName` | `processName` | `!Text` | `(.processName)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:80` | `ProcessReactionRecordRow` | data | yes | `verification` | `verification` | `!Text` | `(.verification)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:81` | `ProcessReactionRecordRow` | data | yes | `version` | `version` | `!(Maybe Natural)` | `(.version)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:82` | `ProcessReactionRecordRow` | data | yes | `fingerprint` | `fingerprint` | `!(Maybe Text)` | `(.fingerprint)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:83` | `ProcessReactionRecordRow` | data | yes | `holeObligations` | `holeObligations` | `![Text]` | `(.holeObligations)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:197` | `GeneratedHaskellEditionUse` | data | yes | `path` | `path` | `!FilePath` | `(.path)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:198` | `GeneratedHaskellEditionUse` | data | yes | `line` | `line` | `!Int` | `(.line)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:199` | `GeneratedHaskellEditionUse` | data | yes | `current` | `current` | `!Text` | `(.current)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:200` | `GeneratedHaskellEditionUse` | data | yes | `replacement` | `replacement` | `!Text` | `(.replacement)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:201` | `GeneratedHaskellEditionUse` | data | yes | `form` | `form` | `!HoleUseForm` | `(.form)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:214` | `GeneratedHaskellEditionImpact` | data | yes | `fromEdition` | `fromEdition` | `!HaskellName.GeneratedHaskellNamingEdition` | `(.fromEdition)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:215` | `GeneratedHaskellEditionImpact` | data | yes | `generatedPaths` | `generatedPaths` | `![FilePath]` | `(.generatedPaths)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:216` | `GeneratedHaskellEditionImpact` | data | yes | `sidecarPaths` | `sidecarPaths` | `![FilePath]` | `(.sidecarPaths)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:217` | `GeneratedHaskellEditionImpact` | data | yes | `handOwnedUses` | `handOwnedUses` | `![GeneratedHaskellEditionUse]` | `(.handOwnedUses)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:222` | `PreparedGeneratedHaskellEditionMigration` | data | no | `impact` | `impact` | `!GeneratedHaskellEditionImpact` | `(.impact)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:223` | `PreparedGeneratedHaskellEditionMigration` | data | no | `backups` | `backups` | `![(FilePath, FilePath)]` | `(.backups)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:224` | `PreparedGeneratedHaskellEditionMigration` | data | no | `reportPath` | `reportPath` | `!FilePath` | `(.reportPath)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:225` | `PreparedGeneratedHaskellEditionMigration` | data | no | `reportText` | `reportText` | `!Text` | `(.reportText)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:226` | `PreparedGeneratedHaskellEditionMigration` | data | no | `sourceMoves` | `sourceMoves` | `![SourceMove]` | `(.sourceMoves)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:247` | `GeneratedArtifactImpact` | data | yes | `artifactCategory` | `category` | `!GeneratedArtifactCategory` | `(.category)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:248` | `GeneratedArtifactImpact` | data | yes | `artifactRole` | `role` | `!ModuleRole` | `(.role)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:249` | `GeneratedArtifactImpact` | data | yes | `artifactPath` | `path` | `!FilePath` | `(.path)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:250` | `GeneratedArtifactImpact` | data | yes | `artifactDisposition` | `disposition` | `!WriteDisposition` | `(.disposition)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:260` | `StaleModule` | data | yes | `staleKind` | `kind` | `!ModuleKind` | `(.kind)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:261` | `StaleModule` | data | yes | `stalePath` | `path` | `!FilePath` | `(.path)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:262` | `StaleModule` | data | yes | `staleGeneratedEvidence` | `generatedEvidence` | `!(Maybe StaleGeneratedEvidence)` | `(.generatedEvidence)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:267` | `MappingDrift` | data | yes | `driftSpecName` | `specName` | `!Text` | `(.specName)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:268` | `MappingDrift` | data | yes | `driftPrevious` | `previous` | `!(Maybe MappingIdentity)` | `(.previous)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:269` | `MappingDrift` | data | yes | `driftCurrent` | `current` | `!(Maybe MappingIdentity)` | `(.current)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:274` | `SourceLanguageDrift` | data | yes | `languageDriftPrevious` | `previous` | `!SourceLanguage` | `(.previous)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:275` | `SourceLanguageDrift` | data | yes | `languageDriftCurrent` | `current` | `!SourceLanguage` | `(.current)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:280` | `ScaffoldReport` | data | yes | `reportSpecPath` | `specPath` | `!FilePath` | `(.specPath)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:281` | `ScaffoldReport` | data | yes | `reportOutDir` | `outDir` | `!FilePath` | `(.outDir)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:282` | `ScaffoldReport` | data | yes | `reportContext` | `context` | `!Context` | `(.context)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:283` | `ScaffoldReport` | data | yes | `reportDispositions` | `dispositions` | `![(ScaffoldModule, WriteDisposition)]` | `(.dispositions)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:284` | `ScaffoldReport` | data | yes | `reportInertNodes` | `inertNodes` | `![(Text, Text)]` | `(.inertNodes)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:285` | `ScaffoldReport` | data | yes | `reportManifestPath` | `manifestPath` | `!FilePath` | `(.manifestPath)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:286` | `ScaffoldReport` | data | yes | `reportRecordPath` | `recordPath` | `!FilePath` | `(.recordPath)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:287` | `ScaffoldReport` | data | yes | `reportPreviousSpecPath` | `previousSpecPath` | `!(Maybe Text)` | `(.previousSpecPath)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:288` | `ScaffoldReport` | data | yes | `reportStale` | `stale` | `![StaleModule]` | `(.stale)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:289` | `ScaffoldReport` | data | yes | `reportConsumerPlan` | `consumerPlan` | `!ConsumerPlan` | `(.consumerPlan)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:290` | `ScaffoldReport` | data | yes | `reportConstraintPlan` | `constraintPlan` | `![Text]` | `(.constraintPlan)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:291` | `ScaffoldReport` | data | yes | `reportMappingDrift` | `mappingDrift` | `![MappingDrift]` | `(.mappingDrift)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:292` | `ScaffoldReport` | data | yes | `reportQueryContractBaselineUnavailable` | `queryContractBaselineUnavailable` | `!Bool` | `(.queryContractBaselineUnavailable)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:293` | `ScaffoldReport` | data | yes | `reportQueryContractDrift` | `queryContractDrift` | `![QueryContractDrift]` | `(.queryContractDrift)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:294` | `ScaffoldReport` | data | yes | `reportQueryContractMigrations` | `queryContractMigrations` | `![QueryContractMigration]` | `(.queryContractMigrations)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:295` | `ScaffoldReport` | data | yes | `reportSemanticImpact` | `semanticImpact` | `!SemanticImpactReport` | `(.semanticImpact)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:296` | `ScaffoldReport` | data | yes | `reportRouterSelectionDrift` | `routerSelectionDrift` | `![RouterSelectionDrift]` | `(.routerSelectionDrift)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:297` | `ScaffoldReport` | data | yes | `processReactionCoordinationDrift` | `processReactionCoordinationDrift` | `![ProcessReactionDrift]` | `(.processReactionCoordinationDrift)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:298` | `ScaffoldReport` | data | yes | `reportProjectionMappedImpact` | `projectionMappedImpact` | `!(Maybe ProjectionMappedImpact)` | `(.projectionMappedImpact)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:299` | `ScaffoldReport` | data | yes | `reportGeneratedArtifactImpact` | `generatedArtifactImpact` | `![GeneratedArtifactImpact]` | `(.generatedArtifactImpact)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:300` | `ScaffoldReport` | data | yes | `reportSourceLanguageDrift` | `sourceLanguageDrift` | `!(Maybe SourceLanguageDrift)` | `(.sourceLanguageDrift)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:301` | `ScaffoldReport` | data | yes | `reportNewHoles` | `newHoles` | `![BindingHole]` | `(.newHoles)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:302` | `ScaffoldReport` | data | yes | `processReactionRows` | `processReactionRows` | `![ProcessReactionRecordRow]` | `(.processReactionRows)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:303` | `ScaffoldReport` | data | yes | `reportAddedBehavior` | `addedBehavior` | `![BehaviorRecordRow]` | `(.addedBehavior)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:304` | `ScaffoldReport` | data | yes | `reportRemovedBehavior` | `removedBehavior` | `![BehaviorRecordRow]` | `(.removedBehavior)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:305` | `ScaffoldReport` | data | yes | `reportObsoleteOutputHooks` | `obsoleteOutputHooks` | `![(Text, Text)]` | `(.obsoleteOutputHooks)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:306` | `ScaffoldReport` | data | yes | `reportConformancePackage` | `conformancePackage` | `!(Maybe ConformancePackageReport)` | `(.conformancePackage)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:307` | `ScaffoldReport` | data | yes | `reportNameMoves` | `nameMoves` | `![SourceMove]` | `(.nameMoves)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:308` | `ScaffoldReport` | data | yes | `reportSidecarMoves` | `sidecarMoves` | `![SidecarMove]` | `(.sidecarMoves)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:313` | `QueryContractMigration` | data | yes | `qcmOwner` | `owner` | `!Text` | `(.owner)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:314` | `QueryContractMigration` | data | yes | `path` | `path` | `!FilePath` | `(.path)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:315` | `QueryContractMigration` | data | yes | `qcmRequiredImport` | `requiredImport` | `!Text` | `(.requiredImport)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/SemanticContract.hs:63` | `EffectiveLanguageContract` | data | yes | `effectiveContractLanguageVersion` | `contractLanguageVersion` | `!LanguageVersion` | `(.contractLanguageVersion)`, pattern, or construction | serialized/wire review risk | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/SemanticContract.hs:64` | `EffectiveLanguageContract` | data | yes | `effectiveRuntimeProfile` | `runtimeProfile` | `!RuntimeSemanticsProfile` | `(.runtimeProfile)`, pattern, or construction | serialized/wire review risk | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/SemanticContract.hs:160` | `CheckedService` | data | no | `serviceLanguageContract` | `languageContract` | `!EffectiveLanguageContract` | `(.languageContract)`, pattern, or construction | serialized/wire review risk | `none` |
-| `keiro-dsl/src/Keiro/Dsl/SemanticContract.hs:161` | `CheckedService` | data | no | `serviceSpec` | `spec` | `!Spec` | `(.spec)`, pattern, or construction | serialized/wire review risk | `none` |
-| `keiro-dsl/src/Keiro/Dsl/SemanticContract.hs:162` | `CheckedService` | data | no | `serviceTypeGraph` | `typeGraph` | `Either (NonEmpty TypeGraphError) TypeGraph` | `(.typeGraph)`, pattern, or construction | serialized/wire review risk | `none` |
-| `keiro-dsl/src/Keiro/Dsl/SemanticContract.hs:163` | `CheckedService` | data | no | `serviceProjectionSupplies` | `projectionSupplies` | `ProjectionSupplyAnalysis` | `(.projectionSupplies)`, pattern, or construction | serialized/wire review risk | `none` |
-| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:100` | `MappedRoot` | data | yes | `mappedRootConsumer` | `consumer` | `!MappedConsumer` | `(.consumer)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:101` | `MappedRoot` | data | yes | `mappedRootKind` | `kind` | `!MappedRootKind` | `(.kind)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:102` | `MappedRoot` | data | yes | `mappedRootUseSite` | `useSite` | `!UseSite` | `(.useSite)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:103` | `MappedRoot` | data | yes | `mappedRootDeclaration` | `declaration` | `!MappedKey` | `(.declaration)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:111` | `MappedRootEvidence` | data | yes | `evidenceConsumer` | `consumer` | `!MappedConsumer` | `(.consumer)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:112` | `MappedRootEvidence` | data | yes | `evidenceRootKind` | `rootKind` | `!MappedRootKind` | `(.rootKind)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:113` | `MappedRootEvidence` | data | yes | `evidencePath` | `path` | `!Text` | `(.path)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:114` | `MappedRootEvidence` | data | yes | `evidenceOperation` | `operation` | `!(Maybe Text)` | `(.operation)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:141` | `SemanticImpact` | data | yes | `impactRoots` | `roots` | `![MappedRoot]` | `(.roots)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:142` | `SemanticImpact` | data | yes | `impactUsePaths` | `usePaths` | `!(Map MappedKey [UsePath])` | `(.usePaths)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:143` | `SemanticImpact` | data | yes | `impactAggregateDeclarations` | `aggregateDeclarations` | `!(Map MappedConsumer (Set MappedKey))` | `(.aggregateDeclarations)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:144` | `SemanticImpact` | data | yes | `impactDeclarationConsumers` | `declarationConsumers` | `!(Map MappedKey (Set MappedConsumer))` | `(.declarationConsumers)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:145` | `SemanticImpact` | data | yes | `impactDeclarationEvidence` | `declarationEvidence` | `!(Map MappedKey (Set MappedRootEvidence))` | `(.declarationEvidence)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:146` | `SemanticImpact` | data | yes | `impactDeclarationConsequences` | `declarationConsequences` | `!(Map MappedKey (Set MappedConsequence))` | `(.declarationConsequences)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:147` | `SemanticImpact` | data | yes | `impactServiceDeclarations` | `serviceDeclarations` | `!(Set MappedKey)` | `(.serviceDeclarations)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:148` | `SemanticImpact` | data | yes | `impactDeclarationIdentities` | `declarationIdentities` | `!(Map MappedKey Text)` | `(.declarationIdentities)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:149` | `SemanticImpact` | data | yes | `impactUnsupportedProjectionSources` | `unsupportedProjectionSources` | `![UnsupportedProjectionSource]` | `(.unsupportedProjectionSources)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:159` | `SemanticImpactSnapshot` | data | yes | `snapshotMappedConsumers` | `mappedConsumers` | `!(Map MappedKey (Set MappedConsumer))` | `(.mappedConsumers)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:160` | `SemanticImpactSnapshot` | data | yes | `snapshotMappedEvidence` | `mappedEvidence` | `!(Maybe (Map MappedKey (Set MappedRootEvidence)))` | `(.mappedEvidence)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:161` | `SemanticImpactSnapshot` | data | yes | `snapshotMappedConsequences` | `mappedConsequences` | `!(Maybe (Map MappedKey (Set MappedConsequence)))` | `(.mappedConsequences)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:162` | `SemanticImpactSnapshot` | data | yes | `snapshotServiceInventory` | `serviceInventory` | `!(Set MappedKey)` | `(.serviceInventory)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:163` | `SemanticImpactSnapshot` | data | yes | `snapshotDeclarationIdentities` | `declarationIdentities` | `!(Map MappedKey Text)` | `(.declarationIdentities)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:170` | `MappedImpactDelta` | data | yes | `impactDeclaration` | `declaration` | `!MappedKey` | `(.declaration)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:171` | `MappedImpactDelta` | data | yes | `impactPreviousConsumers` | `previousConsumers` | `!(Set MappedConsumer)` | `(.previousConsumers)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:172` | `MappedImpactDelta` | data | yes | `impactCurrentConsumers` | `currentConsumers` | `!(Set MappedConsumer)` | `(.currentConsumers)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:173` | `MappedImpactDelta` | data | yes | `impactPreviousEvidence` | `previousEvidence` | `!(Maybe (Set MappedRootEvidence))` | `(.previousEvidence)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:174` | `MappedImpactDelta` | data | yes | `impactCurrentEvidence` | `currentEvidence` | `!(Maybe (Set MappedRootEvidence))` | `(.currentEvidence)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:175` | `MappedImpactDelta` | data | yes | `impactPreviousConsequences` | `previousConsequences` | `!(Maybe (Set MappedConsequence))` | `(.previousConsequences)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:176` | `MappedImpactDelta` | data | yes | `impactCurrentConsequences` | `currentConsequences` | `!(Maybe (Set MappedConsequence))` | `(.currentConsequences)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:177` | `MappedImpactDelta` | data | yes | `impactServiceConformance` | `serviceConformance` | `!Bool` | `(.serviceConformance)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:185` | `SemanticImpactReport` | data | yes | `semanticReportPrevious` | `previous` | `!(Maybe SemanticImpactSnapshot)` | `(.previous)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:186` | `SemanticImpactReport` | data | yes | `semanticReportCurrent` | `current` | `!SemanticImpactSnapshot` | `(.current)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:187` | `SemanticImpactReport` | data | yes | `semanticReportDeclarations` | `declarations` | `![MappedKey]` | `(.declarations)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:188` | `SemanticImpactReport` | data | yes | `semanticReportDeltas` | `deltas` | `![MappedImpactDelta]` | `(.deltas)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:514` | `SelectionEvidence` | data | no | `selectionEvidenceRoot` | `root` | `!MappedRoot` | `(.root)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:515` | `SelectionEvidence` | data | no | `selectionEvidencePath` | `path` | `!Text` | `(.path)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/ServiceHarness.hs:28` | `DuplicateServiceFactKey` | newtype | yes | `duplicateServiceFactKey` | `duplicateServiceFactKey` | `Text` | `(.duplicateServiceFactKey)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/SidecarMigration.hs:48` | `SidecarMove` | data | yes | `sidecarOldPath` | `oldPath` | `!FilePath` | `(.oldPath)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/SidecarMigration.hs:49` | `SidecarMove` | data | yes | `sidecarNewPath` | `newPath` | `!FilePath` | `(.newPath)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/SidecarMigration.hs:50` | `SidecarMove` | data | yes | `sidecarBackupPath` | `backupPath` | `!(Maybe FilePath)` | `(.backupPath)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/SidecarMigration.hs:51` | `SidecarMove` | data | yes | `sidecarMoveDisposition` | `moveDisposition` | `!SidecarMoveDisposition` | `(.moveDisposition)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Source.hs:22` | `SourcePoint` | data | yes | `offset` | `offset` | `!Int` | `(.offset)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Source.hs:23` | `SourcePoint` | data | yes | `line` | `line` | `!Int` | `(.line)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Source.hs:24` | `SourcePoint` | data | yes | `column` | `column` | `!Int` | `(.column)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Source.hs:38` | `SourceSpan` | data | yes | `source` | `source` | `!FilePath` | `(.source)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Source.hs:39` | `SourceSpan` | data | yes | `start` | `start` | `!SourcePoint` | `(.start)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Source.hs:40` | `SourceSpan` | data | yes | `end` | `end` | `!SourcePoint` | `(.end)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Source.hs:61` | `Located` | data | yes | `span` | `span` | `!SourceSpan` | `(.span)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Ord, Show, Functor, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Source.hs:62` | `Located` | data | yes | `value` | `value` | `!a` | `(.value)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Ord, Show, Functor, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SourceIndex.hs:67` | `IndexedSourcePosition` | data | no | `quality` | `quality` | `!SourcePositionQuality` | `(.quality)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SourceIndex.hs:68` | `IndexedSourcePosition` | data | no | `span` | `span` | `!SourceSpan` | `(.span)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SourceIndex.hs:73` | `SemanticSourceIndex` | newtype | no | `positions` | `positions` | `Map SourceSubject IndexedSourcePosition` | `(.positions)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SourceIndex.hs:79` | `ParsedSourceDocument` | data | yes | `documentParsedSource` | `parsedSource` | `!ParsedSource` | `(.parsedSource)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SourceIndex.hs:80` | `ParsedSourceDocument` | data | yes | `documentSourceIndex` | `sourceIndex` | `!SemanticSourceIndex` | `(.sourceIndex)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SourceIndex.hs:92` | `SourceIndexFailure` | data | yes | `failureCode` | `code` | `!SourceIndexFailureCode` | `(.code)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SourceIndex.hs:93` | `SourceIndexFailure` | data | yes | `failureSubject` | `subject` | `!(Maybe SourceSubject)` | `(.subject)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SourceIndex.hs:94` | `SourceIndexFailure` | data | yes | `failureSpan` | `span` | `!(Maybe SourceSpan)` | `(.span)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/SourceIndex.hs:95` | `SourceIndexFailure` | data | yes | `failureMessage` | `message` | `!Text` | `(.message)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/StructuralConformance.hs:82` | `ConformanceRendering` | data | no | `renderingContext` | `context` | `!Context` | `(.context)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/StructuralConformance.hs:83` | `ConformanceRendering` | data | no | `renderingGraph` | `graph` | `!TypeGraph` | `(.graph)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/StructuralConformance.hs:84` | `ConformanceRendering` | data | no | `renderingDeclarations` | `declarations` | `![ResolvedMappedDecl]` | `(.declarations)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/StructuralConformance.hs:85` | `ConformanceRendering` | data | no | `nominals` | `nominals` | `![NominalLeaf]` | `(.nominals)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/StructuralConformance.hs:86` | `ConformanceRendering` | data | no | `renderingProjections` | `projections` | `![StructuralProjection]` | `(.projections)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/StructuralConformance.hs:87` | `ConformanceRendering` | data | no | `renderingImportPlan` | `importPlan` | `!HaskellImportPlan` | `(.importPlan)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Syntax.hs:33` | `SurfaceSource` | data | yes | `source` | `source` | `!FilePath` | `(.source)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Syntax.hs:34` | `SurfaceSource` | data | yes | `language` | `language` | `!SourceLanguage` | `(.language)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Syntax.hs:35` | `SurfaceSource` | data | yes | `preamble` | `preamble` | `!(Maybe (Located SourceLanguage))` | `(.preamble)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Syntax.hs:36` | `SurfaceSource` | data | yes | `spec` | `spec` | `!(Located SurfaceSpec)` | `(.spec)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Syntax.hs:43` | `SurfaceSpec` | data | yes | `context` | `context` | `!(Located Text)` | `(.context)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Syntax.hs:44` | `SurfaceSpec` | data | yes | `moduleRoot` | `moduleRoot` | `!(Maybe (Located Text))` | `(.moduleRoot)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Syntax.hs:45` | `SurfaceSpec` | data | yes | `layout` | `layout` | `!(Maybe (Located Placement))` | `(.layout)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Syntax.hs:46` | `SurfaceSpec` | data | yes | `items` | `items` | `![Located SurfaceTopItem]` | `(.items)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/Syntax.hs:47` | `SurfaceSpec` | data | yes | `elements` | `elements` | `![Located SurfaceElement]` | `(.elements)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TransitionFamily.hs:39` | `TransitionFamilyKey` | data | yes | `familyMode` | `mode` | `!TransitionMode` | `(.mode)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/TransitionFamily.hs:40` | `TransitionFamilyKey` | data | yes | `familySource` | `source` | `!Name` | `(.source)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/TransitionFamily.hs:41` | `TransitionFamilyKey` | data | yes | `familyCommand` | `command` | `!Name` | `(.command)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/TransitionFamily.hs:53` | `TransitionFamilyDelta` | data | yes | `familyKey` | `familyKey` | `!TransitionFamilyKey` | `(.familyKey)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/TransitionFamily.hs:54` | `TransitionFamilyDelta` | data | yes | `oldRemainder` | `oldRemainder` | `![Transition]` | `(.oldRemainder)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/TransitionFamily.hs:55` | `TransitionFamilyDelta` | data | yes | `newRemainder` | `newRemainder` | `![Transition]` | `(.newRemainder)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/TransitionFamily.hs:61` | `ReplayBodyKey` | newtype | yes | `unReplayBodyKey` | `unReplayBodyKey` | `Text` | explicit `unReplayBodyKey` positional function | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/TransitionFamily.hs:76` | `ReplayBodyDelta` | data | yes | `bodyFamilyKey` | `bodyFamilyKey` | `!TransitionFamilyKey` | `(.bodyFamilyKey)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/TransitionFamily.hs:77` | `ReplayBodyDelta` | data | yes | `bodyKey` | `bodyKey` | `!ReplayBodyKey` | `(.bodyKey)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/TransitionFamily.hs:78` | `ReplayBodyDelta` | data | yes | `oldBodyMembers` | `oldBodyMembers` | `![Transition]` | `(.oldBodyMembers)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/TransitionFamily.hs:79` | `ReplayBodyDelta` | data | yes | `newBodyMembers` | `newBodyMembers` | `![Transition]` | `(.newBodyMembers)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/TransitionFamily.hs:80` | `ReplayBodyDelta` | data | yes | `bodyStatus` | `bodyStatus` | `!ReplayBodyStatus` | `(.bodyStatus)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:99` | `QualifiedValueName` | newtype | yes | `unQualifiedValueName` | `unQualifiedValueName` | `Text` | explicit `unQualifiedValueName` positional function | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:105` | `CanonicalTypeId` | newtype | yes | `unCanonicalTypeId` | `unCanonicalTypeId` | `Text` | explicit `unCanonicalTypeId` positional function | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:111` | `BindingVersion` | newtype | yes | `unBindingVersion` | `unBindingVersion` | `Text` | explicit `unBindingVersion` positional function | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:117` | `CodecIdentity` | newtype | yes | `unCodecIdentity` | `unCodecIdentity` | `Text` | explicit `unCodecIdentity` positional function | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:123` | `CodecVersion` | newtype | yes | `unCodecVersion` | `unCodecVersion` | `Text` | explicit `unCodecVersion` positional function | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:178` | `ConsumerNominalBinding` | data | yes | `haskell` | `haskell` | `!HaskellSource` | `(.haskell)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:179` | `ConsumerNominalBinding` | data | yes | `binding` | `binding` | `!QualifiedValueName` | `(.binding)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:180` | `ConsumerNominalBinding` | data | yes | `bindingVersion` | `bindingVersion` | `!BindingVersion` | `(.bindingVersion)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:181` | `ConsumerNominalBinding` | data | yes | `canonical` | `canonical` | `!CanonicalTypeId` | `(.canonical)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:182` | `ConsumerNominalBinding` | data | yes | `fixtures` | `fixtures` | `!QualifiedValueName` | `(.fixtures)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:183` | `ConsumerNominalBinding` | data | yes | `initial` | `initial` | `!(Maybe QualifiedValueName)` | `(.initial)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:199` | `NominalLeaf` | data | yes | `name` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:200` | `NominalLeaf` | data | yes | `kind` | `kind` | `!NominalLeafKind` | `(.kind)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:201` | `NominalLeaf` | data | yes | `ownership` | `ownership` | `!NominalLeafOwnership` | `(.ownership)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:202` | `NominalLeaf` | data | yes | `loc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:216` | `NominalLeafError` | newtype | yes | `nominalLeafIssues` | `nominalLeafIssues` | `NonEmpty NominalLeafIssue` | `(.nominalLeafIssues)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:327` | `StructuralDecl` | data | yes | `sdName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:328` | `StructuralDecl` | data | yes | `sdHaskell` | `haskell` | `!HaskellSource` | `(.haskell)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:329` | `StructuralDecl` | data | yes | `sdBinding` | `binding` | `!QualifiedValueName` | `(.binding)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:330` | `StructuralDecl` | data | yes | `sdBindingVersion` | `bindingVersion` | `!BindingVersion` | `(.bindingVersion)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:331` | `StructuralDecl` | data | yes | `sdCanonical` | `canonical` | `!CanonicalTypeId` | `(.canonical)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:332` | `StructuralDecl` | data | yes | `sdFixtures` | `fixtures` | `!QualifiedValueName` | `(.fixtures)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:333` | `StructuralDecl` | data | yes | `sdInitial` | `initial` | `!(Maybe QualifiedValueName)` | `(.initial)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:334` | `StructuralDecl` | data | yes | `sdLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:339` | `OpaqueDecl` | data | yes | `odName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:340` | `OpaqueDecl` | data | yes | `odHaskell` | `haskell` | `!HaskellSource` | `(.haskell)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:341` | `OpaqueDecl` | data | yes | `odCodecIdentity` | `codecIdentity` | `!CodecIdentity` | `(.codecIdentity)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:342` | `OpaqueDecl` | data | yes | `odCodecVersion` | `codecVersion` | `!CodecVersion` | `(.codecVersion)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:343` | `OpaqueDecl` | data | yes | `odFixtures` | `fixtures` | `!QualifiedValueName` | `(.fixtures)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:344` | `OpaqueDecl` | data | yes | `odInitial` | `initial` | `!(Maybe QualifiedValueName)` | `(.initial)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:345` | `OpaqueDecl` | data | yes | `odLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:422` | `MappedKey` | newtype | yes | `unMappedKey` | `unMappedKey` | `Name` | explicit `unMappedKey` positional function | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:447` | `ResolvedWireField` | data | yes | `rwfHaskell` | `haskell` | `!Name` | `(.haskell)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:448` | `ResolvedWireField` | data | yes | `rwfKey` | `key` | `!Text` | `(.key)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:449` | `ResolvedWireField` | data | yes | `rwfType` | `valueType` | `!ResolvedTypeExpr` | `(.valueType)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:450` | `ResolvedWireField` | data | yes | `rwfPresence` | `presence` | `!Presence` | `(.presence)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:451` | `ResolvedWireField` | data | yes | `rwfOnMissing` | `onMissing` | `!(Maybe OnMissing)` | `(.onMissing)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:452` | `ResolvedWireField` | data | yes | `rwfLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:457` | `ResolvedWireArm` | data | yes | `rwaCtor` | `ctor` | `!Name` | `(.ctor)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:458` | `ResolvedWireArm` | data | yes | `rwaTag` | `tag` | `!Text` | `(.tag)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:459` | `ResolvedWireArm` | data | yes | `rwaPayload` | `payload` | `!(Maybe ResolvedTypeExpr)` | `(.payload)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:460` | `ResolvedWireArm` | data | yes | `rwaLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:497` | `UseSite` | data | yes | `root` | `root` | `!RootRef` | `(.root)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:498` | `UseSite` | data | yes | `mappedKey` | `mappedKey` | `!MappedKey` | `(.mappedKey)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:503` | `NominalRootSite` | data | yes | `root` | `root` | `!RootRef` | `(.root)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:504` | `NominalRootSite` | data | yes | `nominal` | `nominal` | `!Name` | `(.nominal)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:505` | `NominalRootSite` | data | yes | `segments` | `segments` | `![PathSeg]` | `(.segments)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:521` | `UsePath` | data | yes | `upRoot` | `root` | `!RootRef` | `(.root)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:522` | `UsePath` | data | yes | `upSegments` | `segments` | `![PathSeg]` | `(.segments)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:542` | `TypeGraph` | data | yes | `tgDeclarations` | `declarations` | `!(Map MappedKey ResolvedMappedDecl)` | `(.declarations)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:543` | `TypeGraph` | data | yes | `tgReachability` | `reachability` | `!(Map MappedKey (Set MappedKey))` | `(.reachability)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:544` | `TypeGraph` | data | yes | `nominalLeaves` | `nominalLeaves` | `!(Map Name NominalLeaf)` | `(.nominalLeaves)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:545` | `TypeGraph` | data | yes | `unsupportedNominalLeafKinds` | `unsupportedNominalLeafKinds` | `!(Map Name Text)` | `(.unsupportedNominalLeafKinds)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:546` | `TypeGraph` | data | yes | `nominalReachability` | `nominalReachability` | `!(Map MappedKey (Set Name))` | `(.nominalReachability)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:547` | `TypeGraph` | data | yes | `tgUseSites` | `useSites` | `![UseSite]` | `(.useSites)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:548` | `TypeGraph` | data | yes | `nominalRootSites` | `nominalRootSites` | `![NominalRootSite]` | `(.nominalRootSites)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:549` | `TypeGraph` | data | yes | `tgRootSegments` | `rootSegments` | `!(Map UseSite [PathSeg])` | `(.rootSegments)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:550` | `TypeGraph` | data | yes | `tgDerivedMappedConsumers` | `derivedMappedConsumers` | `![DerivedMappedConsumer]` | `(.derivedMappedConsumers)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:551` | `TypeGraph` | data | yes | `tgReplayableProjectionGroups` | `replayableProjectionGroups` | `!(Map DerivedMappedConsumer Name)` | `(.replayableProjectionGroups)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:552` | `TypeGraph` | data | yes | `tgProjectionOperationalIdentities` | `projectionOperationalIdentities` | `!(Map DerivedMappedConsumer Text)` | `(.projectionOperationalIdentities)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:553` | `TypeGraph` | data | yes | `tgUnsupportedProjectionSources` | `unsupportedProjectionSources` | `![UnsupportedProjectionSource]` | `(.unsupportedProjectionSources)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1198` | `TypeExprAlgebra` | data | yes | `onText` | `onText` | `a` | `(.onText)`, pattern, or construction | rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1199` | `TypeExprAlgebra` | data | yes | `onInt` | `onInt` | `a` | `(.onInt)`, pattern, or construction | rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1200` | `TypeExprAlgebra` | data | yes | `onInteger` | `onInteger` | `a` | `(.onInteger)`, pattern, or construction | rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1201` | `TypeExprAlgebra` | data | yes | `onBool` | `onBool` | `a` | `(.onBool)`, pattern, or construction | rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1202` | `TypeExprAlgebra` | data | yes | `onNatural` | `onNatural` | `a` | `(.onNatural)`, pattern, or construction | rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1203` | `TypeExprAlgebra` | data | yes | `onTime` | `onTime` | `a` | `(.onTime)`, pattern, or construction | rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1204` | `TypeExprAlgebra` | data | yes | `onDay` | `onDay` | `a` | `(.onDay)`, pattern, or construction | rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1205` | `TypeExprAlgebra` | data | yes | `onTextSet` | `onTextSet` | `a` | `(.onTextSet)`, pattern, or construction | rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1206` | `TypeExprAlgebra` | data | yes | `onJson` | `onJson` | `a` | `(.onJson)`, pattern, or construction | rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1207` | `TypeExprAlgebra` | data | yes | `onOptional` | `onOptional` | `a -> a` | `(.onOptional)`, pattern, or construction | rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1208` | `TypeExprAlgebra` | data | yes | `onList` | `onList` | `a -> a` | `(.onList)`, pattern, or construction | rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1209` | `TypeExprAlgebra` | data | yes | `onMap` | `onMap` | `a -> a` | `(.onMap)`, pattern, or construction | rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1210` | `TypeExprAlgebra` | data | yes | `onKeyedMap` | `onKeyedMap` | `NominalLeaf -> a -> a` | `(.onKeyedMap)`, pattern, or construction | rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1211` | `TypeExprAlgebra` | data | yes | `onRef` | `onRef` | `MappedKey -> a` | `(.onRef)`, pattern, or construction | rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1212` | `TypeExprAlgebra` | data | yes | `onNominal` | `onNominal` | `NominalLeaf -> a` | `(.onNominal)`, pattern, or construction | rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1234` | `MappedShapeAlgebra` | data | yes | `onRecord` | `onRecord` | `Name -> UnknownFields -> [ResolvedWireField] -> a` | `(.onRecord)`, pattern, or construction | rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1235` | `MappedShapeAlgebra` | data | yes | `onEnum` | `onEnum` | `[WireEnum] -> a` | `(.onEnum)`, pattern, or construction | rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1236` | `MappedShapeAlgebra` | data | yes | `onUnion` | `onUnion` | `UnionEncoding -> [ResolvedWireArm] -> a` | `(.onUnion)`, pattern, or construction | rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1237` | `MappedShapeAlgebra` | data | yes | `onBare` | `onBare` | `ResolvedTypeExpr -> a` | `(.onBare)`, pattern, or construction | rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1238` | `MappedShapeAlgebra` | data | yes | `onRefined` | `onRefined` | `RefinedWirePolicy -> a` | `(.onRefined)`, pattern, or construction | rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1250` | `MappedDeclAlgebra` | data | yes | `onStructuralDecl` | `onStructuralDecl` | `StructuralDecl -> ResolvedMappedShape -> a` | `(.onStructuralDecl)`, pattern, or construction | rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1251` | `MappedDeclAlgebra` | data | yes | `onOpaqueDecl` | `onOpaqueDecl` | `OpaqueDecl -> a` | `(.onOpaqueDecl)`, pattern, or construction | rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Validate.hs:769` | `Diagnostic` | data | yes | `line` | `line` | `!Int` | `(.line)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Validate.hs:770` | `Diagnostic` | data | yes | `severity` | `severity` | `!Severity` | `(.severity)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Validate.hs:771` | `Diagnostic` | data | yes | `code` | `code` | `!DiagnosticCode` | `(.code)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Validate.hs:772` | `Diagnostic` | data | yes | `relatedLocations` | `relatedLocations` | `![(Int, Text)]` | `(.relatedLocations)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Validate.hs:773` | `Diagnostic` | data | yes | `message` | `message` | `!Text` | `(.message)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
-| `keiro-dsl/src/Keiro/Dsl/Validate.hs:1703` | `NullabilityFacts` | data | no | `nfTopNull` | `topNull` | `!Bool` | `(.topNull)`, pattern, or construction | rendered/canonical output | `none` |
-| `keiro-dsl/src/Keiro/Dsl/Validate.hs:1704` | `NullabilityFacts` | data | no | `nfBadOptional` | `badOptional` | `!Bool` | `(.badOptional)`, pattern, or construction | rendered/canonical output | `none` |
+Inventory: 319 record-owning declarations, 1576 fields, 1528 strict fields, and 1431 fields exported through a public `Type (..)`.
+
+| Location | Owner | Kind | Public | Current | Target | Type/strictness | Selection replacement | Review risk / observable surface | Deriving |
+| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
+| `keiro-dsl/src/Keiro/Dsl/AggregateGenerationPlan.hs:14` | `TransitionLayoutEntry` | data | no | `layoutDeclarationIndex` | `declarationIndex` | `!Int` | `(.declarationIndex)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/AggregateGenerationPlan.hs:15` | `TransitionLayoutEntry` | data | no | `layoutOutgoingIndex` | `outgoingIndex` | `!Int` | `(.outgoingIndex)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/AggregateGenerationPlan.hs:16` | `TransitionLayoutEntry` | data | no | `layoutTransition` | `transition` | `!Transition` | `(.transition)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/AggregateType.hs:86` | `AggregateSymbols` | data | no | `symbolNominals` | `nominals` | `!(Map Name ResolvedNominalType)` | `(.nominals)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/AggregateType.hs:87` | `AggregateSymbols` | data | no | `symbolVertices` | `vertices` | `!(Map Name [Name])` | `(.vertices)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/AggregateType.hs:88` | `AggregateSymbols` | data | no | `symbolMapped` | `mapped` | `!(Map MappedKey ResolvedMappedDecl)` | `(.mapped)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/AggregateType.hs:125` | `AggregateTypeError` | data | yes | `aggregateTypeErrorLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/AggregateType.hs:126` | `AggregateTypeError` | data | yes | `aggregateTypeErrorUseSite` | `useSite` | `!AggregateUseSite` | `(.useSite)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/AggregateType.hs:127` | `AggregateTypeError` | data | yes | `aggregateTypeErrorReason` | `reason` | `!AggregateTypeErrorReason` | `(.reason)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/AggregateType.hs:261` | `AggregateHaskellSource` | data | no | `aggregateSourceBuiltin` | `builtin` | `!(Maybe Text)` | `(.builtin)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/AggregateType.hs:262` | `AggregateHaskellSource` | data | no | `aggregateSourceReference` | `reference` | `!(Maybe HaskellReference)` | `(.reference)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/AggregateType.hs:263` | `AggregateHaskellSource` | data | no | `aggregateSourceStaticImports` | `staticImports` | `!(Set Text)` | `(.staticImports)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:51` | `BehaviorKey` | newtype | yes | `unBehaviorKey` | `unBehaviorKey` | `Text` | explicit `unBehaviorKey` positional function | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:92` | `BehaviorExactLocation` | data | yes | `exactSourceFile` | `sourceFile` | `!FilePath` | `(.sourceFile)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:93` | `BehaviorExactLocation` | data | yes | `exactSourceLine` | `sourceLine` | `!Int` | `(.sourceLine)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:94` | `BehaviorExactLocation` | data | yes | `exactSourceColumn` | `sourceColumn` | `!Int` | `(.sourceColumn)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:99` | `BehaviorRequirement` | data | yes | `requirementKey` | `key` | `!BehaviorKey` | `(.key)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:100` | `BehaviorRequirement` | data | yes | `requirementOrigin` | `origin` | `!RequirementOrigin` | `(.origin)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:101` | `BehaviorRequirement` | data | yes | `requirementKind` | `kind` | `!ObligationKind` | `(.kind)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:102` | `BehaviorRequirement` | data | yes | `requirementEvidence` | `evidence` | `!EvidenceLevel` | `(.evidence)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:103` | `BehaviorRequirement` | data | yes | `requirementGuardCoverage` | `guardCoverage` | `!GuardCoverage` | `(.guardCoverage)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:104` | `BehaviorRequirement` | data | yes | `requirementContext` | `context` | `!Name` | `(.context)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:105` | `BehaviorRequirement` | data | yes | `requirementAggregate` | `aggregate` | `!Name` | `(.aggregate)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:106` | `BehaviorRequirement` | data | yes | `requirementSource` | `source` | `!Name` | `(.source)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:107` | `BehaviorRequirement` | data | yes | `requirementCommand` | `command` | `!Name` | `(.command)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:108` | `BehaviorRequirement` | data | yes | `requirementTarget` | `target` | `!(Maybe Name)` | `(.target)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:109` | `BehaviorRequirement` | data | yes | `requirementMode` | `mode` | `!(Maybe TransitionMode)` | `(.mode)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:110` | `BehaviorRequirement` | data | yes | `requirementEvents` | `events` | `![Name]` | `(.events)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:111` | `BehaviorRequirement` | data | yes | `requirementOutputs` | `outputs` | `![OutputEvidence]` | `(.outputs)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:112` | `BehaviorRequirement` | data | yes | `requirementDomainOutcome` | `domainOutcome` | `!(Maybe TransitionOutcome)` | `(.domainOutcome)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:113` | `BehaviorRequirement` | data | yes | `requirementLocation` | `location` | `!Loc` | `(.location)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:114` | `BehaviorRequirement` | data | yes | `requirementExactLocation` | `exactLocation` | `!(Maybe BehaviorExactLocation)` | `(.exactLocation)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:115` | `BehaviorRequirement` | data | yes | `requirementOwner` | `owner` | `!(Maybe FilePath)` | `(.owner)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:116` | `BehaviorRequirement` | data | yes | `requirementCanonical` | `canonical` | `!Text` | `(.canonical)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:124` | `BehaviorRecordRow` | data | yes | `behaviorRecordKey` | `key` | `!BehaviorKey` | `(.key)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:125` | `BehaviorRecordRow` | data | yes | `behaviorRecordKind` | `kind` | `!ObligationKind` | `(.kind)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:126` | `BehaviorRecordRow` | data | yes | `behaviorRecordEvidence` | `evidence` | `!EvidenceLevel` | `(.evidence)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:127` | `BehaviorRecordRow` | data | yes | `behaviorRecordAggregate` | `aggregate` | `!Name` | `(.aggregate)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:128` | `BehaviorRecordRow` | data | yes | `behaviorRecordSource` | `source` | `!Name` | `(.source)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:129` | `BehaviorRecordRow` | data | yes | `behaviorRecordCommand` | `command` | `!Name` | `(.command)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:130` | `BehaviorRecordRow` | data | yes | `behaviorRecordOwner` | `owner` | `!(Maybe FilePath)` | `(.owner)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:131` | `BehaviorRecordRow` | data | yes | `behaviorRecordOutputs` | `outputs` | `![OutputEvidence]` | `(.outputs)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:143` | `BehaviorObligationsReport` | data | yes | `behaviorSubject` | `subject` | `!FilePath` | `(.subject)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:144` | `BehaviorObligationsReport` | data | yes | `behaviorWorkspaceService` | `workspaceService` | `!(Maybe Text)` | `(.workspaceService)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorCoverage.hs:145` | `BehaviorObligationsReport` | data | yes | `behaviorRequirements` | `requirements` | `![BehaviorRequirement]` | `(.requirements)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorSourceMap.hs:38` | `BehaviorSourceFailure` | data | yes | `failureCode` | `code` | `!BehaviorSourceFailureCode` | `(.code)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorSourceMap.hs:39` | `BehaviorSourceFailure` | data | yes | `failureKey` | `key` | `!BehaviorKey` | `(.key)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorSourceMap.hs:40` | `BehaviorSourceFailure` | data | yes | `failureOrigin` | `origin` | `!RequirementOrigin` | `(.origin)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorSourceMap.hs:41` | `BehaviorSourceFailure` | data | yes | `failureAggregate` | `aggregate` | `!Text` | `(.aggregate)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorSourceMap.hs:42` | `BehaviorSourceFailure` | data | yes | `failureState` | `state` | `!Text` | `(.state)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorSourceMap.hs:43` | `BehaviorSourceFailure` | data | yes | `failureCommand` | `command` | `!Text` | `(.command)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorSourceMap.hs:44` | `BehaviorSourceFailure` | data | yes | `failureSourceSubject` | `sourceSubject` | `!SourceSubject` | `(.sourceSubject)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorSourceMap.hs:45` | `BehaviorSourceFailure` | data | yes | `failureSpan` | `span` | `!(Maybe SourceSpan)` | `(.span)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorSourceMap.hs:46` | `BehaviorSourceFailure` | data | yes | `failureMessage` | `message` | `!Text` | `(.message)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorSourceMap.hs:51` | `BehaviorSourceEntry` | data | yes | `behaviorSourceKey` | `key` | `!BehaviorKey` | `(.key)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorSourceMap.hs:52` | `BehaviorSourceEntry` | data | yes | `behaviorSourceFile` | `file` | `!FilePath` | `(.file)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorSourceMap.hs:53` | `BehaviorSourceEntry` | data | yes | `behaviorSourceLine` | `line` | `!Int` | `(.line)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/BehaviorSourceMap.hs:54` | `BehaviorSourceEntry` | data | yes | `behaviorSourceColumn` | `column` | `!Int` | `(.column)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:45` | `CheckReportLanguage` | data | yes | `reportSourceForm` | `sourceForm` | `!Text` | `(.sourceForm)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:46` | `CheckReportLanguage` | data | yes | `reportDeclaredLanguageVersion` | `declaredLanguageVersion` | `!(Maybe LanguageVersion)` | `(.declaredLanguageVersion)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:47` | `CheckReportLanguage` | data | yes | `reportEffectiveLanguageVersion` | `effectiveLanguageVersion` | `!LanguageVersion` | `(.effectiveLanguageVersion)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:48` | `CheckReportLanguage` | data | yes | `reportRuntimeSemantics` | `runtimeSemantics` | `!Text` | `(.runtimeSemantics)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:49` | `CheckReportLanguage` | data | yes | `reportLanguageSupport` | `languageSupport` | `!LanguageSupport` | `(.languageSupport)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:50` | `CheckReportLanguage` | data | yes | `reportStable` | `stable` | `!Bool` | `(.stable)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:55` | `CheckReportEnforcement` | data | yes | `reportMinLanguage` | `minLanguage` | `!(Maybe LanguageVersion)` | `(.minLanguage)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:56` | `CheckReportEnforcement` | data | yes | `reportDenyWarnings` | `denyWarnings` | `!Bool` | `(.denyWarnings)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:57` | `CheckReportEnforcement` | data | yes | `reportDenyCodes` | `denyCodes` | `![DiagnosticCode]` | `(.denyCodes)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:62` | `CheckReportRelated` | data | yes | `relatedFile` | `file` | `!FilePath` | `(.file)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:63` | `CheckReportRelated` | data | yes | `relatedLine` | `line` | `!Int` | `(.line)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:64` | `CheckReportRelated` | data | yes | `relatedNote` | `note` | `!Text` | `(.note)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:69` | `CheckReportEntry` | data | yes | `entryCode` | `code` | `!DiagnosticCode` | `(.code)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:70` | `CheckReportEntry` | data | yes | `entrySeverity` | `severity` | `!Severity` | `(.severity)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:71` | `CheckReportEntry` | data | yes | `entryFile` | `file` | `!FilePath` | `(.file)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:72` | `CheckReportEntry` | data | yes | `entryLine` | `line` | `!Int` | `(.line)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:73` | `CheckReportEntry` | data | yes | `entryMessage` | `message` | `!Text` | `(.message)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:74` | `CheckReportEntry` | data | yes | `entryDenied` | `denied` | `!Bool` | `(.denied)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:75` | `CheckReportEntry` | data | yes | `entryRelated` | `related` | `![CheckReportRelated]` | `(.related)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:80` | `CheckReportSummary` | data | yes | `summaryErrors` | `errors` | `!Int` | `(.errors)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:81` | `CheckReportSummary` | data | yes | `summaryWarnings` | `warnings` | `!Int` | `(.warnings)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:82` | `CheckReportSummary` | data | yes | `summaryDeniedWarnings` | `deniedWarnings` | `!Int` | `(.deniedWarnings)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:87` | `CheckReportMember` | data | yes | `memberPath` | `path` | `!FilePath` | `(.path)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:88` | `CheckReportMember` | data | yes | `memberSourceForm` | `sourceForm` | `!Text` | `(.sourceForm)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:89` | `CheckReportMember` | data | yes | `memberDeclaredLanguageVersion` | `declaredLanguageVersion` | `!(Maybe LanguageVersion)` | `(.declaredLanguageVersion)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:94` | `CheckReportProcessReaction` | data | yes | `process` | `process` | `!Text` | `(.process)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:95` | `CheckReportProcessReaction` | data | yes | `verification` | `verification` | `!Text` | `(.verification)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:96` | `CheckReportProcessReaction` | data | yes | `version` | `version` | `!Natural` | `(.version)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:97` | `CheckReportProcessReaction` | data | yes | `fingerprint` | `fingerprint` | `!Text` | `(.fingerprint)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:98` | `CheckReportProcessReaction` | data | yes | `holeObligations` | `holeObligations` | `![Text]` | `(.holeObligations)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:106` | `CheckReport` | data | no | `reportKind` | `kind` | `!CheckReportKind` | `(.kind)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:107` | `CheckReport` | data | no | `reportSubject` | `subject` | `!FilePath` | `(.subject)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:111` | `CheckReport` | data | no | `reportLanguage` | `language` | `!(Maybe CheckReportLanguage)` | `(.language)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:112` | `CheckReport` | data | no | `reportEnforcement` | `enforcement` | `!CheckReportEnforcement` | `(.enforcement)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:113` | `CheckReport` | data | no | `reportDiagnostics` | `diagnostics` | `![CheckReportEntry]` | `(.diagnostics)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:114` | `CheckReport` | data | no | `reportSummary` | `summary` | `!CheckReportSummary` | `(.summary)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:115` | `CheckReport` | data | no | `reportOk` | `ok` | `!Bool` | `(.ok)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:116` | `CheckReport` | data | no | `reportMembers` | `members` | `![CheckReportMember]` | `(.members)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CheckReport.hs:117` | `CheckReport` | data | no | `processReactions` | `processReactions` | `![CheckReportProcessReaction]` | `(.processReactions)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:70` | `JsonPointer` | newtype | yes | `unJsonPointer` | `unJsonPointer` | `Text` | explicit `unJsonPointer` positional function | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:85` | `HistoricalCodec` | data | yes | `hcIdentity` | `identity` | `!Text` | `(.identity)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:86` | `HistoricalCodec` | data | yes | `hcVersion` | `version` | `!Text` | `(.version)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:87` | `HistoricalCodec` | data | yes | `hcEncode` | `encode` | `!(a -> Value)` | `(.encode)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:88` | `HistoricalCodec` | data | yes | `hcDecode` | `decode` | `!(Value -> Either Text a)` | `(.decode)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:93` | `CompareObservation` | data | yes | `coCaseName` | `caseName` | `!Text` | `(.caseName)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:94` | `CompareObservation` | data | yes | `coHistoricalValue` | `historicalValue` | `!Value` | `(.historicalValue)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:95` | `CompareObservation` | data | yes | `coGeneratedValue` | `generatedValue` | `!Value` | `(.generatedValue)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:98` | `CompareObservation` | data | yes | `coFixturePath` | `fixturePath` | `!FilePath` | `(.fixturePath)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:99` | `CompareObservation` | data | yes | `coInputValue` | `inputValue` | `!Value` | `(.inputValue)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:100` | `CompareObservation` | data | yes | `coHistoricalDecode` | `historicalDecode` | `!DecodeOutcome` | `(.historicalDecode)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:101` | `CompareObservation` | data | yes | `coGeneratedDecode` | `generatedDecode` | `!DecodeOutcome` | `(.generatedDecode)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:124` | `DeclaredBranch` | data | yes | `dbOrigin` | `origin` | `!FixtureOrigin` | `(.origin)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:125` | `DeclaredBranch` | data | yes | `dbPointer` | `pointer` | `!JsonPointer` | `(.pointer)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:126` | `DeclaredBranch` | data | yes | `dbKind` | `kind` | `!BranchKind` | `(.kind)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:131` | `ObservedBranch` | data | yes | `obOrigin` | `origin` | `!FixtureOrigin` | `(.origin)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:132` | `ObservedBranch` | data | yes | `obPointer` | `pointer` | `!JsonPointer` | `(.pointer)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:133` | `ObservedBranch` | data | yes | `obKind` | `kind` | `!BranchKind` | `(.kind)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:138` | `CoverageGap` | data | yes | `cgOrigin` | `origin` | `!FixtureOrigin` | `(.origin)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:139` | `CoverageGap` | data | yes | `cgPointer` | `pointer` | `!JsonPointer` | `(.pointer)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:140` | `CoverageGap` | data | yes | `cgKind` | `kind` | `!BranchKind` | `(.kind)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:157` | `BranchField` | data | yes | `bfWireKey` | `wireKey` | `!Text` | `(.wireKey)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:158` | `BranchField` | data | yes | `bfPresenceOptional` | `presenceOptional` | `!Bool` | `(.presenceOptional)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:159` | `BranchField` | data | yes | `bfSchema` | `schema` | `!BranchSchema` | `(.schema)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:164` | `BranchArm` | data | yes | `baWireTag` | `wireTag` | `!Text` | `(.wireTag)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:165` | `BranchArm` | data | yes | `baPayloadSchema` | `payloadSchema` | `!(Maybe BranchSchema)` | `(.payloadSchema)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:170` | `CompareProvenance` | data | yes | `cpHistoricalCodecIdentity` | `historicalCodecIdentity` | `!Text` | `(.historicalCodecIdentity)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:171` | `CompareProvenance` | data | yes | `cpHistoricalCodecVersion` | `historicalCodecVersion` | `!Text` | `(.historicalCodecVersion)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:172` | `CompareProvenance` | data | yes | `cpCanonicalType` | `canonicalType` | `!CanonicalTypeId` | `(.canonicalType)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:173` | `CompareProvenance` | data | yes | `cpBindingSymbol` | `bindingSymbol` | `!QualifiedValueName` | `(.bindingSymbol)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:174` | `CompareProvenance` | data | yes | `cpBindingVersion` | `bindingVersion` | `!BindingVersion` | `(.bindingVersion)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:175` | `CompareProvenance` | data | yes | `cpWireFingerprint` | `wireFingerprint` | `!Text` | `(.wireFingerprint)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:180` | `ClassifiedObservation` | data | yes | `classifiedOrigin` | `origin` | `!FixtureOrigin` | `(.origin)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:181` | `ClassifiedObservation` | data | yes | `classifiedName` | `name` | `!Text` | `(.name)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:182` | `ClassifiedObservation` | data | yes | `classifiedVerdict` | `verdict` | `!FixtureVerdict` | `(.verdict)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:187` | `CompareReport` | data | yes | `crProvenance` | `provenance` | `!CompareProvenance` | `(.provenance)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:188` | `CompareReport` | data | yes | `crObservations` | `observations` | `![ClassifiedObservation]` | `(.observations)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:189` | `CompareReport` | data | yes | `crInputIssues` | `inputIssues` | `![CompareInputIssue]` | `(.inputIssues)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:190` | `CompareReport` | data | yes | `crCoverageGaps` | `coverageGaps` | `![CoverageGap]` | `(.coverageGaps)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:191` | `CompareReport` | data | yes | `crAuthority` | `authority` | `!Text` | `(.authority)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:196` | `ReportWriteError` | data | yes | `reportWritePath` | `path` | `!FilePath` | `(.path)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/CodecCompare.hs:197` | `ReportWriteError` | data | yes | `reportWriteMessage` | `message` | `!Text` | `(.message)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:58` | `ConformanceFile` | data | yes | `conformanceFilePath` | `path` | `!FilePath` | `(.path)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:59` | `ConformanceFile` | data | yes | `conformanceFileText` | `text` | `!Text` | `(.text)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:60` | `ConformanceFile` | data | yes | `conformanceFileKind` | `kind` | `!ModuleKind` | `(.kind)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:65` | `ConformancePackagePlan` | data | yes | `cppServiceKey` | `serviceKey` | `!ConformanceServiceKey` | `(.serviceKey)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:66` | `ConformancePackagePlan` | data | yes | `cppDirectory` | `directory` | `!FilePath` | `(.directory)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:67` | `ConformancePackagePlan` | data | yes | `cppPackageName` | `packageName` | `!Text` | `(.packageName)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:68` | `ConformancePackagePlan` | data | yes | `cppRuntimePackage` | `runtimePackage` | `!RuntimePackageName` | `(.runtimePackage)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:69` | `ConformancePackagePlan` | data | yes | `cppFacadeModule` | `facadeModule` | `!Text` | `(.facadeModule)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:70` | `ConformancePackagePlan` | data | yes | `cppFiles` | `files` | `![ConformanceFile]` | `(.files)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:78` | `DuplicateFactKey` | data | yes | `duplicateFactSide` | `side` | `!ConformanceFactSide` | `(.side)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:79` | `DuplicateFactKey` | data | yes | `duplicateFactKey` | `key` | `!String` | `(.key)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:101` | `ConformancePackageRecord` | data | yes | `cprSchema` | `schema` | `!Int` | `(.schema)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:102` | `ConformancePackageRecord` | data | yes | `cprServiceKey` | `serviceKey` | `!ConformanceServiceKey` | `(.serviceKey)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:103` | `ConformancePackageRecord` | data | yes | `cprRuntimePackage` | `runtimePackage` | `!RuntimePackageName` | `(.runtimePackage)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:104` | `ConformancePackageRecord` | data | yes | `cprFacadeModule` | `facadeModule` | `!Text` | `(.facadeModule)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:105` | `ConformancePackageRecord` | data | yes | `cprFiles` | `files` | `![(ModuleKind, FilePath)]` | `(.files)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:113` | `ConformanceStaleFile` | data | yes | `conformanceStaleKind` | `kind` | `!ModuleKind` | `(.kind)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:114` | `ConformanceStaleFile` | data | yes | `conformanceStalePath` | `path` | `!FilePath` | `(.path)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:115` | `ConformanceStaleFile` | data | yes | `conformanceStaleBannerPresent` | `bannerPresent` | `!(Maybe Bool)` | `(.bannerPresent)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:120` | `PreparedConformancePackage` | data | no | `preparedRoot` | `root` | `!FilePath` | `(.root)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:121` | `PreparedConformancePackage` | data | no | `preparedPlan` | `plan` | `!ConformancePackagePlan` | `(.plan)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:122` | `PreparedConformancePackage` | data | no | `preparedStale` | `stale` | `![ConformanceStaleFile]` | `(.stale)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:127` | `ConformancePackageReport` | data | yes | `conformanceReportRoot` | `root` | `!FilePath` | `(.root)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:128` | `ConformancePackageReport` | data | yes | `conformanceReportPlan` | `plan` | `!ConformancePackagePlan` | `(.plan)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:129` | `ConformancePackageReport` | data | yes | `conformanceReportDispositions` | `dispositions` | `![(ConformanceFile, ConformanceWriteDisposition)]` | `(.dispositions)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:130` | `ConformancePackageReport` | data | yes | `conformanceReportStale` | `stale` | `![ConformanceStaleFile]` | `(.stale)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:388` | `ConformanceFileRow` | data | no | `conformanceRowKind` | `kind` | `!ModuleKind` | `(.kind)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/ConformancePackage.hs:389` | `ConformanceFileRow` | data | no | `conformanceRowPath` | `path` | `!FilePath` | `(.path)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/ConsumerTypePlan.hs:27` | `HaskellTypeOccurrence` | newtype | yes | `unHaskellTypeOccurrence` | `unHaskellTypeOccurrence` | `Text` | explicit `unHaskellTypeOccurrence` positional function | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ConsumerTypePlan.hs:38` | `ImportRequirement` | data | yes | `package` | `package` | `!Text` | `(.package)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ConsumerTypePlan.hs:39` | `ImportRequirement` | data | yes | `moduleName` | `moduleName` | `!Text` | `(.moduleName)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ConsumerTypePlan.hs:40` | `ImportRequirement` | data | yes | `occurrence` | `occurrence` | `!Text` | `(.occurrence)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ConsumerTypePlan.hs:45` | `ConsumerTypePlan` | data | yes | `haskellType` | `haskellType` | `!HaskellTypeOccurrence` | `(.haskellType)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ConsumerTypePlan.hs:46` | `ConsumerTypePlan` | data | yes | `imports` | `imports` | `![ImportRequirement]` | `(.imports)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ConsumerTypePlan.hs:47` | `ConsumerTypePlan` | data | yes | `dependencies` | `dependencies` | `!(Set MappedKey)` | `(.dependencies)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ConsumerTypePlan.hs:48` | `ConsumerTypePlan` | data | yes | `nominalDependencies` | `nominalDependencies` | `!(Set Text)` | `(.nominalDependencies)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ConsumerTypePlan.hs:162` | `RenderedType` | data | no | `rendered` | `rendered` | `!Text` | `(.rendered)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/ConsumerTypePlan.hs:163` | `RenderedType` | data | no | `precedence` | `precedence` | `!TypePrecedence` | `(.precedence)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/ConsumerTypePlan.hs:164` | `RenderedType` | data | no | `requirements` | `requirements` | `!(Set ImportRequirement)` | `(.requirements)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/ConsumerTypePlan.hs:165` | `RenderedType` | data | no | `mappedDependencies` | `mappedDependencies` | `!(Set MappedKey)` | `(.mappedDependencies)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/ConsumerTypePlan.hs:166` | `RenderedType` | data | no | `nominalDependencies` | `nominalDependencies` | `!(Set Text)` | `(.nominalDependencies)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:67` | `RouterSelectionSnapshot` | data | yes | `selectionRouter` | `router` | `!Name` | `(.router)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:68` | `RouterSelectionSnapshot` | data | yes | `selectionVerification` | `verification` | `!SelectionVerification` | `(.verification)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:69` | `RouterSelectionSnapshot` | data | yes | `selectionIdentity` | `identity` | `!(Maybe Text)` | `(.identity)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:70` | `RouterSelectionSnapshot` | data | yes | `selectionVersion` | `version` | `!(Maybe Natural)` | `(.version)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:71` | `RouterSelectionSnapshot` | data | yes | `selectionFingerprint` | `fingerprint` | `!(Maybe Text)` | `(.fingerprint)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:76` | `CoordinationImpact` | data | yes | `coordinationRouter` | `router` | `!Name` | `(.router)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:77` | `CoordinationImpact` | data | yes | `coordinationSeverity` | `severity` | `!CoordinationSeverity` | `(.severity)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:78` | `CoordinationImpact` | data | yes | `coordinationReason` | `reason` | `!CoordinationReason` | `(.reason)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:79` | `CoordinationImpact` | data | yes | `previousVerification` | `previousVerification` | `!SelectionVerification` | `(.previousVerification)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:80` | `CoordinationImpact` | data | yes | `currentVerification` | `currentVerification` | `!SelectionVerification` | `(.currentVerification)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:81` | `CoordinationImpact` | data | yes | `previousIdentity` | `previousIdentity` | `!(Maybe Text)` | `(.previousIdentity)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:82` | `CoordinationImpact` | data | yes | `currentIdentity` | `currentIdentity` | `!(Maybe Text)` | `(.currentIdentity)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:83` | `CoordinationImpact` | data | yes | `previousVersion` | `previousVersion` | `!(Maybe Natural)` | `(.previousVersion)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:84` | `CoordinationImpact` | data | yes | `currentVersion` | `currentVersion` | `!(Maybe Natural)` | `(.currentVersion)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:85` | `CoordinationImpact` | data | yes | `previousFingerprint` | `previousFingerprint` | `!(Maybe Text)` | `(.previousFingerprint)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:86` | `CoordinationImpact` | data | yes | `currentFingerprint` | `currentFingerprint` | `!(Maybe Text)` | `(.currentFingerprint)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:87` | `CoordinationImpact` | data | yes | `affectedUseSites` | `affectedUseSites` | `![UseSite]` | `(.affectedUseSites)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:92` | `RouterSelectionDrift` | data | yes | `driftRouter` | `router` | `!Name` | `(.router)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:93` | `RouterSelectionDrift` | data | yes | `driftPreviousSelection` | `previousSelection` | `!(Maybe RouterSelectionSnapshot)` | `(.previousSelection)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:94` | `RouterSelectionDrift` | data | yes | `driftCurrentSelection` | `currentSelection` | `!(Maybe RouterSelectionSnapshot)` | `(.currentSelection)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:102` | `ProcessReactionSnapshot` | data | yes | `process` | `process` | `!Name` | `(.process)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:103` | `ProcessReactionSnapshot` | data | yes | `verification` | `verification` | `!Text` | `(.verification)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:104` | `ProcessReactionSnapshot` | data | yes | `version` | `version` | `!(Maybe Natural)` | `(.version)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:105` | `ProcessReactionSnapshot` | data | yes | `fingerprint` | `fingerprint` | `!(Maybe Text)` | `(.fingerprint)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:110` | `ProcessReactionDrift` | data | yes | `process` | `process` | `!Name` | `(.process)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:111` | `ProcessReactionDrift` | data | yes | `previousReaction` | `previousReaction` | `!(Maybe ProcessReactionSnapshot)` | `(.previousReaction)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:112` | `ProcessReactionDrift` | data | yes | `currentReaction` | `currentReaction` | `!(Maybe ProcessReactionSnapshot)` | `(.currentReaction)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:302` | `RouterSelectionState` | data | no | `stateSnapshot` | `snapshot` | `!RouterSelectionSnapshot` | `(.snapshot)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/CoordinationImpact.hs:303` | `RouterSelectionState` | data | no | `stateUseSites` | `useSites` | `![UseSite]` | `(.useSites)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:68` | `CoverageRoot` | data | yes | `rootSurface` | `surface` | `!CoverageSurface` | `(.surface)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:69` | `CoverageRoot` | data | yes | `rootConsumer` | `consumer` | `!Text` | `(.consumer)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:70` | `CoverageRoot` | data | yes | `rootPath` | `path` | `!Text` | `(.path)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:71` | `CoverageRoot` | data | yes | `rootMappedType` | `mappedType` | `!Text` | `(.mappedType)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:72` | `CoverageRoot` | data | yes | `rootMode` | `mode` | `!CoverageMode` | `(.mode)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:73` | `CoverageRoot` | data | yes | `rootCanonicalType` | `canonicalType` | `!(Maybe Text)` | `(.canonicalType)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:74` | `CoverageRoot` | data | yes | `rootCodecIdentity` | `codecIdentity` | `!(Maybe Text)` | `(.codecIdentity)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:75` | `CoverageRoot` | data | yes | `rootCodecVersion` | `codecVersion` | `!(Maybe Text)` | `(.codecVersion)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:76` | `CoverageRoot` | data | yes | `rootWireFingerprint` | `wireFingerprint` | `!Text` | `(.wireFingerprint)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:81` | `StructuralBoundary` | data | yes | `structuralRoot` | `root` | `!Text` | `(.root)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:82` | `StructuralBoundary` | data | yes | `structuralPath` | `path` | `!Text` | `(.path)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:83` | `StructuralBoundary` | data | yes | `structuralMappedType` | `mappedType` | `!Text` | `(.mappedType)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:84` | `StructuralBoundary` | data | yes | `structuralCanonicalType` | `canonicalType` | `!Text` | `(.canonicalType)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:85` | `StructuralBoundary` | data | yes | `structuralWireFingerprint` | `wireFingerprint` | `!Text` | `(.wireFingerprint)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:90` | `OpaqueBoundary` | data | yes | `opaqueRoot` | `root` | `!Text` | `(.root)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:91` | `OpaqueBoundary` | data | yes | `opaquePath` | `path` | `!Text` | `(.path)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:92` | `OpaqueBoundary` | data | yes | `opaqueMappedType` | `mappedType` | `!Text` | `(.mappedType)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:93` | `OpaqueBoundary` | data | yes | `opaqueCodecIdentity` | `codecIdentity` | `!Text` | `(.codecIdentity)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:94` | `OpaqueBoundary` | data | yes | `opaqueCodecVersion` | `codecVersion` | `!Text` | `(.codecVersion)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:99` | `JsonBoundary` | data | yes | `jsonSurface` | `surface` | `!CoverageSurface` | `(.surface)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:100` | `JsonBoundary` | data | yes | `jsonRoot` | `root` | `!Text` | `(.root)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:101` | `JsonBoundary` | data | yes | `jsonPath` | `path` | `!Text` | `(.path)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:106` | `NominalBoundary` | data | yes | `root` | `root` | `!Text` | `(.root)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:107` | `NominalBoundary` | data | yes | `path` | `path` | `!Text` | `(.path)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:108` | `NominalBoundary` | data | yes | `position` | `position` | `!Text` | `(.position)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:109` | `NominalBoundary` | data | yes | `nominal` | `nominal` | `!Text` | `(.nominal)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:110` | `NominalBoundary` | data | yes | `kind` | `kind` | `!Text` | `(.kind)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:111` | `NominalBoundary` | data | yes | `prefix` | `prefix` | `!(Maybe Text)` | `(.prefix)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:112` | `NominalBoundary` | data | yes | `domainVersion` | `domainVersion` | `!(Maybe Text)` | `(.domainVersion)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:113` | `NominalBoundary` | data | yes | `canonicalType` | `canonicalType` | `!(Maybe Text)` | `(.canonicalType)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:114` | `NominalBoundary` | data | yes | `ownership` | `ownership` | `!Text` | `(.ownership)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:119` | `SnapshotBoundary` | data | yes | `snapshotRoot` | `root` | `!Text` | `(.root)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:120` | `SnapshotBoundary` | data | yes | `snapshotAggregate` | `aggregate` | `!Text` | `(.aggregate)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:121` | `SnapshotBoundary` | data | yes | `snapshotRegister` | `register` | `!Text` | `(.register)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:122` | `SnapshotBoundary` | data | yes | `snapshotMappedType` | `mappedType` | `!Text` | `(.mappedType)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:123` | `SnapshotBoundary` | data | yes | `snapshotMode` | `mode` | `!CoverageMode` | `(.mode)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:124` | `SnapshotBoundary` | data | yes | `snapshotEncoding` | `encoding` | `!Text` | `(.encoding)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:125` | `SnapshotBoundary` | data | yes | `snapshotInvalidation` | `invalidation` | `!Text` | `(.invalidation)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:126` | `SnapshotBoundary` | data | yes | `snapshotWireFingerprint` | `wireFingerprint` | `!Text` | `(.wireFingerprint)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:127` | `SnapshotBoundary` | data | yes | `snapshotEnabled` | `enabled` | `!Bool` | `(.enabled)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:132` | `UnsupportedSurface` | data | yes | `unsupportedSurface` | `surface` | `!Text` | `(.surface)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:133` | `UnsupportedSurface` | data | yes | `unsupportedSupport` | `support` | `!Text` | `(.support)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:134` | `UnsupportedSurface` | data | yes | `unsupportedReason` | `reason` | `!Text` | `(.reason)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:139` | `CoverageCounts` | data | yes | `totalRoots` | `totalRoots` | `!Int` | `(.totalRoots)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:140` | `CoverageCounts` | data | yes | `structuralRoots` | `structuralRoots` | `!Int` | `(.structuralRoots)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:141` | `CoverageCounts` | data | yes | `opaqueRoots` | `opaqueRoots` | `!Int` | `(.opaqueRoots)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:142` | `CoverageCounts` | data | yes | `jsonBoundaries` | `jsonBoundaries` | `!Int` | `(.jsonBoundaries)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:147` | `CoverageSummary` | data | yes | `aggregateCommandPayloads` | `aggregateCommandPayloads` | `!CoverageCounts` | `(.aggregateCommandPayloads)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:148` | `CoverageSummary` | data | yes | `privateEventPayloads` | `privateEventPayloads` | `!CoverageCounts` | `(.privateEventPayloads)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:149` | `CoverageSummary` | data | yes | `snapshotRegisters` | `snapshotRegisters` | `!CoverageCounts` | `(.snapshotRegisters)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:150` | `CoverageSummary` | data | yes | `workqueuePayloads` | `workqueuePayloads` | `!CoverageCounts` | `(.workqueuePayloads)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:151` | `CoverageSummary` | data | yes | `readModelQueryInputs` | `readModelQueryInputs` | `!CoverageCounts` | `(.readModelQueryInputs)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:152` | `CoverageSummary` | data | yes | `readModelQueryResults` | `readModelQueryResults` | `!CoverageCounts` | `(.readModelQueryResults)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:153` | `CoverageSummary` | data | yes | `projectionTypedConsumers` | `projectionTypedConsumers` | `!CoverageCounts` | `(.projectionTypedConsumers)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:158` | `CoverageFinding` | data | yes | `findingSeverity` | `severity` | `!Severity` | `(.severity)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:159` | `CoverageFinding` | data | yes | `findingCode` | `code` | `!DiagnosticCode` | `(.code)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:160` | `CoverageFinding` | data | yes | `findingRoots` | `roots` | `![Text]` | `(.roots)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:161` | `CoverageFinding` | data | yes | `findingMessage` | `message` | `!Text` | `(.message)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:166` | `CoveragePrevious` | data | yes | `previousReference` | `reference` | `!Text` | `(.reference)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:167` | `CoveragePrevious` | data | yes | `previousSummary` | `summary` | `!CoverageSummary` | `(.summary)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:168` | `CoveragePrevious` | data | yes | `previousOpaqueBoundaries` | `opaqueBoundaries` | `![OpaqueBoundary]` | `(.opaqueBoundaries)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:173` | `CoverageDelta` | data | yes | `aggregateCommandRootDelta` | `aggregateCommandRootDelta` | `!Int` | `(.aggregateCommandRootDelta)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:174` | `CoverageDelta` | data | yes | `privateEventRootDelta` | `privateEventRootDelta` | `!Int` | `(.privateEventRootDelta)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:175` | `CoverageDelta` | data | yes | `snapshotRegisterRootDelta` | `snapshotRegisterRootDelta` | `!Int` | `(.snapshotRegisterRootDelta)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:176` | `CoverageDelta` | data | yes | `workqueuePayloadRootDelta` | `workqueuePayloadRootDelta` | `!Int` | `(.workqueuePayloadRootDelta)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:177` | `CoverageDelta` | data | yes | `readModelQueryInputRootDelta` | `readModelQueryInputRootDelta` | `!Int` | `(.readModelQueryInputRootDelta)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:178` | `CoverageDelta` | data | yes | `readModelQueryResultRootDelta` | `readModelQueryResultRootDelta` | `!Int` | `(.readModelQueryResultRootDelta)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:179` | `CoverageDelta` | data | yes | `projectionTypedConsumerRootDelta` | `projectionTypedConsumerRootDelta` | `!Int` | `(.projectionTypedConsumerRootDelta)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:180` | `CoverageDelta` | data | yes | `opaqueBoundaryDelta` | `opaqueBoundaryDelta` | `!Int` | `(.opaqueBoundaryDelta)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:181` | `CoverageDelta` | data | yes | `addedOpaqueBoundaries` | `addedOpaqueBoundaries` | `![OpaqueBoundary]` | `(.addedOpaqueBoundaries)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:182` | `CoverageDelta` | data | yes | `removedOpaqueBoundaries` | `removedOpaqueBoundaries` | `![OpaqueBoundary]` | `(.removedOpaqueBoundaries)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:187` | `CoverageReport` | data | yes | `coverageSpec` | `spec` | `!FilePath` | `(.spec)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:188` | `CoverageReport` | data | yes | `coverageRoots` | `roots` | `![CoverageRoot]` | `(.roots)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:189` | `CoverageReport` | data | yes | `coverageStructuralBoundaries` | `structuralBoundaries` | `![StructuralBoundary]` | `(.structuralBoundaries)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:190` | `CoverageReport` | data | yes | `coverageOpaqueBoundaries` | `opaqueBoundaries` | `![OpaqueBoundary]` | `(.opaqueBoundaries)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:191` | `CoverageReport` | data | yes | `coverageJsonBoundaries` | `jsonBoundaries` | `![JsonBoundary]` | `(.jsonBoundaries)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:192` | `CoverageReport` | data | yes | `nominalBoundaries` | `nominalBoundaries` | `![NominalBoundary]` | `(.nominalBoundaries)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:193` | `CoverageReport` | data | yes | `coverageSnapshotBoundaries` | `snapshotBoundaries` | `![SnapshotBoundary]` | `(.snapshotBoundaries)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:194` | `CoverageReport` | data | yes | `coverageUnsupportedSurfaces` | `unsupportedSurfaces` | `![UnsupportedSurface]` | `(.unsupportedSurfaces)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:195` | `CoverageReport` | data | yes | `coverageSummary` | `summary` | `!CoverageSummary` | `(.summary)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:196` | `CoverageReport` | data | yes | `coverageFindings` | `findings` | `![CoverageFinding]` | `(.findings)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:197` | `CoverageReport` | data | yes | `coveragePrevious` | `previous` | `!(Maybe CoveragePrevious)` | `(.previous)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Coverage.hs:198` | `CoverageReport` | data | yes | `coverageDelta` | `delta` | `!(Maybe CoverageDelta)` | `(.delta)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Diff.hs:143` | `CompatibilityVector` | data | yes | `cvPrivateHistoryRead` | `privateHistoryRead` | `!SurfaceVerdict` | `(.privateHistoryRead)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Diff.hs:144` | `CompatibilityVector` | data | yes | `cvOldBinaryReadNewEvents` | `oldBinaryReadNewEvents` | `!SurfaceVerdict` | `(.oldBinaryReadNewEvents)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Diff.hs:145` | `CompatibilityVector` | data | yes | `cvSnapshotHydration` | `snapshotHydration` | `!SurfaceVerdict` | `(.snapshotHydration)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Diff.hs:146` | `CompatibilityVector` | data | yes | `cvPublicConsumer` | `publicConsumer` | `!SurfaceVerdict` | `(.publicConsumer)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Diff.hs:147` | `CompatibilityVector` | data | yes | `cvPersistedIdentity` | `persistedIdentity` | `!SurfaceVerdict` | `(.persistedIdentity)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Diff.hs:148` | `CompatibilityVector` | data | yes | `cvConsumerBuild` | `consumerBuild` | `!SurfaceVerdict` | `(.consumerBuild)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Diff.hs:149` | `CompatibilityVector` | data | yes | `cvRollout` | `rollout` | `!(Set RolloutConstraint)` | `(.rollout)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Diff.hs:162` | `MappedPersistedImpact` | data | yes | `mappedPersistedSurface` | `surface` | `!MappedPersistedSurface` | `(.surface)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Diff.hs:163` | `MappedPersistedImpact` | data | yes | `mappedPersistedVerdict` | `verdict` | `!SurfaceVerdict` | `(.verdict)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Diff.hs:181` | `ChangeContext` | data | no | `changeContextRoot` | `root` | `!Name` | `(.root)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Diff.hs:182` | `ChangeContext` | data | no | `changeContextPaths` | `paths` | `![Text]` | `(.paths)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Diff.hs:183` | `ChangeContext` | data | no | `contextKind` | `contextKind` | `!ContextKind` | `(.contextKind)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Diff.hs:184` | `ChangeContext` | data | no | `contextOriginalLabel` | `contextOriginalLabel` | `!Label` | `(.contextOriginalLabel)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Diff.hs:195` | `ChangeKind` | data | yes | `ckNode` | `node` | `!Name` | `(.node)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Diff.hs:196` | `ChangeKind` | data | yes | `ckFacet` | `facet` | `!Text` | `(.facet)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Diff.hs:197` | `ChangeKind` | data | yes | `ckSubject` | `subject` | `!Text` | `(.subject)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Diff.hs:198` | `ChangeKind` | data | yes | `ckCode` | `code` | `!DiagnosticCode` | `(.code)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Diff.hs:199` | `ChangeKind` | data | yes | `ckContext` | `context` | `!ChangeContext` | `(.context)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Diff.hs:200` | `ChangeKind` | data | yes | `ckVector` | `vector` | `!CompatibilityVector` | `(.vector)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Diff.hs:201` | `ChangeKind` | data | yes | `ckMappedPersistedImpact` | `mappedPersistedImpact` | `!(Maybe MappedPersistedImpact)` | `(.mappedPersistedImpact)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Diff.hs:202` | `ChangeKind` | data | yes | `ckMappedConsequences` | `mappedConsequences` | `!(Set MappedConsequence)` | `(.mappedConsequences)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Diff.hs:203` | `ChangeKind` | data | yes | `ckPaths` | `paths` | `![Text]` | `(.paths)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Diff.hs:204` | `ChangeKind` | data | yes | `ckDetail` | `detail` | `!Text` | `(.detail)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Diff.hs:708` | `DiffEnv` | data | yes | `deOld` | `old` | `!Spec` | `(.old)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Diff.hs:709` | `DiffEnv` | data | yes | `deNew` | `new` | `!Spec` | `(.new)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Diff.hs:710` | `DiffEnv` | data | yes | `oldService` | `oldService` | `!CheckedService` | `(.oldService)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Diff.hs:711` | `DiffEnv` | data | yes | `newService` | `newService` | `!CheckedService` | `(.newService)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Diff.hs:712` | `DiffEnv` | data | yes | `newValidationErrors` | `newValidationErrors` | `![Diagnostic]` | `(.newValidationErrors)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Diff.hs:764` | `Paired` | data | yes | `prMatched` | `matched` | `![(n, n)]` | `(.matched)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Diff.hs:765` | `Paired` | data | yes | `prAdded` | `added` | `![n]` | `(.added)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Diff.hs:766` | `Paired` | data | yes | `prRemoved` | `removed` | `![n]` | `(.removed)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Diff.hs:1830` | `GuardProposal` | data | no | `proposalBody` | `body` | `!ReplayBodyDelta` | `(.body)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Diff.hs:1831` | `GuardProposal` | data | no | `proposalTwin` | `twin` | `!Transition` | `(.twin)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Diff.hs:2220` | `EventFieldSig` | data | no | `eventFieldDslName` | `dslName` | `!Name` | `(.dslName)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Diff.hs:2221` | `EventFieldSig` | data | no | `eventFieldSelector` | `selector` | `!Name` | `(.selector)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Diff.hs:2222` | `EventFieldSig` | data | no | `eventFieldWireKey` | `wireKey` | `!Text` | `(.wireKey)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Diff.hs:2223` | `EventFieldSig` | data | no | `eventFieldType` | `valueType` | `!(Maybe TypeExpr)` | `(.valueType)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/DiffReport.hs:74` | `DiffReport` | data | no | `reportGate` | `gate` | `!(Set CompatibilitySurface)` | `(.gate)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/DiffReport.hs:75` | `DiffReport` | data | no | `reportFindings` | `findings` | `![Change]` | `(.findings)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/DiffReport.hs:76` | `DiffReport` | data | no | `reportSemanticImpact` | `semanticImpact` | `!(Maybe [MappedImpactDelta])` | `(.semanticImpact)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/DiffReport.hs:77` | `DiffReport` | data | no | `reportCoordinationImpact` | `coordinationImpact` | `!(Maybe [CoordinationImpact])` | `(.coordinationImpact)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/DiffReport.hs:97` | `OwnedSite` | data | yes | `osFile` | `file` | `!FilePath` | `(.file)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/DiffReport.hs:98` | `OwnedSite` | data | yes | `osLine` | `line` | `!Int` | `(.line)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/DiffReport.hs:104` | `WorkspaceChange` | data | yes | `wcChange` | `change` | `!Change` | `(.change)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/DiffReport.hs:105` | `WorkspaceChange` | data | yes | `wcDeclarationSite` | `declarationSite` | `!(Maybe OwnedSite)` | `(.declarationSite)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/DiffReport.hs:106` | `WorkspaceChange` | data | yes | `wcUseSites` | `useSites` | `![(Text, Maybe OwnedSite)]` | `(.useSites)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/DiffReport.hs:112` | `WorkspaceMeta` | data | yes | `wmIdentity` | `identity` | `!Text` | `(.identity)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/DiffReport.hs:113` | `WorkspaceMeta` | data | yes | `wmManifest` | `manifest` | `!FilePath` | `(.manifest)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/DiffReport.hs:114` | `WorkspaceMeta` | data | yes | `wmSince` | `since` | `!Text` | `(.since)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/DiffReport.hs:115` | `WorkspaceMeta` | data | yes | `wmMembersOld` | `membersOld` | `![FilePath]` | `(.membersOld)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/DiffReport.hs:116` | `WorkspaceMeta` | data | yes | `wmMembersNew` | `membersNew` | `![FilePath]` | `(.membersNew)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/DiffReport.hs:117` | `WorkspaceMeta` | data | yes | `wmAdoptionBaseline` | `adoptionBaseline` | `!Bool` | `(.adoptionBaseline)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/DiffReport.hs:122` | `WorkspaceDiffReport` | data | no | `workspaceReportMeta` | `meta` | `!WorkspaceMeta` | `(.meta)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/DiffReport.hs:123` | `WorkspaceDiffReport` | data | no | `workspaceReportGate` | `gate` | `!(Set CompatibilitySurface)` | `(.gate)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/DiffReport.hs:124` | `WorkspaceDiffReport` | data | no | `workspaceReportFindings` | `findings` | `![WorkspaceChange]` | `(.findings)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/DiffReport.hs:125` | `WorkspaceDiffReport` | data | no | `workspaceReportSemanticImpact` | `semanticImpact` | `!(Maybe [MappedImpactDelta])` | `(.semanticImpact)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/DiffReport.hs:126` | `WorkspaceDiffReport` | data | no | `workspaceReportCoordinationImpact` | `coordinationImpact` | `!(Maybe [CoordinationImpact])` | `(.coordinationImpact)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/EventOutput.hs:36` | `CheckedFieldCopy` | data | yes | `outputSelector` | `outputSelector` | `!Name` | `(.outputSelector)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/EventOutput.hs:37` | `CheckedFieldCopy` | data | yes | `outputWireName` | `outputWireName` | `!Text` | `(.outputWireName)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/EventOutput.hs:38` | `CheckedFieldCopy` | data | yes | `outputFieldType` | `outputFieldType` | `!ResolvedAggregateType` | `(.outputFieldType)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/EventOutput.hs:43` | `OutputObligationKey` | newtype | yes | `unOutputObligationKey` | `unOutputObligationKey` | `Text` | explicit `unOutputObligationKey` positional function | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/EventOutput.hs:52` | `EventOutputMapping` | data | yes | `outputSourceCommand` | `sourceCommand` | `!Name` | `(.sourceCommand)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/EventOutput.hs:53` | `EventOutputMapping` | data | yes | `outputFields` | `fields` | `![CheckedFieldCopy]` | `(.fields)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/EventOutput.hs:56` | `EventOutputMapping` | data | yes | `outputObligation` | `obligation` | `!OutputObligationKey` | `(.obligation)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/EventOutput.hs:64` | `EventOutputError` | data | yes | `declaredSourceCommand` | `declaredSourceCommand` | `!Name` | `(.declaredSourceCommand)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/EventOutput.hs:65` | `EventOutputError` | data | yes | `consumingTransitionCommand` | `consumingTransitionCommand` | `!Name` | `(.consumingTransitionCommand)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/EventOutput.hs:66` | `EventOutputError` | data | yes | `emittedEventName` | `emittedEventName` | `!Name` | `(.emittedEventName)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ExplainBindings.hs:48` | `BindingObligation` | data | yes | `obligationMappedName` | `mappedName` | `!Name` | `(.mappedName)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ExplainBindings.hs:49` | `BindingObligation` | data | yes | `obligationPackage` | `package` | `!Text` | `(.package)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ExplainBindings.hs:50` | `BindingObligation` | data | yes | `obligationModule` | `moduleName` | `!Text` | `(.moduleName)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ExplainBindings.hs:51` | `BindingObligation` | data | yes | `obligationSymbol` | `symbol` | `!Text` | `(.symbol)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ExplainBindings.hs:52` | `BindingObligation` | data | yes | `obligationKind` | `kind` | `!BindingObligationKind` | `(.kind)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ExplainBindings.hs:53` | `BindingObligation` | data | yes | `obligationSignature` | `signature` | `!Text` | `(.signature)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ExplainBindings.hs:54` | `BindingObligation` | data | yes | `obligationUseSites` | `useSites` | `![Text]` | `(.useSites)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ExplainBindings.hs:55` | `BindingObligation` | data | yes | `obligationBindingVersion` | `bindingVersion` | `!(Maybe Text)` | `(.bindingVersion)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ExplainBindings.hs:56` | `BindingObligation` | data | yes | `obligationCanonicalType` | `canonicalType` | `!(Maybe Text)` | `(.canonicalType)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ExplainBindings.hs:57` | `BindingObligation` | data | yes | `obligationEqualityContract` | `equalityContract` | `!(Maybe Text)` | `(.equalityContract)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ExplainBindings.hs:58` | `BindingObligation` | data | yes | `obligationIdDomainContract` | `idDomainContract` | `!(Maybe Text)` | `(.idDomainContract)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ExplainBindings.hs:59` | `BindingObligation` | data | yes | `obligationCategory` | `category` | `!Text` | `(.category)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ExplainBindings.hs:64` | `BindingHole` | data | yes | `holeMappedName` | `mappedName` | `!Name` | `(.mappedName)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ExplainBindings.hs:65` | `BindingHole` | data | yes | `holeModule` | `moduleName` | `!Text` | `(.moduleName)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ExplainBindings.hs:66` | `BindingHole` | data | yes | `holeSymbol` | `symbol` | `!Text` | `(.symbol)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ExplainBindings.hs:67` | `BindingHole` | data | yes | `holeKind` | `kind` | `!BindingObligationKind` | `(.kind)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ExplainBindings.hs:68` | `BindingHole` | data | yes | `holePath` | `path` | `!(Maybe Text)` | `(.path)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ExplainBindings.hs:69` | `BindingHole` | data | yes | `holeSignature` | `signature` | `!Text` | `(.signature)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Expression.hs:45` | `ExpressionEnvironment` | data | no | `environmentSpec` | `spec` | `!Spec` | `(.spec)`, pattern, or construction | Haskell API and runtime semantics | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Expression.hs:46` | `ExpressionEnvironment` | data | no | `environmentAggregate` | `aggregate` | `!Aggregate` | `(.aggregate)`, pattern, or construction | Haskell API and runtime semantics | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Expression.hs:47` | `ExpressionEnvironment` | data | no | `environmentTransition` | `transition` | `!Transition` | `(.transition)`, pattern, or construction | Haskell API and runtime semantics | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Expression.hs:48` | `ExpressionEnvironment` | data | no | `environmentSymbols` | `symbols` | `!AggregateSymbols` | `(.symbols)`, pattern, or construction | Haskell API and runtime semantics | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Expression.hs:49` | `ExpressionEnvironment` | data | no | `environmentTypeGraph` | `typeGraph` | `!(Maybe TypeGraph)` | `(.typeGraph)`, pattern, or construction | Haskell API and runtime semantics | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Expression.hs:88` | `ResolvedScalarProjection` | data | yes | `scalarProjectionOwner` | `owner` | `!MappedKey` | `(.owner)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Expression.hs:89` | `ResolvedScalarProjection` | data | yes | `scalarProjectionPointer` | `pointer` | `!Text` | `(.pointer)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Expression.hs:90` | `ResolvedScalarProjection` | data | yes | `scalarProjectionFields` | `fields` | `![Name]` | `(.fields)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Expression.hs:91` | `ResolvedScalarProjection` | data | yes | `terminalNominal` | `terminalNominal` | `!(Maybe NominalLeaf)` | `(.terminalNominal)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Expression.hs:128` | `TypedScalarExpr` | data | yes | `typedScalarType` | `valueType` | `!ResolvedAggregateType` | `(.valueType)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Expression.hs:129` | `TypedScalarExpr` | data | yes | `typedScalarLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Expression.hs:130` | `TypedScalarExpr` | data | yes | `typedScalarNode` | `node` | `!TypedScalarNode` | `(.node)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Expression.hs:156` | `ExpressionDiagnostic` | data | yes | `expressionDiagnosticLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Expression.hs:157` | `ExpressionDiagnostic` | data | yes | `expressionDiagnosticCode` | `code` | `!ExpressionDiagnosticCode` | `(.code)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Expression.hs:158` | `ExpressionDiagnostic` | data | yes | `expressionDiagnosticMessage` | `message` | `!Text` | `(.message)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/FieldIdentity.hs:18` | `ResolvedFieldIdentity` | data | no | `fieldDslName` | `dslName` | `!Name` | `(.dslName)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/FieldIdentity.hs:19` | `ResolvedFieldIdentity` | data | no | `fieldSelector` | `selector` | `!Text` | `(.selector)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/FieldIdentity.hs:20` | `ResolvedFieldIdentity` | data | no | `fieldWireKey` | `wireKey` | `!Text` | `(.wireKey)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/FieldIdentity.hs:21` | `ResolvedFieldIdentity` | data | no | `fieldLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/FoldEvidence.hs:89` | `FoldEvidence` | data | no | `canonicalSegments` | `canonicalSegments` | `![Text]` | `(.canonicalSegments)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/FoldEvidence.hs:90` | `FoldEvidence` | data | no | `aggregateSegments` | `aggregateSegments` | `![Text]` | `(.aggregateSegments)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/FoldEvidence.hs:91` | `FoldEvidence` | data | no | `eventSegments` | `eventSegments` | `!(Map.Map Name (Set Text))` | `(.eventSegments)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/FoldEvidence.hs:92` | `FoldEvidence` | data | no | `bodySegments` | `bodySegments` | `!(Map.Map (TransitionFamilyKey, ReplayBodyKey) BodyEvidence)` | `(.bodySegments)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/FoldEvidence.hs:96` | `BodyEvidence` | data | no | `outputSegments` | `outputSegments` | `!(Set Text)` | `(.outputSegments)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/FoldEvidence.hs:97` | `BodyEvidence` | data | no | `ruleSegments` | `ruleSegments` | `!(Map.Map Name Text)` | `(.ruleSegments)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/FoldEvidence.hs:98` | `BodyEvidence` | data | no | `equalitySegments` | `equalitySegments` | `!(Map.Map Name (Set Text))` | `(.equalitySegments)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/FoldEvidence.hs:99` | `BodyEvidence` | data | no | `guardEqualitySegments` | `guardEqualitySegments` | `!(Map.Map Text (Set Text))` | `(.guardEqualitySegments)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/FoldEvidence.hs:100` | `BodyEvidence` | data | no | `emittedEvents` | `emittedEvents` | `!(Set Name)` | `(.emittedEvents)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Frontend/Internal.hs:55` | `FrontendContext` | data | no | `source` | `source` | `!FilePath` | `(.source)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Frontend/Internal.hs:56` | `FrontendContext` | data | no | `language` | `language` | `!SourceLanguage` | `(.language)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Frontend/Internal.hs:57` | `FrontendContext` | data | no | `definition` | `definition` | `!LanguageDefinition` | `(.definition)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Frontend/Internal.hs:91` | `FrontendFailure` | data | no | `phase` | `phase` | `!FrontendPhase` | `(.phase)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Frontend/Internal.hs:92` | `FrontendFailure` | data | no | `code` | `code` | `!FrontendErrorCode` | `(.code)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Frontend/Internal.hs:93` | `FrontendFailure` | data | no | `span` | `span` | `!SourceSpan` | `(.span)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Frontend/Internal.hs:94` | `FrontendFailure` | data | no | `message` | `message` | `!Text` | `(.message)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Frontend/Internal.hs:95` | `FrontendFailure` | data | no | `expected` | `expected` | `![Text]` | `(.expected)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Frontend/Internal.hs:96` | `FrontendFailure` | data | no | `supportedVersions` | `supportedVersions` | `![LanguageVersion]` | `(.supportedVersions)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Frontend/Internal.hs:97` | `FrontendFailure` | data | no | `compatibility` | `compatibility` | `!ParseFailure` | `(.compatibility)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Frontend/Internal.hs:143` | `LoweringFailure` | data | no | `code` | `code` | `!LoweringFailureCode` | `(.code)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Frontend/Internal.hs:144` | `LoweringFailure` | data | no | `span` | `span` | `!SourceSpan` | `(.span)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Frontend/Internal.hs:145` | `LoweringFailure` | data | no | `message` | `message` | `!Text` | `(.message)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Goldens.hs:42` | `GoldenPayload` | data | yes | `goldenContext` | `context` | `!Text` | `(.context)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Goldens.hs:43` | `GoldenPayload` | data | yes | `goldenAggregate` | `aggregate` | `!Text` | `(.aggregate)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Goldens.hs:44` | `GoldenPayload` | data | yes | `goldenEvent` | `event` | `!Text` | `(.event)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Goldens.hs:45` | `GoldenPayload` | data | yes | `goldenVersion` | `version` | `!Int` | `(.version)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Goldens.hs:46` | `GoldenPayload` | data | yes | `goldenJson` | `json` | `!Text` | `(.json)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Goldens.hs:47` | `GoldenPayload` | data | yes | `goldenEvidence` | `evidence` | `!GoldenEvidence` | `(.evidence)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:210` | `Loc` | newtype | yes | `unLoc` | `unLoc` | `Int` | explicit `unLoc` positional function | rendered/canonical output | `deriving stock (Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:227` | `IdDecl` | data | yes | `idName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:228` | `IdDecl` | data | yes | `idPrefix` | `prefix` | `!Text` | `(.prefix)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:229` | `IdDecl` | data | yes | `admission` | `admission` | `!IdAdmission` | `(.admission)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:230` | `IdDecl` | data | yes | `idBinding` | `binding` | `!(Maybe NominalBindingDecl)` | `(.binding)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:231` | `IdDecl` | data | yes | `idLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:238` | `EnumDecl` | data | yes | `enumName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:239` | `EnumDecl` | data | yes | `enumCtors` | `ctors` | `![(Name, Text)]` | `(.ctors)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:240` | `EnumDecl` | data | yes | `enumBinding` | `binding` | `!(Maybe NominalBindingDecl)` | `(.binding)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:241` | `EnumDecl` | data | yes | `enumLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:249` | `RuleDecl` | data | yes | `ruleName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:250` | `RuleDecl` | data | yes | `ruleDomain` | `domain` | `!Name` | `(.domain)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:251` | `RuleDecl` | data | yes | `ruleCodomain` | `codomain` | `!Name` | `(.codomain)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:252` | `RuleDecl` | data | yes | `ruleCases` | `cases` | `![(Name, Expr)]` | `(.cases)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:253` | `RuleDecl` | data | yes | `ruleLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:296` | `WireField` | data | yes | `wfHaskell` | `haskell` | `!Name` | `(.haskell)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:297` | `WireField` | data | yes | `wfKey` | `key` | `!Text` | `(.key)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:298` | `WireField` | data | yes | `wfType` | `valueType` | `!TypeExpr` | `(.valueType)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:299` | `WireField` | data | yes | `wfPresence` | `presence` | `!Presence` | `(.presence)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:300` | `WireField` | data | yes | `wfOnMissing` | `onMissing` | `!(Maybe OnMissing)` | `(.onMissing)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:301` | `WireField` | data | yes | `wfLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:309` | `UnionEncoding` | data | yes | `ueTagField` | `tagField` | `!Text` | `(.tagField)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:310` | `UnionEncoding` | data | yes | `ueContentsField` | `contentsField` | `!Text` | `(.contentsField)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:311` | `UnionEncoding` | data | yes | `ueUnknownFields` | `unknownFields` | `!UnknownFields` | `(.unknownFields)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:316` | `WireEnum` | data | yes | `weCtor` | `ctor` | `!Name` | `(.ctor)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:317` | `WireEnum` | data | yes | `weTag` | `tag` | `!Text` | `(.tag)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:318` | `WireEnum` | data | yes | `weLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:323` | `WireArm` | data | yes | `waCtor` | `ctor` | `!Name` | `(.ctor)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:324` | `WireArm` | data | yes | `waTag` | `tag` | `!Text` | `(.tag)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:325` | `WireArm` | data | yes | `waPayload` | `payload` | `!(Maybe TypeExpr)` | `(.payload)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:326` | `WireArm` | data | yes | `waLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:345` | `HaskellSource` | data | yes | `hsPackage` | `package` | `!Text` | `(.package)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:346` | `HaskellSource` | data | yes | `hsModule` | `moduleName` | `!Text` | `(.moduleName)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:347` | `HaskellSource` | data | yes | `hsType` | `valueType` | `!Name` | `(.valueType)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:356` | `NominalBindingDecl` | data | yes | `nominalHaskell` | `haskell` | `!(Maybe HaskellSource)` | `(.haskell)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:357` | `NominalBindingDecl` | data | yes | `nominalBinding` | `binding` | `!(Maybe Text)` | `(.binding)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:358` | `NominalBindingDecl` | data | yes | `nominalBindingVersion` | `bindingVersion` | `!(Maybe Text)` | `(.bindingVersion)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:359` | `NominalBindingDecl` | data | yes | `nominalCanonicalType` | `canonicalType` | `!(Maybe Text)` | `(.canonicalType)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:360` | `NominalBindingDecl` | data | yes | `nominalFixtures` | `fixtures` | `!(Maybe Text)` | `(.fixtures)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:361` | `NominalBindingDecl` | data | yes | `nominalInitial` | `initial` | `!(Maybe Text)` | `(.initial)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:362` | `NominalBindingDecl` | data | yes | `nominalLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:371` | `NominalScalarDecl` | data | yes | `nominalScalarName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:372` | `NominalScalarDecl` | data | yes | `nominalScalarRepresentation` | `representation` | `!Name` | `(.representation)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:373` | `NominalScalarDecl` | data | yes | `nominalScalarBinding` | `binding` | `!NominalBindingDecl` | `(.binding)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:374` | `NominalScalarDecl` | data | yes | `nominalScalarLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:381` | `MappedWriteLiftDecl` | data | yes | `source` | `source` | `!TypeExpr` | `(.source)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:382` | `MappedWriteLiftDecl` | data | yes | `function` | `function` | `!(Maybe Text)` | `(.function)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:383` | `MappedWriteLiftDecl` | data | yes | `version` | `version` | `!(Maybe Text)` | `(.version)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:384` | `MappedWriteLiftDecl` | data | yes | `fixtures` | `fixtures` | `!(Maybe Text)` | `(.fixtures)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:385` | `MappedWriteLiftDecl` | data | yes | `loc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:391` | `MappedDecl` | data | yes | `msName` | `msName` | `!Name` | `(.msName)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:392` | `MappedDecl` | data | yes | `msHaskell` | `msHaskell` | `!(Maybe HaskellSource)` | `(.msHaskell)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:393` | `MappedDecl` | data | yes | `msBinding` | `msBinding` | `!(Maybe Text)` | `(.msBinding)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:394` | `MappedDecl` | data | yes | `msBindingVersion` | `msBindingVersion` | `!(Maybe Text)` | `(.msBindingVersion)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:395` | `MappedDecl` | data | yes | `msCanonical` | `msCanonical` | `!(Maybe Text)` | `(.msCanonical)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:396` | `MappedDecl` | data | yes | `msFixtures` | `msFixtures` | `!(Maybe Text)` | `(.msFixtures)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:397` | `MappedDecl` | data | yes | `msInitial` | `msInitial` | `!(Maybe Text)` | `(.msInitial)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:398` | `MappedDecl` | data | yes | `msWriteLift` | `msWriteLift` | `!(Maybe MappedWriteLiftDecl)` | `(.msWriteLift)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:399` | `MappedDecl` | data | yes | `msShape` | `msShape` | `!MappedShape` | `(.msShape)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:400` | `MappedDecl` | data | yes | `msLoc` | `msLoc` | `!Loc` | `(.msLoc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:403` | `MappedDecl` | data | yes | `mrName` | `mrName` | `!Name` | `(.mrName)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:404` | `MappedDecl` | data | yes | `mrHaskell` | `mrHaskell` | `!(Maybe HaskellSource)` | `(.mrHaskell)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:405` | `MappedDecl` | data | yes | `mrBinding` | `mrBinding` | `!(Maybe Text)` | `(.mrBinding)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:406` | `MappedDecl` | data | yes | `mrBindingVersion` | `mrBindingVersion` | `!(Maybe Text)` | `(.mrBindingVersion)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:407` | `MappedDecl` | data | yes | `mrCanonical` | `mrCanonical` | `!(Maybe Text)` | `(.mrCanonical)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:408` | `MappedDecl` | data | yes | `mrFixtures` | `mrFixtures` | `!(Maybe Text)` | `(.mrFixtures)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:409` | `MappedDecl` | data | yes | `mrInitial` | `mrInitial` | `!(Maybe Text)` | `(.mrInitial)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:410` | `MappedDecl` | data | yes | `mrPolicy` | `mrPolicy` | `!RefinedWirePolicy` | `(.mrPolicy)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:411` | `MappedDecl` | data | yes | `mrLoc` | `mrLoc` | `!Loc` | `(.mrLoc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:414` | `MappedDecl` | data | yes | `moName` | `moName` | `!Name` | `(.moName)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:415` | `MappedDecl` | data | yes | `moHaskell` | `moHaskell` | `!(Maybe HaskellSource)` | `(.moHaskell)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:416` | `MappedDecl` | data | yes | `moCodecId` | `moCodecId` | `!(Maybe Text)` | `(.moCodecId)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:417` | `MappedDecl` | data | yes | `moCodecVersion` | `moCodecVersion` | `!(Maybe Text)` | `(.moCodecVersion)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:418` | `MappedDecl` | data | yes | `moFixtures` | `moFixtures` | `!(Maybe Text)` | `(.moFixtures)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:419` | `MappedDecl` | data | yes | `moInitial` | `moInitial` | `!(Maybe Text)` | `(.moInitial)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:420` | `MappedDecl` | data | yes | `moWriteLift` | `moWriteLift` | `!(Maybe MappedWriteLiftDecl)` | `(.moWriteLift)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:421` | `MappedDecl` | data | yes | `moLoc` | `moLoc` | `!Loc` | `(.moLoc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:429` | `Mapping` | data | yes | `mapPairs` | `pairs` | `![(Name, Name)]` | `(.pairs)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:430` | `Mapping` | data | yes | `mapPartial` | `partial` | `!Bool` | `(.partial)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:544` | `RegDecl` | data | yes | `regName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:545` | `RegDecl` | data | yes | `regType` | `valueType` | `!TypeExpr` | `(.valueType)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:546` | `RegDecl` | data | yes | `regInitial` | `initial` | `!RegInitial` | `(.initial)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:547` | `RegDecl` | data | yes | `regLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:555` | `StateDecl` | data | yes | `stName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:556` | `StateDecl` | data | yes | `stTerminal` | `terminal` | `!Bool` | `(.terminal)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:557` | `StateDecl` | data | yes | `stLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:568` | `AggregateField` | data | yes | `aggregateFieldName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:569` | `AggregateField` | data | yes | `aggregateFieldSelector` | `selector` | `!(Maybe Name)` | `(.selector)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:570` | `AggregateField` | data | yes | `aggregateFieldWireKey` | `wireKey` | `!(Maybe Text)` | `(.wireKey)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:571` | `AggregateField` | data | yes | `aggregateFieldType` | `valueType` | `!(Maybe TypeExpr)` | `(.valueType)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:572` | `AggregateField` | data | yes | `aggregateFieldLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:579` | `Field` | data | yes | `fieldName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:580` | `Field` | data | yes | `fieldType` | `valueType` | `!(Maybe Name)` | `(.valueType)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:586` | `Command` | data | yes | `cmdName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:587` | `Command` | data | yes | `cmdFields` | `fields` | `![AggregateField]` | `(.fields)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:588` | `Command` | data | yes | `cmdLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:598` | `Event` | data | yes | `evName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:599` | `Event` | data | yes | `evBody` | `body` | `!EventBody` | `(.body)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:601` | `Event` | data | yes | `evVersion` | `version` | `!Int` | `(.version)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:604` | `Event` | data | yes | `evUpcastFrom` | `upcastFrom` | `!(Maybe (Int, Hole))` | `(.upcastFrom)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:609` | `Event` | data | yes | `evRetiring` | `retiring` | `!Bool` | `(.retiring)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:613` | `Event` | data | yes | `evDeprecated` | `deprecated` | `!Bool` | `(.deprecated)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:614` | `Event` | data | yes | `evLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:632` | `DomainOutcomeTypes` | data | yes | `rejectionType` | `rejectionType` | `!Name` | `(.rejectionType)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:633` | `DomainOutcomeTypes` | data | yes | `noOpType` | `noOpType` | `!Name` | `(.noOpType)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:634` | `DomainOutcomeTypes` | data | yes | `outcomeTypesLoc` | `outcomeTypesLoc` | `!Loc` | `(.outcomeTypesLoc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:654` | `Transition` | data | yes | `tSource` | `source` | `!Name` | `(.source)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:655` | `Transition` | data | yes | `tCommand` | `command` | `!Name` | `(.command)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:656` | `Transition` | data | yes | `tImplementation` | `implementation` | `!TransitionImplementation` | `(.implementation)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:657` | `Transition` | data | yes | `tGuard` | `guard` | `!(Maybe Expr)` | `(.guard)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:658` | `Transition` | data | yes | `tWrites` | `writes` | `![(Name, Expr)]` | `(.writes)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:659` | `Transition` | data | yes | `tEmits` | `emits` | `![Name]` | `(.emits)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:660` | `Transition` | data | yes | `tOutcome` | `outcome` | `!(Maybe TransitionOutcome)` | `(.outcome)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:663` | `Transition` | data | yes | `tOutcomeDuplicateLocs` | `outcomeDuplicateLocs` | `![Loc]` | `(.outcomeDuplicateLocs)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:664` | `Transition` | data | yes | `tGoto` | `goto` | `!Name` | `(.goto)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:665` | `Transition` | data | yes | `tMode` | `mode` | `!TransitionMode` | `(.mode)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:666` | `Transition` | data | yes | `tLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:694` | `WireSpec` | data | yes | `wireKind` | `kind` | `!Text` | `(.kind)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:695` | `WireSpec` | data | yes | `wireFields` | `fields` | `!Text` | `(.fields)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:696` | `WireSpec` | data | yes | `wireSchemaVersion` | `schemaVersion` | `!Int` | `(.schemaVersion)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:703` | `ProjectionSpec` | data | yes | `projTable` | `table` | `!Name` | `(.table)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:704` | `ProjectionSpec` | data | yes | `projConsistency` | `consistency` | `!(Maybe Consistency)` | `(.consistency)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:705` | `ProjectionSpec` | data | yes | `projKey` | `key` | `!Name` | `(.key)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:706` | `ProjectionSpec` | data | yes | `projStatusMap` | `statusMap` | `!(Maybe Mapping)` | `(.statusMap)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:707` | `ProjectionSpec` | data | yes | `projLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:720` | `SnapshotSpec` | data | yes | `snapPolicy` | `policy` | `!SnapPolicy` | `(.policy)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:721` | `SnapshotSpec` | data | yes | `snapCodecVersion` | `codecVersion` | `!Int` | `(.codecVersion)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:722` | `SnapshotSpec` | data | yes | `snapShapeHash` | `shapeHash` | `!Text` | `(.shapeHash)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:723` | `SnapshotSpec` | data | yes | `snapLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:730` | `Aggregate` | data | yes | `aggName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:731` | `Aggregate` | data | yes | `aggRegs` | `regs` | `![RegDecl]` | `(.regs)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:732` | `Aggregate` | data | yes | `aggStates` | `states` | `![StateDecl]` | `(.states)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:733` | `Aggregate` | data | yes | `aggCommands` | `commands` | `![Command]` | `(.commands)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:734` | `Aggregate` | data | yes | `aggEvents` | `events` | `![Event]` | `(.events)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:735` | `Aggregate` | data | yes | `aggTransitions` | `transitions` | `![Transition]` | `(.transitions)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:736` | `Aggregate` | data | yes | `aggDomainOutcomeTypes` | `domainOutcomeTypes` | `!(Maybe DomainOutcomeTypes)` | `(.domainOutcomeTypes)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:739` | `Aggregate` | data | yes | `aggDomainOutcomeDuplicateLocs` | `domainOutcomeDuplicateLocs` | `![Loc]` | `(.domainOutcomeDuplicateLocs)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:740` | `Aggregate` | data | yes | `aggWire` | `wire` | `!(Maybe WireSpec)` | `(.wire)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:741` | `Aggregate` | data | yes | `aggProjection` | `projection` | `!(Maybe ProjectionSpec)` | `(.projection)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:742` | `Aggregate` | data | yes | `aggSnapshot` | `snapshot` | `!(Maybe SnapshotSpec)` | `(.snapshot)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:743` | `Aggregate` | data | yes | `aggLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:753` | `FieldBinding` | data | yes | `fbName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:754` | `FieldBinding` | data | yes | `fbValue` | `value` | `!(Maybe Text)` | `(.value)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:761` | `InputDecl` | data | yes | `inName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:762` | `InputDecl` | data | yes | `inFields` | `fields` | `![Field]` | `(.fields)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:763` | `InputDecl` | data | yes | `inType` | `valueType` | `!(Maybe TypeExpr)` | `(.valueType)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:764` | `InputDecl` | data | yes | `inLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:771` | `CorrelateDecl` | data | yes | `corrField` | `field` | `!Name` | `(.field)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:772` | `CorrelateDecl` | data | yes | `corrVia` | `via` | `!Name` | `(.via)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:780` | `SagaRef` | data | yes | `sagaAgg` | `agg` | `!Name` | `(.agg)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:781` | `SagaRef` | data | yes | `sagaCategory` | `category` | `!Text` | `(.category)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:792` | `DispatchDisposition` | data | yes | `onAppended` | `onAppended` | `!Disp` | `(.onAppended)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:793` | `DispatchDisposition` | data | yes | `onDuplicate` | `onDuplicate` | `!Disp` | `(.onDuplicate)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:794` | `DispatchDisposition` | data | yes | `onFailed` | `onFailed` | `!Disp` | `(.onFailed)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:800` | `AdvanceNode` | data | yes | `advCommand` | `advCommand` | `!Name` | `(.advCommand)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:801` | `AdvanceNode` | data | yes | `advFields` | `advFields` | `![FieldBinding]` | `(.advFields)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:807` | `DispatchNode` | data | yes | `dispTarget` | `target` | `!Name` | `(.target)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:808` | `DispatchNode` | data | yes | `dispKey` | `key` | `!Text` | `(.key)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:809` | `DispatchNode` | data | yes | `dispCommand` | `command` | `!Name` | `(.command)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:810` | `DispatchNode` | data | yes | `dispFields` | `fields` | `![FieldBinding]` | `(.fields)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:811` | `DispatchNode` | data | yes | `disposition` | `osition` | `!DispatchDisposition` | `(.osition)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:812` | `DispatchNode` | data | yes | `dispLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:819` | `HandleNode` | data | yes | `hOn` | `on` | `!Name` | `(.on)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:820` | `HandleNode` | data | yes | `hAdvance` | `advance` | `!AdvanceNode` | `(.advance)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:821` | `HandleNode` | data | yes | `hDispatch` | `dispatch` | `![DispatchNode]` | `(.dispatch)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:822` | `HandleNode` | data | yes | `hSchedule` | `schedule` | `!Name` | `(.schedule)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:828` | `IdExpr` | data | yes | `ideStrategy` | `strategy` | `!IdStrategy` | `(.strategy)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:829` | `IdExpr` | data | yes | `idePrefix` | `prefix` | `!Text` | `(.prefix)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:830` | `IdExpr` | data | yes | `ideField` | `field` | `!Name` | `(.field)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:841` | `FireAtExpr` | data | yes | `faField` | `field` | `!Name` | `(.field)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:842` | `FireAtExpr` | data | yes | `faWindow` | `window` | `!Text` | `(.window)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:852` | `FireDisposition` | data | yes | `onOk` | `onOk` | `!FireOutcome` | `(.onOk)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:853` | `FireDisposition` | data | yes | `onReject` | `onReject` | `!FireOutcome` | `(.onReject)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:854` | `FireDisposition` | data | yes | `onAmbiguous` | `onAmbiguous` | `!FireOutcome` | `(.onAmbiguous)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:855` | `FireDisposition` | data | yes | `onError` | `onError` | `!FireOutcome` | `(.onError)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:856` | `FireDisposition` | data | yes | `notMine` | `notMine` | `!FireOutcome` | `(.notMine)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:862` | `FireNode` | data | yes | `fireTarget` | `target` | `!Name` | `(.target)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:863` | `FireNode` | data | yes | `fireKey` | `key` | `!Text` | `(.key)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:864` | `FireNode` | data | yes | `fireCommand` | `command` | `!Name` | `(.command)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:865` | `FireNode` | data | yes | `fireFields` | `fields` | `![FieldBinding]` | `(.fields)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:866` | `FireNode` | data | yes | `fireFiredEventId` | `firedEventId` | `!IdExpr` | `(.firedEventId)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:867` | `FireNode` | data | yes | `fireDisposition` | `disposition` | `!FireDisposition` | `(.disposition)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:873` | `TimerNode` | data | yes | `tmName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:874` | `TimerNode` | data | yes | `tmId` | `id` | `!IdExpr` | `(.id)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:875` | `TimerNode` | data | yes | `tmFireAt` | `fireAt` | `!FireAtExpr` | `(.fireAt)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:876` | `TimerNode` | data | yes | `tmPayload` | `payload` | `![FieldBinding]` | `(.payload)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:877` | `TimerNode` | data | yes | `tmFire` | `fire` | `!FireNode` | `(.fire)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:878` | `TimerNode` | data | yes | `tmDecodeUnknown` | `decodeUnknown` | `!Name` | `(.decodeUnknown)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:879` | `TimerNode` | data | yes | `tmMaxAttempts` | `maxAttempts` | `!Int` | `(.maxAttempts)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:880` | `TimerNode` | data | yes | `tmDeadLetter` | `deadLetter` | `!Text` | `(.deadLetter)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:881` | `TimerNode` | data | yes | `tmLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:894` | `ReactionBody` | data | yes | `version` | `version` | `!Natural` | `(.version)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:895` | `ReactionBody` | data | yes | `versionLoc` | `versionLoc` | `!Loc` | `(.versionLoc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:896` | `ReactionBody` | data | yes | `inputs` | `inputs` | `!(NonEmpty InputDecl)` | `(.inputs)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:897` | `ReactionBody` | data | yes | `reactions` | `reactions` | `!(NonEmpty ReactionNode)` | `(.reactions)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:898` | `ReactionBody` | data | yes | `timerPolicy` | `timerPolicy` | `!(Maybe TimerPolicy)` | `(.timerPolicy)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:899` | `ReactionBody` | data | yes | `timers` | `timers` | `![ReactionTimerNode]` | `(.timers)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:904` | `ReactionNode` | data | yes | `on` | `on` | `!Name` | `(.on)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:905` | `ReactionNode` | data | yes | `arms` | `arms` | `!(NonEmpty ReactionArm)` | `(.arms)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:906` | `ReactionNode` | data | yes | `loc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:911` | `ReactionArm` | data | yes | `guard` | `guard` | `!ArmGuard` | `(.guard)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:912` | `ReactionArm` | data | yes | `body` | `body` | `!ArmBody` | `(.body)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:913` | `ReactionArm` | data | yes | `loc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:926` | `ArmBody` | data | yes | `advance` | `advance` | `!(Maybe AdvanceReaction)` | `(.advance)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:927` | `ArmBody` | data | yes | `followUps` | `followUps` | `![FollowUp]` | `(.followUps)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:932` | `AdvanceReaction` | data | yes | `command` | `command` | `!Name` | `(.command)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:933` | `AdvanceReaction` | data | yes | `fields` | `fields` | `![FieldBinding]` | `(.fields)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:934` | `AdvanceReaction` | data | yes | `accepted` | `accepted` | `!(Maybe [FollowUp])` | `(.accepted)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:935` | `AdvanceReaction` | data | yes | `silentNoAction` | `silentNoAction` | `!Bool` | `(.silentNoAction)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:936` | `AdvanceReaction` | data | yes | `loc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:947` | `ScheduleNode` | data | yes | `timer` | `timer` | `!Name` | `(.timer)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:948` | `ScheduleNode` | data | yes | `mode` | `mode` | `!ScheduleMode` | `(.mode)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:949` | `ScheduleNode` | data | yes | `fireAt` | `fireAt` | `!FireAtExpr` | `(.fireAt)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:950` | `ScheduleNode` | data | yes | `bindings` | `bindings` | `![FieldBinding]` | `(.bindings)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:951` | `ScheduleNode` | data | yes | `loc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:959` | `TimerPolicy` | data | yes | `maxAttempts` | `maxAttempts` | `!Int` | `(.maxAttempts)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:960` | `TimerPolicy` | data | yes | `deadLetter` | `deadLetter` | `!Text` | `(.deadLetter)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:961` | `TimerPolicy` | data | yes | `loc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:966` | `ReactionTimerNode` | data | yes | `name` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:967` | `ReactionTimerNode` | data | yes | `id` | `id` | `!IdExpr` | `(.id)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:968` | `ReactionTimerNode` | data | yes | `payload` | `payload` | `![PayloadField]` | `(.payload)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:969` | `ReactionTimerNode` | data | yes | `fire` | `fire` | `!FireNode` | `(.fire)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:970` | `ReactionTimerNode` | data | yes | `decodeUnknown` | `decodeUnknown` | `!Name` | `(.decodeUnknown)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:971` | `ReactionTimerNode` | data | yes | `loc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:988` | `ProcessNode` | data | yes | `procId` | `id` | `!Name` | `(.id)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:990` | `ProcessNode` | data | yes | `procName` | `name` | `!Text` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:991` | `ProcessNode` | data | yes | `procCorrelate` | `correlate` | `!CorrelateDecl` | `(.correlate)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:992` | `ProcessNode` | data | yes | `procSaga` | `saga` | `!SagaRef` | `(.saga)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:993` | `ProcessNode` | data | yes | `procTarget` | `target` | `!Name` | `(.target)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:994` | `ProcessNode` | data | yes | `procProjections` | `projections` | `![Name]` | `(.projections)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:995` | `ProcessNode` | data | yes | `body` | `body` | `!ProcessBody` | `(.body)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:996` | `ProcessNode` | data | yes | `procRejected` | `rejected` | `!PolicyChoice` | `(.rejected)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:997` | `ProcessNode` | data | yes | `procPoison` | `poison` | `!PolicyChoice` | `(.poison)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:998` | `ProcessNode` | data | yes | `procLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1015` | `RouterSelectionDecl` | data | yes | `rsIdentity` | `identity` | `!Text` | `(.identity)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1016` | `RouterSelectionDecl` | data | yes | `rsIdentityLoc` | `identityLoc` | `!Loc` | `(.identityLoc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1017` | `RouterSelectionDecl` | data | yes | `rsVersion` | `version` | `!Natural` | `(.version)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1018` | `RouterSelectionDecl` | data | yes | `rsVersionLoc` | `versionLoc` | `!Loc` | `(.versionLoc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1019` | `RouterSelectionDecl` | data | yes | `rsQuery` | `query` | `!Name` | `(.query)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1020` | `RouterSelectionDecl` | data | yes | `rsQueryLoc` | `queryLoc` | `!Loc` | `(.queryLoc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1021` | `RouterSelectionDecl` | data | yes | `rsQueryInput` | `queryInput` | `!Name` | `(.queryInput)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1022` | `RouterSelectionDecl` | data | yes | `rsQueryInputLoc` | `queryInputLoc` | `!Loc` | `(.queryInputLoc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1023` | `RouterSelectionDecl` | data | yes | `rsPredicate` | `predicate` | `!Expr` | `(.predicate)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1024` | `RouterSelectionDecl` | data | yes | `rsRecipient` | `recipient` | `!Expr` | `(.recipient)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1025` | `RouterSelectionDecl` | data | yes | `rsLimit` | `limit` | `!(Maybe (Natural, Loc))` | `(.limit)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1026` | `RouterSelectionDecl` | data | yes | `rsOrder` | `order` | `!Name` | `(.order)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1027` | `RouterSelectionDecl` | data | yes | `rsOrderLoc` | `orderLoc` | `!Loc` | `(.orderLoc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1028` | `RouterSelectionDecl` | data | yes | `rsDedupe` | `dedupe` | `!Name` | `(.dedupe)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1029` | `RouterSelectionDecl` | data | yes | `rsDedupeLoc` | `dedupeLoc` | `!Loc` | `(.dedupeLoc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1030` | `RouterSelectionDecl` | data | yes | `rsEmptyPolicy` | `emptyPolicy` | `!SelectionDispositionSyntax` | `(.emptyPolicy)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1031` | `RouterSelectionDecl` | data | yes | `rsEmptyPolicyLoc` | `emptyPolicyLoc` | `!Loc` | `(.emptyPolicyLoc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1032` | `RouterSelectionDecl` | data | yes | `rsFailurePolicy` | `failurePolicy` | `!SelectionDispositionSyntax` | `(.failurePolicy)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1033` | `RouterSelectionDecl` | data | yes | `rsFailurePolicyLoc` | `failurePolicyLoc` | `!Loc` | `(.failurePolicyLoc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1034` | `RouterSelectionDecl` | data | yes | `rsRedelivery` | `redelivery` | `!Name` | `(.redelivery)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1035` | `RouterSelectionDecl` | data | yes | `rsRedeliveryLoc` | `redeliveryLoc` | `!Loc` | `(.redeliveryLoc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1036` | `RouterSelectionDecl` | data | yes | `rsPartial` | `partial` | `!Name` | `(.partial)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1037` | `RouterSelectionDecl` | data | yes | `rsPartialLoc` | `partialLoc` | `!Loc` | `(.partialLoc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1038` | `RouterSelectionDecl` | data | yes | `rsLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1049` | `ResolveDecl` | data | yes | `rvSource` | `source` | `!ResolveSource` | `(.source)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1050` | `ResolveDecl` | data | yes | `rvRow` | `row` | `![Name]` | `(.row)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1051` | `ResolveDecl` | data | yes | `rvLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1056` | `RouterDispatchNode` | data | yes | `rdCommand` | `command` | `!Name` | `(.command)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1057` | `RouterDispatchNode` | data | yes | `rdFields` | `fields` | `![FieldBinding]` | `(.fields)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1058` | `RouterDispatchNode` | data | yes | `rdDisposition` | `disposition` | `!DispatchDisposition` | `(.disposition)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1059` | `RouterDispatchNode` | data | yes | `rdLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1067` | `RouterNode` | data | yes | `rtId` | `id` | `!Name` | `(.id)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1068` | `RouterNode` | data | yes | `rtName` | `name` | `!Text` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1069` | `RouterNode` | data | yes | `rtInput` | `input` | `!InputDecl` | `(.input)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1070` | `RouterNode` | data | yes | `rtKey` | `key` | `!CorrelateDecl` | `(.key)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1071` | `RouterNode` | data | yes | `rtResolve` | `resolve` | `!ResolveDecl` | `(.resolve)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1072` | `RouterNode` | data | yes | `rtTarget` | `target` | `!Name` | `(.target)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1073` | `RouterNode` | data | yes | `rtProjections` | `projections` | `![Name]` | `(.projections)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1074` | `RouterNode` | data | yes | `rtDispatch` | `dispatch` | `!RouterDispatchNode` | `(.dispatch)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1075` | `RouterNode` | data | yes | `rtRejected` | `rejected` | `!PolicyChoice` | `(.rejected)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1076` | `RouterNode` | data | yes | `rtPoison` | `poison` | `!PolicyChoice` | `(.poison)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1077` | `RouterNode` | data | yes | `rtLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1100` | `ContractField` | data | yes | `cfName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1101` | `ContractField` | data | yes | `cfSelector` | `selector` | `!(Maybe Name)` | `(.selector)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1102` | `ContractField` | data | yes | `cfWireKey` | `wireKey` | `!(Maybe Text)` | `(.wireKey)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1103` | `ContractField` | data | yes | `cfType` | `valueType` | `!ContractType` | `(.valueType)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1104` | `ContractField` | data | yes | `cfLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1110` | `ContractEvent` | data | yes | `ceName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1111` | `ContractEvent` | data | yes | `ceTopic` | `topic` | `!Name` | `(.topic)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1112` | `ContractEvent` | data | yes | `ceFields` | `fields` | `![ContractField]` | `(.fields)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1120` | `ContractNode` | data | yes | `ctrName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1121` | `ContractNode` | data | yes | `ctrSchemaVersion` | `schemaVersion` | `!Int` | `(.schemaVersion)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1122` | `ContractNode` | data | yes | `ctrDiscriminator` | `discriminator` | `!Name` | `(.discriminator)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1124` | `ContractNode` | data | yes | `ctrTopics` | `topics` | `![(Name, Text)]` | `(.topics)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1125` | `ContractNode` | data | yes | `ctrEvents` | `events` | `![ContractEvent]` | `(.events)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1126` | `ContractNode` | data | yes | `ctrLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1142` | `BindRow` | data | yes | `brField` | `field` | `!Name` | `(.field)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1143` | `BindRow` | data | yes | `brSource` | `source` | `!WireSource` | `(.source)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1144` | `BindRow` | data | yes | `brRequired` | `required` | `!Bool` | `(.required)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1145` | `BindRow` | data | yes | `brCrossCheck` | `crossCheck` | `!Bool` | `(.crossCheck)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1161` | `DispositionRow` | data | yes | `drOutcome` | `outcome` | `!Name` | `(.outcome)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1162` | `DispositionRow` | data | yes | `drAction` | `action` | `!InboxAction` | `(.action)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1163` | `DispositionRow` | data | yes | `drLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1170` | `DecodeSpec` | data | yes | `decEnvelope` | `envelope` | `!Text` | `(.envelope)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1171` | `DecodeSpec` | data | yes | `decBodyStrict` | `bodyStrict` | `!Bool` | `(.bodyStrict)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1172` | `DecodeSpec` | data | yes | `decBodySchemaVersion` | `bodySchemaVersion` | `!Int` | `(.bodySchemaVersion)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1188` | `IntakeNode` | data | yes | `inkName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1189` | `IntakeNode` | data | yes | `inkContract` | `contract` | `!Name` | `(.contract)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1190` | `IntakeNode` | data | yes | `inkTopic` | `topic` | `!Name` | `(.topic)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1191` | `IntakeNode` | data | yes | `inkAccept` | `accept` | `![Name]` | `(.accept)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1192` | `IntakeNode` | data | yes | `inkBinds` | `binds` | `![BindRow]` | `(.binds)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1193` | `IntakeNode` | data | yes | `inkDedupeKey` | `dedupeKey` | `!Name` | `(.dedupeKey)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1194` | `IntakeNode` | data | yes | `inkDedupePolicy` | `dedupePolicy` | `!Name` | `(.dedupePolicy)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1195` | `IntakeNode` | data | yes | `idempotence` | `idempotence` | `!IdempotenceMode` | `(.idempotence)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1196` | `IntakeNode` | data | yes | `inkPersist` | `persist` | `!InkPersist` | `(.persist)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1197` | `IntakeNode` | data | yes | `inkDecode` | `decode` | `!DecodeSpec` | `(.decode)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1198` | `IntakeNode` | data | yes | `inkDisposition` | `disposition` | `![DispositionRow]` | `(.disposition)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1199` | `IntakeNode` | data | yes | `inkLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1206` | `DeriveSpec` | newtype | yes | `dsPrefix` | `dsPrefix` | `Maybe Text` | `(.dsPrefix)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1211` | `EmitMapRow` | data | yes | `emrValue` | `value` | `!Text` | `(.value)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1212` | `EmitMapRow` | data | yes | `emrEvent` | `event` | `!Name` | `(.event)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1213` | `EmitMapRow` | data | yes | `emrLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1220` | `EmitNode` | data | yes | `emName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1221` | `EmitNode` | data | yes | `emContract` | `contract` | `!Name` | `(.contract)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1222` | `EmitNode` | data | yes | `emTopic` | `topic` | `!Name` | `(.topic)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1223` | `EmitNode` | data | yes | `emSource` | `source` | `!Text` | `(.source)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1224` | `EmitNode` | data | yes | `emKey` | `key` | `!Name` | `(.key)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1225` | `EmitNode` | data | yes | `emDiscriminant` | `discriminant` | `!Name` | `(.discriminant)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1226` | `EmitNode` | data | yes | `emMap` | `map` | `![EmitMapRow]` | `(.map)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1228` | `EmitNode` | data | yes | `emSkip` | `skip` | `!Bool` | `(.skip)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1229` | `EmitNode` | data | yes | `emMessageId` | `messageId` | `!DeriveSpec` | `(.messageId)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1230` | `EmitNode` | data | yes | `emIdempotencyKey` | `idempotencyKey` | `!DeriveSpec` | `(.idempotencyKey)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1231` | `EmitNode` | data | yes | `emLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1237` | `BackoffSpec` | data | yes | `boKind` | `kind` | `!Name` | `(.kind)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1238` | `BackoffSpec` | data | yes | `boWindow` | `window` | `!Text` | `(.window)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1239` | `BackoffSpec` | data | yes | `boMax` | `max` | `!(Maybe Text)` | `(.max)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1240` | `BackoffSpec` | data | yes | `boMultiplier` | `multiplier` | `!(Maybe Text)` | `(.multiplier)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1246` | `PublisherNode` | data | yes | `pubName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1247` | `PublisherNode` | data | yes | `pubEmit` | `emit` | `!Name` | `(.emit)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1248` | `PublisherNode` | data | yes | `pubOrdering` | `ordering` | `!Name` | `(.ordering)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1249` | `PublisherNode` | data | yes | `pubMaxAttempts` | `maxAttempts` | `!Int` | `(.maxAttempts)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1250` | `PublisherNode` | data | yes | `pubBackoff` | `backoff` | `!BackoffSpec` | `(.backoff)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1252` | `PublisherNode` | data | yes | `pubOutboxField` | `outboxField` | `!Name` | `(.outboxField)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1253` | `PublisherNode` | data | yes | `pubLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1283` | `WqField` | data | yes | `wqfName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1284` | `WqField` | data | yes | `wqfWire` | `wire` | `!Text` | `(.wire)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1285` | `WqField` | data | yes | `wqfType` | `valueType` | `!QueuePayloadType` | `(.valueType)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1286` | `WqField` | data | yes | `wqfLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1293` | `WqDispRow` | data | yes | `wqdOutcome` | `outcome` | `!Name` | `(.outcome)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1294` | `WqDispRow` | data | yes | `wqdAction` | `action` | `!InboxAction` | `(.action)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1295` | `WqDispRow` | data | yes | `wqdLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1305` | `WqGroupKey` | data | yes | `gkField` | `field` | `!Name` | `(.field)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1306` | `WqGroupKey` | data | yes | `gkVia` | `via` | `!Name` | `(.via)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1307` | `WqGroupKey` | data | yes | `gkFixture` | `fixture` | `!(Maybe Text)` | `(.fixture)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1322` | `WorkqueueNode` | data | yes | `wqName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1323` | `WorkqueueNode` | data | yes | `wqLogical` | `logical` | `!Text` | `(.logical)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1324` | `WorkqueueNode` | data | yes | `wqPhysical` | `physical` | `!Text` | `(.physical)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1325` | `WorkqueueNode` | data | yes | `wqDlq` | `dlq` | `!Text` | `(.dlq)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1326` | `WorkqueueNode` | data | yes | `wqTable` | `table` | `!Text` | `(.table)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1327` | `WorkqueueNode` | data | yes | `wqOrdering` | `ordering` | `!WqOrdering` | `(.ordering)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1328` | `WorkqueueNode` | data | yes | `wqGroupKey` | `groupKey` | `!(Maybe WqGroupKey)` | `(.groupKey)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1329` | `WorkqueueNode` | data | yes | `wqProvision` | `provision` | `!WqProvision` | `(.provision)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1330` | `WorkqueueNode` | data | yes | `wqPayloadName` | `payloadName` | `!Name` | `(.payloadName)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1331` | `WorkqueueNode` | data | yes | `wqPayload` | `payload` | `![WqField]` | `(.payload)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1332` | `WorkqueueNode` | data | yes | `wqMaxRetries` | `maxRetries` | `!Int` | `(.maxRetries)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1333` | `WorkqueueNode` | data | yes | `wqDelay` | `delay` | `!Text` | `(.delay)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1334` | `WorkqueueNode` | data | yes | `wqDlqOn` | `dlqOn` | `!Bool` | `(.dlqOn)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1335` | `WorkqueueNode` | data | yes | `wqDisposition` | `disposition` | `![WqDispRow]` | `(.disposition)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1336` | `WorkqueueNode` | data | yes | `wqLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1343` | `PgmqDispatchNode` | data | yes | `pdName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1344` | `PgmqDispatchNode` | data | yes | `pdSourceReadModel` | `sourceReadModel` | `!Name` | `(.sourceReadModel)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1345` | `PgmqDispatchNode` | data | yes | `pdSourceKey` | `sourceKey` | `!Name` | `(.sourceKey)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1346` | `PgmqDispatchNode` | data | yes | `pdFanoutBody` | `fanoutBody` | `!Name` | `(.fanoutBody)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1347` | `PgmqDispatchNode` | data | yes | `pdDedupKey` | `dedupKey` | `!Name` | `(.dedupKey)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1348` | `PgmqDispatchNode` | data | yes | `pdDedupReadModel` | `dedupReadModel` | `!Name` | `(.dedupReadModel)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1349` | `PgmqDispatchNode` | data | yes | `pdDedupReadModelField` | `dedupReadModelField` | `!Text` | `(.dedupReadModelField)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1350` | `PgmqDispatchNode` | data | yes | `pdDedupQueue` | `dedupQueue` | `!Name` | `(.dedupQueue)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1351` | `PgmqDispatchNode` | data | yes | `pdDedupQueueField` | `dedupQueueField` | `!Text` | `(.dedupQueueField)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1352` | `PgmqDispatchNode` | data | yes | `pdEnqueueTo` | `enqueueTo` | `!Name` | `(.enqueueTo)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1353` | `PgmqDispatchNode` | data | yes | `pdLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1361` | `RmColumn` | data | yes | `rmcName` | `rmcName` | `!Text` | `(.rmcName)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1362` | `RmColumn` | data | yes | `rmcType` | `rmcType` | `!Text` | `(.rmcType)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1363` | `RmColumn` | data | yes | `rmcRequired` | `rmcRequired` | `!Bool` | `(.rmcRequired)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1392` | `ReadModelSupply` | data | yes | `legacyConsistency` | `legacyConsistency` | `!Consistency` | `(.legacyConsistency)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1393` | `ReadModelSupply` | data | yes | `legacyScope` | `legacyScope` | `!(Maybe RmScope)` | `(.legacyScope)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1394` | `ReadModelSupply` | data | yes | `legacyFeed` | `legacyFeed` | `!RmFeed` | `(.legacyFeed)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1395` | `ReadModelSupply` | data | yes | `legacySubscription` | `legacySubscription` | `!(Maybe Text)` | `(.legacySubscription)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1403` | `ReadModelQueryTypes` | data | yes | `input` | `input` | `!TypeExpr` | `(.input)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1404` | `ReadModelQueryTypes` | data | yes | `result` | `result` | `!TypeExpr` | `(.result)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1405` | `ReadModelQueryTypes` | data | yes | `inputLoc` | `inputLoc` | `!Loc` | `(.inputLoc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1406` | `ReadModelQueryTypes` | data | yes | `resultLoc` | `resultLoc` | `!Loc` | `(.resultLoc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1413` | `ReadModelNode` | data | yes | `rmName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1414` | `ReadModelNode` | data | yes | `rmTable` | `table` | `!Text` | `(.table)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1415` | `ReadModelNode` | data | yes | `rmSchema` | `schema` | `!Text` | `(.schema)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1416` | `ReadModelNode` | data | yes | `rmColumns` | `columns` | `![RmColumn]` | `(.columns)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1417` | `ReadModelNode` | data | yes | `rmVersion` | `version` | `!Int` | `(.version)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1418` | `ReadModelNode` | data | yes | `rmShape` | `shape` | `!Text` | `(.shape)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1419` | `ReadModelNode` | data | yes | `rmFreshness` | `freshness` | `!QueryFreshnessNode` | `(.freshness)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1420` | `ReadModelNode` | data | yes | `rmSupply` | `supply` | `!ReadModelSupply` | `(.supply)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1421` | `ReadModelNode` | data | yes | `rmGroup` | `group` | `!(Maybe Name)` | `(.group)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1422` | `ReadModelNode` | data | yes | `rmObservedTargets` | `observedTargets` | `![Name]` | `(.observedTargets)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1423` | `ReadModelNode` | data | yes | `rmBackingTarget` | `backingTarget` | `!(Maybe Name)` | `(.backingTarget)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1424` | `ReadModelNode` | data | yes | `queryTypes` | `queryTypes` | `!(Maybe ReadModelQueryTypes)` | `(.queryTypes)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1425` | `ReadModelNode` | data | yes | `rmLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1456` | `ProjectionTargetNode` | data | yes | `ptName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1457` | `ProjectionTargetNode` | data | yes | `ptSchema` | `schema` | `!Text` | `(.schema)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1458` | `ProjectionTargetNode` | data | yes | `ptTable` | `table` | `!Text` | `(.table)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1459` | `ProjectionTargetNode` | data | yes | `ptReset` | `reset` | `!TargetResetPolicy` | `(.reset)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1460` | `ProjectionTargetNode` | data | yes | `ptDependsOn` | `dependsOn` | `![Name]` | `(.dependsOn)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1461` | `ProjectionTargetNode` | data | yes | `ptLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1467` | `RebuildGroupNode` | data | yes | `rgName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1468` | `RebuildGroupNode` | data | yes | `rgTargets` | `targets` | `![Name]` | `(.targets)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1469` | `RebuildGroupNode` | data | yes | `rgOrder` | `order` | `![Name]` | `(.order)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1470` | `RebuildGroupNode` | data | yes | `rgLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1481` | `PromotionObjectNode` | data | yes | `rpoKind` | `kind` | `!PromotionObjectKindNode` | `(.kind)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1482` | `PromotionObjectNode` | data | yes | `rpoGenerationName` | `generationName` | `!Text` | `(.generationName)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1483` | `PromotionObjectNode` | data | yes | `rpoCanonicalName` | `canonicalName` | `!Text` | `(.canonicalName)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1490` | `RevisionTargetNode` | data | yes | `prtTarget` | `target` | `!Name` | `(.target)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1491` | `RevisionTargetNode` | data | yes | `prtSchemaVersion` | `schemaVersion` | `!Text` | `(.schemaVersion)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1492` | `RevisionTargetNode` | data | yes | `prtProvisioner` | `provisioner` | `!Text` | `(.provisioner)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1493` | `RevisionTargetNode` | data | yes | `prtProvisionerVersion` | `provisionerVersion` | `!Int` | `(.provisionerVersion)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1494` | `RevisionTargetNode` | data | yes | `prtExpectedShape` | `expectedShape` | `!Text` | `(.expectedShape)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1495` | `RevisionTargetNode` | data | yes | `prtValidator` | `validator` | `!Text` | `(.validator)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1496` | `RevisionTargetNode` | data | yes | `prtValidatorVersion` | `validatorVersion` | `!Int` | `(.validatorVersion)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1497` | `RevisionTargetNode` | data | yes | `prtPromotionObjects` | `promotionObjects` | `![PromotionObjectNode]` | `(.promotionObjects)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1502` | `ProjectionRevisionNode` | data | yes | `prvName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1503` | `ProjectionRevisionNode` | data | yes | `prvGroup` | `group` | `!Name` | `(.group)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1504` | `ProjectionRevisionNode` | data | yes | `prvTargets` | `targets` | `![RevisionTargetNode]` | `(.targets)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1505` | `ProjectionRevisionNode` | data | yes | `prvLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1513` | `ExternalReadNode` | data | yes | `erName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1514` | `ExternalReadNode` | data | yes | `erVersion` | `version` | `!Int` | `(.version)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1515` | `ExternalReadNode` | data | yes | `erQueryModel` | `queryModel` | `!Name` | `(.queryModel)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1516` | `ExternalReadNode` | data | yes | `erResultSchema` | `resultSchema` | `!Text` | `(.resultSchema)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1517` | `ExternalReadNode` | data | yes | `erResultType` | `resultType` | `!Text` | `(.resultType)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1518` | `ExternalReadNode` | data | yes | `erCompatibleRevisions` | `compatibleRevisions` | `![Name]` | `(.compatibleRevisions)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1519` | `ExternalReadNode` | data | yes | `erSurfaceGeneration` | `surfaceGeneration` | `!Int` | `(.surfaceGeneration)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1520` | `ExternalReadNode` | data | yes | `erLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1555` | `ProjectionOwnerNode` | data | yes | `poName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1556` | `ProjectionOwnerNode` | data | yes | `poSources` | `sources` | `![CatalogSource]` | `(.sources)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1557` | `ProjectionOwnerNode` | data | yes | `poDelivery` | `delivery` | `!ProjectionDelivery` | `(.delivery)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1558` | `ProjectionOwnerNode` | data | yes | `poGroup` | `group` | `!Name` | `(.group)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1559` | `ProjectionOwnerNode` | data | yes | `poTargets` | `targets` | `![Name]` | `(.targets)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1560` | `ProjectionOwnerNode` | data | yes | `poOrder` | `order` | `!Int` | `(.order)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1561` | `ProjectionOwnerNode` | data | yes | `poSubscription` | `subscription` | `!(Maybe Text)` | `(.subscription)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1562` | `ProjectionOwnerNode` | data | yes | `poDedup` | `dedup` | `!(Maybe Text)` | `(.dedup)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1563` | `ProjectionOwnerNode` | data | yes | `poCheckpointOnMissing` | `checkpointOnMissing` | `![CheckpointOnMissingNode]` | `(.checkpointOnMissing)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1564` | `ProjectionOwnerNode` | data | yes | `poReplay` | `replay` | `!ProjectionReplayPolicy` | `(.replay)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1565` | `ProjectionOwnerNode` | data | yes | `poLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1591` | `WorkflowNode` | data | yes | `wfId` | `id` | `!Name` | `(.id)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1593` | `WorkflowNode` | data | yes | `wfStable` | `stable` | `!Text` | `(.stable)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1594` | `WorkflowNode` | data | yes | `wfInput` | `input` | `!Name` | `(.input)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1595` | `WorkflowNode` | data | yes | `wfInputFields` | `inputFields` | `![Field]` | `(.inputFields)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1596` | `WorkflowNode` | data | yes | `wfOutput` | `output` | `!Name` | `(.output)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1598` | `WorkflowNode` | data | yes | `wfIdField` | `idField` | `!(Maybe Name)` | `(.idField)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1599` | `WorkflowNode` | data | yes | `wfIdVia` | `idVia` | `!Name` | `(.idVia)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1600` | `WorkflowNode` | data | yes | `wfBody` | `body` | `![WfBodyItem]` | `(.body)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1601` | `WorkflowNode` | data | yes | `wfLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1621` | `OperationNode` | data | yes | `opName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1622` | `OperationNode` | data | yes | `opShape` | `shape` | `!OperationShape` | `(.shape)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1623` | `OperationNode` | data | yes | `opLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1669` | `Spec` | data | yes | `specContext` | `context` | `!Name` | `(.context)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1670` | `Spec` | data | yes | `specModuleRoot` | `moduleRoot` | `!(Maybe Text)` | `(.moduleRoot)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1671` | `Spec` | data | yes | `specLayout` | `layout` | `!(Maybe Placement)` | `(.layout)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1672` | `Spec` | data | yes | `specIds` | `ids` | `![IdDecl]` | `(.ids)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1673` | `Spec` | data | yes | `specEnums` | `enums` | `![EnumDecl]` | `(.enums)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1674` | `Spec` | data | yes | `specRules` | `rules` | `![RuleDecl]` | `(.rules)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1675` | `Spec` | data | yes | `specNominalScalars` | `nominalScalars` | `![NominalScalarDecl]` | `(.nominalScalars)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1676` | `Spec` | data | yes | `specMapped` | `mapped` | `![MappedDecl]` | `(.mapped)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:1677` | `Spec` | data | yes | `specNodes` | `nodes` | `![Node]` | `(.nodes)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/HaskellImport.hs:41` | `HaskellReference` | data | yes | `referenceModule` | `moduleName` | `!Text` | `(.moduleName)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/HaskellImport.hs:42` | `HaskellReference` | data | yes | `referenceName` | `name` | `!Text` | `(.name)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/HaskellImport.hs:43` | `HaskellReference` | data | yes | `referenceNamespace` | `namespace` | `!HaskellNamespace` | `(.namespace)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/HaskellImport.hs:44` | `HaskellReference` | data | yes | `referenceQualification` | `qualification` | `!QualificationPreference` | `(.qualification)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/HaskellImport.hs:49` | `ImportEnvironment` | data | yes | `targetModule` | `targetModule` | `!Text` | `(.targetModule)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/HaskellImport.hs:50` | `ImportEnvironment` | data | yes | `localNames` | `localNames` | `!(Set Text)` | `(.localNames)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/HaskellImport.hs:51` | `ImportEnvironment` | data | yes | `reservedQualifiers` | `reservedQualifiers` | `!(Set Text)` | `(.reservedQualifiers)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/HaskellImport.hs:64` | `HaskellImportPlan` | data | no | `importPlanTargetModule` | `targetModule` | `!Text` | `(.targetModule)`, pattern, or construction | Haskell API and runtime semantics | `none` |
+| `keiro-dsl/src/Keiro/Dsl/HaskellImport.hs:65` | `HaskellImportPlan` | data | no | `importPlanDeclarations` | `declarations` | `!(Set Text)` | `(.declarations)`, pattern, or construction | Haskell API and runtime semantics | `none` |
+| `keiro-dsl/src/Keiro/Dsl/HaskellImport.hs:66` | `HaskellImportPlan` | data | no | `importPlanReferences` | `references` | `!(Map HaskellReference Text)` | `(.references)`, pattern, or construction | Haskell API and runtime semantics | `none` |
+| `keiro-dsl/src/Keiro/Dsl/HaskellName.hs:63` | `DerivedHaskellName` | data | no | `upperCamel` | `upperCamel` | `!UpperCamelName` | `(.upperCamel)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/HaskellName.hs:64` | `DerivedHaskellName` | data | no | `lowerCamel` | `lowerCamel` | `!LowerCamelName` | `(.lowerCamel)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/HaskellName.hs:97` | `NameSite` | data | no | `siteKind` | `kind` | `!NameSiteKind` | `(.kind)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/HaskellName.hs:98` | `NameSite` | data | no | `siteLogicalName` | `logicalName` | `!Text` | `(.logicalName)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/HaskellName.hs:99` | `NameSite` | data | no | `siteOwner` | `owner` | `!Text` | `(.owner)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/HaskellName.hs:100` | `NameSite` | data | no | `siteLine` | `line` | `!Int` | `(.line)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/HaskellName.hs:109` | `HaskellOccurrenceKey` | data | no | `occurrenceModule` | `moduleName` | `!Text` | `(.moduleName)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/HaskellName.hs:110` | `HaskellOccurrenceKey` | data | no | `occurrenceSpace` | `space` | `!HaskellOccurrenceSpace` | `(.space)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/HaskellName.hs:111` | `HaskellOccurrenceKey` | data | no | `occurrenceScope` | `scope` | `!Text` | `(.scope)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/HaskellName.hs:112` | `HaskellOccurrenceKey` | data | no | `occurrenceName` | `name` | `!Text` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/HaskellName.hs:117` | `PlannedOccurrence` | data | no | `plannedOccurrenceKey` | `key` | `!HaskellOccurrenceKey` | `(.key)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/HaskellName.hs:118` | `PlannedOccurrence` | data | no | `plannedOccurrenceSite` | `site` | `!NameSite` | `(.site)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/HaskellSourceMove.hs:28` | `SourceMove` | data | yes | `moveRole` | `role` | `!ModuleRole` | `(.role)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/HaskellSourceMove.hs:29` | `SourceMove` | data | yes | `moveKind` | `kind` | `!ModuleKind` | `(.kind)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/HaskellSourceMove.hs:30` | `SourceMove` | data | yes | `moveOldModule` | `oldModule` | `!Text` | `(.oldModule)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/HaskellSourceMove.hs:31` | `SourceMove` | data | yes | `moveNewModule` | `newModule` | `!Text` | `(.newModule)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/HaskellSourceMove.hs:32` | `SourceMove` | data | yes | `moveOldPath` | `oldPath` | `!FilePath` | `(.oldPath)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/HaskellSourceMove.hs:33` | `SourceMove` | data | yes | `moveNewPath` | `newPath` | `!FilePath` | `(.newPath)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/HaskellSourceMove.hs:34` | `SourceMove` | data | yes | `moveBackupPath` | `backupPath` | `!FilePath` | `(.backupPath)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/HaskellSourceMove.hs:38` | `SourceMove` | data | yes | `moveContentDigest` | `contentDigest` | `!(Maybe Text)` | `(.contentDigest)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/HaskellSourceMove.hs:41` | `SourceMove` | data | yes | `moveTransformedDigest` | `transformedDigest` | `!(Maybe Text)` | `(.transformedDigest)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/LanguageVersion.hs:97` | `SourceLanguage` | data | yes | `declaredLanguageVersion` | `declaredLanguageVersion` | `!LanguageVersion` | `(.declaredLanguageVersion)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/LanguageVersion.hs:98` | `SourceLanguage` | data | yes | `languageVersionLoc` | `languageVersionLoc` | `!Loc` | `(.languageVersionLoc)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/LanguageVersion.hs:120` | `SyntaxProfile` | data | no | `profileIdentifier` | `identifier` | `!Text` | `(.identifier)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/LanguageVersion.hs:121` | `SyntaxProfile` | data | no | `profileFeatures` | `features` | `!(Set LanguageFeature)` | `(.features)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/LanguageVersion.hs:157` | `RuntimeSemanticsProfile` | data | no | `runtimeSemanticsIdentifier` | `identifier` | `!Text` | `(.identifier)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/LanguageVersion.hs:158` | `RuntimeSemanticsProfile` | data | no | `runtimeSemanticsCapabilities` | `capabilities` | `!(Set RuntimeCapability)` | `(.capabilities)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/LanguageVersion.hs:229` | `LanguageDefinition` | data | yes | `definitionVersion` | `version` | `!LanguageVersion` | `(.version)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/LanguageVersion.hs:230` | `LanguageDefinition` | data | yes | `definitionPredecessor` | `predecessor` | `!(Maybe LanguageVersion)` | `(.predecessor)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/LanguageVersion.hs:233` | `LanguageDefinition` | data | yes | `definitionBodyParser` | `bodyParser` | `!LanguageBodyParser` | `(.bodyParser)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/LanguageVersion.hs:234` | `LanguageDefinition` | data | yes | `definitionSyntaxProfile` | `syntaxProfile` | `!SyntaxProfile` | `(.syntaxProfile)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/LanguageVersion.hs:235` | `LanguageDefinition` | data | yes | `definitionRuntimeSemanticsProfile` | `runtimeSemanticsProfile` | `!RuntimeSemanticsProfile` | `(.runtimeSemanticsProfile)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/LanguageVersion.hs:236` | `LanguageDefinition` | data | yes | `definitionSupport` | `support` | `!LanguageSupport` | `(.support)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/LanguageVersion.hs:237` | `LanguageDefinition` | data | yes | `definitionMaturity` | `maturity` | `!LanguageMaturity` | `(.maturity)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/LanguageVersion.hs:480` | `SourceLanguageDiagnostic` | data | yes | `sourceLanguageErrorCode` | `errorCode` | `!SourceLanguageErrorCode` | `(.errorCode)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/LanguageVersion.hs:481` | `SourceLanguageDiagnostic` | data | yes | `sourceLanguageSource` | `source` | `!FilePath` | `(.source)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/LanguageVersion.hs:482` | `SourceLanguageDiagnostic` | data | yes | `sourceLanguageLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/LanguageVersion.hs:483` | `SourceLanguageDiagnostic` | data | yes | `sourceLanguageToken` | `token` | `!(Maybe Text)` | `(.token)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/LanguageVersion.hs:484` | `SourceLanguageDiagnostic` | data | yes | `sourceLanguageDeclaredVersion` | `declaredVersion` | `!(Maybe LanguageVersion)` | `(.declaredVersion)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/LanguageVersion.hs:485` | `SourceLanguageDiagnostic` | data | yes | `sourceLanguageSupportedVersions` | `supportedVersions` | `!(NonEmpty LanguageVersion)` | `(.supportedVersions)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/LanguageVersion.hs:552` | `ParsedSource` | data | yes | `parsedSourceLanguage` | `sourceLanguage` | `!SourceLanguage` | `(.sourceLanguage)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/LanguageVersion.hs:553` | `ParsedSource` | data | yes | `parsedSpec` | `spec` | `!Spec` | `(.spec)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/MappedCodecPlan.hs:42` | `MappedCodecPlan` | data | yes | `consumerType` | `consumerType` | `!ConsumerTypePlan` | `(.consumerType)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/MappedCodecPlan.hs:43` | `MappedCodecPlan` | data | yes | `resolvedExpression` | `resolvedExpression` | `!ResolvedTypeExpr` | `(.resolvedExpression)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/MappedCodecPlan.hs:44` | `MappedCodecPlan` | data | yes | `authority` | `authority` | `!(Set MappedAuthorityMode)` | `(.authority)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:27` | `ConsumerPlan` | data | yes | `consumerPackages` | `packages` | `![Text]` | `(.packages)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:28` | `ConsumerPlan` | data | yes | `consumerModules` | `modules` | `![Text]` | `(.modules)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:29` | `ConsumerPlan` | data | yes | `consumerMappings` | `mappings` | `![MappingIdentity]` | `(.mappings)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:34` | `WriteLiftIdentity` | data | yes | `sourceType` | `sourceType` | `!Text` | `(.sourceType)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:35` | `WriteLiftIdentity` | data | yes | `function` | `function` | `!Text` | `(.function)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:36` | `WriteLiftIdentity` | data | yes | `version` | `version` | `!Text` | `(.version)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:37` | `WriteLiftIdentity` | data | yes | `fixtures` | `fixtures` | `!Text` | `(.fixtures)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:56` | `MappingIdentity` | data | yes | `mappingSpecName` | `specName` | `!Text` | `(.specName)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:57` | `MappingIdentity` | data | yes | `mappingCanonicalType` | `canonicalType` | `!Text` | `(.canonicalType)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:58` | `MappingIdentity` | data | yes | `mappingPackage` | `package` | `!Text` | `(.package)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:59` | `MappingIdentity` | data | yes | `mappingModule` | `moduleName` | `!Text` | `(.moduleName)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:60` | `MappingIdentity` | data | yes | `mappingType` | `valueType` | `!Text` | `(.valueType)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:61` | `MappingIdentity` | data | yes | `mappingBindingSymbol` | `bindingSymbol` | `!Text` | `(.bindingSymbol)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:62` | `MappingIdentity` | data | yes | `mappingBindingVersion` | `bindingVersion` | `!Text` | `(.bindingVersion)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:63` | `MappingIdentity` | data | yes | `writeLift` | `writeLift` | `!(Maybe WriteLiftIdentity)` | `(.writeLift)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:66` | `MappingIdentity` | data | yes | `mappingSpecName` | `specName` | `!Text` | `(.specName)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:67` | `MappingIdentity` | data | yes | `mappingPackage` | `package` | `!Text` | `(.package)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:68` | `MappingIdentity` | data | yes | `mappingModule` | `moduleName` | `!Text` | `(.moduleName)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:69` | `MappingIdentity` | data | yes | `mappingType` | `valueType` | `!Text` | `(.valueType)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:70` | `MappingIdentity` | data | yes | `mappingCodecIdentity` | `codecIdentity` | `!Text` | `(.codecIdentity)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:71` | `MappingIdentity` | data | yes | `mappingCodecVersion` | `codecVersion` | `!Text` | `(.codecVersion)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:72` | `MappingIdentity` | data | yes | `writeLift` | `writeLift` | `!(Maybe WriteLiftIdentity)` | `(.writeLift)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:75` | `MappingIdentity` | data | yes | `mappingSpecName` | `specName` | `!Text` | `(.specName)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:76` | `MappingIdentity` | data | yes | `mappingNominalCategory` | `nominalCategory` | `!Text` | `(.nominalCategory)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:77` | `MappingIdentity` | data | yes | `mappingNominalRepresentation` | `nominalRepresentation` | `!Text` | `(.nominalRepresentation)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:78` | `MappingIdentity` | data | yes | `mappingCanonicalType` | `canonicalType` | `!Text` | `(.canonicalType)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:79` | `MappingIdentity` | data | yes | `mappingPackage` | `package` | `!Text` | `(.package)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:80` | `MappingIdentity` | data | yes | `mappingModule` | `moduleName` | `!Text` | `(.moduleName)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:81` | `MappingIdentity` | data | yes | `mappingType` | `valueType` | `!Text` | `(.valueType)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:82` | `MappingIdentity` | data | yes | `mappingBindingSymbol` | `bindingSymbol` | `!Text` | `(.bindingSymbol)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:83` | `MappingIdentity` | data | yes | `mappingBindingVersion` | `bindingVersion` | `!Text` | `(.bindingVersion)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:84` | `MappingIdentity` | data | yes | `mappingFixtureSymbol` | `fixtureSymbol` | `!Text` | `(.fixtureSymbol)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/MappedConsumer.hs:85` | `MappingIdentity` | data | yes | `mappingInitialSymbol` | `initialSymbol` | `!(Maybe Text)` | `(.initialSymbol)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/MappedDiff.hs:28` | `MappedFinding` | data | yes | `mfDeclaration` | `declaration` | `!Name` | `(.declaration)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/MappedDiff.hs:29` | `MappedFinding` | data | yes | `mfLeaf` | `leaf` | `!Text` | `(.leaf)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/MappedDiff.hs:30` | `MappedFinding` | data | yes | `mfCode` | `code` | `!DiagnosticCode` | `(.code)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/MappedDiff.hs:31` | `MappedFinding` | data | yes | `mfDetail` | `detail` | `!Text` | `(.detail)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/MappedDiff.hs:32` | `MappedFinding` | data | yes | `mfUsePaths` | `usePaths` | `![UsePath]` | `(.usePaths)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/MappedDiff.hs:33` | `MappedFinding` | data | yes | `mfOldUnknownFields` | `oldUnknownFields` | `!(Maybe UnknownFields)` | `(.oldUnknownFields)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/NominalType.hs:70` | `CheckedNominalEquality` | data | yes | `equalityKeyRepresentation` | `keyRepresentation` | `!NominalEqualityKey` | `(.keyRepresentation)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/NominalType.hs:71` | `CheckedNominalEquality` | data | yes | `equalityDomain` | `domain` | `!NominalEqualityDomain` | `(.domain)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/NominalType.hs:72` | `CheckedNominalEquality` | data | yes | `equalityContractVersion` | `contractVersion` | `!Text` | `(.contractVersion)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/NominalType.hs:82` | `ResolvedNominalType` | data | yes | `resolvedNominalName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/NominalType.hs:83` | `ResolvedNominalType` | data | yes | `resolvedNominalRepresentation` | `representation` | `!NominalRepresentation` | `(.representation)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/NominalType.hs:84` | `ResolvedNominalType` | data | yes | `resolvedNominalOwnership` | `ownership` | `!NominalOwnership` | `(.ownership)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/NominalType.hs:85` | `ResolvedNominalType` | data | yes | `resolvedNominalLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Parser/Core.hs:75` | `ContextualParseFailure` | data | no | `contextualFailureCode` | `code` | `!SourceLanguageErrorCode` | `(.code)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Parser/Core.hs:76` | `ContextualParseFailure` | data | no | `contextualFailureFeature` | `feature` | `!(Maybe LanguageFeature)` | `(.feature)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Parser/Core.hs:77` | `ContextualParseFailure` | data | no | `contextualFailureSpan` | `span` | `!SourceSpan` | `(.span)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Parser/Preamble.hs:60` | `InitialLanguageClause` | data | no | `initialLanguageSpan` | `span` | `!SourceSpan` | `(.span)`, pattern, or construction | Haskell API and runtime semantics | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Parser/Preamble.hs:61` | `InitialLanguageClause` | data | no | `initialLanguageText` | `text` | `!Text` | `(.text)`, pattern, or construction | Haskell API and runtime semantics | `none` |
+| `keiro-dsl/src/Keiro/Dsl/ProcessReaction.hs:42` | `CheckedFollowUp` | newtype | yes | `syntax` | `syntax` | `FollowUp` | `(.syntax)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ProcessReaction.hs:46` | `CheckedReactionArm` | data | yes | `input` | `input` | `!Name` | `(.input)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ProcessReaction.hs:47` | `CheckedReactionArm` | data | yes | `ordinal` | `ordinal` | `!Int` | `(.ordinal)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ProcessReaction.hs:48` | `CheckedReactionArm` | data | yes | `guard` | `guard` | `!CheckedReactionGuard` | `(.guard)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ProcessReaction.hs:49` | `CheckedReactionArm` | data | yes | `body` | `body` | `!ArmBody` | `(.body)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ProcessReaction.hs:53` | `CheckedReactionTimer` | newtype | yes | `syntax` | `syntax` | `ReactionTimerNode` | `(.syntax)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ProcessReaction.hs:57` | `CheckedProcessReaction` | data | yes | `version` | `version` | `!Natural` | `(.version)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ProcessReaction.hs:58` | `CheckedProcessReaction` | data | yes | `inputs` | `inputs` | `!(NonEmpty InputDecl)` | `(.inputs)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ProcessReaction.hs:59` | `CheckedProcessReaction` | data | yes | `arms` | `arms` | `![CheckedReactionArm]` | `(.arms)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ProcessReaction.hs:60` | `CheckedProcessReaction` | data | yes | `timers` | `timers` | `![CheckedReactionTimer]` | `(.timers)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ProcessReaction.hs:61` | `CheckedProcessReaction` | data | yes | `fingerprint` | `fingerprint` | `!Text` | `(.fingerprint)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ProcessReaction.hs:62` | `CheckedProcessReaction` | data | yes | `verification` | `verification` | `!Text` | `(.verification)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ProcessReaction.hs:63` | `CheckedProcessReaction` | data | yes | `holeObligations` | `holeObligations` | `![Text]` | `(.holeObligations)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ProcessReaction.hs:90` | `ProcessReactionDiagnostic` | data | yes | `loc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ProcessReaction.hs:91` | `ProcessReactionDiagnostic` | data | yes | `code` | `code` | `!ProcessReactionDiagnosticCode` | `(.code)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ProcessReaction.hs:92` | `ProcessReactionDiagnostic` | data | yes | `message` | `message` | `!Text` | `(.message)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ProjectionMappedImpact.hs:39` | `ProjectionMappedRoot` | data | yes | `consumer` | `consumer` | `!DerivedMappedConsumer` | `(.consumer)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/ProjectionMappedImpact.hs:40` | `ProjectionMappedRoot` | data | yes | `declaration` | `declaration` | `!MappedKey` | `(.declaration)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/ProjectionMappedImpact.hs:41` | `ProjectionMappedRoot` | data | yes | `path` | `path` | `!UsePath` | `(.path)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/ProjectionMappedImpact.hs:49` | `ProjectionOperationalImpact` | data | yes | `consumer` | `consumer` | `!DerivedMappedConsumer` | `(.consumer)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/ProjectionMappedImpact.hs:50` | `ProjectionOperationalImpact` | data | yes | `group` | `group` | `!(Maybe Name)` | `(.group)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/ProjectionMappedImpact.hs:51` | `ProjectionOperationalImpact` | data | yes | `targets` | `targets` | `!(Set Name)` | `(.targets)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/ProjectionMappedImpact.hs:52` | `ProjectionOperationalImpact` | data | yes | `readModels` | `readModels` | `!(Set Name)` | `(.readModels)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/ProjectionMappedImpact.hs:53` | `ProjectionOperationalImpact` | data | yes | `replayable` | `replayable` | `!Bool` | `(.replayable)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/ProjectionMappedImpact.hs:54` | `ProjectionOperationalImpact` | data | yes | `sourceFingerprint` | `sourceFingerprint` | `!Text` | `(.sourceFingerprint)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/ProjectionMappedImpact.hs:62` | `UnsupportedProjectionImpact` | data | yes | `source` | `source` | `!UnsupportedProjectionSource` | `(.source)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/ProjectionMappedImpact.hs:63` | `UnsupportedProjectionImpact` | data | yes | `group` | `group` | `!Name` | `(.group)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/ProjectionMappedImpact.hs:64` | `UnsupportedProjectionImpact` | data | yes | `targets` | `targets` | `!(Set Name)` | `(.targets)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/ProjectionMappedImpact.hs:65` | `UnsupportedProjectionImpact` | data | yes | `readModels` | `readModels` | `!(Set Name)` | `(.readModels)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/ProjectionMappedImpact.hs:66` | `UnsupportedProjectionImpact` | data | yes | `replayable` | `replayable` | `!Bool` | `(.replayable)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/ProjectionMappedImpact.hs:71` | `ProjectionMappedImpact` | data | yes | `roots` | `roots` | `![ProjectionMappedRoot]` | `(.roots)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/ProjectionMappedImpact.hs:72` | `ProjectionMappedImpact` | data | yes | `consumers` | `consumers` | `!(Map MappedKey (Set DerivedMappedConsumer))` | `(.consumers)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/ProjectionMappedImpact.hs:73` | `ProjectionMappedImpact` | data | yes | `operations` | `operations` | `!(Map DerivedMappedConsumer ProjectionOperationalImpact)` | `(.operations)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/ProjectionMappedImpact.hs:74` | `ProjectionMappedImpact` | data | yes | `unsupported` | `unsupported` | `![UnsupportedProjectionImpact]` | `(.unsupported)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/ProjectionSupply.hs:21` | `ResolvedProjectionSupply` | data | yes | `supplyQueryModel` | `queryModel` | `!Name` | `(.queryModel)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ProjectionSupply.hs:22` | `ResolvedProjectionSupply` | data | yes | `supplyProjectionOwner` | `projectionOwner` | `!Name` | `(.projectionOwner)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ProjectionSupply.hs:23` | `ResolvedProjectionSupply` | data | yes | `supplyRebuildGroup` | `rebuildGroup` | `!Name` | `(.rebuildGroup)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ProjectionSupply.hs:24` | `ResolvedProjectionSupply` | data | yes | `supplyObservedTargets` | `observedTargets` | `!(NonEmpty Name)` | `(.observedTargets)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ProjectionSupply.hs:25` | `ResolvedProjectionSupply` | data | yes | `supplyQueryLoc` | `queryLoc` | `!Loc` | `(.queryLoc)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ProjectionSupply.hs:26` | `ResolvedProjectionSupply` | data | yes | `supplyOwnerLoc` | `ownerLoc` | `!Loc` | `(.ownerLoc)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ProjectionSupply.hs:46` | `ProjectionSupplyAnalysis` | data | yes | `resolvedProjectionSupplies` | `resolvedProjectionSupplies` | `![ResolvedProjectionSupply]` | `(.resolvedProjectionSupplies)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ProjectionSupply.hs:47` | `ProjectionSupplyAnalysis` | data | yes | `projectionSupplyIssues` | `projectionSupplyIssues` | `![ProjectionSupplyIssue]` | `(.projectionSupplyIssues)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ReadModelQueryContract.hs:35` | `QueryContractIdentity` | data | yes | `qciReadModel` | `readModel` | `!Name` | `(.readModel)`, pattern, or construction | serialized/wire review risk | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ReadModelQueryContract.hs:36` | `QueryContractIdentity` | data | yes | `qciPosition` | `position` | `!QueryContractPosition` | `(.position)`, pattern, or construction | serialized/wire review risk | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ReadModelQueryContract.hs:37` | `QueryContractIdentity` | data | yes | `qciTypeExpression` | `typeExpression` | `!Text` | `(.typeExpression)`, pattern, or construction | serialized/wire review risk | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ReadModelQueryContract.hs:38` | `QueryContractIdentity` | data | yes | `qciMappedDependencies` | `mappedDependencies` | `![Name]` | `(.mappedDependencies)`, pattern, or construction | serialized/wire review risk | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ReadModelQueryContract.hs:43` | `QueryContractDrift` | data | yes | `qcdKey` | `key` | `!(Name, QueryContractPosition)` | `(.key)`, pattern, or construction | serialized/wire review risk | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ReadModelQueryContract.hs:44` | `QueryContractDrift` | data | yes | `qcdPrevious` | `previous` | `!(Maybe QueryContractIdentity)` | `(.previous)`, pattern, or construction | serialized/wire review risk | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ReadModelQueryContract.hs:45` | `QueryContractDrift` | data | yes | `qcdCurrent` | `current` | `!(Maybe QueryContractIdentity)` | `(.current)`, pattern, or construction | serialized/wire review risk | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ReplayImpact.hs:57` | `AggregateImpact` | data | yes | `eventTypes` | `eventTypes` | `!(Set Name)` | `(.eventTypes)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ReplayImpact.hs:58` | `AggregateImpact` | data | yes | `includeSnapshotStreams` | `includeSnapshotStreams` | `!Bool` | `(.includeSnapshotStreams)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ReplayImpact.hs:73` | `CatalogReplayImpact` | data | yes | `affectedGroups` | `affectedGroups` | `!(Set Name)` | `(.affectedGroups)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ReplayImpact.hs:74` | `CatalogReplayImpact` | data | yes | `affectedTargets` | `affectedTargets` | `!(Set Name)` | `(.affectedTargets)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ReplayImpact.hs:75` | `CatalogReplayImpact` | data | yes | `affectedSources` | `affectedSources` | `!(Set Text)` | `(.affectedSources)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ReplayImpact.hs:76` | `CatalogReplayImpact` | data | yes | `affectedAdapters` | `affectedAdapters` | `!(Set Name)` | `(.affectedAdapters)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ReplayImpact.hs:77` | `CatalogReplayImpact` | data | yes | `invalidatesRunningFingerprint` | `invalidatesRunningFingerprint` | `!Bool` | `(.invalidatesRunningFingerprint)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ReplayImpact.hs:218` | `ReplaySurfaceContext` | data | no | `surfaceSpec` | `spec` | `!Spec` | `(.spec)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/ReplayImpact.hs:219` | `ReplaySurfaceContext` | data | no | `surfaceGraphResult` | `graphResult` | `Either (NE.NonEmpty TypeGraphError) TypeGraph` | `(.graphResult)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/ReplayImpact.hs:220` | `ReplaySurfaceContext` | data | no | `surfaceSymbols` | `symbols` | `AggregateSymbols` | `(.symbols)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:54` | `CheckedReadModelQuery` | data | yes | `checkedQueryName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:55` | `CheckedReadModelQuery` | data | yes | `checkedQueryInputType` | `inputType` | `!ResolvedTypeExpr` | `(.inputType)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:56` | `CheckedReadModelQuery` | data | yes | `checkedQueryResultType` | `resultType` | `!ResolvedTypeExpr` | `(.resultType)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:61` | `CheckedMappedExpr` | data | yes | `checkedMappedExprRoot` | `root` | `!SelectionRoot` | `(.root)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:62` | `CheckedMappedExpr` | data | yes | `checkedMappedExprType` | `valueType` | `!ResolvedTypeExpr` | `(.valueType)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:67` | `CheckedMappedType` | data | yes | `checkedMappedTypeKey` | `key` | `!MappedKey` | `(.key)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:68` | `CheckedMappedType` | data | yes | `checkedMappedTypeConstructor` | `constructor` | `!Name` | `(.constructor)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:69` | `CheckedMappedType` | data | yes | `checkedMappedTypeFields` | `fields` | `![ResolvedWireField]` | `(.fields)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:87` | `CheckedSelectionPathSegment` | data | yes | `checkedPathField` | `field` | `!Name` | `(.field)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:88` | `CheckedSelectionPathSegment` | data | yes | `checkedPathWireKey` | `wireKey` | `!Text` | `(.wireKey)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:89` | `CheckedSelectionPathSegment` | data | yes | `checkedPathOwner` | `owner` | `!MappedKey` | `(.owner)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:94` | `CheckedScalarExpr` | data | yes | `checkedScalarType` | `valueType` | `!SelectionScalarType` | `(.valueType)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:95` | `CheckedScalarExpr` | data | yes | `checkedScalarNode` | `node` | `!CheckedScalarNode` | `(.node)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:96` | `CheckedScalarExpr` | data | yes | `checkedScalarLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:137` | `CheckedRouterSelection` | data | yes | `checkedIdentity` | `identity` | `!Text` | `(.identity)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:138` | `CheckedRouterSelection` | data | yes | `checkedVersion` | `version` | `!Natural` | `(.version)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:139` | `CheckedRouterSelection` | data | yes | `checkedQuery` | `query` | `!CheckedReadModelQuery` | `(.query)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:140` | `CheckedRouterSelection` | data | yes | `checkedInputBinding` | `inputBinding` | `!CheckedMappedExpr` | `(.inputBinding)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:141` | `CheckedRouterSelection` | data | yes | `checkedRowBinding` | `rowBinding` | `!CheckedMappedType` | `(.rowBinding)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:142` | `CheckedRouterSelection` | data | yes | `checkedKey` | `key` | `!CheckedScalarExpr` | `(.key)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:143` | `CheckedRouterSelection` | data | yes | `checkedPredicate` | `predicate` | `!CheckedScalarExpr` | `(.predicate)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:144` | `CheckedRouterSelection` | data | yes | `checkedRecipient` | `recipient` | `!CheckedScalarExpr` | `(.recipient)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:145` | `CheckedRouterSelection` | data | yes | `checkedCommandFields` | `commandFields` | `!(Map Name CheckedScalarExpr)` | `(.commandFields)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:146` | `CheckedRouterSelection` | data | yes | `checkedTarget` | `target` | `!Name` | `(.target)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:147` | `CheckedRouterSelection` | data | yes | `checkedCommand` | `command` | `!Name` | `(.command)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:148` | `CheckedRouterSelection` | data | yes | `checkedLimit` | `limit` | `!Natural` | `(.limit)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:149` | `CheckedRouterSelection` | data | yes | `checkedOrder` | `order` | `!CheckedSelectionOrder` | `(.order)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:150` | `CheckedRouterSelection` | data | yes | `checkedDedupe` | `dedupe` | `!CheckedSelectionDedupe` | `(.dedupe)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:151` | `CheckedRouterSelection` | data | yes | `checkedEmptyPolicy` | `emptyPolicy` | `!CheckedEmptySelectionPolicy` | `(.emptyPolicy)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:152` | `CheckedRouterSelection` | data | yes | `checkedFailurePolicy` | `failurePolicy` | `!CheckedSelectionFailurePolicy` | `(.failurePolicy)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:153` | `CheckedRouterSelection` | data | yes | `checkedRedeliveryPolicy` | `redeliveryPolicy` | `!CheckedRedeliveryPolicy` | `(.redeliveryPolicy)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:154` | `CheckedRouterSelection` | data | yes | `checkedPartialPolicy` | `partialPolicy` | `!CheckedPartialDispatchPolicy` | `(.partialPolicy)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:155` | `CheckedRouterSelection` | data | yes | `checkedFingerprint` | `fingerprint` | `!Text` | `(.fingerprint)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:156` | `CheckedRouterSelection` | data | yes | `checkedUseSites` | `useSites` | `![UseSite]` | `(.useSites)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:193` | `RouterSelectionDiagnostic` | data | yes | `selectionDiagnosticLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:194` | `RouterSelectionDiagnostic` | data | yes | `selectionDiagnosticCode` | `code` | `!RouterSelectionDiagnosticCode` | `(.code)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/RouterSelection.hs:195` | `RouterSelectionDiagnostic` | data | yes | `selectionDiagnosticMessage` | `message` | `!Text` | `(.message)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/RuntimePackage.hs:18` | `RuntimePackageName` | newtype | yes | `unRuntimePackageName` | `unRuntimePackageName` | `Text` | explicit `unRuntimePackageName` positional function | Haskell API and runtime semantics | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:159` | `ScaffoldModule` | data | yes | `modulePath` | `path` | `!FilePath` | `(.path)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:160` | `ScaffoldModule` | data | yes | `moduleText` | `text` | `!Text` | `(.text)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:161` | `ScaffoldModule` | data | yes | `kind` | `kind` | `!ModuleKind` | `(.kind)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:162` | `ScaffoldModule` | data | yes | `origin` | `origin` | `!Text` | `(.origin)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:170` | `ModuleRole` | data | yes | `roleOwnerKind` | `ownerKind` | `!Text` | `(.ownerKind)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:171` | `ModuleRole` | data | yes | `roleOwnerName` | `ownerName` | `!Text` | `(.ownerName)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:172` | `ModuleRole` | data | yes | `roleFamily` | `family` | `!Text` | `(.family)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:203` | `Context` | data | yes | `contextName` | `name` | `!Text` | `(.name)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:205` | `Context` | data | yes | `moduleRoot` | `moduleRoot` | `!Text` | `(.moduleRoot)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:207` | `Context` | data | yes | `placement` | `placement` | `!Placement` | `(.placement)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:215` | `NominalUseSite` | data | yes | `nominalUseAggregate` | `aggregate` | `!Name` | `(.aggregate)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:216` | `NominalUseSite` | data | yes | `nominalUseKind` | `kind` | `!AggregateUseSite` | `(.kind)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:224` | `NominalGenerationOwner` | data | yes | `nominalDeclaration` | `declaration` | `!ResolvedNominalType` | `(.declaration)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:225` | `NominalGenerationOwner` | data | yes | `nominalModule` | `moduleName` | `!Text` | `(.moduleName)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:226` | `NominalGenerationOwner` | data | yes | `nominalUseSites` | `useSites` | `!(Set.Set NominalUseSite)` | `(.useSites)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:227` | `NominalGenerationOwner` | data | yes | `nominalEqualityUsed` | `equalityUsed` | `!Bool` | `(.equalityUsed)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:339` | `FirewallSurface` | data | yes | `forbiddenSymbolic` | `forbiddenSymbolic` | `![Text]` | `(.forbiddenSymbolic)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:340` | `FirewallSurface` | data | yes | `forbiddenIdents` | `forbiddenIdents` | `![Text]` | `(.forbiddenIdents)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:341` | `FirewallSurface` | data | yes | `forbiddenQualifiers` | `forbiddenQualifiers` | `![Text]` | `(.forbiddenQualifiers)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:342` | `FirewallSurface` | data | yes | `forbiddenImports` | `forbiddenImports` | `![Text]` | `(.forbiddenImports)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:343` | `FirewallSurface` | data | yes | `restrictedImports` | `restrictedImports` | `![(Text, [Text])]` | `(.restrictedImports)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:494` | `Agg` | data | yes | `aContext` | `context` | `!Context` | `(.context)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:495` | `Agg` | data | yes | `aCheckedService` | `checkedService` | `!CheckedService` | `(.checkedService)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:496` | `Agg` | data | yes | `aLanguageContract` | `languageContract` | `!EffectiveLanguageContract` | `(.languageContract)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:497` | `Agg` | data | yes | `aSpec` | `spec` | `!Spec` | `(.spec)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:498` | `Agg` | data | yes | `aAggregate` | `aggregate` | `!Aggregate` | `(.aggregate)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:499` | `Agg` | data | yes | `aCtxPascal` | `ctxPascal` | `!Text` | `(.ctxPascal)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:500` | `Agg` | data | yes | `aName` | `name` | `!Text` | `(.name)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:501` | `Agg` | data | yes | `aLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:502` | `Agg` | data | yes | `aVertexType` | `vertexType` | `!Text` | `(.vertexType)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:503` | `Agg` | data | yes | `aIds` | `ids` | `![IdDecl]` | `(.ids)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:504` | `Agg` | data | yes | `aEnums` | `enums` | `![EnumDecl]` | `(.enums)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:505` | `Agg` | data | yes | `aRegs` | `regs` | `![ResolvedRegister]` | `(.regs)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:506` | `Agg` | data | yes | `aStates` | `states` | `![StateDecl]` | `(.states)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:507` | `Agg` | data | yes | `aCommands` | `commands` | `![ResolvedCtor]` | `(.commands)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:508` | `Agg` | data | yes | `aEvents` | `events` | `![ResolvedCtor]` | `(.events)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:509` | `Agg` | data | yes | `aDomainOutcomeTypes` | `domainOutcomeTypes` | `!(Maybe ResolvedDomainOutcomeTypes)` | `(.domainOutcomeTypes)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:511` | `Agg` | data | yes | `aGeneratedNominals` | `generatedNominals` | `![ResolvedNominalType]` | `(.generatedNominals)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:512` | `Agg` | data | yes | `aTransitions` | `transitions` | `![Transition]` | `(.transitions)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:513` | `Agg` | data | yes | `aOutputMappings` | `outputMappings` | `!(Map.Map (Int, Int) EventOutputMapping)` | `(.outputMappings)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:514` | `Agg` | data | yes | `aWire` | `wire` | `!WireSpec` | `(.wire)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:515` | `Agg` | data | yes | `aProjection` | `projection` | `!(Maybe ProjectionSpec)` | `(.projection)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:516` | `Agg` | data | yes | `aSnapshot` | `snapshot` | `!(Maybe SnapshotSpec)` | `(.snapshot)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:517` | `Agg` | data | yes | `aFoldFingerprint` | `foldFingerprint` | `!Text` | `(.foldFingerprint)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:518` | `Agg` | data | yes | `aReadModels` | `readModels` | `![ReadModelNode]` | `(.readModels)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:519` | `Agg` | data | yes | `aTypeGraph` | `typeGraph` | `!(Maybe TypeGraph)` | `(.typeGraph)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:520` | `Agg` | data | yes | `aSymbols` | `symbols` | `!AggregateSymbols` | `(.symbols)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:522` | `Agg` | data | yes | `aGenPrefix` | `genPrefix` | `!Text` | `(.genPrefix)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:524` | `Agg` | data | yes | `aHolePrefix` | `holePrefix` | `!Text` | `(.holePrefix)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:528` | `ResolvedDomainOutcomeTypes` | data | yes | `resolvedRejectionType` | `rejectionType` | `!ResolvedAggregateType` | `(.rejectionType)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:529` | `ResolvedDomainOutcomeTypes` | data | yes | `resolvedNoOpType` | `noOpType` | `!ResolvedAggregateType` | `(.noOpType)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:537` | `ResolvedRegister` | data | yes | `rrName` | `name` | `!Name` | `(.name)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:538` | `ResolvedRegister` | data | yes | `rrType` | `valueType` | `!ResolvedAggregateType` | `(.valueType)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:539` | `ResolvedRegister` | data | yes | `rrInitial` | `initial` | `!ResolvedRegisterInitial` | `(.initial)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:540` | `ResolvedRegister` | data | yes | `rrLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:547` | `ResolvedCtor` | data | yes | `rcName` | `name` | `!Text` | `(.name)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:549` | `ResolvedCtor` | data | yes | `rcFields` | `fields` | `![(ResolvedFieldIdentity, ResolvedAggregateType)]` | `(.fields)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:551` | `ResolvedCtor` | data | yes | `rcVersion` | `version` | `!Int` | `(.version)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:553` | `ResolvedCtor` | data | yes | `rcUpcastFrom` | `upcastFrom` | `!(Maybe Int)` | `(.upcastFrom)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:2602` | `RenderedShapeType` | data | no | `renderedShapeTypePrecedence` | `precedence` | `!ShapeTypePrecedence` | `(.precedence)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:2603` | `RenderedShapeType` | data | no | `renderedShapeTypeText` | `text` | `!Text` | `(.text)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:2618` | `StructuralProjection` | data | yes | `spTag` | `tag` | `!Text` | `(.tag)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:2619` | `StructuralProjection` | data | yes | `spWitness` | `witness` | `!Text` | `(.witness)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:2620` | `StructuralProjection` | data | yes | `getter` | `getter` | `!Text` | `(.getter)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:2621` | `StructuralProjection` | data | yes | `rawGetter` | `rawGetter` | `!(Maybe Text)` | `(.rawGetter)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:2622` | `StructuralProjection` | data | yes | `spPointer` | `pointer` | `!Text` | `(.pointer)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:2623` | `StructuralProjection` | data | yes | `spOwner` | `owner` | `!HaskellSource` | `(.owner)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:2624` | `StructuralProjection` | data | yes | `spResult` | `result` | `!Text` | `(.result)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:2625` | `StructuralProjection` | data | yes | `spCanonical` | `canonical` | `!CanonicalTypeId` | `(.canonical)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:2626` | `StructuralProjection` | data | yes | `spBinding` | `binding` | `!QualifiedValueName` | `(.binding)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:2627` | `StructuralProjection` | data | yes | `fixtures` | `fixtures` | `!QualifiedValueName` | `(.fixtures)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:2628` | `StructuralProjection` | data | yes | `terminalNominal` | `terminalNominal` | `!(Maybe NominalLeaf)` | `(.terminalNominal)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:2629` | `StructuralProjection` | data | yes | `spSelectors` | `selectors` | `![(Text, Text)]` | `(.selectors)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:4483` | `ResolvedQueueField` | data | no | `resolvedQueueField` | `field` | `!WqField` | `(.field)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:4484` | `ResolvedQueueField` | data | no | `resolvedQueueExpression` | `expression` | `!(Maybe ResolvedTypeExpr)` | `(.expression)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:4485` | `ResolvedQueueField` | data | no | `resolvedQueueCodecPlan` | `codecPlan` | `!(Maybe MappedCodecPlan)` | `(.codecPlan)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:8579` | `ResolvedGeneratedTransition` | data | no | `resolvedTransitionIndex` | `index` | `!Int` | `(.index)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:8580` | `ResolvedGeneratedTransition` | data | no | `resolvedTransitionSource` | `source` | `!Transition` | `(.source)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:8581` | `ResolvedGeneratedTransition` | data | no | `resolvedTransitionGuard` | `guard` | `!(Maybe TypedScalarExpr)` | `(.guard)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:8582` | `ResolvedGeneratedTransition` | data | no | `resolvedTransitionWrites` | `writes` | `![(Name, TypedScalarExpr)]` | `(.writes)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:8590` | `ResolvedSilentOutcome` | data | no | `resolvedSilentLayout` | `layout` | `!TransitionLayoutEntry` | `(.layout)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:8591` | `ResolvedSilentOutcome` | data | no | `resolvedSilentKind` | `kind` | `!SilentOutcomeKind` | `(.kind)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:8592` | `ResolvedSilentOutcome` | data | no | `resolvedSilentReason` | `reason` | `!TypedScalarExpr` | `(.reason)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:8730` | `ProjectionAlias` | data | no | `projectionAliasTarget` | `target` | `!ProjectionAliasTarget` | `(.target)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:8731` | `ProjectionAlias` | data | no | `projectionAliasName` | `name` | `!Text` | `(.name)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:8807` | `RenderedKeikiExpr` | data | no | `renderedKeikiText` | `text` | `!Text` | `(.text)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Scaffold.hs:8808` | `RenderedKeikiExpr` | data | no | `renderedKeikiPrecedence` | `precedence` | `!Int` | `(.precedence)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:46` | `ScaffoldRecord` | data | yes | `recSpecPath` | `specPath` | `!Text` | `(.specPath)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:47` | `ScaffoldRecord` | data | yes | `recModuleRoot` | `moduleRoot` | `!Text` | `(.moduleRoot)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:48` | `ScaffoldRecord` | data | yes | `recLayout` | `layout` | `!Text` | `(.layout)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:49` | `ScaffoldRecord` | data | yes | `recSourceLanguage` | `sourceLanguage` | `!SourceLanguage` | `(.sourceLanguage)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:50` | `ScaffoldRecord` | data | yes | `recLanguageContract` | `languageContract` | `!EffectiveLanguageContract` | `(.languageContract)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:51` | `ScaffoldRecord` | data | yes | `recNamingEdition` | `namingEdition` | `!GeneratedHaskellNamingEdition` | `(.namingEdition)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:52` | `ScaffoldRecord` | data | yes | `recModuleRoles` | `moduleRoles` | `![ScaffoldModuleRoleRow]` | `(.moduleRoles)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:53` | `ScaffoldRecord` | data | yes | `recFiles` | `files` | `![(ModuleKind, FilePath)]` | `(.files)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:54` | `ScaffoldRecord` | data | yes | `recMappings` | `mappings` | `![MappingIdentity]` | `(.mappings)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:55` | `ScaffoldRecord` | data | yes | `recIdDomains` | `idDomains` | `![Text]` | `(.idDomains)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:56` | `ScaffoldRecord` | data | yes | `recNominalEqualities` | `nominalEqualities` | `![Text]` | `(.nominalEqualities)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:57` | `ScaffoldRecord` | data | yes | `recBindingObligations` | `bindingObligations` | `![BindingHole]` | `(.bindingObligations)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:58` | `ScaffoldRecord` | data | yes | `recBehaviorRequirements` | `behaviorRequirements` | `![BehaviorRecordRow]` | `(.behaviorRequirements)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:59` | `ScaffoldRecord` | data | yes | `recProjectionCatalogFacts` | `projectionCatalogFacts` | `![Text]` | `(.projectionCatalogFacts)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:60` | `ScaffoldRecord` | data | yes | `recQueryContractBaseline` | `queryContractBaseline` | `!Bool` | `(.queryContractBaseline)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:61` | `ScaffoldRecord` | data | yes | `recQueryContracts` | `queryContracts` | `![QueryContractIdentity]` | `(.queryContracts)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:62` | `ScaffoldRecord` | data | yes | `recRouterSelections` | `routerSelections` | `![RouterSelectionSnapshot]` | `(.routerSelections)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:63` | `ScaffoldRecord` | data | yes | `processReactions` | `processReactions` | `![ProcessReactionRecordRow]` | `(.processReactions)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:64` | `ScaffoldRecord` | data | yes | `recSemanticImpact` | `semanticImpact` | `!(Maybe SemanticImpactSnapshot)` | `(.semanticImpact)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:69` | `ScaffoldModuleRoleRow` | data | yes | `srrRole` | `role` | `!ModuleRole` | `(.role)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:70` | `ScaffoldModuleRoleRow` | data | yes | `srrKind` | `kind` | `!ModuleKind` | `(.kind)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:71` | `ScaffoldModuleRoleRow` | data | yes | `srrPath` | `path` | `!FilePath` | `(.path)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:79` | `ProcessReactionRecordRow` | data | yes | `processName` | `processName` | `!Text` | `(.processName)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:80` | `ProcessReactionRecordRow` | data | yes | `verification` | `verification` | `!Text` | `(.verification)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:81` | `ProcessReactionRecordRow` | data | yes | `version` | `version` | `!(Maybe Natural)` | `(.version)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:82` | `ProcessReactionRecordRow` | data | yes | `fingerprint` | `fingerprint` | `!(Maybe Text)` | `(.fingerprint)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRecord.hs:83` | `ProcessReactionRecordRow` | data | yes | `holeObligations` | `holeObligations` | `![Text]` | `(.holeObligations)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:198` | `GeneratedHaskellEditionUse` | data | yes | `path` | `path` | `!FilePath` | `(.path)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:199` | `GeneratedHaskellEditionUse` | data | yes | `line` | `line` | `!Int` | `(.line)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:200` | `GeneratedHaskellEditionUse` | data | yes | `current` | `current` | `!Text` | `(.current)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:201` | `GeneratedHaskellEditionUse` | data | yes | `replacement` | `replacement` | `!Text` | `(.replacement)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:202` | `GeneratedHaskellEditionUse` | data | yes | `form` | `form` | `!HoleUseForm` | `(.form)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:215` | `GeneratedHaskellEditionImpact` | data | yes | `fromEdition` | `fromEdition` | `!HaskellName.GeneratedHaskellNamingEdition` | `(.fromEdition)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:216` | `GeneratedHaskellEditionImpact` | data | yes | `generatedPaths` | `generatedPaths` | `![FilePath]` | `(.generatedPaths)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:217` | `GeneratedHaskellEditionImpact` | data | yes | `sidecarPaths` | `sidecarPaths` | `![FilePath]` | `(.sidecarPaths)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:218` | `GeneratedHaskellEditionImpact` | data | yes | `handOwnedUses` | `handOwnedUses` | `![GeneratedHaskellEditionUse]` | `(.handOwnedUses)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:223` | `PreparedGeneratedHaskellEditionMigration` | data | no | `impact` | `impact` | `!GeneratedHaskellEditionImpact` | `(.impact)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:224` | `PreparedGeneratedHaskellEditionMigration` | data | no | `backups` | `backups` | `![(FilePath, FilePath)]` | `(.backups)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:225` | `PreparedGeneratedHaskellEditionMigration` | data | no | `reportPath` | `reportPath` | `!FilePath` | `(.reportPath)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:226` | `PreparedGeneratedHaskellEditionMigration` | data | no | `reportText` | `reportText` | `!Text` | `(.reportText)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:227` | `PreparedGeneratedHaskellEditionMigration` | data | no | `sourceMoves` | `sourceMoves` | `![SourceMove]` | `(.sourceMoves)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:248` | `GeneratedArtifactImpact` | data | yes | `artifactCategory` | `category` | `!GeneratedArtifactCategory` | `(.category)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:249` | `GeneratedArtifactImpact` | data | yes | `artifactRole` | `role` | `!ModuleRole` | `(.role)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:250` | `GeneratedArtifactImpact` | data | yes | `artifactPath` | `path` | `!FilePath` | `(.path)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:251` | `GeneratedArtifactImpact` | data | yes | `artifactDisposition` | `disposition` | `!WriteDisposition` | `(.disposition)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:261` | `StaleModule` | data | yes | `staleKind` | `kind` | `!ModuleKind` | `(.kind)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:262` | `StaleModule` | data | yes | `stalePath` | `path` | `!FilePath` | `(.path)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:263` | `StaleModule` | data | yes | `staleGeneratedEvidence` | `generatedEvidence` | `!(Maybe StaleGeneratedEvidence)` | `(.generatedEvidence)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:268` | `MappingDrift` | data | yes | `driftSpecName` | `specName` | `!Text` | `(.specName)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:269` | `MappingDrift` | data | yes | `driftPrevious` | `previous` | `!(Maybe MappingIdentity)` | `(.previous)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:270` | `MappingDrift` | data | yes | `driftCurrent` | `current` | `!(Maybe MappingIdentity)` | `(.current)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:275` | `SourceLanguageDrift` | data | yes | `languageDriftPrevious` | `previous` | `!SourceLanguage` | `(.previous)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:276` | `SourceLanguageDrift` | data | yes | `languageDriftCurrent` | `current` | `!SourceLanguage` | `(.current)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:281` | `ScaffoldReport` | data | yes | `reportSpecPath` | `specPath` | `!FilePath` | `(.specPath)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:282` | `ScaffoldReport` | data | yes | `reportOutDir` | `outDir` | `!FilePath` | `(.outDir)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:283` | `ScaffoldReport` | data | yes | `reportContext` | `context` | `!Context` | `(.context)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:284` | `ScaffoldReport` | data | yes | `reportDispositions` | `dispositions` | `![(ScaffoldModule, WriteDisposition)]` | `(.dispositions)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:285` | `ScaffoldReport` | data | yes | `reportInertNodes` | `inertNodes` | `![(Text, Text)]` | `(.inertNodes)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:286` | `ScaffoldReport` | data | yes | `reportManifestPath` | `manifestPath` | `!FilePath` | `(.manifestPath)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:287` | `ScaffoldReport` | data | yes | `reportRecordPath` | `recordPath` | `!FilePath` | `(.recordPath)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:288` | `ScaffoldReport` | data | yes | `reportPreviousSpecPath` | `previousSpecPath` | `!(Maybe Text)` | `(.previousSpecPath)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:289` | `ScaffoldReport` | data | yes | `reportStale` | `stale` | `![StaleModule]` | `(.stale)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:290` | `ScaffoldReport` | data | yes | `reportConsumerPlan` | `consumerPlan` | `!ConsumerPlan` | `(.consumerPlan)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:291` | `ScaffoldReport` | data | yes | `reportConstraintPlan` | `constraintPlan` | `![Text]` | `(.constraintPlan)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:292` | `ScaffoldReport` | data | yes | `reportMappingDrift` | `mappingDrift` | `![MappingDrift]` | `(.mappingDrift)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:293` | `ScaffoldReport` | data | yes | `reportQueryContractBaselineUnavailable` | `queryContractBaselineUnavailable` | `!Bool` | `(.queryContractBaselineUnavailable)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:294` | `ScaffoldReport` | data | yes | `reportQueryContractDrift` | `queryContractDrift` | `![QueryContractDrift]` | `(.queryContractDrift)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:295` | `ScaffoldReport` | data | yes | `reportQueryContractMigrations` | `queryContractMigrations` | `![QueryContractMigration]` | `(.queryContractMigrations)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:296` | `ScaffoldReport` | data | yes | `reportSemanticImpact` | `semanticImpact` | `!SemanticImpactReport` | `(.semanticImpact)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:297` | `ScaffoldReport` | data | yes | `reportRouterSelectionDrift` | `routerSelectionDrift` | `![RouterSelectionDrift]` | `(.routerSelectionDrift)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:298` | `ScaffoldReport` | data | yes | `processReactionCoordinationDrift` | `processReactionCoordinationDrift` | `![ProcessReactionDrift]` | `(.processReactionCoordinationDrift)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:299` | `ScaffoldReport` | data | yes | `reportProjectionMappedImpact` | `projectionMappedImpact` | `!(Maybe ProjectionMappedImpact)` | `(.projectionMappedImpact)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:300` | `ScaffoldReport` | data | yes | `reportGeneratedArtifactImpact` | `generatedArtifactImpact` | `![GeneratedArtifactImpact]` | `(.generatedArtifactImpact)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:301` | `ScaffoldReport` | data | yes | `reportSourceLanguageDrift` | `sourceLanguageDrift` | `!(Maybe SourceLanguageDrift)` | `(.sourceLanguageDrift)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:302` | `ScaffoldReport` | data | yes | `reportNewHoles` | `newHoles` | `![BindingHole]` | `(.newHoles)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:303` | `ScaffoldReport` | data | yes | `processReactionRows` | `processReactionRows` | `![ProcessReactionRecordRow]` | `(.processReactionRows)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:304` | `ScaffoldReport` | data | yes | `reportAddedBehavior` | `addedBehavior` | `![BehaviorRecordRow]` | `(.addedBehavior)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:305` | `ScaffoldReport` | data | yes | `reportRemovedBehavior` | `removedBehavior` | `![BehaviorRecordRow]` | `(.removedBehavior)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:306` | `ScaffoldReport` | data | yes | `reportObsoleteOutputHooks` | `obsoleteOutputHooks` | `![(Text, Text)]` | `(.obsoleteOutputHooks)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:307` | `ScaffoldReport` | data | yes | `reportConformancePackage` | `conformancePackage` | `!(Maybe ConformancePackageReport)` | `(.conformancePackage)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:308` | `ScaffoldReport` | data | yes | `reportNameMoves` | `nameMoves` | `![SourceMove]` | `(.nameMoves)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:309` | `ScaffoldReport` | data | yes | `reportSidecarMoves` | `sidecarMoves` | `![SidecarMove]` | `(.sidecarMoves)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:314` | `QueryContractMigration` | data | yes | `qcmOwner` | `owner` | `!Text` | `(.owner)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:315` | `QueryContractMigration` | data | yes | `path` | `path` | `!FilePath` | `(.path)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/ScaffoldRun.hs:316` | `QueryContractMigration` | data | yes | `qcmRequiredImport` | `requiredImport` | `!Text` | `(.requiredImport)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/SemanticContract.hs:63` | `EffectiveLanguageContract` | data | yes | `effectiveContractLanguageVersion` | `contractLanguageVersion` | `!LanguageVersion` | `(.contractLanguageVersion)`, pattern, or construction | serialized/wire review risk | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/SemanticContract.hs:64` | `EffectiveLanguageContract` | data | yes | `effectiveRuntimeProfile` | `runtimeProfile` | `!RuntimeSemanticsProfile` | `(.runtimeProfile)`, pattern, or construction | serialized/wire review risk | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/SemanticContract.hs:160` | `CheckedService` | data | no | `serviceLanguageContract` | `languageContract` | `!EffectiveLanguageContract` | `(.languageContract)`, pattern, or construction | serialized/wire review risk | `none` |
+| `keiro-dsl/src/Keiro/Dsl/SemanticContract.hs:161` | `CheckedService` | data | no | `serviceSpec` | `spec` | `!Spec` | `(.spec)`, pattern, or construction | serialized/wire review risk | `none` |
+| `keiro-dsl/src/Keiro/Dsl/SemanticContract.hs:162` | `CheckedService` | data | no | `serviceTypeGraph` | `typeGraph` | `Either (NonEmpty TypeGraphError) TypeGraph` | `(.typeGraph)`, pattern, or construction | serialized/wire review risk | `none` |
+| `keiro-dsl/src/Keiro/Dsl/SemanticContract.hs:163` | `CheckedService` | data | no | `serviceProjectionSupplies` | `projectionSupplies` | `ProjectionSupplyAnalysis` | `(.projectionSupplies)`, pattern, or construction | serialized/wire review risk | `none` |
+| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:100` | `MappedRoot` | data | yes | `mappedRootConsumer` | `consumer` | `!MappedConsumer` | `(.consumer)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:101` | `MappedRoot` | data | yes | `mappedRootKind` | `kind` | `!MappedRootKind` | `(.kind)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:102` | `MappedRoot` | data | yes | `mappedRootUseSite` | `useSite` | `!UseSite` | `(.useSite)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:103` | `MappedRoot` | data | yes | `mappedRootDeclaration` | `declaration` | `!MappedKey` | `(.declaration)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:111` | `MappedRootEvidence` | data | yes | `evidenceConsumer` | `consumer` | `!MappedConsumer` | `(.consumer)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:112` | `MappedRootEvidence` | data | yes | `evidenceRootKind` | `rootKind` | `!MappedRootKind` | `(.rootKind)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:113` | `MappedRootEvidence` | data | yes | `evidencePath` | `path` | `!Text` | `(.path)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:114` | `MappedRootEvidence` | data | yes | `evidenceOperation` | `operation` | `!(Maybe Text)` | `(.operation)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:141` | `SemanticImpact` | data | yes | `impactRoots` | `roots` | `![MappedRoot]` | `(.roots)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:142` | `SemanticImpact` | data | yes | `impactUsePaths` | `usePaths` | `!(Map MappedKey [UsePath])` | `(.usePaths)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:143` | `SemanticImpact` | data | yes | `impactAggregateDeclarations` | `aggregateDeclarations` | `!(Map MappedConsumer (Set MappedKey))` | `(.aggregateDeclarations)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:144` | `SemanticImpact` | data | yes | `impactDeclarationConsumers` | `declarationConsumers` | `!(Map MappedKey (Set MappedConsumer))` | `(.declarationConsumers)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:145` | `SemanticImpact` | data | yes | `impactDeclarationEvidence` | `declarationEvidence` | `!(Map MappedKey (Set MappedRootEvidence))` | `(.declarationEvidence)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:146` | `SemanticImpact` | data | yes | `impactDeclarationConsequences` | `declarationConsequences` | `!(Map MappedKey (Set MappedConsequence))` | `(.declarationConsequences)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:147` | `SemanticImpact` | data | yes | `impactServiceDeclarations` | `serviceDeclarations` | `!(Set MappedKey)` | `(.serviceDeclarations)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:148` | `SemanticImpact` | data | yes | `impactDeclarationIdentities` | `declarationIdentities` | `!(Map MappedKey Text)` | `(.declarationIdentities)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:149` | `SemanticImpact` | data | yes | `impactUnsupportedProjectionSources` | `unsupportedProjectionSources` | `![UnsupportedProjectionSource]` | `(.unsupportedProjectionSources)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:159` | `SemanticImpactSnapshot` | data | yes | `snapshotMappedConsumers` | `mappedConsumers` | `!(Map MappedKey (Set MappedConsumer))` | `(.mappedConsumers)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:160` | `SemanticImpactSnapshot` | data | yes | `snapshotMappedEvidence` | `mappedEvidence` | `!(Maybe (Map MappedKey (Set MappedRootEvidence)))` | `(.mappedEvidence)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:161` | `SemanticImpactSnapshot` | data | yes | `snapshotMappedConsequences` | `mappedConsequences` | `!(Maybe (Map MappedKey (Set MappedConsequence)))` | `(.mappedConsequences)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:162` | `SemanticImpactSnapshot` | data | yes | `snapshotServiceInventory` | `serviceInventory` | `!(Set MappedKey)` | `(.serviceInventory)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:163` | `SemanticImpactSnapshot` | data | yes | `snapshotDeclarationIdentities` | `declarationIdentities` | `!(Map MappedKey Text)` | `(.declarationIdentities)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:170` | `MappedImpactDelta` | data | yes | `impactDeclaration` | `declaration` | `!MappedKey` | `(.declaration)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:171` | `MappedImpactDelta` | data | yes | `impactPreviousConsumers` | `previousConsumers` | `!(Set MappedConsumer)` | `(.previousConsumers)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:172` | `MappedImpactDelta` | data | yes | `impactCurrentConsumers` | `currentConsumers` | `!(Set MappedConsumer)` | `(.currentConsumers)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:173` | `MappedImpactDelta` | data | yes | `impactPreviousEvidence` | `previousEvidence` | `!(Maybe (Set MappedRootEvidence))` | `(.previousEvidence)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:174` | `MappedImpactDelta` | data | yes | `impactCurrentEvidence` | `currentEvidence` | `!(Maybe (Set MappedRootEvidence))` | `(.currentEvidence)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:175` | `MappedImpactDelta` | data | yes | `impactPreviousConsequences` | `previousConsequences` | `!(Maybe (Set MappedConsequence))` | `(.previousConsequences)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:176` | `MappedImpactDelta` | data | yes | `impactCurrentConsequences` | `currentConsequences` | `!(Maybe (Set MappedConsequence))` | `(.currentConsequences)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:177` | `MappedImpactDelta` | data | yes | `impactServiceConformance` | `serviceConformance` | `!Bool` | `(.serviceConformance)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:185` | `SemanticImpactReport` | data | yes | `semanticReportPrevious` | `previous` | `!(Maybe SemanticImpactSnapshot)` | `(.previous)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:186` | `SemanticImpactReport` | data | yes | `semanticReportCurrent` | `current` | `!SemanticImpactSnapshot` | `(.current)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:187` | `SemanticImpactReport` | data | yes | `semanticReportDeclarations` | `declarations` | `![MappedKey]` | `(.declarations)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:188` | `SemanticImpactReport` | data | yes | `semanticReportDeltas` | `deltas` | `![MappedImpactDelta]` | `(.deltas)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:514` | `SelectionEvidence` | data | no | `selectionEvidenceRoot` | `root` | `!MappedRoot` | `(.root)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/SemanticImpact.hs:515` | `SelectionEvidence` | data | no | `selectionEvidencePath` | `path` | `!Text` | `(.path)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/ServiceHarness.hs:28` | `DuplicateServiceFactKey` | newtype | yes | `duplicateServiceFactKey` | `duplicateServiceFactKey` | `Text` | `(.duplicateServiceFactKey)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/SidecarMigration.hs:48` | `SidecarMove` | data | yes | `sidecarOldPath` | `oldPath` | `!FilePath` | `(.oldPath)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/SidecarMigration.hs:49` | `SidecarMove` | data | yes | `sidecarNewPath` | `newPath` | `!FilePath` | `(.newPath)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/SidecarMigration.hs:50` | `SidecarMove` | data | yes | `sidecarBackupPath` | `backupPath` | `!(Maybe FilePath)` | `(.backupPath)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/SidecarMigration.hs:51` | `SidecarMove` | data | yes | `sidecarMoveDisposition` | `moveDisposition` | `!SidecarMoveDisposition` | `(.moveDisposition)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Source.hs:22` | `SourcePoint` | data | yes | `offset` | `offset` | `!Int` | `(.offset)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Source.hs:23` | `SourcePoint` | data | yes | `line` | `line` | `!Int` | `(.line)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Source.hs:24` | `SourcePoint` | data | yes | `column` | `column` | `!Int` | `(.column)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Source.hs:38` | `SourceSpan` | data | yes | `source` | `source` | `!FilePath` | `(.source)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Source.hs:39` | `SourceSpan` | data | yes | `start` | `start` | `!SourcePoint` | `(.start)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Source.hs:40` | `SourceSpan` | data | yes | `end` | `end` | `!SourcePoint` | `(.end)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Source.hs:61` | `Located` | data | yes | `span` | `span` | `!SourceSpan` | `(.span)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Ord, Show, Functor, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Source.hs:62` | `Located` | data | yes | `value` | `value` | `!a` | `(.value)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Ord, Show, Functor, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SourceIndex.hs:67` | `IndexedSourcePosition` | data | no | `quality` | `quality` | `!SourcePositionQuality` | `(.quality)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SourceIndex.hs:68` | `IndexedSourcePosition` | data | no | `span` | `span` | `!SourceSpan` | `(.span)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SourceIndex.hs:73` | `SemanticSourceIndex` | newtype | no | `positions` | `positions` | `Map SourceSubject IndexedSourcePosition` | `(.positions)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SourceIndex.hs:79` | `ParsedSourceDocument` | data | yes | `documentParsedSource` | `parsedSource` | `!ParsedSource` | `(.parsedSource)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SourceIndex.hs:80` | `ParsedSourceDocument` | data | yes | `documentSourceIndex` | `sourceIndex` | `!SemanticSourceIndex` | `(.sourceIndex)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SourceIndex.hs:92` | `SourceIndexFailure` | data | yes | `failureCode` | `code` | `!SourceIndexFailureCode` | `(.code)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SourceIndex.hs:93` | `SourceIndexFailure` | data | yes | `failureSubject` | `subject` | `!(Maybe SourceSubject)` | `(.subject)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SourceIndex.hs:94` | `SourceIndexFailure` | data | yes | `failureSpan` | `span` | `!(Maybe SourceSpan)` | `(.span)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/SourceIndex.hs:95` | `SourceIndexFailure` | data | yes | `failureMessage` | `message` | `!Text` | `(.message)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/StructuralConformance.hs:82` | `ConformanceRendering` | data | no | `renderingContext` | `context` | `!Context` | `(.context)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/StructuralConformance.hs:83` | `ConformanceRendering` | data | no | `renderingGraph` | `graph` | `!TypeGraph` | `(.graph)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/StructuralConformance.hs:84` | `ConformanceRendering` | data | no | `renderingDeclarations` | `declarations` | `![ResolvedMappedDecl]` | `(.declarations)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/StructuralConformance.hs:85` | `ConformanceRendering` | data | no | `nominals` | `nominals` | `![NominalLeaf]` | `(.nominals)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/StructuralConformance.hs:86` | `ConformanceRendering` | data | no | `renderingProjections` | `projections` | `![StructuralProjection]` | `(.projections)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/StructuralConformance.hs:87` | `ConformanceRendering` | data | no | `renderingImportPlan` | `importPlan` | `!HaskellImportPlan` | `(.importPlan)`, pattern, or construction | serialized/wire review risk, rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Syntax.hs:33` | `SurfaceSource` | data | yes | `source` | `source` | `!FilePath` | `(.source)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Syntax.hs:34` | `SurfaceSource` | data | yes | `language` | `language` | `!SourceLanguage` | `(.language)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Syntax.hs:35` | `SurfaceSource` | data | yes | `preamble` | `preamble` | `!(Maybe (Located SourceLanguage))` | `(.preamble)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Syntax.hs:36` | `SurfaceSource` | data | yes | `spec` | `spec` | `!(Located SurfaceSpec)` | `(.spec)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Syntax.hs:43` | `SurfaceSpec` | data | yes | `context` | `context` | `!(Located Text)` | `(.context)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Syntax.hs:44` | `SurfaceSpec` | data | yes | `moduleRoot` | `moduleRoot` | `!(Maybe (Located Text))` | `(.moduleRoot)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Syntax.hs:45` | `SurfaceSpec` | data | yes | `layout` | `layout` | `!(Maybe (Located Placement))` | `(.layout)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Syntax.hs:46` | `SurfaceSpec` | data | yes | `items` | `items` | `![Located SurfaceTopItem]` | `(.items)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/Syntax.hs:47` | `SurfaceSpec` | data | yes | `elements` | `elements` | `![Located SurfaceElement]` | `(.elements)`, pattern, or construction | Haskell API and runtime semantics | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TransitionFamily.hs:39` | `TransitionFamilyKey` | data | yes | `familyMode` | `mode` | `!TransitionMode` | `(.mode)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/TransitionFamily.hs:40` | `TransitionFamilyKey` | data | yes | `familySource` | `source` | `!Name` | `(.source)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/TransitionFamily.hs:41` | `TransitionFamilyKey` | data | yes | `familyCommand` | `command` | `!Name` | `(.command)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/TransitionFamily.hs:53` | `TransitionFamilyDelta` | data | yes | `familyKey` | `familyKey` | `!TransitionFamilyKey` | `(.familyKey)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/TransitionFamily.hs:54` | `TransitionFamilyDelta` | data | yes | `oldRemainder` | `oldRemainder` | `![Transition]` | `(.oldRemainder)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/TransitionFamily.hs:55` | `TransitionFamilyDelta` | data | yes | `newRemainder` | `newRemainder` | `![Transition]` | `(.newRemainder)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/TransitionFamily.hs:61` | `ReplayBodyKey` | newtype | yes | `unReplayBodyKey` | `unReplayBodyKey` | `Text` | explicit `unReplayBodyKey` positional function | rendered/canonical output | `deriving stock (Eq, Ord, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/TransitionFamily.hs:76` | `ReplayBodyDelta` | data | yes | `bodyFamilyKey` | `bodyFamilyKey` | `!TransitionFamilyKey` | `(.bodyFamilyKey)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/TransitionFamily.hs:77` | `ReplayBodyDelta` | data | yes | `bodyKey` | `bodyKey` | `!ReplayBodyKey` | `(.bodyKey)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/TransitionFamily.hs:78` | `ReplayBodyDelta` | data | yes | `oldBodyMembers` | `oldBodyMembers` | `![Transition]` | `(.oldBodyMembers)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/TransitionFamily.hs:79` | `ReplayBodyDelta` | data | yes | `newBodyMembers` | `newBodyMembers` | `![Transition]` | `(.newBodyMembers)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/TransitionFamily.hs:80` | `ReplayBodyDelta` | data | yes | `bodyStatus` | `bodyStatus` | `!ReplayBodyStatus` | `(.bodyStatus)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:105` | `QualifiedValueName` | newtype | yes | `unQualifiedValueName` | `unQualifiedValueName` | `Text` | explicit `unQualifiedValueName` positional function | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:111` | `CanonicalTypeId` | newtype | yes | `unCanonicalTypeId` | `unCanonicalTypeId` | `Text` | explicit `unCanonicalTypeId` positional function | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:117` | `BindingVersion` | newtype | yes | `unBindingVersion` | `unBindingVersion` | `Text` | explicit `unBindingVersion` positional function | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:123` | `CodecIdentity` | newtype | yes | `unCodecIdentity` | `unCodecIdentity` | `Text` | explicit `unCodecIdentity` positional function | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:129` | `CodecVersion` | newtype | yes | `unCodecVersion` | `unCodecVersion` | `Text` | explicit `unCodecVersion` positional function | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:185` | `ConsumerNominalBinding` | data | yes | `haskell` | `haskell` | `!HaskellSource` | `(.haskell)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:186` | `ConsumerNominalBinding` | data | yes | `binding` | `binding` | `!QualifiedValueName` | `(.binding)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:187` | `ConsumerNominalBinding` | data | yes | `bindingVersion` | `bindingVersion` | `!BindingVersion` | `(.bindingVersion)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:188` | `ConsumerNominalBinding` | data | yes | `canonical` | `canonical` | `!CanonicalTypeId` | `(.canonical)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:189` | `ConsumerNominalBinding` | data | yes | `fixtures` | `fixtures` | `!QualifiedValueName` | `(.fixtures)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:190` | `ConsumerNominalBinding` | data | yes | `initial` | `initial` | `!(Maybe QualifiedValueName)` | `(.initial)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:206` | `NominalLeaf` | data | yes | `name` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:207` | `NominalLeaf` | data | yes | `kind` | `kind` | `!NominalLeafKind` | `(.kind)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:208` | `NominalLeaf` | data | yes | `ownership` | `ownership` | `!NominalLeafOwnership` | `(.ownership)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:209` | `NominalLeaf` | data | yes | `loc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:223` | `NominalLeafError` | newtype | yes | `nominalLeafIssues` | `nominalLeafIssues` | `NonEmpty NominalLeafIssue` | `(.nominalLeafIssues)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:345` | `LiftVersion` | newtype | yes | `unLiftVersion` | `unLiftVersion` | `Text` | explicit `unLiftVersion` positional function | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:352` | `MappedWriteLift` | data | yes | `source` | `source` | `!LiftSource` | `(.source)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:353` | `MappedWriteLift` | data | yes | `function` | `function` | `!QualifiedValueName` | `(.function)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:354` | `MappedWriteLift` | data | yes | `version` | `version` | `!LiftVersion` | `(.version)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:355` | `MappedWriteLift` | data | yes | `fixtures` | `fixtures` | `!QualifiedValueName` | `(.fixtures)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:356` | `MappedWriteLift` | data | yes | `loc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:388` | `StructuralDecl` | data | yes | `sdName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:389` | `StructuralDecl` | data | yes | `sdHaskell` | `haskell` | `!HaskellSource` | `(.haskell)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:390` | `StructuralDecl` | data | yes | `sdBinding` | `binding` | `!QualifiedValueName` | `(.binding)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:391` | `StructuralDecl` | data | yes | `sdBindingVersion` | `bindingVersion` | `!BindingVersion` | `(.bindingVersion)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:392` | `StructuralDecl` | data | yes | `sdCanonical` | `canonical` | `!CanonicalTypeId` | `(.canonical)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:393` | `StructuralDecl` | data | yes | `sdFixtures` | `fixtures` | `!QualifiedValueName` | `(.fixtures)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:394` | `StructuralDecl` | data | yes | `sdInitial` | `initial` | `!(Maybe QualifiedValueName)` | `(.initial)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:395` | `StructuralDecl` | data | yes | `writeLift` | `writeLift` | `!(Maybe MappedWriteLift)` | `(.writeLift)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:396` | `StructuralDecl` | data | yes | `sdLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:401` | `OpaqueDecl` | data | yes | `odName` | `name` | `!Name` | `(.name)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:402` | `OpaqueDecl` | data | yes | `odHaskell` | `haskell` | `!HaskellSource` | `(.haskell)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:403` | `OpaqueDecl` | data | yes | `odCodecIdentity` | `codecIdentity` | `!CodecIdentity` | `(.codecIdentity)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:404` | `OpaqueDecl` | data | yes | `odCodecVersion` | `codecVersion` | `!CodecVersion` | `(.codecVersion)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:405` | `OpaqueDecl` | data | yes | `writeLift` | `writeLift` | `!(Maybe MappedWriteLift)` | `(.writeLift)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:406` | `OpaqueDecl` | data | yes | `odFixtures` | `fixtures` | `!QualifiedValueName` | `(.fixtures)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:407` | `OpaqueDecl` | data | yes | `odInitial` | `initial` | `!(Maybe QualifiedValueName)` | `(.initial)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:408` | `OpaqueDecl` | data | yes | `odLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:490` | `MappedKey` | newtype | yes | `unMappedKey` | `unMappedKey` | `Name` | explicit `unMappedKey` positional function | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:515` | `ResolvedWireField` | data | yes | `rwfHaskell` | `haskell` | `!Name` | `(.haskell)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:516` | `ResolvedWireField` | data | yes | `rwfKey` | `key` | `!Text` | `(.key)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:517` | `ResolvedWireField` | data | yes | `rwfType` | `valueType` | `!ResolvedTypeExpr` | `(.valueType)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:518` | `ResolvedWireField` | data | yes | `rwfPresence` | `presence` | `!Presence` | `(.presence)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:519` | `ResolvedWireField` | data | yes | `rwfOnMissing` | `onMissing` | `!(Maybe OnMissing)` | `(.onMissing)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:520` | `ResolvedWireField` | data | yes | `rwfLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:525` | `ResolvedWireArm` | data | yes | `rwaCtor` | `ctor` | `!Name` | `(.ctor)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:526` | `ResolvedWireArm` | data | yes | `rwaTag` | `tag` | `!Text` | `(.tag)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:527` | `ResolvedWireArm` | data | yes | `rwaPayload` | `payload` | `!(Maybe ResolvedTypeExpr)` | `(.payload)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:528` | `ResolvedWireArm` | data | yes | `rwaLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:565` | `UseSite` | data | yes | `root` | `root` | `!RootRef` | `(.root)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:566` | `UseSite` | data | yes | `mappedKey` | `mappedKey` | `!MappedKey` | `(.mappedKey)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:571` | `NominalRootSite` | data | yes | `root` | `root` | `!RootRef` | `(.root)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:572` | `NominalRootSite` | data | yes | `nominal` | `nominal` | `!Name` | `(.nominal)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:573` | `NominalRootSite` | data | yes | `segments` | `segments` | `![PathSeg]` | `(.segments)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:589` | `UsePath` | data | yes | `upRoot` | `root` | `!RootRef` | `(.root)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:590` | `UsePath` | data | yes | `upSegments` | `segments` | `![PathSeg]` | `(.segments)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Ord, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:610` | `TypeGraph` | data | yes | `tgDeclarations` | `declarations` | `!(Map MappedKey ResolvedMappedDecl)` | `(.declarations)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:611` | `TypeGraph` | data | yes | `tgReachability` | `reachability` | `!(Map MappedKey (Set MappedKey))` | `(.reachability)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:612` | `TypeGraph` | data | yes | `nominalLeaves` | `nominalLeaves` | `!(Map Name NominalLeaf)` | `(.nominalLeaves)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:613` | `TypeGraph` | data | yes | `unsupportedNominalLeafKinds` | `unsupportedNominalLeafKinds` | `!(Map Name Text)` | `(.unsupportedNominalLeafKinds)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:614` | `TypeGraph` | data | yes | `nominalReachability` | `nominalReachability` | `!(Map MappedKey (Set Name))` | `(.nominalReachability)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:615` | `TypeGraph` | data | yes | `tgUseSites` | `useSites` | `![UseSite]` | `(.useSites)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:616` | `TypeGraph` | data | yes | `nominalRootSites` | `nominalRootSites` | `![NominalRootSite]` | `(.nominalRootSites)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:617` | `TypeGraph` | data | yes | `tgRootSegments` | `rootSegments` | `!(Map UseSite [PathSeg])` | `(.rootSegments)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:618` | `TypeGraph` | data | yes | `tgDerivedMappedConsumers` | `derivedMappedConsumers` | `![DerivedMappedConsumer]` | `(.derivedMappedConsumers)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:619` | `TypeGraph` | data | yes | `tgReplayableProjectionGroups` | `replayableProjectionGroups` | `!(Map DerivedMappedConsumer Name)` | `(.replayableProjectionGroups)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:620` | `TypeGraph` | data | yes | `tgProjectionOperationalIdentities` | `projectionOperationalIdentities` | `!(Map DerivedMappedConsumer Text)` | `(.projectionOperationalIdentities)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:621` | `TypeGraph` | data | yes | `tgUnsupportedProjectionSources` | `unsupportedProjectionSources` | `![UnsupportedProjectionSource]` | `(.unsupportedProjectionSources)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show, Generic)` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1270` | `TypeExprAlgebra` | data | yes | `onText` | `onText` | `a` | `(.onText)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1271` | `TypeExprAlgebra` | data | yes | `onInt` | `onInt` | `a` | `(.onInt)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1272` | `TypeExprAlgebra` | data | yes | `onInteger` | `onInteger` | `a` | `(.onInteger)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1273` | `TypeExprAlgebra` | data | yes | `onBool` | `onBool` | `a` | `(.onBool)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1274` | `TypeExprAlgebra` | data | yes | `onNatural` | `onNatural` | `a` | `(.onNatural)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1275` | `TypeExprAlgebra` | data | yes | `onTime` | `onTime` | `a` | `(.onTime)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1276` | `TypeExprAlgebra` | data | yes | `onDay` | `onDay` | `a` | `(.onDay)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1277` | `TypeExprAlgebra` | data | yes | `onTextSet` | `onTextSet` | `a` | `(.onTextSet)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1278` | `TypeExprAlgebra` | data | yes | `onJson` | `onJson` | `a` | `(.onJson)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1279` | `TypeExprAlgebra` | data | yes | `onOptional` | `onOptional` | `a -> a` | `(.onOptional)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1280` | `TypeExprAlgebra` | data | yes | `onList` | `onList` | `a -> a` | `(.onList)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1281` | `TypeExprAlgebra` | data | yes | `onMap` | `onMap` | `a -> a` | `(.onMap)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1282` | `TypeExprAlgebra` | data | yes | `onKeyedMap` | `onKeyedMap` | `NominalLeaf -> a -> a` | `(.onKeyedMap)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1283` | `TypeExprAlgebra` | data | yes | `onRef` | `onRef` | `MappedKey -> a` | `(.onRef)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1284` | `TypeExprAlgebra` | data | yes | `onNominal` | `onNominal` | `NominalLeaf -> a` | `(.onNominal)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1306` | `MappedShapeAlgebra` | data | yes | `onRecord` | `onRecord` | `Name -> UnknownFields -> [ResolvedWireField] -> a` | `(.onRecord)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1307` | `MappedShapeAlgebra` | data | yes | `onEnum` | `onEnum` | `[WireEnum] -> a` | `(.onEnum)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1308` | `MappedShapeAlgebra` | data | yes | `onUnion` | `onUnion` | `UnionEncoding -> [ResolvedWireArm] -> a` | `(.onUnion)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1309` | `MappedShapeAlgebra` | data | yes | `onBare` | `onBare` | `ResolvedTypeExpr -> a` | `(.onBare)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1310` | `MappedShapeAlgebra` | data | yes | `onRefined` | `onRefined` | `RefinedWirePolicy -> a` | `(.onRefined)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1322` | `MappedDeclAlgebra` | data | yes | `onStructuralDecl` | `onStructuralDecl` | `StructuralDecl -> ResolvedMappedShape -> a` | `(.onStructuralDecl)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1323` | `MappedDeclAlgebra` | data | yes | `onOpaqueDecl` | `onOpaqueDecl` | `OpaqueDecl -> a` | `(.onOpaqueDecl)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Validate.hs:779` | `Diagnostic` | data | yes | `line` | `line` | `!Int` | `(.line)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Validate.hs:780` | `Diagnostic` | data | yes | `severity` | `severity` | `!Severity` | `(.severity)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Validate.hs:781` | `Diagnostic` | data | yes | `code` | `code` | `!DiagnosticCode` | `(.code)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Validate.hs:782` | `Diagnostic` | data | yes | `relatedLocations` | `relatedLocations` | `![(Int, Text)]` | `(.relatedLocations)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Validate.hs:783` | `Diagnostic` | data | yes | `message` | `message` | `!Text` | `(.message)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
+| `keiro-dsl/src/Keiro/Dsl/Validate.hs:1725` | `NullabilityFacts` | data | no | `nfTopNull` | `topNull` | `!Bool` | `(.topNull)`, pattern, or construction | rendered/canonical output | `none` |
+| `keiro-dsl/src/Keiro/Dsl/Validate.hs:1726` | `NullabilityFacts` | data | no | `nfBadOptional` | `badOptional` | `!Bool` | `(.badOptional)`, pattern, or construction | rendered/canonical output | `none` |
 | `keiro-dsl/src/Keiro/Dsl/Workspace.hs:140` | `WorkspaceManifest` | data | yes | `wmfService` | `service` | `!Text` | `(.service)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
 | `keiro-dsl/src/Keiro/Dsl/Workspace.hs:141` | `WorkspaceManifest` | data | yes | `wmfServiceLoc` | `serviceLoc` | `!Loc` | `(.serviceLoc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
 | `keiro-dsl/src/Keiro/Dsl/Workspace.hs:143` | `WorkspaceManifest` | data | yes | `wmfRuntimePackage` | `runtimePackage` | `!(Maybe RuntimePackageName)` | `(.runtimePackage)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
diff --git a/src/Keiro/Dsl/AggregateType.hs b/src/Keiro/Dsl/AggregateType.hs
--- a/src/Keiro/Dsl/AggregateType.hs
+++ b/src/Keiro/Dsl/AggregateType.hs
@@ -481,8 +481,8 @@
 
 pascal :: Text -> Text
 pascal value =
-  case HaskellName.deriveHaskellName HaskellName.LogicalIdentifier site of
-    Right derived -> HaskellName.renderUpperCamelName ((.upperCamel) derived)
+  case HaskellName.deriveUpperCamelName HaskellName.LogicalIdentifier site of
+    Right derived -> HaskellName.renderUpperCamelName derived
     Left _ -> value
   where
     site =
diff --git a/src/Keiro/Dsl/BehaviorCoverage.hs b/src/Keiro/Dsl/BehaviorCoverage.hs
--- a/src/Keiro/Dsl/BehaviorCoverage.hs
+++ b/src/Keiro/Dsl/BehaviorCoverage.hs
@@ -486,6 +486,8 @@
   EMultiply _ left right -> crossesOneWayProjection left || crossesOneWayProjection right
   EPath _ _ (_ : _ : _) -> True
   EPath {} -> False
+  EWriteMapped _ child -> crossesOneWayProjection child
+  EWriteInitial {} -> False
   ELiteral {} -> False
   EAtom {} -> False
 
diff --git a/src/Keiro/Dsl/CanonicalEncoding.hs b/src/Keiro/Dsl/CanonicalEncoding.hs
--- a/src/Keiro/Dsl/CanonicalEncoding.hs
+++ b/src/Keiro/Dsl/CanonicalEncoding.hs
@@ -259,6 +259,8 @@
     body (EAdd _ left right) = docExpr 4 left <+> "+" <+> docExpr 5 right
     body (ESubtract _ left right) = docExpr 4 left <+> "-" <+> docExpr 5 right
     body (EMultiply _ left right) = docExpr 5 left <+> "*" <+> docExpr 6 right
+    body (EWriteMapped _ child) = "mapped" <> parens (docExpr 0 child)
+    body EWriteInitial {} = "initial"
     body (EPath _ root path) = docPath root path
     body (ELiteral _ literal) = docLiteral literal
     body (EAtom atom) = docAtom atom
@@ -270,6 +272,8 @@
 precedence EAdd {} = 4
 precedence ESubtract {} = 4
 precedence EMultiply {} = 5
+precedence EWriteMapped {} = 6
+precedence EWriteInitial {} = 6
 precedence EPath {} = 6
 precedence ELiteral {} = 6
 precedence EAtom {} = 6
diff --git a/src/Keiro/Dsl/Diff.hs b/src/Keiro/Dsl/Diff.hs
--- a/src/Keiro/Dsl/Diff.hs
+++ b/src/Keiro/Dsl/Diff.hs
@@ -376,7 +376,7 @@
   | code == MappedFieldAddedWithDefault = mappedFieldAdditionVector context
   | code `elem` [MappedArmAdded, MappedEnumValueAdded] = mappedDirectionalAdditionVector context
   | code `elem` mappedWireBreakingCodes = mappedWireBreakingVector context
-  | code `elem` [MappedHaskellSourceChanged, MappedRecordConstructorChanged, MappedFixturesChanged] = mappedBuildVector
+  | code `elem` [MappedWriteLiftChanged, MappedWriteLiftFixturesChanged, MappedHaskellSourceChanged, MappedRecordConstructorChanged, MappedFixturesChanged] = mappedBuildVector
   | code == MappedBindingChanged = mappedBindingVector context
   | code `elem` [MappedInitialChanged, MappedCanonicalTypeChanged] = mappedSnapshotBuildVector context
   | code == NominalFixturesChanged = mappedBuildVector
@@ -896,7 +896,7 @@
   idDomainVersion contract <> "(prefix=" <> idDomainPrefix contract <> ",json=" <> idDomainJsonRepresentation contract <> ")"
 
 contractFieldIdDomain :: Spec -> EffectiveLanguageContract -> ContractField -> Maybe IdDomainContract
-contractFieldIdDomain spec languageContract field = case (.valueType) field of
+contractFieldIdDomain spec languageContract field = case contractScalar ((.valueType) field) of
   CTypeId prefix -> contractIdDomainContractFor languageContract prefix
   CDeclaredId name -> do
     declaration <- find ((== name) . (.name)) ((.ids) spec)
@@ -923,7 +923,7 @@
     <> renderIdDomainContract newContract
     <> representationChange
   where
-    prefix = case valueType of
+    prefix = case contractScalar valueType of
       CTypeId value -> value
       CDeclaredId _ -> fromMaybe "" resolvedPrefix
       _ -> ""
@@ -1013,7 +1013,12 @@
 -- Category/all owners never appear because they have no single mapped event
 -- authority. Operational targets and observers are evidence, not SQL claims.
 mappedProjectionFindingChanges :: DiffEnv -> MappedFinding -> [Change]
-mappedProjectionFindingChanges env finding = case (projectionImpactFor ((.old) env), projectionImpactFor ((.new) env)) of
+mappedProjectionFindingChanges env finding
+  | finding.code `elem` [MappedWriteLiftChanged, MappedWriteLiftFixturesChanged] = []
+  | otherwise = inheritedProjectionFindingChanges env finding
+
+inheritedProjectionFindingChanges :: DiffEnv -> MappedFinding -> [Change]
+inheritedProjectionFindingChanges env finding = case (projectionImpactFor ((.old) env), projectionImpactFor ((.new) env)) of
   (Nothing, Nothing) -> []
   (oldImpact, newImpact) ->
     let derivedConsumers =
@@ -1112,7 +1117,7 @@
 mappedFindingChanges :: MappedFinding -> [Change]
 mappedFindingChanges finding
   | (.code) finding == MappedDeclAdded = [mappedDeclarationChange LabelAdditive finding]
-  | (.code) finding `elem` [MappedHaskellSourceChanged, MappedRecordConstructorChanged, MappedFixturesChanged, GeneratedHaskellNameChanged] =
+  | (.code) finding `elem` [MappedWriteLiftChanged, MappedWriteLiftFixturesChanged, MappedHaskellSourceChanged, MappedRecordConstructorChanged, MappedFixturesChanged, GeneratedHaskellNameChanged] =
       [mappedBuildChange finding]
   | (.code) finding `elem` [MappedInitialChanged, MappedCanonicalTypeChanged] =
       mappedBuildChange finding : map (mappedUseChange finding) registerPaths
@@ -1794,8 +1799,16 @@
           "transitions"
           ((.name) newAgg)
           AggFoldSurfaceChanged
-          "aggregate fold surface changed: replay now interprets the existing log under the new fold. Old snapshots are invalidated automatically once the regenerated fold fingerprint deploys; if the change is fold-neutral confirm it, otherwise re-scaffold and redeploy, and bump `state-codec version=` for any accompanying Holes-only change."
+          ( "aggregate fold surface changed: replay now interprets the existing log under the new fold. Old snapshots are invalidated automatically once the regenerated fold fingerprint deploys; if the change is fold-neutral confirm it, otherwise re-scaffold and redeploy, and bump `state-codec version=` for any accompanying Holes-only change."
+              <> removedDetails "commands" (map (.name) oldAgg.commands) (map (.name) newAgg.commands)
+              <> removedDetails "states" (map (.name) oldAgg.states) (map (.name) newAgg.states)
+          )
       ]
+  where
+    removedDetails label oldNames newNames =
+      case Set.toAscList (Set.fromList oldNames `Set.difference` Set.fromList newNames) of
+        [] -> ""
+        names -> " Removed " <> label <> ": " <> T.intercalate ", " names <> "."
 
 -- | Plan 143: guard changes are replay-relevant. Hydration re-inverts each
 -- stored event and re-checks the edge guard, so a stored event legally appended
@@ -2831,15 +2844,21 @@
             subject
             ContractFieldChanged
             (detail <> "; canonical JSON bytes and TypeID admission are unchanged, but generated consumers must rebuild for the declared Haskell type")
-      | otherwise = breaking ((.name) newContract) "contract-field" subject ContractFieldChanged detail
+      | otherwise = breaking ((.name) newContract) "contract-field" subject ContractFieldChanged (detail <> if oldDomain /= newDomain then renderIdDomainDirection oldDomain newDomain else "")
       where
         subject = (.name) newEvent <> "." <> (.name) newField
         detail = "field type changed " <> renderContractType ((.valueType) oldField) <> " -> " <> renderContractType ((.valueType) newField)
+        oldDomain = contractFieldIdDomain ((.old) env) (checkedLanguageContract ((.oldService) env)) oldField
+        newDomain = contractFieldIdDomain ((.new) env) (checkedLanguageContract ((.newService) env)) newField
         literalDeclaredSamePrefix =
           isLiteralDeclaredTransition ((.valueType) oldField) ((.valueType) newField)
+            && isJust oldDomain
+            && oldDomain == newDomain
             && contractTypePrefix ((.old) env) ((.valueType) oldField) == contractTypePrefix ((.new) env) ((.valueType) newField)
-    isLiteralDeclaredTransition CTypeId {} CDeclaredId {} = True
-    isLiteralDeclaredTransition CDeclaredId {} CTypeId {} = True
+    isLiteralDeclaredTransition (CScalar CTypeId {}) (CScalar CDeclaredId {}) = True
+    isLiteralDeclaredTransition (CScalar CDeclaredId {}) (CScalar CTypeId {}) = True
+    isLiteralDeclaredTransition (CList CTypeId {}) (CList CDeclaredId {}) = True
+    isLiteralDeclaredTransition (CList CDeclaredId {}) (CList CTypeId {}) = True
     isLiteralDeclaredTransition _ _ = False
     selectorFieldChanges =
       [ fieldSelectorChange
@@ -2878,15 +2897,22 @@
       ]
 
 renderContractType :: ContractType -> Text
-renderContractType (CTypeId prefix) = "typeid '" <> prefix <> "'"
-renderContractType (CDeclaredId name) = name
-renderContractType CText = "text"
-renderContractType CInt = "int"
+renderContractType (CScalar scalar) = renderContractScalar scalar
+renderContractType (CList scalar) = "List " <> renderContractScalar scalar
 
+renderContractScalar :: ContractScalarType -> Text
+renderContractScalar (CTypeId prefix) = "typeid '" <> prefix <> "'"
+renderContractScalar (CDeclaredId name) = name
+renderContractScalar CText = "text"
+renderContractScalar CInt = "int"
+
 contractTypePrefix :: Spec -> ContractType -> Maybe Text
-contractTypePrefix _ (CTypeId prefix) = Just prefix
-contractTypePrefix spec (CDeclaredId name) = (.prefix) <$> find ((== name) . (.name)) ((.ids) spec)
-contractTypePrefix _ _ = Nothing
+contractTypePrefix spec = contractScalarPrefix spec . contractScalar
+
+contractScalarPrefix :: Spec -> ContractScalarType -> Maybe Text
+contractScalarPrefix _ (CTypeId prefix) = Just prefix
+contractScalarPrefix spec (CDeclaredId name) = (.prefix) <$> find ((== name) . (.name)) ((.ids) spec)
+contractScalarPrefix _ _ = Nothing
 
 workqueueDiff :: DiffEnv -> [Change]
 workqueueDiff env =
diff --git a/src/Keiro/Dsl/DiffReport.hs b/src/Keiro/Dsl/DiffReport.hs
--- a/src/Keiro/Dsl/DiffReport.hs
+++ b/src/Keiro/Dsl/DiffReport.hs
@@ -300,7 +300,7 @@
   | code `elem` [MappedHaskellSourceChanged, MappedRecordConstructorChanged] =
       RemedyRecompileConsumers :| [RemedyRunConformance]
   | code == MappedBindingChanged = mappedConformanceRemedy
-  | code == MappedFixturesChanged = RemedyRunConformance :| []
+  | code `elem` [MappedFixturesChanged, MappedWriteLiftChanged, MappedWriteLiftFixturesChanged] = RemedyRunConformance :| []
   | code == MappedInitialChanged = mappedSnapshotConformanceRemedy
   | code == MappedCanonicalTypeChanged = mappedCanonicalRemedy
   | code == MappedDeclAdded = RemedyRunConformance :| []
diff --git a/src/Keiro/Dsl/ExplainBindings.hs b/src/Keiro/Dsl/ExplainBindings.hs
--- a/src/Keiro/Dsl/ExplainBindings.hs
+++ b/src/Keiro/Dsl/ExplainBindings.hs
@@ -39,6 +39,8 @@
 data BindingObligationKind
   = BindingValue
   | FixtureValue
+  | WriteLiftFunction
+  | WriteLiftCases
   | InitialValue
   deriving stock (Eq, Ord, Show)
 
@@ -148,6 +150,7 @@
       [ obligationsFor graph declaration
       | ResolvedStructural declaration _ <- Map.elems ((.declarations) graph)
       ]
+      <> concatMap (liftObligationsFor graph) (Map.elems graph.declarations)
       <> concatMap (nominalObligationsFor service graph) (Map.elems (nominalTypes nominalRegistry))
   where
     spec = checkedSpec service
@@ -280,6 +283,38 @@
         [ obligationFor declaration initialValue InitialValue consumerType registerPaths Nothing (Just (unCanonicalTypeId ((.canonical) declaration)))
         ]
 
+liftObligationsFor :: TypeGraph -> ResolvedMappedDecl -> [BindingObligation]
+liftObligationsFor graph resolved = case details of
+  (_, _, Nothing) -> []
+  (name, source, Just lift) ->
+    [ entry WriteLiftFunction lift.function (scalar <> " -> " <> target),
+      entry WriteLiftCases lift.fixtures ("NonEmpty (Text, " <> scalar <> ", " <> target <> ")")
+    ]
+    where
+      scalar = if lift.source == LiftTime then "UTCTime" else liftSourceName lift.source
+      target = source.moduleName <> "." <> source.valueType
+      entry kind qualified signature =
+        BindingObligation
+          { mappedName = name,
+            package = source.package,
+            moduleName = owner,
+            symbol = symbol,
+            kind = kind,
+            signature = symbol <> " :: " <> signature,
+            useSites = map renderUsePath (usePaths graph name),
+            bindingVersion = Just (unLiftVersion lift.version),
+            canonicalType = Nothing,
+            equalityContract = Nothing,
+            idDomainContract = Nothing,
+            category = case resolved of ResolvedStructural {} -> "structural"; ResolvedOpaque {} -> "opaque"
+          }
+        where
+          (owner, symbol) = splitQualified (unQualifiedValueName qualified)
+  where
+    details = case resolved of
+      ResolvedStructural declaration _ -> (declaration.name, declaration.haskell, declaration.writeLift)
+      ResolvedOpaque declaration -> (declaration.name, declaration.haskell, declaration.writeLift)
+
 obligationFor :: StructuralDecl -> QualifiedValueName -> BindingObligationKind -> Text -> [Text] -> Maybe Text -> Maybe Text -> BindingObligation
 obligationFor declaration qualified kindValue signature paths version canonical =
   BindingObligation
@@ -449,9 +484,13 @@
 renderKind :: BindingObligationKind -> Text
 renderKind BindingValue = "binding"
 renderKind FixtureValue = "fixtures"
+renderKind WriteLiftFunction = "write-lift-function"
+renderKind WriteLiftCases = "write-lift-cases"
 renderKind InitialValue = "initial-value"
 
 parseKind :: Text -> Maybe BindingObligationKind
+parseKind "write-lift-function" = Just WriteLiftFunction
+parseKind "write-lift-cases" = Just WriteLiftCases
 parseKind "binding" = Just BindingValue
 parseKind "fixtures" = Just FixtureValue
 parseKind "initial-value" = Just InitialValue
diff --git a/src/Keiro/Dsl/Expression.hs b/src/Keiro/Dsl/Expression.hs
--- a/src/Keiro/Dsl/Expression.hs
+++ b/src/Keiro/Dsl/Expression.hs
@@ -110,6 +110,8 @@
 
 data TypedScalarNode
   = TypedLiteral !ScalarValue
+  | TypedMappedLift !Name !MappedWriteLift !TypedScalarExpr
+  | TypedMappedInitial !Name !QualifiedValueName
   | TypedRoot !ScalarRootProvenance
   | TypedProject !ScalarRootProvenance !ResolvedScalarProjection
   | TypedAdd !ArithmeticEvidence !TypedScalarExpr !TypedScalarExpr
@@ -143,6 +145,10 @@
   | ScalarBooleanOperandRequired
   | ScalarGuardBoolRequired
   | ScalarWriteTargetUnknown
+  | ScalarMappedLiftUnsupported
+  | ScalarMappedLiftProjectionUnsupported
+  | ScalarWriteInitialUnsupported
+  | ScalarWriteInitialShadowed
   | ScalarWriteTypeMismatch
   deriving stock (Eq, Ord, Show)
 
@@ -164,6 +170,8 @@
       EAdd loc left right -> resolveArithmetic loc TypedAdd left right wanted
       ESubtract loc left right -> resolveArithmetic loc TypedSubtract left right wanted
       EMultiply loc left right -> resolveArithmetic loc TypedMultiply left right wanted
+      EWriteMapped loc _ -> failure loc ScalarMappedLiftUnsupported "mapped construction is supported only as a complete write"
+      EWriteInitial loc -> failure loc ScalarWriteInitialUnsupported "initial is supported only as a complete mapped write"
       EPath loc root path -> resolvePath environment loc root path
       ELiteral loc literal -> resolveLiteral environment loc wanted literal
       EAtom (ABool value) -> pure (literalExpr noLoc AggregateBool (ScalarBoolValue value))
@@ -318,16 +326,44 @@
         ("write target '" <> registerName <> "' is not an aggregate register")
     Just register -> case resolveAggregateType ((.symbols) environment) ((.loc) register) RegisterUse ((.valueType) register) of
       Left _ -> Right unresolvedSentinel
-      Right expected -> case resolveScalarExpr environment (ExpectScalarType expected) expression of
-        Left diagnostics -> Left (fmap writeDiagnostic diagnostics)
-        Right resolved
-          | predicateValued resolved ->
-              failure
-                ((.loc) resolved)
-                ScalarOperatorUnsupported
-                "comparison and Boolean operators are guard predicates and cannot be written as scalar terms"
-          | otherwise -> Right resolved
+      Right expected -> case expression of
+        EWriteMapped loc child -> case expected of
+          AggregateMapped key -> case mappedLiftFor key of
+            Nothing -> failure loc ScalarMappedLiftUnsupported "mapped target must declare a write-lift"
+            Just lift -> do
+              input <- resolveScalarExpr environment (ExpectScalarType (liftSourceType lift.source)) child
+              validateLiftChild input
+              Right (TypedScalarExpr expected loc (TypedMappedLift (unMappedKey key) lift input))
+          _ -> failure loc ScalarMappedLiftUnsupported "mapped construction requires a mapped target"
+        EWriteInitial loc
+          | shadowed -> failure loc ScalarWriteInitialShadowed "bare initial shadows an existing root; use reg.initial or cmd.initial explicitly"
+          | otherwise -> case expected of
+              AggregateMapped _ -> case resolveRegisterInitial ((.symbols) environment) loc expected (RegInitBare "initial") of
+                Right (InitialMapped key value) -> Right (TypedScalarExpr expected loc (TypedMappedInitial (unMappedKey key) value))
+                _ -> failure loc ScalarWriteInitialUnsupported "mapped target must declare an initial symbol"
+              _ -> failure loc ScalarWriteInitialUnsupported "initial writes require a mapped target; direct and nominal targets are unsupported"
+        _ -> resolveOrdinary expected
         where
+          mappedLiftFor key = do
+            graph <- environment.typeGraph
+            declaration <- Map.lookup key graph.declarations
+            case declaration of
+              ResolvedStructural value _ -> value.writeLift
+              ResolvedOpaque value -> value.writeLift
+          shadowed =
+            any ((== "initial") . (.name)) ((.regs) ((.aggregate) environment))
+              || any
+                ((== "initial") . (.name))
+                [field | command <- (.commands) ((.aggregate) environment), (.name) command == (.command) ((.transition) environment), field <- (.fields) command]
+          resolveOrdinary expected = case resolveScalarExpr environment (ExpectScalarType expected) expression of
+            Left diagnostics -> Left (fmap writeDiagnostic diagnostics)
+            Right resolved
+              | predicateValued resolved ->
+                  failure
+                    ((.loc) resolved)
+                    ScalarOperatorUnsupported
+                    "comparison and Boolean operators are guard predicates and cannot be written as scalar terms"
+              | otherwise -> Right resolved
           writeDiagnostic diagnostic
             | (.code) diagnostic `elem` [ScalarOperandTypeMismatch, ScalarNominalTypeMismatch] =
                 replaceExpressionDiagnostic
@@ -344,6 +380,34 @@
     -- value is never scaffolded because any error prevents generation.
     unresolvedSentinel = TypedScalarExpr AggregateBool noLoc (TypedLiteral (ScalarBoolValue False))
 
+liftSourceType :: LiftSource -> ResolvedAggregateType
+liftSourceType = \case
+  LiftText -> AggregateText
+  LiftInt -> AggregateInt
+  LiftInteger -> AggregateInteger
+  LiftBool -> AggregateBool
+  LiftNatural -> AggregateNatural
+  LiftTime -> AggregateTime
+
+validateLiftChild :: TypedScalarExpr -> Either (NonEmpty ExpressionDiagnostic) ()
+validateLiftChild expression = case expression.node of
+  TypedProject {} -> failure expression.loc ScalarMappedLiftProjectionUnsupported "write-lift inputs cannot contain mapped or nominal projections; use a direct scalar command or register root"
+  TypedLiteral {} -> pure ()
+  TypedRoot {} -> pure ()
+  TypedAdd _ left right -> recurse left right
+  TypedSubtract _ left right -> recurse left right
+  TypedMultiply _ left right -> recurse left right
+  TypedEqual {} -> predicate
+  TypedNotEqual {} -> predicate
+  TypedCompare {} -> predicate
+  TypedAnd {} -> predicate
+  TypedOr {} -> predicate
+  TypedMappedInitial {} -> predicate
+  TypedMappedLift {} -> predicate
+  where
+    recurse left right = validateLiftChild left >> validateLiftChild right
+    predicate = failure expression.loc ScalarOperatorUnsupported "comparison and Boolean operators are guard predicates and cannot be written as scalar terms"
+
 replaceExpressionDiagnostic :: ExpressionDiagnosticCode -> Text -> ExpressionDiagnostic -> ExpressionDiagnostic
 replaceExpressionDiagnostic code message diagnostic =
   ExpressionDiagnostic
@@ -582,6 +646,8 @@
 
 predicateValued :: TypedScalarExpr -> Bool
 predicateValued expression = case (.node) expression of
+  TypedMappedInitial {} -> False
+  TypedMappedLift {} -> False
   TypedEqual {} -> True
   TypedNotEqual {} -> True
   TypedCompare {} -> True
diff --git a/src/Keiro/Dsl/FoldEvidence.hs b/src/Keiro/Dsl/FoldEvidence.hs
new file mode 100644
--- /dev/null
+++ b/src/Keiro/Dsl/FoldEvidence.hs
@@ -0,0 +1,573 @@
+{-# OPTIONS_GHC -Werror=incomplete-patterns #-}
+
+-- | Canonical identities for the aggregate fold surface used while hydrating
+-- event streams. The fingerprint deliberately excludes payload codecs,
+-- projections, snapshot policy, and source locations: those inputs do not change
+-- how an existing event log becomes aggregate state.
+module Keiro.Dsl.FoldEvidence
+  ( FoldSurfaceError (..),
+    renderFoldSurfaceError,
+    aggregateFoldFingerprintForService,
+    aggregateFoldSurfaceForService,
+    FoldEvidence (..),
+    BodyEvidence (..),
+    aggregateFoldEvidenceForService,
+  )
+where
+
+import Data.Aeson qualified as Aeson
+import Data.ByteString.Lazy qualified as LazyBytes
+import Data.List (find)
+import Data.List.NonEmpty qualified as NE
+import Data.Map.Strict qualified as Map
+import Data.Set (Set)
+import Data.Set qualified as Set
+import Data.Text (Text)
+import Data.Text qualified as T
+import Data.Text.Encoding qualified as TextEncoding
+import Keiro.Codec.IdDomain (v5OrV7IdDomainVersion)
+import Keiro.Dsl.AggregateType
+import Keiro.Dsl.CanonicalEncoding (canonicalExpr, foldFingerprint128)
+import Keiro.Dsl.EventOutput
+import Keiro.Dsl.Expression
+import Keiro.Dsl.Grammar
+import Keiro.Dsl.LanguageVersion (RuntimeCapability (NominalEqualityV2), runtimeProfileHasCapability)
+import Keiro.Dsl.NominalType
+import Keiro.Dsl.SemanticContract (CheckedService, EffectiveLanguageContract (..), checkedLanguageContract, checkedSpec, checkedTypeGraph, runtimeSemanticsFingerprintSegments)
+import Keiro.Dsl.TransitionFamily (ReplayBodyKey, TransitionFamilyKey (..), replayBodyKey)
+import Keiro.Dsl.TypeGraph
+
+-- | A checked service can retain language provenance before semantic
+-- validation succeeds. Fold identity therefore reports every resolution
+-- failure instead of silently omitting or inventing canonical segments.
+data FoldSurfaceError
+  = FoldTypeGraphResolutionFailed !Text
+  | FoldNominalResolutionFailed !Text
+  | FoldRegisterTypeResolutionFailed !Name !Text
+  | FoldRegisterInitialResolutionFailed !Name !Text
+  | FoldGuardResolutionFailed !Name !Name !Text
+  | FoldWriteResolutionFailed !Name !Name !Text
+  | FoldEventOutputResolutionFailed !Name !Name !Name !Text
+  deriving stock (Eq, Show)
+
+renderFoldSurfaceError :: FoldSurfaceError -> Text
+renderFoldSurfaceError = \case
+  FoldTypeGraphResolutionFailed detail -> "aggregate fold type-graph resolution failed: " <> detail
+  FoldNominalResolutionFailed detail -> "aggregate fold nominal resolution failed: " <> detail
+  FoldRegisterTypeResolutionFailed registerName detail ->
+    "aggregate fold register '" <> registerName <> "' type resolution failed: " <> detail
+  FoldRegisterInitialResolutionFailed registerName detail ->
+    "aggregate fold register '" <> registerName <> "' initial resolution failed: " <> detail
+  FoldGuardResolutionFailed aggregateName commandName detail ->
+    "aggregate fold guard resolution failed for '" <> aggregateName <> "." <> commandName <> "': " <> detail
+  FoldWriteResolutionFailed aggregateName registerName detail -> "aggregate fold write resolution failed for " <> aggregateName <> "." <> registerName <> ": " <> detail
+  FoldEventOutputResolutionFailed aggregateName commandName eventName detail ->
+    "aggregate fold output resolution failed for '"
+      <> aggregateName
+      <> "."
+      <> commandName
+      <> "' emitting '"
+      <> eventName
+      <> "': "
+      <> detail
+
+-- | The thirty-two-hex-digit identity of an aggregate's replay fold under the
+-- service's effective runtime semantics.
+aggregateFoldFingerprintForService :: CheckedService -> Aggregate -> Either FoldSurfaceError Text
+aggregateFoldFingerprintForService service = fmap foldFingerprint128 . aggregateFoldSurfaceForService service
+
+-- | Canonical pre-hash text under a checked semantic contract. A runtime
+-- discriminator is included only for a contract that can change fold behavior;
+-- source declaration provenance and grammar-only versions never enter it.
+aggregateFoldSurfaceForService :: CheckedService -> Aggregate -> Either FoldSurfaceError Text
+aggregateFoldSurfaceForService service aggregate =
+  fmap (T.intercalate "\n" . (.canonicalSegments)) (aggregateFoldEvidenceForService service aggregate)
+
+-- | Comparison-only evidence; never serialized as persisted fold identity.
+-- Every segment is resolved against the real aggregate's own checked service.
+data FoldEvidence = FoldEvidence
+  { canonicalSegments :: ![Text],
+    aggregateSegments :: ![Text],
+    eventSegments :: !(Map.Map Name (Set Text)),
+    bodySegments :: !(Map.Map (TransitionFamilyKey, ReplayBodyKey) BodyEvidence)
+  }
+
+data BodyEvidence = BodyEvidence
+  { outputSegments :: !(Set Text),
+    ruleSegments :: !(Map.Map Name Text),
+    equalitySegments :: !(Map.Map Name (Set Text)),
+    guardEqualitySegments :: !(Map.Map Text (Set Text)),
+    emittedEvents :: !(Set Name)
+  }
+
+aggregateFoldEvidenceForService :: CheckedService -> Aggregate -> Either FoldSurfaceError FoldEvidence
+aggregateFoldEvidenceForService service aggregate = do
+  graph <- mapLeft (FoldTypeGraphResolutionFailed . showText) (checkedTypeGraph service)
+  let symbols = aggregateSymbolsFromGraph graph spec
+  nominalRegistry <- mapLeft (FoldNominalResolutionFailed . showText) (resolveNominalTypes spec)
+  registerSegments <- traverse (registerSegment symbols) ((.regs) aggregate)
+  equalityUses <- nominalEqualityUses graph service aggregate ((.transitions) aggregate)
+  transitionSegments <- traverse (transitionSegment graph spec aggregate) ((.transitions) aggregate)
+  bodies <- traverse (bodyEvidence graph) ((.transitions) aggregate)
+  let global =
+        runtimeSemanticsFingerprintSegments (checkedLanguageContract service)
+          ++ map stateSegment ((.states) aggregate)
+          ++ registerSegments
+          ++ mappedRegisterSegments graph
+      directNominals =
+        [ (eventName, segment)
+        | (eventName, useSite, typeName) <- nominalUseNames aggregate,
+          Just nominal <- [lookupNominalType typeName nominalRegistry],
+          segment <- nominalUseSegments useSite nominal
+        ]
+      nestedNominals =
+        [ (eventNameFor path, nestedNominalUseSegment path leaf)
+        | leaf <- Map.elems ((.nominalLeaves) graph),
+          path <- nominalUsePaths graph ((.name) leaf),
+          isNestedAggregateFoldUse ((.name) aggregate) path
+        ]
+      nominals = directNominals ++ nestedNominals
+  pure
+    FoldEvidence
+      { canonicalSegments =
+          global
+            ++ map snd directNominals
+            ++ map snd nestedNominals
+            ++ ["nominal-equality-use:" <> identity | identity <- Set.toAscList (Set.fromList (map snd equalityUses))]
+            ++ transitionSegments
+            ++ map ruleSegment (referencedRules ((.transitions) aggregate)),
+        aggregateSegments = global ++ [segment | (Nothing, segment) <- nominals],
+        eventSegments =
+          Map.union
+            (Map.fromListWith Set.union [(name, Set.singleton segment) | (Just name, segment) <- nominals])
+            (Map.fromList [((.name) event, Set.empty) | event <- (.events) aggregate]),
+        bodySegments = Map.fromListWith mergeBodyEvidence bodies
+      }
+  where
+    spec = checkedSpec service
+    referencedRules transitions =
+      [ rule
+      | rule <- (.rules) spec,
+        (.name) rule `Set.member` referencedRuleNames spec transitions
+      ]
+    bodyEvidence graph transition = do
+      resolvedOutputs <- transitionOutputs graph spec aggregate transition
+      let outputs =
+            [ eventName <> "=" <> case mapping of
+                HandOwnedEventOutput {} -> "hand-owned"
+                GeneratedCommandIdentity {} -> eventOutputCanonical mapping
+            | (eventName, mapping) <- resolvedOutputs
+            ]
+      equalities <- nominalEqualityUses graph service aggregate [transition]
+      guardEvidence <- case transition.guard of
+        Nothing -> Right Map.empty
+        Just syntax -> case resolveGuardExpr (expressionEnvironmentFromGraph graph spec aggregate transition) syntax of
+          Right expression -> Right (equalitySites (checkedLanguageContract service) syntax expression)
+          Left detail
+            | runtimeProfileHasCapability ((.runtimeProfile) (checkedLanguageContract service)) NominalEqualityV2 ->
+                Left (FoldGuardResolutionFailed aggregate.name transition.command (showText detail))
+            | otherwise -> Right Map.empty
+      pure
+        ( (TransitionFamilyKey transition.mode transition.source transition.command, replayBodyKey transition),
+          BodyEvidence
+            { outputSegments = Set.fromList outputs,
+              ruleSegments = Map.fromList [((.name) rule, ruleSegment rule) | rule <- referencedRules [transition]],
+              equalitySegments = Map.fromListWith Set.union [(name, Set.singleton identity) | (name, identity) <- equalities],
+              guardEqualitySegments = guardEvidence,
+              emittedEvents = Set.fromList transition.emits
+            }
+        )
+    mappedRegisterSegments graph =
+      [ mappedRegisterSegment graph declaration
+      | register <- (.regs) aggregate,
+        TRef typeName <- [(.valueType) register],
+        Just declaration <- [Map.lookup (MappedKey typeName) ((.declarations) graph)]
+      ]
+    eventNameFor path = case (.root) path of
+      RootEventField _ eventName _ -> Just eventName
+      _ -> Nothing
+
+mergeBodyEvidence :: BodyEvidence -> BodyEvidence -> BodyEvidence
+mergeBodyEvidence left right =
+  BodyEvidence
+    { outputSegments = left.outputSegments <> right.outputSegments,
+      ruleSegments = Map.union left.ruleSegments right.ruleSegments,
+      equalitySegments = Map.unionWith Set.union left.equalitySegments right.equalitySegments,
+      guardEqualitySegments = Map.unionWith Set.union left.guardEqualitySegments right.guardEqualitySegments,
+      emittedEvents = left.emittedEvents <> right.emittedEvents
+    }
+
+-- | Nested nominal leaves participate in an aggregate fold wherever persisted
+-- event payloads or snapshot registers contain their enclosing structural
+-- declaration.  The structural register's own initial binding constructs the
+-- whole value, so a nested nominal's @initial@ symbol is deliberately absent.
+isNestedAggregateFoldUse :: Name -> UsePath -> Bool
+isNestedAggregateFoldUse aggregateName UsePath {root, segments} =
+  isNested segments && case root of
+    RootEventField owner _ _ -> owner == aggregateName
+    RootRegister owner _ -> owner == aggregateName
+    RootCommandField {} -> False
+    RootWorkqueueField {} -> False
+    RootReadModelQueryInput {} -> False
+    RootReadModelQueryResult {} -> False
+    RootContractField {} -> False
+  where
+    isNested (SegDecl {} : _) = True
+    isNested _ = False
+
+nestedNominalUseSegment :: UsePath -> NominalLeaf -> Text
+nestedNominalUseSegment path leaf =
+  T.intercalate
+    "|"
+    ( [ "nested-nominal-use:" <> renderUsePath path,
+        "name=" <> (.name) leaf,
+        "representation=" <> nominalLeafRepresentationSegment ((.kind) leaf)
+      ]
+        <> ownershipSegments ((.ownership) leaf)
+    )
+  where
+    ownershipSegments GeneratedLeaf = ["owner=generated"]
+    ownershipSegments (ConsumerLeaf binding) =
+      [ "owner=consumer",
+        "canonical=" <> unCanonicalTypeId ((.canonical) binding),
+        "binding=" <> unQualifiedValueName ((.binding) binding),
+        "binding-version=" <> unBindingVersion ((.bindingVersion) binding)
+      ]
+
+nominalLeafRepresentationSegment :: NominalLeafKind -> Text
+nominalLeafRepresentationSegment = \case
+  NominalIdLeaf prefix admission -> idRepresentationSegment prefix admission
+  NominalEnumLeaf constructors ->
+    "enum:" <> T.intercalate "," [constructor <> "=" <> wire | (constructor, wire) <- NE.toList constructors]
+  NominalScalarLeaf representation -> case representation of
+    NominalText -> "Text"
+    NominalInt -> "Int"
+    NominalNatural -> "Natural"
+    NominalBool -> "Bool"
+    NominalTime -> "Time"
+
+-- | Equality representation belongs in the fold identity only when a guard
+-- actually compares that declaration. This keeps unrelated binding metadata out
+-- of replay compatibility while ensuring a witness/domain change cannot silently
+-- retain the old fold fingerprint.
+nominalEqualityUses :: TypeGraph -> CheckedService -> Aggregate -> [Transition] -> Either FoldSurfaceError [(Name, Text)]
+nominalEqualityUses graph service aggregate transitions =
+  if runtimeProfileHasCapability ((.runtimeProfile) (checkedLanguageContract service)) NominalEqualityV2
+    then fmap concat (traverse transitionIdentities transitions)
+    else
+      Right
+        [ identity
+        | transition <- transitions,
+          guardSyntax <- maybeToList ((.guard) transition),
+          Right guardExpression <- [resolveGuardExpr (expressionEnvironmentFromGraph graph spec aggregate transition) guardSyntax],
+          identity <- equalityIdentities (checkedLanguageContract service) guardExpression
+        ]
+  where
+    spec = checkedSpec service
+    transitionIdentities transition = case (.guard) transition of
+      Nothing -> Right []
+      Just guardSyntax -> do
+        guardExpression <-
+          mapLeft
+            (FoldGuardResolutionFailed ((.name) aggregate) ((.command) transition) . showText)
+            (resolveGuardExpr (expressionEnvironmentFromGraph graph spec aggregate transition) guardSyntax)
+        pure (equalityIdentities (checkedLanguageContract service) guardExpression)
+
+equalityIdentities :: EffectiveLanguageContract -> TypedScalarExpr -> [(Name, Text)]
+equalityIdentities languageContract expression =
+  current <> children
+  where
+    current = case (.node) expression of
+      TypedEqual left _ -> equalityIdentity left
+      TypedNotEqual left _ -> equalityIdentity left
+      _ -> []
+    equalityIdentity operand = case (.valueType) operand of
+      AggregateNominal nominal -> [((.name) nominal, identity) | identity <- maybeToList (nominalEqualityIdentityForService languageContract nominal)]
+      _ -> []
+    children = case (.node) expression of
+      TypedMappedLift _ _ child -> equalityIdentities languageContract child
+      TypedMappedInitial {} -> []
+      TypedLiteral {} -> []
+      TypedRoot {} -> []
+      TypedProject {} -> []
+      TypedAdd _ left right -> recurse left right
+      TypedSubtract _ left right -> recurse left right
+      TypedMultiply _ left right -> recurse left right
+      TypedEqual left right -> recurse left right
+      TypedNotEqual left right -> recurse left right
+      TypedCompare _ left right -> recurse left right
+      TypedAnd left right -> recurse left right
+      TypedOr left right -> recurse left right
+    recurse left right = equalityIdentities languageContract left <> equalityIdentities languageContract right
+
+-- Compare retained equality expressions even when a surrounding guard is
+-- loosened or split. Empty evidence matters: a nominal-to-primitive edit must
+-- not disappear just because the new expression no longer uses a nominal.
+equalitySites :: EffectiveLanguageContract -> Expr -> TypedScalarExpr -> Map.Map Text (Set Text)
+equalitySites contract syntax expression =
+  Map.unionsWith Set.union (current : zipWith (equalitySites contract) syntaxChildren typedChildren)
+  where
+    current = case expression.node of
+      TypedEqual {} -> site
+      TypedNotEqual {} -> site
+      _ -> Map.empty
+    site = Map.singleton (canonicalExpr syntax) (Set.fromList (map snd (equalityIdentities contract expression)))
+    syntaxChildren = case syntax of
+      EWriteMapped _ child -> [child]
+      EOr left right -> [left, right]
+      EAnd left right -> [left, right]
+      ECmp _ left right -> [left, right]
+      EAdd _ left right -> [left, right]
+      ESubtract _ left right -> [left, right]
+      EMultiply _ left right -> [left, right]
+      _ -> []
+    typedChildren = case expression.node of
+      TypedMappedLift _ _ child -> [child]
+      TypedOr left right -> [left, right]
+      TypedAnd left right -> [left, right]
+      TypedEqual left right -> [left, right]
+      TypedNotEqual left right -> [left, right]
+      TypedCompare _ left right -> [left, right]
+      TypedAdd _ left right -> [left, right]
+      TypedSubtract _ left right -> [left, right]
+      TypedMultiply _ left right -> [left, right]
+      _ -> []
+
+nominalUseNames :: Aggregate -> [(Maybe Name, Text, Name)]
+nominalUseNames aggregate =
+  [ (Nothing, "register:" <> (.name) register, typeName)
+  | register <- (.regs) aggregate,
+    TRef typeName <- [(.valueType) register]
+  ]
+    <> [ (Just ((.name) event), "event:" <> (.name) event <> "." <> (.name) field, typeName)
+       | event <- (.events) aggregate,
+         field <- eventFields event,
+         TRef typeName <- maybe [] pure ((.valueType) field)
+       ]
+  where
+    eventFields event = case (.body) event of
+      EventFields fields -> fields
+      EventFromCommand commandName -> concat [(.fields) command | command <- (.commands) aggregate, (.name) command == commandName]
+
+nominalUseSegment :: Text -> ResolvedNominalType -> ConsumerNominalBinding -> Text
+nominalUseSegment useSite nominal binding =
+  T.intercalate
+    "|"
+    [ "nominal-use:" <> useSite,
+      "name=" <> (.name) nominal,
+      "representation=" <> nominalRepresentationSegment ((.representation) nominal),
+      "canonical=" <> unCanonicalTypeId ((.canonical) binding),
+      "binding=" <> unQualifiedValueName ((.binding) binding),
+      "binding-version=" <> unBindingVersion ((.bindingVersion) binding),
+      "initial=" <> maybe "(none)" unQualifiedValueName ((.initial) binding)
+    ]
+
+-- Released generated IDs contributed no direct-use segment. Preserve that
+-- exact surface for implicit v7 while making the candidate wider domain visible
+-- on direct registers and event fields. Consumer-owned nominal segments already
+-- existed and now carry the selected domain through their representation.
+nominalUseSegments :: Text -> ResolvedNominalType -> [Text]
+nominalUseSegments useSite nominal = case (.ownership) nominal of
+  ConsumerNominal binding -> [nominalUseSegment useSite nominal binding]
+  GeneratedNominal -> case (.representation) nominal of
+    IdRepresentation _ TypeIdV5OrV7 ->
+      [ T.intercalate
+          "|"
+          [ "nominal-use:" <> useSite,
+            "name=" <> (.name) nominal,
+            "representation=" <> nominalRepresentationSegment ((.representation) nominal),
+            "owner=generated"
+          ]
+      ]
+    _ -> []
+
+nominalRepresentationSegment :: NominalRepresentation -> Text
+nominalRepresentationSegment representation = case representation of
+  IdRepresentation prefix admission -> idRepresentationSegment prefix admission
+  EnumRepresentation constructors -> "enum:" <> T.intercalate "," [constructor <> "=" <> wire | (constructor, wire) <- NE.toList constructors]
+  ScalarRepresentation scalar -> case scalar of
+    NominalText -> "Text"
+    NominalInt -> "Int"
+    NominalNatural -> "Natural"
+    NominalBool -> "Bool"
+    NominalTime -> "Time"
+
+idRepresentationSegment :: Text -> IdAdmission -> Text
+idRepresentationSegment prefix TypeIdV7 = "id:" <> prefix
+idRepresentationSegment prefix TypeIdV5OrV7 = "id:" <> prefix <> ";domain=" <> v5OrV7IdDomainVersion
+
+mappedRegisterSegment :: TypeGraph -> ResolvedMappedDecl -> Text
+mappedRegisterSegment graph (ResolvedStructural declaration _) =
+  T.intercalate
+    "|"
+    [ "mapped-register:" <> (.name) declaration,
+      "wire=" <> wireFingerprint graph ((.name) declaration),
+      "canonical=" <> unCanonicalTypeId ((.canonical) declaration),
+      "binding=" <> unQualifiedValueName ((.binding) declaration),
+      "binding-version=" <> unBindingVersion ((.bindingVersion) declaration),
+      "initial=" <> maybe "(missing)" unQualifiedValueName ((.initial) declaration)
+    ]
+mappedRegisterSegment _ (ResolvedOpaque declaration) =
+  T.intercalate
+    "|"
+    [ "mapped-register:" <> (.name) declaration,
+      "codec=" <> unCodecIdentity ((.codecIdentity) declaration),
+      "codec-version=" <> unCodecVersion ((.codecVersion) declaration),
+      "initial=" <> maybe "(missing)" unQualifiedValueName ((.initial) declaration)
+    ]
+
+stateSegment :: StateDecl -> Text
+stateSegment state =
+  "state:"
+    <> (.name) state
+    <> "|terminal="
+    <> if (.terminal) state then "true" else "false"
+
+registerSegment :: AggregateSymbols -> RegDecl -> Either FoldSurfaceError Text
+registerSegment symbols register = do
+  resolvedType <-
+    mapLeft
+      (FoldRegisterTypeResolutionFailed ((.name) register) . showText)
+      (resolveAggregateType symbols ((.loc) register) RegisterUse ((.valueType) register))
+  resolvedInitial <-
+    mapLeft
+      (FoldRegisterInitialResolutionFailed ((.name) register) . showText)
+      (resolveRegisterInitial symbols ((.loc) register) resolvedType ((.initial) register))
+  pure
+    ( "reg:"
+        <> (.name) register
+        <> ":"
+        <> typeExprCanonicalName ((.valueType) register)
+        <> "="
+        <> registerInitialCanonicalName resolvedInitial
+    )
+
+transitionSegment :: TypeGraph -> Spec -> Aggregate -> Transition -> Either FoldSurfaceError Text
+transitionSegment graph spec aggregate transition = do
+  outputOwnershipSegment <- transitionOutputSegments graph spec aggregate transition
+  resolvedWrites <-
+    traverse
+      ( \(register, expression) ->
+          fmap
+            (register,)
+            ( mapLeft
+                (FoldWriteResolutionFailed aggregate.name register . showText)
+                (resolveWriteExpr (expressionEnvironmentFromGraph graph spec aggregate transition) register expression)
+            )
+      )
+      [(register, expression) | (register, expression) <- transition.writes, case expression of EWriteInitial {} -> True; EWriteMapped {} -> True; _ -> False]
+  let lifts =
+        [ [register, name, liftSourceName lift.source, unQualifiedValueName lift.function, unLiftVersion lift.version]
+        | (register, TypedScalarExpr {node = TypedMappedLift name lift _}) <- resolvedWrites
+        ]
+      liftSegment = ["mapped-write-lifts=" <> TextEncoding.decodeUtf8 (LazyBytes.toStrict (Aeson.encode lifts)) | not (null lifts)]
+  pure
+    ( T.intercalate
+        "|"
+        ( [ "transition:" <> renderMode ((.mode) transition),
+            (.source) transition,
+            (.command) transition
+          ]
+            ++ implementationSegment
+            ++ [ "guard=" <> maybe "" canonicalExpr ((.guard) transition),
+                 "writes=" <> T.intercalate ";" (map renderWrite ((.writes) transition)),
+                 "emits=" <> T.intercalate "," ((.emits) transition)
+               ]
+            ++ outputOwnershipSegment
+            ++ ["goto=" <> (.goto) transition]
+            ++ liftSegment
+        )
+    )
+  where
+    renderWrite (registerName, expression) = registerName <> ":=" <> canonicalExpr expression
+    implementationSegment = case (.implementation) transition of
+      LegacyHoleImplementation -> []
+      GeneratedImplementation -> ["implementation=generated"]
+      HoleImplementation -> ["implementation=hole"]
+
+-- Shared by the frozen renderer and comparison evidence. No second output resolver.
+transitionOutputSegments :: TypeGraph -> Spec -> Aggregate -> Transition -> Either FoldSurfaceError [Text]
+transitionOutputSegments graph spec aggregate transition = case (.implementation) transition of
+  LegacyHoleImplementation -> Right []
+  GeneratedImplementation -> renderOutputs
+  HoleImplementation -> renderOutputs
+  where
+    renderOutputs = fmap (pure . ("outputs=" <>) . T.intercalate "," . map (\(name, mapping) -> name <> "=" <> eventOutputCanonical mapping)) (transitionOutputs graph spec aggregate transition)
+
+-- Resolve against local declarations. The persisted renderer retains the
+-- complete obligation key. Comparison uses ownership without its guard-derived
+-- provenance: guard coverage is already compared by the replay-body analysis.
+transitionOutputs :: TypeGraph -> Spec -> Aggregate -> Transition -> Either FoldSurfaceError [(Name, EventOutputMapping)]
+transitionOutputs graph spec aggregate transition = case transition.implementation of
+  LegacyHoleImplementation -> Right []
+  _ -> traverse (uncurry output) (zip [1 ..] transition.emits)
+  where
+    output emitIndex eventName = do
+      mapping <-
+        mapLeft
+          (FoldEventOutputResolutionFailed ((.name) aggregate) ((.command) transition) eventName . showText)
+          (eventOutputMappingFromGraph graph spec aggregate transition emitIndex eventName)
+      pure (eventName, mapping)
+
+renderMode :: TransitionMode -> Text
+renderMode TmLive = "live"
+renderMode TmReplayOnly = "replay-only"
+
+ruleSegment :: RuleDecl -> Text
+ruleSegment rule =
+  T.intercalate
+    "|"
+    [ "rule:" <> (.name) rule,
+      (.domain) rule,
+      (.codomain) rule,
+      "cases=" <> T.intercalate ";" (map renderCase ((.cases) rule))
+    ]
+  where
+    renderCase (constructorName, expression) = constructorName <> "=>" <> canonicalExpr expression
+
+referencedRuleNames :: Spec -> [Transition] -> Set Name
+referencedRuleNames spec transitions = close directNames
+  where
+    rules = (.rules) spec
+    directNames =
+      Set.unions
+        [ exprNames expression
+        | transition <- transitions,
+          expression <- maybeToList ((.guard) transition) ++ map snd ((.writes) transition)
+        ]
+    close names =
+      let expanded =
+            Set.unions
+              ( names
+                  : [ Set.unions (map (exprNames . snd) ((.cases) rule))
+                    | name <- Set.toList names,
+                      Just rule <- [find ((== name) . (.name)) rules]
+                    ]
+              )
+       in if expanded == names then names else close expanded
+
+exprNames :: Expr -> Set Name
+exprNames = \case
+  EOr left right -> exprNames left <> exprNames right
+  EAnd left right -> exprNames left <> exprNames right
+  ECmp _ left right -> exprNames left <> exprNames right
+  EAdd _ left right -> exprNames left <> exprNames right
+  ESubtract _ left right -> exprNames left <> exprNames right
+  EMultiply _ left right -> exprNames left <> exprNames right
+  EPath _ _ (name : _) -> Set.singleton name
+  EPath _ _ [] -> Set.empty
+  EWriteMapped _ child -> exprNames child
+  EWriteInitial {} -> Set.empty
+  ELiteral {} -> Set.empty
+  EAtom (AName name) -> Set.singleton name
+  EAtom (ABool _) -> Set.empty
+
+maybeToList :: Maybe a -> [a]
+maybeToList Nothing = []
+maybeToList (Just value) = [value]
+
+mapLeft :: (errorValue -> otherError) -> Either errorValue value -> Either otherError value
+mapLeft convert = either (Left . convert) Right
+
+showText :: (Show value) => value -> Text
+showText = T.pack . show
diff --git a/src/Keiro/Dsl/FoldFingerprint.hs b/src/Keiro/Dsl/FoldFingerprint.hs
--- a/src/Keiro/Dsl/FoldFingerprint.hs
+++ b/src/Keiro/Dsl/FoldFingerprint.hs
@@ -1,7 +1,6 @@
--- | Canonical identities for the aggregate fold surface used while hydrating
--- event streams. The fingerprint deliberately excludes payload codecs,
--- projections, snapshot policy, and source locations: those inputs do not change
--- how an existing event log becomes aggregate state.
+{-# OPTIONS_GHC -Werror=incomplete-patterns #-}
+
+-- | Public frozen fold identity API. Comparison evidence remains private.
 module Keiro.Dsl.FoldFingerprint
   ( FoldSurfaceError (..),
     renderFoldSurfaceError,
@@ -10,417 +9,4 @@
   )
 where
 
-import Data.List (find)
-import Data.List.NonEmpty qualified as NE
-import Data.Map.Strict qualified as Map
-import Data.Set (Set)
-import Data.Set qualified as Set
-import Data.Text (Text)
-import Data.Text qualified as T
-import Keiro.Codec.IdDomain (v5OrV7IdDomainVersion)
-import Keiro.Dsl.AggregateType
-import Keiro.Dsl.CanonicalEncoding (canonicalExpr, foldFingerprint128)
-import Keiro.Dsl.EventOutput
-import Keiro.Dsl.Expression
-import Keiro.Dsl.Grammar
-import Keiro.Dsl.LanguageVersion (RuntimeCapability (NominalEqualityV2), runtimeProfileHasCapability)
-import Keiro.Dsl.NominalType
-import Keiro.Dsl.SemanticContract (CheckedService, EffectiveLanguageContract (..), checkedLanguageContract, checkedSpec, checkedTypeGraph, runtimeSemanticsFingerprintSegments)
-import Keiro.Dsl.TypeGraph
-
--- | A checked service can retain language provenance before semantic
--- validation succeeds. Fold identity therefore reports every resolution
--- failure instead of silently omitting or inventing canonical segments.
-data FoldSurfaceError
-  = FoldTypeGraphResolutionFailed !Text
-  | FoldNominalResolutionFailed !Text
-  | FoldRegisterTypeResolutionFailed !Name !Text
-  | FoldRegisterInitialResolutionFailed !Name !Text
-  | FoldGuardResolutionFailed !Name !Name !Text
-  | FoldEventOutputResolutionFailed !Name !Name !Name !Text
-  deriving stock (Eq, Show)
-
-renderFoldSurfaceError :: FoldSurfaceError -> Text
-renderFoldSurfaceError = \case
-  FoldTypeGraphResolutionFailed detail -> "aggregate fold type-graph resolution failed: " <> detail
-  FoldNominalResolutionFailed detail -> "aggregate fold nominal resolution failed: " <> detail
-  FoldRegisterTypeResolutionFailed registerName detail ->
-    "aggregate fold register '" <> registerName <> "' type resolution failed: " <> detail
-  FoldRegisterInitialResolutionFailed registerName detail ->
-    "aggregate fold register '" <> registerName <> "' initial resolution failed: " <> detail
-  FoldGuardResolutionFailed aggregateName commandName detail ->
-    "aggregate fold guard resolution failed for '" <> aggregateName <> "." <> commandName <> "': " <> detail
-  FoldEventOutputResolutionFailed aggregateName commandName eventName detail ->
-    "aggregate fold output resolution failed for '"
-      <> aggregateName
-      <> "."
-      <> commandName
-      <> "' emitting '"
-      <> eventName
-      <> "': "
-      <> detail
-
--- | The thirty-two-hex-digit identity of an aggregate's replay fold under the
--- service's effective runtime semantics.
-aggregateFoldFingerprintForService :: CheckedService -> Aggregate -> Either FoldSurfaceError Text
-aggregateFoldFingerprintForService service = fmap foldFingerprint128 . aggregateFoldSurfaceForService service
-
--- | Canonical pre-hash text under a checked semantic contract. A runtime
--- discriminator is included only for a contract that can change fold behavior;
--- source declaration provenance and grammar-only versions never enter it.
-aggregateFoldSurfaceForService :: CheckedService -> Aggregate -> Either FoldSurfaceError Text
-aggregateFoldSurfaceForService service aggregate = do
-  graph <- mapLeft (FoldTypeGraphResolutionFailed . showText) (checkedTypeGraph service)
-  let symbols = aggregateSymbolsFromGraph graph spec
-  nominalRegistry <- mapLeft (FoldNominalResolutionFailed . showText) (resolveNominalTypes spec)
-  registerSegments <- traverse (registerSegment symbols) ((.regs) aggregate)
-  equalityUses <- nominalEqualityUses graph service aggregate
-  transitionSegments <- traverse (transitionSegment graph spec aggregate) ((.transitions) aggregate)
-  pure
-    ( T.intercalate
-        "\n"
-        ( runtimeSemanticsFingerprintSegments (checkedLanguageContract service)
-            ++ map stateSegment ((.states) aggregate)
-            ++ registerSegments
-            ++ mappedRegisterSegments graph
-            ++ nominalSegments nominalRegistry
-            ++ nestedNominalSegments graph
-            ++ ["nominal-equality-use:" <> identity | identity <- Set.toAscList equalityUses]
-            ++ transitionSegments
-            ++ map ruleSegment referencedRules
-        )
-    )
-  where
-    spec = checkedSpec service
-    referencedRules =
-      [ rule
-      | rule <- (.rules) spec,
-        (.name) rule `Set.member` referencedRuleNames spec aggregate
-      ]
-    mappedRegisterSegments graph =
-      [ mappedRegisterSegment graph declaration
-      | register <- (.regs) aggregate,
-        TRef typeName <- [(.valueType) register],
-        Just declaration <- [Map.lookup (MappedKey typeName) ((.declarations) graph)]
-      ]
-    nominalSegments registry =
-      [ segment
-      | (useSite, typeName) <- nominalUseNames aggregate,
-        Just nominal <- [lookupNominalType typeName registry],
-        segment <- nominalUseSegments useSite nominal
-      ]
-    nestedNominalSegments graph =
-      [ nestedNominalUseSegment path leaf
-      | leaf <- Map.elems ((.nominalLeaves) graph),
-        path <- nominalUsePaths graph ((.name) leaf),
-        isNestedAggregateFoldUse ((.name) aggregate) path
-      ]
-
--- | Nested nominal leaves participate in an aggregate fold wherever persisted
--- event payloads or snapshot registers contain their enclosing structural
--- declaration.  The structural register's own initial binding constructs the
--- whole value, so a nested nominal's @initial@ symbol is deliberately absent.
-isNestedAggregateFoldUse :: Name -> UsePath -> Bool
-isNestedAggregateFoldUse aggregateName UsePath {root, segments} =
-  isNested segments && case root of
-    RootEventField owner _ _ -> owner == aggregateName
-    RootRegister owner _ -> owner == aggregateName
-    RootCommandField {} -> False
-    RootWorkqueueField {} -> False
-    RootReadModelQueryInput {} -> False
-    RootReadModelQueryResult {} -> False
-    RootContractField {} -> False
-  where
-    isNested (SegDecl {} : _) = True
-    isNested _ = False
-
-nestedNominalUseSegment :: UsePath -> NominalLeaf -> Text
-nestedNominalUseSegment path leaf =
-  T.intercalate
-    "|"
-    ( [ "nested-nominal-use:" <> renderUsePath path,
-        "name=" <> (.name) leaf,
-        "representation=" <> nominalLeafRepresentationSegment ((.kind) leaf)
-      ]
-        <> ownershipSegments ((.ownership) leaf)
-    )
-  where
-    ownershipSegments GeneratedLeaf = ["owner=generated"]
-    ownershipSegments (ConsumerLeaf binding) =
-      [ "owner=consumer",
-        "canonical=" <> unCanonicalTypeId ((.canonical) binding),
-        "binding=" <> unQualifiedValueName ((.binding) binding),
-        "binding-version=" <> unBindingVersion ((.bindingVersion) binding)
-      ]
-
-nominalLeafRepresentationSegment :: NominalLeafKind -> Text
-nominalLeafRepresentationSegment = \case
-  NominalIdLeaf prefix admission -> idRepresentationSegment prefix admission
-  NominalEnumLeaf constructors ->
-    "enum:" <> T.intercalate "," [constructor <> "=" <> wire | (constructor, wire) <- NE.toList constructors]
-  NominalScalarLeaf representation -> case representation of
-    NominalText -> "Text"
-    NominalInt -> "Int"
-    NominalNatural -> "Natural"
-    NominalBool -> "Bool"
-    NominalTime -> "Time"
-
--- | Equality representation belongs in the fold identity only when a guard
--- actually compares that declaration. This keeps unrelated binding metadata out
--- of replay compatibility while ensuring a witness/domain change cannot silently
--- retain the old fold fingerprint.
-nominalEqualityUses :: TypeGraph -> CheckedService -> Aggregate -> Either FoldSurfaceError (Set Text)
-nominalEqualityUses graph service aggregate =
-  if runtimeProfileHasCapability ((.runtimeProfile) (checkedLanguageContract service)) NominalEqualityV2
-    then fmap (Set.fromList . concat) (traverse transitionIdentities ((.transitions) aggregate))
-    else
-      Right
-        ( Set.fromList
-            [ identity
-            | transition <- (.transitions) aggregate,
-              guardSyntax <- maybeToList ((.guard) transition),
-              Right guardExpression <- [resolveGuardExpr (expressionEnvironmentFromGraph graph spec aggregate transition) guardSyntax],
-              identity <- equalityIdentities (checkedLanguageContract service) guardExpression
-            ]
-        )
-  where
-    spec = checkedSpec service
-    transitionIdentities transition = case (.guard) transition of
-      Nothing -> Right []
-      Just guardSyntax -> do
-        guardExpression <-
-          mapLeft
-            (FoldGuardResolutionFailed ((.name) aggregate) ((.command) transition) . showText)
-            (resolveGuardExpr (expressionEnvironmentFromGraph graph spec aggregate transition) guardSyntax)
-        pure (equalityIdentities (checkedLanguageContract service) guardExpression)
-
-equalityIdentities :: EffectiveLanguageContract -> TypedScalarExpr -> [Text]
-equalityIdentities languageContract expression =
-  current <> children
-  where
-    current = case (.node) expression of
-      TypedEqual left _ -> equalityIdentity left
-      TypedNotEqual left _ -> equalityIdentity left
-      _ -> []
-    equalityIdentity operand = case (.valueType) operand of
-      AggregateNominal nominal -> maybeToList (nominalEqualityIdentityForService languageContract nominal)
-      _ -> []
-    children = case (.node) expression of
-      TypedLiteral {} -> []
-      TypedRoot {} -> []
-      TypedProject {} -> []
-      TypedAdd _ left right -> recurse left right
-      TypedSubtract _ left right -> recurse left right
-      TypedMultiply _ left right -> recurse left right
-      TypedEqual left right -> recurse left right
-      TypedNotEqual left right -> recurse left right
-      TypedCompare _ left right -> recurse left right
-      TypedAnd left right -> recurse left right
-      TypedOr left right -> recurse left right
-    recurse left right = equalityIdentities languageContract left <> equalityIdentities languageContract right
-
-nominalUseNames :: Aggregate -> [(Text, Name)]
-nominalUseNames aggregate =
-  [ ("register:" <> (.name) register, typeName)
-  | register <- (.regs) aggregate,
-    TRef typeName <- [(.valueType) register]
-  ]
-    <> [ ("event:" <> (.name) event <> "." <> (.name) field, typeName)
-       | event <- (.events) aggregate,
-         field <- eventFields event,
-         TRef typeName <- maybe [] pure ((.valueType) field)
-       ]
-  where
-    eventFields event = case (.body) event of
-      EventFields fields -> fields
-      EventFromCommand commandName -> concat [(.fields) command | command <- (.commands) aggregate, (.name) command == commandName]
-
-nominalUseSegment :: Text -> ResolvedNominalType -> ConsumerNominalBinding -> Text
-nominalUseSegment useSite nominal binding =
-  T.intercalate
-    "|"
-    [ "nominal-use:" <> useSite,
-      "name=" <> (.name) nominal,
-      "representation=" <> nominalRepresentationSegment ((.representation) nominal),
-      "canonical=" <> unCanonicalTypeId ((.canonical) binding),
-      "binding=" <> unQualifiedValueName ((.binding) binding),
-      "binding-version=" <> unBindingVersion ((.bindingVersion) binding),
-      "initial=" <> maybe "(none)" unQualifiedValueName ((.initial) binding)
-    ]
-
--- Released generated IDs contributed no direct-use segment. Preserve that
--- exact surface for implicit v7 while making the candidate wider domain visible
--- on direct registers and event fields. Consumer-owned nominal segments already
--- existed and now carry the selected domain through their representation.
-nominalUseSegments :: Text -> ResolvedNominalType -> [Text]
-nominalUseSegments useSite nominal = case (.ownership) nominal of
-  ConsumerNominal binding -> [nominalUseSegment useSite nominal binding]
-  GeneratedNominal -> case (.representation) nominal of
-    IdRepresentation _ TypeIdV5OrV7 ->
-      [ T.intercalate
-          "|"
-          [ "nominal-use:" <> useSite,
-            "name=" <> (.name) nominal,
-            "representation=" <> nominalRepresentationSegment ((.representation) nominal),
-            "owner=generated"
-          ]
-      ]
-    _ -> []
-
-nominalRepresentationSegment :: NominalRepresentation -> Text
-nominalRepresentationSegment representation = case representation of
-  IdRepresentation prefix admission -> idRepresentationSegment prefix admission
-  EnumRepresentation constructors -> "enum:" <> T.intercalate "," [constructor <> "=" <> wire | (constructor, wire) <- NE.toList constructors]
-  ScalarRepresentation scalar -> case scalar of
-    NominalText -> "Text"
-    NominalInt -> "Int"
-    NominalNatural -> "Natural"
-    NominalBool -> "Bool"
-    NominalTime -> "Time"
-
-idRepresentationSegment :: Text -> IdAdmission -> Text
-idRepresentationSegment prefix TypeIdV7 = "id:" <> prefix
-idRepresentationSegment prefix TypeIdV5OrV7 = "id:" <> prefix <> ";domain=" <> v5OrV7IdDomainVersion
-
-mappedRegisterSegment :: TypeGraph -> ResolvedMappedDecl -> Text
-mappedRegisterSegment graph (ResolvedStructural declaration _) =
-  T.intercalate
-    "|"
-    [ "mapped-register:" <> (.name) declaration,
-      "wire=" <> wireFingerprint graph ((.name) declaration),
-      "canonical=" <> unCanonicalTypeId ((.canonical) declaration),
-      "binding=" <> unQualifiedValueName ((.binding) declaration),
-      "binding-version=" <> unBindingVersion ((.bindingVersion) declaration),
-      "initial=" <> maybe "(missing)" unQualifiedValueName ((.initial) declaration)
-    ]
-mappedRegisterSegment _ (ResolvedOpaque declaration) =
-  T.intercalate
-    "|"
-    [ "mapped-register:" <> (.name) declaration,
-      "codec=" <> unCodecIdentity ((.codecIdentity) declaration),
-      "codec-version=" <> unCodecVersion ((.codecVersion) declaration),
-      "initial=" <> maybe "(missing)" unQualifiedValueName ((.initial) declaration)
-    ]
-
-stateSegment :: StateDecl -> Text
-stateSegment state =
-  "state:"
-    <> (.name) state
-    <> "|terminal="
-    <> if (.terminal) state then "true" else "false"
-
-registerSegment :: AggregateSymbols -> RegDecl -> Either FoldSurfaceError Text
-registerSegment symbols register = do
-  resolvedType <-
-    mapLeft
-      (FoldRegisterTypeResolutionFailed ((.name) register) . showText)
-      (resolveAggregateType symbols ((.loc) register) RegisterUse ((.valueType) register))
-  resolvedInitial <-
-    mapLeft
-      (FoldRegisterInitialResolutionFailed ((.name) register) . showText)
-      (resolveRegisterInitial symbols ((.loc) register) resolvedType ((.initial) register))
-  pure
-    ( "reg:"
-        <> (.name) register
-        <> ":"
-        <> typeExprCanonicalName ((.valueType) register)
-        <> "="
-        <> registerInitialCanonicalName resolvedInitial
-    )
-
-transitionSegment :: TypeGraph -> Spec -> Aggregate -> Transition -> Either FoldSurfaceError Text
-transitionSegment graph spec aggregate transition = do
-  outputOwnershipSegment <- case (.implementation) transition of
-    LegacyHoleImplementation -> Right []
-    GeneratedImplementation -> fmap (pure . ("outputs=" <>) . T.intercalate ",") outputSegments
-    HoleImplementation -> fmap (pure . ("outputs=" <>) . T.intercalate ",") outputSegments
-  pure
-    ( T.intercalate
-        "|"
-        ( [ "transition:" <> renderMode ((.mode) transition),
-            (.source) transition,
-            (.command) transition
-          ]
-            ++ implementationSegment
-            ++ [ "guard=" <> maybe "" canonicalExpr ((.guard) transition),
-                 "writes=" <> T.intercalate ";" (map renderWrite ((.writes) transition)),
-                 "emits=" <> T.intercalate "," ((.emits) transition)
-               ]
-            ++ outputOwnershipSegment
-            ++ ["goto=" <> (.goto) transition]
-        )
-    )
-  where
-    renderWrite (registerName, expression) = registerName <> ":=" <> canonicalExpr expression
-    outputSegments = traverse (uncurry outputSegment) (zip [1 ..] ((.emits) transition))
-    outputSegment emitIndex eventName = do
-      mapping <-
-        mapLeft
-          (FoldEventOutputResolutionFailed ((.name) aggregate) ((.command) transition) eventName . showText)
-          (eventOutputMappingFromGraph graph spec aggregate transition emitIndex eventName)
-      pure (eventName <> "=" <> eventOutputCanonical mapping)
-    implementationSegment = case (.implementation) transition of
-      LegacyHoleImplementation -> []
-      GeneratedImplementation -> ["implementation=generated"]
-      HoleImplementation -> ["implementation=hole"]
-
-renderMode :: TransitionMode -> Text
-renderMode TmLive = "live"
-renderMode TmReplayOnly = "replay-only"
-
-ruleSegment :: RuleDecl -> Text
-ruleSegment rule =
-  T.intercalate
-    "|"
-    [ "rule:" <> (.name) rule,
-      (.domain) rule,
-      (.codomain) rule,
-      "cases=" <> T.intercalate ";" (map renderCase ((.cases) rule))
-    ]
-  where
-    renderCase (constructorName, expression) = constructorName <> "=>" <> canonicalExpr expression
-
-referencedRuleNames :: Spec -> Aggregate -> Set Name
-referencedRuleNames spec aggregate = close directNames
-  where
-    rules = (.rules) spec
-    directNames =
-      Set.unions
-        [ exprNames expression
-        | transition <- (.transitions) aggregate,
-          expression <- maybeToList ((.guard) transition) ++ map snd ((.writes) transition)
-        ]
-    close names =
-      let expanded =
-            Set.unions
-              ( names
-                  : [ Set.unions (map (exprNames . snd) ((.cases) rule))
-                    | name <- Set.toList names,
-                      Just rule <- [find ((== name) . (.name)) rules]
-                    ]
-              )
-       in if expanded == names then names else close expanded
-
-exprNames :: Expr -> Set Name
-exprNames = \case
-  EOr left right -> exprNames left <> exprNames right
-  EAnd left right -> exprNames left <> exprNames right
-  ECmp _ left right -> exprNames left <> exprNames right
-  EAdd _ left right -> exprNames left <> exprNames right
-  ESubtract _ left right -> exprNames left <> exprNames right
-  EMultiply _ left right -> exprNames left <> exprNames right
-  EPath _ _ (name : _) -> Set.singleton name
-  EPath _ _ [] -> Set.empty
-  ELiteral {} -> Set.empty
-  EAtom (AName name) -> Set.singleton name
-  EAtom (ABool _) -> Set.empty
-
-maybeToList :: Maybe a -> [a]
-maybeToList Nothing = []
-maybeToList (Just value) = [value]
-
-mapLeft :: (errorValue -> otherError) -> Either errorValue value -> Either otherError value
-mapLeft convert = either (Left . convert) Right
-
-showText :: (Show value) => value -> Text
-showText = T.pack . show
+import Keiro.Dsl.FoldEvidence
diff --git a/src/Keiro/Dsl/Frontend/Internal.hs b/src/Keiro/Dsl/Frontend/Internal.hs
--- a/src/Keiro/Dsl/Frontend/Internal.hs
+++ b/src/Keiro/Dsl/Frontend/Internal.hs
@@ -272,12 +272,12 @@
   NominalScalarDecl {name, representation, binding, loc}
 
 setMappedLoc :: Loc -> MappedDecl -> MappedDecl
-setMappedLoc loc (MappedStructural name haskell binding bindingVersion canonical fixtures initial shape _) =
-  MappedStructural name haskell binding bindingVersion canonical fixtures initial shape loc
+setMappedLoc loc (MappedStructural name haskell binding bindingVersion canonical fixtures initial writeLift shape _) =
+  MappedStructural name haskell binding bindingVersion canonical fixtures initial writeLift shape loc
 setMappedLoc loc (MappedRefined name haskell binding bindingVersion canonical fixtures initial policy _) =
   MappedRefined name haskell binding bindingVersion canonical fixtures initial policy loc
-setMappedLoc loc (MappedOpaque name haskell codecId codecVersion fixtures initial _) =
-  MappedOpaque name haskell codecId codecVersion fixtures initial loc
+setMappedLoc loc (MappedOpaque name haskell codecId codecVersion fixtures initial writeLift _) =
+  MappedOpaque name haskell codecId codecVersion fixtures initial writeLift loc
 
 setNodeLoc :: Loc -> Node -> Node
 setNodeLoc loc = \case
diff --git a/src/Keiro/Dsl/Grammar.hs b/src/Keiro/Dsl/Grammar.hs
--- a/src/Keiro/Dsl/Grammar.hs
+++ b/src/Keiro/Dsl/Grammar.hs
@@ -32,6 +32,7 @@
     NominalBindingDecl (..),
     NominalScalarDecl (..),
     MappedDecl (..),
+    MappedWriteLiftDecl (..),
 
     -- * Shared mapping type
     Mapping (..),
@@ -110,7 +111,10 @@
     RouterNode (..),
 
     -- * The integration contract node (EP-4)
+    ContractScalarType (..),
     ContractType (..),
+    contractScalar,
+    contractIsList,
     ContractField (..),
     ContractEvent (..),
     ContractNode (..),
@@ -371,6 +375,17 @@
   }
   deriving stock (Eq, Show, Generic)
 
+-- | A declaration-owned unary register constructor. Missing facts remain raw
+-- until checking, so omissions have located diagnostics rather than exceptions.
+data MappedWriteLiftDecl = MappedWriteLiftDecl
+  { source :: !TypeExpr,
+    function :: !(Maybe Text),
+    version :: !(Maybe Text),
+    fixtures :: !(Maybe Text),
+    loc :: !Loc
+  }
+  deriving stock (Eq, Show, Generic)
+
 data MappedDecl
   = MappedStructural
       { msName :: !Name,
@@ -380,6 +395,7 @@
         msCanonical :: !(Maybe Text),
         msFixtures :: !(Maybe Text),
         msInitial :: !(Maybe Text),
+        msWriteLift :: !(Maybe MappedWriteLiftDecl),
         msShape :: !MappedShape,
         msLoc :: !Loc
       }
@@ -401,6 +417,7 @@
         moCodecVersion :: !(Maybe Text),
         moFixtures :: !(Maybe Text),
         moInitial :: !(Maybe Text),
+        moWriteLift :: !(Maybe MappedWriteLiftDecl),
         moLoc :: !Loc
       }
   deriving stock (Eq, Show, Generic)
@@ -426,6 +443,8 @@
   | EMultiply !Loc !Expr !Expr
   | EPath !Loc !ExprRoot ![Name]
   | ELiteral !Loc !ScalarLiteral
+  | EWriteMapped !Loc !Expr
+  | EWriteInitial !Loc
   | EAtom !Atom
   deriving stock (Eq, Show, Generic)
 
@@ -463,6 +482,8 @@
   EMultiply loc _ _ -> loc
   EPath loc _ _ -> loc
   ELiteral loc _ -> loc
+  EWriteMapped loc _ -> loc
+  EWriteInitial loc -> loc
   EAtom {} -> noLoc
   where
     firstLocated left right = case exprLoc left of
@@ -1060,8 +1081,20 @@
 -- EP-4: the cross-service @contract@ (shared Kafka message schema, define-once).
 
 -- | A contract field type: @typeid \"inc\"@, a declared ID, @text@, or @int@.
-data ContractType = CTypeId !Text | CDeclaredId !Name | CText | CInt
+data ContractScalarType = CTypeId !Text | CDeclaredId !Name | CText | CInt
   deriving stock (Eq, Show, Generic)
+
+-- | A scalar or a list of one scalar; nesting is unrepresentable.
+data ContractType = CScalar !ContractScalarType | CList !ContractScalarType
+  deriving stock (Eq, Show, Generic)
+
+contractScalar :: ContractType -> ContractScalarType
+contractScalar (CScalar scalar) = scalar
+contractScalar (CList scalar) = scalar
+
+contractIsList :: ContractType -> Bool
+contractIsList CList {} = True
+contractIsList CScalar {} = False
 
 data ContractField = ContractField
   { name :: !Name,
diff --git a/src/Keiro/Dsl/Harness.hs b/src/Keiro/Dsl/Harness.hs
--- a/src/Keiro/Dsl/Harness.hs
+++ b/src/Keiro/Dsl/Harness.hs
@@ -10,13 +10,13 @@
 --   2. a /clock-free/ assertion baked from the spec (TIME IS INJECTED, NOT
 --      SAMPLED) — @False@ would mean a guard\/write sampled a wall clock;
 --   3. a golden wire round-trip per event (@decode . encode == id@);
---   4. a behavioural /accept/ check per transition out of the initial state:
---      stepping a sample command lands on the declared @goto@ vertex. This is the
---      check a wrong guard fails — flipping @./=@ to @.==@ in the filled body turns
---      it red while leaving the scaffold untouched.
+--   4. an /accept/ check per live transition out of the initial state:
+--      generated-owned and legacy edges step a synthetic sample; a Hole-owned
+--      edge executes the consumer's history-backed witness through its contract.
 --   5. a forward/replay equality check per live, event-emitting transition out of
 --      the initial state: emitted events cross the generated codec boundary, then
 --      replay must reconstruct the forward vertex and every declared register.
+--      Hole-owned edges use the same comparison in the behavior contract.
 --
 -- @Text@ samples include their field name so same-typed field swaps remain visible
 -- to the replay check. Other sample kinds remain uniform until fixture bindings can
@@ -50,6 +50,7 @@
 import Data.Text qualified as T
 import Keiro.Dsl.AggregateGenerationPlan
 import Keiro.Dsl.AggregateType
+import Keiro.Dsl.BehaviorCoverage qualified as Behavior
 import Keiro.Dsl.FieldIdentity
 import Keiro.Dsl.GeneratedHaskellLanguage
 import Keiro.Dsl.Goldens (GoldenPayload (..))
@@ -66,6 +67,7 @@
 import Keiro.Dsl.Scaffold
 import Keiro.Dsl.SemanticContract (CheckedService, checkedLanguageContract, checkedProjectionSupplies, checkedSpec, checkedTypeGraph, legacyCheckedService)
 import Keiro.Dsl.SemanticImpact (aggregateMappedClosure, semanticImpact)
+import Keiro.Dsl.SourceIndex qualified as SourceIndex
 import Keiro.Dsl.TypeGraph
 
 -- | Emit the aggregate harness after selecting the service's effective
@@ -317,7 +319,7 @@
            "  pure (null failures)"
          ]
   where
-    stem = lowerFirst (pascal ((.name) readModel))
+    stem = readModelStem readModel
     readModelName = stem <> "ReadModel"
     asyncProjectionName = stem <> "AsyncProjection"
     readModelImports = readModelName : [asyncProjectionName | emitsLegacyAsync]
@@ -829,7 +831,9 @@
       ++ [ "",
            "-- | (label, passed). A driver runs these and exits non-zero on any False,",
            "-- naming the failing assertion. Filling a hole wrongly turns a specific",
-           "-- entry False; the scaffold cannot.",
+           if null (initialWitnessProbeEntries a)
+             then "-- entry False; the scaffold cannot."
+             else "-- entry False; pending Hole witnesses fail until filled and verified.",
            "harnessAssertions :: [(String, Bool)]",
            "harnessAssertions =",
            "  [ (\"validateTransducer is empty\", null (validateTransducer defaultValidationOptions " <> lowerFirst nm <> "Transducer))"
@@ -846,7 +850,7 @@
       ++ ["  ++ mappedConformanceAssertions" | hasMappedHarness a]
       ++ ["  ++ nominalConformanceAssertions" | hasNominalHarness a]
       ++ [ "  ++ forwardReplay" <> (.command) t
-         | t <- replayTransitions
+         | t <- map (.transition) (filter (not . null . (.emits) . (.transition)) (initialLiveTransitionEntries a))
          ]
       ++ ( if null upcastEvents
              then []
@@ -859,10 +863,13 @@
            "roundTrips :: " <> nm <> "Event -> Bool",
            "roundTrips e = parse" <> nm <> "Event (eventType " <> lowerFirst nm <> "Codec e) (encode" <> nm <> "Event e) == Right e"
          ]
+      ++ witnessSharedDeclarations
       ++ harnessSampleDeclarations a
       ++ concatMap (sampleEventDecl a) ((.events) a)
-      ++ concatMap (acceptDecl a . (.transition)) (initialLiveTransitionEntries a)
+      ++ concatMap (acceptDecl a . (.transition)) (initialSyntheticProbeEntries a)
+      ++ concatMap (witnessAcceptDecl a) (initialWitnessProbeEntries a)
       ++ concatMap (forwardReplayDecl a) replayTransitions
+      ++ concatMap (witnessForwardReplayDecl a) witnessReplayEntries
       ++ concatMap (upcastDecl goldens a) upcastEvents
       ++ mappedHarnessDeclarations a
       ++ nominalHarnessDeclarations a
@@ -875,13 +882,25 @@
     upcastEvents = [e | e <- (.events) a, (.upcastFrom) e /= Nothing]
     replayTransitions =
       [ t
-      | entry <- initialLiveTransitionEntries a,
+      | entry <- initialSyntheticProbeEntries a,
         let t = (.transition) entry,
         not (null ((.emits) t))
       ]
+    witnessReplayEntries = filter (not . null . (.emits) . (.transition)) (initialWitnessProbeEntries a)
+    witnessSharedDeclarations =
+      if null (initialWitnessProbeEntries a)
+        then []
+        else
+          [ "",
+            "-- | One required obligation carrying exactly one non-pending witness.",
+            "holeWitnessFilled :: BehaviorKey -> BehaviorConformanceReport -> Bool",
+            "holeWitnessFilled key report = report.reportRequired == [key] && report.reportFilled == [key]"
+          ]
     coreImports =
       ["applyEventsEither" | not (null replayTransitions)]
-        ++ ["defaultValidationOptions", "step", "validateTransducer"]
+        ++ ["defaultValidationOptions"]
+        ++ ["step" | not (null (initialSyntheticProbeEntries a))]
+        ++ ["validateTransducer"]
         ++ ["fieldWitnessAgrees" | not (null (nominalScalarHarnessTypes a)) || not (null (enforcedConsumerNominalIdHarnessTypes a))]
         ++ ["(!)" | not (null replayTransitions) && not (null ((.regs) a))]
     upcastAssertions =
@@ -915,6 +934,8 @@
           ++ aggregateHarnessImports a
           ++ T.lines (renderPlannedImports (harnessImportPlan a))
           ++ goldenImports
+          ++ ["import " <> (.holePrefix) a <> ".BehaviorHoles (behaviorWitnesses)" | not (null (initialWitnessProbeEntries a))]
+          ++ ["import " <> (.genPrefix) a <> ".BehaviorContract (BehaviorConformanceReport (..), BehaviorKey (..), behaviorObligationReport)" | not (null (initialWitnessProbeEntries a))]
 
     upcastLabel event source =
       case goldenFor goldens event of
@@ -1005,6 +1026,8 @@
 exprNames (EMultiply _ x y) = exprNames x ++ exprNames y
 exprNames (EPath _ _ (name : _)) = [name]
 exprNames (EPath _ _ []) = []
+exprNames (EWriteMapped _ child) = exprNames child
+exprNames EWriteInitial {} = []
 exprNames ELiteral {} = []
 exprNames (EAtom (AName n)) = [n]
 exprNames (EAtom (ABool _)) = []
@@ -1018,6 +1041,59 @@
     ]
   [] -> []
 
+-- | Only guards owned by the generator (or legacy transducers) admit a
+-- synthetic probe from initial registers. Initial vertices may retain history.
+initialSyntheticProbeEntries :: Agg -> [TransitionLayoutEntry]
+initialSyntheticProbeEntries =
+  filter ((/= HoleImplementation) . (.implementation) . (.transition)) . initialLiveTransitionEntries
+
+initialWitnessProbeEntries :: Agg -> [TransitionLayoutEntry]
+initialWitnessProbeEntries =
+  filter ((== HoleImplementation) . (.implementation) . (.transition)) . initialLiveTransitionEntries
+
+witnessKeyFor :: Agg -> TransitionLayoutEntry -> Text
+witnessKeyFor a entry =
+  case [ Behavior.unBehaviorKey ((.key) requirement)
+       | requirement <- behaviorRequirementsFor a,
+         (.origin) requirement == Behavior.TransitionRequirementOrigin ((.name) a) (SourceIndex.TransitionOrdinal ((.declarationIndex) entry - 1))
+       ] of
+    [key] -> key
+    keys -> error ("hole-owned initial edge " <> show ((.declarationIndex) entry) <> " has " <> show (length keys) <> " behavior requirements")
+
+witnessAcceptDecl :: Agg -> TransitionLayoutEntry -> [Text]
+witnessAcceptDecl a entry =
+  [ "",
+    "-- Hole-owned initial edge: the consumer's history-backed live witness",
+    "-- proves acceptance through the generated behavior contract.",
+    helper <> " :: BehaviorConformanceReport",
+    helper <> " = behaviorObligationReport (BehaviorKey " <> key <> ") behaviorWitnesses",
+    "",
+    "accept" <> command <> " :: Bool",
+    "accept" <> command <> " = holeWitnessFilled (BehaviorKey " <> key <> ") " <> helper <> " && null " <> helper <> ".reportFailed"
+  ]
+  where
+    command = (.command) ((.transition) entry)
+    helper = "holeWitness" <> command
+    key = tshow (witnessKeyFor a entry)
+
+witnessForwardReplayDecl :: Agg -> TransitionLayoutEntry -> [Text]
+witnessForwardReplayDecl a entry =
+  [ "",
+    "-- The behavior contract decodes emissions through the persisted codec,",
+    "-- replays them, and compares the final vertex and every register.",
+    "forwardReplay" <> command <> " :: [(String, Bool)]",
+    "forwardReplay" <> command <> " =",
+    "  [ (prefix <> \"hole witness filled\", holeWitnessFilled key " <> helper <> ")",
+    "  , (prefix <> \"hole witness verified\", holeWitnessFilled key " <> helper <> " && null " <> helper <> ".reportFailed)",
+    "  ]",
+    "  where",
+    "    key = BehaviorKey " <> tshow (witnessKeyFor a entry),
+    "    prefix = \"forward/replay equality: " <> command <> " from " <> initialVertex a <> " -- \""
+  ]
+  where
+    command = (.command) ((.transition) entry)
+    helper = "holeWitness" <> command
+
 -- | @sampleEvent<Ctor> :: <Agg>Event@ — a sample built from per-field sample
 -- values (enum→first constructor, Bool→False, id→placeholder,
 -- Text→\"sample-<fieldName>\").
@@ -1488,8 +1564,15 @@
   Just graph ->
     [ declaration
     | key <- aggregateMappedClosure (semanticImpact graph) ((.name) aggregate),
-      Just declaration <- [Map.lookup key ((.declarations) graph)]
+      Just declaration <- [Map.lookup key ((.declarations) graph)],
+      needsHarnessFixtures key declaration
     ]
+  where
+    -- Opaque register initials live in Domain; this module only samples command
+    -- and event fields. Register-only opaque fixtures would leave unused imports.
+    needsHarnessFixtures key ResolvedOpaque {} =
+      any ((== AggregateMapped key) . snd) (concatMap (.fields) ((.commands) aggregate <> (.events) aggregate))
+    needsHarnessFixtures _ ResolvedStructural {} = True
 
 mappedEventFields :: Agg -> [(ResolvedCtor, Text, ResolvedAggregateType, ResolvedMappedDecl)]
 mappedEventFields aggregate =
diff --git a/src/Keiro/Dsl/HaskellName.hs b/src/Keiro/Dsl/HaskellName.hs
--- a/src/Keiro/Dsl/HaskellName.hs
+++ b/src/Keiro/Dsl/HaskellName.hs
@@ -21,6 +21,7 @@
     renderGeneratedHaskellNamingEdition,
     parseGeneratedHaskellNamingEdition,
     deriveHaskellName,
+    deriveUpperCamelName,
     deriveLowerHelperName,
     checkedModuleSegment,
     checkedModuleName,
@@ -176,6 +177,17 @@
           upperName <- checkedUpperOccurrence site upper
           lowerName <- checkedLowerOccurrence site lower
           pure DerivedHaskellName {upperCamel = upperName, lowerCamel = lowerName}
+
+-- | Derive only the UpperCamel occurrence. A word embedded in a larger name
+-- may itself be reserved as a term, while its upper-case form remains valid.
+deriveUpperCamelName :: NameSourceKind -> NameSite -> Either HaskellNameError UpperCamelName
+deriveUpperCamelName source site
+  | source == ExplicitHaskellName = Left (InvalidExplicitHaskellName site ((.logicalName) site))
+  | otherwise = do
+      words' <- segmentLogicalName (source == LogicalWireWord) site
+      case words' of
+        [] -> Left (EmptyNameSegment site)
+        _ -> checkedUpperOccurrence site (T.concat (map upperWord words'))
 
 -- | Derive a lower-camel helper name from a logical name and append one checked
 -- UpperCamel suffix. Generator emission and collision planning use this same
diff --git a/src/Keiro/Dsl/IdDomain.hs b/src/Keiro/Dsl/IdDomain.hs
--- a/src/Keiro/Dsl/IdDomain.hs
+++ b/src/Keiro/Dsl/IdDomain.hs
@@ -26,7 +26,7 @@
 import Data.Text (Text)
 import Data.Text qualified as T
 import Keiro.Codec.IdDomain
-import Keiro.Dsl.Grammar (ContractEvent (..), ContractField (..), ContractNode (..), ContractType (..), IdDecl (..), Node (..), Spec (..))
+import Keiro.Dsl.Grammar (ContractEvent (..), ContractField (..), ContractNode (..), ContractScalarType (..), IdDecl (..), Node (..), Spec (..), contractScalar)
 import Keiro.Dsl.LanguageVersion (RuntimeCapability (..), runtimeProfileHasCapability)
 import Keiro.Dsl.SemanticContract (CheckedService, EffectiveLanguageContract (..), checkedLanguageContract, checkedSpec)
 
@@ -100,7 +100,7 @@
         Just (admission, prefix) <- [contractFieldAdmission field],
         Just contract <- [contractIdDomainContractForAdmission languageContract admission prefix]
       ]
-    contractFieldAdmission field = case (.valueType) field of
+    contractFieldAdmission field = case contractScalar ((.valueType) field) of
       CTypeId prefix -> Just (TypeIdV7, prefix)
       CDeclaredId name -> (\declaration -> ((.admission) declaration, (.prefix) declaration)) <$> find ((== name) . (.name)) ((.ids) spec)
       _ -> Nothing
diff --git a/src/Keiro/Dsl/LanguageVersion.hs b/src/Keiro/Dsl/LanguageVersion.hs
--- a/src/Keiro/Dsl/LanguageVersion.hs
+++ b/src/Keiro/Dsl/LanguageVersion.hs
@@ -319,7 +319,7 @@
 profileV5 =
   SyntaxProfile
     "keiro-dsl/syntax-profile/5"
-    (Set.insert ExplicitIdAdmissionDomainSyntax (Set.insert RefinedBase16Syntax (Set.insert TextSetSyntax (Set.insert CalendarDaySyntax (Set.insert BareStructuralMappingSyntax (Set.insert WorkqueueFifoHeadsSyntax (Set.insert KeyedMapSyntax (Set.insert ContractDeclaredIdSyntax (Set.insert ProcessReactionSyntax (Set.insert DelegatedInboxSyntax ((.features) profileV4)))))))))))
+    (Set.insert MappedRegisterConstructionSyntax $ Set.insert ContractListFieldSyntax (Set.insert ExplicitIdAdmissionDomainSyntax (Set.insert RefinedBase16Syntax (Set.insert TextSetSyntax (Set.insert CalendarDaySyntax (Set.insert BareStructuralMappingSyntax (Set.insert WorkqueueFifoHeadsSyntax (Set.insert KeyedMapSyntax (Set.insert ContractDeclaredIdSyntax (Set.insert ProcessReactionSyntax (Set.insert DelegatedInboxSyntax ((.features) profileV4))))))))))))
 
 runtimeProfileV1 :: RuntimeSemanticsProfile
 runtimeProfileV1 =
@@ -413,6 +413,8 @@
   | TextSetSyntax
   | RefinedBase16Syntax
   | ExplicitIdAdmissionDomainSyntax
+  | MappedRegisterConstructionSyntax
+  | ContractListFieldSyntax
   deriving stock (Eq, Ord, Show)
 
 -- | The first released contract that owns each grammar feature.
diff --git a/src/Keiro/Dsl/Manifest.hs b/src/Keiro/Dsl/Manifest.hs
--- a/src/Keiro/Dsl/Manifest.hs
+++ b/src/Keiro/Dsl/Manifest.hs
@@ -211,7 +211,7 @@
     integration = ["effectful-core", "hasql-transaction", "keiro", "kiroku-store"]
     hasTypedContractId contract =
       or
-        [ case (.valueType) field of
+        [ case contractScalar ((.valueType) field) of
             CTypeId prefix -> contractIdDomainContractFor (checkedLanguageContract service) prefix /= Nothing
             CDeclaredId {} -> True
             _ -> False
diff --git a/src/Keiro/Dsl/MappedConsumer.hs b/src/Keiro/Dsl/MappedConsumer.hs
--- a/src/Keiro/Dsl/MappedConsumer.hs
+++ b/src/Keiro/Dsl/MappedConsumer.hs
@@ -5,12 +5,13 @@
 module Keiro.Dsl.MappedConsumer
   ( ConsumerPlan (..),
     MappingIdentity (..),
+    WriteLiftIdentity (..),
     consumerPlan,
     consumerPlanForService,
   )
 where
 
-import Data.Aeson (FromJSON (..), ToJSON (..), object, withObject, (.:), (.=))
+import Data.Aeson (FromJSON (..), ToJSON (..), object, withObject, (.:), (.:?), (.=))
 import Data.List (nub, sort)
 import Data.List.NonEmpty qualified as NE
 import Data.Map.Strict qualified as Map
@@ -29,6 +30,27 @@
   }
   deriving stock (Eq, Show)
 
+data WriteLiftIdentity = WriteLiftIdentity
+  { sourceType :: !Text,
+    function :: !Text,
+    version :: !Text,
+    fixtures :: !Text
+  }
+  deriving stock (Eq, Show)
+
+instance ToJSON WriteLiftIdentity where
+  toJSON lift = object ["sourceType" .= lift.sourceType, "function" .= lift.function, "version" .= lift.version, "fixtures" .= lift.fixtures]
+
+instance FromJSON WriteLiftIdentity where
+  parseJSON = withObject "mapped write-lift identity" $ \value ->
+    WriteLiftIdentity <$> value .: "sourceType" <*> value .: "function" <*> value .: "version" <*> value .: "fixtures"
+
+writeLiftIdentity :: MappedWriteLift -> WriteLiftIdentity
+writeLiftIdentity lift = WriteLiftIdentity (liftSourceName lift.source) (unQualifiedValueName lift.function) (unLiftVersion lift.version) (unQualifiedValueName lift.fixtures)
+
+liftModules :: Maybe MappedWriteLift -> [Text]
+liftModules = maybe [] (\lift -> map qualifiedModule [lift.function, lift.fixtures])
+
 data MappingIdentity
   = StructuralMapping
       { specName :: !Text,
@@ -37,7 +59,8 @@
         moduleName :: !Text,
         valueType :: !Text,
         bindingSymbol :: !Text,
-        bindingVersion :: !Text
+        bindingVersion :: !Text,
+        writeLift :: !(Maybe WriteLiftIdentity)
       }
   | OpaqueMapping
       { specName :: !Text,
@@ -45,7 +68,8 @@
         moduleName :: !Text,
         valueType :: !Text,
         codecIdentity :: !Text,
-        codecVersion :: !Text
+        codecVersion :: !Text,
+        writeLift :: !(Maybe WriteLiftIdentity)
       }
   | NominalMapping
       { specName :: !Text,
@@ -63,8 +87,8 @@
   deriving stock (Eq, Show)
 
 instance ToJSON MappingIdentity where
-  toJSON StructuralMapping {specName, canonicalType, package, moduleName, valueType, bindingSymbol, bindingVersion} =
-    object
+  toJSON StructuralMapping {specName, canonicalType, package, moduleName, valueType, bindingSymbol, bindingVersion, writeLift} =
+    object $
       [ "schema" .= (1 :: Int),
         "mode" .= ("structural" :: Text),
         "specName" .= specName,
@@ -75,8 +99,9 @@
         "bindingSymbol" .= bindingSymbol,
         "bindingVersion" .= bindingVersion
       ]
-  toJSON OpaqueMapping {specName, package, moduleName, valueType, codecIdentity, codecVersion} =
-    object
+        <> maybe [] (\lift -> ["writeLift" .= lift]) writeLift
+  toJSON OpaqueMapping {specName, package, moduleName, valueType, codecIdentity, codecVersion, writeLift} =
+    object $
       [ "schema" .= (1 :: Int),
         "mode" .= ("opaque" :: Text),
         "specName" .= specName,
@@ -86,6 +111,7 @@
         "codecIdentity" .= codecIdentity,
         "codecVersion" .= codecVersion
       ]
+        <> maybe [] (\lift -> ["writeLift" .= lift]) writeLift
   toJSON NominalMapping {specName, nominalCategory = resolvedNominalCategory, nominalRepresentation, canonicalType, package, moduleName, valueType, bindingSymbol, bindingVersion, fixtureSymbol, initialSymbol} =
     object
       [ "schema" .= (1 :: Int),
@@ -120,6 +146,7 @@
               <*> value .: "type"
               <*> value .: "bindingSymbol"
               <*> value .: "bindingVersion"
+              <*> value .:? "writeLift"
           "opaque" ->
             OpaqueMapping
               <$> value .: "specName"
@@ -128,6 +155,7 @@
               <*> value .: "type"
               <*> value .: "codecIdentity"
               <*> value .: "codecVersion"
+              <*> value .:? "writeLift"
           "nominal" ->
             NominalMapping
               <$> value .: "specName"
@@ -174,11 +202,11 @@
   (.moduleName) ((.haskell) declaration)
     : qualifiedModule ((.binding) declaration)
     : qualifiedModule ((.fixtures) declaration)
-    : maybe [] (pure . qualifiedModule) ((.initial) declaration)
+    : (maybe [] (pure . qualifiedModule) ((.initial) declaration) <> liftModules declaration.writeLift)
 mappedModules (ResolvedOpaque declaration) =
   (.moduleName) ((.haskell) declaration)
     : qualifiedModule ((.fixtures) declaration)
-    : maybe [] (pure . qualifiedModule) ((.initial) declaration)
+    : (maybe [] (pure . qualifiedModule) ((.initial) declaration) <> liftModules declaration.writeLift)
 
 mappingIdentity :: ResolvedMappedDecl -> MappingIdentity
 mappingIdentity (ResolvedStructural declaration _) =
@@ -189,7 +217,8 @@
       moduleName = (.moduleName) ((.haskell) declaration),
       valueType = (.valueType) ((.haskell) declaration),
       bindingSymbol = unQualifiedValueName ((.binding) declaration),
-      bindingVersion = unBindingVersion ((.bindingVersion) declaration)
+      bindingVersion = unBindingVersion ((.bindingVersion) declaration),
+      writeLift = writeLiftIdentity <$> declaration.writeLift
     }
 mappingIdentity (ResolvedOpaque declaration) =
   OpaqueMapping
@@ -198,7 +227,8 @@
       moduleName = (.moduleName) ((.haskell) declaration),
       valueType = (.valueType) ((.haskell) declaration),
       codecIdentity = unCodecIdentity ((.codecIdentity) declaration),
-      codecVersion = unCodecVersion ((.codecVersion) declaration)
+      codecVersion = unCodecVersion ((.codecVersion) declaration),
+      writeLift = writeLiftIdentity <$> declaration.writeLift
     }
 
 nominalMappingIdentity :: (ResolvedNominalType, ConsumerNominalBinding) -> MappingIdentity
diff --git a/src/Keiro/Dsl/MappedDiff.hs b/src/Keiro/Dsl/MappedDiff.hs
--- a/src/Keiro/Dsl/MappedDiff.hs
+++ b/src/Keiro/Dsl/MappedDiff.hs
@@ -140,10 +140,12 @@
 diffDeclaration oldGraph newGraph oldResolved newResolved =
   case (declView oldResolved, declView newResolved) of
     (StructuralView oldDeclaration oldShape, StructuralView newDeclaration newShape) ->
-      metadataDiff paths oldDeclaration newDeclaration
+      liftDiff paths name oldDeclaration.writeLift newDeclaration.writeLift
+        ++ metadataDiff paths oldDeclaration newDeclaration
         ++ diffShape paths name oldShape newShape
     (OpaqueView oldDeclaration, OpaqueView newDeclaration) ->
-      opaqueMetadataDiff paths oldDeclaration newDeclaration
+      liftDiff paths name oldDeclaration.writeLift newDeclaration.writeLift
+        ++ opaqueMetadataDiff paths oldDeclaration newDeclaration
     _ ->
       [ finding
           paths
@@ -155,6 +157,17 @@
   where
     name = resolvedName newResolved
     paths = pathsFor oldGraph newGraph name
+
+liftDiff :: [UsePath] -> Name -> Maybe MappedWriteLift -> Maybe MappedWriteLift -> [MappedFinding]
+liftDiff paths name old new =
+  [ finding paths name "write-lift" MappedWriteLiftChanged "write-lift source, function, or version changed; rebuild consumers and run conformance; used lifts independently change the aggregate fold"
+  | execution old /= execution new
+  ]
+    <> [ finding paths name "write-lift.fixtures" MappedWriteLiftFixturesChanged "write-lift cases symbol changed; run conformance"
+       | fmap (.fixtures) old /= fmap (.fixtures) new
+       ]
+  where
+    execution = fmap (\lift -> (lift.source, lift.function, lift.version))
 
 metadataDiff :: [UsePath] -> StructuralDecl -> StructuralDecl -> [MappedFinding]
 metadataDiff paths oldDeclaration newDeclaration =
diff --git a/src/Keiro/Dsl/Parser/Aggregate.hs b/src/Keiro/Dsl/Parser/Aggregate.hs
--- a/src/Keiro/Dsl/Parser/Aggregate.hs
+++ b/src/Keiro/Dsl/Parser/Aggregate.hs
@@ -9,7 +9,7 @@
 import Keiro.Dsl.Grammar
 import Keiro.Dsl.LanguageVersion
 import Keiro.Dsl.Parser.Core
-import Keiro.Dsl.Parser.Expression (pExpr)
+import Keiro.Dsl.Parser.Expression (pExpr, pWriteExpr)
 import Keiro.Dsl.Parser.Mapped (pMappedTypeExpr)
 import Keiro.Dsl.Source (Located, mapLocated)
 import Keiro.Dsl.Syntax (SurfaceElement (..))
@@ -408,7 +408,7 @@
       do
         register <- keyword "write" *> ident
         _ <- symbol ":="
-        expression <- withOwnedSpan (pExpr context)
+        expression <- withOwnedSpan (pWriteExpr context)
         pure (CWrite register (locatedValue expression), [mapLocated SurfaceExpression expression]),
       try $ do
         keyword "emit"
diff --git a/src/Keiro/Dsl/Parser/Expression.hs b/src/Keiro/Dsl/Parser/Expression.hs
--- a/src/Keiro/Dsl/Parser/Expression.hs
+++ b/src/Keiro/Dsl/Parser/Expression.hs
@@ -1,6 +1,7 @@
 -- | Legacy and typed scalar expression syntax.
 module Keiro.Dsl.Parser.Expression
   ( pExpr,
+    pWriteExpr,
   )
 where
 
@@ -15,6 +16,24 @@
 
 -- Expr sublanguage
 --------------------------------------------------------------------------------
+
+-- Construction is contextual only at a complete write RHS. Continuations retain
+-- their ordinary expression meaning, including an unqualified initial root.
+pWriteExpr :: FrontendContext -> P Expr
+pWriteExpr context = mappedWrite <|> initialWrite
+  where
+    mappedWrite = do
+      loc <- getLoc
+      marker <- withOwnedSpan (try (keyword "mapped" <* lookAhead (symbol "(")))
+      requireLanguageFeatureAt context MappedRegisterConstructionSyntax (spanOf marker)
+      EWriteMapped loc <$> parens (pExpr context)
+    initialWrite
+      | frontendSupportsFeature context MappedRegisterConstructionSyntax = do
+          expression <- pExpr context
+          pure $ case expression of
+            EPath loc UnqualifiedRoot ["initial"] -> EWriteInitial loc
+            _ -> expression
+      | otherwise = pExpr context
 
 pExpr :: FrontendContext -> P Expr
 pExpr context
diff --git a/src/Keiro/Dsl/Parser/Integration.hs b/src/Keiro/Dsl/Parser/Integration.hs
--- a/src/Keiro/Dsl/Parser/Integration.hs
+++ b/src/Keiro/Dsl/Parser/Integration.hs
@@ -9,7 +9,7 @@
 
 import Keiro.Dsl.Frontend.Internal (FrontendContext)
 import Keiro.Dsl.Grammar
-import Keiro.Dsl.LanguageVersion (LanguageFeature (ContractDeclaredIdSyntax, DelegatedInboxSyntax, FieldAliasSyntax))
+import Keiro.Dsl.LanguageVersion (LanguageFeature (ContractDeclaredIdSyntax, ContractListFieldSyntax, DelegatedInboxSyntax, FieldAliasSyntax))
 import Keiro.Dsl.Parser.Core
 import Text.Megaparsec
 
@@ -60,7 +60,38 @@
       ty <- pContractType
       _ <- optional (symbol ";")
       pure ContractField {name = n, selector = selector, wireKey = wireKey, valueType = ty, loc = loc}
-    pContractType =
+    pContractType = do
+      ty <-
+        choice
+          [ do
+              -- Recognize application syntax before claiming List's feature.
+              -- Backtracking here must not erase a located feature refusal.
+              _ <- try (lookAhead (keyword "List" *> notFollowedBy pContractTypeBoundary))
+              listKeyword <- withOwnedSpan (keyword "List")
+              requireLanguageFeatureAt context ContractListFieldSyntax (spanOf listKeyword)
+              CList <$> pContractScalarType,
+            CScalar <$> pContractScalarType
+          ]
+      offset <- getOffset
+      boundary <- optional (try (lookAhead pContractTypeBoundary))
+      case boundary of
+        Just () -> pure ty
+        Nothing -> failAt offset "contract field types admit typeid \"prefix\", text, int, a declared id, or List of one of those; nested containers, Optional, Map, and Set applications and records are not supported in public contracts"
+    -- Fields may be adjacent on one line. Only a complete field head, including
+    -- its aliases, proves the next identifier is not a list operand. This probe
+    -- deliberately has no feature gates or dependency on declared ID names.
+    pContractTypeBoundary =
+      choice
+        [ () <$ symbol ";",
+          () <$ symbol "}",
+          do
+            _ <- ident
+            _ <- optional (keyword "haskell" *> ident)
+            _ <- optional (keyword "as" *> stringLit)
+            _ <- symbol ":"
+            pure ()
+        ]
+    pContractScalarType =
       choice
         [ CTypeId <$> (keyword "typeid" *> stringLit),
           CText <$ keyword "text",
diff --git a/src/Keiro/Dsl/Parser/Mapped.hs b/src/Keiro/Dsl/Parser/Mapped.hs
--- a/src/Keiro/Dsl/Parser/Mapped.hs
+++ b/src/Keiro/Dsl/Parser/Mapped.hs
@@ -26,6 +26,7 @@
   | MCBindingVersion Text
   | MCCanonical Text
   | MCFixtures Text
+  | MCWriteLift MappedWriteLiftDecl
   | MCInitial Text
   | MCCodec Text
   | MCCodecVersion Text
@@ -45,7 +46,7 @@
           fail "unreachable enabled nominal syntax in predecessor grammar",
       SurfaceMapped <$> pMappedStructural context loc,
       SurfaceMapped <$> pMappedRefined context loc,
-      SurfaceMapped <$> pMappedOpaque loc
+      SurfaceMapped <$> pMappedOpaque context loc
     ]
 
 pMappedStructural :: FrontendContext -> Loc -> P MappedDecl
@@ -66,6 +67,7 @@
   canonical <- oneClause "canonical-type" (\case MCCanonical value -> Just value; _ -> Nothing) clauses
   fixtures <- oneClause "fixtures" (\case MCFixtures value -> Just value; _ -> Nothing) clauses
   initial <- oneClause "initial" (\case MCInitial value -> Just value; _ -> Nothing) clauses
+  writeLift <- oneClause "write-lift" (\case MCWriteLift value -> Just value; _ -> Nothing) clauses
   shape <- requiredClause "wire" (\case MCShape value -> Just value; _ -> Nothing) clauses
   pure
     MappedStructural
@@ -76,20 +78,22 @@
         msCanonical = canonical,
         msFixtures = fixtures,
         msInitial = initial,
+        msWriteLift = writeLift,
         msShape = shape,
         msLoc = loc
       }
 
-pMappedOpaque :: Loc -> P MappedDecl
-pMappedOpaque loc = do
+pMappedOpaque :: FrontendContext -> Loc -> P MappedDecl
+pMappedOpaque context loc = do
   keyword "opaque"
   name <- ident
-  clauses <- braces (many pOpaqueClause)
+  clauses <- braces (many (pOpaqueClause context))
   hs <- oneClause "haskell" (\case MCHaskell value -> Just value; _ -> Nothing) clauses
   codec <- oneClause "codec" (\case MCCodec value -> Just value; _ -> Nothing) clauses
   version <- oneClause "version" (\case MCCodecVersion value -> Just value; _ -> Nothing) clauses
   fixtures <- oneClause "fixtures" (\case MCFixtures value -> Just value; _ -> Nothing) clauses
   initial <- oneClause "initial" (\case MCInitial value -> Just value; _ -> Nothing) clauses
+  writeLift <- oneClause "write-lift" (\case MCWriteLift value -> Just value; _ -> Nothing) clauses
   pure
     MappedOpaque
       { moName = name,
@@ -98,6 +102,7 @@
         moCodecVersion = version,
         moFixtures = fixtures,
         moInitial = initial,
+        moWriteLift = writeLift,
         moLoc = loc
       }
 
@@ -187,18 +192,45 @@
       MCCanonical <$> pQuotedFact "canonical-type",
       MCFixtures <$> pQuotedFact "fixtures",
       MCInitial <$> pQuotedFact "initial",
+      MCWriteLift <$> pWriteLift context,
       MCShape <$> pMappedShape context kind
     ]
 
-pOpaqueClause :: P MappedClause
-pOpaqueClause =
+pOpaqueClause :: FrontendContext -> P MappedClause
+pOpaqueClause context =
   choice
     [ MCHaskell <$> pHaskellSource,
+      MCWriteLift <$> pWriteLift context,
       MCCodec <$> pQuotedFact "codec",
       MCCodecVersion <$> pQuotedFact "version",
       MCFixtures <$> pQuotedFact "fixtures",
       MCInitial <$> pQuotedFact "initial"
     ]
+
+pWriteLift :: FrontendContext -> P MappedWriteLiftDecl
+pWriteLift context = do
+  loc <- getLoc
+  languageFeatureKeyword context MappedRegisterConstructionSyntax "write-lift"
+  keyword "from"
+  source <- pMappedTypeExpr context
+  facts <-
+    braces
+      ( many
+          ( choice
+              [ ("function",) <$> pQuotedFact "function",
+                ("version",) <$> pQuotedFact "version",
+                ("fixtures",) <$> pQuotedFact "fixtures"
+              ]
+          )
+      )
+  let fact key = case [value | (name, value) <- facts, name == key] of
+        [] -> pure Nothing
+        [value] -> pure (Just value)
+        _ -> fail ("duplicate " <> key <> " in write-lift")
+  function <- fact "function"
+  version <- fact "version"
+  fixtures <- fact "fixtures"
+  pure MappedWriteLiftDecl {source, function, version, fixtures, loc}
 
 pRefinedClause :: P MappedClause
 pRefinedClause =
diff --git a/src/Keiro/Dsl/PrettyPrint.hs b/src/Keiro/Dsl/PrettyPrint.hs
--- a/src/Keiro/Dsl/PrettyPrint.hs
+++ b/src/Keiro/Dsl/PrettyPrint.hs
@@ -147,7 +147,7 @@
     cas (c, e) = pretty c <+> "=>" <+> docExpr 0 e
 
 docMapped :: MappedDecl -> Doc ann
-docMapped MappedStructural {msName = name, msHaskell = haskell, msBinding = binding, msBindingVersion = bindingVersion, msCanonical = canonical, msFixtures = fixtures, msInitial = initial, msShape = shape} =
+docMapped MappedStructural {msName = name, msHaskell = haskell, msBinding = binding, msBindingVersion = bindingVersion, msCanonical = canonical, msFixtures = fixtures, msInitial = initial, msShape = shape, msWriteLift = writeLift} =
   vsep $
     ["mapped structural" <+> docShapeKind shape <+> pretty name <+> "{"]
       ++ maybe [] (pure . indent 2 . docHaskellSource) haskell
@@ -156,6 +156,7 @@
       ++ maybe [] (pure . indent 2 . docQuotedFact "canonical-type") canonical
       ++ maybe [] (pure . indent 2 . docQuotedFact "fixtures") fixtures
       ++ maybe [] (pure . indent 2 . docQuotedFact "initial") initial
+      ++ maybe [] (pure . indent 2 . docWriteLift) writeLift
       ++ [indent 2 (docMappedShape shape), "}"]
 docMapped MappedRefined {mrName = name, mrHaskell = haskell, mrBinding = binding, mrBindingVersion = bindingVersion, mrCanonical = canonical, mrFixtures = fixtures, mrInitial = initial, mrPolicy = policy} =
   vsep $
@@ -167,7 +168,7 @@
       ++ maybe [] (pure . indent 2 . docQuotedFact "fixtures") fixtures
       ++ maybe [] (pure . indent 2 . docQuotedFact "initial") initial
       ++ [indent 2 ("wire" <+> docRefinedWirePolicy policy), "}"]
-docMapped MappedOpaque {moName = name, moHaskell = haskell, moCodecId = codec, moCodecVersion = version, moFixtures = fixtures, moInitial = initial} =
+docMapped MappedOpaque {moName = name, moHaskell = haskell, moCodecId = codec, moCodecVersion = version, moFixtures = fixtures, moInitial = initial, moWriteLift = writeLift} =
   vsep $
     ["mapped opaque" <+> pretty name <+> "{"]
       ++ maybe [] (pure . indent 2 . docHaskellSource) haskell
@@ -175,8 +176,18 @@
       ++ maybe [] (pure . indent 2 . docQuotedFact "version") version
       ++ maybe [] (pure . indent 2 . docQuotedFact "fixtures") fixtures
       ++ maybe [] (pure . indent 2 . docQuotedFact "initial") initial
+      ++ maybe [] (pure . indent 2 . docWriteLift) writeLift
       ++ ["}"]
 
+docWriteLift :: MappedWriteLiftDecl -> Doc ann
+docWriteLift declaration =
+  vsep $
+    ["write-lift from" <+> docTypeExpr declaration.source <+> "{"]
+      ++ maybe [] (pure . indent 2 . docQuotedFact "function") declaration.function
+      ++ maybe [] (pure . indent 2 . docQuotedFact "version") declaration.version
+      ++ maybe [] (pure . indent 2 . docQuotedFact "fixtures") declaration.fixtures
+      ++ ["}"]
+
 docNominalScalar :: NominalScalarDecl -> Doc ann
 docNominalScalar declaration =
   vsep $
@@ -681,10 +692,12 @@
         )
         <> ":"
         <+> docContractType ((.valueType) f)
-    docContractType (CTypeId p) = "typeid" <+> dquoted p
-    docContractType (CDeclaredId name) = pretty name
-    docContractType CText = "text"
-    docContractType CInt = "int"
+    docContractType (CScalar scalar) = docContractScalar scalar
+    docContractType (CList scalar) = "List" <+> docContractScalar scalar
+    docContractScalar (CTypeId p) = "typeid" <+> dquoted p
+    docContractScalar (CDeclaredId name) = pretty name
+    docContractScalar CText = "text"
+    docContractScalar CInt = "int"
 
 --------------------------------------------------------------------------------
 -- Process + timer (EP-3)
@@ -1149,6 +1162,8 @@
     body (EAdd _ l r) = docExpr 4 l <+> "+" <+> docExpr 5 r
     body (ESubtract _ l r) = docExpr 4 l <+> "-" <+> docExpr 5 r
     body (EMultiply _ l r) = docExpr 5 l <+> "*" <+> docExpr 6 r
+    body (EWriteMapped _ child) = "mapped" <> parens (docExpr 0 child)
+    body EWriteInitial {} = "initial"
     body (EPath _ root path) = docPath root path
     body (ELiteral _ literal) = docLiteral literal
     body (EAtom a) = docAtom a
@@ -1160,6 +1175,8 @@
 precOf EAdd {} = 4
 precOf ESubtract {} = 4
 precOf EMultiply {} = 5
+precOf EWriteMapped {} = 6
+precOf EWriteInitial {} = 6
 precOf EPath {} = 6
 precOf ELiteral {} = 6
 precOf EAtom {} = 6
diff --git a/src/Keiro/Dsl/ProcessReaction.hs b/src/Keiro/Dsl/ProcessReaction.hs
--- a/src/Keiro/Dsl/ProcessReaction.hs
+++ b/src/Keiro/Dsl/ProcessReaction.hs
@@ -275,6 +275,8 @@
           then failure (exprLoc left) ProcessReactionGuardNotBoolean "ordering comparison requires Text, a number, or Time"
           else Right AggregateBool
       EPath loc UnqualifiedRoot ["input", field] -> requireInputType symbols input loc field
+      EWriteInitial loc -> failure loc ProcessReactionGuardNotBoolean "initial is write-only"
+      EWriteMapped loc _ -> failure loc ProcessReactionGuardNotBoolean "mapped construction is write-only"
       EPath loc _ _ -> failure loc ProcessStateAccessUnsupported "reaction guards may read only input.<field>; saga/register/command state is unsupported"
       ELiteral _ (LiteralBool _) -> Right AggregateBool
       ELiteral _ (LiteralText _) -> Right AggregateText
diff --git a/src/Keiro/Dsl/ReplayImpact.hs b/src/Keiro/Dsl/ReplayImpact.hs
--- a/src/Keiro/Dsl/ReplayImpact.hs
+++ b/src/Keiro/Dsl/ReplayImpact.hs
@@ -34,6 +34,7 @@
 import Keiro.Dsl.AggregateType
 import Keiro.Dsl.CanonicalEncoding (canonicalExpr, canonicalTransition)
 import Keiro.Dsl.FieldIdentity (ResolvedFieldIdentity (..), resolveAggregateFieldIdentity)
+import Keiro.Dsl.FoldEvidence (BodyEvidence (..), FoldEvidence (..), aggregateFoldEvidenceForService)
 import Keiro.Dsl.FoldFingerprint (FoldSurfaceError, aggregateFoldSurfaceForService)
 import Keiro.Dsl.Grammar
 import Keiro.Dsl.NominalType
@@ -232,22 +233,59 @@
     }
 
 matchedAggregateImpact :: CheckedService -> CheckedService -> ReplaySurfaceContext -> ReplaySurfaceContext -> Aggregate -> Aggregate -> Either FoldSurfaceError AggregateImpact
-matchedAggregateImpact oldService newService oldContext newContext oldAggregate newAggregate = do
-  oldSurface <- aggregateFoldSurfaceForService oldService oldAggregate
-  newNonTransitionSurface <-
-    aggregateFoldSurfaceForService
-      newService
-      (replaceAggregateTransitions oldAggregate.transitions newAggregate)
-  let nonTransitionFoldChanged = oldSurface /= newNonTransitionSurface
+matchedAggregateImpact oldService newService oldContext newContext oldAggregate newAggregate
+  | usesConstruction oldAggregate || usesConstruction newAggregate = do
+      oldSurface <- aggregateFoldSurfaceForService oldService oldAggregate
+      newSurface <- aggregateFoldSurfaceForService newService newAggregate
+      let (transitionEvents, transitionChanged) = changedTransitionEvents oldAggregate.transitions newAggregate.transitions
+          foldChanged = oldSurface /= newSurface
+      pure
+        AggregateImpact
+          { eventTypes =
+              decodeSurfaceAffected oldContext newContext oldAggregate newAggregate
+                <> if foldChanged then Set.fromList (map (.name) oldAggregate.events) else transitionEvents,
+            includeSnapshotStreams = foldChanged || transitionChanged
+          }
+  | otherwise = matchedOrdinaryAggregateImpact oldService newService oldContext newContext oldAggregate newAggregate
+
+usesConstruction :: Aggregate -> Bool
+usesConstruction aggregate = any (any (construction . snd) . (.writes)) aggregate.transitions
+  where
+    construction EWriteInitial {} = True
+    construction EWriteMapped {} = True
+    construction _ = False
+
+matchedOrdinaryAggregateImpact :: CheckedService -> CheckedService -> ReplaySurfaceContext -> ReplaySurfaceContext -> Aggregate -> Aggregate -> Either FoldSurfaceError AggregateImpact
+matchedOrdinaryAggregateImpact oldService newService oldContext newContext oldAggregate newAggregate = do
+  oldEvidence <- aggregateFoldEvidenceForService oldService oldAggregate
+  newEvidence <- aggregateFoldEvidenceForService newService newAggregate
+  let nonTransitionFoldChanged = oldEvidence.aggregateSegments /= newEvidence.aggregateSegments
+      eventDependencyAffected = Map.keysSet (Map.filter id (Map.intersectionWith (/=) oldEvidence.eventSegments newEvidence.eventSegments))
+      changedBodies = Map.elems (Map.intersectionWith changedBody oldEvidence.bodySegments newEvidence.bodySegments)
+      dependencyAffected = Set.unions [events | (True, events) <- changedBodies]
+      dependencyFoldChanged = not (Set.null eventDependencyAffected) || any fst changedBodies
   pure
     AggregateImpact
       { eventTypes =
           decodeAffected
+            <> eventDependencyAffected
+            <> dependencyAffected
             <> transitionAffected
             <> if nonTransitionFoldChanged then oldEventTypes else Set.empty,
-        includeSnapshotStreams = transitionFoldChanged || nonTransitionFoldChanged || mappedRegisterChanged
+        includeSnapshotStreams = transitionFoldChanged || dependencyFoldChanged || nonTransitionFoldChanged || mappedRegisterChanged
       }
   where
+    -- Only retained bodies can inherit changed dependencies. Added bodies
+    -- have no old history; removed bodies are already selected structurally.
+    -- Guard loosening may drop dependencies, so compare shared rule/equality
+    -- names rather than treating their absence as changed replay semantics.
+    changedBody old new =
+      ( old.outputSegments /= new.outputSegments
+          || or (Map.elems (Map.intersectionWith (/=) old.ruleSegments new.ruleSegments))
+          || or (Map.elems (Map.intersectionWith (/=) old.equalitySegments new.equalitySegments))
+          || or (Map.elems (Map.intersectionWith (/=) old.guardEqualitySegments new.guardEqualitySegments)),
+        old.emittedEvents <> new.emittedEvents
+      )
     oldEventTypes = Set.fromList ((.name) <$> (.events) oldAggregate)
     decodeAffected = decodeSurfaceAffected oldContext newContext oldAggregate newAggregate
     mappedRegisterChanged =
@@ -447,23 +485,6 @@
 guardOnlyLoosening oldTransition newTransition =
   replaceTransitionGuard newTransition.guard oldTransition == newTransition
     && guardImplies oldTransition.guard newTransition.guard
-
-replaceAggregateTransitions :: [Transition] -> Aggregate -> Aggregate
-replaceAggregateTransitions transitions aggregate =
-  Aggregate
-    { name = aggregate.name,
-      regs = aggregate.regs,
-      states = aggregate.states,
-      commands = aggregate.commands,
-      events = aggregate.events,
-      transitions,
-      domainOutcomeTypes = aggregate.domainOutcomeTypes,
-      domainOutcomeDuplicateLocs = aggregate.domainOutcomeDuplicateLocs,
-      wire = aggregate.wire,
-      projection = aggregate.projection,
-      snapshot = aggregate.snapshot,
-      loc = aggregate.loc
-    }
 
 replaceTransitionGuard :: Maybe Expr -> Transition -> Transition
 replaceTransitionGuard guard transition =
diff --git a/src/Keiro/Dsl/RouterSelection.hs b/src/Keiro/Dsl/RouterSelection.hs
--- a/src/Keiro/Dsl/RouterSelection.hs
+++ b/src/Keiro/Dsl/RouterSelection.hs
@@ -397,6 +397,8 @@
         (scalarType, path) <- resolvePath graph loc rootType fields
         requireExpected loc expected scalarType
         pure (CheckedScalarExpr scalarType (CheckedPath root path) loc)
+  EWriteInitial loc -> selectionFailure loc SelectionOperatorUnsupported "initial is write-only"
+  EWriteMapped loc _ -> selectionFailure loc SelectionOperatorUnsupported "mapped construction is write-only"
   EPath loc _ _ -> selectionFailure loc SelectionExpressionRootUnknown "selection expressions do not admit aggregate reg/cmd roots"
   ELiteral loc (LiteralText value) -> literal loc SelectionText (CheckedTextLiteral value)
   ELiteral loc (LiteralIntegral value) -> case expected of
diff --git a/src/Keiro/Dsl/Scaffold.hs b/src/Keiro/Dsl/Scaffold.hs
--- a/src/Keiro/Dsl/Scaffold.hs
+++ b/src/Keiro/Dsl/Scaffold.hs
@@ -1,3 +1,5 @@
+{-# OPTIONS_GHC -Werror=incomplete-patterns #-}
+
 -- | The scaffold engine. Given an 'Aggregate' (and a 'Context' naming the
 -- service and output module-namespace root), it emits deterministic
 -- @-- \@generated@ modules plus create-if-absent Hole modules for the behavior
@@ -62,6 +64,7 @@
     scaffoldWorkqueue,
     scaffoldWorkqueueForService,
     scaffoldReadModel,
+    readModelStem,
     scaffoldReadModelForService,
     resolveCatalogReadModel,
     scaffoldProjectionCatalog,
@@ -79,6 +82,7 @@
     Agg (..),
     ResolvedDomainOutcomeTypes (..),
     aggregateCheckedService,
+    behaviorRequirementsFor,
     ResolvedRegister (..),
     ResolvedCtor (..),
     StructuralProjection (..),
@@ -1063,7 +1067,7 @@
         | any (\obligation -> (.category) obligation == "structural" && (.kind) obligation `elem` [BindingValue, FixtureValue]) obligations
         ]
           <> [ "Keiro.Codec.Nominal (NominalBinding (..), NominalFixtureCases)"
-             | any ((/= "structural") . (.category)) obligations
+             | any (\obligation -> "nominal-" `T.isPrefixOf` obligation.category) obligations
              ]
           <> [ "Data.KindID (KindID)"
              | obligation <- obligations,
@@ -1085,11 +1089,27 @@
                Just (nominal, _) <- [nominalFor obligation],
                ScalarRepresentation NominalNatural <- [(.representation) nominal]
              ]
-    renderObligation obligation = case structuralFor obligation of
+    liftFor obligation = case Map.lookup (MappedKey obligation.mappedName) graph.declarations of
+      Just (ResolvedStructural declaration _) -> (declaration.haskell,) <$> declaration.writeLift
+      Just (ResolvedOpaque declaration) -> (declaration.haskell,) <$> declaration.writeLift
+      Nothing -> Nothing
+    renderLiftObligation obligation = case liftFor obligation of
+      Just (source, lift) ->
+        [ "-- HOLE: supply a pure total versioned write-lift and finite labelled cases.",
+          renderLiftSignature importPlan source lift obligation,
+          obligation.symbol <> " = error " <> tshow ("HOLE: fill " <> obligation.mappedName <> " " <> obligation.symbol)
+        ]
+      Nothing -> error "checked lift obligation has no declaration"
+    renderObligation obligation
+      | obligation.kind `elem` [WriteLiftFunction, WriteLiftCases] = renderLiftObligation obligation
+      | otherwise = renderOrdinaryObligation obligation
+    renderOrdinaryObligation obligation = case structuralFor obligation of
       Nothing -> case nominalFor obligation of
         Just (nominal, binding) -> renderNominalObligation nominal binding obligation
         Nothing -> ["-- HOLE: declaration disappeared before skeleton rendering"]
       Just (declaration, shape) -> case (.kind) obligation of
+        WriteLiftFunction -> renderLiftObligation obligation
+        WriteLiftCases -> renderLiftObligation obligation
         BindingValue -> renderBinding importPlan ctx declaration shape obligation
         FixtureValue ->
           [ "-- HOLE: provide deterministic labelled conformance fixtures for " <> (.name) declaration,
@@ -1112,6 +1132,8 @@
         GeneratedNominal -> Nothing
       pure (nominal, binding)
     renderNominalObligation nominal binding obligation = case (.kind) obligation of
+      WriteLiftFunction -> error "mapped lift on nominal obligation"
+      WriteLiftCases -> error "mapped lift on nominal obligation"
       BindingValue ->
         [ "-- HOLE: complete both total directions; the generated codec remains wire authority.",
           renderNominalObligationSignature importPlan ctx nominal binding obligation,
@@ -1134,6 +1156,35 @@
     intercalateBlank [] = []
     intercalateBlank (section : rest) = section <> concatMap ("" :) rest
 
+liftScalarReference :: LiftSource -> Maybe HaskellReference
+liftScalarReference = \case
+  LiftText -> Just (HaskellReference "Data.Text" "Text" TypeNamespace PreferUnqualified)
+  LiftTime -> Just (HaskellReference "Data.Time" "UTCTime" TypeNamespace PreferUnqualified)
+  LiftNatural -> Just (HaskellReference "Numeric.Natural" "Natural" TypeNamespace PreferUnqualified)
+  LiftInt -> Nothing
+  LiftInteger -> Nothing
+  LiftBool -> Nothing
+
+liftSignatureReferences :: BindingObligationKind -> MappedWriteLift -> [HaskellReference]
+liftSignatureReferences kind lift =
+  maybe [] pure (liftScalarReference lift.source)
+    <> [HaskellReference "Data.Text" "Text" TypeNamespace PreferUnqualified | kind == WriteLiftCases]
+    <> [HaskellReference "Data.List.NonEmpty" "NonEmpty" TypeNamespace PreferUnqualified | kind == WriteLiftCases]
+
+renderLiftSignature :: HaskellImportPlan -> HaskellSource -> MappedWriteLift -> BindingObligation -> Text
+renderLiftSignature importPlan source lift obligation = obligation.symbol <> " :: " <> signature
+  where
+    target = renderReferenceOrDie importPlan (haskellTypeReference source)
+    scalar = maybe (liftSourceName lift.source) (renderReferenceOrDie importPlan) (liftScalarReference lift.source)
+    textType = renderReferenceOrDie importPlan (HaskellReference "Data.Text" "Text" TypeNamespace PreferUnqualified)
+    nonEmpty = renderReferenceOrDie importPlan (HaskellReference "Data.List.NonEmpty" "NonEmpty" TypeNamespace PreferUnqualified)
+    signature = case obligation.kind of
+      WriteLiftFunction -> scalar <> " -> " <> target
+      WriteLiftCases -> nonEmpty <> " (" <> textType <> ", " <> scalar <> ", " <> target <> ")"
+      BindingValue -> error "binding obligation is not a lift"
+      FixtureValue -> error "fixture obligation is not a lift"
+      InitialValue -> error "initial obligation is not a lift"
+
 renderBinding :: HaskellImportPlan -> Context -> StructuralDecl -> ResolvedMappedShape -> BindingObligation -> [Text]
 renderBinding importPlan ctx declaration shape obligation =
   [ "-- HOLE: complete both total directions; wire policy remains in the generated codec.",
@@ -1205,8 +1256,14 @@
 
 bindingSkeletonImportPlan :: Context -> Spec -> TypeGraph -> Text -> [BindingObligation] -> HaskellImportPlan
 bindingSkeletonImportPlan ctx spec graph owner obligations =
-  planImportsOrDie owner (Set.fromList (map (.symbol) obligations)) (Set.fromList (concatMap obligationReferences obligations))
+  planImportsOrDie owner (Set.fromList (map (.symbol) obligations) <> if any ((`elem` [WriteLiftFunction, WriteLiftCases]) . (.kind)) obligations then Set.fromList ["Bool", "Int", "Integer"] else Set.empty) (Set.fromList (concatMap (\obligation -> obligationReferences obligation <> liftReferences obligation) obligations))
   where
+    liftReferences obligation
+      | obligation.kind `elem` [WriteLiftFunction, WriteLiftCases] = case Map.lookup (MappedKey obligation.mappedName) graph.declarations of
+          Just (ResolvedStructural declaration _) -> maybe [] (liftSignatureReferences obligation.kind) declaration.writeLift
+          Just (ResolvedOpaque declaration) -> maybe [] (liftSignatureReferences obligation.kind) declaration.writeLift
+          Nothing -> []
+      | otherwise = []
     obligationReferences obligation = case Map.lookup (MappedKey ((.mappedName) obligation)) ((.declarations) graph) of
       Just (ResolvedStructural declaration shape) ->
         haskellTypeReference ((.haskell) declaration)
@@ -1223,6 +1280,7 @@
                ]
         where
           shapeModuleName = structuralShapeModule ctx ((.name) declaration)
+      Just (ResolvedOpaque declaration) -> [haskellTypeReference declaration.haskell]
       _ -> case nominalForName ((.mappedName) obligation) of
         Just (nominal, binding) ->
           haskellTypeReference ((.haskell) binding)
@@ -1298,6 +1356,8 @@
     <> case (.kind) obligation of
       BindingValue -> error "structural binding signatures are rendered with renderBinding"
       FixtureValue -> "FixtureCases " <> domainType
+      WriteLiftFunction -> error "lift signatures use renderLiftSignature"
+      WriteLiftCases -> error "lift signatures use renderLiftSignature"
       InitialValue -> domainType
   where
     domainType = renderReferenceOrDie importPlan (haskellTypeReference ((.haskell) declaration))
@@ -1309,6 +1369,8 @@
     <> case (.kind) obligation of
       BindingValue -> "NominalBinding " <> domainType <> " " <> representationType
       FixtureValue -> "NominalFixtureCases " <> domainType
+      WriteLiftFunction -> error "lift signatures use renderLiftSignature"
+      WriteLiftCases -> error "lift signatures use renderLiftSignature"
       InitialValue -> domainType
   where
     domainType = renderReferenceOrDie importPlan (haskellTypeReference ((.haskell) binding))
@@ -3179,6 +3241,7 @@
            "  , BehaviorConformanceReport (..)",
            "  , behaviorRequirements",
            "  , behaviorCoverageReport",
+           "  , behaviorObligationReport",
            "  , behaviorConformancePassed",
            "  , behaviorConformancePassedWith",
            "  , renderBehaviorConformanceText",
@@ -3303,7 +3366,18 @@
       <> renderBehaviorRequirementList aggregate
       <> [ "",
            "behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport",
-           "behaviorCoverageReport witnesses =",
+           "behaviorCoverageReport = coverageReportFor behaviorRequirements",
+           "",
+           "-- | Execute one required obligation and the witnesses carrying its key.",
+           "-- Hole-owned initial harness probes use the consumer's history-backed evidence.",
+           "behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport",
+           "behaviorObligationReport key witnesses =",
+           "  coverageReportFor",
+           "    [requirement | requirement <- behaviorRequirements, requirement.requirementKey == key]",
+           "    [witness | witness <- witnesses, behaviorWitnessKey witness == key]",
+           "",
+           "coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport",
+           "coverageReportFor requirements witnesses =",
            "  BehaviorConformanceReport",
            "    { reportRequired = sortedKeys (Map.keys requiredByKey)",
            "    , reportFilled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]",
@@ -3316,7 +3390,7 @@
            "    , reportUnverified = sortedKeys [requirement.requirementKey | (requirement, Right ()) <- executions, not (proofStrength requirement)]",
            "    }",
            " where",
-           "  requiredByKey = Map.fromList [(requirement.requirementKey, requirement) | requirement <- behaviorRequirements]",
+           "  requiredByKey = Map.fromList [(requirement.requirementKey, requirement) | requirement <- requirements]",
            "  witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]",
            "  executions =",
            "    [ (requirement, runWitness requirement witness)",
@@ -3838,10 +3912,11 @@
              -- contract whose every field is one never uses (.:) and would warn
              -- under -Wunused-imports.
              "import Data.Aeson ("
-               <> T.intercalate ", " (["Value", "object", "withObject", "withText"] <> ["(.:)" | usesPlainFieldDecode] <> ["(.=)"])
+               <> T.intercalate ", " (["Value", "object", "withObject", "withText"] <> ["(.:)" | usesPlainFieldDecode] <> ["parseJSON" | hasListFields] <> ["(.=)"])
                <> ")",
              aesonTypesImport
            ]
+        ++ ["import qualified Data.Aeson.Types as Aeson" | hasListFields]
         ++ typedKindIdImports
         ++ T.lines (renderPlannedImports importPlan)
         ++ [ "import Data.Text (Text)",
@@ -3885,20 +3960,24 @@
              "  | kind `elem` " <> renderTextList (map (.name) ((.events) c)) <> " = pure kind",
              "  | otherwise = " <> renderUnknownFailure "message type" "kind" (map (.name) ((.events) c))
            ]
+        ++ (if hasListFields then listParserHelper else [])
   )
     <> if hasTypedTypeIds then "\n" else ""
   where
     payloadTy = pascal ((.name) c) <> "Payload"
-    hasTypedTypeIds = any (any (isTypedTypeId . (.valueType)) . (.fields)) ((.events) c)
-    hasLiteralTypedTypeIds = any (any (isLiteralTypedTypeId . (.valueType)) . (.fields)) ((.events) c)
-    usesPlainFieldDecode = any (any (not . isTypedTypeId . (.valueType)) . (.fields)) ((.events) c)
+    hasTypedTypeIds = any (any (isTypedTypeId . contractScalar . (.valueType)) . (.fields)) ((.events) c)
+    hasLiteralTypedTypeIds = any (any (isLiteralTypedTypeId . contractScalar . (.valueType)) . (.fields)) ((.events) c)
+    hasListFields = any (any (contractIsList . (.valueType)) . (.fields)) ((.events) c)
+    usesPlainFieldDecode = any (any (isPlainScalar . (.valueType)) . (.fields)) ((.events) c)
+    isPlainScalar (CScalar scalar) = not (isTypedTypeId scalar)
+    isPlainScalar CList {} = False
     moduleName = genPrefix <> ".Contract"
     declaredLeaves =
       Map.fromList
         [ (name, declaredLeaf name)
         | event <- (.events) c,
           field <- (.fields) event,
-          CDeclaredId name <- [(.valueType) field]
+          CDeclaredId name <- [contractScalar ((.valueType) field)]
         ]
     importPlan =
       planImportsOrDie
@@ -3925,12 +4004,14 @@
         RequireQualified
     renderedDeclaredLeafHelper prefix name =
       renderReferenceOrDie importPlan (declaredLeafHelperReference prefix (declaredLeaf name))
-    contractValueType CText = "Text"
-    contractValueType CInt = "Int"
-    contractValueType (CTypeId prefix)
+    contractValueType (CScalar scalar) = contractScalarType scalar
+    contractValueType (CList scalar) = "[" <> contractScalarType scalar <> "]"
+    contractScalarType CText = "Text"
+    contractScalarType CInt = "Int"
+    contractScalarType (CTypeId prefix)
       | isJust (contractIdDomainContractFor languageContract prefix) = "(KindID " <> tshow prefix <> ")"
       | otherwise = "Text"
-    contractValueType (CDeclaredId name) =
+    contractScalarType (CDeclaredId name) =
       renderReferenceOrDie importPlan (nominalLeafTypeReference ctx (declaredLeaf name))
     pragmas =
       renderGeneratedLanguagePragmas
@@ -3963,7 +4044,10 @@
     isTypedTypeId _ = False
     isLiteralTypedTypeId (CTypeId prefix) = isJust (contractIdDomainContractFor languageContract prefix)
     isLiteralTypedTypeId _ = False
-    aesonTypesImport = "import Data.Aeson.Types (Parser, explicitParseField, parseEither)"
+    aesonTypesImport =
+      "import Data.Aeson.Types (Parser, explicitParseField, parseEither"
+        <> (if hasListFields then ", (<?>)" else "")
+        <> ")"
     encodeArm e =
       [ "  " <> (.name) e <> " payload ->",
         "    object"
@@ -3993,23 +4077,38 @@
                  ]
               ++ ["                )"]
     encodeField field =
-      tshow ((.wireKey) identity)
-        <> " .= "
-        <> case (.valueType) field of
-          CTypeId prefix
-            | isJust (contractIdDomainContractFor languageContract prefix) -> "KindID.toText payload." <> (.selector) identity
-          CDeclaredId name -> renderedDeclaredLeafHelper "encode" name <> " payload." <> (.selector) identity
-          _ -> "payload." <> (.selector) identity
+      tshow ((.wireKey) identity) <> " .= " <> encoded
       where
         identity = resolveContractFieldIdentity field
+        payloadField = "payload." <> (.selector) identity
+        encoded = case elementEncoder (contractScalar ((.valueType) field)) of
+          Nothing -> payloadField
+          Just encoder -> (if contractIsList ((.valueType) field) then "map " else "") <> encoder <> " " <> payloadField
+    elementEncoder (CTypeId prefix)
+      | isJust (contractIdDomainContractFor languageContract prefix) = Just "KindID.toText"
+    elementEncoder (CDeclaredId name) = Just (renderedDeclaredLeafHelper "encode" name)
+    elementEncoder _ = Nothing
     decodeField field = case (.valueType) field of
-      CTypeId prefix
-        | isJust (contractIdDomainContractFor languageContract prefix) ->
-            "explicitParseField (parseKindIdV7Value @" <> tshow prefix <> ") o " <> tshow wireKey
-      CDeclaredId name -> "explicitParseField " <> renderedDeclaredLeafHelper "parse" name <> " o " <> tshow wireKey
-      _ -> "o .: " <> tshow wireKey
+      CList scalar -> "explicitParseField (parseContractList " <> elementParser scalar <> ") o " <> tshow wireKey
+      CScalar scalar -> case scalar of
+        CTypeId prefix
+          | isJust (contractIdDomainContractFor languageContract prefix) ->
+              "explicitParseField (parseKindIdV7Value @" <> tshow prefix <> ") o " <> tshow wireKey
+        CDeclaredId name -> "explicitParseField " <> renderedDeclaredLeafHelper "parse" name <> " o " <> tshow wireKey
+        _ -> "o .: " <> tshow wireKey
       where
         wireKey = (.wireKey) (resolveContractFieldIdentity field)
+    elementParser (CTypeId prefix)
+      | isJust (contractIdDomainContractFor languageContract prefix) = "(parseKindIdV7Value @" <> tshow prefix <> ")"
+    elementParser (CDeclaredId name) = renderedDeclaredLeafHelper "parse" name
+    elementParser _ = "parseJSON"
+    listParserHelper =
+      [ "",
+        "parseContractList :: (Value -> Parser a) -> Value -> Parser [a]",
+        "parseContractList element value = do",
+        "  items <- parseJSON value :: Parser [Value]",
+        "  traverse (\\(index, item) -> element item <?> Aeson.Index index) (zip [0 :: Int ..] items)"
+      ]
 
 contractNeedsDuplicateRecordFields :: ContractNode -> Bool
 contractNeedsDuplicateRecordFields = hasDuplicateNames . concatMap (map ((.selector) . resolveContractFieldIdentity) . (.fields)) . (.events)
@@ -4021,7 +4120,7 @@
 emitPayloadAdt languageContract valueType tyName events =
   sectionsOf [map dataRecord events, [sumDecl]]
   where
-    hasTypedTypeIds = any (any (isTypedTypeId . (.valueType)) . (.fields)) events
+    hasTypedTypeIds = any (any (isTypedTypeId . contractScalar . (.valueType)) . (.fields)) events
     isTypedTypeId (CTypeId prefix) = isJust (contractIdDomainContractFor languageContract prefix)
     isTypedTypeId CDeclaredId {} = True
     isTypedTypeId _ = False
@@ -4720,7 +4819,7 @@
     ]
   where
     payloadTy = (.payloadName) w
-    stem = lowerFirst (T.concat (map pascal (T.splitOn "_" ((.name) w))))
+    stem = lowerFirst (pascal ((.name) w))
 
 -- | Emit the pgmq retry policy + JobOutcome disposition compiled against the
 -- LIVE @Keiro.PGMQ.Job@ runtime (RetryPolicy / JobOutcome / RetryDelay). This pins
@@ -4768,7 +4867,7 @@
     ]
       ++ ["  " <> pascal ((.outcome) r) <> " -> " <> outcome ((.action) r) | r <- (.disposition) w]
   where
-    outcomeType = T.concat (map pascal (T.splitOn "_" ((.name) w))) <> "Outcome"
+    outcomeType = pascal ((.name) w) <> "Outcome"
     queuePolicyImports =
       [ "JobOrdering (..)",
         "JobOutcome (..)",
@@ -5551,8 +5650,10 @@
 modulePathFor :: Text -> Text -> FilePath
 modulePathFor prefix leaf = T.unpack (T.replace "." "/" prefix <> "/" <> leaf <> ".hs")
 
+-- | The shared lowerCamel stem for a read model's declarations and imports.
+-- Derive from the complete logical name so keyword segments remain capitalized.
 readModelStem :: ReadModelNode -> Text
-readModelStem = lowerFirst . T.concat . map pascal . T.splitOn "_" . (.name)
+readModelStem = lowerFirst . pascal . (.name)
 
 emitReadModelTable :: Text -> Text -> ReadModelNode -> Text
 emitReadModelTable tableModule stem readModel =
@@ -6806,6 +6907,8 @@
   ESubtract _ left right -> binary "-" left right
   EMultiply _ left right -> binary "*" left right
   EPath _ UnqualifiedRoot ["input", field] -> field
+  EWriteInitial {} -> error "write-only initial in selection"
+  EWriteMapped {} -> error "write-only mapped construction in selection"
   EPath _ _ path -> T.intercalate "." path
   ELiteral _ literal -> case literal of
     LiteralText value -> tshow value
@@ -8583,6 +8686,8 @@
 
 typedExpressionChildren :: TypedScalarExpr -> [TypedScalarExpr]
 typedExpressionChildren expression = case (.node) expression of
+  TypedMappedLift _ _ child -> [child]
+  TypedMappedInitial {} -> []
   TypedLiteral {} -> []
   TypedRoot {} -> []
   TypedProject {} -> []
@@ -8830,6 +8935,8 @@
 
 renderKeikiTerm :: HaskellImportPlan -> [ProjectionAlias] -> Agg -> Transition -> TypedScalarExpr -> RenderedKeikiExpr
 renderKeikiTerm importPlan aliases aggregate transition expression = case (.node) expression of
+  TypedMappedLift _ lift child -> renderedAtom ("K.TApp1 " <> renderReferenceOrDie importPlan (qualifiedValueReference lift.function) <> " (" <> (.text) (renderKeikiTerm importPlan aliases aggregate transition child) <> ")")
+  TypedMappedInitial _ value -> renderedAtom ("K.opaqueLit " <> renderReferenceOrDie importPlan (qualifiedValueReference value))
   TypedLiteral value -> renderedAtom (renderKeikiLiteral importPlan aggregate ((.valueType) expression) value)
   TypedRoot (ScalarRegisterRoot registerName _) -> renderedAtom ("B.reg @" <> tshow registerName)
   TypedRoot (ScalarCommandRoot name _) ->
@@ -8908,6 +9015,8 @@
 
 renderOutcomeKeikiTerm :: HaskellImportPlan -> Agg -> Transition -> TypedScalarExpr -> RenderedKeikiExpr
 renderOutcomeKeikiTerm importPlan aggregate transition expression = case (.node) expression of
+  TypedMappedLift {} -> error "write-only mapped construction in outcome"
+  TypedMappedInitial _ value -> renderedAtom ("K.opaqueLit " <> renderReferenceOrDie importPlan (qualifiedValueReference value))
   TypedLiteral value -> renderedAtom (renderKeikiLiteral importPlan aggregate ((.valueType) expression) value)
   TypedRoot (ScalarRegisterRoot registerName _) -> renderedAtom ("B.reg @" <> tshow registerName)
   TypedRoot (ScalarCommandRoot name ownerType) ->
@@ -9133,7 +9242,7 @@
             <> concatMap typedExpressionLiteralTypes resolvedExpressions
         )
     consumerLiteralNominals = nub [nominal | expression <- resolvedExpressions, nominal <- typedConsumerLiteralNominals expression]
-    importPlan = transducerImportPlan aggregate expressionImportTypes consumerLiteralNominals
+    importPlan = transducerImportPlan aggregate expressionImportTypes consumerLiteralNominals (concatMap typedWriteValueReferences resolvedExpressions)
     -- Only a literal names `parse<Id>`; see 'generatedNominalTypeImportsWithParsers'.
     generatedLiteralNominals =
       stableNominals
@@ -9183,15 +9292,16 @@
       TypedRoot ScalarCommandRoot {} -> True
       _ -> False
 
-transducerImportPlan :: Agg -> [ResolvedAggregateType] -> [ResolvedNominalType] -> HaskellImportPlan
-transducerImportPlan aggregate importedTypes literalNominals =
+transducerImportPlan :: Agg -> [ResolvedAggregateType] -> [ResolvedNominalType] -> [HaskellReference] -> HaskellImportPlan
+transducerImportPlan aggregate importedTypes literalNominals writeReferences =
   planImportsOrDie
     ((.genPrefix) aggregate <> ".Transducer")
     (Set.fromList [(.name) aggregate <> "Regs", (.name) aggregate <> "Command", (.name) aggregate <> "Event"])
-    ( Set.unions
-        [ aggregateSourceReferences (aggregateConsumerHaskellSource ((.symbols) aggregate) resolvedType)
-        | resolvedType <- importedTypes
-        ]
+    ( Set.fromList writeReferences
+        <> Set.unions
+          [ aggregateSourceReferences (aggregateConsumerHaskellSource ((.symbols) aggregate) resolvedType)
+          | resolvedType <- importedTypes
+          ]
         <> Set.fromList
           [ reference
           | nominal <- literalNominals,
@@ -9207,6 +9317,14 @@
           ]
     )
 
+typedWriteValueReferences :: TypedScalarExpr -> [HaskellReference]
+typedWriteValueReferences expression = own <> concatMap typedWriteValueReferences (typedExpressionChildren expression)
+  where
+    own = case (.node) expression of
+      TypedMappedLift _ lift _ -> [qualifiedValueReference lift.function]
+      TypedMappedInitial _ value -> [qualifiedValueReference value]
+      _ -> []
+
 typedExpressionImportTypes :: TypedScalarExpr -> [ResolvedAggregateType]
 typedExpressionImportTypes expression = own <> concatMap typedExpressionImportTypes (typedExpressionChildren expression)
   where
@@ -9375,12 +9493,24 @@
       | payloadIsUsed = "d"
       | otherwise = "_d"
     payloadIsUsed = case (.implementation) transition of
-      GeneratedImplementation ->
-        isJust ((.guard) resolved)
-          || not (null ((.writes) resolved))
-          || any outputUsesPayload (zip [1 ..] ((.emits) transition))
+      GeneratedImplementation
+        | any isConstruction (map snd resolved.writes) ->
+            any (anyTypedExpression usesCommand) (maybe [] pure resolved.guard <> map snd resolved.writes)
+              || any outputUsesPayload (zip [1 ..] transition.emits)
+        | otherwise ->
+            isJust ((.guard) resolved)
+              || not (null ((.writes) resolved))
+              || any outputUsesPayload (zip [1 ..] ((.emits) transition))
       HoleImplementation -> True
       LegacyHoleImplementation -> True
+    isConstruction expression = case expression.node of
+      TypedMappedInitial {} -> True
+      TypedMappedLift {} -> True
+      _ -> False
+    usesCommand expression = case expression.node of
+      TypedRoot ScalarCommandRoot {} -> True
+      TypedProject ScalarCommandRoot {} _ -> True
+      _ -> False
     outputUsesPayload (emitIndex, _) = case outputMappingFor aggregate index emitIndex of
       GeneratedCommandIdentity _ fields -> not (null fields)
       HandOwnedEventOutput {} -> True
@@ -10461,12 +10591,13 @@
 pascalFromKebab = generatedCase HaskellName.LogicalWireWord True
 
 generatedCase :: HaskellName.NameSourceKind -> Bool -> Text -> Text
-generatedCase source upper name =
-  case HaskellName.deriveHaskellName source site of
-    Right derived
-      | upper -> HaskellName.renderUpperCamelName ((.upperCamel) derived)
-      | otherwise -> HaskellName.renderLowerCamelName ((.lowerCamel) derived)
-    Left _ -> name
+generatedCase source upper name
+  | upper = case HaskellName.deriveUpperCamelName source site of
+      Right derived -> HaskellName.renderUpperCamelName derived
+      Left _ -> name
+  | otherwise = case HaskellName.deriveHaskellName source site of
+      Right derived -> HaskellName.renderLowerCamelName ((.lowerCamel) derived)
+      Left _ -> name
   where
     site =
       HaskellName.NameSite
diff --git a/src/Keiro/Dsl/ScaffoldRun.hs b/src/Keiro/Dsl/ScaffoldRun.hs
--- a/src/Keiro/Dsl/ScaffoldRun.hs
+++ b/src/Keiro/Dsl/ScaffoldRun.hs
@@ -53,6 +53,7 @@
     originLine,
     pureRefusalsForService,
     auditGeneratedHaskell,
+    generatedImportResolutionViolations,
     missingGeneratedBanners,
     staleAgainst,
     PreparedSourceMove,
@@ -600,11 +601,149 @@
     <> [BehaviorRefusal errors | Left errors <- [deriveBehaviorRequirementsForService service]]
   where
     breaches = firewallBreaches modules
-    namingViolations = generatedNameInvariantViolations modules
+    namingViolations = generatedNameInvariantViolations modules <> generatedImportResolutionViolations modules
 
 generatedNameInvariantViolations :: [ScaffoldModule] -> [Text]
 generatedNameInvariantViolations = concatMap auditGeneratedHaskell
 
+-- | Refuse only plain value imports whose absence is proved by a generated
+-- sibling's complete explicit export list. All other Haskell forms remain
+-- unknown here and are checked by GHC when the consumer compiles the scaffold.
+generatedImportResolutionViolations :: [ScaffoldModule] -> [Text]
+generatedImportResolutionViolations modules = concatMap inspect modules
+  where
+    generatedByName =
+      Map.fromList
+        [ (moduleNameOf ((.path) planned), planned)
+        | planned <- modules,
+          (.kind) planned == Generated
+        ]
+
+    inspect importer = case maskNonCode ((.text) importer) of
+      Left _ -> []
+      Right masked -> concatMap (checkImport importer) (explicitImportStatements masked)
+
+    checkImport importer (importLine, statement) = case explicitValueImport statement of
+      Nothing -> []
+      Just (targetName, importedValues) -> case Map.lookup targetName generatedByName >>= knownExplicitExports of
+        Nothing -> []
+        Just exported ->
+          [ T.pack ((.path) importer)
+              <> ":"
+              <> tshow (importLine + offset)
+              <> ": imports '"
+              <> value
+              <> "' from "
+              <> targetName
+              <> ", which exports no such name"
+          | (offset, value) <- importedValues,
+            not (Set.member value exported)
+          ]
+
+-- Keep indented continuation lines with each top-level import. An import
+-- without an explicit list is intentionally outside this audit.
+explicitImportStatements :: Text -> [(Int, Text)]
+explicitImportStatements source =
+  [ (lineNumber, T.unlines (sourceLine : takeWhile continuation following))
+  | (lineNumber, sourceLine : following) <- zip [1 :: Int ..] (tailsOf (T.lines source)),
+    "import " `T.isPrefixOf` T.stripStart sourceLine
+  ]
+  where
+    continuation line = T.null line || line /= T.stripStart line
+    tailsOf [] = []
+    tailsOf allLines@(_ : rest) = allLines : tailsOf rest
+
+explicitValueImport :: Text -> Maybe (Text, [(Int, Text)])
+explicitValueImport statement = do
+  let (beforeList, listAndRest) = T.breakOn "(" statement
+      wordsBefore = T.words beforeList
+  if T.null listAndRest || "hiding" `elem` wordsBefore then Nothing else pure ()
+  target <- case wordsBefore of
+    "import" : "qualified" : name : _ -> Just name
+    "import" : name : _ -> Just name
+    _ -> Nothing
+  (inside, trailing) <- balancedParens listAndRest
+  if not (T.null (T.strip trailing)) then Nothing else pure ()
+  items <- commaItems inside
+  pure
+    ( target,
+      [ (T.count "\n" beforeList + itemLine + leadingLines item, value)
+      | (itemLine, item) <- items,
+        let value = T.strip item,
+        plainLowerValue value
+      ]
+    )
+
+knownExplicitExports :: ScaffoldModule -> Maybe (Set.Set Text)
+knownExplicitExports generated = do
+  masked <- either (const Nothing) Just (maskNonCode ((.text) generated))
+  header <- case dropWhile (not . T.isPrefixOf "module " . T.stripStart) (T.lines masked) of
+    [] -> Nothing
+    line : following -> Just (T.unlines (line : following))
+  let (beforeList, listAndRest) = T.breakOn "(" header
+  if T.null listAndRest || "where" `T.isInfixOf` beforeList then Nothing else pure ()
+  (inside, trailing) <- balancedParens listAndRest
+  if not ("where" `elem` T.words trailing) then Nothing else pure ()
+  items <- commaItems inside
+  Set.fromList . concat <$> traverse (exportedValueNames . snd) items
+
+exportedValueNames :: Text -> Maybe [Text]
+exportedValueNames raw
+  | plainLowerValue item = Just [item]
+  | plainUpperName item = Just []
+  | otherwise = do
+      let (typeName, childrenAndRest) = T.breakOn "(" item
+      if not (plainUpperName (T.strip typeName)) || T.null childrenAndRest then Nothing else pure ()
+      (children, trailing) <- balancedParens childrenAndRest
+      if not (T.null (T.strip trailing)) then Nothing else pure ()
+      childItems <- commaItems children
+      traverse namedChild (map (T.strip . snd) childItems) >>= pure . concat
+  where
+    item = T.strip raw
+    namedChild child
+      | plainLowerValue child = Just [child]
+      | plainUpperName child = Just []
+      | otherwise = Nothing
+
+plainLowerValue :: Text -> Bool
+plainLowerValue value = case T.uncons value of
+  Just (first, _) -> first >= 'a' && first <= 'z' && T.all identifierCharacter value
+  Nothing -> False
+
+plainUpperName :: Text -> Bool
+plainUpperName value = asciiUpperInitial value && T.all identifierCharacter value
+
+leadingLines :: Text -> Int
+leadingLines = T.count "\n" . T.takeWhile (`elem` [' ', '\t', '\n'])
+
+balancedParens :: Text -> Maybe (Text, Text)
+balancedParens source = case T.uncons source of
+  Just ('(', rest) -> go (1 :: Int) [] (T.unpack rest)
+  _ -> Nothing
+  where
+    go _ _ [] = Nothing
+    go 1 collected (')' : remaining) = Just (T.pack (reverse collected), T.pack remaining)
+    go depth collected ('(' : remaining) = go (depth + 1) ('(' : collected) remaining
+    go depth collected (')' : remaining) = go (depth - 1) (')' : collected) remaining
+    go depth collected (character : remaining) = go depth (character : collected) remaining
+
+-- The offset of each item is retained so a multiline import names the line
+-- containing its missing occurrence, rather than only the opening import line.
+commaItems :: Text -> Maybe [(Int, Text)]
+commaItems = go (0 :: Int) (0 :: Int) (0 :: Int) [] [] . T.unpack
+  where
+    go depth _ itemLine collected items []
+      | depth == 0 = Just (reverse ((itemLine, T.pack (reverse collected)) : items))
+      | otherwise = Nothing
+    go depth currentLine itemLine collected items (character : remaining)
+      | character == '(' = go (depth + 1) currentLine itemLine (character : collected) items remaining
+      | character == ')' && depth > 0 = go (depth - 1) currentLine itemLine (character : collected) items remaining
+      | character == ')' = Nothing
+      | character == ',' && depth == 0 =
+          go depth currentLine currentLine [] ((itemLine, T.pack (reverse collected)) : items) remaining
+      | character == '\n' = go depth (currentLine + 1) itemLine (character : collected) items remaining
+      | otherwise = go depth currentLine itemLine (character : collected) items remaining
+
 -- | Inventory and check declarations in one generated source file.  The
 -- lexical mask keeps comments and literals out of the declaration inventory;
 -- this is deliberately a final defense after the typed naming plan, so a
@@ -2073,6 +2212,8 @@
 obligationKindLabel :: BindingObligationKind -> Text
 obligationKindLabel BindingValue = "binding"
 obligationKindLabel FixtureValue = "fixtures"
+obligationKindLabel WriteLiftFunction = "write-lift-function"
+obligationKindLabel WriteLiftCases = "write-lift-cases"
 obligationKindLabel InitialValue = "initial-value"
 
 renderBracketed :: [Text] -> Text
diff --git a/src/Keiro/Dsl/StructuralConformance.hs b/src/Keiro/Dsl/StructuralConformance.hs
--- a/src/Keiro/Dsl/StructuralConformance.hs
+++ b/src/Keiro/Dsl/StructuralConformance.hs
@@ -160,6 +160,7 @@
       <> concatMap (bindingAssertionDecl rendering) structural
       <> concatMap (nominalAssertionDecl rendering) consumerNominals
       <> concatMap (opaqueAssertionDecl rendering) opaque
+      <> concatMap (writeLiftAssertionDecl rendering) lifts
       <> concatMap (coverageDecl rendering) structural
       <> projectionAssertionDecls rendering structural
   where
@@ -167,10 +168,12 @@
     opaque = [declaration | ResolvedOpaque declaration <- (.declarations) rendering]
     consumerNominals = [leaf | leaf@NominalLeaf {ownership = ConsumerLeaf {}} <- (.nominals) rendering]
     generatedIdAssertions = structuralGeneratedIdAssertions rendering structural
+    lifts = writeLifts ((.declarations) rendering)
     assertionLists =
       [lowerFirst ((.name) declaration) <> "BindingAssertions" | (declaration, _) <- structural]
         <> [lowerFirst ((.name) declaration) <> "OpaqueAssertions" | declaration <- opaque]
         <> [lowerFirst ((.name) leaf) <> "NominalAssertions" | leaf <- consumerNominals]
+        <> [lowerFirst name <> "WriteLiftAssertions" | (name, _, _) <- lifts]
         <> map (generatedIdAssertionList rendering) generatedIdAssertions
         <> [ "[(\"fixture coverage: "
                <> unCanonicalTypeId ((.canonical) declaration)
@@ -262,7 +265,7 @@
     ( planHaskellImports
         ImportEnvironment
           { targetModule = structuralConformanceModuleName ctx,
-            localNames = Set.fromList ["structuralConformanceAssertions", "validFixtureLabels"],
+            localNames = Set.fromList (["structuralConformanceAssertions", "validFixtureLabels"] <> if null (writeLifts declarations) then [] else ["Int", "Integer", "Bool"]),
             reservedQualifiers = Set.fromList ["Aeson", "NonEmpty", "StructuralProjections", "T"]
           }
         references
@@ -324,7 +327,7 @@
         [ (.name) leaf
         | leaf@NominalLeaf {kind = NominalIdLeaf {}, ownership = GeneratedLeaf} <- nominals
         ]
-    references = declarationReferences <> shapeReferences <> generatedShapeReferences <> nominalReferences <> generatedNominalReferences
+    references = Set.fromList [reference | (_, _, lift) <- writeLifts declarations, reference <- maybe [] pure (writeLiftScalarReference lift.source)] <> Set.fromList [reference | (_, source, lift) <- writeLifts declarations, reference <- [conformanceTypeReference source, conformanceQualifiedValueReference lift.function, conformanceQualifiedValueReference lift.fixtures]] <> declarationReferences <> shapeReferences <> generatedShapeReferences <> nominalReferences <> generatedNominalReferences
 
 conformanceTypeReference :: HaskellSource -> HaskellReference
 conformanceTypeReference source =
@@ -558,6 +561,45 @@
 
 parenthesize :: Text -> Text
 parenthesize value = "(" <> value <> ")"
+
+writeLifts :: [ResolvedMappedDecl] -> [(Name, HaskellSource, MappedWriteLift)]
+writeLifts =
+  concatMap
+    ( \case
+        ResolvedStructural declaration _ -> [(declaration.name, declaration.haskell, lift) | lift <- maybe [] pure declaration.writeLift]
+        ResolvedOpaque declaration -> [(declaration.name, declaration.haskell, lift) | lift <- maybe [] pure declaration.writeLift]
+    )
+
+writeLiftScalarReference :: LiftSource -> Maybe HaskellReference
+writeLiftScalarReference = \case
+  LiftTime -> Just (HaskellReference "Data.Time" "UTCTime" TypeNamespace PreferUnqualified)
+  LiftNatural -> Just (HaskellReference "Numeric.Natural" "Natural" TypeNamespace PreferUnqualified)
+  LiftText -> Nothing
+  LiftInt -> Nothing
+  LiftInteger -> Nothing
+  LiftBool -> Nothing
+
+writeLiftAssertionDecl :: ConformanceRendering -> (Name, HaskellSource, MappedWriteLift) -> [Text]
+writeLiftAssertionDecl rendering (name, source, lift) =
+  [ "",
+    lowerFirst name <> "WriteLiftAssertions :: [(String, Bool)]",
+    lowerFirst name <> "WriteLiftAssertions =",
+    "  (" <> tshow ("write-lift fixture labels: " <> name) <> ", all (not . T.null . T.strip) labels && length labels == length (nub labels)) :",
+    "  [ (" <> tshow ("write-lift case: " <> name <> "/") <> " <> T.unpack label, apply input == expected)",
+    "  | (label, input, expected) <- NonEmpty.toList cases",
+    "  ]",
+    "  where",
+    "    apply :: " <> scalar <> " -> " <> target,
+    "    apply = " <> function,
+    "    cases :: NonEmpty.NonEmpty (T.Text, " <> scalar <> ", " <> target <> ")",
+    "    cases = " <> fixtures,
+    "    labels = [label | (label, _, _) <- NonEmpty.toList cases]"
+  ]
+  where
+    scalar = case lift.source of LiftText -> "T.Text"; other -> maybe (liftSourceName other) (renderReference rendering) (writeLiftScalarReference other)
+    target = renderReference rendering (conformanceTypeReference source)
+    function = renderReference rendering (conformanceQualifiedValueReference lift.function)
+    fixtures = renderReference rendering (conformanceQualifiedValueReference lift.fixtures)
 
 opaqueAssertionDecl :: ConformanceRendering -> OpaqueDecl -> [Text]
 opaqueAssertionDecl rendering declaration =
diff --git a/src/Keiro/Dsl/TypeGraph.hs b/src/Keiro/Dsl/TypeGraph.hs
--- a/src/Keiro/Dsl/TypeGraph.hs
+++ b/src/Keiro/Dsl/TypeGraph.hs
@@ -32,6 +32,12 @@
     checkScalarLeaf,
     MappedDeclError (..),
     CheckedMappedDecl (..),
+    LiftSource (..),
+    liftSourceName,
+    LiftVersion (..),
+    unLiftVersion,
+    MappedWriteLift (..),
+    mappedWriteLift,
     StructuralDecl (..),
     OpaqueDecl (..),
     checkMappedDecl,
@@ -138,6 +144,7 @@
   | EmptyCanonicalTypeId !Text
   | EmptyBindingVersion !Text
   | EmptyCodecIdentity !Text
+  | InvalidMappedWriteLift !Loc !Text
   | EmptyCodecVersion !Text
   deriving stock (Eq, Show, Generic)
 
@@ -323,6 +330,60 @@
   "UTCTime" -> Just NominalTime
   _ -> Nothing
 
+data LiftSource = LiftText | LiftInt | LiftInteger | LiftBool | LiftNatural | LiftTime
+  deriving stock (Eq, Ord, Show, Generic)
+
+liftSourceName :: LiftSource -> Text
+liftSourceName = \case
+  LiftText -> "Text"
+  LiftInt -> "Int"
+  LiftInteger -> "Integer"
+  LiftBool -> "Bool"
+  LiftNatural -> "Natural"
+  LiftTime -> "Time"
+
+newtype LiftVersion = LiftVersion {unLiftVersion :: Text}
+  deriving stock (Eq, Ord, Show, Generic)
+
+unLiftVersion :: LiftVersion -> Text
+unLiftVersion (LiftVersion value) = value
+
+data MappedWriteLift = MappedWriteLift
+  { source :: !LiftSource,
+    function :: !QualifiedValueName,
+    version :: !LiftVersion,
+    fixtures :: !QualifiedValueName,
+    loc :: !Loc
+  }
+  deriving stock (Eq, Show, Generic)
+
+mappedWriteLift :: CheckedMappedDecl -> Maybe MappedWriteLift
+mappedWriteLift (CheckedStructural declaration _) = declaration.writeLift
+mappedWriteLift (CheckedOpaque declaration) = declaration.writeLift
+
+checkWriteLift :: MappedWriteLiftDecl -> Either (NonEmpty MappedDeclError) MappedWriteLift
+checkWriteLift declaration = do
+  source <- case declaration.source of
+    TText -> pure LiftText
+    TInt -> pure LiftInt
+    TInteger -> pure LiftInteger
+    TBool -> pure LiftBool
+    TNatural -> pure LiftNatural
+    TTime -> pure LiftTime
+    _ -> invalid "write-lift source must be a direct Text, Int, Integer, Bool, Natural, or Time scalar"
+  function <- symbol "function" declaration.function
+  fixtures <- symbol "fixtures" declaration.fixtures
+  version <- case declaration.version of
+    Just value | not (T.null (T.strip value)) -> pure (LiftVersion value)
+    _ -> invalid "write-lift requires a non-empty version"
+  pure MappedWriteLift {source, function, version, fixtures, loc = declaration.loc}
+  where
+    invalid :: Text -> Either (NonEmpty MappedDeclError) a
+    invalid message = Left (InvalidMappedWriteLift declaration.loc message :| [])
+    symbol key = \case
+      Just value | not (T.null (T.strip value)) -> pure (QualifiedValueName value)
+      _ -> invalid ("write-lift requires a qualified " <> key <> " symbol")
+
 data StructuralDecl = StructuralDecl
   { name :: !Name,
     haskell :: !HaskellSource,
@@ -331,6 +392,7 @@
     canonical :: !CanonicalTypeId,
     fixtures :: !QualifiedValueName,
     initial :: !(Maybe QualifiedValueName),
+    writeLift :: !(Maybe MappedWriteLift),
     loc :: !Loc
   }
   deriving stock (Eq, Show, Generic)
@@ -340,6 +402,7 @@
     haskell :: !HaskellSource,
     codecIdentity :: !CodecIdentity,
     codecVersion :: !CodecVersion,
+    writeLift :: !(Maybe MappedWriteLift),
     fixtures :: !QualifiedValueName,
     initial :: !(Maybe QualifiedValueName),
     loc :: !Loc
@@ -352,13 +415,14 @@
   deriving stock (Eq, Show, Generic)
 
 checkMappedDecl :: MappedDecl -> Either (NonEmpty MappedDeclError) CheckedMappedDecl
-checkMappedDecl MappedStructural {msName = name, msHaskell = haskell, msBinding = binding, msBindingVersion = bindingVersion, msCanonical = canonical, msFixtures = fixtures, msInitial = initial, msShape = shape, msLoc = loc} = do
+checkMappedDecl MappedStructural {msName = name, msHaskell = haskell, msBinding = binding, msBindingVersion = bindingVersion, msCanonical = canonical, msFixtures = fixtures, msInitial = initial, msShape = shape, msWriteLift = writeLift, msLoc = loc} = do
   checkedHaskell <- require (MissingHaskellSource name) haskell
   checkedBinding <- require (MissingStructuralBinding name) binding >>= liftOne . mkQualifiedValueName
   checkedBindingVersion <- require (MissingStructuralBindingVersion name) bindingVersion >>= liftOne . mkBindingVersion
   checkedCanonical <- require (MissingCanonicalType name) canonical >>= liftOne . mkCanonicalTypeId
   checkedFixtures <- require (MissingFixtureCases name) fixtures >>= liftOne . mkQualifiedValueName
   checkedInitial <- traverse (liftOne . mkQualifiedValueName) initial
+  checkedLift <- traverse checkWriteLift writeLift
   pure
     ( CheckedStructural
         StructuralDecl
@@ -369,6 +433,7 @@
             canonical = checkedCanonical,
             fixtures = checkedFixtures,
             initial = checkedInitial,
+            writeLift = checkedLift,
             loc = loc
           }
         shape
@@ -390,16 +455,18 @@
             canonical = checkedCanonical,
             fixtures = checkedFixtures,
             initial = checkedInitial,
+            writeLift = Nothing,
             loc = loc
           }
         (ShapeRefined policy)
     )
-checkMappedDecl MappedOpaque {moName = name, moHaskell = haskell, moCodecId = codecIdentity, moCodecVersion = codecVersion, moFixtures = fixtures, moInitial = initial, moLoc = loc} = do
+checkMappedDecl MappedOpaque {moName = name, moHaskell = haskell, moCodecId = codecIdentity, moCodecVersion = codecVersion, moFixtures = fixtures, moInitial = initial, moWriteLift = writeLift, moLoc = loc} = do
   checkedHaskell <- require (MissingHaskellSource name) haskell
   checkedCodecIdentity <- require (MissingOpaqueCodecIdentity name) codecIdentity >>= liftOne . mkCodecIdentity
   checkedCodecVersion <- require (MissingOpaqueCodecVersion name) codecVersion >>= liftOne . mkCodecVersion
   checkedFixtures <- require (MissingFixtureCases name) fixtures >>= liftOne . mkQualifiedValueName
   checkedInitial <- traverse (liftOne . mkQualifiedValueName) initial
+  checkedLift <- traverse checkWriteLift writeLift
   pure
     ( CheckedOpaque
         OpaqueDecl
@@ -409,6 +476,7 @@
             codecVersion = checkedCodecVersion,
             fixtures = checkedFixtures,
             initial = checkedInitial,
+            writeLift = checkedLift,
             loc = loc
           }
     )
@@ -691,7 +759,11 @@
   [ TGAmbiguousName name origins
   | (name, origins) <- Map.toList allOrigins,
     length origins > 1,
-    "mapped" `elem` origins || "built-in" `elem` origins
+    "mapped" `elem` origins || "built-in" `elem` origins,
+    -- Container words introduce applications, not scalar types. A single ID
+    -- with that name is unambiguous in the separately owned contract grammar.
+    -- Retain every collision between declarations and all scalar built-ins.
+    not (name `elem` ["Optional", "List", "Map"] && sort origins == ["built-in", "id"])
   ]
   where
     builtins = ["Text", "Int", "Bool", "Natural", "Time", "UTCTime", "Json", "Optional", "List", "Map"]
@@ -938,7 +1010,7 @@
           )
       | event <- (.events) contract,
         field <- (.fields) event,
-        CDeclaredId nominalName <- [(.valueType) field],
+        CDeclaredId nominalName <- [contractScalar ((.valueType) field)],
         Just NominalLeaf {kind = NominalIdLeaf {}} <- [Map.lookup nominalName nominalByName]
       ]
 
diff --git a/src/Keiro/Dsl/Validate.hs b/src/Keiro/Dsl/Validate.hs
--- a/src/Keiro/Dsl/Validate.hs
+++ b/src/Keiro/Dsl/Validate.hs
@@ -488,6 +488,7 @@
     ContractInvalidTypeIdPrefix
   | ContractIdUnknown
   | ContractTypeIdDomainChanged
+  | ContractListFieldUsedAsKey -- ExecPlan 312 / IR-54: list fields are values, never identities.
   | -- ExecPlan 180: accepted-but-unenforced spec surfaces.
     PublisherOrderingUnknown
   | PublisherBackoffInvalid
@@ -607,6 +608,13 @@
     AggGuardRelationUnknown
   | -- ExecPlan 266: a computed replay-only remedy failed its source proof.
     AggGuardRemedyUnavailable
+  | AggregateExpressionMappedLiftUnsupported
+  | AggregateExpressionMappedLiftProjectionUnsupported
+  | MappedWriteLiftInvalid
+  | AggregateExpressionWriteInitialUnsupported
+  | AggregateExpressionWriteInitialShadowed
+  | MappedWriteLiftChanged
+  | MappedWriteLiftFixturesChanged
   deriving stock (Eq, Ord, Show, Enum, Bounded)
 
 -- | Which command pipeline can actually produce a given 'DiagnosticCode'.
@@ -703,6 +711,8 @@
   MappedFieldAddedWithDefault -> DiffDiagnostic
   MappedFieldRemoved -> DiffDiagnostic
   MappedFieldTypeChanged -> DiffDiagnostic
+  MappedWriteLiftChanged -> DiffDiagnostic
+  MappedWriteLiftFixturesChanged -> DiffDiagnostic
   MappedFixturesChanged -> DiffDiagnostic
   MappedHaskellSourceChanged -> DiffDiagnostic
   MappedInitialChanged -> DiffDiagnostic
@@ -1014,6 +1024,10 @@
       ScalarBooleanOperandRequired -> AggregateExpressionBooleanRequired
       ScalarGuardBoolRequired -> AggregateExpressionGuardBoolRequired
       ScalarWriteTargetUnknown -> AggregateExpressionWriteTargetUnknown
+      ScalarMappedLiftUnsupported -> AggregateExpressionMappedLiftUnsupported
+      ScalarMappedLiftProjectionUnsupported -> AggregateExpressionMappedLiftProjectionUnsupported
+      ScalarWriteInitialUnsupported -> AggregateExpressionWriteInitialUnsupported
+      ScalarWriteInitialShadowed -> AggregateExpressionWriteInitialShadowed
       ScalarWriteTypeMismatch -> AggregateExpressionWriteTypeMismatch
 
     comparisonRule aggregate transition (operator, left, right) =
@@ -1054,6 +1068,8 @@
       EAdd _ left _ -> expressionType aggregate transition left
       ESubtract _ left _ -> expressionType aggregate transition left
       EMultiply _ left _ -> expressionType aggregate transition left
+      EWriteMapped loc _ -> Left (AggregateTypeError loc RegisterUse (UnknownAggregateType "<target-mapped-lift>"))
+      EWriteInitial loc -> Left (AggregateTypeError loc RegisterUse (UnknownAggregateType "<target-initial>"))
       EPath loc _ path -> case path of
         name : _ -> atomType aggregate transition name
         [] -> Left (AggregateTypeError loc EqualityGuardUse (UnknownAggregateType "<empty-path>"))
@@ -1094,6 +1110,8 @@
       EAdd _ left right -> comparisons left <> comparisons right
       ESubtract _ left right -> comparisons left <> comparisons right
       EMultiply _ left right -> comparisons left <> comparisons right
+      EWriteMapped _ child -> comparisons child
+      EWriteInitial {} -> []
       EPath {} -> []
       ELiteral {} -> []
       EAtom {} -> []
@@ -1179,7 +1197,7 @@
 typeGraphDiagnostic :: Spec -> TypeGraphError -> [Diagnostic]
 typeGraphDiagnostic spec = \case
   TGDeclError name declarationError ->
-    [ mkErr (mappedLine spec name) diagnosticCode $
+    [ mkErr (case declarationError of InvalidMappedWriteLift loc _ -> locLine loc; _ -> mappedLine spec name) diagnosticCode $
         "mapped declaration '" <> name <> "': " <> declarationErrorMessage declarationError
     ]
     where
@@ -1196,6 +1214,7 @@
         EmptyBindingVersion {} -> MappedInvalidIdentity
         EmptyCodecIdentity {} -> MappedInvalidIdentity
         EmptyCodecVersion {} -> MappedInvalidIdentity
+        InvalidMappedWriteLift {} -> MappedWriteLiftInvalid
   TGAmbiguousName name origins ->
     [ mkErr (mappedLine spec name) MappedAmbiguousName $
         "type name '" <> name <> "' is ambiguous across " <> T.intercalate ", " origins
@@ -1258,6 +1277,7 @@
   EmptyBindingVersion _ -> "binding-version must be non-empty"
   EmptyCodecIdentity _ -> "opaque codec identity must be non-empty"
   EmptyCodecVersion _ -> "opaque codec version must be non-empty"
+  InvalidMappedWriteLift _ message -> message
 
 mappedLine :: Spec -> Name -> Int
 mappedLine spec name =
@@ -1303,13 +1323,15 @@
            | not (constructorSafe ((.valueType) source))
            ]
 
-    qualifiedFacts MappedStructural {msBinding = binding, msFixtures = fixtures, msInitial = initial, msLoc = loc} =
-      concatMap (qualifiedRule loc) [("binding", binding), ("fixtures", fixtures), ("initial", initial)]
+    qualifiedFacts MappedStructural {msBinding = binding, msFixtures = fixtures, msInitial = initial, msWriteLift = writeLift, msLoc = loc} =
+      liftFacts writeLift ++ concatMap (qualifiedRule loc) [("binding", binding), ("fixtures", fixtures), ("initial", initial)]
     qualifiedFacts MappedRefined {mrBinding = binding, mrFixtures = fixtures, mrInitial = initial, mrLoc = loc} =
       concatMap (qualifiedRule loc) [("binding", binding), ("fixtures", fixtures), ("initial", initial)]
-    qualifiedFacts MappedOpaque {moFixtures = fixtures, moInitial = initial, moLoc = loc} =
-      concatMap (qualifiedRule loc) [("fixtures", fixtures), ("initial", initial)]
+    qualifiedFacts MappedOpaque {moFixtures = fixtures, moInitial = initial, moWriteLift = writeLift, moLoc = loc} =
+      liftFacts writeLift ++ concatMap (qualifiedRule loc) [("fixtures", fixtures), ("initial", initial)]
 
+    liftFacts = maybe [] (\lift -> concatMap (qualifiedRule lift.loc) [("write-lift function", lift.function), ("write-lift fixtures", lift.fixtures)])
+
     qualifiedRule loc (category, value) = case value of
       Just symbol
         | not (T.null symbol) && not (qualifiedValueSafe symbol) ->
@@ -2060,11 +2082,23 @@
        in HaskellName.plannedOccurrence targetModule HaskellName.FieldSpace scope ((.selector) identity) site
 
     aggregateHarnessOccurrences aggregate =
-      transitionHelpers <> sampleConstants
+      transitionHelpers <> witnessBookkeepingHelpers <> sampleConstants
       where
+        witnessBookkeepingHelpers =
+          [ HaskellName.plannedOccurrence targetModule HaskellName.ValueSpace "" "holeWitnessFilled" site
+          | any (\transition -> (.source) transition == initialState && (.mode) transition == TmLive && (.implementation) transition == HoleImplementation) ((.transitions) aggregate),
+            let site =
+                  HaskellName.NameSite
+                    { HaskellName.kind = HaskellName.GeneratedHelperSite,
+                      HaskellName.logicalName = "holeWitnessFilled",
+                      HaskellName.owner = "aggregate:" <> (.name) aggregate <> ":hole-witness-bookkeeping",
+                      HaskellName.line = locLine ((.loc) aggregate)
+                    }
+          ]
         transitionHelpers =
           concat
             [ [helperOccurrence "accept" ("accept" <> commandName) transition]
+                <> [helperOccurrence "hole witness" ("holeWitness" <> commandName) transition | (.implementation) transition == HoleImplementation]
                 <> [helperOccurrence "forward/replay" ("forwardReplay" <> commandName) transition | not (null ((.emits) transition))]
             | transition <- (.transitions) aggregate,
               (.source) transition == initialState,
@@ -2436,7 +2470,7 @@
             <> T.pack (show reason)
       | event <- (.events) contract,
         field <- (.fields) event,
-        CTypeId prefix <- [(.valueType) field],
+        CTypeId prefix <- [contractScalar ((.valueType) field)],
         Just _ <- [contractIdDomainContractFor languageContract prefix],
         Just reason <- [TypeID.checkPrefix prefix]
       ]
@@ -2454,7 +2488,7 @@
             <> declaredIdProblem declaredName
       | event <- (.events) contract,
         field <- (.fields) event,
-        CDeclaredId declaredName <- [(.valueType) field],
+        CDeclaredId declaredName <- [contractScalar ((.valueType) field)],
         all ((/= declaredName) . (.name)) ((.ids) spec)
       ]
     declaredIdProblem declaredName
@@ -3603,9 +3637,15 @@
               binding <- (.binds) i,
               (.field) binding `Set.notMember` resolvableFields c
             ],
+            [ mkErr (locLine ((.loc) i)) ContractListFieldUsedAsKey $
+                "intake '" <> (.name) i <> "' dedupe key '" <> (.dedupeKey) i <> "' is a List field of accepted events " <> T.intercalate ", " (listDedupeEvents c) <> "; dedupe identity must be a scalar envelope or event field"
+            | enforcesSpecSurfaceClosures languageContract,
+              not (null (listDedupeEvents c))
+            ],
             [ mkErr (locLine ((.loc) i)) IntakeDedupeKeyUnresolved $
                 "intake '" <> (.name) i <> "' dedupe key '" <> (.dedupeKey) i <> "' is not an envelope or accepted-event field"
             | enforcesSpecSurfaceClosures languageContract,
+              null (listDedupeEvents c),
               (.dedupeKey) i `Set.notMember` resolvableFields c
             ],
             [ mkErr (locLine ((.loc) i)) IntakeDecodeSchemaVersionMismatch $
@@ -3640,6 +3680,14 @@
         (.required) binding || (.crossCheck) binding
       ]
     lookupContract n = case [c | c <- specContracts spec, (.name) c == n] of (c : _) -> Just c; [] -> Nothing
+    listDedupeEvents contract
+      | (.dedupeKey) i `Set.member` canonicalIntakeEnvelopeFields = []
+      | otherwise =
+          [ (.name) event
+          | event <- (.events) contract,
+            (.name) event `elem` (.accept) i,
+            any (\field -> (.name) field == (.dedupeKey) i && contractIsList ((.valueType) field)) ((.fields) event)
+          ]
     resolvableFields contract =
       canonicalIntakeEnvelopeFields
         <> Set.fromList
@@ -3722,13 +3770,31 @@
     outboxField = case [emitNode | NEmit emitNode <- (.nodes) spec, (.name) emitNode == (.emit) p] of
       [] -> []
       emitNode : _ ->
-        [ mkErr publisherLine PublisherOutboxFieldUnresolved $
-            "publisher '" <> (.name) p <> "' outboxId field '" <> (.outboxField) p <> "' is not messageId, idempotencyKey, or a field of an event mapped by emit '" <> (.emit) p <> "'"
+        [ mkErr publisherLine ContractListFieldUsedAsKey $
+            "publisher '" <> (.name) p <> "' outboxId field '" <> (.outboxField) p <> "' is a List field of an event mapped by emit '" <> (.emit) p <> "'; outbox identity must be messageId, idempotencyKey, or a scalar contract field"
         | enforcesSpecSurfaceClosures languageContract,
-          (.outboxField) p `Set.notMember` allowedOutboxFields emitNode
+          usesListIdentity emitNode
         ]
+          ++ [ mkErr publisherLine PublisherOutboxFieldUnresolved $
+                 "publisher '" <> (.name) p <> "' outboxId field '" <> (.outboxField) p <> "' is not messageId, idempotencyKey, or a field of an event mapped by emit '" <> (.emit) p <> "'"
+             | enforcesSpecSurfaceClosures languageContract,
+               not (usesListIdentity emitNode),
+               (.outboxField) p `Set.notMember` allowedOutboxFields emitNode
+             ]
+    usesListIdentity emitNode =
+      (.outboxField) p `notElem` ["messageId", "idempotencyKey"]
+        && (.outboxField) p `elem` listContractFields emitNode
+    listContractFields emitNode =
+      [ (.name) field
+      | contract <- specContracts spec,
+        (.name) contract == (.contract) emitNode,
+        event <- (.events) contract,
+        (.name) event `elem` map (.event) ((.map) emitNode),
+        field <- (.fields) event,
+        contractIsList ((.valueType) field)
+      ]
     allowedOutboxFields emitNode =
-      Set.fromList ("messageId" : "idempotencyKey" : mappedContractFields emitNode)
+      Set.fromList ("messageId" : "idempotencyKey" : filter (`notElem` listContractFields emitNode) (mappedContractFields emitNode))
     mappedContractFields emitNode =
       [ (.dslName) (resolveContractFieldIdentity field)
       | contract <- specContracts spec,
@@ -5220,6 +5286,8 @@
 exprNames (EMultiply _ a b) = exprNames a ++ exprNames b
 exprNames (EPath _ _ (name : _)) = [name]
 exprNames (EPath _ _ []) = []
+exprNames (EWriteMapped _ child) = exprNames child
+exprNames EWriteInitial {} = []
 exprNames ELiteral {} = []
 exprNames (EAtom (AName n)) = [n]
 exprNames (EAtom (ABool _)) = []
diff --git a/src/Keiro/Dsl/Workspace.hs b/src/Keiro/Dsl/Workspace.hs
--- a/src/Keiro/Dsl/Workspace.hs
+++ b/src/Keiro/Dsl/Workspace.hs
@@ -1407,6 +1407,8 @@
 
 instance HasLocs DomainOutcomeTypes
 
+instance HasLocs ContractScalarType
+
 instance HasLocs ContractType
 
 instance HasLocs CorrelateDecl
@@ -1473,6 +1475,8 @@
 instance HasLocs InputDecl
 
 instance HasLocs IntakeNode
+
+instance HasLocs MappedWriteLiftDecl
 
 instance HasLocs MappedDecl
 
diff --git a/test/Keiro/Dsl/FrontendProfiles.hs b/test/Keiro/Dsl/FrontendProfiles.hs
--- a/test/Keiro/Dsl/FrontendProfiles.hs
+++ b/test/Keiro/Dsl/FrontendProfiles.hs
@@ -76,10 +76,12 @@
               DomainCommandOutcomeSyntax -> version 5
               DeclarativeRouterSelectionSyntax -> version 5
               SeparatedProjectionQueryPolicySyntax -> version 5
+              MappedRegisterConstructionSyntax -> version 6
               DelegatedInboxSyntax -> version 6
               ProcessReactionSyntax -> version 6
               WorkqueueFifoHeadsSyntax -> version 6
               ContractDeclaredIdSyntax -> version 6
+              ContractListFieldSyntax -> version 6
               KeyedMapSyntax -> version 6
               BareStructuralMappingSyntax -> version 6
               CalendarDaySyntax -> version 6
@@ -207,6 +209,7 @@
     FeatureCase ProcessReactionSyntax "reactions" processReactionFeatureBody,
     FeatureCase WorkqueueFifoHeadsSyntax "fifo-heads" (featureBody WorkqueueFifoHeadsSyntax),
     FeatureCase ContractDeclaredIdSyntax "ProfileId" (featureBody ContractDeclaredIdSyntax),
+    FeatureCase ContractListFieldSyntax "List" (featureBody ContractListFieldSyntax),
     FeatureCase BareStructuralMappingSyntax "value" (featureBody BareStructuralMappingSyntax),
     FeatureCase CalendarDaySyntax "Day" (featureBody CalendarDaySyntax),
     FeatureCase TextSetSyntax "Set" (featureBody TextSetSyntax),
@@ -215,6 +218,7 @@
 
 featureBody :: LanguageFeature -> Text
 featureBody = \case
+  MappedRegisterConstructionSyntax -> T.unlines ["context profile", "aggregate Counter", "  regs count Int = 0", "  states Open", "  command Add { amount:Int }", "  event Added = fields(Add)", "  Open -- Add --> write count := mapped(cmd.amount) ; emit Added ; goto Open"]
   ExplicitIdAdmissionDomainSyntax -> T.unlines ["context profile", "id ProfileId prefix=profile domain=typeid-v5-or-v7"]
   NominalBindingSyntax -> T.unlines ["context profile", "id ProfileId prefix=profile using {}"]
   IntegerScalarSyntax -> T.unlines ["context profile", "aggregate Counter", "  regs", "    count Integer = 0", "  states Open"]
@@ -294,6 +298,7 @@
         "  disposition { storeFailure -> retry 5s commandRejected -> deadLetter decodeFailure -> deadLetter onCodecReject -> deadLetter }",
         "}"
       ]
+  ContractListFieldSyntax -> T.replace "profileId: ProfileId" "profileIds: List ProfileId" (featureBody ContractDeclaredIdSyntax)
   ContractDeclaredIdSyntax ->
     T.unlines
       [ "context profile",
@@ -371,7 +376,7 @@
       ]
 
 allFeatures :: [LanguageFeature]
-allFeatures = [ExplicitIdAdmissionDomainSyntax, NominalBindingSyntax, IntegerScalarSyntax, TypedAggregateExpressionSyntax, ExplicitTransitionImplementationSyntax, FieldAliasSyntax, ProjectionCatalogSyntax, ExternalReadContractSyntax, MappedConsumerSurfaceSyntax, DomainCommandOutcomeSyntax, DeclarativeRouterSelectionSyntax, SeparatedProjectionQueryPolicySyntax, DelegatedInboxSyntax, ProcessReactionSyntax, WorkqueueFifoHeadsSyntax, ContractDeclaredIdSyntax, KeyedMapSyntax, BareStructuralMappingSyntax, CalendarDaySyntax, TextSetSyntax, RefinedBase16Syntax]
+allFeatures = [MappedRegisterConstructionSyntax, ContractListFieldSyntax, ExplicitIdAdmissionDomainSyntax, NominalBindingSyntax, IntegerScalarSyntax, TypedAggregateExpressionSyntax, ExplicitTransitionImplementationSyntax, FieldAliasSyntax, ProjectionCatalogSyntax, ExternalReadContractSyntax, MappedConsumerSurfaceSyntax, DomainCommandOutcomeSyntax, DeclarativeRouterSelectionSyntax, SeparatedProjectionQueryPolicySyntax, DelegatedInboxSyntax, ProcessReactionSyntax, WorkqueueFifoHeadsSyntax, ContractDeclaredIdSyntax, KeyedMapSyntax, BareStructuralMappingSyntax, CalendarDaySyntax, TextSetSyntax, RefinedBase16Syntax]
 
 processReactionFeatureBody :: Text
 processReactionFeatureBody =
diff --git a/test/Keiro/Dsl/MappedRegisterConstruction.hs b/test/Keiro/Dsl/MappedRegisterConstruction.hs
new file mode 100644
--- /dev/null
+++ b/test/Keiro/Dsl/MappedRegisterConstruction.hs
@@ -0,0 +1,445 @@
+module Keiro.Dsl.MappedRegisterConstruction (mappedRegisterConstructionSpec) where
+
+import Control.Exception (bracket)
+import Control.Monad (filterM, forM_, unless)
+import Data.Aeson qualified as Aeson
+import Data.Aeson.KeyMap qualified as KeyMap
+import Data.Foldable (toList)
+import Data.List (findIndex)
+import Data.List.NonEmpty qualified as NE
+import Data.Map.Strict qualified as Map
+import Data.Set qualified as Set
+import Data.Text (Text)
+import Data.Text qualified as T
+import Data.Text.IO qualified as TIO
+import Keiro.Dsl.CanonicalEncoding (canonicalExpr)
+import Keiro.Dsl.Diff qualified as Diff
+import Keiro.Dsl.ExplainBindings
+import Keiro.Dsl.FoldFingerprint
+import Keiro.Dsl.Grammar hiding (Spec)
+import Keiro.Dsl.LanguageVersion
+import Keiro.Dsl.MappedConsumer
+import Keiro.Dsl.Parser
+import Keiro.Dsl.PrettyPrint
+import Keiro.Dsl.ReplayImpact
+import Keiro.Dsl.Scaffold
+import Keiro.Dsl.ScaffoldRecord (ScaffoldRecord (..), parseRecord)
+import Keiro.Dsl.ScaffoldRun (ScaffoldReport (..), executeServiceScaffold, scaffoldServiceModules)
+import Keiro.Dsl.SemanticContract
+import Keiro.Dsl.Validate
+import Keiro.Dsl.Workspace qualified as W
+import System.Directory (createDirectory, createDirectoryIfMissing, doesFileExist, getTemporaryDirectory, removeDirectoryRecursive, removeFile)
+import System.Exit (ExitCode (..))
+import System.FilePath (takeDirectory, (</>))
+import System.IO (hClose, openTempFile)
+import System.Process (readProcessWithExitCode)
+import Test.Hspec
+
+mappedRegisterConstructionSpec :: Spec
+mappedRegisterConstructionSpec = describe "mapped register construction" $ do
+  it "extends only candidate syntax while preserving runtime capabilities" $ do
+    languageVersionsSupportingFeature MappedRegisterConstructionSyntax `shouldBe` [currentAuthoringLanguageVersion]
+    syntaxProfileIdentifier ((NE.last languageRegistry).syntaxProfile) `shouldBe` "keiro-dsl/syntax-profile/5"
+    runtimeProfileIdentifier ((NE.last languageRegistry).runtimeSemanticsProfile) `shouldBe` "keiro-dsl/runtime-semantics/5"
+  it "checks and round-trips write-only target initial and a Time lift" $ do
+    source <- fixture
+    service <- parseChecked source
+    errors service `shouldBe` []
+    reparsed <- parseChecked ("language keiro-dsl 6\n" <> renderSpec (checkedSpec service))
+    renderSpec (checkedSpec reparsed) `shouldBe` renderSpec (checkedSpec service)
+    let modules = scaffoldServiceModules (defaultContext "mapped-register-construction") service
+        transducer = T.unlines [entry.text | entry <- modules, "Transducer.hs" `T.isSuffixOf` T.pack entry.path]
+    transducer `shouldSatisfy` T.isInfixOf "K.opaqueLit"
+    transducer `shouldSatisfy` T.isInfixOf "K.TApp1"
+    transducer `shouldSatisfy` T.isInfixOf "B.requireGuard"
+    transducer `shouldSatisfy` T.isInfixOf "B.slot @\"dormantSince\" =:"
+    let skeletons = T.unlines [entry.text | entry <- modules, entry.kind == HoleStub]
+    skeletons `shouldSatisfy` T.isInfixOf "atTime :: UTCTime -> MaybeTime"
+    skeletons `shouldSatisfy` T.isInfixOf "NonEmpty (Text, UTCTime, MaybeTime)"
+    skeletons `shouldSatisfy` (not . T.isInfixOf "NominalBinding")
+  it "refuses mapped syntax in Language 5 at its marker" $ do
+    source <- fixture
+    let old = T.replace "language keiro-dsl 6" "language keiro-dsl 5" source
+    case parseSource "language5.keiro" old of
+      Left failure -> renderParseFailure failure `shouldSatisfy` T.isInfixOf "LanguageFeatureRequiresVersion"
+      Right _ -> expectationFailure "Language 5 accepted candidate syntax"
+  it "keeps Language 5 initial roots and Language 6 qualified roots unambiguous" $ do
+    let source version rhs = T.unlines ["language keiro-dsl " <> version, "context roots", "aggregate Roots", "  regs initial Int = 0", "  states Empty Done!", "  command Set {}", "  event SetEvent = fields(Set)", "  Empty -- Set -->", "    write initial := " <> rhs, "    emit SetEvent", "    goto Done", "  wire kind=ctorName fields=camelCase schemaVersion=1"]
+    old <- parseChecked (source "5" "initial")
+    errors old `shouldBe` []
+    new <- parseChecked (source "6" "initial")
+    codes new `shouldContain` [AggregateExpressionWriteInitialShadowed]
+    qualified <- parseChecked (source "6" "reg.initial")
+    errors qualified `shouldBe` []
+    arithmetic <- parseChecked (T.replace "Int" "Integer" (source "6" "initial + 1"))
+    errors arithmetic `shouldBe` []
+  it "diagnoses command initial shadowing and preserves continued initial paths" $ do
+    let source rhs = T.unlines ["language keiro-dsl 6", "context roots", "aggregate Roots", "  regs value Int = 0", "  states Empty Done!", "  command Set { initial:Int }", "  event SetEvent = fields(Set)", "  Empty -- Set -->", "    write value := " <> rhs, "    emit SetEvent", "    goto Done", "  wire kind=ctorName fields=camelCase schemaVersion=1"]
+    forM_ ["initial", "(initial)", "((initial))"] $ \rhs -> do
+      shadow <- parseChecked (source rhs)
+      codes shadow `shouldContain` [AggregateExpressionWriteInitialShadowed]
+    qualified <- parseChecked (source "cmd.initial")
+    errors qualified `shouldBe` []
+    continued <- parseChecked (source "initial.field")
+    codes continued `shouldContain` [AggregateExpressionPathInvalid]
+    codes continued `shouldSatisfy` (not . elem AggregateExpressionWriteInitialShadowed)
+  it "keeps initial-named ID literal syntax outside the contextual construction marker" $ do
+    let source version = T.unlines ["language keiro-dsl " <> version, "context roots", "aggregate Roots", "  regs value Int = 0", "  states Empty Done!", "  command Set { value:Int }", "  event SetEvent = fields(Set)", "  Empty -- Set -->", "    write value := initial(\"example\")", "    emit SetEvent", "    goto Done", "  wire kind=ctorName fields=camelCase schemaVersion=1"]
+    old <- parseChecked (source "5")
+    new <- parseChecked (source "6")
+    let expressions service = map (canonicalExpr . snd) (concatMap (.writes) (aggregate service).transitions)
+    expressions old `shouldBe` ["initial(\"example\")"]
+    expressions new `shouldBe` expressions old
+  it "rejects absent lifts, incomplete blocks, and duplicate declarations at their boundary" $ do
+    source <- fixture
+    let withoutLift = T.unlines (takeWhile (not . T.isInfixOf "write-lift from") (T.lines source)) <> "}\n" <> snd (T.breakOn "aggregate Lifecycle" source)
+    absent <- parseChecked withoutLift
+    codes absent `shouldContain` [AggregateExpressionMappedLiftUnsupported]
+    forM_ ["    function = \"Conformance.MappedRegisterConstruction.Lift.atTime\"\n", "    version = \"1\"\n", "    fixtures = \"Conformance.MappedRegisterConstruction.Lift.atTimeCases\"\n"] $ \fact -> do
+      incomplete <- parseChecked (T.replace fact "" source)
+      codes incomplete `shouldContain` [MappedWriteLiftInvalid]
+    let extra = "  write-lift from Time { function = \"Example.Lift.construct\" version = \"1\" fixtures = \"Example.Lift.cases\" }\n"
+    case parseSource "duplicate.keiro" (T.replace "aggregate Lifecycle" (extra <> "aggregate Lifecycle") source) of
+      Left _ -> pure ()
+      Right _ -> expectationFailure "misplaced lift parsed as a top-level declaration"
+    case parseSource "duplicate.keiro" (T.replace "  write-lift from Time {" (extra <> "  write-lift from Time {") source) of
+      Left failure -> renderParseFailure failure `shouldSatisfy` T.isInfixOf "duplicate write-lift"
+      Right _ -> expectationFailure "duplicate write-lift was accepted"
+  it "rejects invalid initial targets and mapped source types before generation" $ do
+    source <- fixture
+    forM_
+      [ ("write dormantSince := initial", "write automatic := initial", AggregateExpressionWriteInitialUnsupported),
+        ("mapped(cmd.markedAt)", "mapped(true)", AggregateExpressionOperandTypeMismatch),
+        ("write-lift from Time", "write-lift from Optional Time", MappedWriteLiftInvalid),
+        ("version = \"1\"\n    fixtures", "version = \"\"\n    fixtures", MappedWriteLiftInvalid),
+        ("Lift.atTime\"", "Lift.Bad\"", MappedInvalidHaskellName),
+        ("Lift.atTimeCases\"", "bad.atTimeCases\"", MappedInvalidHaskellName)
+      ]
+      $ \(before, after, wanted) -> do
+        changed <- parseChecked (T.replace before after source)
+        codes changed `shouldContain` [wanted]
+  it "rejects predicates even with a Bool lift source" $ do
+    source <- fixture
+    changed <- parseChecked (T.replace "mapped(cmd.markedAt)" "mapped(reg.automatic == true)" (T.replace "write-lift from Time" "write-lift from Bool" source))
+    codes changed `shouldContain` [AggregateExpressionOperatorUnsupported]
+  it "preserves exclusive generated guard/write ownership" $ do
+    source <- fixture
+    changed <- parseChecked (T.replace "write dormantSince := mapped(cmd.markedAt)" "implementation hole\n    write dormantSince := mapped(cmd.markedAt)" source)
+    codes changed `shouldContain` [AggregateTransitionOwnershipConflict]
+  it "records lift provenance and round-trips new obligation kinds" $ do
+    service <- fixture >>= parseChecked
+    let mappings = (consumerPlanForService service).mappings
+    length mappings `shouldBe` 1
+    Aeson.eitherDecode (Aeson.encode mappings) `shouldBe` Right mappings
+    let obligations = either (error . show) id (bindingObligationsForService service)
+    map (.kind) obligations `shouldMatchList` [WriteLiftFunction, WriteLiftCases]
+    Aeson.eitherDecode (Aeson.encode obligations) `shouldBe` Right obligations
+    (consumerPlanForService service).modules `shouldContain` ["Conformance.MappedRegisterConstruction.Lift"]
+  it "decodes mapping ledgers written before the optional lift field existed" $ do
+    let bytes = "{\"schema\":1,\"mode\":\"opaque\",\"specName\":\"Legacy\",\"package\":\"domain\",\"module\":\"Domain\",\"type\":\"Legacy\",\"codecIdentity\":\"legacy\",\"codecVersion\":\"1\"}"
+    case Aeson.eitherDecode bytes :: Either String MappingIdentity of
+      Left message -> expectationFailure message
+      Right OpaqueMapping {writeLift} -> writeLift `shouldBe` Nothing
+      Right _ -> expectationFailure "wrong mapping mode"
+  it "resolves each real revision for lift removal and source replacement" $ do
+    source <- fixture
+    old <- parseChecked source
+    let withoutLift =
+          T.unlines (takeWhile (not . T.isInfixOf "write-lift from") (T.lines source))
+            <> "}\n"
+            <> snd (T.breakOn "aggregate Lifecycle" source)
+    removal <- parseChecked (T.replace "mapped(cmd.markedAt)" "initial" withoutLift)
+    replacement <- parseChecked (T.replace "mapped(cmd.markedAt)" "mapped(reg.automatic)" (T.replace "write-lift from Time" "write-lift from Bool" source))
+    forM_ [removal, replacement] $ \new -> do
+      errors new `shouldBe` []
+      replayImpactServices old new `shouldBe` Right (ReplayAffected (Map.singleton "Lifecycle" (AggregateImpact (Set.fromList ["Created", "Marked", "Pinged", "Awakened", "ClosedEvent", "Reopened"]) True)))
+  it "versions used behavior, excluding evidence and unused lifts from fold identity" $ do
+    source <- fixture
+    old <- parseChecked source
+    new <- parseChecked (T.replace "version = \"1\"\n    fixtures" "version = \"2\"\n    fixtures" source)
+    cases <- parseChecked (T.replace "Lift.atTimeCases" "Lift.alternateCases" source)
+    fingerprint old `shouldNotBe` fingerprint new
+    fingerprint old `shouldBe` fingerprint cases
+    replayImpactServices old cases `shouldBe` Right ReplayNeutral
+    let copies = T.replace "mapped(cmd.markedAt)" "reg.dormantSince" source
+    unused <- parseChecked copies
+    unusedNew <- parseChecked (T.replace "version = \"1\"\n    fixtures" "version = \"2\"\n    fixtures" copies)
+    fingerprint unused `shouldBe` fingerprint unusedNew
+    replayImpactServices unused unusedNew `shouldBe` Right ReplayNeutral
+    let changes = either (error . show) id (Diff.diffServices old new)
+    map changeCode changes `shouldContain` [MappedWriteLiftChanged, AggFoldSurfaceChanged]
+  it "frames used lift provenance as compact JSON, preserving arbitrary version characters" $ do
+    source <- fixture
+    service <- parseChecked source
+    let liftVersion = "λ:\"|\n"
+        spec = checkedSpec service
+        change declaration@MappedOpaque {moWriteLift = Just lift} = declaration {moWriteLift = Just (MappedWriteLiftDecl lift.source lift.function (Just liftVersion) lift.fixtures lift.loc)}
+        change declaration = declaration
+        changed = checkedServiceWithSpec spec {mapped = map change spec.mapped} service
+        surface = either (error . show) id (aggregateFoldSurfaceForService changed (aggregate changed))
+    surface `shouldSatisfy` T.isInfixOf "mapped-write-lifts=[[\"dormantSince\",\"MaybeTime\",\"Time\",\"Conformance.MappedRegisterConstruction.Lift.atTime\",\"λ:\\\"|\\n\"]]"
+    canonicalExpr (EWriteInitial noLoc) `shouldBe` "initial"
+
+  it "keeps another aggregate using only whole-value copies unchanged" $ do
+    source <- fixture
+    let (_, machine) = T.breakOn "aggregate Lifecycle" source
+        copy = T.replace "aggregate Lifecycle" "aggregate CopyOnly" (T.replace "mapped(cmd.markedAt)" "reg.dormantSince" (T.replace "write dormantSince := initial" "write dormantSince := reg.dormantSince" machine))
+        combined = source <> "\n" <> copy
+    old <- parseChecked combined
+    new <- parseChecked (T.replace "version = \"1\"\n    fixtures" "version = \"2\"\n    fixtures" combined)
+    errors old `shouldBe` []
+    errors new `shouldBe` []
+    let copyAggregate service = case [value | NAggregate value <- (checkedSpec service).nodes, value.name == "CopyOnly"] of
+          value : _ -> value
+          [] -> error "copy aggregate missing"
+    aggregateFoldFingerprintForService old (copyAggregate old) `shouldBe` aggregateFoldFingerprintForService new (copyAggregate new)
+    case replayImpactServices old new of
+      Right (ReplayAffected impacts) -> Map.keys impacts `shouldBe` ["Lifecycle"]
+      result -> expectationFailure (show result)
+  it "pins multiple used-lift tuples and escaped version text in write order" $ do
+    source <- fixture
+    service <- parseChecked (T.replace "    automatic Bool = False" "    automatic Bool = False\n    secondSince MaybeTime = initial" (T.replace "write dormantSince := mapped(cmd.markedAt)" "write dormantSince := mapped(cmd.markedAt)\n    write secondSince := mapped(cmd.markedAt)" source))
+    let spec = checkedSpec service
+        change declaration@MappedOpaque {moWriteLift = Just lift} = declaration {moWriteLift = Just (MappedWriteLiftDecl lift.source lift.function (Just "λ:\"|\n") lift.fixtures lift.loc)}
+        change declaration = declaration
+        changed = checkedServiceWithSpec spec {mapped = map change spec.mapped} service
+        surface = either (error . show) id (aggregateFoldSurfaceForService changed (aggregate changed))
+        fields = [snd (T.breakOn "mapped-write-lifts=" line) | line <- T.lines surface, "mapped-write-lifts=" `T.isInfixOf` line]
+    golden <- T.stripEnd <$> TIO.readFile "test/fixtures/mapped-register-construction-lifts.golden"
+    fields `shouldBe` [golden, golden]
+  it "keeps historical scaffold records and their mapping drift baseline readable" $ do
+    ledger <- TIO.readFile "test/conformance-structural/keiro-dsl-ledger.context.structural-conformance.txt"
+    case parseRecord ledger of
+      Nothing -> expectationFailure "pre-lift ledger lost its complete scaffold record"
+      Just record -> do
+        record.mappings `shouldSatisfy` (not . null)
+        forM_ record.mappings $ \case
+          StructuralMapping {writeLift} -> writeLift `shouldBe` Nothing
+          OpaqueMapping {writeLift} -> writeLift `shouldBe` Nothing
+          NominalMapping {} -> pure ()
+  it "reports both lift metadata codes with the complete build-only vector" $ do
+    source <- fixture
+    old <- parseChecked source
+    forM_
+      [ (T.replace "Lift.atTime\"" "Lift.alternate\"" source, MappedWriteLiftChanged),
+        (T.replace "Lift.atTimeCases" "Lift.alternateCases" source, MappedWriteLiftFixturesChanged)
+      ]
+      $ \(newSource, wanted) -> do
+        new <- parseChecked newSource
+        let changes = either (error . show) id (Diff.diffServices old new)
+            findings = [value | change <- changes, value <- case change of Diff.Additive value -> [value]; Diff.Advisory value -> [value]; Diff.Breaking value -> [value], value.code == wanted]
+        length findings `shouldBe` 1
+        map (.vector) findings `shouldBe` [Diff.CompatibilityVector Diff.VCompatible Diff.VCompatible Diff.VNotApplicable Diff.VNotApplicable Diff.VNotApplicable Diff.VAdvisory Set.empty]
+        map (.facet) findings `shouldBe` ["mapped-build"]
+  it "keeps event, queue, query, and projection-only lifts build-only and replay-neutral" $ do
+    source <- TIO.readFile "test/fixtures/projection-catalog.keiro"
+    old <- parseChecked (T.replace "language keiro-dsl 5" "language keiro-dsl 6" source)
+    let spec = checkedSpec old
+        lift = MappedWriteLiftDecl TTime (Just "Example.Lift.construct") (Just "1") (Just "Example.Lift.cases") noLoc
+        add declaration@MappedStructural {} = declaration {msWriteLift = Just lift}
+        add declaration@MappedOpaque {} = declaration {moWriteLift = Just lift}
+        add declaration@MappedRefined {} = declaration
+        new = checkedServiceWithSpec spec {mapped = map add spec.mapped} old
+        changes = either (error . show) id (Diff.diffServices old new)
+        liftKinds = [kind | change <- changes, kind <- case change of Diff.Additive kind -> [kind]; Diff.Advisory kind -> [kind]; Diff.Breaking kind -> [kind], kind.code `elem` [MappedWriteLiftChanged, MappedWriteLiftFixturesChanged]]
+    errors new `shouldBe` []
+    liftKinds `shouldSatisfy` (not . null)
+    map (.facet) liftKinds `shouldSatisfy` all (== "mapped-build")
+    map (.vector) liftKinds `shouldSatisfy` all (== Diff.CompatibilityVector Diff.VCompatible Diff.VCompatible Diff.VNotApplicable Diff.VNotApplicable Diff.VNotApplicable Diff.VAdvisory Set.empty)
+    replayImpactServices old new `shouldBe` Right ReplayNeutral
+  it "fails invalid actual revisions rather than manufacturing a fold identity" $ do
+    source <- fixture
+    old <- parseChecked source
+    invalid <- parseChecked (T.replace "mapped(cmd.markedAt)" "mapped(true)" source)
+    fingerprint invalid `shouldSatisfy` either (const True) (const False)
+    replayImpactServices old invalid `shouldSatisfy` either (const True) (const False)
+  it "checks structural record, enum, union, bare, and refined initial targets" $ do
+    source <- fixture
+    let (_, machine) = T.breakOn "aggregate Lifecycle" source
+        declaration kind shape withLift =
+          T.unlines
+            [ "language keiro-dsl 6",
+              "context mapped-register-construction",
+              "mapped " <> kind <> " MaybeTime {",
+              "  haskell package=keiro-dsl module=Conformance.MappedRegisterConstruction.Domain type=MaybeTime",
+              "  binding = \"Conformance.MappedRegisterConstruction.Bindings.binding\"",
+              "  binding-version = \"1\"",
+              "  canonical-type = \"conformance.MaybeTime.v1\"",
+              "  fixtures = \"Conformance.MappedRegisterConstruction.Bindings.cases\"",
+              "  initial = \"Conformance.MappedRegisterConstruction.Bindings.noTime\"",
+              if withLift then "  write-lift from Time { function = \"Conformance.MappedRegisterConstruction.Lift.atTime\" version = \"1\" fixtures = \"Conformance.MappedRegisterConstruction.Lift.atTimeCases\" }" else "",
+              "  wire " <> shape,
+              "}"
+            ]
+    forM_
+      [ ("structural record", "object constructor=MaybeTime unknown-fields=reject { value as \"value\" : Time required }"),
+        ("structural enum", "string { NoTime as \"none\" Present as \"present\" }"),
+        ("structural union", "tagged-object tag=\"kind\" contents=\"value\" unknown-fields=reject { NoTime as \"none\" Present as \"present\" : Time }"),
+        ("structural value", "Optional Time")
+      ]
+      $ \(kind, shape) -> do
+        service <- parseChecked (declaration kind shape True <> machine)
+        errors service `shouldBe` []
+        let code = T.unlines [entry.text | entry <- scaffoldServiceModules (defaultContext "mapped-register-construction") service]
+        code `shouldSatisfy` T.isInfixOf "K.TApp1"
+        code `shouldSatisfy` T.isInfixOf "K.opaqueLit"
+    refined <- parseChecked (declaration "refined" "base16-bytes" False <> T.replace "mapped(cmd.markedAt)" "initial" machine)
+    errors refined `shouldBe` []
+  it "compiles fresh opaque lift skeletons for every admitted scalar with strict imports" $ do
+    original <- fixture
+    forM_ ["Text", "Int", "Integer", "Bool", "Natural", "Time", "UTCTime"] $ \sourceType -> withScratch $ \out -> do
+      service <- parseChecked (T.replace "markedAt:Time" ("markedAt:" <> sourceType) (T.replace "write-lift from Time" ("write-lift from " <> sourceType) original))
+      errors service `shouldBe` []
+      let skeleton = case [entry | entry <- scaffoldServiceModules (defaultContext "mapped-register-construction") service, "Construction/Lift.hs" `T.isSuffixOf` T.pack entry.path] of
+            entry : _ -> entry
+            [] -> error "missing opaque lift skeleton"
+          target = out </> skeleton.path
+      createDirectoryIfMissing True (takeDirectory target)
+      TIO.writeFile target skeleton.text
+      compileSkeleton out target
+  it "qualifies a consumer type that collides with the Time lift source" $ withScratch $ \out -> do
+    original <- fixture
+    service <- parseChecked (T.replace "type=MaybeTime" "type=UTCTime" original)
+    let skeleton = case [entry | entry <- scaffoldServiceModules (defaultContext "mapped-register-construction") service, "Construction/Lift.hs" `T.isSuffixOf` T.pack entry.path] of
+          entry : _ -> entry
+          [] -> error "missing collision skeleton"
+        target = out </> skeleton.path
+        domain = out </> "Conformance/MappedRegisterConstruction/Domain.hs"
+    createDirectoryIfMissing True (takeDirectory target)
+    TIO.writeFile target skeleton.text
+    TIO.writeFile domain "module Conformance.MappedRegisterConstruction.Domain (UTCTime (..)) where\nimport Data.Time qualified as Time\nnewtype UTCTime = ConsumerTime Time.UTCTime\n"
+    compileSkeleton out target
+  it "preserves create-once opaque implementations and reports later missing symbols" $ withScratch $ \out -> do
+    source <- fixture
+    service <- parseChecked source
+    let context = defaultContext "mapped-register-construction"
+        run candidate = executeServiceScaffold out False "construction.keiro" (DeclaredLanguage currentAuthoringLanguageVersion (Loc 1)) context candidate (scaffoldServiceModules context candidate)
+        target = out </> "Conformance/MappedRegisterConstruction/Lift.hs"
+    initialReport <- run service
+    initialReport `shouldSatisfy` either (const False) (const True)
+    before <- TIO.readFile target
+    TIO.writeFile target (before <> "\n-- consumer implementation marker\n")
+    let saved = before <> "\n-- consumer implementation marker\n"
+    _ <- run service
+    TIO.readFile target `shouldReturn` saved
+    changed <- parseChecked (T.replace "Lift.atTime\"" "Lift.atTimeV2\"" (T.replace "Lift.atTimeCases" "Lift.atTimeCasesV2" source))
+    result <- run changed
+    case result of
+      Left refusals -> expectationFailure (show refusals)
+      Right report -> map (.symbol) report.newHoles `shouldMatchList` ["atTimeV2", "atTimeCasesV2"]
+    TIO.readFile target `shouldReturn` saved
+  it "retains lift declaration and child locations in a multi-member workspace" $ do
+    source <- fixture
+    let (declarations, machine) = T.breakOn "aggregate Lifecycle" source
+        header = "language keiro-dsl 6\ncontext mapped-register-construction\n"
+    forM_
+      [ (T.replace "Lift.atTime\"" "Lift.Bad\"" declarations, header <> machine, MappedInvalidHaskellName, "00-types.keiro"),
+        (T.replace "write-lift from Time" "write-lift from Optional Time" declarations, header <> machine, MappedWriteLiftInvalid, "00-types.keiro"),
+        (declarations, header <> T.replace "mapped(cmd.markedAt)" "mapped(true)" machine, AggregateExpressionOperandTypeMismatch, "10-machine.keiro")
+      ]
+      $ \(types, transitions, wanted, member) -> do
+        let manifest = either (error . show) id (W.parseWorkspaceManifest "service.keiro-workspace" "service construction\nspec 00-types.keiro\nspec 10-machine.keiro\n")
+            document path text = either (error . show) id (parseSourceDocument path text)
+            workspace = either (error . show) id (W.composeWorkspace "service.keiro-workspace" manifest [("00-types.keiro", types, document "00-types.keiro" types), ("10-machine.keiro", transitions, document "10-machine.keiro" transitions)])
+            located = [NE.head diagnostic.locations | diagnostic <- W.checkWorkspace workspace, diagnostic.code == wanted]
+        located `shouldSatisfy` (not . null)
+        map (.file) located `shouldSatisfy` all (== W.WorkspaceMemberFile member)
+        let memberText = if member == "00-types.keiro" then types else transitions
+            marker = if member == "00-types.keiro" then "write-lift from" else "mapped(true)"
+            row = maybe (error "marker missing") (+ 1) (findIndex (T.isInfixOf marker) (T.lines memberText))
+        map (.line) located `shouldContain` [row]
+
+fixture :: IO Text
+fixture = TIO.readFile "test/fixtures/mapped-register-construction.keiro"
+
+parseChecked :: Text -> IO CheckedService
+parseChecked source = case parseSource "construction.keiro" source of
+  Left failure -> expectationFailure (T.unpack (renderParseFailure failure)) >> error "parse failed"
+  Right parsed -> pure (checkedSource parsed)
+
+errors :: CheckedService -> [Diagnostic]
+errors = filter ((== Error) . (.severity)) . validateService
+
+codes :: CheckedService -> [DiagnosticCode]
+codes = map (.code) . errors
+
+aggregate :: CheckedService -> Aggregate
+aggregate service = case [value | NAggregate value <- (checkedSpec service).nodes] of
+  value : _ -> value
+  [] -> error "fixture has no aggregate"
+
+fingerprint :: CheckedService -> Either FoldSurfaceError Text
+fingerprint service = aggregateFoldFingerprintForService service (aggregate service)
+
+changeCode :: Diff.Change -> DiagnosticCode
+changeCode (Diff.Additive value) = value.code
+changeCode (Diff.Advisory value) = value.code
+changeCode (Diff.Breaking value) = value.code
+
+withScratch :: (FilePath -> IO a) -> IO a
+withScratch = bracket acquire removeDirectoryRecursive
+  where
+    acquire = do
+      root <- getTemporaryDirectory
+      (path, handle) <- openTempFile root "keiro-plan267-skeleton"
+      hClose handle
+      removeFile path
+      createDirectory path
+      pure path
+
+compileSkeleton :: FilePath -> FilePath -> IO ()
+compileSkeleton out target = do
+  packageId <- activeKeikiPackageId
+  (status, stdout, stderr) <-
+    readProcessWithExitCode
+      "cabal"
+      [ "exec",
+        "--enable-tests",
+        "--",
+        "ghc",
+        "-XGHC2024",
+        "-XOverloadedStrings",
+        "-fno-code",
+        "-Wall",
+        "-Werror",
+        "-package-id",
+        packageId,
+        "-outputdir",
+        out,
+        "-i" <> out,
+        "-itest/conformance-mapped-register-construction",
+        target
+      ]
+      ""
+  unless (status == ExitSuccess) (expectationFailure (stdout <> stderr))
+
+activeKeikiPackageId :: IO String
+activeKeikiPackageId = do
+  let packageName = "keiki"
+  planPaths <- filterM doesFileExist ["dist-newstyle/cache/plan.json", "../dist-newstyle/cache/plan.json"]
+  planPath <- case planPaths of
+    candidate : _ -> pure candidate
+    [] -> expectationFailure "could not find Cabal's dist-newstyle/cache/plan.json" >> fail "unreachable"
+  decodedPlan <- Aeson.eitherDecodeFileStrict' planPath :: IO (Either String Aeson.Value)
+  let packageIds = case decodedPlan of
+        Right (Aeson.Object plan) -> case KeyMap.lookup "install-plan" plan of
+          Just (Aeson.Array entries) ->
+            [ T.unpack packageId
+            | Aeson.Object entry <- toList entries,
+              KeyMap.lookup "pkg-name" entry == Just (Aeson.String (T.pack packageName)),
+              KeyMap.lookup "component-name" entry == Just (Aeson.String "lib"),
+              Just (Aeson.String packageId) <- [KeyMap.lookup "id" entry]
+            ]
+          _ -> []
+        _ -> []
+  case packageIds of
+    [packageId] -> pure packageId
+    resolvedPackageIds ->
+      expectationFailure
+        ( "could not resolve one active Cabal package ID for "
+            <> packageName
+            <> ": "
+            <> show resolvedPackageIds
+            <> either (\decodeError -> " (plan decode failed: " <> decodeError <> ")") (const "") decodedPlan
+        )
+        >> fail "unreachable"
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -6,7 +6,7 @@
 module Main (main) where
 
 import Control.Exception (bracket)
-import Control.Monad (filterM, forM, forM_, unless)
+import Control.Monad (filterM, forM, forM_, unless, when)
 import Data.Aeson (Value, object, (.=))
 import Data.Aeson qualified as Aeson
 import Data.Aeson.Key qualified as Key
@@ -87,6 +87,7 @@
 import Keiro.Dsl.MappedCodecPlan
 import Keiro.Dsl.MappedConsumer (ConsumerPlan (..), MappingIdentity (..), consumerPlan)
 import Keiro.Dsl.MappedDiff (MappedFinding (..), diffMapped)
+import Keiro.Dsl.MappedRegisterConstruction (mappedRegisterConstructionSpec)
 import Keiro.Dsl.NominalType hiding (NominalInvalidHaskellSource, NominalInvalidIdPrefix, NominalInvalidIdentity, NominalMissingIngredient)
 import Keiro.Dsl.Parser (parseSource, parseSourceDocument, parseSpec)
 import Keiro.Dsl.PrettyPrint (renderSource, renderSpec, renderTransition)
@@ -98,9 +99,9 @@
 import Keiro.Dsl.ReplayImpact (AggregateImpact (..), CatalogReplayImpact (..), ReplayImpact (..))
 import Keiro.Dsl.ReplayImpact qualified as ReplayImpact
 import Keiro.Dsl.RouterSelection qualified as RouterSelection
-import Keiro.Dsl.Scaffold (Context (..), ModuleKind (..), ModuleRole (..), NominalGenerationOwner (..), NominalUseSite (..), ScaffoldModule (..), StructuralProjection (..), codecComparisonBanner, codecComparisonModule, defaultContext, firewallBreaches, genPrefixFor, generatedBanner, generatedBannerFor, generatedNominalModule, holePrefixFor, isGeneratedBannerLine, moduleRole, obsoleteGeneratedOutputHooks, planNominalGeneration, projectionSpecs, scaffoldAggregate, scaffoldAggregateForService, scaffoldContract, scaffoldContractForService, scaffoldIntake, scaffoldProcess, scaffoldProjectionCatalog, scaffoldPublisher, scaffoldReadModel, scaffoldReadModelForService, scaffoldRefusals, scaffoldReplayAudit, scaffoldRouter, scaffoldStructural, scaffoldWorkqueue, scaffoldWorkqueueForService, windowSeconds)
+import Keiro.Dsl.Scaffold (Context (..), ModuleKind (..), ModuleRole (..), NominalGenerationOwner (..), NominalUseSite (..), ScaffoldModule (..), StructuralProjection (..), codecComparisonBanner, codecComparisonModule, defaultContext, firewallBreaches, genPrefixFor, generatedBanner, generatedBannerFor, generatedNominalModule, holePrefixFor, isGeneratedBannerLine, moduleRole, obsoleteGeneratedOutputHooks, pascal, planNominalGeneration, projectionSpecs, scaffoldAggregate, scaffoldAggregateForService, scaffoldContract, scaffoldContractForService, scaffoldIntake, scaffoldProcess, scaffoldProjectionCatalog, scaffoldPublisher, scaffoldReadModel, scaffoldReadModelForService, scaffoldRefusals, scaffoldReplayAudit, scaffoldRouter, scaffoldStructural, scaffoldWorkqueue, scaffoldWorkqueueForService, windowSeconds)
 import Keiro.Dsl.ScaffoldRecord (GeneratedHaskellNamingEdition (..), ScaffoldModuleRoleRow (..), ScaffoldRecord (..), parseRecord, projectionCatalogFacts, projectionCatalogFactsForService, recordFileName, renderRecord)
-import Keiro.Dsl.ScaffoldRun (GeneratedArtifactCategory (..), GeneratedArtifactImpact (..), GeneratedHaskellEditionImpact (..), GeneratedHaskellEditionUse (..), HoleUseForm (..), MappingDrift (..), QueryContractMigration (..), Refusal (..), ScaffoldReport (..), SourceLanguageDrift (..), StaleGeneratedEvidence (..), StaleModule (..), WriteDisposition (..), auditGeneratedHaskell, checkIndexedServiceDiagnostics, executeScaffold, executeScaffoldWithLanguage, executeServiceScaffold, executeServiceScaffoldWithRuntimePackage, executeServiceScaffoldWithRuntimePackageAndMigrations, executeServiceScaffoldWithRuntimePackageAndNameMigrations, planIndexedServiceScaffold, planIndexedServiceScaffoldWithRuntimePackage, planningRefusalDiagnostics, renderRefusals, renderScaffoldReport, renderSemanticImpactReport, scaffoldModules, scaffoldServiceModules)
+import Keiro.Dsl.ScaffoldRun (GeneratedArtifactCategory (..), GeneratedArtifactImpact (..), GeneratedHaskellEditionImpact (..), GeneratedHaskellEditionUse (..), HoleUseForm (..), MappingDrift (..), QueryContractMigration (..), Refusal (..), ScaffoldReport (..), SourceLanguageDrift (..), StaleGeneratedEvidence (..), StaleModule (..), WriteDisposition (..), auditGeneratedHaskell, checkIndexedServiceDiagnostics, executeScaffold, executeScaffoldWithLanguage, executeServiceScaffold, executeServiceScaffoldWithRuntimePackage, executeServiceScaffoldWithRuntimePackageAndMigrations, executeServiceScaffoldWithRuntimePackageAndNameMigrations, generatedImportResolutionViolations, planIndexedServiceScaffold, planIndexedServiceScaffoldWithRuntimePackage, planningRefusalDiagnostics, pureRefusalsForService, renderRefusals, renderScaffoldReport, renderSemanticImpactReport, scaffoldModules, scaffoldServiceModules)
 import Keiro.Dsl.SemanticContract
 import Keiro.Dsl.SemanticImpact
 import Keiro.Dsl.ServiceHarness
@@ -242,6 +243,7 @@
   conformanceBaselineSpec
   frontendCompatibilitySpec
   frontendSurfaceSpec
+  mappedRegisterConstructionSpec
   frontendProfilesSpec
 
   describe "calendar-day codec policy v1" $ do
@@ -1938,14 +1940,25 @@
             "contract-declared-id-literal-to-declared.keiro",
             "contract-declared-id-prefix-change.keiro",
             "contract-declared-id.keiro",
+            "contract-list-fields.keiro",
+            "contract-list-fields-element-change.keiro",
+            "contract-list-fields-scalar-shape.keiro",
+            "contract-list-fields-literal-to-declared.keiro",
+            "contract-list-fields-prefix-change.keiro",
+            "contract-list-fields-admission-change.keiro",
+            "contract-list-fields-language5.keiro",
             "declarative-router/unbounded.keiro",
             "declarative-router/valid.keiro",
             "direct-optional-id.keiro",
             "domain-command-outcomes.keiro",
+            "history-dependent-holes.keiro",
             "hospital-surge-reactions.keiro",
             "id-admission-domains.keiro",
             "id-domain-migration-v3.keiro",
             "intake-delegated.keiro",
+            "ir50-removal-new.keiro",
+            "ir50-removal-old.keiro",
+            "keyword-segments.keiro",
             "language-duplicate.keiro",
             "language-identifier-v1.keiro",
             "language-identifier-v2.keiro",
@@ -1954,6 +1967,7 @@
             "language-misplaced.keiro",
             "language-v1.keiro",
             "language-zero.keiro",
+            "mapped-register-construction.keiro",
             "mapped-keyed-map-enum-key.keiro",
             "mapped-keyed-map-language5.keiro",
             "mapped-nominal-leaf-default.keiro",
@@ -4032,6 +4046,96 @@
       contract `shouldSatisfy` T.isInfixOf "K.EdgeRef JourneyEmpty 1"
       contract `shouldSatisfy` T.isInfixOf "K.EdgeRef JourneyEmpty 2"
 
+    it "proves hole-owned initial edges through the consumer witness" $ do
+      spec <- specOf "test/fixtures/history-dependent-holes.keiro"
+      aggregate <- case [value | NAggregate value <- (.nodes) spec] of
+        [value] -> pure value
+        _ -> expectationFailure "expected one history-dependent aggregate" >> fail "unreachable"
+      let ctx = defaultContext spec.context
+          modules = scaffoldAggregate ctx spec aggregate <> harnessFor ctx spec aggregate
+          harness = generatedTextEndingIn "Harness.hs" modules
+          contract = generatedTextEndingIn "BehaviorContract.hs" modules
+      harness `shouldSatisfy` T.isInfixOf ".BehaviorHoles (behaviorWitnesses)"
+      T.count "behaviorObligationReport (BehaviorKey \"behavior-v1-" harness `shouldBe` 2
+      T.count "acceptClearProperty :: Bool" harness `shouldBe` 1
+      harness `shouldSatisfy` T.isInfixOf "case step assignmentTransducer (AssignmentActive, initialAssignmentRegs) (Touch"
+      harness `shouldSatisfy` (not . T.isInfixOf "initialAssignmentRegs) (ClearProperty")
+      harness `shouldSatisfy` (not . T.isInfixOf "initialAssignmentRegs) (SetProperty")
+      harness `shouldSatisfy` T.isInfixOf "hole witness filled"
+      harness `shouldSatisfy` T.isInfixOf "hole witness verified"
+      contract `shouldSatisfy` T.isInfixOf "behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport"
+
+    it "omits Keiki stepping imports when every initial edge is hole-owned" $ do
+      spec <-
+        parseInlineSpec "<hole-owned>" $
+          T.unlines
+            [ "language keiro-dsl 6",
+              "context hole-owned",
+              "aggregate Journey",
+              "  regs",
+              "    count Natural = 0",
+              "  states Empty",
+              "  command Start { amount:Natural }",
+              "  event Started = fields(Start)",
+              "  Empty -- Start --> implementation hole ; emit Started ; goto Empty"
+            ]
+      aggregate <- case [value | NAggregate value <- (.nodes) spec] of
+        [value] -> pure value
+        _ -> expectationFailure "expected one hole-owned aggregate" >> fail "unreachable"
+      let harness = generatedTextEndingIn "Harness.hs" (harnessFor (defaultContext spec.context) spec aggregate)
+          coreImports = filter (T.isPrefixOf "import Keiki.Core ") (T.lines harness)
+      coreImports `shouldBe` ["import Keiki.Core (defaultValidationOptions, validateTransducer)"]
+      harness `shouldSatisfy` (not . T.isInfixOf "LANGUAGE OverloadedLabels")
+      harness `shouldSatisfy` T.isInfixOf "holeWitnessStart"
+
+    it "refuses a hole-owned command colliding with witness bookkeeping" $ do
+      spec <-
+        parseInlineSpec "<hole-owned-helper-collision>" $
+          T.unlines
+            [ "language keiro-dsl 6",
+              "context hole-owned-helper-collision",
+              "aggregate Journey",
+              "  regs",
+              "  states Empty",
+              "  command Filled { current:Bool }",
+              "  event Started = fields(Filled)",
+              "  Empty -- Filled --> implementation hole ; emit Started ; goto Empty"
+            ]
+      [diagnostic | diagnostic <- validateSpec spec, (.code) diagnostic == GeneratedOccurrenceCollision]
+        `shouldSatisfy` (not . null)
+
+    it "keeps legacy version-1 initial probes unchanged" $ do
+      spec <-
+        parseInlineSpec "<legacy-probes>" $
+          T.unlines
+            [ "language keiro-dsl 1",
+              "context legacy-probes",
+              "aggregate Journey",
+              "  regs",
+              "  states Empty Active",
+              "  command Start { current:Bool }",
+              "  event Started = fields(Start)",
+              "  Empty -- Start --> emit Started ; goto Active"
+            ]
+      aggregate <- case [value | NAggregate value <- (.nodes) spec] of
+        [value] -> pure value
+        _ -> expectationFailure "expected one legacy aggregate" >> fail "unreachable"
+      let harness = generatedTextEndingIn "Harness.hs" (harnessFor (defaultContext spec.context) spec aggregate)
+      harness `shouldSatisfy` T.isInfixOf "import LegacyProbes.Journey.Holes (journeyTransducer)"
+      harness `shouldSatisfy` T.isInfixOf "case step journeyTransducer (JourneyEmpty, initialJourneyRegs) (Start (StartData False)) of"
+      harness `shouldSatisfy` T.isInfixOf "forwardReplayStart"
+      harness `shouldSatisfy` (not . T.isInfixOf "behaviorObligationReport")
+
+    it "keeps the history-dependent fixture byte-identical across repeat scaffolds" $ do
+      withTempDirectory "keiro-dsl-history-dependent" $ \out -> do
+        let arguments = ["scaffold", "test/fixtures/history-dependent-holes.keiro", "--out", out]
+        (firstCode, firstOut, firstErr) <- runKeiroDsl arguments
+        unless (firstCode == ExitSuccess) (expectationFailure (firstOut <> firstErr))
+        firstTree <- treeSnapshot out
+        (secondCode, secondOut, secondErr) <- runKeiroDsl arguments
+        unless (secondCode == ExitSuccess) (expectationFailure (secondOut <> secondErr))
+        treeSnapshot out `shouldReturn` firstTree
+
     it "refuses duplicate live initial harness helpers with both source locations" $ do
       spec <-
         parseInlineSpec "<initial-helper-collision>" $
@@ -4867,6 +4971,7 @@
                 moCodecVersion = Just "1",
                 moFixtures = Just "Conformance.RefinedBase16.Bindings.contentHashFixtures",
                 moInitial = Just "Conformance.RefinedBase16.Bindings.initialContentHash",
+                moWriteLift = Nothing,
                 moLoc = noLoc
               }
           opaqueSpec =
@@ -4987,6 +5092,7 @@
                 moCodecVersion = Just "1",
                 moFixtures = Just "Conformance.StructuralTextSets.Bindings.textLabelsFixtures",
                 moInitial = Just "Conformance.StructuralTextSets.Bindings.initialTextLabels",
+                moWriteLift = Nothing,
                 moLoc = noLoc
               }
           opaqueSpec =
@@ -5143,6 +5249,7 @@
                 moCodecVersion = Just "1",
                 moFixtures = Just "Example.Mapped.maybeTextCases",
                 moInitial = Nothing,
+                moWriteLift = Nothing,
                 moLoc = noLoc
               }
       inlineGraph <- shouldResolveTypeGraph (mappedSpec [inlineEnvelope])
@@ -5995,6 +6102,191 @@
               }
       auditGeneratedHaskell mutated `shouldSatisfy` any (T.isInfixOf "repeated top-level type signature 'sameValue'")
 
+  describe "Haskell.keyword-segments" $ do
+    let fixturePath = "test/fixtures/keyword-segments.keiro"
+        readModelLine = "readmodel validate_custom_type {"
+        queueLine = "workqueue job_type {"
+        upperFirstOf value = T.toUpper (T.take 1 value) <> T.drop 1 value
+        expectedUpper = T.concat . map upperFirstOf . T.splitOn "_"
+        expectedLower value = T.toLower (T.take 1 value) <> T.drop 1 value
+        keywordSegments =
+          [ "case",
+            "class",
+            "data",
+            "default",
+            "deriving",
+            "do",
+            "else",
+            "foreign",
+            "forall",
+            "if",
+            "import",
+            "in",
+            "infix",
+            "infixl",
+            "infixr",
+            "instance",
+            "let",
+            "module",
+            "newtype",
+            "of",
+            "then",
+            "type",
+            "where"
+          ]
+        modulesFor service = scaffoldServiceModules (defaultContext ((checkedSpec service).context)) service
+        textFor suffix = generatedTextEndingIn suffix
+        importedReadModelName modules =
+          let harness = textFor "ReadModelHarness.hs" modules
+              matching = filter (T.isPrefixOf "import Generated.KeywordSegments.") (T.lines harness)
+              readModelImports = filter (T.isInfixOf ".ReadModel (") matching
+           in case readModelImports of
+                [line] -> T.strip (T.dropEnd 1 (snd (T.breakOnEnd "(" line)))
+                _ -> "<missing read-model import>"
+        assertHarnessImport modules = do
+          let definition = textFor "ReadModel.hs" modules
+              imported = importedReadModelName modules
+          imported `shouldNotBe` "<missing read-model import>"
+          forM_ (map T.strip (T.splitOn "," imported)) $ \value ->
+            definition `shouldSatisfy` T.isInfixOf (value <> " ::")
+
+    it "imports the read-model value actually exported by its definition" $ do
+      spec <- specOf fixturePath
+      assertHarnessImport (modulesFor (legacyCheckedService spec))
+
+    it "emits whole-name spellings for read models and workqueues" $ do
+      spec <- specOf fixturePath
+      let modules = modulesFor (legacyCheckedService spec)
+          output = T.concat (map (.text) modules)
+      forM_ ["Customtype", "customtype", "Jobtype", "jobtype"] $ \bad ->
+        output `shouldSatisfy` (not . T.isInfixOf bad)
+      forM_
+        [ "validateCustomTypeReadModel ::",
+          "ValidateCustomTypeQueryInput",
+          "validateCustomTypeQualifiedTable ::",
+          "jobTypeJobCodec ::",
+          "jobTypePayloadCodec ::",
+          "data JobTypeOutcome"
+        ]
+        (\wanted -> output `shouldSatisfy` T.isInfixOf wanted)
+      concatMap auditGeneratedHaskell modules `shouldBe` []
+
+    it "handles every reserved segment in all positions for both declaration kinds" $ do
+      fixture <- TIO.readFile fixturePath
+      -- Keiro.Dsl.HaskellName is intentionally internal to the library. This
+      -- inventory mirrors its 23 reserved term words for the public generator.
+      forM_ keywordSegments $ \keyword -> do
+        pascal keyword `shouldBe` upperFirstOf keyword
+        forM_ [keyword <> "_registry", "check_" <> keyword <> "_name", "check_" <> keyword] $ \variant -> do
+          let upper = expectedUpper variant
+              lower = expectedLower upper
+          pascal variant `shouldBe` upper
+          readService <- checkedServiceFromText "keyword-readmodel.keiro" (T.replace readModelLine ("readmodel " <> variant <> " {") fixture)
+          [(.code) d | d <- validateService readService, (.severity) d == Error] `shouldBe` []
+          let readModules = modulesFor readService
+              readOutput = T.concat (map (.text) readModules)
+          assertHarnessImport readModules
+          readOutput `shouldSatisfy` T.isInfixOf (lower <> "ReadModel ::")
+          readOutput `shouldSatisfy` T.isInfixOf (pascal lower <> "QueryInput")
+          queueService <- checkedServiceFromText "keyword-workqueue.keiro" (T.replace queueLine ("workqueue " <> variant <> " {") fixture)
+          [(.code) d | d <- validateService queueService, (.severity) d == Error] `shouldBe` []
+          let queueOutput = T.concat (map (.text) (modulesFor queueService))
+          queueOutput `shouldSatisfy` T.isInfixOf (lower <> "JobCodec ::")
+          queueOutput `shouldSatisfy` T.isInfixOf (lower <> "PayloadCodec ::")
+          queueOutput `shouldSatisfy` T.isInfixOf ("data " <> upper <> "Outcome")
+
+    it "still rejects a whole-name Haskell keyword" $ do
+      fixture <- TIO.readFile fixturePath
+      service <- checkedServiceFromText "whole-keyword.keiro" (T.replace readModelLine "readmodel type {" fixture)
+      [(.code) d | d <- validateService service, (.severity) d == Error]
+        `shouldSatisfy` elem GeneratedOccurrenceReserved
+
+    it "keeps single-letter segment names byte-identical" $ do
+      fixture <- TIO.readFile fixturePath
+      forM_ [("a_b_test", "abTest", "AbTest"), ("x_y_coords", "xyCoords", "XyCoords")] $ \(variant, stem, contractStem) -> do
+        service <- checkedServiceFromText "stable-name.keiro" (T.replace readModelLine ("readmodel " <> variant <> " {") fixture)
+        let modules = modulesFor service
+            output = T.concat (map (.text) modules)
+        textFor "ReadModel.hs" modules `shouldSatisfy` T.isInfixOf (stem <> "ReadModel ::")
+        importedReadModelName modules `shouldBe` stem <> "ReadModel"
+        output `shouldSatisfy` T.isInfixOf (contractStem <> "QueryInput")
+
+    it "capitalizes a reserved wire-path piece in public structural projections" $ do
+      source <- TIO.readFile "test/fixtures/mapped-nominal-leaf.keiro"
+      service <-
+        checkedServiceFromText
+          "mapped-keyword-wire.keiro"
+          (T.replace "templateId as \"templateId\"" "templateId as \"type\"" source)
+      let output = T.concat (map (.text) (modulesFor service))
+      forM_ ["templateStateTypeWitness", "templateStateTypeGet", "templateStateTypeRawGet", "\"/type\""] $ \wanted ->
+        output `shouldSatisfy` T.isInfixOf wanted
+
+  describe "Haskell.import-resolution" $ do
+    let definitionName = "Generated.KeywordSegments.Definition"
+        importerName = "Generated.KeywordSegments.Importing"
+        generated path source = ScaffoldModule path source Generated "import audit fixture"
+        definition exports declarations =
+          generated
+            "Generated/KeywordSegments/Definition.hs"
+            ("module " <> definitionName <> exports <> " where\n" <> declarations)
+        importer imports =
+          generated
+            "Generated/KeywordSegments/Importing.hs"
+            ("module " <> importerName <> " (value) where\n" <> imports <> "\nvalue :: Int\nvalue = 1\n")
+        namedDefinition = definition " (fooReadModel)" "fooReadModel :: Int\nfooReadModel = 1\n"
+        violations target imports = generatedImportResolutionViolations [target, importer imports]
+
+    it "refuses a missing plain value through the shared pre-write path" $ do
+      let missing = "import " <> definitionName <> " (fooReadmodel)"
+      violations namedDefinition missing
+        `shouldBe` ["Generated/KeywordSegments/Importing.hs:2: imports 'fooReadmodel' from " <> definitionName <> ", which exports no such name"]
+      spec <- specOf "test/fixtures/keyword-segments.keiro"
+      let service = legacyCheckedService spec
+          ctx = defaultContext (spec.context)
+      pureRefusalsForService ctx service [namedDefinition, importer missing]
+        `shouldSatisfy` any (\case GeneratedNameInvariantViolation messages -> any (T.isInfixOf "fooReadmodel") messages; _ -> False)
+
+    it "accepts matching, multiline, named-child, and qualified value imports" $ do
+      violations namedDefinition ("import " <> definitionName <> " (fooReadModel)") `shouldBe` []
+      violations namedDefinition ("import " <> definitionName <> "\n  ( fooReadModel\n  , missingValue\n  )")
+        `shouldBe` ["Generated/KeywordSegments/Importing.hs:4: imports 'missingValue' from " <> definitionName <> ", which exports no such name"]
+      let namedChild = definition " (T(Ctor, fooReadModel))" "data T = Ctor\nfooReadModel :: Int\nfooReadModel = 1\n"
+      violations namedChild ("import " <> definitionName <> " (fooReadModel)") `shouldBe` []
+      let namedReexport = definition "\n  ( fooReadModel\n  )" "import Generated.KeywordSegments.Origin (fooReadModel)\n"
+      violations namedReexport ("import " <> definitionName <> " (fooReadModel)") `shouldBe` []
+      violations namedDefinition ("import qualified " <> definitionName <> " as Def (missingValue)")
+        `shouldSatisfy` any (T.isInfixOf "missingValue")
+      violations namedDefinition ("import " <> definitionName <> " qualified as Def (fooReadModel)") `shouldBe` []
+      violations namedDefinition ("import " <> definitionName <> " hiding (missingValue)") `shouldBe` []
+
+    it "leaves incomplete export inventories and non-value imports to GHC" $ do
+      let unknownHeaders =
+            [ definition " (T(..), fooReadModel)" "data T = Ctor {field :: Int}\nfooReadModel = 1\n",
+              definition "" "unsignedBinding = 1\n",
+              definition " (module Alias)" "import Generated.KeywordSegments.Alias as Alias\n",
+              definition " (module Alias, fooReadModel)" "import Generated.KeywordSegments.Alias (fooReadModel) as Alias\n",
+              definition " (module Other)" "import Generated.KeywordSegments.Other as Other\n"
+            ]
+      forM_ unknownHeaders $ \target ->
+        violations target ("import " <> definitionName <> " (missingValue)") `shouldBe` []
+      let cyclicA = definition " (module Generated.KeywordSegments.B)" "import Generated.KeywordSegments.B\n"
+          cyclicB = generated "Generated/KeywordSegments/B.hs" ("module Generated.KeywordSegments.B (module " <> definitionName <> ") where\nimport " <> definitionName <> "\n")
+      generatedImportResolutionViolations [cyclicA, cyclicB, importer ("import " <> definitionName <> " (missingValue)")]
+        `shouldBe` []
+      violations namedDefinition ("import " <> definitionName <> " (T(..))") `shouldBe` []
+      violations namedDefinition ("import " <> definitionName <> " (T(Ctor, field))") `shouldBe` []
+      generatedImportResolutionViolations
+        [ importer "import Keiro.ReadModel (missingValue)",
+          ScaffoldModule "KeywordSegments/DefinitionHoles.hs" ("module " <> definitionName <> " (fooReadModel) where\n") HoleStub "test hole"
+        ]
+        `shouldBe` []
+
+    it "accepts current Language 6 and existing generated module sets" $ do
+      forM_ ["test/fixtures/keyword-segments.keiro", "test/fixtures/incident-paging/incident-paging.keiro"] $ \fixture -> do
+        spec <- specOf fixture
+        generatedImportResolutionViolations (scaffoldServiceModules (defaultContext (spec.context)) (legacyCheckedService spec))
+          `shouldBe` []
+
   describe "Haskell.name-migration" $ do
     it "pairs a legacy module path with its stable idiomatic artifact" $ do
       let currentModule =
@@ -8203,6 +8495,272 @@
       codes <- errorCodesOf "test/fixtures/emit-topic-mismatch.keiro"
       codes `shouldContain` [TopicAffinityMismatch]
 
+  describe "contract list fields" $ do
+    let probeSource declarations fields =
+          T.unlines
+            [ "language keiro-dsl 6",
+              "context parser-probe",
+              declarations,
+              "contract notices { schemaVersion 1 discriminator kind topic notices \"probe.notices\"",
+              "event Noticed on notices { " <> fields <> " } }"
+            ]
+        probeFields service =
+          [ ((.name) field, (.selector) field, (.wireKey) field, (.valueType) field)
+          | NContract contract <- (.nodes) (checkedSpec service),
+            event <- (.events) contract,
+            field <- (.fields) event
+          ]
+        checkProbe source = do
+          service <- checkedServiceFromText "parser-probe.keiro" source
+          validateService service `shouldBe` []
+          parsed <- either (\failure -> expectationFailure (show failure) >> fail "unreachable") pure (parseSource "parser-probe.keiro" source)
+          parseSource "parser-probe-pretty.keiro" (renderSource parsed) `shouldBe` Right parsed
+          pure service
+
+    forM_ ["Optional", "Map", "Set", "List", "Listing", "OptionalId", "MapId", "SetId", "ListId", "List_Id"] $ \nominal ->
+      it ("preserves scalar and list ASTs for declared " <> T.unpack nominal) $ do
+        service <- checkProbe (probeSource ("id " <> nominal <> " prefix=probe") ("value: " <> nominal <> " values: List " <> nominal))
+        probeFields service `shouldBe` [("value", Nothing, Nothing, CScalar (CDeclaredId nominal)), ("values", Nothing, Nothing, CList (CDeclaredId nominal))]
+
+    forM_ ["}", "; other: text }", "other: text }", "other haskell selected as \"wire_other\": text }", "other as \"wire_other\": text }", "# next field\n other haskell selected: text }"] $ \ending ->
+      it ("recognizes bare List at a field boundary: " <> T.unpack ending) $ do
+        let source = T.dropEnd 4 (probeSource "id List prefix=probe" "value: List") <> " " <> ending <> " }\n"
+        service <- checkProbe source
+        head (probeFields service) `shouldBe` ("value", Nothing, Nothing, CScalar (CDeclaredId "List"))
+        case drop 1 (probeFields service) of
+          [] -> ending `shouldBe` "}"
+          [(name, selector, wireKey, ty)] -> do
+            name `shouldBe` "other"
+            selector `shouldBe` (if "haskell" `T.isInfixOf` ending then Just "selected" else Nothing)
+            wireKey `shouldBe` (if " as " `T.isInfixOf` ending then Just "wire_other" else Nothing)
+            ty `shouldBe` CScalar CText
+          other -> expectationFailure (show other)
+
+    forM_ ["Optional", "Map", "Set", "List", "list", "LIST", "LiSt"] $ \nominal ->
+      it ("validates an unresolved bare " <> T.unpack nominal <> " as an unknown ID") $ do
+        service <- checkedServiceFromText "unknown-contract-id.keiro" (probeSource "" ("value: " <> nominal))
+        [(.code) diagnostic | diagnostic <- validateService service, (.severity) diagnostic == Error] `shouldBe` [ContractIdUnknown]
+
+    forM_ ["list", "LIST", "LiSt"] $ \word -> do
+      it ("rejects wrong-case container application " <> T.unpack word <> " at its extra operand") $ do
+        let source = probeSource "" ("values: " <> word <> " text")
+        case parseSurfaceSource "wrong-case-list.keiro" source of
+          Left FrontendFailure {span = SourceSpan {start = SourcePoint {offset = startOffset}}} ->
+            T.take 4 (T.drop startOffset source) `shouldBe` "text"
+          other -> expectationFailure (show other)
+      it ("admits a nominal identifier named " <> T.unpack word) $ do
+        service <- checkProbe (probeSource ("id " <> word <> " prefix=probe") ("value: " <> word))
+        probeFields service `shouldBe` [("value", Nothing, Nothing, CScalar (CDeclaredId word))]
+
+    it "preserves exact List applications for every scalar operand" $ do
+      service <- checkProbe (probeSource "id SomeId prefix=probe" "labels: List text positions: List int ids: List typeid \"probe\" named: List SomeId")
+      [ty | (_, _, _, ty) <- probeFields service] `shouldBe` [CList CText, CList CInt, CList (CTypeId "probe"), CList (CDeclaredId "SomeId")]
+
+    it "rejects genuine container applications even when their names are declared IDs" $ do
+      forM_ ["Optional", "Map", "Set", "List"] $ \nominal ->
+        forM_ (filter (/= "List text") [nominal <> " text", "List " <> nominal <> " text"]) $ \ty ->
+          parseSource "malformed-contract.keiro" (probeSource ("id " <> nominal <> " prefix=probe") ("values: " <> ty)) `shouldSatisfy` isLeft
+
+    it "retains scalar built-in and cross-declaration ambiguity checks" $ do
+      forM_
+        [ "id Text prefix=probe",
+          "id List prefix=probe\nenum List { First=first }",
+          "enum Optional { First=first }"
+        ]
+        $ \declarations -> do
+          service <- checkedServiceFromText "ambiguous-types.keiro" (probeSource declarations "value: text")
+          map (.code) (validateService service) `shouldContain` [MappedAmbiguousName]
+
+    it "resolves ambiguous nominal names from a later workspace member" $ do
+      withInlineWorkspace
+        "keiro-contract-nominal-workspace"
+        ( "parser-probe",
+          [ ("contract.keiro", probeSource "" "value: List values: List Optional"),
+            ("ids.keiro", "language keiro-dsl 6\ncontext parser-probe\nid List prefix=list\nid Optional prefix=optional\n")
+          ]
+        )
+        $ \root _ workspace -> do
+          validateService (checkedWorkspace workspace) `shouldBe` []
+          (code, output, err) <- runKeiroDsl ["check", root </> "service.keiro-workspace"]
+          code `shouldBe` ExitSuccess
+          output `shouldContain` "OK"
+          err `shouldBe` ""
+
+    it "scaffolds ambiguous nominal scalars and lists with stable codec shapes" $ do
+      service <- checkProbe (probeSource "id List prefix=list\nid Optional prefix=optional" "value: List values: List List optionalValue: Optional optionalValues: List Optional")
+      let modules = scaffoldServiceModules (defaultContext (checkedSpec service).context) service
+          rendered = generatedTextEndingIn "Notices/Contract.hs" modules
+      scaffoldServiceModules (defaultContext (checkedSpec service).context) service `shouldBe` modules
+      forM_
+        [ "value :: !Nominals.List",
+          "values :: ![Nominals.List]",
+          "optionalValue :: !Nominals.Optional",
+          "optionalValues :: ![Nominals.Optional]",
+          "\"value\" .= NominalLeaves.encodeListLeaf payload.value",
+          "\"values\" .= map NominalLeaves.encodeListLeaf payload.values",
+          "explicitParseField NominalLeaves.parseListLeaf o \"value\"",
+          "explicitParseField (parseContractList NominalLeaves.parseListLeaf) o \"values\""
+        ]
+        $ \fragment -> rendered `shouldSatisfy` T.isInfixOf fragment
+
+    it "lowers list fields of every admitted element type" $ do
+      service <- checkedServiceOf "test/fixtures/contract-list-fields.keiro"
+      let modules = scaffoldServiceModules (defaultContext (checkedSpec service).context) service
+          contractModule = generatedTextEndingIn "Templates/Contract.hs" modules
+          leaves = generatedTextEndingIn "Structural/NominalLeaves.hs" modules
+      validateService service `shouldBe` []
+      forM_
+        [ "templateIds :: ![Nominals.TemplateId]",
+          "claimIds :: ![ClaimId]",
+          "legacyTemplateIds :: ![(KindID \"template\")]",
+          "labels :: ![Text]",
+          "positions :: ![Int]",
+          "\"templateIds\" .= map NominalLeaves.encodeTemplateIdLeaf payload.templateIds",
+          "\"claimIds\" .= map NominalLeaves.encodeClaimIdLeaf payload.claimIds",
+          "\"legacyTemplateIds\" .= map KindID.toText payload.legacyTemplateIds",
+          "explicitParseField (parseContractList NominalLeaves.parseTemplateIdLeaf) o \"templateIds\"",
+          "explicitParseField (parseContractList NominalLeaves.parseClaimIdLeaf) o \"claimIds\"",
+          "explicitParseField (parseContractList (parseKindIdV7Value @\"template\")) o \"legacyTemplateIds\"",
+          "explicitParseField (parseContractList parseJSON) o \"labels\"",
+          "explicitParseField (parseContractList parseJSON) o \"positions\"",
+          "parseContractList :: (Value -> Parser a) -> Value -> Parser [a]",
+          "element item <?> Aeson.Index index"
+        ]
+        $ \fragment -> contractModule `shouldSatisfy` T.isInfixOf fragment
+      forM_ ["parseTemplateIdLeaf", "parseClaimIdLeaf"] $ \fragment -> leaves `shouldSatisfy` T.isInfixOf fragment
+      forM_ [("templateIds", "template"), ("claimIds", "claim"), ("legacyTemplateIds", "template")] $ \(field, prefix) ->
+        idDomainIdentitiesForService service
+          `shouldContain` ["id-domain|name=contract:templates.TemplatesReassigned." <> field <> "|contract=keiro-dsl/id-domain/typeid-v7/1|prefix=" <> prefix <> "|separator=_|json=canonical-json-text"]
+      obligations <- either (\failures -> expectationFailure (show failures) >> fail "unreachable") pure (bindingObligationsForService service)
+      [site | obligation <- obligations, (.mappedName) obligation == "ClaimId", site <- (.useSites) obligation]
+        `shouldContain` ["contract templates event TemplatesReassigned .claimIds : ClaimId"]
+
+    it "refuses nested containers in contract list fields without consuming keyword prefixes" $ do
+      source <- readTestText "test/fixtures/contract-list-fields.keiro"
+      forM_ ["List List TemplateId", "List list TemplateId", "List Optional text", "List Set text", "Optional text", "Map text"] $ \fieldType ->
+        case parseSource "nested.keiro" (T.replace "templateIds: List TemplateId" ("templateIds: " <> fieldType) source) of
+          Left failure -> renderParseFailure failure `shouldSatisfy` T.isInfixOf "nested containers"
+          Right _ -> expectationFailure ("accepted " <> T.unpack fieldType)
+      case parseSource "reserved-map.keiro" (T.replace "templateIds: List TemplateId" "templateIds: List map text" source) of
+        Left failure -> renderParseFailure failure `shouldSatisfy` T.isInfixOf "reserved word map"
+        Right _ -> expectationFailure "accepted List map text"
+      listing <- checkedServiceFromText "listing.keiro" (T.replace "TemplateId" "Listing" source)
+      validateService listing `shouldBe` []
+
+    it "refuses a contract list field element that is not a declared id" $ do
+      source <- readTestText "test/fixtures/contract-list-fields.keiro"
+      service <- checkedServiceFromText "enum-list.keiro" (T.replace "id TemplateId prefix=template" "id TemplateId prefix=template\nenum Channel { Email=email }" (T.replace "labels: List text" "labels: List Channel" source))
+      let failures = [diagnostic | diagnostic <- validateService service, (.severity) diagnostic == Error]
+      map (.code) failures `shouldBe` [ContractIdUnknown]
+      map (.message) failures `shouldSatisfy` any (T.isInfixOf "is an enum")
+
+    it "gates the contract list field token on Language 6" $ do
+      (status, _, err) <- runKeiroDsl ["check", "test/fixtures/contract-list-fields-language5.keiro"]
+      status `shouldBe` ExitFailure 1
+      err `shouldContain` "LanguageFeatureRequiresVersion"
+      err `shouldContain` "contract-list-fields-language5.keiro:11:1"
+      source <- readTestText "test/fixtures/contract-list-fields-language5.keiro"
+      case parseSurfaceSource "list-language5.keiro" source of
+        Left FrontendFailure {code = SourceLanguageError LanguageFeatureRequiresVersion, span = SourceSpan {start = SourcePoint {offset = startOffset, line = startLine, column = startColumn}, end = SourcePoint {offset = endOffset}}} -> do
+          T.take (endOffset - startOffset) (T.drop startOffset source) `shouldBe` "List"
+          (startLine, startColumn) `shouldBe` (11, 18)
+        other -> expectationFailure (show other)
+
+    it "keeps contract list field aliases and import selection" $ do
+      source <- readTestText "test/fixtures/contract-list-fields.keiro"
+      service <- checkedServiceFromText "aliased-list.keiro" (T.replace "templateIds: List TemplateId" "templateIds haskell selectedTemplates as \"template_ids\": List TemplateId" source)
+      let text = generatedTextEndingIn "Templates/Contract.hs" (scaffoldServiceModules (defaultContext (checkedSpec service).context) service)
+      forM_ ["selectedTemplates :: ![Nominals.TemplateId]", "\"template_ids\" .= map NominalLeaves.encodeTemplateIdLeaf payload.selectedTemplates", "o \"template_ids\""] $ \fragment -> text `shouldSatisfy` T.isInfixOf fragment
+      forM_ [False, True] $ \withScalar -> do
+        primitive <- checkedServiceFromText "primitive-list.keiro" (T.unlines ["language keiro-dsl 6", "context primitive", "contract values { schemaVersion 1 discriminator kind topic events \"values.events\"", "event Values on events { labels: List text " <> (if withScalar then "name: text" else "") <> " } }"])
+        let rendered = generatedTextEndingIn "Values/Contract.hs" (scaffoldServiceModules (defaultContext (checkedSpec primitive).context) primitive)
+        validateService primitive `shouldBe` []
+        forM_ ["parseJSON", "import qualified Data.Aeson.Types as Aeson", "(<?>)"] $ \fragment -> rendered `shouldSatisfy` T.isInfixOf fragment
+        ("(.:)" `T.isInfixOf` rendered) `shouldBe` withScalar
+
+    it "refuses contract list fields as identity once per clause with envelope precedence" $ do
+      emitFixture <- readTestText "test/fixtures/emit.keiro"
+      intakeFixture <- readTestText "test/fixtures/intake.keiro"
+      let emitNodes = snd (T.breakOn "emit reservationResponse" emitFixture)
+          intakeNode = snd (T.breakOn "intake incidentInbox" intakeFixture)
+          sourceFor key selectedList =
+            T.unlines
+              [ "language keiro-dsl 6",
+                "context hospital-capacity",
+                "contract emergency { schemaVersion 1 discriminator messageType",
+                "topic hospitalEvents \"emergency.hospital.events\"",
+                "event TransferReservationAccepted on hospitalEvents { " <> key <> ": text }",
+                "event TransferReservationRejected on hospitalEvents { " <> key <> (if selectedList then ": List text }" else ": text }"),
+                "event TransferExpired on hospitalEvents { " <> key <> ": text }",
+                "event PatientAdmitted on hospitalEvents { " <> key <> ": text }",
+                "event Unselected on hospitalEvents { " <> key <> ": List text } }",
+                T.replace "outboxId stable from messageId" ("outboxId stable from " <> key) emitNodes,
+                T.replace
+                  "dedupe key messageId"
+                  ("bind " <> key <> " from body\n  dedupe key " <> key)
+                  ( T.replace
+                      "  bind "
+                      "  # bind "
+                      ( T.replace
+                          "accept IncidentTransferNeedDeclared"
+                          "accept TransferReservationAccepted TransferReservationRejected"
+                          (T.replace "topic incidentEvents" "topic hospitalEvents" intakeNode)
+                      )
+                  )
+              ]
+      forM_ [("values", True, 2), ("messageId", True, 0), ("idempotencyKey", True, 0), ("source", True, 1), ("values", False, 0)] $ \(key, selectedList, count) -> do
+        service <- checkedServiceFromText "list-identity.keiro" (sourceFor key selectedList)
+        let failures = [diagnostic | diagnostic <- validateService service, (.severity) diagnostic == Error]
+        length [() | diagnostic <- failures, (.code) diagnostic == ContractListFieldUsedAsKey] `shouldBe` count
+        map (.code) failures `shouldNotContain` [PublisherOutboxFieldUnresolved, IntakeDedupeKeyUnresolved]
+        map (.code) failures `shouldBe` replicate count ContractListFieldUsedAsKey
+
+    it "classifies contract list field evolution in both directions" $ do
+      let base = "test/fixtures/contract-list-fields.keiro"
+          mutant suffix = "test/fixtures/contract-list-fields-" <> suffix <> ".keiro"
+      forM_ [("element-change", "List text -> List int"), ("scalar-shape", "List TemplateId -> TemplateId")] $ \(suffix, detail) -> do
+        forward <- diffFixtures base (mutant suffix)
+        backward <- diffFixtures (mutant suffix) base
+        forM_ [forward, backward] $ \changes -> do
+          let findings = [finding | Breaking finding <- changes, (.code) finding == ContractFieldChanged]
+          findings `shouldSatisfy` (not . null)
+          forM_ findings $ \finding -> verdictFor PublicConsumer (finding.vector) `shouldBe` VBreaking
+        [(.detail) finding | Breaking finding <- forward] `shouldSatisfy` any (T.isInfixOf detail)
+      forM_ [(base, mutant "literal-to-declared"), (mutant "literal-to-declared", base)] $ \(old, new) -> do
+        changes <- diffFixtures old new
+        [finding | Breaking finding <- changes, (.code) finding == ContractFieldChanged] `shouldBe` []
+        case [finding | Advisory finding <- changes, (.code) finding == ContractFieldChanged] of
+          [finding] -> do
+            verdictFor PublicConsumer (finding.vector) `shouldBe` VNotApplicable
+            verdictFor ConsumerBuild (finding.vector) `shouldBe` VAdvisory
+          findings -> expectationFailure (show findings)
+      prefixChanges <- diffFixtures base (mutant "prefix-change")
+      [finding | Breaking finding <- prefixChanges, (.code) finding == IdPrefixChanged, (.facet) finding == "nominal-contract", ".templateIds" `T.isSuffixOf` (.subject) finding]
+        `shouldSatisfy` any (\finding -> verdictFor PublicConsumer (finding.vector) == VBreaking)
+      forM_ [(base, mutant "admission-change"), (mutant "admission-change", base)] $ \(old, new) -> do
+        changes <- diffFixtures old new
+        [finding | Breaking finding <- changes, (.code) finding == ContractTypeIdDomainChanged, ".templateIds" `T.isSuffixOf` (.subject) finding]
+          `shouldSatisfy` any (\finding -> verdictFor PublicConsumer (finding.vector) == VBreaking)
+
+    it "requires shape and resolved admission equality for literal-declared contract list field transitions" $ do
+      source <- readTestText "test/fixtures/contract-list-fields.keiro"
+      forM_ ["", "List "] $ \shape -> do
+        let wider = T.replace "id TemplateId prefix=template" "id TemplateId prefix=template domain=typeid-v5-or-v7" source
+            oldText = T.replace "legacyTemplateIds: List typeid" ("legacyTemplateIds: " <> shape <> "typeid") wider
+            newText = T.replace ("legacyTemplateIds: " <> shape <> "typeid \"template\"") ("legacyTemplateIds: " <> shape <> "TemplateId") oldText
+        old <- checkedServiceFromText "admission-old.keiro" oldText
+        new <- checkedServiceFromText "admission-new.keiro" newText
+        forM_ [(old, new), (new, old)] $ \(before, after) -> do
+          let changes = diffServices before after
+          [finding | Breaking finding <- changes, (.code) finding == ContractFieldChanged, (.subject) finding == "TemplatesReassigned.legacyTemplateIds"]
+            `shouldSatisfy` any (\finding -> verdictFor PublicConsumer (finding.vector) == VBreaking && "admission" `T.isInfixOf` (.detail) finding)
+          [finding | Advisory finding <- changes, (.code) finding == ContractFieldChanged] `shouldBe` []
+      old <- checkedServiceFromText "shape-old.keiro" (T.replace "legacyTemplateIds: List typeid" "legacyTemplateIds: typeid" source)
+      new <- checkedServiceFromText "shape-new.keiro" (T.replace "legacyTemplateIds: List typeid \"template\"" "legacyTemplateIds: List TemplateId" source)
+      forM_ [(old, new), (new, old)] $ \(before, after) ->
+        [finding | Breaking finding <- diffServices before after, (.code) finding == ContractFieldChanged]
+          `shouldSatisfy` any (\finding -> verdictFor PublicConsumer (finding.vector) == VBreaking)
+
   describe "pgmq workqueue/dispatch (EP-5)" $ do
     it "round-trips the reservation-work spec through parse . pretty" $ do
       input <- readTestText "test/fixtures/reservation-work.keiro"
@@ -8905,6 +9463,162 @@
             ]
       map (.code) findings `shouldBe` [AggGuardTightened, AggGuardTightened]
 
+  describe "IR-50 removal diff" $ do
+    it "checks and fingerprints each real revision before classifying the removal" $ do
+      old <- checkedServiceOf "test/fixtures/ir50-removal-old.keiro"
+      new <- checkedServiceOf "test/fixtures/ir50-removal-new.keiro"
+      forM_ [old, new] $ \service -> do
+        filter ((== Error) . (.severity)) (validateService service) `shouldBe` []
+        CheckedFold.aggregateFoldSurfaceForService service (onlyAggregate (checkedSpec service)) `shouldSatisfy` isRight
+      changes <- either (fail . show) pure (CheckedDiff.diffServices old new)
+      map changeCode changes `shouldContain` [EvtRemovedNotDeprecated, AggGuardRemedyUnavailable]
+      let detailOf (Additive kind) = kind.detail
+          detailOf (Advisory kind) = kind.detail
+          detailOf (Breaking kind) = kind.detail
+          details = T.intercalate "\n" (map detailOf changes)
+      details `shouldSatisfy` T.isInfixOf "Removed commands: Retire."
+      details `shouldSatisfy` T.isInfixOf "Removed states: Retired."
+      details `shouldNotSatisfy` T.isInfixOf "\n\nreplay-only "
+      expected <- readTestText "test/fixtures/ir50-removal-replay.json"
+      impact <- either (fail . show) pure (ReplayImpact.replayImpactServices old new)
+      Aeson.eitherDecodeStrict (TextEncoding.encodeUtf8 expected) `shouldBe` Right (Aeson.toJSON impact)
+
+    it "keeps same-state removal narrow, renames affected, additions and identity neutral" $ do
+      oldText <- readTestText "test/fixtures/ir50-removal-old.keiro"
+      newText <- readTestText "test/fixtures/ir50-removal-new.keiro"
+      old <- checkedServiceFromText "old.keiro" (T.replace "goto Retired" "goto Active" (T.replace "states Active Retired" "states Active" oldText))
+      new <- checkedServiceFromText "new.keiro" newText
+      ReplayImpact.replayImpactServices old new
+        `shouldBe` Right (ReplayAffected (Map.singleton "Example" (AggregateImpact (Set.singleton "RetiredEvent") True)))
+      ReplayImpact.replayImpactServices old old `shouldBe` Right ReplayNeutral
+      ReplayImpact.replayImpactServices new old `shouldBe` Right ReplayNeutral
+      renamed <- checkedServiceFromText "renamed.keiro" (T.replace "Retire" "Archive" (T.replace "RetiredEvent" "ArchivedEvent" oldText))
+      ReplayImpact.replayImpactServices old renamed `shouldSatisfy` either (const False) (/= ReplayNeutral)
+      let removed = checkedServiceWithSpec ((checkedSpec new) {nodes = []}) new
+      ReplayImpact.replayImpactServices old removed
+        `shouldBe` Right (ReplayAffected (Map.singleton "Example" (AggregateImpact (Set.fromList ["Kept", "RetiredEvent"]) True)))
+
+    it "still refuses genuinely invalid output references on either side" $ do
+      old <- checkedServiceOf "test/fixtures/ir50-removal-old.keiro"
+      let brokenSpec = modifyAggregate "Example" (\aggregate -> aggregate {events = []}) (checkedSpec old)
+          broken = checkedServiceWithSpec brokenSpec old
+      ReplayImpact.replayImpactServices broken old `shouldSatisfy` isLeft
+      ReplayImpact.replayImpactServices old broken `shouldSatisfy` isLeft
+
+    it "retains rule closure evidence while removed declarations disappear" $ do
+      oldText <- readTestText "test/fixtures/ir50-removal-old.keiro"
+      newText <- readTestText "test/fixtures/ir50-removal-new.keiro"
+      let decorate =
+            T.replace "aggregate Example" "enum Permission { Allowed=allowed Denied=denied }\nrule permitted : Permission -> Bool\n  ex Allowed => true ; Denied => false\naggregate Example"
+              . T.replace "command Keep { note:Text }" "command Keep { note:Text permitted:Bool }"
+              . T.replace "Keep --> emit" "Keep --> guard cmd.permitted ; emit"
+          changed = T.replace "Allowed => true" "Allowed => false"
+      old <- checkedServiceFromText "rule-old.keiro" (decorate oldText)
+      new <- checkedServiceFromText "rule-new.keiro" (changed (decorate newText))
+      forM_ [old, new] $ \service -> filter ((== Error) . (.severity)) (validateService service) `shouldBe` []
+      -- Retain the states so only the removed body and changed rule can select events.
+      let sameStates service = checkedServiceWithSpec (modifyAggregate "Example" (\aggregate -> aggregate {states = (onlyAggregate (checkedSpec old)).states}) (checkedSpec service)) service
+      ReplayImpact.replayImpactServices old (sameStates new)
+        `shouldBe` Right (ReplayAffected (Map.singleton "Example" (AggregateImpact (Set.fromList ["Kept", "RetiredEvent"]) True)))
+
+    it "detects command-only nominal equality dependencies without broadening unrelated events" $ do
+      base <- readTestText "test/fixtures/ir50-removal-old.keiro"
+      let source =
+            T.replace "aggregate Example" "id TokenId prefix=token\naggregate Example"
+              . T.replace "command Keep { note:Text }" "command Keep { note:Text left:TokenId right:TokenId }"
+              . T.replace "event Kept = fields(Keep)" "event Kept { note:Text }"
+              . T.replace "Keep --> emit" "Keep --> guard cmd.left == cmd.right ; emit"
+              $ base
+      old <- checkedServiceFromText "nominal-old.keiro" source
+      new <- checkedServiceFromText "nominal-new.keiro" (T.replace "prefix=token" "prefix=changed" source)
+      forM_ [old, new] $ \service -> filter ((== Error) . (.severity)) (validateService service) `shouldBe` []
+      ReplayImpact.replayImpactServices old new
+        `shouldBe` Right (ReplayAffected (Map.singleton "Example" (AggregateImpact (Set.singleton "Kept") True)))
+      forM_ [T.replace "TokenId" "RenamedId" source, T.replace "left:TokenId right:TokenId" "left:Text right:Text" source] $ \candidate -> do
+        changedType <- checkedServiceFromText "nominal-type-new.keiro" candidate
+        ReplayImpact.replayImpactServices old changedType
+          `shouldBe` Right (ReplayAffected (Map.singleton "Example" (AggregateImpact (Set.singleton "Kept") True)))
+      loosened <- checkedServiceFromText "nominal-loosened.keiro" (T.replace "guard cmd.left == cmd.right ; " "" source)
+      ReplayImpact.replayImpactServices old loosened `shouldBe` Right ReplayNeutral
+      let guardedSource = T.replace "right:TokenId" "right:TokenId permitted:Bool" (T.replace "guard cmd.left == cmd.right" "guard cmd.left == cmd.right && cmd.permitted" source)
+      guarded <- checkedServiceFromText "nominal-guarded.keiro" guardedSource
+      retypedLoosening <- checkedServiceFromText "nominal-retyped-loosening.keiro" (T.replace " && cmd.permitted" "" (T.replace "left:TokenId right:TokenId" "left:Text right:Text" guardedSource))
+      ReplayImpact.replayImpactServices guarded retypedLoosening
+        `shouldBe` Right (ReplayAffected (Map.singleton "Example" (AggregateImpact (Set.singleton "Kept") True)))
+
+    it "keeps mapped register binding changes replay-visible" $ do
+      source <- readTestText "test/fixtures/consumer-types.keiro"
+      let current = T.replace "language keiro-dsl 4" "language keiro-dsl 6" source
+      old <- checkedServiceFromText "mapped-old.keiro" current
+      new <- checkedServiceFromText "mapped-new.keiro" (T.replace "binding-version = \"1\"" "binding-version = \"2\"" current)
+      forM_ [old, new] $ \service -> filter ((== Error) . (.severity)) (validateService service) `shouldBe` []
+      ReplayImpact.replayImpactServices old new
+        `shouldBe` Right (ReplayAffected (Map.singleton "Catalog" (AggregateImpact (Set.singleton "ArtifactObserved") True)))
+
+    it "detects output ownership changes on otherwise identical replay bodies" $ do
+      source <- readTestText "test/fixtures/ir50-removal-old.keiro"
+      old <- checkedServiceFromText "output-old.keiro" source
+      new <- checkedServiceFromText "output-new.keiro" (T.replace "event Kept = fields(Keep)" "event Kept { note:Text }" source)
+      ReplayImpact.replayImpactServices old new
+        `shouldBe` Right (ReplayAffected (Map.singleton "Example" (AggregateImpact (Set.singleton "Kept") True)))
+
+    it "resolves deleted event-only nominal types solely in the old revision" $ do
+      oldText <- readTestText "test/fixtures/ir50-removal-old.keiro"
+      newText <- readTestText "test/fixtures/ir50-removal-new.keiro"
+      old <- checkedServiceFromText "deleted-type-old.keiro" (T.replace "aggregate Example" "id RetiredId prefix=retired\naggregate Example" (T.replace "command Retire { note:Text }" "command Retire { note:RetiredId }" oldText))
+      new <- checkedServiceFromText "deleted-type-new.keiro" newText
+      forM_ [old, new] $ \service -> filter ((== Error) . (.severity)) (validateService service) `shouldBe` []
+      ReplayImpact.replayImpactServices old new `shouldSatisfy` either (const False) (/= ReplayNeutral)
+
+    forM_ [False, True] $ \workspace ->
+      it ("writes both reports before the breaking gate exits for " <> if workspace then "a workspace with a removed historical member" else "a source") $
+        withTempDirectory "keiro-ir50" $ \repository -> do
+          oldText <- readTestText "test/fixtures/ir50-removal-old.keiro"
+          newText <- readTestText "test/fixtures/ir50-removal-new.keiro"
+          let source = repository </> "service.keiro"
+              manifest = repository </> "service.keiro-workspace"
+              input = if workspace then manifest else source
+              diffPath = repository </> "diff.json"
+              replayPath = repository </> "replay.json"
+              git arguments = readProcessWithExitCode "git" ("-C" : repository : arguments) ""
+              gitOk arguments = do
+                (code, out, err) <- git arguments
+                code `shouldBe` ExitSuccess
+                pure (out <> err)
+              writeManifest members = TIO.writeFile manifest (T.unlines (["service retirement", "module Retirement", "layout collocated"] <> map ("spec " <>) members))
+          TIO.writeFile source oldText
+          when workspace $ do
+            TIO.writeFile (repository </> "removed.keiro") "language keiro-dsl 6\ncontext retirement\nid UnusedId prefix=unused\n"
+            writeManifest ["service.keiro", "removed.keiro"]
+          (oldCode, oldOut, oldErr) <- runKeiroDsl ["check", input]
+          (oldCode, oldOut <> oldErr) `shouldSatisfy` ((== ExitSuccess) . fst)
+          _ <- gitOk ["init", "--quiet"]
+          _ <- gitOk ["add", "."]
+          _ <- gitOk ["-c", "user.name=IR50 Test", "-c", "user.email=ir50@example.invalid", "-c", "commit.gpgsign=false", "commit", "--quiet", "-m", "test: capture removal baseline"]
+          before <- gitOk ["rev-parse", "HEAD"]
+          TIO.writeFile source newText
+          when workspace $ do
+            removeFile (repository </> "removed.keiro")
+            writeManifest ["service.keiro"]
+          (newCode, _, _) <- runKeiroDsl ["check", input]
+          newCode `shouldBe` ExitSuccess
+          (code, out, err) <-
+            withCurrentDirectory repository $
+              runKeiroDsl ["diff", input, "--since", "HEAD", "--explain", "--report-out", diffPath, "--replay-impact-out", replayPath]
+          code `shouldBe` ExitFailure 1
+          out `shouldContain` "BREAKING"
+          (out <> err) `shouldNotContain` "OutputEventMissing"
+          forM_ ["Removed commands: Retire.", "RetiredEvent", "Removed states: Retired."] $ \name -> out `shouldContain` name
+          report <- Aeson.eitherDecodeFileStrict diffPath :: IO (Either String Value)
+          report `shouldSatisfy` isRight
+          T.pack (show report) `shouldSatisfy` T.isInfixOf "EvtRemovedNotDeprecated"
+          expected <- readTestText "test/fixtures/ir50-removal-replay.json"
+          replay <- Aeson.eitherDecodeFileStrict replayPath :: IO (Either String Value)
+          replay `shouldBe` Aeson.eitherDecodeStrict (TextEncoding.encodeUtf8 expected)
+          TIO.readFile source `shouldReturn` newText
+          gitOk ["show", "HEAD:service.keiro"] `shouldReturn` T.unpack oldText
+          gitOk ["rev-parse", "HEAD"] `shouldReturn` before
+
   describe "replay impact" $ do
     it "treats new events and transitions as replay-neutral" $ do
       old <- specOf "test/fixtures/reservation.keiro"
@@ -11218,6 +11932,7 @@
             sourcePaths =
               [ "service.keiro-workspace",
                 "domain/alpha.keiro",
+                "domain/assignment.keiro",
                 "domain/beta.keiro",
                 "domain/evidence.keiro",
                 "domain/shared.keiro"
@@ -14958,6 +15673,7 @@
       msCanonical = Just ("example.mapped." <> name),
       msFixtures = Just ("Example.Mapped." <> T.toLower name <> "Cases"),
       msInitial = Nothing,
+      msWriteLift = Nothing,
       msShape = shape,
       msLoc = noLoc
     }
@@ -15874,7 +16590,7 @@
     <*> pure noLoc
 
 genContractField :: Gen ContractField
-genContractField = ContractField <$> genName <*> pure Nothing <*> pure Nothing <*> oneof [CTypeId <$> genAdversarialText, pure CText, pure CInt] <*> pure noLoc
+genContractField = ContractField <$> genName <*> pure Nothing <*> pure Nothing <*> (CScalar <$> oneof [CTypeId <$> genAdversarialText, pure CText, pure CInt]) <*> pure noLoc
 
 genContractEvent :: Gen ContractEvent
 genContractEvent = ContractEvent <$> genName <*> genName <*> smallList genContractField
@@ -16120,6 +16836,7 @@
         <*> genMaybe genAdversarialText
         <*> genMaybe genAdversarialText
         <*> genMaybe genAdversarialText
+        <*> pure Nothing
         <*> genMappedShape names
         <*> pure noLoc,
       MappedOpaque name
@@ -16128,6 +16845,7 @@
         <*> genMaybe genAdversarialText
         <*> genMaybe genAdversarialText
         <*> genMaybe genAdversarialText
+        <*> pure Nothing
         <*> pure noLoc
     ]
 
diff --git a/test/conformance-aggregate-scalars/Generated/AggregateScalars/BehaviorSourceMap.hs b/test/conformance-aggregate-scalars/Generated/AggregateScalars/BehaviorSourceMap.hs
--- a/test/conformance-aggregate-scalars/Generated/AggregateScalars/BehaviorSourceMap.hs
+++ b/test/conformance-aggregate-scalars/Generated/AggregateScalars/BehaviorSourceMap.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context aggregate-scalars behavior source map; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context aggregate-scalars behavior source map; do not edit.
 module Generated.AggregateScalars.BehaviorSourceMap
   ( BehaviorSourceLocation (..)
   , behaviorSourceLocation
diff --git a/test/conformance-aggregate-scalars/Generated/AggregateScalars/ReplayAudit.hs b/test/conformance-aggregate-scalars/Generated/AggregateScalars/ReplayAudit.hs
--- a/test/conformance-aggregate-scalars/Generated/AggregateScalars/ReplayAudit.hs
+++ b/test/conformance-aggregate-scalars/Generated/AggregateScalars/ReplayAudit.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context aggregate-scalars replay-audit assembly; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context aggregate-scalars replay-audit assembly; do not edit.
 --
 -- Deployment contract:
 --   * replay-neutral diff: no data audit is required;
diff --git a/test/conformance-aggregate-scalars/Generated/AggregateScalars/ScalarLedger/BehaviorContract.hs b/test/conformance-aggregate-scalars/Generated/AggregateScalars/ScalarLedger/BehaviorContract.hs
--- a/test/conformance-aggregate-scalars/Generated/AggregateScalars/ScalarLedger/BehaviorContract.hs
+++ b/test/conformance-aggregate-scalars/Generated/AggregateScalars/ScalarLedger/BehaviorContract.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate ScalarLedger; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate ScalarLedger; do not edit.
 module Generated.AggregateScalars.ScalarLedger.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -14,6 +14,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -157,7 +158,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -170,7 +182,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-aggregate-scalars/Generated/AggregateScalars/ScalarLedger/Codec.hs b/test/conformance-aggregate-scalars/Generated/AggregateScalars/ScalarLedger/Codec.hs
--- a/test/conformance-aggregate-scalars/Generated/AggregateScalars/ScalarLedger/Codec.hs
+++ b/test/conformance-aggregate-scalars/Generated/AggregateScalars/ScalarLedger/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate ScalarLedger; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate ScalarLedger; do not edit.
 module Generated.AggregateScalars.ScalarLedger.Codec (
     scalarLedgerCodec,
     parseScalarLedgerEvent,
diff --git a/test/conformance-aggregate-scalars/Generated/AggregateScalars/ScalarLedger/Domain.hs b/test/conformance-aggregate-scalars/Generated/AggregateScalars/ScalarLedger/Domain.hs
--- a/test/conformance-aggregate-scalars/Generated/AggregateScalars/ScalarLedger/Domain.hs
+++ b/test/conformance-aggregate-scalars/Generated/AggregateScalars/ScalarLedger/Domain.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE DeriveAnyClass #-}
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate ScalarLedger; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate ScalarLedger; do not edit.
 module Generated.AggregateScalars.ScalarLedger.Domain where
 
 import Data.Aeson (FromJSON, ToJSON)
diff --git a/test/conformance-aggregate-scalars/Generated/AggregateScalars/ScalarLedger/EventStream.hs b/test/conformance-aggregate-scalars/Generated/AggregateScalars/ScalarLedger/EventStream.hs
--- a/test/conformance-aggregate-scalars/Generated/AggregateScalars/ScalarLedger/EventStream.hs
+++ b/test/conformance-aggregate-scalars/Generated/AggregateScalars/ScalarLedger/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate ScalarLedger; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate ScalarLedger; do not edit.
 module Generated.AggregateScalars.ScalarLedger.EventStream
   ( scalarLedgerCategory
   , scalarLedgerCommandCategory
diff --git a/test/conformance-aggregate-scalars/Generated/AggregateScalars/ScalarLedger/Harness.hs b/test/conformance-aggregate-scalars/Generated/AggregateScalars/ScalarLedger/Harness.hs
--- a/test/conformance-aggregate-scalars/Generated/AggregateScalars/ScalarLedger/Harness.hs
+++ b/test/conformance-aggregate-scalars/Generated/AggregateScalars/ScalarLedger/Harness.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate ScalarLedger; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate ScalarLedger; do not edit.
 module Generated.AggregateScalars.ScalarLedger.Harness (harnessAssertions) where
 
 import Generated.AggregateScalars.ScalarLedger.Domain
diff --git a/test/conformance-aggregate-scalars/Generated/AggregateScalars/ScalarLedger/Projection.hs b/test/conformance-aggregate-scalars/Generated/AggregateScalars/ScalarLedger/Projection.hs
--- a/test/conformance-aggregate-scalars/Generated/AggregateScalars/ScalarLedger/Projection.hs
+++ b/test/conformance-aggregate-scalars/Generated/AggregateScalars/ScalarLedger/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate ScalarLedger; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate ScalarLedger; do not edit.
 module Generated.AggregateScalars.ScalarLedger.Projection () where
 
 -- No projection declarations are present; this module keeps the generated manifest inventory total.
diff --git a/test/conformance-aggregate-scalars/Generated/AggregateScalars/ScalarLedger/Transducer.hs b/test/conformance-aggregate-scalars/Generated/AggregateScalars/ScalarLedger/Transducer.hs
--- a/test/conformance-aggregate-scalars/Generated/AggregateScalars/ScalarLedger/Transducer.hs
+++ b/test/conformance-aggregate-scalars/Generated/AggregateScalars/ScalarLedger/Transducer.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate ScalarLedger; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate ScalarLedger; do not edit.
 module Generated.AggregateScalars.ScalarLedger.Transducer
   ( scalarLedgerTransducer
   , scalarLedgerFoldFingerprint
diff --git a/test/conformance-bare-containers/Generated/BareContainers/BareJobs/Queue.hs b/test/conformance-bare-containers/Generated/BareContainers/BareJobs/Queue.hs
--- a/test/conformance-bare-containers/Generated/BareContainers/BareJobs/Queue.hs
+++ b/test/conformance-bare-containers/Generated/BareContainers/BareJobs/Queue.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from workqueue bare_jobs; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from workqueue bare_jobs; do not edit.
 module Generated.BareContainers.BareJobs.Queue
   ( BareJob (..)
   , encodeBareJob
diff --git a/test/conformance-bare-containers/Generated/BareContainers/BareJobs/QueueCodec.hs b/test/conformance-bare-containers/Generated/BareContainers/BareJobs/QueueCodec.hs
--- a/test/conformance-bare-containers/Generated/BareContainers/BareJobs/QueueCodec.hs
+++ b/test/conformance-bare-containers/Generated/BareContainers/BareJobs/QueueCodec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from workqueue bare_jobs; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from workqueue bare_jobs; do not edit.
 -- | Versioned job payload envelope: @{\"v\",\"t\",\"data\"}@.
 --
 -- Deploy workers before producers when raising its schema version. Do not
diff --git a/test/conformance-bare-containers/Generated/BareContainers/BareJobs/QueuePolicy.hs b/test/conformance-bare-containers/Generated/BareContainers/BareJobs/QueuePolicy.hs
--- a/test/conformance-bare-containers/Generated/BareContainers/BareJobs/QueuePolicy.hs
+++ b/test/conformance-bare-containers/Generated/BareContainers/BareJobs/QueuePolicy.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from workqueue bare_jobs; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from workqueue bare_jobs; do not edit.
 module Generated.BareContainers.BareJobs.QueuePolicy
   ( BareJobsOutcome (..)
   , retryPolicy, jobOutcomeFor
diff --git a/test/conformance-bare-containers/Generated/BareContainers/BareLookup/QueryContract.hs b/test/conformance-bare-containers/Generated/BareContainers/BareLookup/QueryContract.hs
--- a/test/conformance-bare-containers/Generated/BareContainers/BareLookup/QueryContract.hs
+++ b/test/conformance-bare-containers/Generated/BareContainers/BareLookup/QueryContract.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from readmodel bare_lookup; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from readmodel bare_lookup; do not edit.
 module Generated.BareContainers.BareLookup.QueryContract
   ( BareLookupQueryInput
   , BareLookupQueryResult
diff --git a/test/conformance-bare-containers/Generated/BareContainers/BareLookup/ReadModel.hs b/test/conformance-bare-containers/Generated/BareContainers/BareLookup/ReadModel.hs
--- a/test/conformance-bare-containers/Generated/BareContainers/BareLookup/ReadModel.hs
+++ b/test/conformance-bare-containers/Generated/BareContainers/BareLookup/ReadModel.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from readmodel bare_lookup; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from readmodel bare_lookup; do not edit.
 module Generated.BareContainers.BareLookup.ReadModel
   ( bareLookupReadModel
   , bareLookupQualifiedTable
diff --git a/test/conformance-bare-containers/Generated/BareContainers/BareLookup/ReadModelHarness.hs b/test/conformance-bare-containers/Generated/BareContainers/BareLookup/ReadModelHarness.hs
--- a/test/conformance-bare-containers/Generated/BareContainers/BareLookup/ReadModelHarness.hs
+++ b/test/conformance-bare-containers/Generated/BareContainers/BareLookup/ReadModelHarness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from readmodel bare_lookup; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from readmodel bare_lookup; do not edit.
 module Generated.BareContainers.BareLookup.ReadModelHarness (readModelFacts, readModelFactResults, runReadModelFacts, catalogFactsAgainst) where
 
 import Generated.BareContainers.BareLookup.ReadModel (bareLookupReadModel)
diff --git a/test/conformance-bare-containers/Generated/BareContainers/BareLookup/ReadModelTable.hs b/test/conformance-bare-containers/Generated/BareContainers/BareLookup/ReadModelTable.hs
--- a/test/conformance-bare-containers/Generated/BareContainers/BareLookup/ReadModelTable.hs
+++ b/test/conformance-bare-containers/Generated/BareContainers/BareLookup/ReadModelTable.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from readmodel bare_lookup; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from readmodel bare_lookup; do not edit.
 module Generated.BareContainers.BareLookup.ReadModelTable (bareLookupQualifiedTable) where
 
 import Data.Text (Text)
diff --git a/test/conformance-bare-containers/Generated/BareContainers/BareStore/BehaviorContract.hs b/test/conformance-bare-containers/Generated/BareContainers/BareStore/BehaviorContract.hs
--- a/test/conformance-bare-containers/Generated/BareContainers/BareStore/BehaviorContract.hs
+++ b/test/conformance-bare-containers/Generated/BareContainers/BareStore/BehaviorContract.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate BareStore; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate BareStore; do not edit.
 module Generated.BareContainers.BareStore.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -14,6 +14,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -157,7 +158,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -170,7 +182,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-bare-containers/Generated/BareContainers/BareStore/Codec.hs b/test/conformance-bare-containers/Generated/BareContainers/BareStore/Codec.hs
--- a/test/conformance-bare-containers/Generated/BareContainers/BareStore/Codec.hs
+++ b/test/conformance-bare-containers/Generated/BareContainers/BareStore/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate BareStore; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate BareStore; do not edit.
 module Generated.BareContainers.BareStore.Codec (
     bareStoreCodec,
     parseBareStoreEvent,
diff --git a/test/conformance-bare-containers/Generated/BareContainers/BareStore/Domain.hs b/test/conformance-bare-containers/Generated/BareContainers/BareStore/Domain.hs
--- a/test/conformance-bare-containers/Generated/BareContainers/BareStore/Domain.hs
+++ b/test/conformance-bare-containers/Generated/BareContainers/BareStore/Domain.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE DeriveAnyClass #-}
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate BareStore; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate BareStore; do not edit.
 module Generated.BareContainers.BareStore.Domain where
 
 import Data.Aeson (FromJSON, ToJSON)
diff --git a/test/conformance-bare-containers/Generated/BareContainers/BareStore/EventStream.hs b/test/conformance-bare-containers/Generated/BareContainers/BareStore/EventStream.hs
--- a/test/conformance-bare-containers/Generated/BareContainers/BareStore/EventStream.hs
+++ b/test/conformance-bare-containers/Generated/BareContainers/BareStore/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate BareStore; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate BareStore; do not edit.
 module Generated.BareContainers.BareStore.EventStream
   ( bareStoreCategory
   , bareStoreCommandCategory
diff --git a/test/conformance-bare-containers/Generated/BareContainers/BareStore/Harness.hs b/test/conformance-bare-containers/Generated/BareContainers/BareStore/Harness.hs
--- a/test/conformance-bare-containers/Generated/BareContainers/BareStore/Harness.hs
+++ b/test/conformance-bare-containers/Generated/BareContainers/BareStore/Harness.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate BareStore; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate BareStore; do not edit.
 module Generated.BareContainers.BareStore.Harness (harnessAssertions) where
 
 import Generated.BareContainers.BareStore.Domain
diff --git a/test/conformance-bare-containers/Generated/BareContainers/BareStore/Projection.hs b/test/conformance-bare-containers/Generated/BareContainers/BareStore/Projection.hs
--- a/test/conformance-bare-containers/Generated/BareContainers/BareStore/Projection.hs
+++ b/test/conformance-bare-containers/Generated/BareContainers/BareStore/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate BareStore; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate BareStore; do not edit.
 module Generated.BareContainers.BareStore.Projection () where
 
 -- No projection declarations are present; this module keeps the generated manifest inventory total.
diff --git a/test/conformance-bare-containers/Generated/BareContainers/BareStore/Transducer.hs b/test/conformance-bare-containers/Generated/BareContainers/BareStore/Transducer.hs
--- a/test/conformance-bare-containers/Generated/BareContainers/BareStore/Transducer.hs
+++ b/test/conformance-bare-containers/Generated/BareContainers/BareStore/Transducer.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate BareStore; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate BareStore; do not edit.
 module Generated.BareContainers.BareStore.Transducer
   ( bareStoreTransducer
   , bareStoreFoldFingerprint
diff --git a/test/conformance-bare-containers/Generated/BareContainers/BehaviorSourceMap.hs b/test/conformance-bare-containers/Generated/BareContainers/BehaviorSourceMap.hs
--- a/test/conformance-bare-containers/Generated/BareContainers/BehaviorSourceMap.hs
+++ b/test/conformance-bare-containers/Generated/BareContainers/BehaviorSourceMap.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context bare-containers behavior source map; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context bare-containers behavior source map; do not edit.
 module Generated.BareContainers.BehaviorSourceMap
   ( BehaviorSourceLocation (..)
   , behaviorSourceLocation
diff --git a/test/conformance-bare-containers/Generated/BareContainers/Nominals.hs b/test/conformance-bare-containers/Generated/BareContainers/Nominals.hs
--- a/test/conformance-bare-containers/Generated/BareContainers/Nominals.hs
+++ b/test/conformance-bare-containers/Generated/BareContainers/Nominals.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context bare-containers generated nominal declarations; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context bare-containers generated nominal declarations; do not edit.
 module Generated.BareContainers.Nominals
   ( ItemId
   , parseItemId
diff --git a/test/conformance-bare-containers/Generated/BareContainers/Nominals/Internal.hs b/test/conformance-bare-containers/Generated/BareContainers/Nominals/Internal.hs
--- a/test/conformance-bare-containers/Generated/BareContainers/Nominals/Internal.hs
+++ b/test/conformance-bare-containers/Generated/BareContainers/Nominals/Internal.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context bare-containers generated nominal ID internals; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context bare-containers generated nominal ID internals; do not edit.
 module Generated.BareContainers.Nominals.Internal
   ( ItemId
   , parseItemId
diff --git a/test/conformance-bare-containers/Generated/BareContainers/ProjectionCatalog.hs b/test/conformance-bare-containers/Generated/BareContainers/ProjectionCatalog.hs
--- a/test/conformance-bare-containers/Generated/BareContainers/ProjectionCatalog.hs
+++ b/test/conformance-bare-containers/Generated/BareContainers/ProjectionCatalog.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from projection-catalog bare-containers; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from projection-catalog bare-containers; do not edit.
 {-# LANGUAGE OverloadedStrings #-}
 module Generated.BareContainers.ProjectionCatalog
   ( projectionCatalog
diff --git a/test/conformance-bare-containers/Generated/BareContainers/ReplayAudit.hs b/test/conformance-bare-containers/Generated/BareContainers/ReplayAudit.hs
--- a/test/conformance-bare-containers/Generated/BareContainers/ReplayAudit.hs
+++ b/test/conformance-bare-containers/Generated/BareContainers/ReplayAudit.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context bare-containers replay-audit assembly; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context bare-containers replay-audit assembly; do not edit.
 --
 -- Deployment contract:
 --   * replay-neutral diff: no data audit is required;
diff --git a/test/conformance-bare-containers/Generated/BareContainers/Structural/NominalLeaves.hs b/test/conformance-bare-containers/Generated/BareContainers/Structural/NominalLeaves.hs
--- a/test/conformance-bare-containers/Generated/BareContainers/Structural/NominalLeaves.hs
+++ b/test/conformance-bare-containers/Generated/BareContainers/Structural/NominalLeaves.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context bare-containers structural nominal leaves; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context bare-containers structural nominal leaves; do not edit.
 module Generated.BareContainers.Structural.NominalLeaves where
 
 import Data.Aeson (Value (..), withText)
diff --git a/test/conformance-bare-containers/Generated/BareContainers/Structural/Shape/BareEnvelope.hs b/test/conformance-bare-containers/Generated/BareContainers/Structural/Shape/BareEnvelope.hs
--- a/test/conformance-bare-containers/Generated/BareContainers/Structural/Shape/BareEnvelope.hs
+++ b/test/conformance-bare-containers/Generated/BareContainers/Structural/Shape/BareEnvelope.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from mapped structural BareEnvelope; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from mapped structural BareEnvelope; do not edit.
 module Generated.BareContainers.Structural.Shape.BareEnvelope (BareEnvelopeShape (..)) where
 
 import GHC.Generics (Generic)
diff --git a/test/conformance-bare-containers/Generated/BareContainers/Structural/Shape/MaybeText.hs b/test/conformance-bare-containers/Generated/BareContainers/Structural/Shape/MaybeText.hs
--- a/test/conformance-bare-containers/Generated/BareContainers/Structural/Shape/MaybeText.hs
+++ b/test/conformance-bare-containers/Generated/BareContainers/Structural/Shape/MaybeText.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from mapped structural MaybeText; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from mapped structural MaybeText; do not edit.
 module Generated.BareContainers.Structural.Shape.MaybeText (MaybeTextShape) where
 
 import Data.Text (Text)
diff --git a/test/conformance-bare-containers/Generated/BareContainers/Structural/Shape/NestedIds.hs b/test/conformance-bare-containers/Generated/BareContainers/Structural/Shape/NestedIds.hs
--- a/test/conformance-bare-containers/Generated/BareContainers/Structural/Shape/NestedIds.hs
+++ b/test/conformance-bare-containers/Generated/BareContainers/Structural/Shape/NestedIds.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from mapped structural NestedIds; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from mapped structural NestedIds; do not edit.
 module Generated.BareContainers.Structural.Shape.NestedIds (NestedIdsShape) where
 
 import Generated.BareContainers.Nominals qualified as Nominals
diff --git a/test/conformance-bare-containers/Generated/BareContainers/Structural/Shape/TextList.hs b/test/conformance-bare-containers/Generated/BareContainers/Structural/Shape/TextList.hs
--- a/test/conformance-bare-containers/Generated/BareContainers/Structural/Shape/TextList.hs
+++ b/test/conformance-bare-containers/Generated/BareContainers/Structural/Shape/TextList.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from mapped structural TextList; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from mapped structural TextList; do not edit.
 module Generated.BareContainers.Structural.Shape.TextList (TextListShape) where
 
 import Data.Text (Text)
diff --git a/test/conformance-bare-containers/Generated/BareContainers/Structural/Shape/TextMap.hs b/test/conformance-bare-containers/Generated/BareContainers/Structural/Shape/TextMap.hs
--- a/test/conformance-bare-containers/Generated/BareContainers/Structural/Shape/TextMap.hs
+++ b/test/conformance-bare-containers/Generated/BareContainers/Structural/Shape/TextMap.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from mapped structural TextMap; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from mapped structural TextMap; do not edit.
 module Generated.BareContainers.Structural.Shape.TextMap (TextMapShape) where
 
 import Data.Map.Strict (Map)
diff --git a/test/conformance-bare-containers/Generated/BareContainers/StructuralConformance.hs b/test/conformance-bare-containers/Generated/BareContainers/StructuralConformance.hs
--- a/test/conformance-bare-containers/Generated/BareContainers/StructuralConformance.hs
+++ b/test/conformance-bare-containers/Generated/BareContainers/StructuralConformance.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context bare-containers structural conformance; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context bare-containers structural conformance; do not edit.
 module Generated.BareContainers.StructuralConformance
   ( structuralConformanceAssertions
   ) where
diff --git a/test/conformance-baseline.json b/test/conformance-baseline.json
--- a/test/conformance-baseline.json
+++ b/test/conformance-baseline.json
@@ -20,6 +20,9 @@
     {"path": "test/fixtures/outcome-identifier-legacy.keiro", "sourceForm": "legacy-unversioned", "effectiveVersion": 1, "role": "compatibility-proof", "reason": "released outcome-identifier compatibility proof"}
   ],
   "compiledSuites": [
+    {"component": "keiro-dsl-conformance-mapped-register-construction", "directory": "test/conformance-mapped-register-construction", "source": "test/fixtures/mapped-register-construction.keiro", "generation": "source", "role": "candidate-primary", "languageVersion": 6, "reason": "candidate Language 6 guarded target initial and mapped lift construction with complete register replay"},
+    {"component": "keiro-dsl-conformance-keyword-segments", "directory": "test/conformance-keyword-segments", "source": "test/fixtures/keyword-segments.keiro", "generation": "source", "role": "candidate-primary", "languageVersion": 6, "reason": "Language 6 compiled read-model and workqueue keyword-segment naming proof for BUG-11"},
+    {"component": "keiro-dsl-conformance-history-dependent-holes", "directory": "test/conformance-history-dependent-holes", "source": "test/fixtures/history-dependent-holes.keiro", "generation": "source", "role": "candidate-primary", "languageVersion": 6, "reason": "Language 6 history-backed initial-hole acceptance, exact live/replay-only attribution, and persisted-codec replay proof for BUG-10"},
     {"component": "keiro-dsl-conformance", "directory": "test/conformance", "source": "test/fixtures/reservation.keiro", "generation": "source", "role": "published-compatibility", "languageVersion": 4, "reason": "published Language 4 canonical reservation aggregate proof"},
     {"component": "keiro-dsl-conformance-aggregate-scalars", "directory": "test/conformance-aggregate-scalars", "source": "test/fixtures/aggregate-scalars.keiro", "generation": "source", "role": "published-compatibility", "languageVersion": 4, "reason": "published Language 4 aggregate scalar transition and field-identity selector/wire-key proof"},
     {"component": "keiro-dsl-conformance-aggregate-scalar-expressions", "directory": "test/conformance-scalar-expressions", "source": "test/fixtures/aggregate-scalar-expressions-v2.keiro", "generation": "source", "role": "published-compatibility", "languageVersion": 4, "reason": "published Language 4 aggregate scalar expression proof"},
@@ -45,6 +48,7 @@
     {"component": "keiro-dsl-conformance-coldstart", "directory": "test/conformance-coldstart", "source": "test/fixtures/subscription.keiro", "generation": "source", "role": "published-compatibility", "languageVersion": 4, "reason": "published Language 4 cold-start subscription proof"},
     {"component": "keiro-dsl-conformance-contract", "directory": "test/conformance-contract", "source": "test/fixtures/contract-v4.keiro", "generation": "source", "role": "published-compatibility", "languageVersion": 4, "reason": "published Language 4 typed contract and field-identity selector/wire-key proof"},
     {"component": "keiro-dsl-conformance-contract-declared-id", "directory": "test/conformance-contract-declared-id", "source": "test/fixtures/contract-declared-id.keiro", "generation": "source", "role": "candidate-primary", "languageVersion": 6, "reason": "candidate Language 6 declared generated-ID and consumer-bound-ID contract proof"},
+    {"component": "keiro-dsl-conformance-contract-list-fields", "directory": "test/conformance-contract-list-fields", "source": "test/fixtures/contract-list-fields.keiro", "generation": "source", "role": "candidate-primary", "languageVersion": 6, "reason": "candidate Language 6 List fields of declared, consumer-bound, literal TypeID, text, and int elements in a public contract"},
     {"component": "keiro-dsl-conformance-contract-v1-compat", "directory": "test/conformance-contract-v1-compat", "source": "test/fixtures/contract-v1-compat.keiro", "generation": "none", "role": "compatibility-proof", "reason": "version-1 permissive Text contract compatibility proof"},
     {"component": "keiro-dsl-conformance-intake-runtime", "directory": "test/conformance-intake-runtime", "source": "test/fixtures/intake.keiro", "generation": "source", "role": "published-compatibility", "languageVersion": 4, "reason": "published Language 4 intake runtime proof"},
     {"component": "keiro-dsl-conformance-intake-delegated", "directory": "test/conformance-intake-delegated", "source": "test/fixtures/intake-delegated.keiro", "generation": "source", "role": "candidate-primary", "languageVersion": 6, "reason": "candidate Language 6 delegated runner and no-Store hand-filled integration proof"},
diff --git a/test/conformance-behavior-complete/Generated/BehaviorComplete/BehaviorSourceMap.hs b/test/conformance-behavior-complete/Generated/BehaviorComplete/BehaviorSourceMap.hs
--- a/test/conformance-behavior-complete/Generated/BehaviorComplete/BehaviorSourceMap.hs
+++ b/test/conformance-behavior-complete/Generated/BehaviorComplete/BehaviorSourceMap.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context behavior-complete behavior source map; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context behavior-complete behavior source map; do not edit.
 module Generated.BehaviorComplete.BehaviorSourceMap
   ( BehaviorSourceLocation (..)
   , behaviorSourceLocation
diff --git a/test/conformance-behavior-complete/Generated/BehaviorComplete/Journey/BehaviorContract.hs b/test/conformance-behavior-complete/Generated/BehaviorComplete/Journey/BehaviorContract.hs
--- a/test/conformance-behavior-complete/Generated/BehaviorComplete/Journey/BehaviorContract.hs
+++ b/test/conformance-behavior-complete/Generated/BehaviorComplete/Journey/BehaviorContract.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Journey; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Journey; do not edit.
 module Generated.BehaviorComplete.Journey.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -14,6 +14,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -361,7 +362,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -374,7 +386,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-behavior-complete/Generated/BehaviorComplete/Journey/Codec.hs b/test/conformance-behavior-complete/Generated/BehaviorComplete/Journey/Codec.hs
--- a/test/conformance-behavior-complete/Generated/BehaviorComplete/Journey/Codec.hs
+++ b/test/conformance-behavior-complete/Generated/BehaviorComplete/Journey/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Journey; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Journey; do not edit.
 module Generated.BehaviorComplete.Journey.Codec (
     journeyCodec,
     parseJourneyEvent,
diff --git a/test/conformance-behavior-complete/Generated/BehaviorComplete/Journey/Domain.hs b/test/conformance-behavior-complete/Generated/BehaviorComplete/Journey/Domain.hs
--- a/test/conformance-behavior-complete/Generated/BehaviorComplete/Journey/Domain.hs
+++ b/test/conformance-behavior-complete/Generated/BehaviorComplete/Journey/Domain.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE DeriveAnyClass #-}
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Journey; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Journey; do not edit.
 module Generated.BehaviorComplete.Journey.Domain where
 
 import Data.Aeson (FromJSON, ToJSON)
diff --git a/test/conformance-behavior-complete/Generated/BehaviorComplete/Journey/EventStream.hs b/test/conformance-behavior-complete/Generated/BehaviorComplete/Journey/EventStream.hs
--- a/test/conformance-behavior-complete/Generated/BehaviorComplete/Journey/EventStream.hs
+++ b/test/conformance-behavior-complete/Generated/BehaviorComplete/Journey/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Journey; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Journey; do not edit.
 module Generated.BehaviorComplete.Journey.EventStream
   ( journeyCategory
   , journeyCommandCategory
diff --git a/test/conformance-behavior-complete/Generated/BehaviorComplete/Journey/Harness.hs b/test/conformance-behavior-complete/Generated/BehaviorComplete/Journey/Harness.hs
--- a/test/conformance-behavior-complete/Generated/BehaviorComplete/Journey/Harness.hs
+++ b/test/conformance-behavior-complete/Generated/BehaviorComplete/Journey/Harness.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Journey; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Journey; do not edit.
 module Generated.BehaviorComplete.Journey.Harness (harnessAssertions) where
 
 import Generated.BehaviorComplete.Journey.Domain
diff --git a/test/conformance-behavior-complete/Generated/BehaviorComplete/Journey/Projection.hs b/test/conformance-behavior-complete/Generated/BehaviorComplete/Journey/Projection.hs
--- a/test/conformance-behavior-complete/Generated/BehaviorComplete/Journey/Projection.hs
+++ b/test/conformance-behavior-complete/Generated/BehaviorComplete/Journey/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Journey; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Journey; do not edit.
 module Generated.BehaviorComplete.Journey.Projection () where
 
 -- No projection declarations are present; this module keeps the generated manifest inventory total.
diff --git a/test/conformance-behavior-complete/Generated/BehaviorComplete/Journey/Transducer.hs b/test/conformance-behavior-complete/Generated/BehaviorComplete/Journey/Transducer.hs
--- a/test/conformance-behavior-complete/Generated/BehaviorComplete/Journey/Transducer.hs
+++ b/test/conformance-behavior-complete/Generated/BehaviorComplete/Journey/Transducer.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Journey; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Journey; do not edit.
 module Generated.BehaviorComplete.Journey.Transducer
   ( journeyTransducer
   , journeyFoldFingerprint
diff --git a/test/conformance-behavior-complete/Generated/BehaviorComplete/Nominals.hs b/test/conformance-behavior-complete/Generated/BehaviorComplete/Nominals.hs
--- a/test/conformance-behavior-complete/Generated/BehaviorComplete/Nominals.hs
+++ b/test/conformance-behavior-complete/Generated/BehaviorComplete/Nominals.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context behavior-complete generated nominal declarations; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context behavior-complete generated nominal declarations; do not edit.
 module Generated.BehaviorComplete.Nominals
   ( RequestId
   , parseRequestId
diff --git a/test/conformance-behavior-complete/Generated/BehaviorComplete/Nominals/Internal.hs b/test/conformance-behavior-complete/Generated/BehaviorComplete/Nominals/Internal.hs
--- a/test/conformance-behavior-complete/Generated/BehaviorComplete/Nominals/Internal.hs
+++ b/test/conformance-behavior-complete/Generated/BehaviorComplete/Nominals/Internal.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context behavior-complete generated nominal ID internals; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context behavior-complete generated nominal ID internals; do not edit.
 module Generated.BehaviorComplete.Nominals.Internal
   ( RequestId
   , parseRequestId
diff --git a/test/conformance-behavior-complete/Generated/BehaviorComplete/ReplayAudit.hs b/test/conformance-behavior-complete/Generated/BehaviorComplete/ReplayAudit.hs
--- a/test/conformance-behavior-complete/Generated/BehaviorComplete/ReplayAudit.hs
+++ b/test/conformance-behavior-complete/Generated/BehaviorComplete/ReplayAudit.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context behavior-complete replay-audit assembly; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context behavior-complete replay-audit assembly; do not edit.
 --
 -- Deployment contract:
 --   * replay-neutral diff: no data audit is required;
diff --git a/test/conformance-behavior-complete/Generated/BehaviorComplete/Structural/Shape/StartPayload.hs b/test/conformance-behavior-complete/Generated/BehaviorComplete/Structural/Shape/StartPayload.hs
--- a/test/conformance-behavior-complete/Generated/BehaviorComplete/Structural/Shape/StartPayload.hs
+++ b/test/conformance-behavior-complete/Generated/BehaviorComplete/Structural/Shape/StartPayload.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from mapped structural StartPayload; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from mapped structural StartPayload; do not edit.
 module Generated.BehaviorComplete.Structural.Shape.StartPayload (StartPayloadShape (..)) where
 
 import Data.Text (Text)
diff --git a/test/conformance-behavior-complete/Generated/BehaviorComplete/StructuralConformance.hs b/test/conformance-behavior-complete/Generated/BehaviorComplete/StructuralConformance.hs
--- a/test/conformance-behavior-complete/Generated/BehaviorComplete/StructuralConformance.hs
+++ b/test/conformance-behavior-complete/Generated/BehaviorComplete/StructuralConformance.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context behavior-complete structural conformance; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context behavior-complete structural conformance; do not edit.
 module Generated.BehaviorComplete.StructuralConformance
   ( structuralConformanceAssertions
   ) where
diff --git a/test/conformance-behavior-complete/Generated/BehaviorComplete/StructuralProjections.hs b/test/conformance-behavior-complete/Generated/BehaviorComplete/StructuralProjections.hs
--- a/test/conformance-behavior-complete/Generated/BehaviorComplete/StructuralProjections.hs
+++ b/test/conformance-behavior-complete/Generated/BehaviorComplete/StructuralProjections.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TypeFamilies #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context behavior-complete mapped structural facade; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context behavior-complete mapped structural facade; do not edit.
 -- Equality witnesses are emitted for Text, Int, Bool, Natural, and UTCTime.
 -- Nominal ID and enum leaves carry exact canonical-text domains.
 -- Int, Natural, and UTCTime belong to Keiki's ordered subset.
diff --git a/test/conformance-calendar-days/Generated/CalendarDays/BehaviorSourceMap.hs b/test/conformance-calendar-days/Generated/CalendarDays/BehaviorSourceMap.hs
--- a/test/conformance-calendar-days/Generated/CalendarDays/BehaviorSourceMap.hs
+++ b/test/conformance-calendar-days/Generated/CalendarDays/BehaviorSourceMap.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context calendar-days behavior source map; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context calendar-days behavior source map; do not edit.
 module Generated.CalendarDays.BehaviorSourceMap
   ( BehaviorSourceLocation (..)
   , behaviorSourceLocation
diff --git a/test/conformance-calendar-days/Generated/CalendarDays/CalendarJobs/Queue.hs b/test/conformance-calendar-days/Generated/CalendarDays/CalendarJobs/Queue.hs
--- a/test/conformance-calendar-days/Generated/CalendarDays/CalendarJobs/Queue.hs
+++ b/test/conformance-calendar-days/Generated/CalendarDays/CalendarJobs/Queue.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from workqueue calendar_jobs; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from workqueue calendar_jobs; do not edit.
 module Generated.CalendarDays.CalendarJobs.Queue
   ( CalendarJob (..)
   , encodeCalendarJob
diff --git a/test/conformance-calendar-days/Generated/CalendarDays/CalendarJobs/QueueCodec.hs b/test/conformance-calendar-days/Generated/CalendarDays/CalendarJobs/QueueCodec.hs
--- a/test/conformance-calendar-days/Generated/CalendarDays/CalendarJobs/QueueCodec.hs
+++ b/test/conformance-calendar-days/Generated/CalendarDays/CalendarJobs/QueueCodec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from workqueue calendar_jobs; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from workqueue calendar_jobs; do not edit.
 -- | Versioned job payload envelope: @{\"v\",\"t\",\"data\"}@.
 --
 -- Deploy workers before producers when raising its schema version. Do not
diff --git a/test/conformance-calendar-days/Generated/CalendarDays/CalendarJobs/QueuePolicy.hs b/test/conformance-calendar-days/Generated/CalendarDays/CalendarJobs/QueuePolicy.hs
--- a/test/conformance-calendar-days/Generated/CalendarDays/CalendarJobs/QueuePolicy.hs
+++ b/test/conformance-calendar-days/Generated/CalendarDays/CalendarJobs/QueuePolicy.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from workqueue calendar_jobs; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from workqueue calendar_jobs; do not edit.
 module Generated.CalendarDays.CalendarJobs.QueuePolicy
   ( CalendarJobsOutcome (..)
   , retryPolicy, jobOutcomeFor
diff --git a/test/conformance-calendar-days/Generated/CalendarDays/CalendarLookup/QueryContract.hs b/test/conformance-calendar-days/Generated/CalendarDays/CalendarLookup/QueryContract.hs
--- a/test/conformance-calendar-days/Generated/CalendarDays/CalendarLookup/QueryContract.hs
+++ b/test/conformance-calendar-days/Generated/CalendarDays/CalendarLookup/QueryContract.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from readmodel calendar_lookup; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from readmodel calendar_lookup; do not edit.
 module Generated.CalendarDays.CalendarLookup.QueryContract
   ( CalendarLookupQueryInput
   , CalendarLookupQueryResult
diff --git a/test/conformance-calendar-days/Generated/CalendarDays/CalendarLookup/ReadModel.hs b/test/conformance-calendar-days/Generated/CalendarDays/CalendarLookup/ReadModel.hs
--- a/test/conformance-calendar-days/Generated/CalendarDays/CalendarLookup/ReadModel.hs
+++ b/test/conformance-calendar-days/Generated/CalendarDays/CalendarLookup/ReadModel.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from readmodel calendar_lookup; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from readmodel calendar_lookup; do not edit.
 module Generated.CalendarDays.CalendarLookup.ReadModel
   ( calendarLookupReadModel
   , calendarLookupQualifiedTable
diff --git a/test/conformance-calendar-days/Generated/CalendarDays/CalendarLookup/ReadModelHarness.hs b/test/conformance-calendar-days/Generated/CalendarDays/CalendarLookup/ReadModelHarness.hs
--- a/test/conformance-calendar-days/Generated/CalendarDays/CalendarLookup/ReadModelHarness.hs
+++ b/test/conformance-calendar-days/Generated/CalendarDays/CalendarLookup/ReadModelHarness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from readmodel calendar_lookup; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from readmodel calendar_lookup; do not edit.
 module Generated.CalendarDays.CalendarLookup.ReadModelHarness (readModelFacts, readModelFactResults, runReadModelFacts, catalogFactsAgainst) where
 
 import Generated.CalendarDays.CalendarLookup.ReadModel (calendarLookupReadModel)
diff --git a/test/conformance-calendar-days/Generated/CalendarDays/CalendarLookup/ReadModelTable.hs b/test/conformance-calendar-days/Generated/CalendarDays/CalendarLookup/ReadModelTable.hs
--- a/test/conformance-calendar-days/Generated/CalendarDays/CalendarLookup/ReadModelTable.hs
+++ b/test/conformance-calendar-days/Generated/CalendarDays/CalendarLookup/ReadModelTable.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from readmodel calendar_lookup; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from readmodel calendar_lookup; do not edit.
 module Generated.CalendarDays.CalendarLookup.ReadModelTable (calendarLookupQualifiedTable) where
 
 import Data.Text (Text)
diff --git a/test/conformance-calendar-days/Generated/CalendarDays/CalendarStore/BehaviorContract.hs b/test/conformance-calendar-days/Generated/CalendarDays/CalendarStore/BehaviorContract.hs
--- a/test/conformance-calendar-days/Generated/CalendarDays/CalendarStore/BehaviorContract.hs
+++ b/test/conformance-calendar-days/Generated/CalendarDays/CalendarStore/BehaviorContract.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate CalendarStore; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate CalendarStore; do not edit.
 module Generated.CalendarDays.CalendarStore.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -14,6 +14,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -157,7 +158,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -170,7 +182,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-calendar-days/Generated/CalendarDays/CalendarStore/Codec.hs b/test/conformance-calendar-days/Generated/CalendarDays/CalendarStore/Codec.hs
--- a/test/conformance-calendar-days/Generated/CalendarDays/CalendarStore/Codec.hs
+++ b/test/conformance-calendar-days/Generated/CalendarDays/CalendarStore/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate CalendarStore; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate CalendarStore; do not edit.
 module Generated.CalendarDays.CalendarStore.Codec (
     calendarStoreCodec,
     parseCalendarStoreEvent,
diff --git a/test/conformance-calendar-days/Generated/CalendarDays/CalendarStore/Domain.hs b/test/conformance-calendar-days/Generated/CalendarDays/CalendarStore/Domain.hs
--- a/test/conformance-calendar-days/Generated/CalendarDays/CalendarStore/Domain.hs
+++ b/test/conformance-calendar-days/Generated/CalendarDays/CalendarStore/Domain.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE DeriveAnyClass #-}
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate CalendarStore; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate CalendarStore; do not edit.
 module Generated.CalendarDays.CalendarStore.Domain where
 
 import Data.Aeson (FromJSON, ToJSON)
diff --git a/test/conformance-calendar-days/Generated/CalendarDays/CalendarStore/EventStream.hs b/test/conformance-calendar-days/Generated/CalendarDays/CalendarStore/EventStream.hs
--- a/test/conformance-calendar-days/Generated/CalendarDays/CalendarStore/EventStream.hs
+++ b/test/conformance-calendar-days/Generated/CalendarDays/CalendarStore/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate CalendarStore; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate CalendarStore; do not edit.
 module Generated.CalendarDays.CalendarStore.EventStream
   ( calendarStoreCategory
   , calendarStoreCommandCategory
diff --git a/test/conformance-calendar-days/Generated/CalendarDays/CalendarStore/Harness.hs b/test/conformance-calendar-days/Generated/CalendarDays/CalendarStore/Harness.hs
--- a/test/conformance-calendar-days/Generated/CalendarDays/CalendarStore/Harness.hs
+++ b/test/conformance-calendar-days/Generated/CalendarDays/CalendarStore/Harness.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate CalendarStore; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate CalendarStore; do not edit.
 module Generated.CalendarDays.CalendarStore.Harness (harnessAssertions) where
 
 import Generated.CalendarDays.CalendarStore.Domain
diff --git a/test/conformance-calendar-days/Generated/CalendarDays/CalendarStore/Projection.hs b/test/conformance-calendar-days/Generated/CalendarDays/CalendarStore/Projection.hs
--- a/test/conformance-calendar-days/Generated/CalendarDays/CalendarStore/Projection.hs
+++ b/test/conformance-calendar-days/Generated/CalendarDays/CalendarStore/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate CalendarStore; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate CalendarStore; do not edit.
 module Generated.CalendarDays.CalendarStore.Projection () where
 
 -- No projection declarations are present; this module keeps the generated manifest inventory total.
diff --git a/test/conformance-calendar-days/Generated/CalendarDays/CalendarStore/Transducer.hs b/test/conformance-calendar-days/Generated/CalendarDays/CalendarStore/Transducer.hs
--- a/test/conformance-calendar-days/Generated/CalendarDays/CalendarStore/Transducer.hs
+++ b/test/conformance-calendar-days/Generated/CalendarDays/CalendarStore/Transducer.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate CalendarStore; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate CalendarStore; do not edit.
 module Generated.CalendarDays.CalendarStore.Transducer
   ( calendarStoreTransducer
   , calendarStoreFoldFingerprint
diff --git a/test/conformance-calendar-days/Generated/CalendarDays/ProjectionCatalog.hs b/test/conformance-calendar-days/Generated/CalendarDays/ProjectionCatalog.hs
--- a/test/conformance-calendar-days/Generated/CalendarDays/ProjectionCatalog.hs
+++ b/test/conformance-calendar-days/Generated/CalendarDays/ProjectionCatalog.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from projection-catalog calendar-days; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from projection-catalog calendar-days; do not edit.
 {-# LANGUAGE OverloadedStrings #-}
 module Generated.CalendarDays.ProjectionCatalog
   ( projectionCatalog
diff --git a/test/conformance-calendar-days/Generated/CalendarDays/ReplayAudit.hs b/test/conformance-calendar-days/Generated/CalendarDays/ReplayAudit.hs
--- a/test/conformance-calendar-days/Generated/CalendarDays/ReplayAudit.hs
+++ b/test/conformance-calendar-days/Generated/CalendarDays/ReplayAudit.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context calendar-days replay-audit assembly; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context calendar-days replay-audit assembly; do not edit.
 --
 -- Deployment contract:
 --   * replay-neutral diff: no data audit is required;
diff --git a/test/conformance-calendar-days/Generated/CalendarDays/Structural/Shape/CalendarEnvelope.hs b/test/conformance-calendar-days/Generated/CalendarDays/Structural/Shape/CalendarEnvelope.hs
--- a/test/conformance-calendar-days/Generated/CalendarDays/Structural/Shape/CalendarEnvelope.hs
+++ b/test/conformance-calendar-days/Generated/CalendarDays/Structural/Shape/CalendarEnvelope.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from mapped structural CalendarEnvelope; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from mapped structural CalendarEnvelope; do not edit.
 module Generated.CalendarDays.Structural.Shape.CalendarEnvelope (CalendarEnvelopeShape (..)) where
 
 import Data.Map.Strict (Map)
diff --git a/test/conformance-calendar-days/Generated/CalendarDays/Structural/Shape/LocalDay.hs b/test/conformance-calendar-days/Generated/CalendarDays/Structural/Shape/LocalDay.hs
--- a/test/conformance-calendar-days/Generated/CalendarDays/Structural/Shape/LocalDay.hs
+++ b/test/conformance-calendar-days/Generated/CalendarDays/Structural/Shape/LocalDay.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from mapped structural LocalDay; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from mapped structural LocalDay; do not edit.
 module Generated.CalendarDays.Structural.Shape.LocalDay (LocalDayShape) where
 
 import Data.Time.Calendar (Day)
diff --git a/test/conformance-calendar-days/Generated/CalendarDays/Structural/Shape/MaybeLocalDay.hs b/test/conformance-calendar-days/Generated/CalendarDays/Structural/Shape/MaybeLocalDay.hs
--- a/test/conformance-calendar-days/Generated/CalendarDays/Structural/Shape/MaybeLocalDay.hs
+++ b/test/conformance-calendar-days/Generated/CalendarDays/Structural/Shape/MaybeLocalDay.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from mapped structural MaybeLocalDay; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from mapped structural MaybeLocalDay; do not edit.
 module Generated.CalendarDays.Structural.Shape.MaybeLocalDay (MaybeLocalDayShape) where
 
 import Data.Time.Calendar (Day)
diff --git a/test/conformance-calendar-days/Generated/CalendarDays/StructuralConformance.hs b/test/conformance-calendar-days/Generated/CalendarDays/StructuralConformance.hs
--- a/test/conformance-calendar-days/Generated/CalendarDays/StructuralConformance.hs
+++ b/test/conformance-calendar-days/Generated/CalendarDays/StructuralConformance.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context calendar-days structural conformance; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context calendar-days structural conformance; do not edit.
 module Generated.CalendarDays.StructuralConformance
   ( structuralConformanceAssertions
   ) where
diff --git a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/BehaviorSourceMap.hs b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/BehaviorSourceMap.hs
--- a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/BehaviorSourceMap.hs
+++ b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/BehaviorSourceMap.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context checked-mapping-replay behavior source map; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context checked-mapping-replay behavior source map; do not edit.
 module Generated.CheckedMappingReplay.BehaviorSourceMap
   ( BehaviorSourceLocation (..)
   , behaviorSourceLocation
diff --git a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Nominals.hs b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Nominals.hs
--- a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Nominals.hs
+++ b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Nominals.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context checked-mapping-replay generated nominal declarations; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context checked-mapping-replay generated nominal declarations; do not edit.
 module Generated.CheckedMappingReplay.Nominals
   ( RetainedId
   , parseRetainedId
diff --git a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Nominals/Internal.hs b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Nominals/Internal.hs
--- a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Nominals/Internal.hs
+++ b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Nominals/Internal.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context checked-mapping-replay generated nominal ID internals; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context checked-mapping-replay generated nominal ID internals; do not edit.
 module Generated.CheckedMappingReplay.Nominals.Internal
   ( RetainedId
   , parseRetainedId
diff --git a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ProjectionCatalog.hs b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ProjectionCatalog.hs
--- a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ProjectionCatalog.hs
+++ b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ProjectionCatalog.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from projection-catalog checked-mapping-replay; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from projection-catalog checked-mapping-replay; do not edit.
 {-# LANGUAGE OverloadedStrings #-}
 module Generated.CheckedMappingReplay.ProjectionCatalog
   ( projectionCatalog
diff --git a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayAudit.hs b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayAudit.hs
--- a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayAudit.hs
+++ b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayAudit.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context checked-mapping-replay replay-audit assembly; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context checked-mapping-replay replay-audit assembly; do not edit.
 --
 -- Deployment contract:
 --   * replay-neutral diff: no data audit is required;
diff --git a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayEvents/Contract.hs b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayEvents/Contract.hs
--- a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayEvents/Contract.hs
+++ b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayEvents/Contract.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from contract replay_events; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from contract replay_events; do not edit.
 module Generated.CheckedMappingReplay.ReplayEvents.Contract
   ( ReplayEventsPayload (..)
   , ReplayLinkedData (..)
diff --git a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayJobs/Queue.hs b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayJobs/Queue.hs
--- a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayJobs/Queue.hs
+++ b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayJobs/Queue.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from workqueue replay_jobs; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from workqueue replay_jobs; do not edit.
 module Generated.CheckedMappingReplay.ReplayJobs.Queue
   ( ReplayJob (..)
   , encodeReplayJob
diff --git a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayJobs/QueueCodec.hs b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayJobs/QueueCodec.hs
--- a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayJobs/QueueCodec.hs
+++ b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayJobs/QueueCodec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from workqueue replay_jobs; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from workqueue replay_jobs; do not edit.
 -- | Versioned job payload envelope: @{\"v\",\"t\",\"data\"}@.
 --
 -- Deploy workers before producers when raising its schema version. Do not
diff --git a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayJobs/QueuePolicy.hs b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayJobs/QueuePolicy.hs
--- a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayJobs/QueuePolicy.hs
+++ b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayJobs/QueuePolicy.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from workqueue replay_jobs; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from workqueue replay_jobs; do not edit.
 module Generated.CheckedMappingReplay.ReplayJobs.QueuePolicy
   ( ReplayJobsOutcome (..)
   , retryPolicy, jobOutcomeFor
diff --git a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLedger/BehaviorContract.hs b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLedger/BehaviorContract.hs
--- a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLedger/BehaviorContract.hs
+++ b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLedger/BehaviorContract.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate ReplayLedger; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate ReplayLedger; do not edit.
 module Generated.CheckedMappingReplay.ReplayLedger.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -14,6 +14,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -193,7 +194,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -206,7 +218,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLedger/Codec.hs b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLedger/Codec.hs
--- a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLedger/Codec.hs
+++ b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLedger/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate ReplayLedger; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate ReplayLedger; do not edit.
 module Generated.CheckedMappingReplay.ReplayLedger.Codec (
     replayLedgerCodec,
     parseReplayLedgerEvent,
diff --git a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLedger/Domain.hs b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLedger/Domain.hs
--- a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLedger/Domain.hs
+++ b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLedger/Domain.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE DeriveAnyClass #-}
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate ReplayLedger; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate ReplayLedger; do not edit.
 module Generated.CheckedMappingReplay.ReplayLedger.Domain where
 
 import Data.Aeson (FromJSON, ToJSON)
diff --git a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLedger/EventStream.hs b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLedger/EventStream.hs
--- a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLedger/EventStream.hs
+++ b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLedger/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate ReplayLedger; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate ReplayLedger; do not edit.
 module Generated.CheckedMappingReplay.ReplayLedger.EventStream
   ( replayLedgerCategory
   , replayLedgerCommandCategory
diff --git a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLedger/Harness.hs b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLedger/Harness.hs
--- a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLedger/Harness.hs
+++ b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLedger/Harness.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate ReplayLedger; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate ReplayLedger; do not edit.
 module Generated.CheckedMappingReplay.ReplayLedger.Harness (harnessAssertions) where
 
 import Generated.CheckedMappingReplay.ReplayLedger.Domain
diff --git a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLedger/Projection.hs b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLedger/Projection.hs
--- a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLedger/Projection.hs
+++ b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLedger/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate ReplayLedger; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate ReplayLedger; do not edit.
 module Generated.CheckedMappingReplay.ReplayLedger.Projection () where
 
 -- No projection declarations are present; this module keeps the generated manifest inventory total.
diff --git a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLedger/Transducer.hs b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLedger/Transducer.hs
--- a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLedger/Transducer.hs
+++ b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLedger/Transducer.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate ReplayLedger; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate ReplayLedger; do not edit.
 module Generated.CheckedMappingReplay.ReplayLedger.Transducer
   ( replayLedgerTransducer
   , replayLedgerFoldFingerprint
diff --git a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLookup/QueryContract.hs b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLookup/QueryContract.hs
--- a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLookup/QueryContract.hs
+++ b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLookup/QueryContract.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from readmodel replay_lookup; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from readmodel replay_lookup; do not edit.
 module Generated.CheckedMappingReplay.ReplayLookup.QueryContract
   ( ReplayLookupQueryInput
   , ReplayLookupQueryResult
diff --git a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLookup/ReadModel.hs b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLookup/ReadModel.hs
--- a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLookup/ReadModel.hs
+++ b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLookup/ReadModel.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from readmodel replay_lookup; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from readmodel replay_lookup; do not edit.
 module Generated.CheckedMappingReplay.ReplayLookup.ReadModel
   ( replayLookupReadModel
   , replayLookupQualifiedTable
diff --git a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLookup/ReadModelHarness.hs b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLookup/ReadModelHarness.hs
--- a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLookup/ReadModelHarness.hs
+++ b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLookup/ReadModelHarness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from readmodel replay_lookup; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from readmodel replay_lookup; do not edit.
 module Generated.CheckedMappingReplay.ReplayLookup.ReadModelHarness (readModelFacts, readModelFactResults, runReadModelFacts, catalogFactsAgainst) where
 
 import Generated.CheckedMappingReplay.ReplayLookup.ReadModel (replayLookupReadModel)
diff --git a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLookup/ReadModelTable.hs b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLookup/ReadModelTable.hs
--- a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLookup/ReadModelTable.hs
+++ b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLookup/ReadModelTable.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from readmodel replay_lookup; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from readmodel replay_lookup; do not edit.
 module Generated.CheckedMappingReplay.ReplayLookup.ReadModelTable (replayLookupQualifiedTable) where
 
 import Data.Text (Text)
diff --git a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayReaction/Input.hs b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayReaction/Input.hs
--- a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayReaction/Input.hs
+++ b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayReaction/Input.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE DeriveAnyClass #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from process input ReplayReaction; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from process input ReplayReaction; do not edit.
 module Generated.CheckedMappingReplay.ReplayReaction.Input (ReplayReactionInput (..)) where
 
 import Data.Aeson (FromJSON, ToJSON)
diff --git a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayReaction/Process.hs b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayReaction/Process.hs
--- a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayReaction/Process.hs
+++ b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayReaction/Process.hs
@@ -1,5 +1,5 @@
 {-# OPTIONS_GHC -Wno-missing-signatures #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from process reaction ReplayReaction; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from process reaction ReplayReaction; do not edit.
 module Generated.CheckedMappingReplay.ReplayReaction.Process
   ( ReplayReactionInput (..)
   , replayReactionProcessName
diff --git a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayReaction/ProcessHarness.hs b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayReaction/ProcessHarness.hs
--- a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayReaction/ProcessHarness.hs
+++ b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayReaction/ProcessHarness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from process ReplayReaction; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from process ReplayReaction; do not edit.
 module Generated.CheckedMappingReplay.ReplayReaction.ProcessHarness (processHarnessValues) where
 
 -- | (label, value): the spec's deterministic process/timer decisions,
diff --git a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayTarget/BehaviorContract.hs b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayTarget/BehaviorContract.hs
--- a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayTarget/BehaviorContract.hs
+++ b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayTarget/BehaviorContract.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate ReplayTarget; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate ReplayTarget; do not edit.
 module Generated.CheckedMappingReplay.ReplayTarget.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -14,6 +14,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -145,7 +146,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -158,7 +170,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayTarget/Codec.hs b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayTarget/Codec.hs
--- a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayTarget/Codec.hs
+++ b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayTarget/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate ReplayTarget; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate ReplayTarget; do not edit.
 module Generated.CheckedMappingReplay.ReplayTarget.Codec (
     replayTargetCodec,
     parseReplayTargetEvent,
diff --git a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayTarget/Domain.hs b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayTarget/Domain.hs
--- a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayTarget/Domain.hs
+++ b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayTarget/Domain.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate ReplayTarget; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate ReplayTarget; do not edit.
 module Generated.CheckedMappingReplay.ReplayTarget.Domain where
 
 import Data.Proxy (Proxy (..))
diff --git a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayTarget/EventStream.hs b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayTarget/EventStream.hs
--- a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayTarget/EventStream.hs
+++ b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayTarget/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate ReplayTarget; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate ReplayTarget; do not edit.
 module Generated.CheckedMappingReplay.ReplayTarget.EventStream
   ( replayTargetCategory
   , replayTargetCommandCategory
diff --git a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayTarget/Harness.hs b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayTarget/Harness.hs
--- a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayTarget/Harness.hs
+++ b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayTarget/Harness.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate ReplayTarget; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate ReplayTarget; do not edit.
 module Generated.CheckedMappingReplay.ReplayTarget.Harness (harnessAssertions) where
 
 import Generated.CheckedMappingReplay.ReplayTarget.Domain
diff --git a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayTarget/Projection.hs b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayTarget/Projection.hs
--- a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayTarget/Projection.hs
+++ b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayTarget/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate ReplayTarget; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate ReplayTarget; do not edit.
 module Generated.CheckedMappingReplay.ReplayTarget.Projection () where
 
 -- No projection declarations are present; this module keeps the generated manifest inventory total.
diff --git a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayTarget/Transducer.hs b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayTarget/Transducer.hs
--- a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayTarget/Transducer.hs
+++ b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayTarget/Transducer.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate ReplayTarget; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate ReplayTarget; do not edit.
 module Generated.CheckedMappingReplay.ReplayTarget.Transducer
   ( replayTargetTransducer
   , replayTargetFoldFingerprint
diff --git a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Structural/NominalLeaves.hs b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Structural/NominalLeaves.hs
--- a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Structural/NominalLeaves.hs
+++ b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Structural/NominalLeaves.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context checked-mapping-replay structural nominal leaves; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context checked-mapping-replay structural nominal leaves; do not edit.
 module Generated.CheckedMappingReplay.Structural.NominalLeaves where
 
 import Data.Aeson (Value (..), withText)
diff --git a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Structural/Shape/ContentHash.hs b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Structural/Shape/ContentHash.hs
--- a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Structural/Shape/ContentHash.hs
+++ b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Structural/Shape/ContentHash.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from mapped structural ContentHash; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from mapped structural ContentHash; do not edit.
 module Generated.CheckedMappingReplay.Structural.Shape.ContentHash (ContentHashShape) where
 
 import Data.ByteString (ByteString)
diff --git a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Structural/Shape/ImportantDays.hs b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Structural/Shape/ImportantDays.hs
--- a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Structural/Shape/ImportantDays.hs
+++ b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Structural/Shape/ImportantDays.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from mapped structural ImportantDays; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from mapped structural ImportantDays; do not edit.
 module Generated.CheckedMappingReplay.Structural.Shape.ImportantDays (ImportantDaysShape) where
 
 import Data.Time.Calendar (Day)
diff --git a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Structural/Shape/MaybeContentHash.hs b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Structural/Shape/MaybeContentHash.hs
--- a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Structural/Shape/MaybeContentHash.hs
+++ b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Structural/Shape/MaybeContentHash.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from mapped structural MaybeContentHash; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from mapped structural MaybeContentHash; do not edit.
 module Generated.CheckedMappingReplay.Structural.Shape.MaybeContentHash (MaybeContentHashShape) where
 
 import Generated.CheckedMappingReplay.Structural.Shape.ContentHash qualified as ContentHash
diff --git a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Structural/Shape/MaybeLabel.hs b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Structural/Shape/MaybeLabel.hs
--- a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Structural/Shape/MaybeLabel.hs
+++ b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Structural/Shape/MaybeLabel.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from mapped structural MaybeLabel; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from mapped structural MaybeLabel; do not edit.
 module Generated.CheckedMappingReplay.Structural.Shape.MaybeLabel (MaybeLabelShape) where
 
 import Data.Text (Text)
diff --git a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Structural/Shape/ReplayEnvelope.hs b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Structural/Shape/ReplayEnvelope.hs
--- a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Structural/Shape/ReplayEnvelope.hs
+++ b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Structural/Shape/ReplayEnvelope.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from mapped structural ReplayEnvelope; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from mapped structural ReplayEnvelope; do not edit.
 module Generated.CheckedMappingReplay.Structural.Shape.ReplayEnvelope (ReplayEnvelopeShape (..)) where
 
 import Data.Map.Strict (Map)
diff --git a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Structural/Shape/TextLabels.hs b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Structural/Shape/TextLabels.hs
--- a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Structural/Shape/TextLabels.hs
+++ b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Structural/Shape/TextLabels.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from mapped structural TextLabels; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from mapped structural TextLabels; do not edit.
 module Generated.CheckedMappingReplay.Structural.Shape.TextLabels (TextLabelsShape) where
 
 import Data.Set (Set)
diff --git a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/StructuralConformance.hs b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/StructuralConformance.hs
--- a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/StructuralConformance.hs
+++ b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/StructuralConformance.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context checked-mapping-replay structural conformance; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context checked-mapping-replay structural conformance; do not edit.
 module Generated.CheckedMappingReplay.StructuralConformance
   ( structuralConformanceAssertions
   ) where
diff --git a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/StructuralProjections.hs b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/StructuralProjections.hs
--- a/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/StructuralProjections.hs
+++ b/test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/StructuralProjections.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TypeFamilies #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context checked-mapping-replay mapped structural facade; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context checked-mapping-replay mapped structural facade; do not edit.
 -- Equality witnesses are emitted for Text, Int, Bool, Natural, and UTCTime.
 -- Nominal ID and enum leaves carry exact canonical-text domains.
 -- Int, Natural, and UTCTime belong to Keiki's ordered subset.
diff --git a/test/conformance-coldstart/Generated/Billing/BehaviorSourceMap.hs b/test/conformance-coldstart/Generated/Billing/BehaviorSourceMap.hs
--- a/test/conformance-coldstart/Generated/Billing/BehaviorSourceMap.hs
+++ b/test/conformance-coldstart/Generated/Billing/BehaviorSourceMap.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context billing behavior source map; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context billing behavior source map; do not edit.
 module Generated.Billing.BehaviorSourceMap
   ( BehaviorSourceLocation (..)
   , behaviorSourceLocation
diff --git a/test/conformance-coldstart/Generated/Billing/Nominals.hs b/test/conformance-coldstart/Generated/Billing/Nominals.hs
--- a/test/conformance-coldstart/Generated/Billing/Nominals.hs
+++ b/test/conformance-coldstart/Generated/Billing/Nominals.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE DeriveAnyClass #-}
 {-# LANGUAGE TypeFamilies #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context billing generated nominal declarations; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context billing generated nominal declarations; do not edit.
 module Generated.Billing.Nominals
   ( CustomerId
   , parseCustomerId
diff --git a/test/conformance-coldstart/Generated/Billing/Nominals/Internal.hs b/test/conformance-coldstart/Generated/Billing/Nominals/Internal.hs
--- a/test/conformance-coldstart/Generated/Billing/Nominals/Internal.hs
+++ b/test/conformance-coldstart/Generated/Billing/Nominals/Internal.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context billing generated nominal ID internals; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context billing generated nominal ID internals; do not edit.
 module Generated.Billing.Nominals.Internal
   ( CustomerId
   , parseCustomerId
diff --git a/test/conformance-coldstart/Generated/Billing/ReplayAudit.hs b/test/conformance-coldstart/Generated/Billing/ReplayAudit.hs
--- a/test/conformance-coldstart/Generated/Billing/ReplayAudit.hs
+++ b/test/conformance-coldstart/Generated/Billing/ReplayAudit.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context billing replay-audit assembly; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context billing replay-audit assembly; do not edit.
 --
 -- Deployment contract:
 --   * replay-neutral diff: no data audit is required;
diff --git a/test/conformance-coldstart/Generated/Billing/Subscription/BehaviorContract.hs b/test/conformance-coldstart/Generated/Billing/Subscription/BehaviorContract.hs
--- a/test/conformance-coldstart/Generated/Billing/Subscription/BehaviorContract.hs
+++ b/test/conformance-coldstart/Generated/Billing/Subscription/BehaviorContract.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Subscription; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Subscription; do not edit.
 module Generated.Billing.Subscription.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -14,6 +14,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -205,7 +206,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -218,7 +230,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-coldstart/Generated/Billing/Subscription/Codec.hs b/test/conformance-coldstart/Generated/Billing/Subscription/Codec.hs
--- a/test/conformance-coldstart/Generated/Billing/Subscription/Codec.hs
+++ b/test/conformance-coldstart/Generated/Billing/Subscription/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Subscription; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Subscription; do not edit.
 module Generated.Billing.Subscription.Codec (
     subscriptionCodec,
     parseSubscriptionEvent,
diff --git a/test/conformance-coldstart/Generated/Billing/Subscription/Domain.hs b/test/conformance-coldstart/Generated/Billing/Subscription/Domain.hs
--- a/test/conformance-coldstart/Generated/Billing/Subscription/Domain.hs
+++ b/test/conformance-coldstart/Generated/Billing/Subscription/Domain.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Subscription; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Subscription; do not edit.
 module Generated.Billing.Subscription.Domain where
 
 import Data.Proxy (Proxy (..))
diff --git a/test/conformance-coldstart/Generated/Billing/Subscription/EventStream.hs b/test/conformance-coldstart/Generated/Billing/Subscription/EventStream.hs
--- a/test/conformance-coldstart/Generated/Billing/Subscription/EventStream.hs
+++ b/test/conformance-coldstart/Generated/Billing/Subscription/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Subscription; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Subscription; do not edit.
 module Generated.Billing.Subscription.EventStream
   ( subscriptionCategory
   , subscriptionCommandCategory
diff --git a/test/conformance-coldstart/Generated/Billing/Subscription/Harness.hs b/test/conformance-coldstart/Generated/Billing/Subscription/Harness.hs
--- a/test/conformance-coldstart/Generated/Billing/Subscription/Harness.hs
+++ b/test/conformance-coldstart/Generated/Billing/Subscription/Harness.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Subscription; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Subscription; do not edit.
 module Generated.Billing.Subscription.Harness (harnessAssertions) where
 
 import Generated.Billing.Subscription.Domain
diff --git a/test/conformance-coldstart/Generated/Billing/Subscription/Projection.hs b/test/conformance-coldstart/Generated/Billing/Subscription/Projection.hs
--- a/test/conformance-coldstart/Generated/Billing/Subscription/Projection.hs
+++ b/test/conformance-coldstart/Generated/Billing/Subscription/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Subscription; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Subscription; do not edit.
 module Generated.Billing.Subscription.Projection
   ( subscriptionsProjection
   , subscriptionsStatusFor
diff --git a/test/conformance-coldstart/Generated/Billing/Subscription/Transducer.hs b/test/conformance-coldstart/Generated/Billing/Subscription/Transducer.hs
--- a/test/conformance-coldstart/Generated/Billing/Subscription/Transducer.hs
+++ b/test/conformance-coldstart/Generated/Billing/Subscription/Transducer.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE OverloadedLabels #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Subscription; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Subscription; do not edit.
 module Generated.Billing.Subscription.Transducer
   ( subscriptionTransducer
   , subscriptionFoldFingerprint
diff --git a/test/conformance-contract-declared-id/Generated/ContractDeclaredId/Nominals.hs b/test/conformance-contract-declared-id/Generated/ContractDeclaredId/Nominals.hs
--- a/test/conformance-contract-declared-id/Generated/ContractDeclaredId/Nominals.hs
+++ b/test/conformance-contract-declared-id/Generated/ContractDeclaredId/Nominals.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context contract-declared-id generated nominal declarations; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context contract-declared-id generated nominal declarations; do not edit.
 module Generated.ContractDeclaredId.Nominals
   ( TemplateId
   , parseTemplateId
diff --git a/test/conformance-contract-declared-id/Generated/ContractDeclaredId/Nominals/Internal.hs b/test/conformance-contract-declared-id/Generated/ContractDeclaredId/Nominals/Internal.hs
--- a/test/conformance-contract-declared-id/Generated/ContractDeclaredId/Nominals/Internal.hs
+++ b/test/conformance-contract-declared-id/Generated/ContractDeclaredId/Nominals/Internal.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context contract-declared-id generated nominal ID internals; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context contract-declared-id generated nominal ID internals; do not edit.
 module Generated.ContractDeclaredId.Nominals.Internal
   ( TemplateId
   , parseTemplateId
diff --git a/test/conformance-contract-declared-id/Generated/ContractDeclaredId/Structural/NominalLeaves.hs b/test/conformance-contract-declared-id/Generated/ContractDeclaredId/Structural/NominalLeaves.hs
--- a/test/conformance-contract-declared-id/Generated/ContractDeclaredId/Structural/NominalLeaves.hs
+++ b/test/conformance-contract-declared-id/Generated/ContractDeclaredId/Structural/NominalLeaves.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context contract-declared-id structural nominal leaves; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context contract-declared-id structural nominal leaves; do not edit.
 module Generated.ContractDeclaredId.Structural.NominalLeaves where
 
 import Data.Aeson (Value (..), withText)
diff --git a/test/conformance-contract-declared-id/Generated/ContractDeclaredId/StructuralConformance.hs b/test/conformance-contract-declared-id/Generated/ContractDeclaredId/StructuralConformance.hs
--- a/test/conformance-contract-declared-id/Generated/ContractDeclaredId/StructuralConformance.hs
+++ b/test/conformance-contract-declared-id/Generated/ContractDeclaredId/StructuralConformance.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context contract-declared-id structural conformance; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context contract-declared-id structural conformance; do not edit.
 module Generated.ContractDeclaredId.StructuralConformance
   ( structuralConformanceAssertions
   ) where
diff --git a/test/conformance-contract-declared-id/Generated/ContractDeclaredId/Templates/Contract.hs b/test/conformance-contract-declared-id/Generated/ContractDeclaredId/Templates/Contract.hs
--- a/test/conformance-contract-declared-id/Generated/ContractDeclaredId/Templates/Contract.hs
+++ b/test/conformance-contract-declared-id/Generated/ContractDeclaredId/Templates/Contract.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from contract templates; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from contract templates; do not edit.
 module Generated.ContractDeclaredId.Templates.Contract
   ( TemplatesPayload (..)
   , TemplateClaimedData (..)
diff --git a/test/conformance-contract-list-fields/Conformance/ContractListFields/Bindings.hs b/test/conformance-contract-list-fields/Conformance/ContractListFields/Bindings.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-contract-list-fields/Conformance/ContractListFields/Bindings.hs
@@ -0,0 +1,25 @@
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE TypeApplications #-}
+
+module Conformance.ContractListFields.Bindings where
+
+import Conformance.ContractListFields.Domain
+import Data.Aeson (Value (String))
+import Data.KindID qualified as KindID
+import Data.List.NonEmpty (NonEmpty (..))
+import Data.Text (Text)
+import Keiro.Codec.Nominal (NominalBinding (..), NominalFixture (..), NominalFixtureCases (..))
+
+claimIdText :: Text
+claimIdText = "claim_01h455vb4pex5vsknk084sn02q"
+
+claimId :: ClaimId
+claimId = case KindID.parseText @"claim" claimIdText of
+  Left reason -> error ("invalid committed ClaimId fixture: " <> show reason)
+  Right value -> ClaimId value
+
+claimIdBinding :: NominalBinding ClaimId (KindID.KindID "claim")
+claimIdBinding = NominalBinding unClaimId ClaimId
+
+claimIdFixtures :: NominalFixtureCases ClaimId
+claimIdFixtures = NominalFixtureCases (NominalFixture "claim" (String claimIdText) claimId :| [])
diff --git a/test/conformance-contract-list-fields/Conformance/ContractListFields/Domain.hs b/test/conformance-contract-list-fields/Conformance/ContractListFields/Domain.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-contract-list-fields/Conformance/ContractListFields/Domain.hs
@@ -0,0 +1,19 @@
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+
+module Conformance.ContractListFields.Domain where
+
+import Data.KindID (KindID)
+import Data.Proxy (Proxy)
+import Data.Text (Text)
+import Keiki.Shape (CanonicalTypeName (..))
+
+newtype ClaimId = ClaimId (KindID "claim")
+  deriving newtype (Eq, Ord, Show)
+
+unClaimId :: ClaimId -> KindID "claim"
+unClaimId (ClaimId value) = value
+
+instance CanonicalTypeName ClaimId where
+  canonicalTypeName :: Proxy ClaimId -> Text
+  canonicalTypeName _ = "conformance.contract-list-fields.ClaimId.v1"
diff --git a/test/conformance-contract-list-fields/Generated/ContractListFields/Nominals.hs b/test/conformance-contract-list-fields/Generated/ContractListFields/Nominals.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-contract-list-fields/Generated/ContractListFields/Nominals.hs
@@ -0,0 +1,9 @@
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context contract-list-fields generated nominal declarations; do not edit.
+module Generated.ContractListFields.Nominals
+  ( TemplateId
+  , parseTemplateId
+  , mkTemplateId
+  , templateIdText
+  ) where
+
+import Generated.ContractListFields.Nominals.Internal (TemplateId, mkTemplateId, parseTemplateId, templateIdText)
diff --git a/test/conformance-contract-list-fields/Generated/ContractListFields/Nominals/Internal.hs b/test/conformance-contract-list-fields/Generated/ContractListFields/Nominals/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-contract-list-fields/Generated/ContractListFields/Nominals/Internal.hs
@@ -0,0 +1,40 @@
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context contract-list-fields generated nominal ID internals; do not edit.
+module Generated.ContractListFields.Nominals.Internal
+  ( TemplateId
+  , parseTemplateId
+  , mkTemplateId
+  , templateIdText
+  , unsafeTemplateIdFromLegacyText
+  ) where
+
+import Data.Aeson (FromJSON (..), ToJSON (..), withText)
+import Data.Text (Text)
+import Data.Text qualified as T
+import GHC.Generics (Generic)
+import Keiki.Shape (CanonicalTypeName)
+import Keiro.Codec.IdDomain (typeIdV7Domain, validateIdDomainText)
+
+newtype TemplateId = TemplateId Text
+  deriving stock (Generic, Eq, Ord, Show)
+
+instance CanonicalTypeName TemplateId
+
+instance ToJSON TemplateId where
+  toJSON = toJSON . templateIdText
+
+instance FromJSON TemplateId where
+  parseJSON = withText "TemplateId" (either (fail . T.unpack) pure . parseTemplateId)
+
+parseTemplateId :: Text -> Either Text TemplateId
+parseTemplateId input = case validateIdDomainText (typeIdV7Domain "template") input of
+  Left reason -> Left (T.pack (show reason))
+  Right () -> Right (TemplateId input)
+
+mkTemplateId :: Text -> Either Text TemplateId
+mkTemplateId = parseTemplateId
+
+templateIdText :: TemplateId -> Text
+templateIdText (TemplateId value) = value
+
+unsafeTemplateIdFromLegacyText :: Text -> TemplateId
+unsafeTemplateIdFromLegacyText = TemplateId
diff --git a/test/conformance-contract-list-fields/Generated/ContractListFields/Structural/NominalLeaves.hs b/test/conformance-contract-list-fields/Generated/ContractListFields/Structural/NominalLeaves.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-contract-list-fields/Generated/ContractListFields/Structural/NominalLeaves.hs
@@ -0,0 +1,31 @@
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context contract-list-fields structural nominal leaves; do not edit.
+module Generated.ContractListFields.Structural.NominalLeaves where
+
+import Data.Aeson (Value (..), withText)
+import Data.Aeson.Types (Parser)
+import Data.KindID qualified as KindID
+import Data.Text qualified as T
+import Keiro.Codec.IdDomain (parseKindIdV7Text)
+import Keiro.Codec.Nominal (nominalFromRepresentation, nominalToRepresentation)
+import Conformance.ContractListFields.Bindings qualified as Bindings
+import Conformance.ContractListFields.Domain (ClaimId)
+import Generated.ContractListFields.Nominals qualified as Nominals
+
+encodeClaimIdLeaf :: ClaimId -> Value
+encodeClaimIdLeaf = String . KindID.toText . nominalToRepresentation Bindings.claimIdBinding
+{-# NOINLINE encodeClaimIdLeaf #-}
+
+parseClaimIdLeaf :: Value -> Parser ClaimId
+parseClaimIdLeaf = withText "ClaimId" $ \input ->
+  case parseKindIdV7Text @"claim" input of
+    Left reason -> fail (show reason)
+    Right representation -> pure (nominalFromRepresentation Bindings.claimIdBinding representation)
+{-# NOINLINE parseClaimIdLeaf #-}
+
+encodeTemplateIdLeaf :: Nominals.TemplateId -> Value
+encodeTemplateIdLeaf = String . Nominals.templateIdText
+{-# NOINLINE encodeTemplateIdLeaf #-}
+
+parseTemplateIdLeaf :: Value -> Parser Nominals.TemplateId
+parseTemplateIdLeaf = withText "TemplateId" (either (fail . T.unpack) pure . Nominals.parseTemplateId)
+{-# NOINLINE parseTemplateIdLeaf #-}
diff --git a/test/conformance-contract-list-fields/Generated/ContractListFields/StructuralConformance.hs b/test/conformance-contract-list-fields/Generated/ContractListFields/StructuralConformance.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-contract-list-fields/Generated/ContractListFields/StructuralConformance.hs
@@ -0,0 +1,26 @@
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context contract-list-fields structural conformance; do not edit.
+module Generated.ContractListFields.StructuralConformance
+  ( structuralConformanceAssertions
+  ) where
+
+import Data.List.NonEmpty qualified as NonEmpty
+import Data.Proxy (Proxy (..))
+import Keiki.Shape (CanonicalTypeName (..))
+import Keiro.Codec.Nominal (nominalDomainRoundTrip, nominalFixtureCases, nominalFixtureDomain, nominalRepresentationRoundTrip, nominalToRepresentation)
+import Conformance.ContractListFields.Bindings qualified as Bindings
+import Conformance.ContractListFields.Domain (ClaimId)
+
+structuralConformanceAssertions :: [(String, Bool)]
+structuralConformanceAssertions =
+  concat
+    [ claimIdNominalAssertions
+    ]
+
+claimIdNominalAssertions :: [(String, Bool)]
+claimIdNominalAssertions =
+  [ ("nominal domain law: ClaimId", all (nominalDomainRoundTrip Bindings.claimIdBinding . nominalFixtureDomain) cases)
+  , ("nominal representation law: ClaimId", all (\fixture -> let domainValue = nominalFixtureDomain fixture in nominalRepresentationRoundTrip Bindings.claimIdBinding (nominalToRepresentation Bindings.claimIdBinding domainValue)) cases)
+  , ("nominal canonical identity: ClaimId", canonicalTypeName (Proxy @ClaimId) == "conformance.contract-list-fields.ClaimId.v1")
+  ]
+  where
+    cases = NonEmpty.toList (nominalFixtureCases Bindings.claimIdFixtures)
diff --git a/test/conformance-contract-list-fields/Generated/ContractListFields/Templates/Contract.hs b/test/conformance-contract-list-fields/Generated/ContractListFields/Templates/Contract.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-contract-list-fields/Generated/ContractListFields/Templates/Contract.hs
@@ -0,0 +1,97 @@
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from contract templates; do not edit.
+module Generated.ContractListFields.Templates.Contract
+  ( TemplatesPayload (..)
+  , TemplatesReassignedData (..)
+  , IndexData (..)
+  , templateEventsTopic
+  , messageTypeOf
+  , encodeTemplatesPayload
+  , parseTemplatesPayload
+  ) where
+
+import Data.Aeson (Value, object, withObject, withText, parseJSON, (.=))
+import Data.Aeson.Types (Parser, explicitParseField, parseEither, (<?>))
+import qualified Data.Aeson.Types as Aeson
+import Data.KindID (KindID)
+import qualified Data.KindID as KindID
+import Conformance.ContractListFields.Domain (ClaimId)
+import Generated.ContractListFields.Nominals qualified as Nominals
+import Generated.ContractListFields.Structural.NominalLeaves qualified as NominalLeaves
+import Data.Text (Text)
+import qualified Data.Text as T
+import Keiro.Codec.IdDomain (parseKindIdV7Value)
+
+-- topic constants
+templateEventsTopic :: Text
+templateEventsTopic = "templates.events"
+
+-- the closed payload set (discriminated by "messageType")
+data TemplatesReassignedData = TemplatesReassignedData {typeId :: !Nominals.TemplateId, templateIds :: ![Nominals.TemplateId], claimIds :: ![ClaimId], legacyTemplateIds :: ![(KindID "template")], labels :: ![Text], positions :: ![Int]}
+  deriving stock (Eq, Show)
+
+data IndexData = IndexData {offsets :: ![Int]}
+  deriving stock (Eq, Show)
+
+data TemplatesPayload
+  = TemplatesReassigned !TemplatesReassignedData
+  | Index !IndexData
+  deriving stock (Eq, Show)
+
+messageTypeOf :: TemplatesPayload -> Text
+messageTypeOf = \case
+  TemplatesReassigned {} -> "TemplatesReassigned"
+  Index {} -> "Index"
+
+encodeTemplatesPayload :: TemplatesPayload -> Value
+encodeTemplatesPayload = \case
+  TemplatesReassigned payload ->
+    object
+      [ "messageType" .= ("TemplatesReassigned" :: Text),
+        "typeId" .= NominalLeaves.encodeTemplateIdLeaf payload.typeId,
+        "templateIds" .= map NominalLeaves.encodeTemplateIdLeaf payload.templateIds,
+        "claimIds" .= map NominalLeaves.encodeClaimIdLeaf payload.claimIds,
+        "legacyTemplateIds" .= map KindID.toText payload.legacyTemplateIds,
+        "labels" .= payload.labels,
+        "positions" .= payload.positions
+      ]
+  Index payload ->
+    object
+      [ "messageType" .= ("Index" :: Text),
+        "offsets" .= payload.offsets
+      ]
+
+parseTemplatesPayload :: Value -> Either Text TemplatesPayload
+parseTemplatesPayload = mapLeftText . parseEither (withObject "TemplatesPayload" go)
+  where
+    go o = do
+      kind <- explicitParseField (withText "messageType" validateMessageType) o "messageType"
+      case kind of
+        "TemplatesReassigned" ->
+          TemplatesReassigned
+            <$> ( TemplatesReassignedData
+                    <$> explicitParseField NominalLeaves.parseTemplateIdLeaf o "typeId"
+                    <*> explicitParseField (parseContractList NominalLeaves.parseTemplateIdLeaf) o "templateIds"
+                    <*> explicitParseField (parseContractList NominalLeaves.parseClaimIdLeaf) o "claimIds"
+                    <*> explicitParseField (parseContractList (parseKindIdV7Value @"template")) o "legacyTemplateIds"
+                    <*> explicitParseField (parseContractList parseJSON) o "labels"
+                    <*> explicitParseField (parseContractList parseJSON) o "positions"
+                )
+        "Index" ->
+          Index
+            <$> ( IndexData
+                    <$> explicitParseField (parseContractList parseJSON) o "offsets"
+                )
+        _ -> fail "validated message type was not handled"
+
+mapLeftText :: Either String b -> Either Text b
+mapLeftText = either (Left . T.pack) Right
+
+validateMessageType :: Text -> Parser Text
+validateMessageType kind
+  | kind `elem` ["TemplatesReassigned", "Index"] = pure kind
+  | otherwise = fail ("unknown message type " <> show kind <> "; expected one of: TemplatesReassigned, Index")
+
+parseContractList :: (Value -> Parser a) -> Value -> Parser [a]
+parseContractList element value = do
+  items <- parseJSON value :: Parser [Value]
+  traverse (\(index, item) -> element item <?> Aeson.Index index) (zip [0 :: Int ..] items)
diff --git a/test/conformance-contract-list-fields/Main.hs b/test/conformance-contract-list-fields/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-contract-list-fields/Main.hs
@@ -0,0 +1,92 @@
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TypeApplications #-}
+
+module Main (main) where
+
+import Conformance.ContractListFields.Bindings (claimId, claimIdText)
+import Data.Aeson (Value (Null, Object, String), object, toJSON, (.=))
+import Data.Aeson.Key (Key)
+import Data.Aeson.KeyMap qualified as KeyMap
+import Data.KindID qualified as KindID
+import Data.Text (Text)
+import Data.Text qualified as T
+import Generated.ContractListFields.Nominals (TemplateId, parseTemplateId)
+import Generated.ContractListFields.StructuralConformance (structuralConformanceAssertions)
+import Generated.ContractListFields.Templates.Contract
+import System.Exit (exitFailure)
+
+templateTexts :: [Text]
+templateTexts = [templateIdText, "template_01h455vb4pex5vsknk084sn02r"]
+
+templateIdText :: Text
+templateIdText = "template_01h455vb4pex5vsknk084sn02q"
+
+templateIdValue :: TemplateId
+templateIdValue = either (error . T.unpack) id (parseTemplateId templateIdText)
+
+templateIdsValue :: [TemplateId]
+templateIdsValue = map (either (error . T.unpack) id . parseTemplateId) templateTexts
+
+legacyTemplateIdValue :: KindID.KindID "template"
+legacyTemplateIdValue = either (error . show) id (KindID.parseText @"template" (templateIdText))
+
+payload :: TemplatesPayload
+payload = TemplatesReassigned (TemplatesReassignedData (templateIdValue) templateIdsValue [claimId] [legacyTemplateIdValue] ["first", "second"] [1, 2])
+
+expectedJson :: Value
+expectedJson =
+  object
+    [ "messageType" .= ("TemplatesReassigned" :: Text),
+      "typeId" .= templateIdText,
+      "templateIds" .= templateTexts,
+      "claimIds" .= [claimIdText],
+      "legacyTemplateIds" .= [templateIdText],
+      "labels" .= (["first", "second"] :: [Text]),
+      "positions" .= ([1, 2] :: [Int])
+    ]
+
+listKeys :: [Key]
+listKeys = ["templateIds", "claimIds", "legacyTemplateIds", "labels", "positions"]
+
+replaceField :: Key -> Value -> Value -> Value
+replaceField key value (Object fields) = Object (KeyMap.insert key value fields)
+replaceField _ _ value = value
+
+removeField :: Key -> Value -> Value
+removeField key (Object fields) = Object (KeyMap.delete key fields)
+removeField _ value = value
+
+rejectsAt :: Text -> Value -> Bool
+rejectsAt path value = case parseTemplatesPayload value of
+  Left problem -> path `T.isInfixOf` problem
+  Right _ -> False
+
+main :: IO ()
+main = do
+  let encoded = encodeTemplatesPayload payload
+      empty = TemplatesReassigned (TemplatesReassignedData (templateIdValue) [] [] [] [] [])
+      reversed = TemplatesReassigned (TemplatesReassignedData (templateIdValue) (reverse templateIdsValue) [claimId] [legacyTemplateIdValue] ["first", "second"] [1, 2])
+      repeated = TemplatesReassigned (TemplatesReassignedData (templateIdValue) (templateIdsValue <> templateIdsValue) [claimId, claimId] [legacyTemplateIdValue, legacyTemplateIdValue] ["first", "first"] [1, 1])
+      indexPayload = Index (IndexData [2, 1, 2])
+      indexJson = object ["messageType" .= ("Index" :: Text), "offsets" .= ([2, 1, 2] :: [Int])]
+      expectedEmpty = foldr (\key -> replaceField key (toJSON ([] :: [Value]))) expectedJson listKeys
+      checks =
+        [ ("list fields encode exact ordered scalar arrays", encoded == expectedJson),
+          ("all scalar families round-trip", parseTemplatesPayload encoded == Right payload),
+          ("empty lists encode required empty arrays and round-trip", encodeTemplatesPayload empty == expectedEmpty && parseTemplatesPayload expectedEmpty == Right empty),
+          ("reversed IDs preserve their order", encodeTemplatesPayload reversed == replaceField "templateIds" (toJSON (reverse templateTexts)) expectedJson && parseTemplatesPayload (encodeTemplatesPayload reversed) == Right reversed),
+          ("duplicates retain their positions", parseTemplatesPayload (encodeTemplatesPayload repeated) == Right repeated && encodeTemplatesPayload repeated == foldr (uncurry replaceField) expectedJson [("templateIds", toJSON (templateTexts <> templateTexts)), ("claimIds", toJSON [claimIdText, claimIdText]), ("legacyTemplateIds", toJSON [templateIdText, templateIdText]), ("labels", toJSON (["first", "first"] :: [Text])), ("positions", toJSON ([1, 1] :: [Int]))]),
+          ("non-array fails at $.templateIds", rejectsAt "$.templateIds" (replaceField "templateIds" (String (templateIdText)) encoded)),
+          ("wrong-prefix second element fails at $.templateIds[1]", rejectsAt "$.templateIds[1]" (replaceField "templateIds" (toJSON [templateIdText, claimIdText]) encoded)),
+          ("consumer-bound ID admission has an element path", rejectsAt "$.claimIds[0]" (replaceField "claimIds" (toJSON [templateIdText]) encoded)),
+          ("literal ID admission has an element path", rejectsAt "$.legacyTemplateIds[0]" (replaceField "legacyTemplateIds" (toJSON [claimIdText]) encoded)),
+          ("all list fields are required", all (\key -> rejectsAt (T.pack (show key)) (removeField key encoded)) listKeys),
+          ("all list fields reject null", all (\key -> rejectsAt ("$." <> T.dropAround (== '"') (T.pack (show key))) (replaceField key Null encoded)) listKeys),
+          ("all scalar families reject null elements at their index", all (\key -> rejectsAt ("$." <> T.dropAround (== '"') (T.pack (show key)) <> "[0]") (replaceField key (toJSON [Null]) encoded)) listKeys),
+          ("contract-only nominal helpers pass conformance", all snd structuralConformanceAssertions),
+          ("Index event encodes exact arrays and round-trips", encodeTemplatesPayload indexPayload == indexJson && parseTemplatesPayload indexJson == Right indexPayload),
+          ("Index event retains element error paths", rejectsAt "$.offsets[1]" (replaceField "offsets" (toJSON [toJSON (2 :: Int), Null]) indexJson))
+        ]
+  mapM_ (\(label, ok) -> putStrLn ((if ok then "PASS  " else "FAIL  ") <> label)) checks
+  if all snd checks then pure () else exitFailure
diff --git a/test/conformance-contract-list-fields/keiro-dsl-cabal-fragment.context.contract-list-fields.txt b/test/conformance-contract-list-fields/keiro-dsl-cabal-fragment.context.contract-list-fields.txt
new file mode 100644
--- /dev/null
+++ b/test/conformance-contract-list-fields/keiro-dsl-cabal-fragment.context.contract-list-fields.txt
@@ -0,0 +1,34 @@
+-- keiro-dsl build manifest for keiro-dsl/test/fixtures/contract-list-fields.keiro
+-- Paste the complete fragment below into the consuming Cabal stanza.
+-- The generated layer is overwritten on every scaffold; hole modules are
+-- create-if-absent (filled by hand).
+
+default-language: GHC2024
+default-extensions:
+    DuplicateRecordFields
+    NoFieldSelectors
+    OverloadedRecordDot
+    OverloadedStrings
+
+other-modules:
+    Conformance.ContractListFields.Bindings
+    Generated.ContractListFields.Nominals
+    Generated.ContractListFields.Nominals.Internal
+    Generated.ContractListFields.Structural.NominalLeaves
+    Generated.ContractListFields.StructuralConformance
+    Generated.ContractListFields.Templates.Contract
+
+build-depends:
+    , aeson
+    , base
+    , keiro-core
+    , keiro-dsl
+    , mmzk-typeid
+    , text
+
+consumer-packages:
+    keiro-dsl
+
+consumer-modules:
+    Conformance.ContractListFields.Bindings
+    Conformance.ContractListFields.Domain
diff --git a/test/conformance-contract-list-fields/keiro-dsl-ledger.context.contract-list-fields.txt b/test/conformance-contract-list-fields/keiro-dsl-ledger.context.contract-list-fields.txt
new file mode 100644
--- /dev/null
+++ b/test/conformance-contract-list-fields/keiro-dsl-ledger.context.contract-list-fields.txt
@@ -0,0 +1,31 @@
+keiro-dsl scaffold record v1
+spec: keiro-dsl/test/fixtures/contract-list-fields.keiro
+module-root: (none)
+layout: prefixed
+source-language {"declaredLanguageVersion":6,"effectiveLanguageVersion":6,"sourceForm":"declared"}
+semantic-contract {"languageSupport":"candidate","languageVersion":6,"runtimeSemantics":"keiro-dsl/runtime-semantics/5"}
+naming-edition idiomatic-v2
+module-role {"family":"StructuralConformance","kind":"generated","ownerKind":"context","ownerName":"context contract-list-fields structural conformance","path":"Generated/ContractListFields/StructuralConformance.hs"}
+module-role {"family":"Nominals","kind":"generated","ownerKind":"context","ownerName":"context contract-list-fields generated nominal declarations","path":"Generated/ContractListFields/Nominals.hs"}
+module-role {"family":"Internal","kind":"generated","ownerKind":"context","ownerName":"context contract-list-fields generated nominal ID internals","path":"Generated/ContractListFields/Nominals/Internal.hs"}
+module-role {"family":"NominalLeaves","kind":"generated","ownerKind":"context","ownerName":"context contract-list-fields structural nominal leaves","path":"Generated/ContractListFields/Structural/NominalLeaves.hs"}
+module-role {"family":"Bindings","kind":"hole","ownerKind":"consumer","ownerName":"consumer binding skeleton Conformance.ContractListFields.Bindings","path":"Conformance/ContractListFields/Bindings.hs"}
+module-role {"family":"Contract","kind":"generated","ownerKind":"contract","ownerName":"contract templates (line 14)","path":"Generated/ContractListFields/Templates/Contract.hs"}
+generated Generated/ContractListFields/StructuralConformance.hs
+generated Generated/ContractListFields/Nominals.hs
+generated Generated/ContractListFields/Nominals/Internal.hs
+generated Generated/ContractListFields/Structural/NominalLeaves.hs
+hole Conformance/ContractListFields/Bindings.hs
+generated Generated/ContractListFields/Templates/Contract.hs
+nominal-mapping {"bindingSymbol":"Conformance.ContractListFields.Bindings.claimIdBinding","bindingVersion":"1","canonicalType":"conformance.contract-list-fields.ClaimId.v1","category":"id","fixtureSymbol":"Conformance.ContractListFields.Bindings.claimIdFixtures","initialSymbol":null,"mode":"nominal","module":"Conformance.ContractListFields.Domain","package":"keiro-dsl","representation":"KindID:claim","schema":1,"specName":"ClaimId","type":"ClaimId"}
+id-domain id-domain|name=TemplateId|contract=keiro-dsl/id-domain/typeid-v7/1|prefix=template|separator=_|json=canonical-json-text
+id-domain id-domain|name=ClaimId|contract=keiro-dsl/id-domain/typeid-v7/1|prefix=claim|separator=_|json=canonical-json-text
+id-domain id-domain|name=contract:templates.TemplatesReassigned.typeId|contract=keiro-dsl/id-domain/typeid-v7/1|prefix=template|separator=_|json=canonical-json-text
+id-domain id-domain|name=contract:templates.TemplatesReassigned.templateIds|contract=keiro-dsl/id-domain/typeid-v7/1|prefix=template|separator=_|json=canonical-json-text
+id-domain id-domain|name=contract:templates.TemplatesReassigned.claimIds|contract=keiro-dsl/id-domain/typeid-v7/1|prefix=claim|separator=_|json=canonical-json-text
+id-domain id-domain|name=contract:templates.TemplatesReassigned.legacyTemplateIds|contract=keiro-dsl/id-domain/typeid-v7/1|prefix=template|separator=_|json=canonical-json-text
+nominal-equality nominal-equality|name=ClaimId|contract=keiro-dsl/nominal-equality/2|key=Text|domain=typeid-v7-text:claim:keiro-dsl/id-domain/typeid-v7/1|owner=consumer;canonical=conformance.contract-list-fields.ClaimId.v1;binding=Conformance.ContractListFields.Bindings.claimIdBinding;binding-version=1
+nominal-equality nominal-equality|name=TemplateId|contract=keiro-dsl/nominal-equality/2|key=Text|domain=typeid-v7-text:template:keiro-dsl/id-domain/typeid-v7/1|owner=generated
+binding {"kind":"binding","mappedName":"ClaimId","module":"Conformance.ContractListFields.Bindings","path":null,"schema":1,"signature":"claimIdBinding :: NominalBinding Conformance.ContractListFields.Domain.ClaimId (KindID \"claim\")","symbol":"claimIdBinding"}
+binding {"kind":"fixtures","mappedName":"ClaimId","module":"Conformance.ContractListFields.Bindings","path":null,"schema":1,"signature":"claimIdFixtures :: NominalFixtureCases Conformance.ContractListFields.Domain.ClaimId","symbol":"claimIdFixtures"}
+semantic-impact {"declarations":[],"mappedSurfaceEvidenceVersion":1,"serviceInventory":[]}
diff --git a/test/conformance-contract-v1-compat/Generated/HospitalCapacity/Emergency/Contract.hs b/test/conformance-contract-v1-compat/Generated/HospitalCapacity/Emergency/Contract.hs
--- a/test/conformance-contract-v1-compat/Generated/HospitalCapacity/Emergency/Contract.hs
+++ b/test/conformance-contract-v1-compat/Generated/HospitalCapacity/Emergency/Contract.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 1) from contract emergency; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 1) from contract emergency; do not edit.
 module Generated.HospitalCapacity.Emergency.Contract
   ( EmergencyPayload (..)
   , IncidentTransferNeedDeclaredData (..)
diff --git a/test/conformance-contract/Generated/HospitalCapacity/Emergency/Contract.hs b/test/conformance-contract/Generated/HospitalCapacity/Emergency/Contract.hs
--- a/test/conformance-contract/Generated/HospitalCapacity/Emergency/Contract.hs
+++ b/test/conformance-contract/Generated/HospitalCapacity/Emergency/Contract.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from contract emergency; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from contract emergency; do not edit.
 module Generated.HospitalCapacity.Emergency.Contract
   ( EmergencyPayload (..)
   , IncidentTransferNeedDeclaredData (..)
diff --git a/test/conformance-declarative-router/Generated/TransferRouting/BehaviorSourceMap.hs b/test/conformance-declarative-router/Generated/TransferRouting/BehaviorSourceMap.hs
--- a/test/conformance-declarative-router/Generated/TransferRouting/BehaviorSourceMap.hs
+++ b/test/conformance-declarative-router/Generated/TransferRouting/BehaviorSourceMap.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from context transfer-routing behavior source map; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from context transfer-routing behavior source map; do not edit.
 module Generated.TransferRouting.BehaviorSourceMap
   ( BehaviorSourceLocation (..)
   , behaviorSourceLocation
diff --git a/test/conformance-declarative-router/Generated/TransferRouting/Hospital/BehaviorContract.hs b/test/conformance-declarative-router/Generated/TransferRouting/Hospital/BehaviorContract.hs
--- a/test/conformance-declarative-router/Generated/TransferRouting/Hospital/BehaviorContract.hs
+++ b/test/conformance-declarative-router/Generated/TransferRouting/Hospital/BehaviorContract.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from aggregate Hospital; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from aggregate Hospital; do not edit.
 module Generated.TransferRouting.Hospital.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -14,6 +14,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -157,7 +158,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -170,7 +182,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-declarative-router/Generated/TransferRouting/Hospital/Codec.hs b/test/conformance-declarative-router/Generated/TransferRouting/Hospital/Codec.hs
--- a/test/conformance-declarative-router/Generated/TransferRouting/Hospital/Codec.hs
+++ b/test/conformance-declarative-router/Generated/TransferRouting/Hospital/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from aggregate Hospital; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from aggregate Hospital; do not edit.
 module Generated.TransferRouting.Hospital.Codec (
     hospitalCodec,
     parseHospitalEvent,
diff --git a/test/conformance-declarative-router/Generated/TransferRouting/Hospital/Domain.hs b/test/conformance-declarative-router/Generated/TransferRouting/Hospital/Domain.hs
--- a/test/conformance-declarative-router/Generated/TransferRouting/Hospital/Domain.hs
+++ b/test/conformance-declarative-router/Generated/TransferRouting/Hospital/Domain.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from aggregate Hospital; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from aggregate Hospital; do not edit.
 module Generated.TransferRouting.Hospital.Domain where
 
 import Data.Proxy (Proxy (..))
diff --git a/test/conformance-declarative-router/Generated/TransferRouting/Hospital/EventStream.hs b/test/conformance-declarative-router/Generated/TransferRouting/Hospital/EventStream.hs
--- a/test/conformance-declarative-router/Generated/TransferRouting/Hospital/EventStream.hs
+++ b/test/conformance-declarative-router/Generated/TransferRouting/Hospital/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from aggregate Hospital; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from aggregate Hospital; do not edit.
 module Generated.TransferRouting.Hospital.EventStream
   ( hospitalCategory
   , hospitalCommandCategory
diff --git a/test/conformance-declarative-router/Generated/TransferRouting/Hospital/Harness.hs b/test/conformance-declarative-router/Generated/TransferRouting/Hospital/Harness.hs
--- a/test/conformance-declarative-router/Generated/TransferRouting/Hospital/Harness.hs
+++ b/test/conformance-declarative-router/Generated/TransferRouting/Hospital/Harness.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from aggregate Hospital; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from aggregate Hospital; do not edit.
 module Generated.TransferRouting.Hospital.Harness (harnessAssertions) where
 
 import Generated.TransferRouting.Hospital.Domain
diff --git a/test/conformance-declarative-router/Generated/TransferRouting/Hospital/Projection.hs b/test/conformance-declarative-router/Generated/TransferRouting/Hospital/Projection.hs
--- a/test/conformance-declarative-router/Generated/TransferRouting/Hospital/Projection.hs
+++ b/test/conformance-declarative-router/Generated/TransferRouting/Hospital/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from aggregate Hospital; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from aggregate Hospital; do not edit.
 module Generated.TransferRouting.Hospital.Projection () where
 
 -- No projection declarations are present; this module keeps the generated manifest inventory total.
diff --git a/test/conformance-declarative-router/Generated/TransferRouting/Hospital/Transducer.hs b/test/conformance-declarative-router/Generated/TransferRouting/Hospital/Transducer.hs
--- a/test/conformance-declarative-router/Generated/TransferRouting/Hospital/Transducer.hs
+++ b/test/conformance-declarative-router/Generated/TransferRouting/Hospital/Transducer.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from aggregate Hospital; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from aggregate Hospital; do not edit.
 module Generated.TransferRouting.Hospital.Transducer
   ( hospitalTransducer
   , hospitalFoldFingerprint
diff --git a/test/conformance-declarative-router/Generated/TransferRouting/HospitalLoad/QueryContract.hs b/test/conformance-declarative-router/Generated/TransferRouting/HospitalLoad/QueryContract.hs
--- a/test/conformance-declarative-router/Generated/TransferRouting/HospitalLoad/QueryContract.hs
+++ b/test/conformance-declarative-router/Generated/TransferRouting/HospitalLoad/QueryContract.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from readmodel hospital_load; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from readmodel hospital_load; do not edit.
 module Generated.TransferRouting.HospitalLoad.QueryContract
   ( HospitalLoadQueryInput
   , HospitalLoadQueryResult
diff --git a/test/conformance-declarative-router/Generated/TransferRouting/HospitalLoad/ReadModel.hs b/test/conformance-declarative-router/Generated/TransferRouting/HospitalLoad/ReadModel.hs
--- a/test/conformance-declarative-router/Generated/TransferRouting/HospitalLoad/ReadModel.hs
+++ b/test/conformance-declarative-router/Generated/TransferRouting/HospitalLoad/ReadModel.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from readmodel hospital_load; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from readmodel hospital_load; do not edit.
 module Generated.TransferRouting.HospitalLoad.ReadModel
   ( hospitalLoadReadModel
   , hospitalLoadQualifiedTable
diff --git a/test/conformance-declarative-router/Generated/TransferRouting/HospitalLoad/ReadModelHarness.hs b/test/conformance-declarative-router/Generated/TransferRouting/HospitalLoad/ReadModelHarness.hs
--- a/test/conformance-declarative-router/Generated/TransferRouting/HospitalLoad/ReadModelHarness.hs
+++ b/test/conformance-declarative-router/Generated/TransferRouting/HospitalLoad/ReadModelHarness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from readmodel hospital_load; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from readmodel hospital_load; do not edit.
 module Generated.TransferRouting.HospitalLoad.ReadModelHarness (readModelFacts, readModelFactResults, runReadModelFacts, catalogFactsAgainst) where
 
 import Generated.TransferRouting.HospitalLoad.ReadModel (hospitalLoadReadModel)
diff --git a/test/conformance-declarative-router/Generated/TransferRouting/HospitalLoad/ReadModelTable.hs b/test/conformance-declarative-router/Generated/TransferRouting/HospitalLoad/ReadModelTable.hs
--- a/test/conformance-declarative-router/Generated/TransferRouting/HospitalLoad/ReadModelTable.hs
+++ b/test/conformance-declarative-router/Generated/TransferRouting/HospitalLoad/ReadModelTable.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from readmodel hospital_load; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from readmodel hospital_load; do not edit.
 module Generated.TransferRouting.HospitalLoad.ReadModelTable (hospitalLoadQualifiedTable) where
 
 import Data.Text (Text)
diff --git a/test/conformance-declarative-router/Generated/TransferRouting/HospitalTransferRouter/Router.hs b/test/conformance-declarative-router/Generated/TransferRouting/HospitalTransferRouter/Router.hs
--- a/test/conformance-declarative-router/Generated/TransferRouting/HospitalTransferRouter/Router.hs
+++ b/test/conformance-declarative-router/Generated/TransferRouting/HospitalTransferRouter/Router.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from router HospitalTransferRouter; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from router HospitalTransferRouter; do not edit.
 module Generated.TransferRouting.HospitalTransferRouter.Router
   ( hospitalTransferRouterName
   , hospitalTransferRouterWorkerOptions
diff --git a/test/conformance-declarative-router/Generated/TransferRouting/HospitalTransferRouter/RouterHarness.hs b/test/conformance-declarative-router/Generated/TransferRouting/HospitalTransferRouter/RouterHarness.hs
--- a/test/conformance-declarative-router/Generated/TransferRouting/HospitalTransferRouter/RouterHarness.hs
+++ b/test/conformance-declarative-router/Generated/TransferRouting/HospitalTransferRouter/RouterHarness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from router HospitalTransferRouter; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from router HospitalTransferRouter; do not edit.
 module Generated.TransferRouting.HospitalTransferRouter.RouterHarness (routerHarnessValues) where
 
 routerHarnessValues :: [(String, String)]
diff --git a/test/conformance-declarative-router/Generated/TransferRouting/ProjectionCatalog.hs b/test/conformance-declarative-router/Generated/TransferRouting/ProjectionCatalog.hs
--- a/test/conformance-declarative-router/Generated/TransferRouting/ProjectionCatalog.hs
+++ b/test/conformance-declarative-router/Generated/TransferRouting/ProjectionCatalog.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from projection-catalog transfer-routing; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from projection-catalog transfer-routing; do not edit.
 {-# LANGUAGE OverloadedStrings #-}
 module Generated.TransferRouting.ProjectionCatalog
   ( projectionCatalog
diff --git a/test/conformance-declarative-router/Generated/TransferRouting/ReplayAudit.hs b/test/conformance-declarative-router/Generated/TransferRouting/ReplayAudit.hs
--- a/test/conformance-declarative-router/Generated/TransferRouting/ReplayAudit.hs
+++ b/test/conformance-declarative-router/Generated/TransferRouting/ReplayAudit.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from context transfer-routing replay-audit assembly; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from context transfer-routing replay-audit assembly; do not edit.
 --
 -- Deployment contract:
 --   * replay-neutral diff: no data audit is required;
diff --git a/test/conformance-declarative-router/Generated/TransferRouting/Structural/Shape/HospitalLoadRow.hs b/test/conformance-declarative-router/Generated/TransferRouting/Structural/Shape/HospitalLoadRow.hs
--- a/test/conformance-declarative-router/Generated/TransferRouting/Structural/Shape/HospitalLoadRow.hs
+++ b/test/conformance-declarative-router/Generated/TransferRouting/Structural/Shape/HospitalLoadRow.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from mapped structural HospitalLoadRow; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from mapped structural HospitalLoadRow; do not edit.
 module Generated.TransferRouting.Structural.Shape.HospitalLoadRow (HospitalLoadRowShape (..)) where
 
 import Data.Text (Text)
diff --git a/test/conformance-declarative-router/Generated/TransferRouting/Structural/Shape/TransferRouteInput.hs b/test/conformance-declarative-router/Generated/TransferRouting/Structural/Shape/TransferRouteInput.hs
--- a/test/conformance-declarative-router/Generated/TransferRouting/Structural/Shape/TransferRouteInput.hs
+++ b/test/conformance-declarative-router/Generated/TransferRouting/Structural/Shape/TransferRouteInput.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from mapped structural TransferRouteInput; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from mapped structural TransferRouteInput; do not edit.
 module Generated.TransferRouting.Structural.Shape.TransferRouteInput (TransferRouteInputShape (..)) where
 
 import Data.Text (Text)
diff --git a/test/conformance-declarative-router/Generated/TransferRouting/StructuralConformance.hs b/test/conformance-declarative-router/Generated/TransferRouting/StructuralConformance.hs
--- a/test/conformance-declarative-router/Generated/TransferRouting/StructuralConformance.hs
+++ b/test/conformance-declarative-router/Generated/TransferRouting/StructuralConformance.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from context transfer-routing structural conformance; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from context transfer-routing structural conformance; do not edit.
 module Generated.TransferRouting.StructuralConformance
   ( structuralConformanceAssertions
   ) where
diff --git a/test/conformance-declarative-router/Generated/TransferRouting/StructuralProjections.hs b/test/conformance-declarative-router/Generated/TransferRouting/StructuralProjections.hs
--- a/test/conformance-declarative-router/Generated/TransferRouting/StructuralProjections.hs
+++ b/test/conformance-declarative-router/Generated/TransferRouting/StructuralProjections.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TypeFamilies #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from context transfer-routing mapped structural facade; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from context transfer-routing mapped structural facade; do not edit.
 -- Equality witnesses are emitted for Text, Int, Bool, Natural, and UTCTime.
 -- Nominal ID and enum leaves carry exact canonical-text domains.
 -- Int, Natural, and UTCTime belong to Keiki's ordered subset.
diff --git a/test/conformance-dispatch-full/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModel.hs b/test/conformance-dispatch-full/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModel.hs
--- a/test/conformance-dispatch-full/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModel.hs
+++ b/test/conformance-dispatch-full/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModel.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from readmodel accepted_transfer_needs; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from readmodel accepted_transfer_needs; do not edit.
 module Generated.HospitalCapacity.AcceptedTransferNeeds.ReadModel
   ( acceptedTransferNeedsReadModel
   , acceptedTransferNeedsQualifiedTable
diff --git a/test/conformance-dispatch-full/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModelHarness.hs b/test/conformance-dispatch-full/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModelHarness.hs
--- a/test/conformance-dispatch-full/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModelHarness.hs
+++ b/test/conformance-dispatch-full/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModelHarness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from readmodel accepted_transfer_needs; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from readmodel accepted_transfer_needs; do not edit.
 module Generated.HospitalCapacity.AcceptedTransferNeeds.ReadModelHarness (readModelFacts, readModelFactResults, runReadModelFacts) where
 
 import Generated.HospitalCapacity.AcceptedTransferNeeds.ReadModel (acceptedTransferNeedsReadModel, acceptedTransferNeedsAsyncProjection)
diff --git a/test/conformance-dispatch-full/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModelTable.hs b/test/conformance-dispatch-full/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModelTable.hs
--- a/test/conformance-dispatch-full/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModelTable.hs
+++ b/test/conformance-dispatch-full/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModelTable.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from readmodel accepted_transfer_needs; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from readmodel accepted_transfer_needs; do not edit.
 module Generated.HospitalCapacity.AcceptedTransferNeeds.ReadModelTable (acceptedTransferNeedsQualifiedTable) where
 
 import Data.Text (Text)
diff --git a/test/conformance-dispatch-full/Generated/HospitalCapacity/ReservationWork/Queue.hs b/test/conformance-dispatch-full/Generated/HospitalCapacity/ReservationWork/Queue.hs
--- a/test/conformance-dispatch-full/Generated/HospitalCapacity/ReservationWork/Queue.hs
+++ b/test/conformance-dispatch-full/Generated/HospitalCapacity/ReservationWork/Queue.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from workqueue reservation_work; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from workqueue reservation_work; do not edit.
 module Generated.HospitalCapacity.ReservationWork.Queue
   ( ReservationWorkItem (..)
   , encodeReservationWorkItem
diff --git a/test/conformance-dispatch-full/Generated/HospitalCapacity/ReservationWork/QueueCodec.hs b/test/conformance-dispatch-full/Generated/HospitalCapacity/ReservationWork/QueueCodec.hs
--- a/test/conformance-dispatch-full/Generated/HospitalCapacity/ReservationWork/QueueCodec.hs
+++ b/test/conformance-dispatch-full/Generated/HospitalCapacity/ReservationWork/QueueCodec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from workqueue reservation_work; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from workqueue reservation_work; do not edit.
 -- | Versioned job payload envelope: @{\"v\",\"t\",\"data\"}@.
 --
 -- Deploy workers before producers when raising its schema version. Do not
diff --git a/test/conformance-dispatch-full/Generated/HospitalCapacity/ReservationWork/QueuePolicy.hs b/test/conformance-dispatch-full/Generated/HospitalCapacity/ReservationWork/QueuePolicy.hs
--- a/test/conformance-dispatch-full/Generated/HospitalCapacity/ReservationWork/QueuePolicy.hs
+++ b/test/conformance-dispatch-full/Generated/HospitalCapacity/ReservationWork/QueuePolicy.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from workqueue reservation_work; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from workqueue reservation_work; do not edit.
 module Generated.HospitalCapacity.ReservationWork.QueuePolicy
   ( ReservationWorkOutcome (..)
   , retryPolicy, jobOutcomeFor
diff --git a/test/conformance-dispatch-full/Generated/HospitalCapacity/TransferDecisions/ReadModel.hs b/test/conformance-dispatch-full/Generated/HospitalCapacity/TransferDecisions/ReadModel.hs
--- a/test/conformance-dispatch-full/Generated/HospitalCapacity/TransferDecisions/ReadModel.hs
+++ b/test/conformance-dispatch-full/Generated/HospitalCapacity/TransferDecisions/ReadModel.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from readmodel transfer_decisions; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from readmodel transfer_decisions; do not edit.
 module Generated.HospitalCapacity.TransferDecisions.ReadModel
   ( transferDecisionsReadModel
   , transferDecisionsQualifiedTable
diff --git a/test/conformance-dispatch-full/Generated/HospitalCapacity/TransferDecisions/ReadModelHarness.hs b/test/conformance-dispatch-full/Generated/HospitalCapacity/TransferDecisions/ReadModelHarness.hs
--- a/test/conformance-dispatch-full/Generated/HospitalCapacity/TransferDecisions/ReadModelHarness.hs
+++ b/test/conformance-dispatch-full/Generated/HospitalCapacity/TransferDecisions/ReadModelHarness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from readmodel transfer_decisions; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from readmodel transfer_decisions; do not edit.
 module Generated.HospitalCapacity.TransferDecisions.ReadModelHarness (readModelFacts, readModelFactResults, runReadModelFacts) where
 
 import Generated.HospitalCapacity.TransferDecisions.ReadModel (transferDecisionsReadModel, transferDecisionsAsyncProjection)
diff --git a/test/conformance-dispatch-full/Generated/HospitalCapacity/TransferDecisions/ReadModelTable.hs b/test/conformance-dispatch-full/Generated/HospitalCapacity/TransferDecisions/ReadModelTable.hs
--- a/test/conformance-dispatch-full/Generated/HospitalCapacity/TransferDecisions/ReadModelTable.hs
+++ b/test/conformance-dispatch-full/Generated/HospitalCapacity/TransferDecisions/ReadModelTable.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from readmodel transfer_decisions; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from readmodel transfer_decisions; do not edit.
 module Generated.HospitalCapacity.TransferDecisions.ReadModelTable (transferDecisionsQualifiedTable) where
 
 import Data.Text (Text)
diff --git a/test/conformance-domain-outcomes/Generated/DomainOutcomes/BehaviorSourceMap.hs b/test/conformance-domain-outcomes/Generated/DomainOutcomes/BehaviorSourceMap.hs
--- a/test/conformance-domain-outcomes/Generated/DomainOutcomes/BehaviorSourceMap.hs
+++ b/test/conformance-domain-outcomes/Generated/DomainOutcomes/BehaviorSourceMap.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from context domain-outcomes behavior source map; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from context domain-outcomes behavior source map; do not edit.
 module Generated.DomainOutcomes.BehaviorSourceMap
   ( BehaviorSourceLocation (..)
   , behaviorSourceLocation
diff --git a/test/conformance-domain-outcomes/Generated/DomainOutcomes/Nominals.hs b/test/conformance-domain-outcomes/Generated/DomainOutcomes/Nominals.hs
--- a/test/conformance-domain-outcomes/Generated/DomainOutcomes/Nominals.hs
+++ b/test/conformance-domain-outcomes/Generated/DomainOutcomes/Nominals.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE DeriveAnyClass #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from context domain-outcomes generated nominal declarations; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from context domain-outcomes generated nominal declarations; do not edit.
 module Generated.DomainOutcomes.Nominals where
 
 import Data.Aeson (FromJSON, ToJSON)
diff --git a/test/conformance-domain-outcomes/Generated/DomainOutcomes/ReplayAudit.hs b/test/conformance-domain-outcomes/Generated/DomainOutcomes/ReplayAudit.hs
--- a/test/conformance-domain-outcomes/Generated/DomainOutcomes/ReplayAudit.hs
+++ b/test/conformance-domain-outcomes/Generated/DomainOutcomes/ReplayAudit.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from context domain-outcomes replay-audit assembly; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from context domain-outcomes replay-audit assembly; do not edit.
 --
 -- Deployment contract:
 --   * replay-neutral diff: no data audit is required;
diff --git a/test/conformance-domain-outcomes/Generated/DomainOutcomes/Reservation/BehaviorContract.hs b/test/conformance-domain-outcomes/Generated/DomainOutcomes/Reservation/BehaviorContract.hs
--- a/test/conformance-domain-outcomes/Generated/DomainOutcomes/Reservation/BehaviorContract.hs
+++ b/test/conformance-domain-outcomes/Generated/DomainOutcomes/Reservation/BehaviorContract.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from aggregate Reservation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from aggregate Reservation; do not edit.
 module Generated.DomainOutcomes.Reservation.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -14,6 +14,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -174,7 +175,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -187,7 +199,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-domain-outcomes/Generated/DomainOutcomes/Reservation/Codec.hs b/test/conformance-domain-outcomes/Generated/DomainOutcomes/Reservation/Codec.hs
--- a/test/conformance-domain-outcomes/Generated/DomainOutcomes/Reservation/Codec.hs
+++ b/test/conformance-domain-outcomes/Generated/DomainOutcomes/Reservation/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from aggregate Reservation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from aggregate Reservation; do not edit.
 module Generated.DomainOutcomes.Reservation.Codec (
     reservationCodec,
     parseReservationEvent,
diff --git a/test/conformance-domain-outcomes/Generated/DomainOutcomes/Reservation/Domain.hs b/test/conformance-domain-outcomes/Generated/DomainOutcomes/Reservation/Domain.hs
--- a/test/conformance-domain-outcomes/Generated/DomainOutcomes/Reservation/Domain.hs
+++ b/test/conformance-domain-outcomes/Generated/DomainOutcomes/Reservation/Domain.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from aggregate Reservation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from aggregate Reservation; do not edit.
 module Generated.DomainOutcomes.Reservation.Domain where
 
 import Data.Proxy (Proxy (..))
diff --git a/test/conformance-domain-outcomes/Generated/DomainOutcomes/Reservation/EventStream.hs b/test/conformance-domain-outcomes/Generated/DomainOutcomes/Reservation/EventStream.hs
--- a/test/conformance-domain-outcomes/Generated/DomainOutcomes/Reservation/EventStream.hs
+++ b/test/conformance-domain-outcomes/Generated/DomainOutcomes/Reservation/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from aggregate Reservation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from aggregate Reservation; do not edit.
 module Generated.DomainOutcomes.Reservation.EventStream
   ( reservationCategory
   , reservationCommandCategory
diff --git a/test/conformance-domain-outcomes/Generated/DomainOutcomes/Reservation/Harness.hs b/test/conformance-domain-outcomes/Generated/DomainOutcomes/Reservation/Harness.hs
--- a/test/conformance-domain-outcomes/Generated/DomainOutcomes/Reservation/Harness.hs
+++ b/test/conformance-domain-outcomes/Generated/DomainOutcomes/Reservation/Harness.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from aggregate Reservation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from aggregate Reservation; do not edit.
 module Generated.DomainOutcomes.Reservation.Harness (harnessAssertions) where
 
 import Generated.DomainOutcomes.Reservation.Domain
diff --git a/test/conformance-domain-outcomes/Generated/DomainOutcomes/Reservation/Projection.hs b/test/conformance-domain-outcomes/Generated/DomainOutcomes/Reservation/Projection.hs
--- a/test/conformance-domain-outcomes/Generated/DomainOutcomes/Reservation/Projection.hs
+++ b/test/conformance-domain-outcomes/Generated/DomainOutcomes/Reservation/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from aggregate Reservation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from aggregate Reservation; do not edit.
 module Generated.DomainOutcomes.Reservation.Projection () where
 
 -- No projection declarations are present; this module keeps the generated manifest inventory total.
diff --git a/test/conformance-domain-outcomes/Generated/DomainOutcomes/Reservation/Transducer.hs b/test/conformance-domain-outcomes/Generated/DomainOutcomes/Reservation/Transducer.hs
--- a/test/conformance-domain-outcomes/Generated/DomainOutcomes/Reservation/Transducer.hs
+++ b/test/conformance-domain-outcomes/Generated/DomainOutcomes/Reservation/Transducer.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from aggregate Reservation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from aggregate Reservation; do not edit.
 module Generated.DomainOutcomes.Reservation.Transducer
   ( reservationTransducer
   , reservationFoldFingerprint
diff --git a/test/conformance-history-dependent-holes/Conformance/HistoryDependentHoles/Bindings.hs b/test/conformance-history-dependent-holes/Conformance/HistoryDependentHoles/Bindings.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-history-dependent-holes/Conformance/HistoryDependentHoles/Bindings.hs
@@ -0,0 +1,12 @@
+module Conformance.HistoryDependentHoles.Bindings (emptyPropertyValues, propertyValuesCases) where
+
+import Conformance.HistoryDependentHoles.Domain (PropertyValues (..))
+import Data.Map.Strict qualified as Map
+import Data.List.NonEmpty (NonEmpty (..))
+import Keiro.Codec.Structural (FixtureCases (..))
+
+emptyPropertyValues :: PropertyValues
+emptyPropertyValues = PropertyValues Map.empty
+
+propertyValuesCases :: FixtureCases PropertyValues
+propertyValuesCases = FixtureCases (("empty", emptyPropertyValues) :| [("one", PropertyValues (Map.singleton "colour" "blue"))])
diff --git a/test/conformance-history-dependent-holes/Conformance/HistoryDependentHoles/Domain.hs b/test/conformance-history-dependent-holes/Conformance/HistoryDependentHoles/Domain.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-history-dependent-holes/Conformance/HistoryDependentHoles/Domain.hs
@@ -0,0 +1,12 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+module Conformance.HistoryDependentHoles.Domain (PropertyValues (..)) where
+
+import Data.Aeson (FromJSON, ToJSON)
+import Data.Map.Strict (Map)
+import Data.Text (Text)
+import GHC.Generics (Generic)
+
+newtype PropertyValues = PropertyValues (Map Text Text)
+  deriving stock (Eq, Show, Generic)
+  deriving newtype (FromJSON, ToJSON)
diff --git a/test/conformance-history-dependent-holes/Generated/HistoryDependentHoles/Assignment/BehaviorContract.hs b/test/conformance-history-dependent-holes/Generated/HistoryDependentHoles/Assignment/BehaviorContract.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-history-dependent-holes/Generated/HistoryDependentHoles/Assignment/BehaviorContract.hs
@@ -0,0 +1,388 @@
+{-# LANGUAGE OverloadedLabels #-}
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Assignment; do not edit.
+module Generated.HistoryDependentHoles.Assignment.BehaviorContract
+  ( BehaviorKey (..)
+  , unBehaviorKey
+  , ObligationKind (..)
+  , EvidenceLevel (..)
+  , GuardCoverage (..)
+  , BehaviorRequirement (..)
+  , RejectionClass (..)
+  , LiveExpectation (..)
+  , BehaviorWitness (..)
+  , BehaviorFailure (..)
+  , BehaviorConformanceReport (..)
+  , behaviorRequirements
+  , behaviorCoverageReport
+  , behaviorObligationReport
+  , behaviorConformancePassed
+  , behaviorConformancePassedWith
+  , renderBehaviorConformanceText
+  ) where
+
+import Generated.HistoryDependentHoles.Assignment.Codec (encodeAssignmentEvent, parseAssignmentEvent, assignmentCodec)
+import Generated.HistoryDependentHoles.Assignment.Domain
+import Generated.HistoryDependentHoles.Assignment.Transducer (assignmentTransducer)
+import Generated.HistoryDependentHoles.BehaviorSourceMap qualified as BehaviorSourceMap
+import Data.Aeson (ToJSON (..), object, (.=))
+import Data.List (sortOn)
+import Data.List.NonEmpty (NonEmpty)
+import Data.List.NonEmpty qualified as NonEmpty
+import Data.Map.Strict qualified as Map
+import Data.Text (Text)
+import Data.Text qualified as T
+import Keiki.Core qualified as K (EdgeMode (..), EdgeRef (..), RegFile, ReplayAttribution (..), ReplayEventSpan (..), ReplaySuccess (..), StepFailure (..), StepSuccess (..), applyEventsDetailedEither, stepDetailedEither, (!))
+import Keiro.Codec qualified as Codec (Codec (eventType), EventType (..))
+
+newtype BehaviorKey = BehaviorKey { unBehaviorKey :: Text }
+  deriving stock (Eq, Ord, Show)
+
+unBehaviorKey :: BehaviorKey -> Text
+unBehaviorKey (BehaviorKey value) = value
+
+data ObligationKind = LiveTransition | RequiredRejection | ReplayTransition
+  deriving stock (Eq, Ord, Show)
+
+data EvidenceLevel = GeneratedAuthoritative | HoleWitnessed | LegacyRuntimeWitness
+  deriving stock (Eq, Ord, Show)
+
+data GuardCoverage = GuardTotal | GuardPartial | GuardUnknown | GuardNotApplicable
+  deriving stock (Eq, Ord, Show)
+
+data BehaviorRequirement = BehaviorRequirement
+  { key :: !BehaviorKey
+  , kind :: !ObligationKind
+  , evidence :: !EvidenceLevel
+  , guardCoverage :: !GuardCoverage
+  , source :: !AssignmentVertex
+  , commandName :: !Text
+  , expectedEdge :: !(Maybe (K.EdgeRef AssignmentVertex))
+  , target :: !(Maybe AssignmentVertex)
+  , eventKinds :: ![Text]
+  }
+  deriving stock (Eq, Show)
+
+data RejectionClass = RejectNoOutgoingEdges | RejectNoMatchingEdge
+  deriving stock (Eq, Show)
+
+data LiveExpectation
+  = Emits (NonEmpty AssignmentEvent)
+  | Rejects RejectionClass
+  | NoOp
+  deriving stock (Eq, Show)
+
+data BehaviorWitness
+  = Pending BehaviorKey
+  | LiveWitness
+      { key :: BehaviorKey
+      , history :: [AssignmentEvent]
+      , command :: AssignmentCommand
+      , expected :: LiveExpectation
+      }
+  | ReplayWitness
+      { key :: BehaviorKey
+      , historyPrefix :: [AssignmentEvent]
+      , observedChunk :: [AssignmentEvent]
+      }
+  deriving stock (Eq, Show)
+
+data BehaviorFailure = BehaviorFailure
+  { key :: !BehaviorKey
+  , subject :: !Text
+  , code :: !Text
+  , detail :: !Text
+  }
+  deriving stock (Eq, Show)
+
+instance ToJSON BehaviorFailure where
+  toJSON behaviorFailure = object
+    [ "key" .= unBehaviorKey behaviorFailure.key
+    , "subject" .= behaviorFailure.subject
+    , "code" .= behaviorFailure.code
+    , "detail" .= behaviorFailure.detail
+    ]
+
+data BehaviorConformanceReport = BehaviorConformanceReport
+  { required :: ![BehaviorKey]
+  , filled :: ![BehaviorKey]
+  , pending :: ![BehaviorKey]
+  , missing :: ![BehaviorKey]
+  , duplicate :: ![BehaviorKey]
+  , stale :: ![BehaviorKey]
+  , failed :: ![BehaviorFailure]
+  , verified :: ![BehaviorKey]
+  , unverified :: ![BehaviorKey]
+  }
+  deriving stock (Eq, Show)
+
+instance ToJSON BehaviorConformanceReport where
+  toJSON report = object
+    [ "schema" .= ("keiro/behavior-conformance/1" :: Text)
+    , "required" .= keyTexts report.required
+    , "filled" .= keyTexts report.filled
+    , "pending" .= keyTexts report.pending
+    , "missing" .= keyTexts report.missing
+    , "duplicate" .= keyTexts report.duplicate
+    , "stale" .= keyTexts report.stale
+    , "failed" .= report.failed
+    , "verified" .= keyTexts report.verified
+    , "unverified" .= keyTexts report.unverified
+    ]
+
+behaviorRequirements :: [BehaviorRequirement]
+behaviorRequirements =
+  [ -- AssignmentActive x SetProperty: live transition
+    BehaviorRequirement
+      { key = BehaviorKey "behavior-v1-73b7455c36956c2b"
+      , kind = LiveTransition
+      , evidence = HoleWitnessed
+      , guardCoverage = GuardTotal
+      , source = AssignmentActive
+      , commandName = "SetProperty"
+      , expectedEdge = (Just (K.EdgeRef AssignmentActive 0))
+      , target = Just AssignmentActive
+      , eventKinds = ["PropertySet"]
+      }
+  , -- AssignmentActive x ClearProperty: replay-only transition
+    BehaviorRequirement
+      { key = BehaviorKey "behavior-v1-afe574346545beaa"
+      , kind = ReplayTransition
+      , evidence = HoleWitnessed
+      , guardCoverage = GuardNotApplicable
+      , source = AssignmentActive
+      , commandName = "ClearProperty"
+      , expectedEdge = (Just (K.EdgeRef AssignmentActive 3))
+      , target = Just AssignmentActive
+      , eventKinds = ["PropertyCleared"]
+      }
+  , -- AssignmentActive x Touch: live transition
+    BehaviorRequirement
+      { key = BehaviorKey "behavior-v1-fa59fc344c44f50b"
+      , kind = LiveTransition
+      , evidence = GeneratedAuthoritative
+      , guardCoverage = GuardTotal
+      , source = AssignmentActive
+      , commandName = "Touch"
+      , expectedEdge = (Just (K.EdgeRef AssignmentActive 2))
+      , target = Just AssignmentActive
+      , eventKinds = ["Touched"]
+      }
+  , -- AssignmentActive x ClearProperty: live transition
+    BehaviorRequirement
+      { key = BehaviorKey "behavior-v1-fe7277b756f0ff4b"
+      , kind = LiveTransition
+      , evidence = HoleWitnessed
+      , guardCoverage = GuardTotal
+      , source = AssignmentActive
+      , commandName = "ClearProperty"
+      , expectedEdge = (Just (K.EdgeRef AssignmentActive 1))
+      , target = Just AssignmentActive
+      , eventKinds = ["PropertyCleared"]
+      }
+  ]
+
+behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
+  BehaviorConformanceReport
+    { required = sortedKeys (Map.keys requiredByKey)
+    , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
+    , pending = sortedKeys [key | (key, rows) <- Map.toList witnessGroups, Map.member key requiredByKey, any isPending rows]
+    , missing = sortedKeys [key | key <- Map.keys requiredByKey, Map.notMember key witnessGroups]
+    , duplicate = sortedKeys [key | (key, rows) <- Map.toList witnessGroups, length rows > 1]
+    , stale = sortedKeys [key | key <- Map.keys witnessGroups, Map.notMember key requiredByKey]
+    , failed = sortOn (unBehaviorKey . (.key)) failures
+    , verified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, proofStrength requirement]
+    , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
+    }
+ where
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
+  witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
+  executions =
+    [ (requirement, runWitness requirement witness)
+    | (key, [witness]) <- Map.toList witnessGroups
+    , not (isPending witness)
+    , Just requirement <- [Map.lookup key requiredByKey]
+    ]
+  failures = [behaviorFailure | (_, Left behaviorFailure) <- executions]
+
+behaviorConformancePassed :: BehaviorConformanceReport -> Bool
+behaviorConformancePassed = behaviorConformancePassedWith False
+
+behaviorConformancePassedWith :: Bool -> BehaviorConformanceReport -> Bool
+behaviorConformancePassedWith failOnUnverified report =
+  null report.pending
+    && null report.missing
+    && null report.duplicate
+    && null report.stale
+    && null report.failed
+    && (not failOnUnverified || null report.unverified)
+
+renderBehaviorConformanceText :: BehaviorConformanceReport -> Text
+renderBehaviorConformanceText report = T.unlines
+  [ "behavior conformance: Assignment"
+  , "schema: keiro/behavior-conformance/1"
+  , countLine "required" report.required
+  , countLine "filled" report.filled
+  , countLine "pending" report.pending
+  , countLine "missing" report.missing
+  , countLine "duplicate" report.duplicate
+  , countLine "stale" report.stale
+  , "failed: " <> tshow (length report.failed)
+  , countLine "verified" report.verified
+  , countLine "unverified" report.unverified
+  ] <> T.unlines ["FAIL " <> unBehaviorKey behaviorFailure.key <> " " <> behaviorFailure.subject <> " [" <> behaviorFailure.code <> "] " <> behaviorFailure.detail | behaviorFailure <- report.failed]
+
+runWitness :: BehaviorRequirement -> BehaviorWitness -> Either BehaviorFailure ()
+runWitness requirement witness = case witness of
+  Pending _ -> failure requirement "pending" "witness is still Pending"
+  LiveWitness _ history command expectation -> runLive requirement history command expectation
+  ReplayWitness _ prefix chunk -> runReplay requirement prefix chunk
+
+runLive :: BehaviorRequirement -> [AssignmentEvent] -> AssignmentCommand -> LiveExpectation -> Either BehaviorFailure ()
+runLive requirement history command expectation = do
+  settled <- settleHistory requirement "history" history
+  ensure requirement (K.replaySuccessState settled == requirement.source) "history-wrong-source" "history does not settle at the required source vertex"
+  ensure requirement (commandKind command == requirement.commandName) "command-mismatch" "witness command constructor does not match the required state/command cell"
+  case requirement.kind of
+    ReplayTransition -> failure requirement "witness-kind" "a replay-only requirement needs ReplayWitness"
+    RequiredRejection -> runRejection requirement (K.replaySuccessState settled, K.replaySuccessRegs settled) command expectation
+    LiveTransition -> runAcceptance requirement (K.replaySuccessState settled, K.replaySuccessRegs settled) command expectation
+
+runRejection :: BehaviorRequirement -> (AssignmentVertex, K.RegFile AssignmentRegs) -> AssignmentCommand -> LiveExpectation -> Either BehaviorFailure ()
+runRejection requirement seed command expectation = case expectation of
+  Emits _ -> failure requirement "expectation-kind" "a rejection requirement cannot expect emitted events"
+  NoOp -> failure requirement "expectation-kind" "a rejection requirement cannot expect an accepted no-op"
+  Rejects expectedClass -> case K.stepDetailedEither assignmentTransducer seed command of
+    Left K.NoOutgoingEdges {} -> ensure requirement (expectedClass == RejectNoOutgoingEdges) "rejection-class" "expected NoMatchingEdge but runtime returned NoOutgoingEdges"
+    Left K.NoMatchingEdge {} -> ensure requirement (expectedClass == RejectNoMatchingEdge) "rejection-class" "expected NoOutgoingEdges but runtime returned NoMatchingEdge"
+    Left K.AmbiguousEdges {} -> failure requirement "ambiguous-edges" "AmbiguousEdges can never satisfy a rejection witness"
+    Right _ -> failure requirement "unexpected-acceptance" "runtime accepted a command required to reject"
+
+runAcceptance :: BehaviorRequirement -> (AssignmentVertex, K.RegFile AssignmentRegs) -> AssignmentCommand -> LiveExpectation -> Either BehaviorFailure ()
+runAcceptance requirement seed command expectation = case expectation of
+  Rejects _ -> failure requirement "expectation-kind" "a live-transition requirement needs Emits or NoOp"
+  NoOp -> case K.stepDetailedEither assignmentTransducer seed command of
+    Left stepFailure -> failure requirement "unexpected-rejection" (tshow stepFailure)
+    Right success -> do
+      checkAcceptedEnvelope requirement success
+      ensure requirement (null (K.stepSuccessOutputs success)) "noop-emitted" "NoOp emitted one or more events"
+      ensure requirement (K.stepSuccessState success == fst seed) "noop-vertex-change" "NoOp changed the control vertex"
+      ensure requirement (regsEqual (K.stepSuccessRegs success) (snd seed)) "noop-register-change" "NoOp changed one or more registers"
+  Emits expectedEvents -> case K.stepDetailedEither assignmentTransducer seed command of
+    Left stepFailure -> failure requirement "unexpected-rejection" (tshow stepFailure)
+    Right success -> do
+      checkAcceptedEnvelope requirement success
+      let expected = NonEmpty.toList expectedEvents
+          actual = K.stepSuccessOutputs success
+      ensure requirement (actual == expected) "event-value-mismatch" ("runtime event values differ from the exact witness expectation; actual=" <> tshow actual <> " expected=" <> tshow expected)
+      ensure requirement (map eventKind actual == requirement.eventKinds) "event-envelope-mismatch" ("runtime event kinds differ from the declared ordered envelope; actual=" <> tshow (map eventKind actual) <> " expected=" <> tshow requirement.eventKinds)
+      decoded <- either (failure requirement "emitted-codec-decode") Right (decodeEvents actual)
+      replayed <- case K.applyEventsDetailedEither assignmentTransducer seed decoded of
+        Left replayFailure -> failure requirement "emitted-replay-failed" (tshow replayFailure)
+        Right replaySuccess -> Right replaySuccess
+      ensure requirement (K.replaySuccessState replayed == K.stepSuccessState success) "forward-replay-vertex" "decoded emissions replay to a different vertex"
+      ensure requirement (regsEqual (K.replaySuccessRegs replayed) (K.stepSuccessRegs success)) "forward-replay-registers" "decoded emissions replay to different registers"
+      checkSingleAttribution requirement K.Live (length decoded) (K.replaySuccessTrace replayed)
+
+checkAcceptedEnvelope :: BehaviorRequirement -> K.StepSuccess AssignmentRegs AssignmentVertex AssignmentEvent -> Either BehaviorFailure ()
+checkAcceptedEnvelope requirement success = do
+  ensure requirement (K.stepSuccessMode success == K.Live) "forward-mode" ("forward execution selected a non-live edge; actual=" <> tshow (K.stepSuccessMode success) <> " expected=" <> tshow K.Live)
+  ensure requirement (Just (K.stepSuccessEdge success) == requirement.expectedEdge) "edge-attribution" ("runtime selected a different guarded sibling; actual=" <> tshow (Just (K.stepSuccessEdge success)) <> " expected=" <> tshow requirement.expectedEdge)
+  ensure requirement (Just (K.stepSuccessState success) == requirement.target) "target-mismatch" ("runtime reached a different target vertex; actual=" <> tshow (Just (K.stepSuccessState success)) <> " expected=" <> tshow requirement.target)
+
+runReplay :: BehaviorRequirement -> [AssignmentEvent] -> [AssignmentEvent] -> Either BehaviorFailure ()
+runReplay requirement prefix chunk = case requirement.kind of
+  ReplayTransition -> do
+    settled <- settleHistory requirement "history-prefix" prefix
+    ensure requirement (K.replaySuccessState settled == requirement.source) "history-wrong-source" "history prefix does not settle at the replay edge source"
+    ensure requirement (not (null chunk)) "empty-replay-chunk" "a replay-only edge has no observable empty chunk"
+    decoded <- either (failure requirement "replay-chunk-codec-decode") Right (decodeEvents chunk)
+    replayed <- case K.applyEventsDetailedEither assignmentTransducer (K.replaySuccessState settled, K.replaySuccessRegs settled) decoded of
+      Left replayFailure -> failure requirement "replay-chunk-failed" (tshow replayFailure)
+      Right replaySuccess -> Right replaySuccess
+    ensure requirement (Just (K.replaySuccessState replayed) == requirement.target) "target-mismatch" ("replay chunk reached a different target vertex; actual=" <> tshow (Just (K.replaySuccessState replayed)) <> " expected=" <> tshow requirement.target)
+    checkSingleAttribution requirement K.ReplayOnly (length decoded) (K.replaySuccessTrace replayed)
+  _ -> failure requirement "witness-kind" "ReplayWitness supplied for a non-replay requirement"
+
+checkSingleAttribution :: BehaviorRequirement -> K.EdgeMode -> Int -> [K.ReplayAttribution AssignmentVertex] -> Either BehaviorFailure ()
+checkSingleAttribution requirement expectedMode eventCount trace = case trace of
+  [attribution] -> do
+    ensure requirement (Just (K.replayAttributionEdge attribution) == requirement.expectedEdge) "replay-edge-attribution" ("replay selected a different edge; actual=" <> tshow (Just (K.replayAttributionEdge attribution)) <> " expected=" <> tshow requirement.expectedEdge)
+    ensure requirement (K.replayAttributionMode attribution == expectedMode) "replay-mode-attribution" ("replay selected the wrong live/replay-only phase; actual=" <> tshow (K.replayAttributionMode attribution) <> " expected=" <> tshow expectedMode)
+    ensure requirement (K.replayAttributionSource attribution == requirement.source) "replay-source-attribution" ("replay attribution starts at the wrong source; actual=" <> tshow (K.replayAttributionSource attribution) <> " expected=" <> tshow requirement.source)
+    ensure requirement (Just (K.replayAttributionTarget attribution) == requirement.target) "replay-target-attribution" ("replay attribution ends at the wrong target; actual=" <> tshow (Just (K.replayAttributionTarget attribution)) <> " expected=" <> tshow requirement.target)
+    ensure requirement (K.replayAttributionSpan attribution == K.ReplayEventSpan 0 eventCount) "replay-span-attribution" ("replay attribution did not consume the exact chunk; actual=" <> tshow (K.replayAttributionSpan attribution) <> " expected=" <> tshow (K.ReplayEventSpan 0 eventCount))
+  _ -> failure requirement "replay-trace-cardinality" "expected exactly one completed-edge attribution"
+
+settleHistory :: BehaviorRequirement -> Text -> [AssignmentEvent] -> Either BehaviorFailure (K.ReplaySuccess AssignmentRegs AssignmentVertex)
+settleHistory requirement label history = do
+  decoded <- either (failure requirement (label <> "-codec-decode")) Right (decodeEvents history)
+  case K.applyEventsDetailedEither assignmentTransducer (AssignmentActive, initialAssignmentRegs) decoded of
+    Left replayFailure -> failure requirement (label <> "-replay-failed") (tshow replayFailure)
+    Right replaySuccess -> Right replaySuccess
+
+decodeEvents :: [AssignmentEvent] -> Either Text [AssignmentEvent]
+decodeEvents = traverse (\event -> parseAssignmentEvent (Codec.eventType assignmentCodec event) (encodeAssignmentEvent event))
+
+commandKind :: AssignmentCommand -> Text
+commandKind command = case command of
+  SetProperty _ -> "SetProperty"
+  ClearProperty _ -> "ClearProperty"
+  Touch _ -> "Touch"
+
+eventKind :: AssignmentEvent -> Text
+eventKind event = case Codec.eventType assignmentCodec event of Codec.EventType tag -> tag
+
+regsEqual :: K.RegFile AssignmentRegs -> K.RegFile AssignmentRegs -> Bool
+regsEqual left right = (left K.! #values) == (right K.! #values)
+
+proofStrength :: BehaviorRequirement -> Bool
+proofStrength requirement =
+  requirement.evidence == GeneratedAuthoritative
+    && requirement.guardCoverage `elem` [GuardTotal, GuardNotApplicable]
+
+behaviorWitnessKey :: BehaviorWitness -> BehaviorKey
+behaviorWitnessKey witness = case witness of
+  Pending key -> key
+  LiveWitness { key = key } -> key
+  ReplayWitness { key = key } -> key
+
+isPending :: BehaviorWitness -> Bool
+isPending Pending {} = True
+isPending _ = False
+
+ensure :: BehaviorRequirement -> Bool -> Text -> Text -> Either BehaviorFailure ()
+ensure requirement condition code detail = if condition then Right () else failure requirement code detail
+failure :: BehaviorRequirement -> Text -> Text -> Either BehaviorFailure failed
+failure requirement code detail =
+  Left
+    ( BehaviorFailure
+        requirement.key
+        (tshow requirement.source <> " x " <> requirement.commandName <> ": " <> kindPhrase <> " (" <> BehaviorSourceMap.renderBehaviorSourceLocation (unBehaviorKey requirement.key) <> ")")
+        code
+        detail
+    )
+ where
+  kindPhrase = case requirement.kind of
+    LiveTransition -> "live transition"
+    RequiredRejection -> "required rejection"
+    ReplayTransition -> "replay-only transition"
+sortedKeys :: [BehaviorKey] -> [BehaviorKey]
+sortedKeys = sortOn unBehaviorKey
+keyTexts :: [BehaviorKey] -> [Text]
+keyTexts = map unBehaviorKey
+countLine :: Text -> [BehaviorKey] -> Text
+countLine label values = label <> ": " <> tshow (length values)
+tshow :: Show value => value -> Text
+tshow = T.pack . show
diff --git a/test/conformance-history-dependent-holes/Generated/HistoryDependentHoles/Assignment/Codec.hs b/test/conformance-history-dependent-holes/Generated/HistoryDependentHoles/Assignment/Codec.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-history-dependent-holes/Generated/HistoryDependentHoles/Assignment/Codec.hs
@@ -0,0 +1,88 @@
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Assignment; do not edit.
+module Generated.HistoryDependentHoles.Assignment.Codec (
+    assignmentCodec,
+    parseAssignmentEvent,
+    encodeAssignmentEvent,
+) where
+
+import Generated.HistoryDependentHoles.Assignment.Domain
+import Data.Aeson (Value, object, withObject, (.:), (.=))
+import Data.Aeson.Types (parseEither)
+import Data.List.NonEmpty (NonEmpty (..))
+import Data.List.NonEmpty qualified as NonEmpty
+import Data.Text (Text)
+import qualified Data.Text as T
+import Keiro.Codec (Codec (..), EventType (..))
+
+
+
+
+
+assignmentEventTypes :: NonEmpty EventType
+assignmentEventTypes = EventType "PropertySet" :| [EventType "PropertyCleared", EventType "Touched"]
+
+assignmentCodec :: Codec AssignmentEvent
+assignmentCodec =
+  Codec
+    { eventTypes = assignmentEventTypes
+    , eventType = \case
+        PropertySet{} -> EventType "PropertySet"
+        PropertyCleared{} -> EventType "PropertyCleared"
+        Touched{} -> EventType "Touched"
+    , schemaVersion = 1
+    , encode = encodeAssignmentEvent
+    , decode = parseAssignmentEvent
+    , upcasters = []
+    }
+
+encodeAssignmentEvent :: AssignmentEvent -> Value
+encodeAssignmentEvent = \case
+  PropertySet payload ->
+    object
+      [ "kind" .= ("PropertySet" :: Text)
+      , "key" .= payload.key
+      , "value" .= payload.value
+      ]
+  PropertyCleared payload ->
+    object
+      [ "kind" .= ("PropertyCleared" :: Text)
+      , "key" .= payload.key
+      ]
+  Touched payload ->
+    object
+      [ "kind" .= ("Touched" :: Text)
+      , "note" .= payload.note
+      ]
+
+parseAssignmentEvent :: EventType -> Value -> Either Text AssignmentEvent
+parseAssignmentEvent (EventType tag) = mapLeftText . parseEither (withObject "AssignmentEvent" go)
+  where
+    go o = do
+      case tag of
+        "PropertySet" ->
+          PropertySet
+            <$> ( PropertySetData
+                    <$> o .: "key"
+                    <*> o .: "value"
+                )
+        "PropertyCleared" ->
+          PropertyCleared
+            <$> ( PropertyClearedData
+                    <$> o .: "key"
+                )
+        "Touched" ->
+          Touched
+            <$> ( TouchedData
+                    <$> o .: "note"
+                )
+        _ -> fail ("unknown event type " <> show tag <> "; expected one of: " <> renderExpectedEventTypes assignmentEventTypes)
+
+mapLeftText :: Either String b -> Either Text b
+mapLeftText = either (Left . T.pack) Right
+
+renderExpectedEventTypes :: NonEmpty EventType -> String
+renderExpectedEventTypes =
+  T.unpack
+    . T.intercalate ", "
+    . map (\(EventType eventTypeName) -> eventTypeName)
+    . NonEmpty.toList
diff --git a/test/conformance-history-dependent-holes/Generated/HistoryDependentHoles/Assignment/Domain.hs b/test/conformance-history-dependent-holes/Generated/HistoryDependentHoles/Assignment/Domain.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-history-dependent-holes/Generated/HistoryDependentHoles/Assignment/Domain.hs
@@ -0,0 +1,70 @@
+{-# LANGUAGE TemplateHaskell #-}
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Assignment; do not edit.
+module Generated.HistoryDependentHoles.Assignment.Domain where
+
+import Data.Proxy (Proxy (..))
+import Data.Text (Text)
+import GHC.Generics (Generic)
+import Keiki.Core (RegFile (..))
+import Conformance.HistoryDependentHoles.Bindings qualified as Bindings
+import Conformance.HistoryDependentHoles.Domain (PropertyValues)
+import Keiki.Generics.TH (deriveAggregateCtorsAll, deriveWireCtorsAll)
+
+data AssignmentVertex = AssignmentActive
+  deriving stock (Generic, Eq, Ord, Show, Enum, Bounded)
+
+data SetPropertyData = SetPropertyData
+  { key :: !Text
+  , value :: !Text
+  }
+  deriving stock (Generic, Eq, Show)
+
+data ClearPropertyData = ClearPropertyData
+  { key :: !Text
+  }
+  deriving stock (Generic, Eq, Show)
+
+data TouchData = TouchData
+  { note :: !Text
+  }
+  deriving stock (Generic, Eq, Show)
+
+data AssignmentCommand = SetProperty !SetPropertyData
+  | ClearProperty !ClearPropertyData
+  | Touch !TouchData
+  deriving stock (Generic, Eq, Show)
+
+data PropertySetData = PropertySetData
+  { key :: !Text
+  , value :: !Text
+  }
+  deriving stock (Generic, Eq, Show)
+
+data PropertyClearedData = PropertyClearedData
+  { key :: !Text
+  }
+  deriving stock (Generic, Eq, Show)
+
+data TouchedData = TouchedData
+  { note :: !Text
+  }
+  deriving stock (Generic, Eq, Show)
+
+data AssignmentEvent = PropertySet !PropertySetData
+  | PropertyCleared !PropertyClearedData
+  | Touched !TouchedData
+  deriving stock (Generic, Eq, Show)
+
+type AssignmentRegs =
+  '[ '("values", PropertyValues)
+   ]
+
+initialAssignmentRegs :: RegFile AssignmentRegs
+initialAssignmentRegs =
+  RCons (Proxy @"values") Bindings.emptyPropertyValues RNil
+
+$(deriveAggregateCtorsAll ''AssignmentCommand ''AssignmentRegs)
+
+
+
+$(deriveWireCtorsAll ''AssignmentEvent)
diff --git a/test/conformance-history-dependent-holes/Generated/HistoryDependentHoles/Assignment/EventStream.hs b/test/conformance-history-dependent-holes/Generated/HistoryDependentHoles/Assignment/EventStream.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-history-dependent-holes/Generated/HistoryDependentHoles/Assignment/EventStream.hs
@@ -0,0 +1,49 @@
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Assignment; do not edit.
+module Generated.HistoryDependentHoles.Assignment.EventStream
+  ( assignmentCategory
+  , assignmentCommandCategory
+  , assignmentEventStream
+  , assignmentEventStreamDef
+  , AssignmentEventStream
+  , AssignmentEventStreamDef
+  ) where
+
+import Generated.HistoryDependentHoles.Assignment.Domain
+import Generated.HistoryDependentHoles.Assignment.Codec (assignmentCodec)
+import Generated.HistoryDependentHoles.Assignment.Transducer (assignmentTransducer)
+import Keiki.Core (HsPred)
+import Keiro.EventStream (EventStream (..), SnapshotPolicy (..))
+import Keiro.EventStream.Validate (ValidatedEventStream, mkEventStreamOrThrow)
+import Keiro.Stream qualified as Stream
+
+-- The validated aggregate stream category (hole-kind 5: referenced, never retyped).
+-- Entity streams are '<category>-<id>' via Keiro.Stream.entityStream.
+-- categoryUnsafe is safe here because this generated literal passed the DSL category proof.
+assignmentCategory :: Stream.StreamCategory AssignmentEventStreamDef
+assignmentCategory = Stream.categoryUnsafe "assignment"
+
+-- The same category text, typed for command envelopes such as PMCommand.
+assignmentCommandCategory :: Stream.StreamCategory AssignmentCommand
+assignmentCommandCategory = Stream.categoryUnsafe "assignment"
+
+type AssignmentEventStreamDef =
+  EventStream (HsPred AssignmentRegs AssignmentCommand) AssignmentRegs AssignmentVertex AssignmentCommand AssignmentEvent
+
+type AssignmentEventStream =
+  ValidatedEventStream (HsPred AssignmentRegs AssignmentCommand) AssignmentRegs AssignmentVertex AssignmentCommand AssignmentEvent
+
+assignmentEventStreamDef :: AssignmentEventStreamDef
+assignmentEventStreamDef =
+  EventStream
+    { transducer = assignmentTransducer,
+      initialState = AssignmentActive,
+      initialRegisters = initialAssignmentRegs,
+      eventCodec = assignmentCodec,
+      resolveStreamName = Stream.streamName,
+      snapshotPolicy = Never,
+      stateCodec = Nothing
+    }
+
+assignmentEventStream :: AssignmentEventStream
+assignmentEventStream =
+  mkEventStreamOrThrow "Assignment" assignmentEventStreamDef
diff --git a/test/conformance-history-dependent-holes/Generated/HistoryDependentHoles/Assignment/Harness.hs b/test/conformance-history-dependent-holes/Generated/HistoryDependentHoles/Assignment/Harness.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-history-dependent-holes/Generated/HistoryDependentHoles/Assignment/Harness.hs
@@ -0,0 +1,108 @@
+{-# LANGUAGE OverloadedLabels #-}
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Assignment; do not edit.
+module Generated.HistoryDependentHoles.Assignment.Harness (harnessAssertions) where
+
+import Generated.HistoryDependentHoles.Assignment.Domain
+import Generated.HistoryDependentHoles.Assignment.Codec (encodeAssignmentEvent, parseAssignmentEvent, assignmentCodec)
+import Generated.HistoryDependentHoles.Assignment.Transducer (assignmentTransducer)
+import Keiki.Core (applyEventsEither, defaultValidationOptions, step, validateTransducer, (!))
+import Keiro.Codec (eventType)
+import HistoryDependentHoles.Assignment.BehaviorHoles (behaviorWitnesses)
+import Generated.HistoryDependentHoles.Assignment.BehaviorContract (BehaviorConformanceReport (..), BehaviorKey (..), behaviorObligationReport)
+
+-- | (label, passed). A driver runs these and exits non-zero on any False,
+-- naming the failing assertion. Filling a hole wrongly turns a specific
+-- entry False; pending Hole witnesses fail until filled and verified.
+harnessAssertions :: [(String, Bool)]
+harnessAssertions =
+  [ ("validateTransducer is empty", null (validateTransducer defaultValidationOptions assignmentTransducer))
+  -- clock-free: spec samples no wall clock (verified at scaffold time)
+  , ("golden round-trip: PropertySet", roundTrips sampleEventPropertySet)
+  , ("golden round-trip: PropertyCleared", roundTrips sampleEventPropertyCleared)
+  , ("golden round-trip: Touched", roundTrips sampleEventTouched)
+  , ("accepts SetProperty from AssignmentActive", acceptSetProperty)
+  , ("accepts ClearProperty from AssignmentActive", acceptClearProperty)
+  , ("accepts Touch from AssignmentActive", acceptTouch)
+  ]
+  ++ forwardReplaySetProperty
+  ++ forwardReplayClearProperty
+  ++ forwardReplayTouch
+
+roundTrips :: AssignmentEvent -> Bool
+roundTrips e = parseAssignmentEvent (eventType assignmentCodec e) (encodeAssignmentEvent e) == Right e
+
+-- | One required obligation carrying exactly one non-pending witness.
+holeWitnessFilled :: BehaviorKey -> BehaviorConformanceReport -> Bool
+holeWitnessFilled key report = report.required == [key] && report.filled == [key]
+
+sampleEventPropertySet :: AssignmentEvent
+sampleEventPropertySet = PropertySet (PropertySetData "sample-key" "sample-value")
+
+sampleEventPropertyCleared :: AssignmentEvent
+sampleEventPropertyCleared = PropertyCleared (PropertyClearedData "sample-key")
+
+sampleEventTouched :: AssignmentEvent
+sampleEventTouched = Touched (TouchedData "sample-note")
+
+acceptTouch :: Bool
+acceptTouch =
+  case step assignmentTransducer (AssignmentActive, initialAssignmentRegs) (Touch (TouchData "sample-note")) of
+    Just (v, _, _) -> v == AssignmentActive
+    Nothing -> False
+
+-- Hole-owned initial edge: the consumer's history-backed live witness
+-- proves acceptance through the generated behavior contract.
+holeWitnessSetProperty :: BehaviorConformanceReport
+holeWitnessSetProperty = behaviorObligationReport (BehaviorKey "behavior-v1-73b7455c36956c2b") behaviorWitnesses
+
+acceptSetProperty :: Bool
+acceptSetProperty = holeWitnessFilled (BehaviorKey "behavior-v1-73b7455c36956c2b") holeWitnessSetProperty && null holeWitnessSetProperty.failed
+
+-- Hole-owned initial edge: the consumer's history-backed live witness
+-- proves acceptance through the generated behavior contract.
+holeWitnessClearProperty :: BehaviorConformanceReport
+holeWitnessClearProperty = behaviorObligationReport (BehaviorKey "behavior-v1-fe7277b756f0ff4b") behaviorWitnesses
+
+acceptClearProperty :: Bool
+acceptClearProperty = holeWitnessFilled (BehaviorKey "behavior-v1-fe7277b756f0ff4b") holeWitnessClearProperty && null holeWitnessClearProperty.failed
+
+-- forward/replay equality (plan 147): cross the persisted codec boundary,
+-- replay the emitted chain, and compare the final vertex and every register.
+forwardReplayTouch :: [(String, Bool)]
+forwardReplayTouch =
+  case step assignmentTransducer (AssignmentActive, initialAssignmentRegs) (Touch (TouchData "sample-note")) of
+    Nothing -> [(prefix <> "forward step accepted", False)]
+    Just (forwardVertex, forwardRegs, emitted) ->
+      case mapM (\event -> parseAssignmentEvent (eventType assignmentCodec event) (encodeAssignmentEvent event)) emitted of
+        Left _ -> [(prefix <> "emitted chain decodes", False)]
+        Right decodedEvents ->
+          case applyEventsEither assignmentTransducer (AssignmentActive, initialAssignmentRegs) decodedEvents of
+            Left _ -> [(prefix <> "replay succeeds", False)]
+            Right (replayVertex, replayRegs) ->
+              [ (prefix <> "final vertex", replayVertex == forwardVertex)
+              , (prefix <> "register values", (replayRegs ! #values) == (forwardRegs ! #values))
+              ]
+  where
+    prefix = "forward/replay equality: Touch from AssignmentActive -- "
+
+-- The behavior contract decodes emissions through the persisted codec,
+-- replays them, and compares the final vertex and every register.
+forwardReplaySetProperty :: [(String, Bool)]
+forwardReplaySetProperty =
+  [ (prefix <> "hole witness filled", holeWitnessFilled key holeWitnessSetProperty)
+  , (prefix <> "hole witness verified", holeWitnessFilled key holeWitnessSetProperty && null holeWitnessSetProperty.failed)
+  ]
+  where
+    key = BehaviorKey "behavior-v1-73b7455c36956c2b"
+    prefix = "forward/replay equality: SetProperty from AssignmentActive -- "
+
+-- The behavior contract decodes emissions through the persisted codec,
+-- replays them, and compares the final vertex and every register.
+forwardReplayClearProperty :: [(String, Bool)]
+forwardReplayClearProperty =
+  [ (prefix <> "hole witness filled", holeWitnessFilled key holeWitnessClearProperty)
+  , (prefix <> "hole witness verified", holeWitnessFilled key holeWitnessClearProperty && null holeWitnessClearProperty.failed)
+  ]
+  where
+    key = BehaviorKey "behavior-v1-fe7277b756f0ff4b"
+    prefix = "forward/replay equality: ClearProperty from AssignmentActive -- "
diff --git a/test/conformance-history-dependent-holes/Generated/HistoryDependentHoles/Assignment/Projection.hs b/test/conformance-history-dependent-holes/Generated/HistoryDependentHoles/Assignment/Projection.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-history-dependent-holes/Generated/HistoryDependentHoles/Assignment/Projection.hs
@@ -0,0 +1,4 @@
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Assignment; do not edit.
+module Generated.HistoryDependentHoles.Assignment.Projection () where
+
+-- No projection declarations are present; this module keeps the generated manifest inventory total.
diff --git a/test/conformance-history-dependent-holes/Generated/HistoryDependentHoles/Assignment/Transducer.hs b/test/conformance-history-dependent-holes/Generated/HistoryDependentHoles/Assignment/Transducer.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-history-dependent-holes/Generated/HistoryDependentHoles/Assignment/Transducer.hs
@@ -0,0 +1,80 @@
+{-# LANGUAGE BlockArguments #-}
+{-# LANGUAGE QualifiedDo #-}
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Assignment; do not edit.
+module Generated.HistoryDependentHoles.Assignment.Transducer
+  ( assignmentTransducer
+  , assignmentFoldFingerprint
+  , BehaviorOwnership (..)
+  , assignmentPredicateVerifications
+  ) where
+
+import Generated.HistoryDependentHoles.Assignment.Domain
+import Data.Text (Text)
+import Keiki.Builder qualified as B
+import Keiki.Core (HsPred, SymTransducer)
+import Keiki.Core qualified as K
+import Keiki.Symbolic qualified as S
+import HistoryDependentHoles.Assignment.Holes qualified as Holes
+import Data.Text qualified as T
+import Keiro.Snapshot.Codec (FoldVersion (..))
+
+assignmentTransducer
+  :: SymTransducer
+       (HsPred AssignmentRegs AssignmentCommand)
+       AssignmentRegs
+       AssignmentVertex
+       AssignmentCommand
+       AssignmentEvent
+assignmentTransducer =
+  B.buildTransducer AssignmentActive initialAssignmentRegs isTerminal do
+    B.from AssignmentActive do
+      B.onCmd inCtorSetProperty $ \d -> B.do
+        Holes.transition1ActiveSetPropertyHole d
+        B.emit wirePropertySet (PropertySetTermFields
+          { key = d.key
+          , value = d.value
+          })
+        B.goto AssignmentActive
+      B.onCmd inCtorClearProperty $ \d -> B.do
+        Holes.transition2ActiveClearPropertyHole d
+        B.emit wirePropertyCleared (PropertyClearedTermFields
+          { key = d.key
+          })
+        B.goto AssignmentActive
+      B.onCmd inCtorTouch $ \d -> B.do
+        B.emit wireTouched (TouchedTermFields
+          { note = d.note
+          })
+        B.goto AssignmentActive
+      B.onCmd inCtorClearProperty $ \d -> B.do
+        B.replayOnly
+        Holes.transition4ActiveClearPropertyHole d
+        B.emit wirePropertyCleared (PropertyClearedTermFields
+          { key = d.key
+          })
+        B.goto AssignmentActive
+ where
+  isTerminal = \case
+
+    _ -> False
+
+assignmentFoldFingerprint :: Text
+assignmentFoldFingerprint = T.intercalate "|" ("2673c2db26aeba8a5e33f163b794bb07" : [foldToken Holes.transition1ActiveSetPropertyHoleFoldVersion, foldToken Holes.transition2ActiveClearPropertyHoleFoldVersion, foldToken Holes.transition4ActiveClearPropertyHoleFoldVersion] ) where foldToken (FoldVersion token) = T.pack (show (T.length token)) <> ":" <> token
+
+data BehaviorOwnership = GeneratedOwned | HoleOwned
+  deriving stock (Eq, Show)
+
+-- Every checked transition predicate is audited through Keiki's conservative
+-- symbolic verifier. Opaque Hole terms remain explicitly unverified.
+assignmentPredicateVerifications :: IO [(Text, BehaviorOwnership, S.PredicateVerification)]
+assignmentPredicateVerifications = sequence
+  [ verifyTransition "transition1ActiveSetProperty" HoleOwned AssignmentActive 0
+  , verifyTransition "transition2ActiveClearProperty" HoleOwned AssignmentActive 1
+  , verifyTransition "transition3ActiveTouch" GeneratedOwned AssignmentActive 2
+  , verifyTransition "transition4ActiveClearProperty" HoleOwned AssignmentActive 3
+  ]
+ where
+  verifyTransition label owner source edgeIndex =
+    case drop edgeIndex (K.edgesOut assignmentTransducer source) of
+      K.Edge predicate _ _ _ _ : _ -> (\result -> (label, owner, result)) <$> S.verifyPredicate predicate
+      [] -> pure (label, owner, S.UnverifiedSolverFailure "generated transition edge missing")
diff --git a/test/conformance-history-dependent-holes/Generated/HistoryDependentHoles/BehaviorSourceMap.hs b/test/conformance-history-dependent-holes/Generated/HistoryDependentHoles/BehaviorSourceMap.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-history-dependent-holes/Generated/HistoryDependentHoles/BehaviorSourceMap.hs
@@ -0,0 +1,32 @@
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context history-dependent-holes behavior source map; do not edit.
+module Generated.HistoryDependentHoles.BehaviorSourceMap
+  ( BehaviorSourceLocation (..)
+  , behaviorSourceLocation
+  , renderBehaviorSourceLocation
+  ) where
+
+import Data.Text (Text)
+import Data.Text qualified as T
+
+data BehaviorSourceLocation = BehaviorSourceLocation
+  { file :: !FilePath
+  , line :: !Int
+  , column :: !Int
+  }
+  deriving stock (Eq, Ord, Show)
+
+behaviorSourceLocation :: Text -> Maybe BehaviorSourceLocation
+behaviorSourceLocation key = case key of
+  "behavior-v1-73b7455c36956c2b" -> Just (BehaviorSourceLocation "keiro-dsl/test/fixtures/history-dependent-holes.keiro" 26 3)
+  "behavior-v1-afe574346545beaa" -> Just (BehaviorSourceLocation "keiro-dsl/test/fixtures/history-dependent-holes.keiro" 43 3)
+  "behavior-v1-fa59fc344c44f50b" -> Just (BehaviorSourceLocation "keiro-dsl/test/fixtures/history-dependent-holes.keiro" 38 3)
+  "behavior-v1-fe7277b756f0ff4b" -> Just (BehaviorSourceLocation "keiro-dsl/test/fixtures/history-dependent-holes.keiro" 32 3)
+  _ -> Nothing
+
+renderBehaviorSourceLocation :: Text -> Text
+renderBehaviorSourceLocation key = case behaviorSourceLocation key of
+  Just location -> T.pack location.file <> ":" <> tshow location.line <> ":" <> tshow location.column
+  Nothing -> "<internal invariant: missing behavior source for " <> key <> ">"
+
+tshow :: Show value => value -> Text
+tshow = T.pack . show
diff --git a/test/conformance-history-dependent-holes/Generated/HistoryDependentHoles/ReplayAudit.hs b/test/conformance-history-dependent-holes/Generated/HistoryDependentHoles/ReplayAudit.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-history-dependent-holes/Generated/HistoryDependentHoles/ReplayAudit.hs
@@ -0,0 +1,23 @@
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context history-dependent-holes replay-audit assembly; do not edit.
+--
+-- Deployment contract:
+--   * replay-neutral diff: no data audit is required;
+--   * affected diff: run AuditTargeted with the emitted affected set
+--     against a production copy under the candidate binary;
+--   * one-time runtime cutover: run AuditFull;
+--   * any non-zero audit exit blocks deployment.
+module Generated.HistoryDependentHoles.ReplayAudit (auditTargets) where
+
+import Generated.HistoryDependentHoles.Assignment.EventStream qualified as Assignment
+import Keiro.ReplayAudit (AuditTarget (..), SomeAuditTarget (..), streamInCategory)
+import Keiro.Stream qualified as Stream
+
+auditTargets :: [SomeAuditTarget]
+auditTargets =
+  [ SomeAuditTarget
+      AuditTarget
+        { eventStream = Assignment.assignmentEventStream
+        , category = Stream.categoryText Assignment.assignmentCategory
+        , mkStream = streamInCategory (Stream.categoryText Assignment.assignmentCategory)
+        }
+  ]
diff --git a/test/conformance-history-dependent-holes/Generated/HistoryDependentHoles/StructuralConformance.hs b/test/conformance-history-dependent-holes/Generated/HistoryDependentHoles/StructuralConformance.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-history-dependent-holes/Generated/HistoryDependentHoles/StructuralConformance.hs
@@ -0,0 +1,32 @@
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context history-dependent-holes structural conformance; do not edit.
+module Generated.HistoryDependentHoles.StructuralConformance
+  ( structuralConformanceAssertions
+  ) where
+
+import Data.Aeson qualified as Aeson
+import Data.List (nub)
+import Data.List.NonEmpty qualified as NonEmpty
+import Data.Text qualified as T
+import Keiro.Codec.Structural (FixtureCases (..))
+import Conformance.HistoryDependentHoles.Bindings qualified as Bindings
+
+structuralConformanceAssertions :: [(String, Bool)]
+structuralConformanceAssertions =
+  concat
+    [ propertyValuesOpaqueAssertions
+    ]
+
+validFixtureLabels :: NonEmpty.NonEmpty (T.Text, value) -> Bool
+validFixtureLabels cases =
+  all (not . T.null) labels && length labels == length (nub labels)
+  where
+    labels = map fst (NonEmpty.toList cases)
+
+propertyValuesOpaqueAssertions :: [(String, Bool)]
+propertyValuesOpaqueAssertions =
+  ("opaque boundary fixtures: conformance.history-dependent-holes.PropertyValues.json@1", validFixtureLabels cases) :
+  [ ("opaque codec round-trip: conformance.history-dependent-holes.PropertyValues.json@1/" <> T.unpack caseLabel, case Aeson.fromJSON (Aeson.toJSON value) of Aeson.Success decoded -> decoded == value; Aeson.Error _ -> False)
+  | (caseLabel, value) <- NonEmpty.toList cases
+  ]
+  where
+    cases = fixtureCases Bindings.propertyValuesCases
diff --git a/test/conformance-history-dependent-holes/HistoryDependentHoles/Assignment/BehaviorHoles.hs b/test/conformance-history-dependent-holes/HistoryDependentHoles/Assignment/BehaviorHoles.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-history-dependent-holes/HistoryDependentHoles/Assignment/BehaviorHoles.hs
@@ -0,0 +1,13 @@
+module HistoryDependentHoles.Assignment.BehaviorHoles (behaviorWitnesses) where
+
+import Data.List.NonEmpty (NonEmpty (..))
+import Generated.HistoryDependentHoles.Assignment.BehaviorContract
+import Generated.HistoryDependentHoles.Assignment.Domain
+
+behaviorWitnesses :: [BehaviorWitness]
+behaviorWitnesses =
+  [ LiveWitness (BehaviorKey "behavior-v1-73b7455c36956c2b") [] (SetProperty (SetPropertyData "colour" "blue")) (Emits (PropertySet (PropertySetData "colour" "blue") :| []))
+  , LiveWitness (BehaviorKey "behavior-v1-fe7277b756f0ff4b") [PropertySet (PropertySetData "colour" "blue")] (ClearProperty (ClearPropertyData "colour")) (Emits (PropertyCleared (PropertyClearedData "colour") :| []))
+  , LiveWitness (BehaviorKey "behavior-v1-fa59fc344c44f50b") [] (Touch (TouchData "touch")) (Emits (Touched (TouchedData "touch") :| []))
+  , ReplayWitness (BehaviorKey "behavior-v1-afe574346545beaa") [] [PropertyCleared (PropertyClearedData "colour")]
+  ]
diff --git a/test/conformance-history-dependent-holes/HistoryDependentHoles/Assignment/Holes.hs b/test/conformance-history-dependent-holes/HistoryDependentHoles/Assignment/Holes.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-history-dependent-holes/HistoryDependentHoles/Assignment/Holes.hs
@@ -0,0 +1,74 @@
+{-# LANGUAGE BlockArguments #-}
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE OverloadedRecordDot #-}
+{-# LANGUAGE QualifiedDo #-}
+{-# LANGUAGE TypeApplications #-}
+-- This is a HAND-OWNED version-2 hook module. keiro-dsl creates it once
+-- and never overwrites it. Generated code owns every transition envelope
+-- and every declared guard/write. This module supplies explicit event-field
+-- mappings and explicitly selected Hole behavior only; fields(Command)
+-- identity mappings are generated directly and have no hook.
+module HistoryDependentHoles.Assignment.Holes
+  ( transition1ActiveSetPropertyHole
+  , transition1ActiveSetPropertyHoleFoldVersion
+  , transition2ActiveClearPropertyHole
+  , transition2ActiveClearPropertyHoleFoldVersion
+  , transition4ActiveClearPropertyHole
+  , transition4ActiveClearPropertyHoleFoldVersion
+  ) where
+
+import Generated.HistoryDependentHoles.Assignment.Domain
+import Keiki.Builder ((=:))
+import Keiki.Builder qualified as B
+import Keiki.Generics (RegFieldsOf)
+
+
+import Conformance.HistoryDependentHoles.Domain (PropertyValues (..))
+import Data.Map.Strict qualified as Map
+import Data.Text (Text)
+import Keiki.Core qualified as K
+import Keiro.Snapshot.Codec (FoldVersion (..))
+
+-- HOLE: add the predicate and ordered register updates for this transition.
+-- The generated transducer still owns command matching, mode, emits, and goto.
+transition1ActiveSetPropertyHole :: B.PayloadProj AssignmentRegs AssignmentCommand (RegFieldsOf SetPropertyData) -> B.EdgeBuilder AssignmentRegs AssignmentCommand AssignmentEvent AssignmentVertex ('Just (RegFieldsOf SetPropertyData)) '[] '["values"] ()
+transition1ActiveSetPropertyHole d = B.do
+  B.requireGuard K.PTop
+  B.slot @"values" =: K.TApp2 insertValue (B.reg @"values") (K.TApp2 (,) d.key d.value)
+
+-- Bump this token whenever the Hole predicate or updates change.
+transition1ActiveSetPropertyHoleFoldVersion :: FoldVersion
+transition1ActiveSetPropertyHoleFoldVersion = FoldVersion "transition1ActiveSetProperty-fold-v1"
+
+-- HOLE: add the predicate and ordered register updates for this transition.
+-- The generated transducer still owns command matching, mode, emits, and goto.
+transition2ActiveClearPropertyHole :: B.PayloadProj AssignmentRegs AssignmentCommand (RegFieldsOf ClearPropertyData) -> B.EdgeBuilder AssignmentRegs AssignmentCommand AssignmentEvent AssignmentVertex ('Just (RegFieldsOf ClearPropertyData)) '[] '["values"] ()
+transition2ActiveClearPropertyHole d = B.do
+  B.requireGuard (K.PEq (K.TApp2 memberValue d.key (B.reg @"values")) (K.TLit True))
+  B.slot @"values" =: K.TApp2 deleteValue (B.reg @"values") d.key
+
+-- Bump this token whenever the Hole predicate or updates change.
+transition2ActiveClearPropertyHoleFoldVersion :: FoldVersion
+transition2ActiveClearPropertyHoleFoldVersion = FoldVersion "transition2ActiveClearProperty-fold-v1"
+
+-- HOLE: add the predicate and ordered register updates for this transition.
+-- The generated transducer still owns command matching, mode, emits, and goto.
+transition4ActiveClearPropertyHole :: B.PayloadProj AssignmentRegs AssignmentCommand (RegFieldsOf ClearPropertyData) -> B.EdgeBuilder AssignmentRegs AssignmentCommand AssignmentEvent AssignmentVertex ('Just (RegFieldsOf ClearPropertyData)) '[] '["values"] ()
+transition4ActiveClearPropertyHole d = B.do
+  B.requireGuard K.PTop
+  B.slot @"values" =: K.TApp2 deleteValue (B.reg @"values") d.key
+
+-- Bump this token whenever the Hole predicate or updates change.
+transition4ActiveClearPropertyHoleFoldVersion :: FoldVersion
+transition4ActiveClearPropertyHoleFoldVersion = FoldVersion "transition4ActiveClearProperty-fold-v1"
+
+
+insertValue :: PropertyValues -> (Text, Text) -> PropertyValues
+insertValue (PropertyValues values) (key, value) = PropertyValues (Map.insert key value values)
+
+memberValue :: Text -> PropertyValues -> Bool
+memberValue key (PropertyValues values) = Map.member key values
+
+deleteValue :: PropertyValues -> Text -> PropertyValues
+deleteValue (PropertyValues values) key = PropertyValues (Map.delete key values)
diff --git a/test/conformance-history-dependent-holes/Main.hs b/test/conformance-history-dependent-holes/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-history-dependent-holes/Main.hs
@@ -0,0 +1,38 @@
+module Main (main) where
+
+import Data.Text.IO qualified as TIO
+import Generated.HistoryDependentHoles.Assignment.BehaviorContract
+import Generated.HistoryDependentHoles.Assignment.Domain
+import Generated.HistoryDependentHoles.Assignment.Harness (harnessAssertions)
+import Generated.HistoryDependentHoles.Assignment.Transducer (assignmentTransducer)
+import HistoryDependentHoles.Assignment.BehaviorHoles (behaviorWitnesses)
+import Keiki.Core qualified as K
+import System.Exit (exitFailure)
+import Control.Monad (unless)
+
+main :: IO ()
+main = do
+  mapM_ printRow harnessAssertions
+  TIO.putStr (renderBehaviorConformanceText report)
+  mapM_ printRow directAssertions
+  unless (all snd (harnessAssertions <> directAssertions)) exitFailure
+  where
+    printRow (label, passed) = putStrLn ((if passed then "PASS  " else "FAIL  ") <> label)
+
+report :: BehaviorConformanceReport
+report = behaviorCoverageReport behaviorWitnesses
+
+directAssertions :: [(String, Bool)]
+directAssertions =
+  [ ("live clear from empty registers refuses", case K.step assignmentTransducer seed clear of Nothing -> True; Just _ -> False)
+  , ("forward stepping never selects the replay-only clear", case K.stepDetailedEither assignmentTransducer seed clear of Left K.NoMatchingEdge {} -> True; _ -> False)
+  , ("historical empty clear replays through the replay-only edge", case K.applyEventsDetailedEither assignmentTransducer seed [PropertyCleared (PropertyClearedData "colour")] of
+       Right result -> case result.replaySuccessTrace of
+         [attribution] -> attribution.replayAttributionMode == K.ReplayOnly && attribution.replayAttributionEdge == K.EdgeRef AssignmentActive 3
+         _ -> False
+       Left _ -> False)
+  , ("behavior conformance passes", behaviorConformancePassed report)
+  ]
+  where
+    seed = (AssignmentActive, initialAssignmentRegs)
+    clear = ClearProperty (ClearPropertyData "colour")
diff --git a/test/conformance-history-dependent-holes/keiro-dsl-cabal-fragment.context.history-dependent-holes.txt b/test/conformance-history-dependent-holes/keiro-dsl-cabal-fragment.context.history-dependent-holes.txt
new file mode 100644
--- /dev/null
+++ b/test/conformance-history-dependent-holes/keiro-dsl-cabal-fragment.context.history-dependent-holes.txt
@@ -0,0 +1,40 @@
+-- keiro-dsl build manifest for keiro-dsl/test/fixtures/history-dependent-holes.keiro
+-- Paste the complete fragment below into the consuming Cabal stanza.
+-- The generated layer is overwritten on every scaffold; hole modules are
+-- create-if-absent (filled by hand).
+
+default-language: GHC2024
+default-extensions:
+    DuplicateRecordFields
+    NoFieldSelectors
+    OverloadedRecordDot
+    OverloadedStrings
+
+other-modules:
+    Generated.HistoryDependentHoles.Assignment.BehaviorContract
+    Generated.HistoryDependentHoles.Assignment.Codec
+    Generated.HistoryDependentHoles.Assignment.Domain
+    Generated.HistoryDependentHoles.Assignment.EventStream
+    Generated.HistoryDependentHoles.Assignment.Harness
+    Generated.HistoryDependentHoles.Assignment.Projection
+    Generated.HistoryDependentHoles.Assignment.Transducer
+    Generated.HistoryDependentHoles.BehaviorSourceMap
+    Generated.HistoryDependentHoles.ReplayAudit
+    Generated.HistoryDependentHoles.StructuralConformance
+    HistoryDependentHoles.Assignment.BehaviorHoles
+    HistoryDependentHoles.Assignment.Holes
+
+build-depends:
+    , aeson
+    , base
+    , keiki
+    , keiro
+    , keiro-dsl
+    , text
+
+consumer-packages:
+    keiro-dsl
+
+consumer-modules:
+    Conformance.HistoryDependentHoles.Bindings
+    Conformance.HistoryDependentHoles.Domain
diff --git a/test/conformance-history-dependent-holes/keiro-dsl-ledger.context.history-dependent-holes.txt b/test/conformance-history-dependent-holes/keiro-dsl-ledger.context.history-dependent-holes.txt
new file mode 100644
--- /dev/null
+++ b/test/conformance-history-dependent-holes/keiro-dsl-ledger.context.history-dependent-holes.txt
@@ -0,0 +1,37 @@
+keiro-dsl scaffold record v1
+spec: keiro-dsl/test/fixtures/history-dependent-holes.keiro
+module-root: (none)
+layout: prefixed
+source-language {"declaredLanguageVersion":6,"effectiveLanguageVersion":6,"sourceForm":"declared"}
+semantic-contract {"languageSupport":"candidate","languageVersion":6,"runtimeSemantics":"keiro-dsl/runtime-semantics/5"}
+naming-edition idiomatic-v2
+module-role {"family":"StructuralConformance","kind":"generated","ownerKind":"context","ownerName":"context history-dependent-holes structural conformance","path":"Generated/HistoryDependentHoles/StructuralConformance.hs"}
+module-role {"family":"BehaviorSourceMap","kind":"generated","ownerKind":"context","ownerName":"context history-dependent-holes behavior source map","path":"Generated/HistoryDependentHoles/BehaviorSourceMap.hs"}
+module-role {"family":"ReplayAudit","kind":"generated","ownerKind":"context","ownerName":"context history-dependent-holes replay-audit assembly","path":"Generated/HistoryDependentHoles/ReplayAudit.hs"}
+module-role {"family":"Domain","kind":"generated","ownerKind":"aggregate","ownerName":"aggregate Assignment (line 12)","path":"Generated/HistoryDependentHoles/Assignment/Domain.hs"}
+module-role {"family":"Codec","kind":"generated","ownerKind":"aggregate","ownerName":"aggregate Assignment (line 12)","path":"Generated/HistoryDependentHoles/Assignment/Codec.hs"}
+module-role {"family":"Transducer","kind":"generated","ownerKind":"aggregate","ownerName":"aggregate Assignment (line 12)","path":"Generated/HistoryDependentHoles/Assignment/Transducer.hs"}
+module-role {"family":"BehaviorContract","kind":"generated","ownerKind":"aggregate","ownerName":"aggregate Assignment (line 12)","path":"Generated/HistoryDependentHoles/Assignment/BehaviorContract.hs"}
+module-role {"family":"BehaviorHoles","kind":"hole","ownerKind":"aggregate","ownerName":"aggregate behavior witnesses Assignment (line 12)","path":"HistoryDependentHoles/Assignment/BehaviorHoles.hs"}
+module-role {"family":"EventStream","kind":"generated","ownerKind":"aggregate","ownerName":"aggregate Assignment (line 12)","path":"Generated/HistoryDependentHoles/Assignment/EventStream.hs"}
+module-role {"family":"Projection","kind":"generated","ownerKind":"aggregate","ownerName":"aggregate Assignment (line 12)","path":"Generated/HistoryDependentHoles/Assignment/Projection.hs"}
+module-role {"family":"Holes","kind":"hole","ownerKind":"aggregate","ownerName":"aggregate Assignment (line 12)","path":"HistoryDependentHoles/Assignment/Holes.hs"}
+module-role {"family":"Harness","kind":"generated","ownerKind":"aggregate","ownerName":"aggregate Assignment (line 12)","path":"Generated/HistoryDependentHoles/Assignment/Harness.hs"}
+generated Generated/HistoryDependentHoles/StructuralConformance.hs
+generated Generated/HistoryDependentHoles/BehaviorSourceMap.hs
+generated Generated/HistoryDependentHoles/ReplayAudit.hs
+generated Generated/HistoryDependentHoles/Assignment/Domain.hs
+generated Generated/HistoryDependentHoles/Assignment/Codec.hs
+generated Generated/HistoryDependentHoles/Assignment/Transducer.hs
+generated Generated/HistoryDependentHoles/Assignment/BehaviorContract.hs
+hole HistoryDependentHoles/Assignment/BehaviorHoles.hs
+generated Generated/HistoryDependentHoles/Assignment/EventStream.hs
+generated Generated/HistoryDependentHoles/Assignment/Projection.hs
+hole HistoryDependentHoles/Assignment/Holes.hs
+generated Generated/HistoryDependentHoles/Assignment/Harness.hs
+mapping {"codecIdentity":"conformance.history-dependent-holes.PropertyValues.json","codecVersion":"1","mode":"opaque","module":"Conformance.HistoryDependentHoles.Domain","package":"keiro-dsl","schema":1,"specName":"PropertyValues","type":"PropertyValues"}
+behavior {"aggregate":"Assignment","command":"SetProperty","evidence":"hole-witnessed","key":"behavior-v1-73b7455c36956c2b","kind":"live-transition","outputs":[{"command":"SetProperty","ownership":"generated-command-identity"}],"source":"Active"}
+behavior {"aggregate":"Assignment","command":"ClearProperty","evidence":"hole-witnessed","key":"behavior-v1-afe574346545beaa","kind":"replay-transition","outputs":[{"command":"ClearProperty","ownership":"generated-command-identity"}],"source":"Active"}
+behavior {"aggregate":"Assignment","command":"Touch","evidence":"generated-authoritative","key":"behavior-v1-fa59fc344c44f50b","kind":"live-transition","outputs":[{"command":"Touch","ownership":"generated-command-identity"}],"source":"Active"}
+behavior {"aggregate":"Assignment","command":"ClearProperty","evidence":"hole-witnessed","key":"behavior-v1-fe7277b756f0ff4b","kind":"live-transition","outputs":[{"command":"ClearProperty","ownership":"generated-command-identity"}],"source":"Active"}
+semantic-impact {"declarations":[{"consequences":[{"consumer":"Assignment","kind":"consumer-build"},{"aggregate":"Assignment","kind":"snapshot-hydration"}],"consumerEvidence":[{"consumer":"Assignment","operation":null,"path":"Assignment register values : PropertyValues","surface":"snapshot-register"}],"consumers":["Assignment"],"declaration":"PropertyValues","identity":"opaque\u001fkeiro-dsl:Conformance.HistoryDependentHoles.Domain:PropertyValues\u001fconformance.history-dependent-holes.PropertyValues.json\u001f1\u001fConformance.HistoryDependentHoles.Bindings.propertyValuesCases\u001fConformance.HistoryDependentHoles.Bindings.emptyPropertyValues\u001faea479573cfac02e"}],"mappedSurfaceEvidenceVersion":1,"serviceInventory":["PropertyValues"]}
diff --git a/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/BehaviorSourceMap.hs b/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/BehaviorSourceMap.hs
--- a/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/BehaviorSourceMap.hs
+++ b/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/BehaviorSourceMap.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context id-admission-domains behavior source map; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context id-admission-domains behavior source map; do not edit.
 module Generated.IdAdmissionDomains.BehaviorSourceMap
   ( BehaviorSourceLocation (..)
   , behaviorSourceLocation
diff --git a/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/Identities/Contract.hs b/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/Identities/Contract.hs
--- a/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/Identities/Contract.hs
+++ b/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/Identities/Contract.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from contract identities; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from contract identities; do not edit.
 module Generated.IdAdmissionDomains.Identities.Contract
   ( IdentitiesPayload (..)
   , IdentityLinkedData (..)
diff --git a/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityLedger/BehaviorContract.hs b/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityLedger/BehaviorContract.hs
--- a/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityLedger/BehaviorContract.hs
+++ b/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityLedger/BehaviorContract.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate IdentityLedger; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate IdentityLedger; do not edit.
 module Generated.IdAdmissionDomains.IdentityLedger.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -14,6 +14,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -169,7 +170,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -182,7 +194,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityLedger/Codec.hs b/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityLedger/Codec.hs
--- a/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityLedger/Codec.hs
+++ b/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityLedger/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate IdentityLedger; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate IdentityLedger; do not edit.
 module Generated.IdAdmissionDomains.IdentityLedger.Codec (
     identityLedgerCodec,
     parseIdentityLedgerEvent,
diff --git a/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityLedger/Domain.hs b/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityLedger/Domain.hs
--- a/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityLedger/Domain.hs
+++ b/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityLedger/Domain.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate IdentityLedger; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate IdentityLedger; do not edit.
 module Generated.IdAdmissionDomains.IdentityLedger.Domain where
 
 import Data.Proxy (Proxy (..))
diff --git a/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityLedger/EventStream.hs b/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityLedger/EventStream.hs
--- a/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityLedger/EventStream.hs
+++ b/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityLedger/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate IdentityLedger; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate IdentityLedger; do not edit.
 module Generated.IdAdmissionDomains.IdentityLedger.EventStream
   ( identityLedgerCategory
   , identityLedgerCommandCategory
diff --git a/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityLedger/Harness.hs b/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityLedger/Harness.hs
--- a/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityLedger/Harness.hs
+++ b/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityLedger/Harness.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate IdentityLedger; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate IdentityLedger; do not edit.
 module Generated.IdAdmissionDomains.IdentityLedger.Harness (harnessAssertions) where
 
 import Generated.IdAdmissionDomains.IdentityLedger.Domain
diff --git a/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityLedger/Projection.hs b/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityLedger/Projection.hs
--- a/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityLedger/Projection.hs
+++ b/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityLedger/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate IdentityLedger; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate IdentityLedger; do not edit.
 module Generated.IdAdmissionDomains.IdentityLedger.Projection () where
 
 -- No projection declarations are present; this module keeps the generated manifest inventory total.
diff --git a/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityLedger/Transducer.hs b/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityLedger/Transducer.hs
--- a/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityLedger/Transducer.hs
+++ b/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityLedger/Transducer.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate IdentityLedger; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate IdentityLedger; do not edit.
 module Generated.IdAdmissionDomains.IdentityLedger.Transducer
   ( identityLedgerTransducer
   , identityLedgerFoldFingerprint
diff --git a/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityWork/Queue.hs b/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityWork/Queue.hs
--- a/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityWork/Queue.hs
+++ b/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityWork/Queue.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from workqueue identity_work; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from workqueue identity_work; do not edit.
 module Generated.IdAdmissionDomains.IdentityWork.Queue
   ( IdentityWork (..)
   , encodeIdentityWork
diff --git a/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityWork/QueueCodec.hs b/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityWork/QueueCodec.hs
--- a/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityWork/QueueCodec.hs
+++ b/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityWork/QueueCodec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from workqueue identity_work; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from workqueue identity_work; do not edit.
 -- | Versioned job payload envelope: @{\"v\",\"t\",\"data\"}@.
 --
 -- Deploy workers before producers when raising its schema version. Do not
diff --git a/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityWork/QueuePolicy.hs b/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityWork/QueuePolicy.hs
--- a/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityWork/QueuePolicy.hs
+++ b/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityWork/QueuePolicy.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from workqueue identity_work; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from workqueue identity_work; do not edit.
 module Generated.IdAdmissionDomains.IdentityWork.QueuePolicy
   ( IdentityWorkOutcome (..)
   , retryPolicy, jobOutcomeFor
diff --git a/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/Nominals.hs b/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/Nominals.hs
--- a/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/Nominals.hs
+++ b/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/Nominals.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context id-admission-domains generated nominal declarations; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context id-admission-domains generated nominal declarations; do not edit.
 module Generated.IdAdmissionDomains.Nominals
   ( LegacyId
   , parseLegacyId
diff --git a/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/Nominals/Internal.hs b/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/Nominals/Internal.hs
--- a/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/Nominals/Internal.hs
+++ b/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/Nominals/Internal.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context id-admission-domains generated nominal ID internals; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context id-admission-domains generated nominal ID internals; do not edit.
 module Generated.IdAdmissionDomains.Nominals.Internal
   ( LegacyId
   , parseLegacyId
diff --git a/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/ReplayAudit.hs b/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/ReplayAudit.hs
--- a/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/ReplayAudit.hs
+++ b/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/ReplayAudit.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context id-admission-domains replay-audit assembly; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context id-admission-domains replay-audit assembly; do not edit.
 --
 -- Deployment contract:
 --   * replay-neutral diff: no data audit is required;
diff --git a/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/Structural/NominalLeaves.hs b/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/Structural/NominalLeaves.hs
--- a/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/Structural/NominalLeaves.hs
+++ b/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/Structural/NominalLeaves.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context id-admission-domains structural nominal leaves; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context id-admission-domains structural nominal leaves; do not edit.
 module Generated.IdAdmissionDomains.Structural.NominalLeaves where
 
 import Data.Aeson (Value (..), withText)
diff --git a/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/Structural/Shape/IdentityEnvelope.hs b/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/Structural/Shape/IdentityEnvelope.hs
--- a/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/Structural/Shape/IdentityEnvelope.hs
+++ b/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/Structural/Shape/IdentityEnvelope.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from mapped structural IdentityEnvelope; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from mapped structural IdentityEnvelope; do not edit.
 module Generated.IdAdmissionDomains.Structural.Shape.IdentityEnvelope (IdentityEnvelopeShape (..)) where
 
 import Data.Map.Strict (Map)
diff --git a/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/StructuralConformance.hs b/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/StructuralConformance.hs
--- a/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/StructuralConformance.hs
+++ b/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/StructuralConformance.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context id-admission-domains structural conformance; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context id-admission-domains structural conformance; do not edit.
 module Generated.IdAdmissionDomains.StructuralConformance
   ( structuralConformanceAssertions
   ) where
diff --git a/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/StructuralProjections.hs b/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/StructuralProjections.hs
--- a/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/StructuralProjections.hs
+++ b/test/conformance-id-admission-domains/Generated/IdAdmissionDomains/StructuralProjections.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TypeFamilies #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context id-admission-domains mapped structural facade; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context id-admission-domains mapped structural facade; do not edit.
 -- Equality witnesses are emitted for Text, Int, Bool, Natural, and UTCTime.
 -- Nominal ID and enum leaves carry exact canonical-text domains.
 -- Int, Natural, and UTCTime belong to Keiki's ordered subset.
diff --git a/test/conformance-id-domain-migration/Generated/IdDomainMigration/BehaviorSourceMap.hs b/test/conformance-id-domain-migration/Generated/IdDomainMigration/BehaviorSourceMap.hs
--- a/test/conformance-id-domain-migration/Generated/IdDomainMigration/BehaviorSourceMap.hs
+++ b/test/conformance-id-domain-migration/Generated/IdDomainMigration/BehaviorSourceMap.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 3) from context id-domain-migration behavior source map; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 3) from context id-domain-migration behavior source map; do not edit.
 module Generated.IdDomainMigration.BehaviorSourceMap
   ( BehaviorSourceLocation (..)
   , behaviorSourceLocation
diff --git a/test/conformance-id-domain-migration/Generated/IdDomainMigration/Nominals.hs b/test/conformance-id-domain-migration/Generated/IdDomainMigration/Nominals.hs
--- a/test/conformance-id-domain-migration/Generated/IdDomainMigration/Nominals.hs
+++ b/test/conformance-id-domain-migration/Generated/IdDomainMigration/Nominals.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 3) from context id-domain-migration generated nominal declarations; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 3) from context id-domain-migration generated nominal declarations; do not edit.
 module Generated.IdDomainMigration.Nominals
   ( OrderId
   , parseOrderId
diff --git a/test/conformance-id-domain-migration/Generated/IdDomainMigration/Nominals/Internal.hs b/test/conformance-id-domain-migration/Generated/IdDomainMigration/Nominals/Internal.hs
--- a/test/conformance-id-domain-migration/Generated/IdDomainMigration/Nominals/Internal.hs
+++ b/test/conformance-id-domain-migration/Generated/IdDomainMigration/Nominals/Internal.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 3) from context id-domain-migration generated nominal ID internals; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 3) from context id-domain-migration generated nominal ID internals; do not edit.
 module Generated.IdDomainMigration.Nominals.Internal
   ( OrderId
   , parseOrderId
diff --git a/test/conformance-id-domain-migration/Generated/IdDomainMigration/OrderBook/BehaviorContract.hs b/test/conformance-id-domain-migration/Generated/IdDomainMigration/OrderBook/BehaviorContract.hs
--- a/test/conformance-id-domain-migration/Generated/IdDomainMigration/OrderBook/BehaviorContract.hs
+++ b/test/conformance-id-domain-migration/Generated/IdDomainMigration/OrderBook/BehaviorContract.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 3) from aggregate OrderBook; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 3) from aggregate OrderBook; do not edit.
 module Generated.IdDomainMigration.OrderBook.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -14,6 +14,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -157,7 +158,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -170,7 +182,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-id-domain-migration/Generated/IdDomainMigration/OrderBook/Codec.hs b/test/conformance-id-domain-migration/Generated/IdDomainMigration/OrderBook/Codec.hs
--- a/test/conformance-id-domain-migration/Generated/IdDomainMigration/OrderBook/Codec.hs
+++ b/test/conformance-id-domain-migration/Generated/IdDomainMigration/OrderBook/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 3) from aggregate OrderBook; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 3) from aggregate OrderBook; do not edit.
 module Generated.IdDomainMigration.OrderBook.Codec (
     orderBookCodec,
     parseOrderBookEvent,
diff --git a/test/conformance-id-domain-migration/Generated/IdDomainMigration/OrderBook/Domain.hs b/test/conformance-id-domain-migration/Generated/IdDomainMigration/OrderBook/Domain.hs
--- a/test/conformance-id-domain-migration/Generated/IdDomainMigration/OrderBook/Domain.hs
+++ b/test/conformance-id-domain-migration/Generated/IdDomainMigration/OrderBook/Domain.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE DeriveAnyClass #-}
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 3) from aggregate OrderBook; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 3) from aggregate OrderBook; do not edit.
 module Generated.IdDomainMigration.OrderBook.Domain where
 
 import Data.Aeson (FromJSON, ToJSON)
diff --git a/test/conformance-id-domain-migration/Generated/IdDomainMigration/OrderBook/EventStream.hs b/test/conformance-id-domain-migration/Generated/IdDomainMigration/OrderBook/EventStream.hs
--- a/test/conformance-id-domain-migration/Generated/IdDomainMigration/OrderBook/EventStream.hs
+++ b/test/conformance-id-domain-migration/Generated/IdDomainMigration/OrderBook/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 3) from aggregate OrderBook; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 3) from aggregate OrderBook; do not edit.
 module Generated.IdDomainMigration.OrderBook.EventStream
   ( orderBookCategory
   , orderBookCommandCategory
diff --git a/test/conformance-id-domain-migration/Generated/IdDomainMigration/OrderBook/Harness.hs b/test/conformance-id-domain-migration/Generated/IdDomainMigration/OrderBook/Harness.hs
--- a/test/conformance-id-domain-migration/Generated/IdDomainMigration/OrderBook/Harness.hs
+++ b/test/conformance-id-domain-migration/Generated/IdDomainMigration/OrderBook/Harness.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 3) from aggregate OrderBook; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 3) from aggregate OrderBook; do not edit.
 module Generated.IdDomainMigration.OrderBook.Harness (harnessAssertions) where
 
 import Generated.IdDomainMigration.OrderBook.Domain
diff --git a/test/conformance-id-domain-migration/Generated/IdDomainMigration/OrderBook/Projection.hs b/test/conformance-id-domain-migration/Generated/IdDomainMigration/OrderBook/Projection.hs
--- a/test/conformance-id-domain-migration/Generated/IdDomainMigration/OrderBook/Projection.hs
+++ b/test/conformance-id-domain-migration/Generated/IdDomainMigration/OrderBook/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 3) from aggregate OrderBook; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 3) from aggregate OrderBook; do not edit.
 module Generated.IdDomainMigration.OrderBook.Projection () where
 
 -- No projection declarations are present; this module keeps the generated manifest inventory total.
diff --git a/test/conformance-id-domain-migration/Generated/IdDomainMigration/OrderBook/Transducer.hs b/test/conformance-id-domain-migration/Generated/IdDomainMigration/OrderBook/Transducer.hs
--- a/test/conformance-id-domain-migration/Generated/IdDomainMigration/OrderBook/Transducer.hs
+++ b/test/conformance-id-domain-migration/Generated/IdDomainMigration/OrderBook/Transducer.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 3) from aggregate OrderBook; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 3) from aggregate OrderBook; do not edit.
 module Generated.IdDomainMigration.OrderBook.Transducer
   ( orderBookTransducer
   , orderBookFoldFingerprint
diff --git a/test/conformance-id-domain-migration/Generated/IdDomainMigration/ReplayAudit.hs b/test/conformance-id-domain-migration/Generated/IdDomainMigration/ReplayAudit.hs
--- a/test/conformance-id-domain-migration/Generated/IdDomainMigration/ReplayAudit.hs
+++ b/test/conformance-id-domain-migration/Generated/IdDomainMigration/ReplayAudit.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 3) from context id-domain-migration replay-audit assembly; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 3) from context id-domain-migration replay-audit assembly; do not edit.
 --
 -- Deployment contract:
 --   * replay-neutral diff: no data audit is required;
diff --git a/test/conformance-import-planning/Generated/ImportPlanningCollisions/BehaviorSourceMap.hs b/test/conformance-import-planning/Generated/ImportPlanningCollisions/BehaviorSourceMap.hs
--- a/test/conformance-import-planning/Generated/ImportPlanningCollisions/BehaviorSourceMap.hs
+++ b/test/conformance-import-planning/Generated/ImportPlanningCollisions/BehaviorSourceMap.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context import-planning-collisions behavior source map; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context import-planning-collisions behavior source map; do not edit.
 module Generated.ImportPlanningCollisions.BehaviorSourceMap
   ( BehaviorSourceLocation (..)
   , behaviorSourceLocation
diff --git a/test/conformance-import-planning/Generated/ImportPlanningCollisions/CollisionLedger/BehaviorContract.hs b/test/conformance-import-planning/Generated/ImportPlanningCollisions/CollisionLedger/BehaviorContract.hs
--- a/test/conformance-import-planning/Generated/ImportPlanningCollisions/CollisionLedger/BehaviorContract.hs
+++ b/test/conformance-import-planning/Generated/ImportPlanningCollisions/CollisionLedger/BehaviorContract.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate CollisionLedger; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate CollisionLedger; do not edit.
 module Generated.ImportPlanningCollisions.CollisionLedger.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -13,6 +13,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -156,7 +157,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -169,7 +181,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-import-planning/Generated/ImportPlanningCollisions/CollisionLedger/Codec.hs b/test/conformance-import-planning/Generated/ImportPlanningCollisions/CollisionLedger/Codec.hs
--- a/test/conformance-import-planning/Generated/ImportPlanningCollisions/CollisionLedger/Codec.hs
+++ b/test/conformance-import-planning/Generated/ImportPlanningCollisions/CollisionLedger/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate CollisionLedger; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate CollisionLedger; do not edit.
 module Generated.ImportPlanningCollisions.CollisionLedger.Codec (
     collisionLedgerCodec,
     parseCollisionLedgerEvent,
diff --git a/test/conformance-import-planning/Generated/ImportPlanningCollisions/CollisionLedger/Domain.hs b/test/conformance-import-planning/Generated/ImportPlanningCollisions/CollisionLedger/Domain.hs
--- a/test/conformance-import-planning/Generated/ImportPlanningCollisions/CollisionLedger/Domain.hs
+++ b/test/conformance-import-planning/Generated/ImportPlanningCollisions/CollisionLedger/Domain.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate CollisionLedger; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate CollisionLedger; do not edit.
 module Generated.ImportPlanningCollisions.CollisionLedger.Domain where
 
 import GHC.Generics (Generic)
diff --git a/test/conformance-import-planning/Generated/ImportPlanningCollisions/CollisionLedger/EventStream.hs b/test/conformance-import-planning/Generated/ImportPlanningCollisions/CollisionLedger/EventStream.hs
--- a/test/conformance-import-planning/Generated/ImportPlanningCollisions/CollisionLedger/EventStream.hs
+++ b/test/conformance-import-planning/Generated/ImportPlanningCollisions/CollisionLedger/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate CollisionLedger; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate CollisionLedger; do not edit.
 module Generated.ImportPlanningCollisions.CollisionLedger.EventStream
   ( collisionLedgerCategory
   , collisionLedgerCommandCategory
diff --git a/test/conformance-import-planning/Generated/ImportPlanningCollisions/CollisionLedger/Harness.hs b/test/conformance-import-planning/Generated/ImportPlanningCollisions/CollisionLedger/Harness.hs
--- a/test/conformance-import-planning/Generated/ImportPlanningCollisions/CollisionLedger/Harness.hs
+++ b/test/conformance-import-planning/Generated/ImportPlanningCollisions/CollisionLedger/Harness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate CollisionLedger; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate CollisionLedger; do not edit.
 module Generated.ImportPlanningCollisions.CollisionLedger.Harness (harnessAssertions) where
 
 import Generated.ImportPlanningCollisions.CollisionLedger.Domain
diff --git a/test/conformance-import-planning/Generated/ImportPlanningCollisions/CollisionLedger/Projection.hs b/test/conformance-import-planning/Generated/ImportPlanningCollisions/CollisionLedger/Projection.hs
--- a/test/conformance-import-planning/Generated/ImportPlanningCollisions/CollisionLedger/Projection.hs
+++ b/test/conformance-import-planning/Generated/ImportPlanningCollisions/CollisionLedger/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate CollisionLedger; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate CollisionLedger; do not edit.
 module Generated.ImportPlanningCollisions.CollisionLedger.Projection () where
 
 -- No projection declarations are present; this module keeps the generated manifest inventory total.
diff --git a/test/conformance-import-planning/Generated/ImportPlanningCollisions/CollisionLedger/Transducer.hs b/test/conformance-import-planning/Generated/ImportPlanningCollisions/CollisionLedger/Transducer.hs
--- a/test/conformance-import-planning/Generated/ImportPlanningCollisions/CollisionLedger/Transducer.hs
+++ b/test/conformance-import-planning/Generated/ImportPlanningCollisions/CollisionLedger/Transducer.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate CollisionLedger; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate CollisionLedger; do not edit.
 module Generated.ImportPlanningCollisions.CollisionLedger.Transducer
   ( collisionLedgerTransducer
   , collisionLedgerFoldFingerprint
diff --git a/test/conformance-import-planning/Generated/ImportPlanningCollisions/NominalProjections.hs b/test/conformance-import-planning/Generated/ImportPlanningCollisions/NominalProjections.hs
--- a/test/conformance-import-planning/Generated/ImportPlanningCollisions/NominalProjections.hs
+++ b/test/conformance-import-planning/Generated/ImportPlanningCollisions/NominalProjections.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TypeFamilies #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context import-planning-collisions nominal scalar projection facade; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context import-planning-collisions nominal scalar projection facade; do not edit.
 module Generated.ImportPlanningCollisions.NominalProjections where
 
 import Data.Text (Text)
diff --git a/test/conformance-import-planning/Generated/ImportPlanningCollisions/ReplayAudit.hs b/test/conformance-import-planning/Generated/ImportPlanningCollisions/ReplayAudit.hs
--- a/test/conformance-import-planning/Generated/ImportPlanningCollisions/ReplayAudit.hs
+++ b/test/conformance-import-planning/Generated/ImportPlanningCollisions/ReplayAudit.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context import-planning-collisions replay-audit assembly; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context import-planning-collisions replay-audit assembly; do not edit.
 --
 -- Deployment contract:
 --   * replay-neutral diff: no data audit is required;
diff --git a/test/conformance-import-planning/Generated/ImportPlanningCollisions/Structural/Shape/Details.hs b/test/conformance-import-planning/Generated/ImportPlanningCollisions/Structural/Shape/Details.hs
--- a/test/conformance-import-planning/Generated/ImportPlanningCollisions/Structural/Shape/Details.hs
+++ b/test/conformance-import-planning/Generated/ImportPlanningCollisions/Structural/Shape/Details.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from mapped structural Details; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from mapped structural Details; do not edit.
 module Generated.ImportPlanningCollisions.Structural.Shape.Details (DetailsShape (..)) where
 
 import Data.Text (Text)
diff --git a/test/conformance-import-planning/Generated/ImportPlanningCollisions/StructuralConformance.hs b/test/conformance-import-planning/Generated/ImportPlanningCollisions/StructuralConformance.hs
--- a/test/conformance-import-planning/Generated/ImportPlanningCollisions/StructuralConformance.hs
+++ b/test/conformance-import-planning/Generated/ImportPlanningCollisions/StructuralConformance.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context import-planning-collisions structural conformance; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context import-planning-collisions structural conformance; do not edit.
 module Generated.ImportPlanningCollisions.StructuralConformance
   ( structuralConformanceAssertions
   ) where
diff --git a/test/conformance-import-planning/Generated/ImportPlanningCollisions/StructuralProjections.hs b/test/conformance-import-planning/Generated/ImportPlanningCollisions/StructuralProjections.hs
--- a/test/conformance-import-planning/Generated/ImportPlanningCollisions/StructuralProjections.hs
+++ b/test/conformance-import-planning/Generated/ImportPlanningCollisions/StructuralProjections.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TypeFamilies #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context import-planning-collisions mapped structural facade; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context import-planning-collisions mapped structural facade; do not edit.
 -- Equality witnesses are emitted for Text, Int, Bool, Natural, and UTCTime.
 -- Nominal ID and enum leaves carry exact canonical-text domains.
 -- Int, Natural, and UTCTime belong to Keiki's ordered subset.
diff --git a/test/conformance-intake-delegated/Generated/HospitalCapacity/Emergency/Contract.hs b/test/conformance-intake-delegated/Generated/HospitalCapacity/Emergency/Contract.hs
--- a/test/conformance-intake-delegated/Generated/HospitalCapacity/Emergency/Contract.hs
+++ b/test/conformance-intake-delegated/Generated/HospitalCapacity/Emergency/Contract.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from contract emergency; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from contract emergency; do not edit.
 module Generated.HospitalCapacity.Emergency.Contract
   ( EmergencyPayload (..)
   , IncidentTransferNeedDeclaredData (..)
diff --git a/test/conformance-intake-delegated/Generated/HospitalCapacity/IncidentInbox/Inbox.hs b/test/conformance-intake-delegated/Generated/HospitalCapacity/IncidentInbox/Inbox.hs
--- a/test/conformance-intake-delegated/Generated/HospitalCapacity/IncidentInbox/Inbox.hs
+++ b/test/conformance-intake-delegated/Generated/HospitalCapacity/IncidentInbox/Inbox.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from intake incidentInbox; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from intake incidentInbox; do not edit.
 module Generated.HospitalCapacity.IncidentInbox.Inbox
   ( InboxFailure (..)
   , IncidentInboxOutcome (..)
diff --git a/test/conformance-intake-full/Generated/HospitalCapacity/Emergency/Contract.hs b/test/conformance-intake-full/Generated/HospitalCapacity/Emergency/Contract.hs
--- a/test/conformance-intake-full/Generated/HospitalCapacity/Emergency/Contract.hs
+++ b/test/conformance-intake-full/Generated/HospitalCapacity/Emergency/Contract.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from contract emergency; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from contract emergency; do not edit.
 module Generated.HospitalCapacity.Emergency.Contract
   ( EmergencyPayload (..)
   , IncidentTransferNeedDeclaredData (..)
diff --git a/test/conformance-intake-full/Generated/HospitalCapacity/IncidentInbox/Inbox.hs b/test/conformance-intake-full/Generated/HospitalCapacity/IncidentInbox/Inbox.hs
--- a/test/conformance-intake-full/Generated/HospitalCapacity/IncidentInbox/Inbox.hs
+++ b/test/conformance-intake-full/Generated/HospitalCapacity/IncidentInbox/Inbox.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from intake incidentInbox; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from intake incidentInbox; do not edit.
 module Generated.HospitalCapacity.IncidentInbox.Inbox
   ( InboxFailure (..)
   , IncidentInboxOutcome (..)
diff --git a/test/conformance-intake-runtime/Generated/HospitalCapacity/Emergency/Contract.hs b/test/conformance-intake-runtime/Generated/HospitalCapacity/Emergency/Contract.hs
--- a/test/conformance-intake-runtime/Generated/HospitalCapacity/Emergency/Contract.hs
+++ b/test/conformance-intake-runtime/Generated/HospitalCapacity/Emergency/Contract.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from contract emergency; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from contract emergency; do not edit.
 module Generated.HospitalCapacity.Emergency.Contract
   ( EmergencyPayload (..)
   , IncidentTransferNeedDeclaredData (..)
diff --git a/test/conformance-intake-runtime/Generated/HospitalCapacity/IncidentInbox/Inbox.hs b/test/conformance-intake-runtime/Generated/HospitalCapacity/IncidentInbox/Inbox.hs
--- a/test/conformance-intake-runtime/Generated/HospitalCapacity/IncidentInbox/Inbox.hs
+++ b/test/conformance-intake-runtime/Generated/HospitalCapacity/IncidentInbox/Inbox.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from intake incidentInbox; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from intake incidentInbox; do not edit.
 module Generated.HospitalCapacity.IncidentInbox.Inbox
   ( InboxFailure (..)
   , IncidentInboxOutcome (..)
diff --git a/test/conformance-keyword-segments/Generated/KeywordSegments/JobType/Queue.hs b/test/conformance-keyword-segments/Generated/KeywordSegments/JobType/Queue.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-keyword-segments/Generated/KeywordSegments/JobType/Queue.hs
@@ -0,0 +1,39 @@
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from workqueue job_type; do not edit.
+module Generated.KeywordSegments.JobType.Queue
+  ( JobTypePayload (..)
+  , encodeJobTypePayload
+  , parseJobTypePayload
+  , queuePhysical, queueDlq, queueTable
+
+  ) where
+
+import Data.Aeson (Value, object, withObject, (.=))
+import Data.Aeson.Types (explicitParseField, parseEither)
+import Data.Text (Text)
+import qualified Data.Text as T
+import Generated.KeywordSegments.Structural.NominalLeaves (encodeSubscriptionIdLeaf, parseSubscriptionIdLeaf)
+import Generated.KeywordSegments.Nominals (SubscriptionId)
+
+queuePhysical, queueDlq, queueTable :: Text
+queuePhysical = "billing_job_type"
+queueDlq = "billing_job_type_dlq"
+queueTable = "pgmq.q_billing_job_type"
+
+data JobTypePayload = JobTypePayload
+  { subscriptionId :: !SubscriptionId
+  }
+  deriving stock (Eq, Show)
+
+encodeJobTypePayload :: JobTypePayload -> Value
+encodeJobTypePayload payload =
+  object
+    [ "subscription_id" .= encodeSubscriptionIdLeaf payload.subscriptionId
+    ]
+
+parseJobTypePayload :: Value -> Either Text JobTypePayload
+parseJobTypePayload = mapLeftText . parseEither (withObject "JobTypePayload" go)
+  where
+    go objectValue = JobTypePayload <$> explicitParseField (parseSubscriptionIdLeaf) objectValue "subscription_id"
+
+mapLeftText :: Either String b -> Either Text b
+mapLeftText = either (Left . T.pack) Right
diff --git a/test/conformance-keyword-segments/Generated/KeywordSegments/JobType/QueueCodec.hs b/test/conformance-keyword-segments/Generated/KeywordSegments/JobType/QueueCodec.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-keyword-segments/Generated/KeywordSegments/JobType/QueueCodec.hs
@@ -0,0 +1,29 @@
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from workqueue job_type; do not edit.
+-- | Versioned job payload envelope: @{\"v\",\"t\",\"data\"}@.
+--
+-- Deploy workers before producers when raising its schema version. Do not
+-- adopt this codec on a non-empty bare-payload queue without draining it
+-- (or supplying a transitional codec), or in-flight messages will
+-- dead-letter. This is telemetry-neutral:
+-- docs/adr/0001-keiro-pgmq-job-processing-telemetry-contract.md owns
+-- spans and acknowledgement vocabulary.
+module Generated.KeywordSegments.JobType.QueueCodec (jobTypePayloadCodec, jobTypeJobCodec) where
+
+import Data.List.NonEmpty (NonEmpty (..))
+import Keiro.Codec (Codec (..), EventType (..))
+import Keiro.PGMQ.Codec (JobCodec, keiroJobCodec)
+import Generated.KeywordSegments.JobType.Queue (JobTypePayload, encodeJobTypePayload, parseJobTypePayload)
+
+jobTypePayloadCodec :: Codec JobTypePayload
+jobTypePayloadCodec =
+  Codec
+    { eventTypes = EventType "JobTypePayload" :| []
+    , eventType = \_ -> EventType "JobTypePayload"
+    , schemaVersion = 1
+    , encode = encodeJobTypePayload
+    , decode = \_ -> parseJobTypePayload
+    , upcasters = []
+    }
+
+jobTypeJobCodec :: JobCodec JobTypePayload
+jobTypeJobCodec = keiroJobCodec jobTypePayloadCodec
diff --git a/test/conformance-keyword-segments/Generated/KeywordSegments/JobType/QueuePolicy.hs b/test/conformance-keyword-segments/Generated/KeywordSegments/JobType/QueuePolicy.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-keyword-segments/Generated/KeywordSegments/JobType/QueuePolicy.hs
@@ -0,0 +1,43 @@
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from workqueue job_type; do not edit.
+module Generated.KeywordSegments.JobType.QueuePolicy
+  ( JobTypeOutcome (..)
+  , retryPolicy, jobOutcomeFor
+  , jobOrdering, jobTuningFor, queueProvision
+  ) where
+
+import Keiro.PGMQ.Job (JobOrdering (..), JobOutcome (..), JobTuning, QueueProvision, RetryDelay (..), RetryPolicy (..), standardProvision, withOrdering)
+
+jobOrdering :: JobOrdering
+jobOrdering = Unordered
+
+-- Deployment owns a positive batch size, visibility timeout, and polling; the spec owns ordering. Legacy FIFO modes reject batch sizes greater than one.
+jobTuningFor :: JobTuning -> JobTuning
+jobTuningFor = withOrdering jobOrdering
+
+-- Pass this to ensureJobQueueWith at worker startup. FIFO adds the required GIN index; the DLQ remains standard.
+queueProvision :: QueueProvision
+queueProvision = standardProvision
+
+retryPolicy :: RetryPolicy
+retryPolicy =
+  RetryPolicy
+    { maxRetries = 3
+    , defaultRetryDelay = RetryDelay 1
+    , useDeadLetter = True
+    }
+
+-- The consumer JobOutcome disposition over the spec's named domain outcomes,
+-- lowered to the live Keiro.PGMQ.Job.JobOutcome.
+data JobTypeOutcome
+  = StoreFailure
+  | CommandRejected
+  | DecodeFailure
+  | OnCodecReject
+  deriving stock (Eq, Show)
+
+jobOutcomeFor :: JobTypeOutcome -> JobOutcome
+jobOutcomeFor o = case o of
+  StoreFailure -> Retry (RetryDelay 1)
+  CommandRejected -> Dead "dead-lettered"
+  DecodeFailure -> Dead "dead-lettered"
+  OnCodecReject -> Dead "dead-lettered"
diff --git a/test/conformance-keyword-segments/Generated/KeywordSegments/Nominals.hs b/test/conformance-keyword-segments/Generated/KeywordSegments/Nominals.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-keyword-segments/Generated/KeywordSegments/Nominals.hs
@@ -0,0 +1,9 @@
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context keyword-segments generated nominal declarations; do not edit.
+module Generated.KeywordSegments.Nominals
+  ( SubscriptionId
+  , parseSubscriptionId
+  , mkSubscriptionId
+  , subscriptionIdText
+  ) where
+
+import Generated.KeywordSegments.Nominals.Internal (SubscriptionId, mkSubscriptionId, parseSubscriptionId, subscriptionIdText)
diff --git a/test/conformance-keyword-segments/Generated/KeywordSegments/Nominals/Internal.hs b/test/conformance-keyword-segments/Generated/KeywordSegments/Nominals/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-keyword-segments/Generated/KeywordSegments/Nominals/Internal.hs
@@ -0,0 +1,40 @@
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context keyword-segments generated nominal ID internals; do not edit.
+module Generated.KeywordSegments.Nominals.Internal
+  ( SubscriptionId
+  , parseSubscriptionId
+  , mkSubscriptionId
+  , subscriptionIdText
+  , unsafeSubscriptionIdFromLegacyText
+  ) where
+
+import Data.Aeson (FromJSON (..), ToJSON (..), withText)
+import Data.Text (Text)
+import Data.Text qualified as T
+import GHC.Generics (Generic)
+import Keiki.Shape (CanonicalTypeName)
+import Keiro.Codec.IdDomain (typeIdV7Domain, validateIdDomainText)
+
+newtype SubscriptionId = SubscriptionId Text
+  deriving stock (Generic, Eq, Ord, Show)
+
+instance CanonicalTypeName SubscriptionId
+
+instance ToJSON SubscriptionId where
+  toJSON = toJSON . subscriptionIdText
+
+instance FromJSON SubscriptionId where
+  parseJSON = withText "SubscriptionId" (either (fail . T.unpack) pure . parseSubscriptionId)
+
+parseSubscriptionId :: Text -> Either Text SubscriptionId
+parseSubscriptionId input = case validateIdDomainText (typeIdV7Domain "subscription") input of
+  Left reason -> Left (T.pack (show reason))
+  Right () -> Right (SubscriptionId input)
+
+mkSubscriptionId :: Text -> Either Text SubscriptionId
+mkSubscriptionId = parseSubscriptionId
+
+subscriptionIdText :: SubscriptionId -> Text
+subscriptionIdText (SubscriptionId value) = value
+
+unsafeSubscriptionIdFromLegacyText :: Text -> SubscriptionId
+unsafeSubscriptionIdFromLegacyText = SubscriptionId
diff --git a/test/conformance-keyword-segments/Generated/KeywordSegments/ProjectionCatalog.hs b/test/conformance-keyword-segments/Generated/KeywordSegments/ProjectionCatalog.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-keyword-segments/Generated/KeywordSegments/ProjectionCatalog.hs
@@ -0,0 +1,80 @@
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from projection-catalog keyword-segments; do not edit.
+{-# LANGUAGE OverloadedStrings #-}
+module Generated.KeywordSegments.ProjectionCatalog
+  ( projectionCatalog
+  , validatedProjectionCatalog
+  , projectionCatalogInventory
+  , projectionCatalogRegistrations
+  , projectionCatalogAsyncRegistrations
+  , projectionCatalogQuerySupplies
+  , registerProjectionCatalog
+  , validateCustomTypeWriterProjectionSet
+  , validateCustomTypeRebuildRebuildGroupId
+  , startValidateCustomTypeRebuildRebuild
+  ) where
+
+import Data.List.NonEmpty (NonEmpty (..))
+import Effectful (Eff, IOE, (:>))
+import Keiro.Projection (AsyncProjection (..))
+import Keiro.Projection.Catalog qualified as Catalog
+import Keiro.ReadModel.Rebuild qualified as Rebuild
+import Kiroku.Store.Effect (Store)
+import Kiroku.Store.Subscription.Types qualified as KirokuSubscription
+import KeywordSegments.ProjectionCatalog.ProjectionCatalogHoles qualified as Holes
+import Generated.KeywordSegments.ValidateCustomType.ReadModel qualified as RMValidateCustomType
+
+must :: Show error => Either error value -> value
+must = either (error . show) id
+
+validateCustomTypeWriterProjectionSet :: Catalog.ProjectionSet Holes.ValidateCustomTypeWriterEvent
+validateCustomTypeWriterProjectionSet =
+  Catalog.ProjectionSet
+    (must (Catalog.mkSourceId "all"))
+    (Catalog.ProjectionDefinition
+      (must (Catalog.mkProjectionId "validate_custom_type_writer"))
+      (must (Catalog.mkRebuildGroupId "validate_custom_type_rebuild"))
+      ((must (Catalog.mkTargetId "validate_custom_type_table")) :| [])
+      (Catalog.Replayable (Catalog.ReplayAdapter Holes.decodeValidateCustomTypeWriterReplay Holes.applyValidateCustomTypeWriterReplay))
+      (Catalog.AsyncHandler (AsyncProjection "validate-custom-type-writer-v1" "keyword-segments-validate-custom-type" "validate-custom-type-writer" Holes.applyValidateCustomTypeWriterLive Holes.validateCustomTypeWriterIdempotencyKey) (must (Catalog.mkSubscriptionId "validate-custom-type-writer")) (must (Catalog.mkDedupKeyId "validate-custom-type-writer-v1")) (must (Catalog.mkClaimSite "projection-owner validate_custom_type_writer async-handler")) :| [])
+      (must (Catalog.mkClaimSite "projection-owner validate_custom_type_writer"))
+      :| [])
+    (must (Catalog.mkClaimSite "projection-owner validate_custom_type_writer source"))
+
+projectionCatalog :: Catalog.ProjectionCatalog
+projectionCatalog =
+  Catalog.ProjectionCatalog
+    [Catalog.SourceDeclaration (must (Catalog.mkSourceId "all")) Catalog.AllStreams "all-streams/generated-codec/v1" (must (Catalog.mkClaimSite "source all"))]
+    [Catalog.TargetDeclaration (must (Catalog.mkTargetId "validate_custom_type_table")) (Catalog.QualifiedTable "billing" "validate_custom_type") Catalog.ClearBeforeReplay [] (must (Catalog.mkClaimSite "target validate_custom_type_table"))]
+    [Catalog.RebuildGroupDeclaration (must (Catalog.mkRebuildGroupId "validate_custom_type_rebuild")) [(must (Catalog.mkTargetId "validate_custom_type_table"))] [] (must (Catalog.mkClaimSite "rebuild-group validate_custom_type_rebuild"))]
+    []
+    []
+    [Catalog.SubscriptionDeclaration (must (Catalog.mkSubscriptionId "validate-custom-type-writer")) "validate-custom-type-writer" (must (Catalog.mkSourceId "all")) KirokuSubscription.FromBeginning (must (Catalog.mkClaimSite "projection-owner validate_custom_type_writer subscription"))]
+    [Catalog.DedupKeyDeclaration (must (Catalog.mkDedupKeyId "validate-custom-type-writer-v1")) "validate-custom-type-writer-v1" (must (Catalog.mkClaimSite "projection-owner validate_custom_type_writer dedup"))]
+    [Catalog.SomeQueryModelBinding (Catalog.QueryModelBinding (must (Catalog.mkQueryModelId "validate_custom_type")) RMValidateCustomType.validateCustomTypeReadModel (must (Catalog.mkRebuildGroupId "validate_custom_type_rebuild")) [(must (Catalog.mkTargetId "validate_custom_type_table"))] (must (Catalog.mkClaimSite "readmodel validate_custom_type")))]
+    [Catalog.SomeProjectionSet validateCustomTypeWriterProjectionSet]
+
+validatedProjectionCatalog :: Catalog.ValidatedProjectionCatalog
+validatedProjectionCatalog = case Catalog.validateProjectionCatalog projectionCatalog of
+  Catalog.Success catalog -> catalog
+  Catalog.Failure diagnostics -> error ("keiro-dsl generated an invalid projection catalog: " <> show diagnostics)
+
+projectionCatalogInventory :: Catalog.CatalogInventory
+projectionCatalogInventory = Catalog.catalogInventory validatedProjectionCatalog
+
+projectionCatalogRegistrations :: [Catalog.CatalogRegistration]
+projectionCatalogRegistrations = Catalog.catalogRegistrations validatedProjectionCatalog
+
+projectionCatalogAsyncRegistrations :: [Catalog.AsyncProjectionRegistration]
+projectionCatalogAsyncRegistrations = Catalog.asyncProjectionRegistrations validatedProjectionCatalog
+
+projectionCatalogQuerySupplies :: [Catalog.ResolvedQuerySupply]
+projectionCatalogQuerySupplies = Catalog.resolvedQuerySupplies validatedProjectionCatalog
+
+registerProjectionCatalog :: (Store :> es) => Eff es (Either Rebuild.CatalogRegistrationError [Rebuild.GroupRebuildMetadata])
+registerProjectionCatalog = Rebuild.registerProjectionCatalog validatedProjectionCatalog
+
+validateCustomTypeRebuildRebuildGroupId :: Catalog.RebuildGroupId
+validateCustomTypeRebuildRebuildGroupId = (must (Catalog.mkRebuildGroupId "validate_custom_type_rebuild"))
+
+startValidateCustomTypeRebuildRebuild :: (IOE :> es, Store :> es) => Rebuild.RebuildOptions -> Eff es (Either Rebuild.CatalogRebuildError Rebuild.RebuildRunReport)
+startValidateCustomTypeRebuildRebuild = Rebuild.startCatalogRebuild validatedProjectionCatalog validateCustomTypeRebuildRebuildGroupId
diff --git a/test/conformance-keyword-segments/Generated/KeywordSegments/Structural/NominalLeaves.hs b/test/conformance-keyword-segments/Generated/KeywordSegments/Structural/NominalLeaves.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-keyword-segments/Generated/KeywordSegments/Structural/NominalLeaves.hs
@@ -0,0 +1,15 @@
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context keyword-segments structural nominal leaves; do not edit.
+module Generated.KeywordSegments.Structural.NominalLeaves where
+
+import Data.Aeson (Value (..), withText)
+import Data.Aeson.Types (Parser)
+import Data.Text qualified as T
+import Generated.KeywordSegments.Nominals qualified as Nominals
+
+encodeSubscriptionIdLeaf :: Nominals.SubscriptionId -> Value
+encodeSubscriptionIdLeaf = String . Nominals.subscriptionIdText
+{-# NOINLINE encodeSubscriptionIdLeaf #-}
+
+parseSubscriptionIdLeaf :: Value -> Parser Nominals.SubscriptionId
+parseSubscriptionIdLeaf = withText "SubscriptionId" (either (fail . T.unpack) pure . Nominals.parseSubscriptionId)
+{-# NOINLINE parseSubscriptionIdLeaf #-}
diff --git a/test/conformance-keyword-segments/Generated/KeywordSegments/StructuralConformance.hs b/test/conformance-keyword-segments/Generated/KeywordSegments/StructuralConformance.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-keyword-segments/Generated/KeywordSegments/StructuralConformance.hs
@@ -0,0 +1,9 @@
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context keyword-segments structural conformance; do not edit.
+module Generated.KeywordSegments.StructuralConformance
+  ( structuralConformanceAssertions
+  ) where
+
+
+structuralConformanceAssertions :: [(String, Bool)]
+structuralConformanceAssertions =
+  []
diff --git a/test/conformance-keyword-segments/Generated/KeywordSegments/ValidateCustomType/QueryContract.hs b/test/conformance-keyword-segments/Generated/KeywordSegments/ValidateCustomType/QueryContract.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-keyword-segments/Generated/KeywordSegments/ValidateCustomType/QueryContract.hs
@@ -0,0 +1,10 @@
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from readmodel validate_custom_type; do not edit.
+module Generated.KeywordSegments.ValidateCustomType.QueryContract
+  ( ValidateCustomTypeQueryInput
+  , ValidateCustomTypeQueryResult
+  ) where
+
+import Generated.KeywordSegments.Nominals (SubscriptionId)
+
+type ValidateCustomTypeQueryInput = SubscriptionId
+type ValidateCustomTypeQueryResult = [SubscriptionId]
diff --git a/test/conformance-keyword-segments/Generated/KeywordSegments/ValidateCustomType/ReadModel.hs b/test/conformance-keyword-segments/Generated/KeywordSegments/ValidateCustomType/ReadModel.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-keyword-segments/Generated/KeywordSegments/ValidateCustomType/ReadModel.hs
@@ -0,0 +1,28 @@
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from readmodel validate_custom_type; do not edit.
+module Generated.KeywordSegments.ValidateCustomType.ReadModel
+  ( validateCustomTypeReadModel
+  , validateCustomTypeQualifiedTable
+  ) where
+
+import Generated.KeywordSegments.ValidateCustomType.ReadModelTable (validateCustomTypeQualifiedTable)
+import Generated.KeywordSegments.ValidateCustomType.QueryContract (ValidateCustomTypeQueryInput, ValidateCustomTypeQueryResult)
+import KeywordSegments.ValidateCustomType.ReadModelHoles (validateCustomTypeQuery)
+import Keiro.ReadModel (QueryCursorAuthority (..), ReadModel, ReadModelBlueprint (..), HeadScope (..), headWaitingReadModel)
+
+validateCustomTypeReadModel :: ReadModel ValidateCustomTypeQueryInput ValidateCustomTypeQueryResult
+validateCustomTypeReadModel =
+  case headWaitingReadModel EntireVisibleLog validateCustomTypeReadModelBlueprint of
+    Left definitionError -> error ("keiro-dsl generated an invalid waiting read model: " <> show definitionError)
+    Right model -> model
+
+validateCustomTypeReadModelBlueprint :: ReadModelBlueprint ValidateCustomTypeQueryInput ValidateCustomTypeQueryResult
+validateCustomTypeReadModelBlueprint =
+  ReadModelBlueprint
+    { name = "keyword-segments-validate-custom-type"
+    , tableName = "validate_custom_type"
+    , schema = "billing"
+    , version = 1
+    , shapeHash = "fnv1a:3c07a19c552c3547"
+    , cursorAuthority = DurableQueryCursor "validate-custom-type-writer"
+    , query = validateCustomTypeQuery
+    }
diff --git a/test/conformance-keyword-segments/Generated/KeywordSegments/ValidateCustomType/ReadModelHarness.hs b/test/conformance-keyword-segments/Generated/KeywordSegments/ValidateCustomType/ReadModelHarness.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-keyword-segments/Generated/KeywordSegments/ValidateCustomType/ReadModelHarness.hs
@@ -0,0 +1,57 @@
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from readmodel validate_custom_type; do not edit.
+module Generated.KeywordSegments.ValidateCustomType.ReadModelHarness (readModelFacts, readModelFactResults, runReadModelFacts, catalogFactsAgainst) where
+
+import Generated.KeywordSegments.ValidateCustomType.ReadModel (validateCustomTypeReadModel)
+import Data.Text qualified as T
+import Data.List.NonEmpty qualified as NE
+import Generated.KeywordSegments.ProjectionCatalog qualified as ProjectionCatalog
+import Keiro.Projection.Catalog qualified as Catalog
+import Keiro.ReadModel (ReadModel (..), readModelCursorAuthority, readModelDefaultFreshness)
+
+-- | (fact, expected from notation, actual generated runtime value).
+readModelFacts :: [(String, String, String)]
+readModelFacts =
+  [ ("registryName", "keyword-segments-validate-custom-type", T.unpack validateCustomTypeReadModel.name)
+  , ("shapeHash", "fnv1a:3c07a19c552c3547", T.unpack validateCustomTypeReadModel.shapeHash)
+  , ("freshness", "WaitForHead EntireVisibleLog", show (readModelDefaultFreshness validateCustomTypeReadModel))
+  , ("cursorAuthority", "DurableQueryCursor \"validate-custom-type-writer\"", show (readModelCursorAuthority validateCustomTypeReadModel))
+  ]
+    <> catalogFactsAgainst ProjectionCatalog.projectionCatalogRegistrations ProjectionCatalog.projectionCatalogAsyncRegistrations ProjectionCatalog.projectionCatalogQuerySupplies
+
+catalogFactsAgainst :: [Catalog.CatalogRegistration] -> [Catalog.AsyncProjectionRegistration] -> [Catalog.ResolvedQuerySupply] -> [(String, String, String)]
+catalogFactsAgainst registrations asyncRegistrations supplies =
+  [ ("catalogRegistration", "keyword-segments-validate-custom-type|1|fnv1a:3c07a19c552c3547|validate_custom_type_rebuild", renderRegistration [entry | entry <- registrations, Catalog.queryModelIdText entry.queryModelId == "validate_custom_type"])
+  , ("querySupply", "validate_custom_type_writer|validate_custom_type_rebuild|validate_custom_type_table", renderSupply [entry | entry <- supplies, Catalog.queryModelIdText entry.resolvedQueryModelId == "validate_custom_type"])
+  , ("projectionDelivery", "subscription", renderDelivery [entry | entry <- supplies, Catalog.queryModelIdText entry.resolvedQueryModelId == "validate_custom_type"])
+  , ("asyncRegistration:validate_custom_type_writer", "validate-custom-type-writer|validate-custom-type-writer-v1", renderAsync [entry | entry <- asyncRegistrations, Catalog.projectionIdText entry.projectionId == "validate_custom_type_writer"])
+  ]
+
+renderRegistration :: [Catalog.CatalogRegistration] -> String
+renderRegistration [entry] = T.unpack entry.registryName <> "|" <> show entry.version <> "|" <> T.unpack entry.shapeHash <> "|" <> T.unpack (Catalog.rebuildGroupIdText entry.rebuildGroupId)
+renderRegistration _ = "missing"
+
+renderSupply :: [Catalog.ResolvedQuerySupply] -> String
+renderSupply [entry] = T.unpack (Catalog.projectionIdText entry.resolvedProjectionId) <> "|" <> T.unpack (Catalog.rebuildGroupIdText entry.resolvedRebuildGroupId) <> "|" <> T.unpack (T.intercalate "," (map Catalog.targetIdText (NE.toList entry.resolvedObservedTargets)))
+renderSupply _ = "missing"
+
+renderDelivery :: [Catalog.ResolvedQuerySupply] -> String
+renderDelivery [entry] = T.unpack (T.intercalate "," (map renderCapability (NE.toList entry.resolvedHandlerCapabilities)))
+renderDelivery _ = "missing"
+
+renderCapability :: Catalog.ProjectionHandlerCapability -> T.Text
+renderCapability Catalog.InlineCapability {} = "inline"
+renderCapability Catalog.SubscriptionCapability {} = "subscription"
+
+renderAsync :: [Catalog.AsyncProjectionRegistration] -> String
+renderAsync [entry] = T.unpack entry.subscriptionName <> "|" <> T.unpack entry.dedupName
+renderAsync _ = "missing"
+
+readModelFactResults :: [(String, Bool)]
+readModelFactResults =
+  [(fact, expected == actual) | (fact, expected, actual) <- readModelFacts]
+
+runReadModelFacts :: IO Bool
+runReadModelFacts = do
+  let failures = [(fact, expected, actual) | (fact, expected, actual) <- readModelFacts, expected /= actual]
+  mapM_ (\(fact, expected, actual) -> putStrLn ("FAIL  " <> fact <> " expected=" <> show expected <> " actual=" <> show actual)) failures
+  pure (null failures)
diff --git a/test/conformance-keyword-segments/Generated/KeywordSegments/ValidateCustomType/ReadModelTable.hs b/test/conformance-keyword-segments/Generated/KeywordSegments/ValidateCustomType/ReadModelTable.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-keyword-segments/Generated/KeywordSegments/ValidateCustomType/ReadModelTable.hs
@@ -0,0 +1,9 @@
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from readmodel validate_custom_type; do not edit.
+module Generated.KeywordSegments.ValidateCustomType.ReadModelTable (validateCustomTypeQualifiedTable) where
+
+import Data.Text (Text)
+import Keiro.Connection (qualifyTable)
+
+-- The fully-qualified, double-quoted data-table reference.
+validateCustomTypeQualifiedTable :: Text
+validateCustomTypeQualifiedTable = qualifyTable "billing" "validate_custom_type"
diff --git a/test/conformance-keyword-segments/KeywordSegments/ProjectionCatalog/ProjectionCatalogHoles.hs b/test/conformance-keyword-segments/KeywordSegments/ProjectionCatalog/ProjectionCatalogHoles.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-keyword-segments/KeywordSegments/ProjectionCatalog/ProjectionCatalogHoles.hs
@@ -0,0 +1,23 @@
+-- This is a HAND-OWNED hole module. keiro-dsl creates it once and never overwrites it.
+module KeywordSegments.ProjectionCatalog.ProjectionCatalogHoles
+  ( ValidateCustomTypeWriterEvent (..)
+  , applyValidateCustomTypeWriterLive
+  , validateCustomTypeWriterIdempotencyKey
+  , applyValidateCustomTypeWriterReplay
+  , decodeValidateCustomTypeWriterReplay
+  ) where
+
+import Hasql.Transaction qualified as Tx
+import Keiro.Projection.Catalog qualified as Catalog
+import Kiroku.Store.Types (EventId, RecordedEvent (..))
+
+-- Projection owner validate_custom_type_writer (order 10).
+data ValidateCustomTypeWriterEvent = ValidateCustomTypeWriterEvent
+applyValidateCustomTypeWriterLive :: RecordedEvent -> Tx.Transaction ()
+applyValidateCustomTypeWriterLive _recorded = pure ()
+validateCustomTypeWriterIdempotencyKey :: RecordedEvent -> EventId
+validateCustomTypeWriterIdempotencyKey RecordedEvent {eventId} = eventId
+decodeValidateCustomTypeWriterReplay :: RecordedEvent -> Catalog.ReplayDecodeResult ValidateCustomTypeWriterEvent
+decodeValidateCustomTypeWriterReplay _recorded = Catalog.ReplayRelevant ValidateCustomTypeWriterEvent
+applyValidateCustomTypeWriterReplay :: ValidateCustomTypeWriterEvent -> RecordedEvent -> Tx.Transaction ()
+applyValidateCustomTypeWriterReplay _event _recorded = pure ()
diff --git a/test/conformance-keyword-segments/KeywordSegments/ValidateCustomType/ReadModelHoles.hs b/test/conformance-keyword-segments/KeywordSegments/ValidateCustomType/ReadModelHoles.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-keyword-segments/KeywordSegments/ValidateCustomType/ReadModelHoles.hs
@@ -0,0 +1,14 @@
+-- This is a HAND-OWNED hole module. keiro-dsl creates it once and never overwrites it.
+module KeywordSegments.ValidateCustomType.ReadModelHoles
+  ( validateCustomTypeQuery
+  ) where
+
+import Generated.KeywordSegments.ValidateCustomType.ReadModelTable (validateCustomTypeQualifiedTable)
+import Generated.KeywordSegments.ValidateCustomType.QueryContract (ValidateCustomTypeQueryInput, ValidateCustomTypeQueryResult)
+import Hasql.Transaction qualified as Tx
+
+-- HOLE: query "billing"."validate_custom_type" via validateCustomTypeQualifiedTable; never rely on search_path.
+-- The generated QueryContract owns query input/result type identity.
+-- Declared columns:
+validateCustomTypeQuery :: ValidateCustomTypeQueryInput -> Tx.Transaction ValidateCustomTypeQueryResult
+validateCustomTypeQuery _input = validateCustomTypeQualifiedTable `seq` error "HOLE: fill validate_custom_type query"
diff --git a/test/conformance-keyword-segments/Main.hs b/test/conformance-keyword-segments/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-keyword-segments/Main.hs
@@ -0,0 +1,37 @@
+{-# LANGUAGE OverloadedRecordDot #-}
+
+module Main (main) where
+
+import Control.Monad (unless)
+import Generated.KeywordSegments.JobType.Queue (JobTypePayload)
+import Generated.KeywordSegments.JobType.QueueCodec (jobTypeJobCodec, jobTypePayloadCodec)
+import Generated.KeywordSegments.JobType.QueuePolicy (JobTypeOutcome (..), jobOutcomeFor)
+import Generated.KeywordSegments.ValidateCustomType.ReadModel (validateCustomTypeReadModel)
+import Generated.KeywordSegments.ValidateCustomType.ReadModelHarness (readModelFacts, runReadModelFacts)
+import Keiro.Codec (Codec)
+import Keiro.PGMQ.Codec (JobCodec)
+import Keiro.PGMQ.Job (JobOutcome (..), RetryDelay (..))
+import Keiro.ReadModel (ReadModel (..))
+import System.Exit (exitFailure)
+
+main :: IO ()
+main = do
+  factsOk <- runReadModelFacts
+  let recordOk =
+        validateCustomTypeReadModel.name == "keyword-segments-validate-custom-type"
+          && validateCustomTypeReadModel.tableName == "validate_custom_type"
+          && validateCustomTypeReadModel.schema == "billing"
+      policyOk = case jobOutcomeFor StoreFailure of
+        Retry (RetryDelay 1) -> True
+        _ -> False
+      allOk = factsOk && all (\(_, expected, actual) -> expected == actual) readModelFacts && recordOk && policyOk
+  putStrLn ("read-model facts: " <> show factsOk)
+  putStrLn ("runtime record: " <> show recordOk)
+  putStrLn ("queue policy: " <> show policyOk)
+  unless allOk exitFailure
+
+_usesPayloadCodec :: Codec JobTypePayload
+_usesPayloadCodec = jobTypePayloadCodec
+
+_usesJobCodec :: JobCodec JobTypePayload
+_usesJobCodec = jobTypeJobCodec
diff --git a/test/conformance-keyword-segments/keiro-dsl-cabal-fragment.context.keyword-segments.txt b/test/conformance-keyword-segments/keiro-dsl-cabal-fragment.context.keyword-segments.txt
new file mode 100644
--- /dev/null
+++ b/test/conformance-keyword-segments/keiro-dsl-cabal-fragment.context.keyword-segments.txt
@@ -0,0 +1,38 @@
+-- keiro-dsl build manifest for keiro-dsl/test/fixtures/keyword-segments.keiro
+-- Paste the complete fragment below into the consuming Cabal stanza.
+-- The generated layer is overwritten on every scaffold; hole modules are
+-- create-if-absent (filled by hand).
+
+default-language: GHC2024
+default-extensions:
+    DuplicateRecordFields
+    NoFieldSelectors
+    OverloadedRecordDot
+    OverloadedStrings
+
+other-modules:
+    Generated.KeywordSegments.JobType.Queue
+    Generated.KeywordSegments.JobType.QueueCodec
+    Generated.KeywordSegments.JobType.QueuePolicy
+    Generated.KeywordSegments.Nominals
+    Generated.KeywordSegments.Nominals.Internal
+    Generated.KeywordSegments.ProjectionCatalog
+    Generated.KeywordSegments.Structural.NominalLeaves
+    Generated.KeywordSegments.StructuralConformance
+    Generated.KeywordSegments.ValidateCustomType.QueryContract
+    Generated.KeywordSegments.ValidateCustomType.ReadModel
+    Generated.KeywordSegments.ValidateCustomType.ReadModelHarness
+    Generated.KeywordSegments.ValidateCustomType.ReadModelTable
+    KeywordSegments.ProjectionCatalog.ProjectionCatalogHoles
+    KeywordSegments.ValidateCustomType.ReadModelHoles
+
+build-depends:
+    , aeson
+    , base
+    , effectful-core
+    , hasql-transaction
+    , keiro
+    , keiro-core
+    , keiro-pgmq
+    , kiroku-store
+    , text
diff --git a/test/conformance-keyword-segments/keiro-dsl-ledger.context.keyword-segments.txt b/test/conformance-keyword-segments/keiro-dsl-ledger.context.keyword-segments.txt
new file mode 100644
--- /dev/null
+++ b/test/conformance-keyword-segments/keiro-dsl-ledger.context.keyword-segments.txt
@@ -0,0 +1,49 @@
+keiro-dsl scaffold record v1
+spec: keiro-dsl/test/fixtures/keyword-segments.keiro
+module-root: (none)
+layout: prefixed
+source-language {"declaredLanguageVersion":6,"effectiveLanguageVersion":6,"sourceForm":"declared"}
+semantic-contract {"languageSupport":"candidate","languageVersion":6,"runtimeSemantics":"keiro-dsl/runtime-semantics/5"}
+naming-edition idiomatic-v2
+module-role {"family":"StructuralConformance","kind":"generated","ownerKind":"context","ownerName":"context keyword-segments structural conformance","path":"Generated/KeywordSegments/StructuralConformance.hs"}
+module-role {"family":"Nominals","kind":"generated","ownerKind":"context","ownerName":"context keyword-segments generated nominal declarations","path":"Generated/KeywordSegments/Nominals.hs"}
+module-role {"family":"Internal","kind":"generated","ownerKind":"context","ownerName":"context keyword-segments generated nominal ID internals","path":"Generated/KeywordSegments/Nominals/Internal.hs"}
+module-role {"family":"NominalLeaves","kind":"generated","ownerKind":"context","ownerName":"context keyword-segments structural nominal leaves","path":"Generated/KeywordSegments/Structural/NominalLeaves.hs"}
+module-role {"family":"ProjectionCatalog","kind":"generated","ownerKind":"projection-catalog","ownerName":"projection-catalog keyword-segments","path":"Generated/KeywordSegments/ProjectionCatalog.hs"}
+module-role {"family":"ProjectionCatalogHoles","kind":"hole","ownerKind":"projection-catalog","ownerName":"projection-catalog keyword-segments","path":"KeywordSegments/ProjectionCatalog/ProjectionCatalogHoles.hs"}
+module-role {"family":"ReadModelTable","kind":"generated","ownerKind":"readmodel","ownerName":"readmodel validate_custom_type (line 29)","path":"Generated/KeywordSegments/ValidateCustomType/ReadModelTable.hs"}
+module-role {"family":"QueryContract","kind":"generated","ownerKind":"readmodel","ownerName":"readmodel validate_custom_type (line 29)","path":"Generated/KeywordSegments/ValidateCustomType/QueryContract.hs"}
+module-role {"family":"ReadModel","kind":"generated","ownerKind":"readmodel","ownerName":"readmodel validate_custom_type (line 29)","path":"Generated/KeywordSegments/ValidateCustomType/ReadModel.hs"}
+module-role {"family":"ReadModelHoles","kind":"hole","ownerKind":"readmodel","ownerName":"readmodel validate_custom_type (line 29)","path":"KeywordSegments/ValidateCustomType/ReadModelHoles.hs"}
+module-role {"family":"ReadModelHarness","kind":"generated","ownerKind":"readmodel","ownerName":"readmodel validate_custom_type (line 29)","path":"Generated/KeywordSegments/ValidateCustomType/ReadModelHarness.hs"}
+module-role {"family":"Queue","kind":"generated","ownerKind":"workqueue","ownerName":"workqueue job_type (line 40)","path":"Generated/KeywordSegments/JobType/Queue.hs"}
+module-role {"family":"QueuePolicy","kind":"generated","ownerKind":"workqueue","ownerName":"workqueue job_type (line 40)","path":"Generated/KeywordSegments/JobType/QueuePolicy.hs"}
+module-role {"family":"QueueCodec","kind":"generated","ownerKind":"workqueue","ownerName":"workqueue job_type (line 40)","path":"Generated/KeywordSegments/JobType/QueueCodec.hs"}
+generated Generated/KeywordSegments/StructuralConformance.hs
+generated Generated/KeywordSegments/Nominals.hs
+generated Generated/KeywordSegments/Nominals/Internal.hs
+generated Generated/KeywordSegments/Structural/NominalLeaves.hs
+generated Generated/KeywordSegments/ProjectionCatalog.hs
+hole KeywordSegments/ProjectionCatalog/ProjectionCatalogHoles.hs
+generated Generated/KeywordSegments/ValidateCustomType/ReadModelTable.hs
+generated Generated/KeywordSegments/ValidateCustomType/QueryContract.hs
+generated Generated/KeywordSegments/ValidateCustomType/ReadModel.hs
+hole KeywordSegments/ValidateCustomType/ReadModelHoles.hs
+generated Generated/KeywordSegments/ValidateCustomType/ReadModelHarness.hs
+generated Generated/KeywordSegments/JobType/Queue.hs
+generated Generated/KeywordSegments/JobType/QueuePolicy.hs
+generated Generated/KeywordSegments/JobType/QueueCodec.hs
+id-domain id-domain|name=SubscriptionId|contract=keiro-dsl/id-domain/typeid-v7/1|prefix=subscription|separator=_|json=canonical-json-text
+nominal-equality nominal-equality|name=SubscriptionId|contract=keiro-dsl/nominal-equality/2|key=Text|domain=typeid-v7-text:subscription:keiro-dsl/id-domain/typeid-v7/1|owner=generated
+projection-catalog-fact cursor|validate_custom_type|validate-custom-type-writer|29
+projection-catalog-fact delivery|validate_custom_type_writer|subscription|17
+projection-catalog-fact freshness|validate_custom_type|wait-for-head:entire-log|29
+projection-catalog-fact group|validate_custom_type_rebuild|validate_custom_type_table|validate_custom_type_table|12
+projection-catalog-fact owner|validate_custom_type_writer|all|validate_custom_type_rebuild|validate_custom_type_table|10|validate-custom-type-writer|validate-custom-type-writer-v1|from-beginning|explicit|17
+projection-catalog-fact query|validate_custom_type|validate_custom_type_rebuild|validate_custom_type_table|validate_custom_type_table|29
+projection-catalog-fact supply|validate_custom_type|validate_custom_type_writer|validate_custom_type_rebuild|validate_custom_type_table|29|17
+projection-catalog-fact target|validate_custom_type_table|billing|validate_custom_type|clear||6
+query-contract-baseline v1
+query-contract {"mappedDependencies":[],"position":"input","readModel":"validate_custom_type","typeExpression":"SubscriptionId"}
+query-contract {"mappedDependencies":[],"position":"result","readModel":"validate_custom_type","typeExpression":"List SubscriptionId"}
+semantic-impact {"declarations":[],"mappedSurfaceEvidenceVersion":1,"serviceInventory":[]}
diff --git a/test/conformance-mapped-queue/Generated/MappedQueue/MappedJobs/Queue.hs b/test/conformance-mapped-queue/Generated/MappedQueue/MappedJobs/Queue.hs
--- a/test/conformance-mapped-queue/Generated/MappedQueue/MappedJobs/Queue.hs
+++ b/test/conformance-mapped-queue/Generated/MappedQueue/MappedJobs/Queue.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from workqueue mapped_jobs; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from workqueue mapped_jobs; do not edit.
 module Generated.MappedQueue.MappedJobs.Queue
   ( MappedJob (..)
   , encodeMappedJob
diff --git a/test/conformance-mapped-queue/Generated/MappedQueue/MappedJobs/QueueCodec.hs b/test/conformance-mapped-queue/Generated/MappedQueue/MappedJobs/QueueCodec.hs
--- a/test/conformance-mapped-queue/Generated/MappedQueue/MappedJobs/QueueCodec.hs
+++ b/test/conformance-mapped-queue/Generated/MappedQueue/MappedJobs/QueueCodec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from workqueue mapped_jobs; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from workqueue mapped_jobs; do not edit.
 -- | Versioned job payload envelope: @{\"v\",\"t\",\"data\"}@.
 --
 -- Deploy workers before producers when raising its schema version. Do not
diff --git a/test/conformance-mapped-queue/Generated/MappedQueue/MappedJobs/QueuePolicy.hs b/test/conformance-mapped-queue/Generated/MappedQueue/MappedJobs/QueuePolicy.hs
--- a/test/conformance-mapped-queue/Generated/MappedQueue/MappedJobs/QueuePolicy.hs
+++ b/test/conformance-mapped-queue/Generated/MappedQueue/MappedJobs/QueuePolicy.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from workqueue mapped_jobs; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from workqueue mapped_jobs; do not edit.
 module Generated.MappedQueue.MappedJobs.QueuePolicy
   ( MappedJobsOutcome (..)
   , retryPolicy, jobOutcomeFor
diff --git a/test/conformance-mapped-queue/Generated/MappedQueue/Structural/Shape/JobMetadata.hs b/test/conformance-mapped-queue/Generated/MappedQueue/Structural/Shape/JobMetadata.hs
--- a/test/conformance-mapped-queue/Generated/MappedQueue/Structural/Shape/JobMetadata.hs
+++ b/test/conformance-mapped-queue/Generated/MappedQueue/Structural/Shape/JobMetadata.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from mapped structural JobMetadata; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from mapped structural JobMetadata; do not edit.
 module Generated.MappedQueue.Structural.Shape.JobMetadata (JobMetadataShape (..)) where
 
 import Data.Text (Text)
diff --git a/test/conformance-mapped-queue/Generated/MappedQueue/Structural/Shape/JobPayload.hs b/test/conformance-mapped-queue/Generated/MappedQueue/Structural/Shape/JobPayload.hs
--- a/test/conformance-mapped-queue/Generated/MappedQueue/Structural/Shape/JobPayload.hs
+++ b/test/conformance-mapped-queue/Generated/MappedQueue/Structural/Shape/JobPayload.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from mapped structural JobPayload; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from mapped structural JobPayload; do not edit.
 module Generated.MappedQueue.Structural.Shape.JobPayload (JobPayloadShape (..)) where
 
 import Data.Text (Text)
diff --git a/test/conformance-mapped-queue/Generated/MappedQueue/StructuralConformance.hs b/test/conformance-mapped-queue/Generated/MappedQueue/StructuralConformance.hs
--- a/test/conformance-mapped-queue/Generated/MappedQueue/StructuralConformance.hs
+++ b/test/conformance-mapped-queue/Generated/MappedQueue/StructuralConformance.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from context mapped-queue structural conformance; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from context mapped-queue structural conformance; do not edit.
 module Generated.MappedQueue.StructuralConformance
   ( structuralConformanceAssertions
   ) where
diff --git a/test/conformance-mapped-queue/Generated/MappedQueue/StructuralProjections.hs b/test/conformance-mapped-queue/Generated/MappedQueue/StructuralProjections.hs
--- a/test/conformance-mapped-queue/Generated/MappedQueue/StructuralProjections.hs
+++ b/test/conformance-mapped-queue/Generated/MappedQueue/StructuralProjections.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TypeFamilies #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from context mapped-queue mapped structural facade; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from context mapped-queue mapped structural facade; do not edit.
 -- Equality witnesses are emitted for Text, Int, Bool, Natural, and UTCTime.
 -- Nominal ID and enum leaves carry exact canonical-text domains.
 -- Int, Natural, and UTCTime belong to Keiki's ordered subset.
diff --git a/test/conformance-mapped-readmodel/Generated/MappedReadmodel/AccountSummary/QueryContract.hs b/test/conformance-mapped-readmodel/Generated/MappedReadmodel/AccountSummary/QueryContract.hs
--- a/test/conformance-mapped-readmodel/Generated/MappedReadmodel/AccountSummary/QueryContract.hs
+++ b/test/conformance-mapped-readmodel/Generated/MappedReadmodel/AccountSummary/QueryContract.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from readmodel account_summary; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from readmodel account_summary; do not edit.
 module Generated.MappedReadmodel.AccountSummary.QueryContract
   ( AccountSummaryQueryInput
   , AccountSummaryQueryResult
diff --git a/test/conformance-mapped-readmodel/Generated/MappedReadmodel/AccountSummary/ReadModel.hs b/test/conformance-mapped-readmodel/Generated/MappedReadmodel/AccountSummary/ReadModel.hs
--- a/test/conformance-mapped-readmodel/Generated/MappedReadmodel/AccountSummary/ReadModel.hs
+++ b/test/conformance-mapped-readmodel/Generated/MappedReadmodel/AccountSummary/ReadModel.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from readmodel account_summary; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from readmodel account_summary; do not edit.
 module Generated.MappedReadmodel.AccountSummary.ReadModel
   ( accountSummaryReadModel
   , accountSummaryQualifiedTable
diff --git a/test/conformance-mapped-readmodel/Generated/MappedReadmodel/AccountSummary/ReadModelHarness.hs b/test/conformance-mapped-readmodel/Generated/MappedReadmodel/AccountSummary/ReadModelHarness.hs
--- a/test/conformance-mapped-readmodel/Generated/MappedReadmodel/AccountSummary/ReadModelHarness.hs
+++ b/test/conformance-mapped-readmodel/Generated/MappedReadmodel/AccountSummary/ReadModelHarness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from readmodel account_summary; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from readmodel account_summary; do not edit.
 module Generated.MappedReadmodel.AccountSummary.ReadModelHarness (readModelFacts, readModelFactResults, runReadModelFacts, catalogFactsAgainst) where
 
 import Generated.MappedReadmodel.AccountSummary.ReadModel (accountSummaryReadModel)
diff --git a/test/conformance-mapped-readmodel/Generated/MappedReadmodel/AccountSummary/ReadModelTable.hs b/test/conformance-mapped-readmodel/Generated/MappedReadmodel/AccountSummary/ReadModelTable.hs
--- a/test/conformance-mapped-readmodel/Generated/MappedReadmodel/AccountSummary/ReadModelTable.hs
+++ b/test/conformance-mapped-readmodel/Generated/MappedReadmodel/AccountSummary/ReadModelTable.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from readmodel account_summary; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from readmodel account_summary; do not edit.
 module Generated.MappedReadmodel.AccountSummary.ReadModelTable (accountSummaryQualifiedTable) where
 
 import Data.Text (Text)
diff --git a/test/conformance-mapped-readmodel/Generated/MappedReadmodel/ProjectionCatalog.hs b/test/conformance-mapped-readmodel/Generated/MappedReadmodel/ProjectionCatalog.hs
--- a/test/conformance-mapped-readmodel/Generated/MappedReadmodel/ProjectionCatalog.hs
+++ b/test/conformance-mapped-readmodel/Generated/MappedReadmodel/ProjectionCatalog.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from projection-catalog mapped-readmodel; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from projection-catalog mapped-readmodel; do not edit.
 {-# LANGUAGE OverloadedStrings #-}
 module Generated.MappedReadmodel.ProjectionCatalog
   ( projectionCatalog
diff --git a/test/conformance-mapped-readmodel/Generated/MappedReadmodel/Structural/Shape/AccountLookup.hs b/test/conformance-mapped-readmodel/Generated/MappedReadmodel/Structural/Shape/AccountLookup.hs
--- a/test/conformance-mapped-readmodel/Generated/MappedReadmodel/Structural/Shape/AccountLookup.hs
+++ b/test/conformance-mapped-readmodel/Generated/MappedReadmodel/Structural/Shape/AccountLookup.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from mapped structural AccountLookup; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from mapped structural AccountLookup; do not edit.
 module Generated.MappedReadmodel.Structural.Shape.AccountLookup (AccountLookupShape (..)) where
 
 import Data.Text (Text)
diff --git a/test/conformance-mapped-readmodel/Generated/MappedReadmodel/Structural/Shape/AccountProfile.hs b/test/conformance-mapped-readmodel/Generated/MappedReadmodel/Structural/Shape/AccountProfile.hs
--- a/test/conformance-mapped-readmodel/Generated/MappedReadmodel/Structural/Shape/AccountProfile.hs
+++ b/test/conformance-mapped-readmodel/Generated/MappedReadmodel/Structural/Shape/AccountProfile.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from mapped structural AccountProfile; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from mapped structural AccountProfile; do not edit.
 module Generated.MappedReadmodel.Structural.Shape.AccountProfile (AccountProfileShape (..)) where
 
 import Data.Text (Text)
diff --git a/test/conformance-mapped-readmodel/Generated/MappedReadmodel/Structural/Shape/AccountSummary.hs b/test/conformance-mapped-readmodel/Generated/MappedReadmodel/Structural/Shape/AccountSummary.hs
--- a/test/conformance-mapped-readmodel/Generated/MappedReadmodel/Structural/Shape/AccountSummary.hs
+++ b/test/conformance-mapped-readmodel/Generated/MappedReadmodel/Structural/Shape/AccountSummary.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from mapped structural AccountSummary; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from mapped structural AccountSummary; do not edit.
 module Generated.MappedReadmodel.Structural.Shape.AccountSummary (AccountSummaryShape (..)) where
 
 import Data.Text (Text)
diff --git a/test/conformance-mapped-readmodel/Generated/MappedReadmodel/Structural/Shape/TenantKey.hs b/test/conformance-mapped-readmodel/Generated/MappedReadmodel/Structural/Shape/TenantKey.hs
--- a/test/conformance-mapped-readmodel/Generated/MappedReadmodel/Structural/Shape/TenantKey.hs
+++ b/test/conformance-mapped-readmodel/Generated/MappedReadmodel/Structural/Shape/TenantKey.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from mapped structural TenantKey; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from mapped structural TenantKey; do not edit.
 module Generated.MappedReadmodel.Structural.Shape.TenantKey (TenantKeyShape (..)) where
 
 import Data.Text (Text)
diff --git a/test/conformance-mapped-readmodel/Generated/MappedReadmodel/Structural/Shape/UnusedFilter.hs b/test/conformance-mapped-readmodel/Generated/MappedReadmodel/Structural/Shape/UnusedFilter.hs
--- a/test/conformance-mapped-readmodel/Generated/MappedReadmodel/Structural/Shape/UnusedFilter.hs
+++ b/test/conformance-mapped-readmodel/Generated/MappedReadmodel/Structural/Shape/UnusedFilter.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from mapped structural UnusedFilter; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from mapped structural UnusedFilter; do not edit.
 module Generated.MappedReadmodel.Structural.Shape.UnusedFilter (UnusedFilterShape (..)) where
 
 import Data.Text (Text)
diff --git a/test/conformance-mapped-readmodel/Generated/MappedReadmodel/StructuralConformance.hs b/test/conformance-mapped-readmodel/Generated/MappedReadmodel/StructuralConformance.hs
--- a/test/conformance-mapped-readmodel/Generated/MappedReadmodel/StructuralConformance.hs
+++ b/test/conformance-mapped-readmodel/Generated/MappedReadmodel/StructuralConformance.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from context mapped-readmodel structural conformance; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from context mapped-readmodel structural conformance; do not edit.
 module Generated.MappedReadmodel.StructuralConformance
   ( structuralConformanceAssertions
   ) where
diff --git a/test/conformance-mapped-readmodel/Generated/MappedReadmodel/StructuralProjections.hs b/test/conformance-mapped-readmodel/Generated/MappedReadmodel/StructuralProjections.hs
--- a/test/conformance-mapped-readmodel/Generated/MappedReadmodel/StructuralProjections.hs
+++ b/test/conformance-mapped-readmodel/Generated/MappedReadmodel/StructuralProjections.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TypeFamilies #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from context mapped-readmodel mapped structural facade; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from context mapped-readmodel mapped structural facade; do not edit.
 -- Equality witnesses are emitted for Text, Int, Bool, Natural, and UTCTime.
 -- Nominal ID and enum leaves carry exact canonical-text domains.
 -- Int, Natural, and UTCTime belong to Keiki's ordered subset.
diff --git a/test/conformance-mapped-register-construction/Conformance/MappedRegisterConstruction/Bindings.hs b/test/conformance-mapped-register-construction/Conformance/MappedRegisterConstruction/Bindings.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-mapped-register-construction/Conformance/MappedRegisterConstruction/Bindings.hs
@@ -0,0 +1,13 @@
+module Conformance.MappedRegisterConstruction.Bindings (noTime, maybeTimeCases) where
+
+import Conformance.MappedRegisterConstruction.Domain (MaybeTime (..))
+import Data.List.NonEmpty (NonEmpty (..))
+import Data.Time.Calendar (fromGregorian)
+import Data.Time.Clock (UTCTime (..))
+import Keiro.Codec.Structural (FixtureCases (..))
+
+noTime :: MaybeTime
+noTime = MaybeTime Nothing
+
+maybeTimeCases :: FixtureCases MaybeTime
+maybeTimeCases = FixtureCases (("none", noTime) :| [("present", MaybeTime (Just (UTCTime (fromGregorian 2026 10 14) 0)))])
diff --git a/test/conformance-mapped-register-construction/Conformance/MappedRegisterConstruction/Domain.hs b/test/conformance-mapped-register-construction/Conformance/MappedRegisterConstruction/Domain.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-mapped-register-construction/Conformance/MappedRegisterConstruction/Domain.hs
@@ -0,0 +1,20 @@
+{-# LANGUAGE DeriveAnyClass #-}
+{-# LANGUAGE DeriveGeneric #-}
+
+module Conformance.MappedRegisterConstruction.Domain (MaybeTime (..)) where
+
+import Control.DeepSeq (NFData)
+import Data.Aeson (FromJSON, ToJSON)
+import Data.Proxy (Proxy)
+import Data.Text (Text)
+import Data.Time.Clock (UTCTime)
+import GHC.Generics (Generic)
+import Keiki.Shape (CanonicalTypeName (..))
+
+newtype MaybeTime = MaybeTime {timestamp :: Maybe UTCTime}
+  deriving stock (Eq, Show, Generic)
+  deriving anyclass (FromJSON, ToJSON, NFData)
+
+instance CanonicalTypeName MaybeTime where
+  canonicalTypeName :: Proxy MaybeTime -> Text
+  canonicalTypeName _ = "conformance.MaybeTime.v1"
diff --git a/test/conformance-mapped-register-construction/Conformance/MappedRegisterConstruction/Lift.hs b/test/conformance-mapped-register-construction/Conformance/MappedRegisterConstruction/Lift.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-mapped-register-construction/Conformance/MappedRegisterConstruction/Lift.hs
@@ -0,0 +1,17 @@
+module Conformance.MappedRegisterConstruction.Lift (atTime, atTimeCases) where
+
+import Conformance.MappedRegisterConstruction.Domain (MaybeTime (..))
+import Data.List.NonEmpty (NonEmpty (..))
+import Data.Text (Text)
+import Data.Time.Calendar (fromGregorian)
+import Data.Time.Clock (UTCTime (..))
+
+-- Pure and total. Change the declared write-lift version whenever behavior changes.
+atTime :: UTCTime -> MaybeTime
+atTime value = MaybeTime (Just value)
+
+atTimeCases :: NonEmpty (Text, UTCTime, MaybeTime)
+atTimeCases = ("epoch", epoch, MaybeTime (Just epoch)) :| [("later", later, MaybeTime (Just later))]
+  where
+    epoch = UTCTime (fromGregorian 1970 1 1) 0
+    later = UTCTime (fromGregorian 2026 10 14) 12345
diff --git a/test/conformance-mapped-register-construction/Generated/MappedRegisterConstruction/BehaviorSourceMap.hs b/test/conformance-mapped-register-construction/Generated/MappedRegisterConstruction/BehaviorSourceMap.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-mapped-register-construction/Generated/MappedRegisterConstruction/BehaviorSourceMap.hs
@@ -0,0 +1,53 @@
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context mapped-register-construction behavior source map; do not edit.
+module Generated.MappedRegisterConstruction.BehaviorSourceMap
+  ( BehaviorSourceLocation (..)
+  , behaviorSourceLocation
+  , renderBehaviorSourceLocation
+  ) where
+
+import Data.Text (Text)
+import Data.Text qualified as T
+
+data BehaviorSourceLocation = BehaviorSourceLocation
+  { file :: !FilePath
+  , line :: !Int
+  , column :: !Int
+  }
+  deriving stock (Eq, Ord, Show)
+
+behaviorSourceLocation :: Text -> Maybe BehaviorSourceLocation
+behaviorSourceLocation key = case key of
+  "behavior-v1-0cc99c7503ca9831" -> Just (BehaviorSourceLocation "keiro-dsl/test/fixtures/mapped-register-construction.keiro" 47 3)
+  "behavior-v1-1f04e07a5ea312c1" -> Just (BehaviorSourceLocation "keiro-dsl/test/fixtures/mapped-register-construction.keiro" 21 22)
+  "behavior-v1-325f4ed937c478c5" -> Just (BehaviorSourceLocation "keiro-dsl/test/fixtures/mapped-register-construction.keiro" 21 30)
+  "behavior-v1-33fcaede253a4bed" -> Just (BehaviorSourceLocation "keiro-dsl/test/fixtures/mapped-register-construction.keiro" 21 10)
+  "behavior-v1-386bbbf74705f45f" -> Just (BehaviorSourceLocation "keiro-dsl/test/fixtures/mapped-register-construction.keiro" 53 3)
+  "behavior-v1-466916eb8981b08e" -> Just (BehaviorSourceLocation "keiro-dsl/test/fixtures/mapped-register-construction.keiro" 21 22)
+  "behavior-v1-5253e620452fc4cf" -> Just (BehaviorSourceLocation "keiro-dsl/test/fixtures/mapped-register-construction.keiro" 59 3)
+  "behavior-v1-5e7d15bcad88b1ae" -> Just (BehaviorSourceLocation "keiro-dsl/test/fixtures/mapped-register-construction.keiro" 21 10)
+  "behavior-v1-66c78f3ed9bc6b52" -> Just (BehaviorSourceLocation "keiro-dsl/test/fixtures/mapped-register-construction.keiro" 21 22)
+  "behavior-v1-7705536a045d1c60" -> Just (BehaviorSourceLocation "keiro-dsl/test/fixtures/mapped-register-construction.keiro" 68 3)
+  "behavior-v1-88ef8671c7c631bb" -> Just (BehaviorSourceLocation "keiro-dsl/test/fixtures/mapped-register-construction.keiro" 21 10)
+  "behavior-v1-959d3fbbbce2b4e4" -> Just (BehaviorSourceLocation "keiro-dsl/test/fixtures/mapped-register-construction.keiro" 21 30)
+  "behavior-v1-968db04037ee20f0" -> Just (BehaviorSourceLocation "keiro-dsl/test/fixtures/mapped-register-construction.keiro" 21 30)
+  "behavior-v1-994dec94076c02d0" -> Just (BehaviorSourceLocation "keiro-dsl/test/fixtures/mapped-register-construction.keiro" 36 3)
+  "behavior-v1-9b56eeea9fa900fd" -> Just (BehaviorSourceLocation "keiro-dsl/test/fixtures/mapped-register-construction.keiro" 21 16)
+  "behavior-v1-a1419cde22483b02" -> Just (BehaviorSourceLocation "keiro-dsl/test/fixtures/mapped-register-construction.keiro" 21 16)
+  "behavior-v1-a8c781dd6ca46f4b" -> Just (BehaviorSourceLocation "keiro-dsl/test/fixtures/mapped-register-construction.keiro" 21 22)
+  "behavior-v1-b7cc059e78b68a92" -> Just (BehaviorSourceLocation "keiro-dsl/test/fixtures/mapped-register-construction.keiro" 42 3)
+  "behavior-v1-c1dbeb960bc50979" -> Just (BehaviorSourceLocation "keiro-dsl/test/fixtures/mapped-register-construction.keiro" 21 16)
+  "behavior-v1-c8967a7d2e58d904" -> Just (BehaviorSourceLocation "keiro-dsl/test/fixtures/mapped-register-construction.keiro" 21 10)
+  "behavior-v1-cc4529515153ea38" -> Just (BehaviorSourceLocation "keiro-dsl/test/fixtures/mapped-register-construction.keiro" 21 30)
+  "behavior-v1-d87956d864ea179b" -> Just (BehaviorSourceLocation "keiro-dsl/test/fixtures/mapped-register-construction.keiro" 21 30)
+  "behavior-v1-da9ee154eb2f350c" -> Just (BehaviorSourceLocation "keiro-dsl/test/fixtures/mapped-register-construction.keiro" 21 16)
+  "behavior-v1-dddc6f0d9aa7b262" -> Just (BehaviorSourceLocation "keiro-dsl/test/fixtures/mapped-register-construction.keiro" 21 10)
+  "behavior-v1-f2c991f59a1a8e7e" -> Just (BehaviorSourceLocation "keiro-dsl/test/fixtures/mapped-register-construction.keiro" 64 3)
+  _ -> Nothing
+
+renderBehaviorSourceLocation :: Text -> Text
+renderBehaviorSourceLocation key = case behaviorSourceLocation key of
+  Just location -> T.pack location.file <> ":" <> tshow location.line <> ":" <> tshow location.column
+  Nothing -> "<internal invariant: missing behavior source for " <> key <> ">"
+
+tshow :: Show value => value -> Text
+tshow = T.pack . show
diff --git a/test/conformance-mapped-register-construction/Generated/MappedRegisterConstruction/Lifecycle/BehaviorContract.hs b/test/conformance-mapped-register-construction/Generated/MappedRegisterConstruction/Lifecycle/BehaviorContract.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-mapped-register-construction/Generated/MappedRegisterConstruction/Lifecycle/BehaviorContract.hs
@@ -0,0 +1,643 @@
+{-# LANGUAGE OverloadedLabels #-}
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Lifecycle; do not edit.
+module Generated.MappedRegisterConstruction.Lifecycle.BehaviorContract
+  ( BehaviorKey (..)
+  , unBehaviorKey
+  , ObligationKind (..)
+  , EvidenceLevel (..)
+  , GuardCoverage (..)
+  , BehaviorRequirement (..)
+  , RejectionClass (..)
+  , LiveExpectation (..)
+  , BehaviorWitness (..)
+  , BehaviorFailure (..)
+  , BehaviorConformanceReport (..)
+  , behaviorRequirements
+  , behaviorCoverageReport
+  , behaviorObligationReport
+  , behaviorConformancePassed
+  , behaviorConformancePassedWith
+  , renderBehaviorConformanceText
+  ) where
+
+import Generated.MappedRegisterConstruction.Lifecycle.Codec (encodeLifecycleEvent, parseLifecycleEvent, lifecycleCodec)
+import Generated.MappedRegisterConstruction.Lifecycle.Domain
+import Generated.MappedRegisterConstruction.Lifecycle.Transducer (lifecycleTransducer)
+import Generated.MappedRegisterConstruction.BehaviorSourceMap qualified as BehaviorSourceMap
+import Data.Aeson (ToJSON (..), object, (.=))
+import Data.List (sortOn)
+import Data.List.NonEmpty (NonEmpty)
+import Data.List.NonEmpty qualified as NonEmpty
+import Data.Map.Strict qualified as Map
+import Data.Text (Text)
+import Data.Text qualified as T
+import Keiki.Core qualified as K (EdgeMode (..), EdgeRef (..), RegFile, ReplayAttribution (..), ReplayEventSpan (..), ReplaySuccess (..), StepFailure (..), StepSuccess (..), applyEventsDetailedEither, stepDetailedEither, (!))
+import Keiro.Codec qualified as Codec (Codec (eventType), EventType (..))
+
+newtype BehaviorKey = BehaviorKey { unBehaviorKey :: Text }
+  deriving stock (Eq, Ord, Show)
+
+unBehaviorKey :: BehaviorKey -> Text
+unBehaviorKey (BehaviorKey value) = value
+
+data ObligationKind = LiveTransition | RequiredRejection | ReplayTransition
+  deriving stock (Eq, Ord, Show)
+
+data EvidenceLevel = GeneratedAuthoritative | HoleWitnessed | LegacyRuntimeWitness
+  deriving stock (Eq, Ord, Show)
+
+data GuardCoverage = GuardTotal | GuardPartial | GuardUnknown | GuardNotApplicable
+  deriving stock (Eq, Ord, Show)
+
+data BehaviorRequirement = BehaviorRequirement
+  { key :: !BehaviorKey
+  , kind :: !ObligationKind
+  , evidence :: !EvidenceLevel
+  , guardCoverage :: !GuardCoverage
+  , source :: !LifecycleVertex
+  , commandName :: !Text
+  , expectedEdge :: !(Maybe (K.EdgeRef LifecycleVertex))
+  , target :: !(Maybe LifecycleVertex)
+  , eventKinds :: ![Text]
+  }
+  deriving stock (Eq, Show)
+
+data RejectionClass = RejectNoOutgoingEdges | RejectNoMatchingEdge
+  deriving stock (Eq, Show)
+
+data LiveExpectation
+  = Emits (NonEmpty LifecycleEvent)
+  | Rejects RejectionClass
+  | NoOp
+  deriving stock (Eq, Show)
+
+data BehaviorWitness
+  = Pending BehaviorKey
+  | LiveWitness
+      { key :: BehaviorKey
+      , history :: [LifecycleEvent]
+      , command :: LifecycleCommand
+      , expected :: LiveExpectation
+      }
+  | ReplayWitness
+      { key :: BehaviorKey
+      , historyPrefix :: [LifecycleEvent]
+      , observedChunk :: [LifecycleEvent]
+      }
+  deriving stock (Eq, Show)
+
+data BehaviorFailure = BehaviorFailure
+  { key :: !BehaviorKey
+  , subject :: !Text
+  , code :: !Text
+  , detail :: !Text
+  }
+  deriving stock (Eq, Show)
+
+instance ToJSON BehaviorFailure where
+  toJSON behaviorFailure = object
+    [ "key" .= unBehaviorKey behaviorFailure.key
+    , "subject" .= behaviorFailure.subject
+    , "code" .= behaviorFailure.code
+    , "detail" .= behaviorFailure.detail
+    ]
+
+data BehaviorConformanceReport = BehaviorConformanceReport
+  { required :: ![BehaviorKey]
+  , filled :: ![BehaviorKey]
+  , pending :: ![BehaviorKey]
+  , missing :: ![BehaviorKey]
+  , duplicate :: ![BehaviorKey]
+  , stale :: ![BehaviorKey]
+  , failed :: ![BehaviorFailure]
+  , verified :: ![BehaviorKey]
+  , unverified :: ![BehaviorKey]
+  }
+  deriving stock (Eq, Show)
+
+instance ToJSON BehaviorConformanceReport where
+  toJSON report = object
+    [ "schema" .= ("keiro/behavior-conformance/1" :: Text)
+    , "required" .= keyTexts report.required
+    , "filled" .= keyTexts report.filled
+    , "pending" .= keyTexts report.pending
+    , "missing" .= keyTexts report.missing
+    , "duplicate" .= keyTexts report.duplicate
+    , "stale" .= keyTexts report.stale
+    , "failed" .= report.failed
+    , "verified" .= keyTexts report.verified
+    , "unverified" .= keyTexts report.unverified
+    ]
+
+behaviorRequirements :: [BehaviorRequirement]
+behaviorRequirements =
+  [ -- LifecycleDormant x Ping: live transition
+    BehaviorRequirement
+      { key = BehaviorKey "behavior-v1-0cc99c7503ca9831"
+      , kind = LiveTransition
+      , evidence = GeneratedAuthoritative
+      , guardCoverage = GuardUnknown
+      , source = LifecycleDormant
+      , commandName = "Ping"
+      , expectedEdge = (Just (K.EdgeRef LifecycleDormant 0))
+      , target = Just LifecycleAwake
+      , eventKinds = ["Pinged"]
+      }
+  , -- LifecycleDormant x Close: required rejection
+    BehaviorRequirement
+      { key = BehaviorKey "behavior-v1-1f04e07a5ea312c1"
+      , kind = RequiredRejection
+      , evidence = GeneratedAuthoritative
+      , guardCoverage = GuardNotApplicable
+      , source = LifecycleDormant
+      , commandName = "Close"
+      , expectedEdge = Nothing
+      , target = Nothing
+      , eventKinds = []
+      }
+  , -- LifecycleClosed x Mark: required rejection
+    BehaviorRequirement
+      { key = BehaviorKey "behavior-v1-325f4ed937c478c5"
+      , kind = RequiredRejection
+      , evidence = GeneratedAuthoritative
+      , guardCoverage = GuardNotApplicable
+      , source = LifecycleClosed
+      , commandName = "Mark"
+      , expectedEdge = Nothing
+      , target = Nothing
+      , eventKinds = []
+      }
+  , -- LifecycleEmpty x Close: required rejection
+    BehaviorRequirement
+      { key = BehaviorKey "behavior-v1-33fcaede253a4bed"
+      , kind = RequiredRejection
+      , evidence = GeneratedAuthoritative
+      , guardCoverage = GuardNotApplicable
+      , source = LifecycleEmpty
+      , commandName = "Close"
+      , expectedEdge = Nothing
+      , target = Nothing
+      , eventKinds = []
+      }
+  , -- LifecycleDormant x Ping: live transition
+    BehaviorRequirement
+      { key = BehaviorKey "behavior-v1-386bbbf74705f45f"
+      , kind = LiveTransition
+      , evidence = GeneratedAuthoritative
+      , guardCoverage = GuardUnknown
+      , source = LifecycleDormant
+      , commandName = "Ping"
+      , expectedEdge = (Just (K.EdgeRef LifecycleDormant 1))
+      , target = Just LifecycleDormant
+      , eventKinds = ["Pinged"]
+      }
+  , -- LifecycleDormant x Mark: required rejection
+    BehaviorRequirement
+      { key = BehaviorKey "behavior-v1-466916eb8981b08e"
+      , kind = RequiredRejection
+      , evidence = GeneratedAuthoritative
+      , guardCoverage = GuardNotApplicable
+      , source = LifecycleDormant
+      , commandName = "Mark"
+      , expectedEdge = Nothing
+      , target = Nothing
+      , eventKinds = []
+      }
+  , -- LifecycleDormant x Awaken: live transition
+    BehaviorRequirement
+      { key = BehaviorKey "behavior-v1-5253e620452fc4cf"
+      , kind = LiveTransition
+      , evidence = GeneratedAuthoritative
+      , guardCoverage = GuardTotal
+      , source = LifecycleDormant
+      , commandName = "Awaken"
+      , expectedEdge = (Just (K.EdgeRef LifecycleDormant 2))
+      , target = Just LifecycleAwake
+      , eventKinds = ["Awakened"]
+      }
+  , -- LifecycleEmpty x Reopen: required rejection
+    BehaviorRequirement
+      { key = BehaviorKey "behavior-v1-5e7d15bcad88b1ae"
+      , kind = RequiredRejection
+      , evidence = GeneratedAuthoritative
+      , guardCoverage = GuardNotApplicable
+      , source = LifecycleEmpty
+      , commandName = "Reopen"
+      , expectedEdge = Nothing
+      , target = Nothing
+      , eventKinds = []
+      }
+  , -- LifecycleDormant x Reopen: required rejection
+    BehaviorRequirement
+      { key = BehaviorKey "behavior-v1-66c78f3ed9bc6b52"
+      , kind = RequiredRejection
+      , evidence = GeneratedAuthoritative
+      , guardCoverage = GuardNotApplicable
+      , source = LifecycleDormant
+      , commandName = "Reopen"
+      , expectedEdge = Nothing
+      , target = Nothing
+      , eventKinds = []
+      }
+  , -- LifecycleClosed x Reopen: live transition
+    BehaviorRequirement
+      { key = BehaviorKey "behavior-v1-7705536a045d1c60"
+      , kind = LiveTransition
+      , evidence = GeneratedAuthoritative
+      , guardCoverage = GuardTotal
+      , source = LifecycleClosed
+      , commandName = "Reopen"
+      , expectedEdge = (Just (K.EdgeRef LifecycleClosed 0))
+      , target = Just LifecycleAwake
+      , eventKinds = ["Reopened"]
+      }
+  , -- LifecycleEmpty x Ping: required rejection
+    BehaviorRequirement
+      { key = BehaviorKey "behavior-v1-88ef8671c7c631bb"
+      , kind = RequiredRejection
+      , evidence = GeneratedAuthoritative
+      , guardCoverage = GuardNotApplicable
+      , source = LifecycleEmpty
+      , commandName = "Ping"
+      , expectedEdge = Nothing
+      , target = Nothing
+      , eventKinds = []
+      }
+  , -- LifecycleClosed x Ping: required rejection
+    BehaviorRequirement
+      { key = BehaviorKey "behavior-v1-959d3fbbbce2b4e4"
+      , kind = RequiredRejection
+      , evidence = GeneratedAuthoritative
+      , guardCoverage = GuardNotApplicable
+      , source = LifecycleClosed
+      , commandName = "Ping"
+      , expectedEdge = Nothing
+      , target = Nothing
+      , eventKinds = []
+      }
+  , -- LifecycleClosed x Close: required rejection
+    BehaviorRequirement
+      { key = BehaviorKey "behavior-v1-968db04037ee20f0"
+      , kind = RequiredRejection
+      , evidence = GeneratedAuthoritative
+      , guardCoverage = GuardNotApplicable
+      , source = LifecycleClosed
+      , commandName = "Close"
+      , expectedEdge = Nothing
+      , target = Nothing
+      , eventKinds = []
+      }
+  , -- LifecycleEmpty x Create: live transition
+    BehaviorRequirement
+      { key = BehaviorKey "behavior-v1-994dec94076c02d0"
+      , kind = LiveTransition
+      , evidence = GeneratedAuthoritative
+      , guardCoverage = GuardTotal
+      , source = LifecycleEmpty
+      , commandName = "Create"
+      , expectedEdge = (Just (K.EdgeRef LifecycleEmpty 0))
+      , target = Just LifecycleAwake
+      , eventKinds = ["Created"]
+      }
+  , -- LifecycleAwake x Ping: required rejection
+    BehaviorRequirement
+      { key = BehaviorKey "behavior-v1-9b56eeea9fa900fd"
+      , kind = RequiredRejection
+      , evidence = GeneratedAuthoritative
+      , guardCoverage = GuardNotApplicable
+      , source = LifecycleAwake
+      , commandName = "Ping"
+      , expectedEdge = Nothing
+      , target = Nothing
+      , eventKinds = []
+      }
+  , -- LifecycleAwake x Awaken: required rejection
+    BehaviorRequirement
+      { key = BehaviorKey "behavior-v1-a1419cde22483b02"
+      , kind = RequiredRejection
+      , evidence = GeneratedAuthoritative
+      , guardCoverage = GuardNotApplicable
+      , source = LifecycleAwake
+      , commandName = "Awaken"
+      , expectedEdge = Nothing
+      , target = Nothing
+      , eventKinds = []
+      }
+  , -- LifecycleDormant x Create: required rejection
+    BehaviorRequirement
+      { key = BehaviorKey "behavior-v1-a8c781dd6ca46f4b"
+      , kind = RequiredRejection
+      , evidence = GeneratedAuthoritative
+      , guardCoverage = GuardNotApplicable
+      , source = LifecycleDormant
+      , commandName = "Create"
+      , expectedEdge = Nothing
+      , target = Nothing
+      , eventKinds = []
+      }
+  , -- LifecycleAwake x Mark: live transition
+    BehaviorRequirement
+      { key = BehaviorKey "behavior-v1-b7cc059e78b68a92"
+      , kind = LiveTransition
+      , evidence = GeneratedAuthoritative
+      , guardCoverage = GuardTotal
+      , source = LifecycleAwake
+      , commandName = "Mark"
+      , expectedEdge = (Just (K.EdgeRef LifecycleAwake 0))
+      , target = Just LifecycleDormant
+      , eventKinds = ["Marked"]
+      }
+  , -- LifecycleAwake x Create: required rejection
+    BehaviorRequirement
+      { key = BehaviorKey "behavior-v1-c1dbeb960bc50979"
+      , kind = RequiredRejection
+      , evidence = GeneratedAuthoritative
+      , guardCoverage = GuardNotApplicable
+      , source = LifecycleAwake
+      , commandName = "Create"
+      , expectedEdge = Nothing
+      , target = Nothing
+      , eventKinds = []
+      }
+  , -- LifecycleEmpty x Awaken: required rejection
+    BehaviorRequirement
+      { key = BehaviorKey "behavior-v1-c8967a7d2e58d904"
+      , kind = RequiredRejection
+      , evidence = GeneratedAuthoritative
+      , guardCoverage = GuardNotApplicable
+      , source = LifecycleEmpty
+      , commandName = "Awaken"
+      , expectedEdge = Nothing
+      , target = Nothing
+      , eventKinds = []
+      }
+  , -- LifecycleClosed x Create: required rejection
+    BehaviorRequirement
+      { key = BehaviorKey "behavior-v1-cc4529515153ea38"
+      , kind = RequiredRejection
+      , evidence = GeneratedAuthoritative
+      , guardCoverage = GuardNotApplicable
+      , source = LifecycleClosed
+      , commandName = "Create"
+      , expectedEdge = Nothing
+      , target = Nothing
+      , eventKinds = []
+      }
+  , -- LifecycleClosed x Awaken: required rejection
+    BehaviorRequirement
+      { key = BehaviorKey "behavior-v1-d87956d864ea179b"
+      , kind = RequiredRejection
+      , evidence = GeneratedAuthoritative
+      , guardCoverage = GuardNotApplicable
+      , source = LifecycleClosed
+      , commandName = "Awaken"
+      , expectedEdge = Nothing
+      , target = Nothing
+      , eventKinds = []
+      }
+  , -- LifecycleAwake x Reopen: required rejection
+    BehaviorRequirement
+      { key = BehaviorKey "behavior-v1-da9ee154eb2f350c"
+      , kind = RequiredRejection
+      , evidence = GeneratedAuthoritative
+      , guardCoverage = GuardNotApplicable
+      , source = LifecycleAwake
+      , commandName = "Reopen"
+      , expectedEdge = Nothing
+      , target = Nothing
+      , eventKinds = []
+      }
+  , -- LifecycleEmpty x Mark: required rejection
+    BehaviorRequirement
+      { key = BehaviorKey "behavior-v1-dddc6f0d9aa7b262"
+      , kind = RequiredRejection
+      , evidence = GeneratedAuthoritative
+      , guardCoverage = GuardNotApplicable
+      , source = LifecycleEmpty
+      , commandName = "Mark"
+      , expectedEdge = Nothing
+      , target = Nothing
+      , eventKinds = []
+      }
+  , -- LifecycleAwake x Close: live transition
+    BehaviorRequirement
+      { key = BehaviorKey "behavior-v1-f2c991f59a1a8e7e"
+      , kind = LiveTransition
+      , evidence = GeneratedAuthoritative
+      , guardCoverage = GuardTotal
+      , source = LifecycleAwake
+      , commandName = "Close"
+      , expectedEdge = (Just (K.EdgeRef LifecycleAwake 1))
+      , target = Just LifecycleClosed
+      , eventKinds = ["ClosedEvent"]
+      }
+  ]
+
+behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
+  BehaviorConformanceReport
+    { required = sortedKeys (Map.keys requiredByKey)
+    , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
+    , pending = sortedKeys [key | (key, rows) <- Map.toList witnessGroups, Map.member key requiredByKey, any isPending rows]
+    , missing = sortedKeys [key | key <- Map.keys requiredByKey, Map.notMember key witnessGroups]
+    , duplicate = sortedKeys [key | (key, rows) <- Map.toList witnessGroups, length rows > 1]
+    , stale = sortedKeys [key | key <- Map.keys witnessGroups, Map.notMember key requiredByKey]
+    , failed = sortOn (unBehaviorKey . (.key)) failures
+    , verified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, proofStrength requirement]
+    , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
+    }
+ where
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
+  witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
+  executions =
+    [ (requirement, runWitness requirement witness)
+    | (key, [witness]) <- Map.toList witnessGroups
+    , not (isPending witness)
+    , Just requirement <- [Map.lookup key requiredByKey]
+    ]
+  failures = [behaviorFailure | (_, Left behaviorFailure) <- executions]
+
+behaviorConformancePassed :: BehaviorConformanceReport -> Bool
+behaviorConformancePassed = behaviorConformancePassedWith False
+
+behaviorConformancePassedWith :: Bool -> BehaviorConformanceReport -> Bool
+behaviorConformancePassedWith failOnUnverified report =
+  null report.pending
+    && null report.missing
+    && null report.duplicate
+    && null report.stale
+    && null report.failed
+    && (not failOnUnverified || null report.unverified)
+
+renderBehaviorConformanceText :: BehaviorConformanceReport -> Text
+renderBehaviorConformanceText report = T.unlines
+  [ "behavior conformance: Lifecycle"
+  , "schema: keiro/behavior-conformance/1"
+  , countLine "required" report.required
+  , countLine "filled" report.filled
+  , countLine "pending" report.pending
+  , countLine "missing" report.missing
+  , countLine "duplicate" report.duplicate
+  , countLine "stale" report.stale
+  , "failed: " <> tshow (length report.failed)
+  , countLine "verified" report.verified
+  , countLine "unverified" report.unverified
+  ] <> T.unlines ["FAIL " <> unBehaviorKey behaviorFailure.key <> " " <> behaviorFailure.subject <> " [" <> behaviorFailure.code <> "] " <> behaviorFailure.detail | behaviorFailure <- report.failed]
+
+runWitness :: BehaviorRequirement -> BehaviorWitness -> Either BehaviorFailure ()
+runWitness requirement witness = case witness of
+  Pending _ -> failure requirement "pending" "witness is still Pending"
+  LiveWitness _ history command expectation -> runLive requirement history command expectation
+  ReplayWitness _ prefix chunk -> runReplay requirement prefix chunk
+
+runLive :: BehaviorRequirement -> [LifecycleEvent] -> LifecycleCommand -> LiveExpectation -> Either BehaviorFailure ()
+runLive requirement history command expectation = do
+  settled <- settleHistory requirement "history" history
+  ensure requirement (K.replaySuccessState settled == requirement.source) "history-wrong-source" "history does not settle at the required source vertex"
+  ensure requirement (commandKind command == requirement.commandName) "command-mismatch" "witness command constructor does not match the required state/command cell"
+  case requirement.kind of
+    ReplayTransition -> failure requirement "witness-kind" "a replay-only requirement needs ReplayWitness"
+    RequiredRejection -> runRejection requirement (K.replaySuccessState settled, K.replaySuccessRegs settled) command expectation
+    LiveTransition -> runAcceptance requirement (K.replaySuccessState settled, K.replaySuccessRegs settled) command expectation
+
+runRejection :: BehaviorRequirement -> (LifecycleVertex, K.RegFile LifecycleRegs) -> LifecycleCommand -> LiveExpectation -> Either BehaviorFailure ()
+runRejection requirement seed command expectation = case expectation of
+  Emits _ -> failure requirement "expectation-kind" "a rejection requirement cannot expect emitted events"
+  NoOp -> failure requirement "expectation-kind" "a rejection requirement cannot expect an accepted no-op"
+  Rejects expectedClass -> case K.stepDetailedEither lifecycleTransducer seed command of
+    Left K.NoOutgoingEdges {} -> ensure requirement (expectedClass == RejectNoOutgoingEdges) "rejection-class" "expected NoMatchingEdge but runtime returned NoOutgoingEdges"
+    Left K.NoMatchingEdge {} -> ensure requirement (expectedClass == RejectNoMatchingEdge) "rejection-class" "expected NoOutgoingEdges but runtime returned NoMatchingEdge"
+    Left K.AmbiguousEdges {} -> failure requirement "ambiguous-edges" "AmbiguousEdges can never satisfy a rejection witness"
+    Right _ -> failure requirement "unexpected-acceptance" "runtime accepted a command required to reject"
+
+runAcceptance :: BehaviorRequirement -> (LifecycleVertex, K.RegFile LifecycleRegs) -> LifecycleCommand -> LiveExpectation -> Either BehaviorFailure ()
+runAcceptance requirement seed command expectation = case expectation of
+  Rejects _ -> failure requirement "expectation-kind" "a live-transition requirement needs Emits or NoOp"
+  NoOp -> case K.stepDetailedEither lifecycleTransducer seed command of
+    Left stepFailure -> failure requirement "unexpected-rejection" (tshow stepFailure)
+    Right success -> do
+      checkAcceptedEnvelope requirement success
+      ensure requirement (null (K.stepSuccessOutputs success)) "noop-emitted" "NoOp emitted one or more events"
+      ensure requirement (K.stepSuccessState success == fst seed) "noop-vertex-change" "NoOp changed the control vertex"
+      ensure requirement (regsEqual (K.stepSuccessRegs success) (snd seed)) "noop-register-change" "NoOp changed one or more registers"
+  Emits expectedEvents -> case K.stepDetailedEither lifecycleTransducer seed command of
+    Left stepFailure -> failure requirement "unexpected-rejection" (tshow stepFailure)
+    Right success -> do
+      checkAcceptedEnvelope requirement success
+      let expected = NonEmpty.toList expectedEvents
+          actual = K.stepSuccessOutputs success
+      ensure requirement (actual == expected) "event-value-mismatch" ("runtime event values differ from the exact witness expectation; actual=" <> tshow actual <> " expected=" <> tshow expected)
+      ensure requirement (map eventKind actual == requirement.eventKinds) "event-envelope-mismatch" ("runtime event kinds differ from the declared ordered envelope; actual=" <> tshow (map eventKind actual) <> " expected=" <> tshow requirement.eventKinds)
+      decoded <- either (failure requirement "emitted-codec-decode") Right (decodeEvents actual)
+      replayed <- case K.applyEventsDetailedEither lifecycleTransducer seed decoded of
+        Left replayFailure -> failure requirement "emitted-replay-failed" (tshow replayFailure)
+        Right replaySuccess -> Right replaySuccess
+      ensure requirement (K.replaySuccessState replayed == K.stepSuccessState success) "forward-replay-vertex" "decoded emissions replay to a different vertex"
+      ensure requirement (regsEqual (K.replaySuccessRegs replayed) (K.stepSuccessRegs success)) "forward-replay-registers" "decoded emissions replay to different registers"
+      checkSingleAttribution requirement K.Live (length decoded) (K.replaySuccessTrace replayed)
+
+checkAcceptedEnvelope :: BehaviorRequirement -> K.StepSuccess LifecycleRegs LifecycleVertex LifecycleEvent -> Either BehaviorFailure ()
+checkAcceptedEnvelope requirement success = do
+  ensure requirement (K.stepSuccessMode success == K.Live) "forward-mode" ("forward execution selected a non-live edge; actual=" <> tshow (K.stepSuccessMode success) <> " expected=" <> tshow K.Live)
+  ensure requirement (Just (K.stepSuccessEdge success) == requirement.expectedEdge) "edge-attribution" ("runtime selected a different guarded sibling; actual=" <> tshow (Just (K.stepSuccessEdge success)) <> " expected=" <> tshow requirement.expectedEdge)
+  ensure requirement (Just (K.stepSuccessState success) == requirement.target) "target-mismatch" ("runtime reached a different target vertex; actual=" <> tshow (Just (K.stepSuccessState success)) <> " expected=" <> tshow requirement.target)
+
+runReplay :: BehaviorRequirement -> [LifecycleEvent] -> [LifecycleEvent] -> Either BehaviorFailure ()
+runReplay requirement prefix chunk = case requirement.kind of
+  ReplayTransition -> do
+    settled <- settleHistory requirement "history-prefix" prefix
+    ensure requirement (K.replaySuccessState settled == requirement.source) "history-wrong-source" "history prefix does not settle at the replay edge source"
+    ensure requirement (not (null chunk)) "empty-replay-chunk" "a replay-only edge has no observable empty chunk"
+    decoded <- either (failure requirement "replay-chunk-codec-decode") Right (decodeEvents chunk)
+    replayed <- case K.applyEventsDetailedEither lifecycleTransducer (K.replaySuccessState settled, K.replaySuccessRegs settled) decoded of
+      Left replayFailure -> failure requirement "replay-chunk-failed" (tshow replayFailure)
+      Right replaySuccess -> Right replaySuccess
+    ensure requirement (Just (K.replaySuccessState replayed) == requirement.target) "target-mismatch" ("replay chunk reached a different target vertex; actual=" <> tshow (Just (K.replaySuccessState replayed)) <> " expected=" <> tshow requirement.target)
+    checkSingleAttribution requirement K.ReplayOnly (length decoded) (K.replaySuccessTrace replayed)
+  _ -> failure requirement "witness-kind" "ReplayWitness supplied for a non-replay requirement"
+
+checkSingleAttribution :: BehaviorRequirement -> K.EdgeMode -> Int -> [K.ReplayAttribution LifecycleVertex] -> Either BehaviorFailure ()
+checkSingleAttribution requirement expectedMode eventCount trace = case trace of
+  [attribution] -> do
+    ensure requirement (Just (K.replayAttributionEdge attribution) == requirement.expectedEdge) "replay-edge-attribution" ("replay selected a different edge; actual=" <> tshow (Just (K.replayAttributionEdge attribution)) <> " expected=" <> tshow requirement.expectedEdge)
+    ensure requirement (K.replayAttributionMode attribution == expectedMode) "replay-mode-attribution" ("replay selected the wrong live/replay-only phase; actual=" <> tshow (K.replayAttributionMode attribution) <> " expected=" <> tshow expectedMode)
+    ensure requirement (K.replayAttributionSource attribution == requirement.source) "replay-source-attribution" ("replay attribution starts at the wrong source; actual=" <> tshow (K.replayAttributionSource attribution) <> " expected=" <> tshow requirement.source)
+    ensure requirement (Just (K.replayAttributionTarget attribution) == requirement.target) "replay-target-attribution" ("replay attribution ends at the wrong target; actual=" <> tshow (Just (K.replayAttributionTarget attribution)) <> " expected=" <> tshow requirement.target)
+    ensure requirement (K.replayAttributionSpan attribution == K.ReplayEventSpan 0 eventCount) "replay-span-attribution" ("replay attribution did not consume the exact chunk; actual=" <> tshow (K.replayAttributionSpan attribution) <> " expected=" <> tshow (K.ReplayEventSpan 0 eventCount))
+  _ -> failure requirement "replay-trace-cardinality" "expected exactly one completed-edge attribution"
+
+settleHistory :: BehaviorRequirement -> Text -> [LifecycleEvent] -> Either BehaviorFailure (K.ReplaySuccess LifecycleRegs LifecycleVertex)
+settleHistory requirement label history = do
+  decoded <- either (failure requirement (label <> "-codec-decode")) Right (decodeEvents history)
+  case K.applyEventsDetailedEither lifecycleTransducer (LifecycleEmpty, initialLifecycleRegs) decoded of
+    Left replayFailure -> failure requirement (label <> "-replay-failed") (tshow replayFailure)
+    Right replaySuccess -> Right replaySuccess
+
+decodeEvents :: [LifecycleEvent] -> Either Text [LifecycleEvent]
+decodeEvents = traverse (\event -> parseLifecycleEvent (Codec.eventType lifecycleCodec event) (encodeLifecycleEvent event))
+
+commandKind :: LifecycleCommand -> Text
+commandKind command = case command of
+  Create _ -> "Create"
+  Mark _ -> "Mark"
+  Ping _ -> "Ping"
+  Awaken _ -> "Awaken"
+  Close _ -> "Close"
+  Reopen _ -> "Reopen"
+
+eventKind :: LifecycleEvent -> Text
+eventKind event = case Codec.eventType lifecycleCodec event of Codec.EventType tag -> tag
+
+regsEqual :: K.RegFile LifecycleRegs -> K.RegFile LifecycleRegs -> Bool
+regsEqual left right = (left K.! #dormantSince) == (right K.! #dormantSince) && (left K.! #automatic) == (right K.! #automatic)
+
+proofStrength :: BehaviorRequirement -> Bool
+proofStrength requirement =
+  requirement.evidence == GeneratedAuthoritative
+    && requirement.guardCoverage `elem` [GuardTotal, GuardNotApplicable]
+
+behaviorWitnessKey :: BehaviorWitness -> BehaviorKey
+behaviorWitnessKey witness = case witness of
+  Pending key -> key
+  LiveWitness { key = key } -> key
+  ReplayWitness { key = key } -> key
+
+isPending :: BehaviorWitness -> Bool
+isPending Pending {} = True
+isPending _ = False
+
+ensure :: BehaviorRequirement -> Bool -> Text -> Text -> Either BehaviorFailure ()
+ensure requirement condition code detail = if condition then Right () else failure requirement code detail
+failure :: BehaviorRequirement -> Text -> Text -> Either BehaviorFailure failed
+failure requirement code detail =
+  Left
+    ( BehaviorFailure
+        requirement.key
+        (tshow requirement.source <> " x " <> requirement.commandName <> ": " <> kindPhrase <> " (" <> BehaviorSourceMap.renderBehaviorSourceLocation (unBehaviorKey requirement.key) <> ")")
+        code
+        detail
+    )
+ where
+  kindPhrase = case requirement.kind of
+    LiveTransition -> "live transition"
+    RequiredRejection -> "required rejection"
+    ReplayTransition -> "replay-only transition"
+sortedKeys :: [BehaviorKey] -> [BehaviorKey]
+sortedKeys = sortOn unBehaviorKey
+keyTexts :: [BehaviorKey] -> [Text]
+keyTexts = map unBehaviorKey
+countLine :: Text -> [BehaviorKey] -> Text
+countLine label values = label <> ": " <> tshow (length values)
+tshow :: Show value => value -> Text
+tshow = T.pack . show
diff --git a/test/conformance-mapped-register-construction/Generated/MappedRegisterConstruction/Lifecycle/Codec.hs b/test/conformance-mapped-register-construction/Generated/MappedRegisterConstruction/Lifecycle/Codec.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-mapped-register-construction/Generated/MappedRegisterConstruction/Lifecycle/Codec.hs
@@ -0,0 +1,119 @@
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Lifecycle; do not edit.
+module Generated.MappedRegisterConstruction.Lifecycle.Codec (
+    lifecycleCodec,
+    parseLifecycleEvent,
+    encodeLifecycleEvent,
+) where
+
+import Generated.MappedRegisterConstruction.Lifecycle.Domain
+import Data.Aeson (Value, object, withObject, (.:), (.=))
+import Data.Aeson.Types (parseEither)
+import Data.List.NonEmpty (NonEmpty (..))
+import Data.List.NonEmpty qualified as NonEmpty
+import Data.Text (Text)
+import qualified Data.Text as T
+import Keiro.Codec (Codec (..), EventType (..))
+
+
+
+
+
+lifecycleEventTypes :: NonEmpty EventType
+lifecycleEventTypes = EventType "Created" :| [EventType "Marked", EventType "Pinged", EventType "Awakened", EventType "ClosedEvent", EventType "Reopened"]
+
+lifecycleCodec :: Codec LifecycleEvent
+lifecycleCodec =
+  Codec
+    { eventTypes = lifecycleEventTypes
+    , eventType = \case
+        Created{} -> EventType "Created"
+        Marked{} -> EventType "Marked"
+        Pinged{} -> EventType "Pinged"
+        Awakened{} -> EventType "Awakened"
+        ClosedEvent{} -> EventType "ClosedEvent"
+        Reopened{} -> EventType "Reopened"
+    , schemaVersion = 1
+    , encode = encodeLifecycleEvent
+    , decode = parseLifecycleEvent
+    , upcasters = []
+    }
+
+encodeLifecycleEvent :: LifecycleEvent -> Value
+encodeLifecycleEvent = \case
+  Created payload ->
+    object
+      [ "kind" .= ("Created" :: Text)
+      , "automatic" .= payload.automatic
+      ]
+  Marked payload ->
+    object
+      [ "kind" .= ("Marked" :: Text)
+      , "markedAt" .= payload.markedAt
+      ]
+  Pinged payload ->
+    object
+      [ "kind" .= ("Pinged" :: Text)
+      , "markedAt" .= payload.markedAt
+      ]
+  Awakened payload ->
+    object
+      [ "kind" .= ("Awakened" :: Text)
+      , "awakenedAt" .= payload.awakenedAt
+      ]
+  ClosedEvent payload ->
+    object
+      [ "kind" .= ("ClosedEvent" :: Text)
+      , "closedAt" .= payload.closedAt
+      ]
+  Reopened payload ->
+    object
+      [ "kind" .= ("Reopened" :: Text)
+      , "reopenedAt" .= payload.reopenedAt
+      ]
+
+parseLifecycleEvent :: EventType -> Value -> Either Text LifecycleEvent
+parseLifecycleEvent (EventType tag) = mapLeftText . parseEither (withObject "LifecycleEvent" go)
+  where
+    go o = do
+      case tag of
+        "Created" ->
+          Created
+            <$> ( CreatedData
+                    <$> o .: "automatic"
+                )
+        "Marked" ->
+          Marked
+            <$> ( MarkedData
+                    <$> o .: "markedAt"
+                )
+        "Pinged" ->
+          Pinged
+            <$> ( PingedData
+                    <$> o .: "markedAt"
+                )
+        "Awakened" ->
+          Awakened
+            <$> ( AwakenedData
+                    <$> o .: "awakenedAt"
+                )
+        "ClosedEvent" ->
+          ClosedEvent
+            <$> ( ClosedEventData
+                    <$> o .: "closedAt"
+                )
+        "Reopened" ->
+          Reopened
+            <$> ( ReopenedData
+                    <$> o .: "reopenedAt"
+                )
+        _ -> fail ("unknown event type " <> show tag <> "; expected one of: " <> renderExpectedEventTypes lifecycleEventTypes)
+
+mapLeftText :: Either String b -> Either Text b
+mapLeftText = either (Left . T.pack) Right
+
+renderExpectedEventTypes :: NonEmpty EventType -> String
+renderExpectedEventTypes =
+  T.unpack
+    . T.intercalate ", "
+    . map (\(EventType eventTypeName) -> eventTypeName)
+    . NonEmpty.toList
diff --git a/test/conformance-mapped-register-construction/Generated/MappedRegisterConstruction/Lifecycle/Domain.hs b/test/conformance-mapped-register-construction/Generated/MappedRegisterConstruction/Lifecycle/Domain.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-mapped-register-construction/Generated/MappedRegisterConstruction/Lifecycle/Domain.hs
@@ -0,0 +1,112 @@
+{-# LANGUAGE DeriveAnyClass #-}
+{-# LANGUAGE TemplateHaskell #-}
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Lifecycle; do not edit.
+module Generated.MappedRegisterConstruction.Lifecycle.Domain where
+
+import Data.Aeson (FromJSON, ToJSON)
+import Data.Proxy (Proxy (..))
+import GHC.Generics (Generic)
+import Keiki.Core (RegFile (..))
+import Keiki.Shape (CanonicalStateShape, CanonicalTypeName)
+import Data.Time.Clock (UTCTime)
+import Conformance.MappedRegisterConstruction.Bindings qualified as Bindings
+import Conformance.MappedRegisterConstruction.Domain (MaybeTime)
+import Keiki.Generics.TH (deriveAggregateCtorsAll, deriveWireCtorsAll)
+
+data LifecycleVertex = LifecycleEmpty | LifecycleAwake | LifecycleDormant | LifecycleClosed
+  deriving stock (Generic, Eq, Ord, Show, Enum, Bounded)
+  deriving anyclass (ToJSON, FromJSON)
+instance CanonicalStateShape LifecycleVertex
+instance CanonicalTypeName LifecycleVertex
+
+data CreateData = CreateData
+  { automatic :: !Bool
+  }
+  deriving stock (Generic, Eq, Show)
+
+data MarkData = MarkData
+  { markedAt :: !UTCTime
+  }
+  deriving stock (Generic, Eq, Show)
+
+data PingData = PingData
+  { markedAt :: !UTCTime
+  }
+  deriving stock (Generic, Eq, Show)
+
+data AwakenData = AwakenData
+  { awakenedAt :: !UTCTime
+  }
+  deriving stock (Generic, Eq, Show)
+
+data CloseData = CloseData
+  { closedAt :: !UTCTime
+  }
+  deriving stock (Generic, Eq, Show)
+
+data ReopenData = ReopenData
+  { reopenedAt :: !UTCTime
+  }
+  deriving stock (Generic, Eq, Show)
+
+data LifecycleCommand = Create !CreateData
+  | Mark !MarkData
+  | Ping !PingData
+  | Awaken !AwakenData
+  | Close !CloseData
+  | Reopen !ReopenData
+  deriving stock (Generic, Eq, Show)
+
+data CreatedData = CreatedData
+  { automatic :: !Bool
+  }
+  deriving stock (Generic, Eq, Show)
+
+data MarkedData = MarkedData
+  { markedAt :: !UTCTime
+  }
+  deriving stock (Generic, Eq, Show)
+
+data PingedData = PingedData
+  { markedAt :: !UTCTime
+  }
+  deriving stock (Generic, Eq, Show)
+
+data AwakenedData = AwakenedData
+  { awakenedAt :: !UTCTime
+  }
+  deriving stock (Generic, Eq, Show)
+
+data ClosedEventData = ClosedEventData
+  { closedAt :: !UTCTime
+  }
+  deriving stock (Generic, Eq, Show)
+
+data ReopenedData = ReopenedData
+  { reopenedAt :: !UTCTime
+  }
+  deriving stock (Generic, Eq, Show)
+
+data LifecycleEvent = Created !CreatedData
+  | Marked !MarkedData
+  | Pinged !PingedData
+  | Awakened !AwakenedData
+  | ClosedEvent !ClosedEventData
+  | Reopened !ReopenedData
+  deriving stock (Generic, Eq, Show)
+
+type LifecycleRegs =
+  '[ '("dormantSince", MaybeTime)
+   , '("automatic", Bool)
+   ]
+
+initialLifecycleRegs :: RegFile LifecycleRegs
+initialLifecycleRegs =
+  RCons (Proxy @"dormantSince") Bindings.noTime $
+  RCons (Proxy @"automatic") False RNil
+
+$(deriveAggregateCtorsAll ''LifecycleCommand ''LifecycleRegs)
+
+
+
+$(deriveWireCtorsAll ''LifecycleEvent)
diff --git a/test/conformance-mapped-register-construction/Generated/MappedRegisterConstruction/Lifecycle/EventStream.hs b/test/conformance-mapped-register-construction/Generated/MappedRegisterConstruction/Lifecycle/EventStream.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-mapped-register-construction/Generated/MappedRegisterConstruction/Lifecycle/EventStream.hs
@@ -0,0 +1,63 @@
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Lifecycle; do not edit.
+module Generated.MappedRegisterConstruction.Lifecycle.EventStream
+  ( lifecycleCategory
+  , lifecycleCommandCategory
+  , lifecycleEventStream
+  , lifecycleEventStreamDef
+  , LifecycleEventStream
+  , LifecycleEventStreamDef
+  , lifecycleSnapshotFixture
+  ) where
+
+import Generated.MappedRegisterConstruction.Lifecycle.Domain
+import Generated.MappedRegisterConstruction.Lifecycle.Codec (lifecycleCodec)
+import Generated.MappedRegisterConstruction.Lifecycle.Transducer (lifecycleFoldFingerprint, lifecycleTransducer)
+import Keiki.Core (HsPred)
+import Keiro.EventStream (EventStream (..), SnapshotPolicy (..))
+import Keiro.EventStream.Validate (ValidatedEventStream, mkEventStreamOrThrow)
+import Data.Text (Text)
+import Keiro.Snapshot.Codec (defaultStateCodec, withFoldFingerprint)
+import Keiro.Stream qualified as Stream
+
+-- The validated aggregate stream category (hole-kind 5: referenced, never retyped).
+-- Entity streams are '<category>-<id>' via Keiro.Stream.entityStream.
+-- categoryUnsafe is safe here because this generated literal passed the DSL category proof.
+lifecycleCategory :: Stream.StreamCategory LifecycleEventStreamDef
+lifecycleCategory = Stream.categoryUnsafe "lifecycle"
+
+-- The same category text, typed for command envelopes such as PMCommand.
+lifecycleCommandCategory :: Stream.StreamCategory LifecycleCommand
+lifecycleCommandCategory = Stream.categoryUnsafe "lifecycle"
+
+type LifecycleEventStreamDef =
+  EventStream (HsPred LifecycleRegs LifecycleCommand) LifecycleRegs LifecycleVertex LifecycleCommand LifecycleEvent
+
+type LifecycleEventStream =
+  ValidatedEventStream (HsPred LifecycleRegs LifecycleCommand) LifecycleRegs LifecycleVertex LifecycleCommand LifecycleEvent
+
+lifecycleEventStreamDef :: LifecycleEventStreamDef
+lifecycleEventStreamDef =
+  EventStream
+    { transducer = lifecycleTransducer,
+      initialState = LifecycleEmpty,
+      initialRegisters = initialLifecycleRegs,
+      eventCodec = lifecycleCodec,
+      resolveStreamName = Stream.streamName,
+      snapshotPolicy = Every 1,
+      -- The snapshot discriminator composes: the spec's state-codec version (bump it
+      -- in the spec's `state-codec version=` clause), keiki's register and
+      -- control-state shape hashes, and this fold fingerprint derived from the
+      -- spec's transition surface (guards, writes, emits, states, register
+      -- initials, referenced rules). Spec-visible fold changes invalidate old
+      -- snapshots automatically. Version-2 Hole-owned transitions additionally
+      -- compose their explicit hand-owned FoldVersion tokens here; bump the
+      -- corresponding token whenever that Hole behavior changes.
+      stateCodec = Just (withFoldFingerprint lifecycleFoldFingerprint (defaultStateCodec 1))
+    }
+
+lifecycleSnapshotFixture :: (Int, Text)
+lifecycleSnapshotFixture = (1, "mapped-register-construction-v1")
+
+lifecycleEventStream :: LifecycleEventStream
+lifecycleEventStream =
+  mkEventStreamOrThrow "Lifecycle" lifecycleEventStreamDef
diff --git a/test/conformance-mapped-register-construction/Generated/MappedRegisterConstruction/Lifecycle/Harness.hs b/test/conformance-mapped-register-construction/Generated/MappedRegisterConstruction/Lifecycle/Harness.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-mapped-register-construction/Generated/MappedRegisterConstruction/Lifecycle/Harness.hs
@@ -0,0 +1,78 @@
+{-# LANGUAGE OverloadedLabels #-}
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Lifecycle; do not edit.
+module Generated.MappedRegisterConstruction.Lifecycle.Harness (harnessAssertions) where
+
+import Generated.MappedRegisterConstruction.Lifecycle.Domain
+import Generated.MappedRegisterConstruction.Lifecycle.Codec (encodeLifecycleEvent, parseLifecycleEvent, lifecycleCodec)
+import Generated.MappedRegisterConstruction.Lifecycle.Transducer (lifecycleTransducer)
+import Keiki.Core (applyEventsEither, defaultValidationOptions, step, validateTransducer, (!))
+import Keiro.Codec (eventType)
+import Data.Time.Calendar (fromGregorian)
+import Data.Time.Clock (UTCTime (..), picosecondsToDiffTime)
+
+-- | (label, passed). A driver runs these and exits non-zero on any False,
+-- naming the failing assertion. Filling a hole wrongly turns a specific
+-- entry False; the scaffold cannot.
+harnessAssertions :: [(String, Bool)]
+harnessAssertions =
+  [ ("validateTransducer is empty", null (validateTransducer defaultValidationOptions lifecycleTransducer))
+  -- clock-free: spec samples no wall clock (verified at scaffold time)
+  , ("golden round-trip: Created", roundTrips sampleEventCreated)
+  , ("golden round-trip: Marked", roundTrips sampleEventMarked)
+  , ("golden round-trip: Pinged", roundTrips sampleEventPinged)
+  , ("golden round-trip: Awakened", roundTrips sampleEventAwakened)
+  , ("golden round-trip: ClosedEvent", roundTrips sampleEventClosedEvent)
+  , ("golden round-trip: Reopened", roundTrips sampleEventReopened)
+  , ("accepts Create from LifecycleEmpty", acceptCreate)
+  ]
+  ++ forwardReplayCreate
+
+roundTrips :: LifecycleEvent -> Bool
+roundTrips e = parseLifecycleEvent (eventType lifecycleCodec e) (encodeLifecycleEvent e) == Right e
+
+sampleTime :: UTCTime
+sampleTime = UTCTime (fromGregorian 2026 1 2) (picosecondsToDiffTime 11045123456789012)
+
+sampleEventCreated :: LifecycleEvent
+sampleEventCreated = Created (CreatedData False)
+
+sampleEventMarked :: LifecycleEvent
+sampleEventMarked = Marked (MarkedData sampleTime)
+
+sampleEventPinged :: LifecycleEvent
+sampleEventPinged = Pinged (PingedData sampleTime)
+
+sampleEventAwakened :: LifecycleEvent
+sampleEventAwakened = Awakened (AwakenedData sampleTime)
+
+sampleEventClosedEvent :: LifecycleEvent
+sampleEventClosedEvent = ClosedEvent (ClosedEventData sampleTime)
+
+sampleEventReopened :: LifecycleEvent
+sampleEventReopened = Reopened (ReopenedData sampleTime)
+
+acceptCreate :: Bool
+acceptCreate =
+  case step lifecycleTransducer (LifecycleEmpty, initialLifecycleRegs) (Create (CreateData False)) of
+    Just (v, _, _) -> v == LifecycleAwake
+    Nothing -> False
+
+-- forward/replay equality (plan 147): cross the persisted codec boundary,
+-- replay the emitted chain, and compare the final vertex and every register.
+forwardReplayCreate :: [(String, Bool)]
+forwardReplayCreate =
+  case step lifecycleTransducer (LifecycleEmpty, initialLifecycleRegs) (Create (CreateData False)) of
+    Nothing -> [(prefix <> "forward step accepted", False)]
+    Just (forwardVertex, forwardRegs, emitted) ->
+      case mapM (\event -> parseLifecycleEvent (eventType lifecycleCodec event) (encodeLifecycleEvent event)) emitted of
+        Left _ -> [(prefix <> "emitted chain decodes", False)]
+        Right decodedEvents ->
+          case applyEventsEither lifecycleTransducer (LifecycleEmpty, initialLifecycleRegs) decodedEvents of
+            Left _ -> [(prefix <> "replay succeeds", False)]
+            Right (replayVertex, replayRegs) ->
+              [ (prefix <> "final vertex", replayVertex == forwardVertex)
+              , (prefix <> "register dormantSince", (replayRegs ! #dormantSince) == (forwardRegs ! #dormantSince))
+              , (prefix <> "register automatic", (replayRegs ! #automatic) == (forwardRegs ! #automatic))
+              ]
+  where
+    prefix = "forward/replay equality: Create from LifecycleEmpty -- "
diff --git a/test/conformance-mapped-register-construction/Generated/MappedRegisterConstruction/Lifecycle/Projection.hs b/test/conformance-mapped-register-construction/Generated/MappedRegisterConstruction/Lifecycle/Projection.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-mapped-register-construction/Generated/MappedRegisterConstruction/Lifecycle/Projection.hs
@@ -0,0 +1,4 @@
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Lifecycle; do not edit.
+module Generated.MappedRegisterConstruction.Lifecycle.Projection () where
+
+-- No projection declarations are present; this module keeps the generated manifest inventory total.
diff --git a/test/conformance-mapped-register-construction/Generated/MappedRegisterConstruction/Lifecycle/Transducer.hs b/test/conformance-mapped-register-construction/Generated/MappedRegisterConstruction/Lifecycle/Transducer.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-mapped-register-construction/Generated/MappedRegisterConstruction/Lifecycle/Transducer.hs
@@ -0,0 +1,107 @@
+{-# LANGUAGE BlockArguments #-}
+{-# LANGUAGE QualifiedDo #-}
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Lifecycle; do not edit.
+module Generated.MappedRegisterConstruction.Lifecycle.Transducer
+  ( lifecycleTransducer
+  , lifecycleFoldFingerprint
+  , BehaviorOwnership (..)
+  , lifecyclePredicateVerifications
+  ) where
+
+import Generated.MappedRegisterConstruction.Lifecycle.Domain
+import Data.Text (Text)
+import Conformance.MappedRegisterConstruction.Bindings qualified as Bindings
+import Conformance.MappedRegisterConstruction.Lift qualified as Lift
+import Keiki.Builder qualified as B
+import Keiki.Core (HsPred, SymTransducer, (.==))
+import Keiki.Core qualified as K
+import Keiki.Symbolic qualified as S
+import Keiki.Builder ((=:))
+
+lifecycleTransducer
+  :: SymTransducer
+       (HsPred LifecycleRegs LifecycleCommand)
+       LifecycleRegs
+       LifecycleVertex
+       LifecycleCommand
+       LifecycleEvent
+lifecycleTransducer =
+  B.buildTransducer LifecycleEmpty initialLifecycleRegs isTerminal do
+    B.from LifecycleEmpty do
+      B.onCmd inCtorCreate $ \d -> B.do
+        B.slot @"dormantSince" =: K.opaqueLit Bindings.noTime
+        B.slot @"automatic" =: d.automatic
+        B.emit wireCreated (CreatedTermFields
+          { automatic = d.automatic
+          })
+        B.goto LifecycleAwake
+    B.from LifecycleAwake do
+      B.onCmd inCtorMark $ \d -> B.do
+        B.slot @"dormantSince" =: K.TApp1 Lift.atTime (d.markedAt)
+        B.emit wireMarked (MarkedTermFields
+          { markedAt = d.markedAt
+          })
+        B.goto LifecycleDormant
+      B.onCmd inCtorClose $ \d -> B.do
+        B.emit wireClosedEvent (ClosedEventTermFields
+          { closedAt = d.closedAt
+          })
+        B.goto LifecycleClosed
+    B.from LifecycleDormant do
+      B.onCmd inCtorPing $ \d -> B.do
+        B.requireGuard $
+          B.reg @"automatic" .== K.lit True
+        B.slot @"dormantSince" =: K.opaqueLit Bindings.noTime
+        B.emit wirePinged (PingedTermFields
+          { markedAt = d.markedAt
+          })
+        B.goto LifecycleAwake
+      B.onCmd inCtorPing $ \d -> B.do
+        B.requireGuard $
+          B.reg @"automatic" .== K.lit False
+        B.slot @"dormantSince" =: K.TApp1 Lift.atTime (d.markedAt)
+        B.emit wirePinged (PingedTermFields
+          { markedAt = d.markedAt
+          })
+        B.goto LifecycleDormant
+      B.onCmd inCtorAwaken $ \d -> B.do
+        B.slot @"dormantSince" =: K.opaqueLit Bindings.noTime
+        B.emit wireAwakened (AwakenedTermFields
+          { awakenedAt = d.awakenedAt
+          })
+        B.goto LifecycleAwake
+    B.from LifecycleClosed do
+      B.onCmd inCtorReopen $ \d -> B.do
+        B.slot @"dormantSince" =: K.opaqueLit Bindings.noTime
+        B.emit wireReopened (ReopenedTermFields
+          { reopenedAt = d.reopenedAt
+          })
+        B.goto LifecycleAwake
+ where
+  isTerminal = \case
+
+    _ -> False
+
+lifecycleFoldFingerprint :: Text
+lifecycleFoldFingerprint = "36d736d8808e56273d8ad11b24937942"
+
+data BehaviorOwnership = GeneratedOwned | HoleOwned
+  deriving stock (Eq, Show)
+
+-- Every checked transition predicate is audited through Keiki's conservative
+-- symbolic verifier. Opaque Hole terms remain explicitly unverified.
+lifecyclePredicateVerifications :: IO [(Text, BehaviorOwnership, S.PredicateVerification)]
+lifecyclePredicateVerifications = sequence
+  [ verifyTransition "transition1EmptyCreate" GeneratedOwned LifecycleEmpty 0
+  , verifyTransition "transition2AwakeMark" GeneratedOwned LifecycleAwake 0
+  , verifyTransition "transition6AwakeClose" GeneratedOwned LifecycleAwake 1
+  , verifyTransition "transition3DormantPing" GeneratedOwned LifecycleDormant 0
+  , verifyTransition "transition4DormantPing" GeneratedOwned LifecycleDormant 1
+  , verifyTransition "transition5DormantAwaken" GeneratedOwned LifecycleDormant 2
+  , verifyTransition "transition7ClosedReopen" GeneratedOwned LifecycleClosed 0
+  ]
+ where
+  verifyTransition label owner source edgeIndex =
+    case drop edgeIndex (K.edgesOut lifecycleTransducer source) of
+      K.Edge predicate _ _ _ _ : _ -> (\result -> (label, owner, result)) <$> S.verifyPredicate predicate
+      [] -> pure (label, owner, S.UnverifiedSolverFailure "generated transition edge missing")
diff --git a/test/conformance-mapped-register-construction/Generated/MappedRegisterConstruction/ReplayAudit.hs b/test/conformance-mapped-register-construction/Generated/MappedRegisterConstruction/ReplayAudit.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-mapped-register-construction/Generated/MappedRegisterConstruction/ReplayAudit.hs
@@ -0,0 +1,23 @@
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context mapped-register-construction replay-audit assembly; do not edit.
+--
+-- Deployment contract:
+--   * replay-neutral diff: no data audit is required;
+--   * affected diff: run AuditTargeted with the emitted affected set
+--     against a production copy under the candidate binary;
+--   * one-time runtime cutover: run AuditFull;
+--   * any non-zero audit exit blocks deployment.
+module Generated.MappedRegisterConstruction.ReplayAudit (auditTargets) where
+
+import Generated.MappedRegisterConstruction.Lifecycle.EventStream qualified as Lifecycle
+import Keiro.ReplayAudit (AuditTarget (..), SomeAuditTarget (..), streamInCategory)
+import Keiro.Stream qualified as Stream
+
+auditTargets :: [SomeAuditTarget]
+auditTargets =
+  [ SomeAuditTarget
+      AuditTarget
+        { eventStream = Lifecycle.lifecycleEventStream
+        , category = Stream.categoryText Lifecycle.lifecycleCategory
+        , mkStream = streamInCategory (Stream.categoryText Lifecycle.lifecycleCategory)
+        }
+  ]
diff --git a/test/conformance-mapped-register-construction/Generated/MappedRegisterConstruction/StructuralConformance.hs b/test/conformance-mapped-register-construction/Generated/MappedRegisterConstruction/StructuralConformance.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-mapped-register-construction/Generated/MappedRegisterConstruction/StructuralConformance.hs
@@ -0,0 +1,49 @@
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context mapped-register-construction structural conformance; do not edit.
+module Generated.MappedRegisterConstruction.StructuralConformance
+  ( structuralConformanceAssertions
+  ) where
+
+import Data.Aeson qualified as Aeson
+import Data.List (nub)
+import Data.List.NonEmpty qualified as NonEmpty
+import Data.Text qualified as T
+import Keiro.Codec.Structural (FixtureCases (..))
+import Conformance.MappedRegisterConstruction.Bindings qualified as Bindings
+import Conformance.MappedRegisterConstruction.Domain (MaybeTime)
+import Conformance.MappedRegisterConstruction.Lift qualified as Lift
+import Data.Time (UTCTime)
+
+structuralConformanceAssertions :: [(String, Bool)]
+structuralConformanceAssertions =
+  concat
+    [ maybeTimeOpaqueAssertions
+    , maybeTimeWriteLiftAssertions
+    ]
+
+validFixtureLabels :: NonEmpty.NonEmpty (T.Text, value) -> Bool
+validFixtureLabels cases =
+  all (not . T.null) labels && length labels == length (nub labels)
+  where
+    labels = map fst (NonEmpty.toList cases)
+
+maybeTimeOpaqueAssertions :: [(String, Bool)]
+maybeTimeOpaqueAssertions =
+  ("opaque boundary fixtures: conformance.MaybeTime.json@1", validFixtureLabels cases) :
+  [ ("opaque codec round-trip: conformance.MaybeTime.json@1/" <> T.unpack caseLabel, case Aeson.fromJSON (Aeson.toJSON value) of Aeson.Success decoded -> decoded == value; Aeson.Error _ -> False)
+  | (caseLabel, value) <- NonEmpty.toList cases
+  ]
+  where
+    cases = fixtureCases Bindings.maybeTimeCases
+
+maybeTimeWriteLiftAssertions :: [(String, Bool)]
+maybeTimeWriteLiftAssertions =
+  ("write-lift fixture labels: MaybeTime", all (not . T.null . T.strip) labels && length labels == length (nub labels)) :
+  [ ("write-lift case: MaybeTime/" <> T.unpack label, apply input == expected)
+  | (label, input, expected) <- NonEmpty.toList cases
+  ]
+  where
+    apply :: UTCTime -> MaybeTime
+    apply = Lift.atTime
+    cases :: NonEmpty.NonEmpty (T.Text, UTCTime, MaybeTime)
+    cases = Lift.atTimeCases
+    labels = [label | (label, _, _) <- NonEmpty.toList cases]
diff --git a/test/conformance-mapped-register-construction/Main.hs b/test/conformance-mapped-register-construction/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-mapped-register-construction/Main.hs
@@ -0,0 +1,126 @@
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE TypeApplications #-}
+
+module Main (main) where
+
+import Control.Monad (foldM, forM_, unless)
+import Conformance.MappedRegisterConstruction.Bindings (noTime)
+import Conformance.MappedRegisterConstruction.Domain (MaybeTime (..))
+import Data.Text qualified as T
+import Data.Text.IO qualified as TIO
+import Data.Time.Calendar (fromGregorian)
+import Data.Time.Clock (UTCTime (..))
+import Generated.MappedRegisterConstruction.Lifecycle.BehaviorContract qualified as Behavior
+import Generated.MappedRegisterConstruction.Lifecycle.Codec
+import Generated.MappedRegisterConstruction.Lifecycle.Domain
+import Generated.MappedRegisterConstruction.Lifecycle.EventStream (lifecycleEventStreamDef)
+import Generated.MappedRegisterConstruction.Lifecycle.Harness (harnessAssertions)
+import Generated.MappedRegisterConstruction.Lifecycle.Transducer
+import Generated.MappedRegisterConstruction.StructuralConformance (structuralConformanceAssertions)
+import Keiki.Core qualified as K
+import Keiki.Symbolic qualified as S
+import Keiro.Codec (eventType)
+import Keiro.EventStream (EventStream (..), StateCodec (..))
+import Keiro.Snapshot.Codec (defaultStateCodec, withFoldFingerprint)
+import MappedRegisterConstruction.Lifecycle.BehaviorHoles (behaviorWitnesses)
+import System.Exit (exitFailure)
+
+main :: IO ()
+main = do
+  verifications <- lifecyclePredicateVerifications
+  source <- TIO.readFile "test/conformance-mapped-register-construction/Generated/MappedRegisterConstruction/Lifecycle/Transducer.hs"
+  let checks = harnessAssertions
+        <> [("structural/" <> label, passed) | (label, passed) <- structuralConformanceAssertions]
+        <> [ ("generated guarded initial write selects no timestamp", scenario [(Create (CreateData True), LifecycleAwake, noTime, True)]),
+             ("generated mapped lift writes the command timestamp", scenario [(Create (CreateData True), LifecycleAwake, noTime, True), (Mark (MarkData time), LifecycleDormant, MaybeTime (Just time), True)]),
+             ("automatic awakening clears the timestamp", automaticPath),
+             ("dormant complement retains a freshly lifted timestamp", dormantPath),
+             ("explicit awakening and reopening clear the timestamp", explicitPath),
+             ("complementary guard verification remains disjoint", null (S.checkTransitionDeterminismSym lifecycleTransducer)),
+             ("every predicate retains generated ownership and verification", all (\(_, owner, verdict) -> owner == GeneratedOwned && verdict == S.VerifiedSatisfiable) verifications),
+             ("forward, encoded replay, and full replay agree", automaticPath && dormantPath && explicitPath),
+             ("all consumer behavior witnesses pass", Behavior.behaviorConformancePassed (Behavior.behaviorCoverageReport behaviorWitnesses)),
+             ("lift version participates in fold and snapshot identity", snapshotAgreement),
+             ("snapshot codec preserves the complete lifted register file", snapshotRoundTrip),
+             ("mapped lift occurs only inside declared register slots", all (\line -> not ("K.TApp1" `T.isInfixOf` line) || "B.slot @\"dormantSince\" =:" `T.isInfixOf` line) (T.lines source))
+           ]
+  forM_ checks $ \(label, passed) -> putStrLn ((if passed then "PASS  " else "FAIL  ") <> label)
+  unless (all snd checks) exitFailure
+
+time :: UTCTime
+time = UTCTime (fromGregorian 2026 10 14) 12345
+
+later :: UTCTime
+later = UTCTime (fromGregorian 2026 10 15) 9876
+
+initialPair :: (LifecycleVertex, K.RegFile LifecycleRegs)
+initialPair = (LifecycleEmpty, initialLifecycleRegs)
+
+observe :: (LifecycleVertex, K.RegFile LifecycleRegs) -> (LifecycleVertex, MaybeTime, Bool)
+observe (vertex, registers) = (vertex, registers K.! #dormantSince, registers K.! #automatic)
+
+-- Both registers form the complete file. Compare every prefix to encoded and
+-- full replay, so a later clear cannot mask an incorrect earlier lifted write.
+scenario :: [(LifecycleCommand, LifecycleVertex, MaybeTime, Bool)] -> Bool
+scenario rows = case foldM advance (initialPair, []) rows of
+  Nothing -> False
+  Just _ -> True
+  where
+    advance (pair, history) (command, vertex, timestamp, automatic) = do
+      (nextVertex, nextRegisters, events) <- K.step lifecycleTransducer pair command
+      let next = (nextVertex, nextRegisters)
+          allEvents = history <> events
+          expected = (vertex, timestamp, automatic)
+      decoded <- either (const Nothing) Just (traverse roundTrip allEvents)
+      encodedReplay <- either (const Nothing) Just (K.applyEventsEither lifecycleTransducer initialPair decoded)
+      fullReplay <- K.reconstitute lifecycleTransducer allEvents
+      if observe next == expected && observe encodedReplay == expected && observe fullReplay == expected
+        then Just (next, allEvents)
+        else Nothing
+    roundTrip event = parseLifecycleEvent (eventType lifecycleCodec event) (encodeLifecycleEvent event)
+
+automaticPath :: Bool
+automaticPath = scenario
+  [ (Create (CreateData True), LifecycleAwake, noTime, True),
+    (Mark (MarkData time), LifecycleDormant, MaybeTime (Just time), True),
+    (Ping (PingData later), LifecycleAwake, noTime, True)
+  ]
+
+dormantPath :: Bool
+dormantPath = scenario
+  [ (Create (CreateData False), LifecycleAwake, noTime, False),
+    (Mark (MarkData time), LifecycleDormant, MaybeTime (Just time), False),
+    (Ping (PingData later), LifecycleDormant, MaybeTime (Just later), False)
+  ]
+
+explicitPath :: Bool
+explicitPath = scenario
+  [ (Create (CreateData False), LifecycleAwake, noTime, False),
+    (Mark (MarkData time), LifecycleDormant, MaybeTime (Just time), False),
+    (Awaken (AwakenData time), LifecycleAwake, noTime, False),
+    (Close (CloseData time), LifecycleClosed, noTime, False),
+    (Reopen (ReopenData time), LifecycleAwake, noTime, False)
+  ]
+
+snapshotAgreement :: Bool
+snapshotAgreement = case stateCodec lifecycleEventStreamDef of
+  Nothing -> False
+  Just current ->
+    let changed :: StateCodec (LifecycleVertex, K.RegFile LifecycleRegs)
+        changed = withFoldFingerprint (lifecycleFoldFingerprint <> ":lift-version-2") (defaultStateCodec 1)
+     in lifecycleFoldFingerprint == "36d736d8808e56273d8ad11b24937942"
+          && lifecycleFoldFingerprint `T.isInfixOf` current.stateShapeHash
+          && current.stateShapeHash /= changed.stateShapeHash
+          && current.shapeHash == changed.shapeHash
+
+snapshotRoundTrip :: Bool
+snapshotRoundTrip = case stateCodec lifecycleEventStreamDef of
+  Nothing -> False
+  Just codec -> case K.step lifecycleTransducer initialPair (Create (CreateData True)) of
+    Nothing -> False
+    Just (vertex, registers, _) -> case K.step lifecycleTransducer (vertex, registers) (Mark (MarkData time)) of
+      Nothing -> False
+      Just (target, written, _) ->
+        case codec.decode (codec.encode (target, written)) of
+          Left _ -> False
+          Right decoded -> observe decoded == (LifecycleDormant, MaybeTime (Just time), True)
diff --git a/test/conformance-mapped-register-construction/MappedRegisterConstruction/Lifecycle/BehaviorHoles.hs b/test/conformance-mapped-register-construction/MappedRegisterConstruction/Lifecycle/BehaviorHoles.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-mapped-register-construction/MappedRegisterConstruction/Lifecycle/BehaviorHoles.hs
@@ -0,0 +1,41 @@
+module MappedRegisterConstruction.Lifecycle.BehaviorHoles (behaviorWitnesses) where
+
+import Data.List.NonEmpty (NonEmpty (..))
+import Data.Time.Calendar (fromGregorian)
+import Data.Time.Clock (UTCTime (..))
+import Generated.MappedRegisterConstruction.Lifecycle.BehaviorContract
+import Generated.MappedRegisterConstruction.Lifecycle.Domain
+
+-- Every required source/command pair gets an executable consumer witness.
+behaviorWitnesses :: [BehaviorWitness]
+behaviorWitnesses = map witness behaviorRequirements
+  where
+    time = UTCTime (fromGregorian 2026 10 14) 12345
+    witness requirement = LiveWitness
+      { key = requirement.key,
+        history = historyFor requirement,
+        command = commandFor requirement.commandName,
+        expected = case requirement.kind of
+          RequiredRejection -> Rejects RejectNoMatchingEdge
+          LiveTransition -> Emits (eventFor requirement.commandName :| [])
+          ReplayTransition -> error "fixture has no replay-only transitions"
+      }
+    historyFor requirement = case requirement.source of
+      LifecycleEmpty -> []
+      LifecycleAwake -> [Created (CreatedData False)]
+      LifecycleDormant -> [Created (CreatedData (requirement.target == Just LifecycleAwake)), Marked (MarkedData time)]
+      LifecycleClosed -> [Created (CreatedData False), ClosedEvent (ClosedEventData time)]
+    commandFor "Create" = Create (CreateData False)
+    commandFor "Mark" = Mark (MarkData time)
+    commandFor "Ping" = Ping (PingData time)
+    commandFor "Awaken" = Awaken (AwakenData time)
+    commandFor "Close" = Close (CloseData time)
+    commandFor "Reopen" = Reopen (ReopenData time)
+    commandFor _ = error "unknown fixture command"
+    eventFor "Create" = Created (CreatedData False)
+    eventFor "Mark" = Marked (MarkedData time)
+    eventFor "Ping" = Pinged (PingedData time)
+    eventFor "Awaken" = Awakened (AwakenedData time)
+    eventFor "Close" = ClosedEvent (ClosedEventData time)
+    eventFor "Reopen" = Reopened (ReopenedData time)
+    eventFor _ = error "unknown fixture event"
diff --git a/test/conformance-mapped-register-construction/keiro-dsl-cabal-fragment.context.mapped-register-construction.txt b/test/conformance-mapped-register-construction/keiro-dsl-cabal-fragment.context.mapped-register-construction.txt
new file mode 100644
--- /dev/null
+++ b/test/conformance-mapped-register-construction/keiro-dsl-cabal-fragment.context.mapped-register-construction.txt
@@ -0,0 +1,42 @@
+-- keiro-dsl build manifest for keiro-dsl/test/fixtures/mapped-register-construction.keiro
+-- Paste the complete fragment below into the consuming Cabal stanza.
+-- The generated layer is overwritten on every scaffold; hole modules are
+-- create-if-absent (filled by hand).
+
+default-language: GHC2024
+default-extensions:
+    DuplicateRecordFields
+    NoFieldSelectors
+    OverloadedRecordDot
+    OverloadedStrings
+
+other-modules:
+    Conformance.MappedRegisterConstruction.Lift
+    Generated.MappedRegisterConstruction.BehaviorSourceMap
+    Generated.MappedRegisterConstruction.Lifecycle.BehaviorContract
+    Generated.MappedRegisterConstruction.Lifecycle.Codec
+    Generated.MappedRegisterConstruction.Lifecycle.Domain
+    Generated.MappedRegisterConstruction.Lifecycle.EventStream
+    Generated.MappedRegisterConstruction.Lifecycle.Harness
+    Generated.MappedRegisterConstruction.Lifecycle.Projection
+    Generated.MappedRegisterConstruction.Lifecycle.Transducer
+    Generated.MappedRegisterConstruction.ReplayAudit
+    Generated.MappedRegisterConstruction.StructuralConformance
+    MappedRegisterConstruction.Lifecycle.BehaviorHoles
+
+build-depends:
+    , aeson
+    , base
+    , keiki
+    , keiro
+    , keiro-dsl
+    , text
+    , time
+
+consumer-packages:
+    keiro-dsl
+
+consumer-modules:
+    Conformance.MappedRegisterConstruction.Bindings
+    Conformance.MappedRegisterConstruction.Domain
+    Conformance.MappedRegisterConstruction.Lift
diff --git a/test/conformance-mapped-register-construction/keiro-dsl-ledger.context.mapped-register-construction.txt b/test/conformance-mapped-register-construction/keiro-dsl-ledger.context.mapped-register-construction.txt
new file mode 100644
--- /dev/null
+++ b/test/conformance-mapped-register-construction/keiro-dsl-ledger.context.mapped-register-construction.txt
@@ -0,0 +1,60 @@
+keiro-dsl scaffold record v1
+spec: keiro-dsl/test/fixtures/mapped-register-construction.keiro
+module-root: (none)
+layout: prefixed
+source-language {"declaredLanguageVersion":6,"effectiveLanguageVersion":6,"sourceForm":"declared"}
+semantic-contract {"languageSupport":"candidate","languageVersion":6,"runtimeSemantics":"keiro-dsl/runtime-semantics/5"}
+naming-edition idiomatic-v2
+module-role {"family":"StructuralConformance","kind":"generated","ownerKind":"context","ownerName":"context mapped-register-construction structural conformance","path":"Generated/MappedRegisterConstruction/StructuralConformance.hs"}
+module-role {"family":"BehaviorSourceMap","kind":"generated","ownerKind":"context","ownerName":"context mapped-register-construction behavior source map","path":"Generated/MappedRegisterConstruction/BehaviorSourceMap.hs"}
+module-role {"family":"Lift","kind":"hole","ownerKind":"consumer","ownerName":"consumer binding skeleton Conformance.MappedRegisterConstruction.Lift","path":"Conformance/MappedRegisterConstruction/Lift.hs"}
+module-role {"family":"ReplayAudit","kind":"generated","ownerKind":"context","ownerName":"context mapped-register-construction replay-audit assembly","path":"Generated/MappedRegisterConstruction/ReplayAudit.hs"}
+module-role {"family":"Domain","kind":"generated","ownerKind":"aggregate","ownerName":"aggregate Lifecycle (line 17)","path":"Generated/MappedRegisterConstruction/Lifecycle/Domain.hs"}
+module-role {"family":"Codec","kind":"generated","ownerKind":"aggregate","ownerName":"aggregate Lifecycle (line 17)","path":"Generated/MappedRegisterConstruction/Lifecycle/Codec.hs"}
+module-role {"family":"Transducer","kind":"generated","ownerKind":"aggregate","ownerName":"aggregate Lifecycle (line 17)","path":"Generated/MappedRegisterConstruction/Lifecycle/Transducer.hs"}
+module-role {"family":"BehaviorContract","kind":"generated","ownerKind":"aggregate","ownerName":"aggregate Lifecycle (line 17)","path":"Generated/MappedRegisterConstruction/Lifecycle/BehaviorContract.hs"}
+module-role {"family":"BehaviorHoles","kind":"hole","ownerKind":"aggregate","ownerName":"aggregate behavior witnesses Lifecycle (line 17)","path":"MappedRegisterConstruction/Lifecycle/BehaviorHoles.hs"}
+module-role {"family":"EventStream","kind":"generated","ownerKind":"aggregate","ownerName":"aggregate Lifecycle (line 17)","path":"Generated/MappedRegisterConstruction/Lifecycle/EventStream.hs"}
+module-role {"family":"Projection","kind":"generated","ownerKind":"aggregate","ownerName":"aggregate Lifecycle (line 17)","path":"Generated/MappedRegisterConstruction/Lifecycle/Projection.hs"}
+module-role {"family":"Harness","kind":"generated","ownerKind":"aggregate","ownerName":"aggregate Lifecycle (line 17)","path":"Generated/MappedRegisterConstruction/Lifecycle/Harness.hs"}
+generated Generated/MappedRegisterConstruction/StructuralConformance.hs
+generated Generated/MappedRegisterConstruction/BehaviorSourceMap.hs
+hole Conformance/MappedRegisterConstruction/Lift.hs
+generated Generated/MappedRegisterConstruction/ReplayAudit.hs
+generated Generated/MappedRegisterConstruction/Lifecycle/Domain.hs
+generated Generated/MappedRegisterConstruction/Lifecycle/Codec.hs
+generated Generated/MappedRegisterConstruction/Lifecycle/Transducer.hs
+generated Generated/MappedRegisterConstruction/Lifecycle/BehaviorContract.hs
+hole MappedRegisterConstruction/Lifecycle/BehaviorHoles.hs
+generated Generated/MappedRegisterConstruction/Lifecycle/EventStream.hs
+generated Generated/MappedRegisterConstruction/Lifecycle/Projection.hs
+generated Generated/MappedRegisterConstruction/Lifecycle/Harness.hs
+mapping {"codecIdentity":"conformance.MaybeTime.json","codecVersion":"1","mode":"opaque","module":"Conformance.MappedRegisterConstruction.Domain","package":"keiro-dsl","schema":1,"specName":"MaybeTime","type":"MaybeTime","writeLift":{"fixtures":"Conformance.MappedRegisterConstruction.Lift.atTimeCases","function":"Conformance.MappedRegisterConstruction.Lift.atTime","sourceType":"Time","version":"1"}}
+binding {"kind":"write-lift-function","mappedName":"MaybeTime","module":"Conformance.MappedRegisterConstruction.Lift","path":null,"schema":1,"signature":"atTime :: UTCTime -> Conformance.MappedRegisterConstruction.Domain.MaybeTime","symbol":"atTime"}
+binding {"kind":"write-lift-cases","mappedName":"MaybeTime","module":"Conformance.MappedRegisterConstruction.Lift","path":null,"schema":1,"signature":"atTimeCases :: NonEmpty (Text, UTCTime, Conformance.MappedRegisterConstruction.Domain.MaybeTime)","symbol":"atTimeCases"}
+behavior {"aggregate":"Lifecycle","command":"Ping","evidence":"generated-authoritative","key":"behavior-v1-0cc99c7503ca9831","kind":"live-transition","outputs":[{"command":"Ping","ownership":"generated-command-identity"}],"source":"Dormant"}
+behavior {"aggregate":"Lifecycle","command":"Close","evidence":"generated-authoritative","key":"behavior-v1-1f04e07a5ea312c1","kind":"required-rejection","outputs":[],"source":"Dormant"}
+behavior {"aggregate":"Lifecycle","command":"Mark","evidence":"generated-authoritative","key":"behavior-v1-325f4ed937c478c5","kind":"required-rejection","outputs":[],"source":"Closed"}
+behavior {"aggregate":"Lifecycle","command":"Close","evidence":"generated-authoritative","key":"behavior-v1-33fcaede253a4bed","kind":"required-rejection","outputs":[],"source":"Empty"}
+behavior {"aggregate":"Lifecycle","command":"Ping","evidence":"generated-authoritative","key":"behavior-v1-386bbbf74705f45f","kind":"live-transition","outputs":[{"command":"Ping","ownership":"generated-command-identity"}],"source":"Dormant"}
+behavior {"aggregate":"Lifecycle","command":"Mark","evidence":"generated-authoritative","key":"behavior-v1-466916eb8981b08e","kind":"required-rejection","outputs":[],"source":"Dormant"}
+behavior {"aggregate":"Lifecycle","command":"Awaken","evidence":"generated-authoritative","key":"behavior-v1-5253e620452fc4cf","kind":"live-transition","outputs":[{"command":"Awaken","ownership":"generated-command-identity"}],"source":"Dormant"}
+behavior {"aggregate":"Lifecycle","command":"Reopen","evidence":"generated-authoritative","key":"behavior-v1-5e7d15bcad88b1ae","kind":"required-rejection","outputs":[],"source":"Empty"}
+behavior {"aggregate":"Lifecycle","command":"Reopen","evidence":"generated-authoritative","key":"behavior-v1-66c78f3ed9bc6b52","kind":"required-rejection","outputs":[],"source":"Dormant"}
+behavior {"aggregate":"Lifecycle","command":"Reopen","evidence":"generated-authoritative","key":"behavior-v1-7705536a045d1c60","kind":"live-transition","outputs":[{"command":"Reopen","ownership":"generated-command-identity"}],"source":"Closed"}
+behavior {"aggregate":"Lifecycle","command":"Ping","evidence":"generated-authoritative","key":"behavior-v1-88ef8671c7c631bb","kind":"required-rejection","outputs":[],"source":"Empty"}
+behavior {"aggregate":"Lifecycle","command":"Ping","evidence":"generated-authoritative","key":"behavior-v1-959d3fbbbce2b4e4","kind":"required-rejection","outputs":[],"source":"Closed"}
+behavior {"aggregate":"Lifecycle","command":"Close","evidence":"generated-authoritative","key":"behavior-v1-968db04037ee20f0","kind":"required-rejection","outputs":[],"source":"Closed"}
+behavior {"aggregate":"Lifecycle","command":"Create","evidence":"generated-authoritative","key":"behavior-v1-994dec94076c02d0","kind":"live-transition","outputs":[{"command":"Create","ownership":"generated-command-identity"}],"source":"Empty"}
+behavior {"aggregate":"Lifecycle","command":"Ping","evidence":"generated-authoritative","key":"behavior-v1-9b56eeea9fa900fd","kind":"required-rejection","outputs":[],"source":"Awake"}
+behavior {"aggregate":"Lifecycle","command":"Awaken","evidence":"generated-authoritative","key":"behavior-v1-a1419cde22483b02","kind":"required-rejection","outputs":[],"source":"Awake"}
+behavior {"aggregate":"Lifecycle","command":"Create","evidence":"generated-authoritative","key":"behavior-v1-a8c781dd6ca46f4b","kind":"required-rejection","outputs":[],"source":"Dormant"}
+behavior {"aggregate":"Lifecycle","command":"Mark","evidence":"generated-authoritative","key":"behavior-v1-b7cc059e78b68a92","kind":"live-transition","outputs":[{"command":"Mark","ownership":"generated-command-identity"}],"source":"Awake"}
+behavior {"aggregate":"Lifecycle","command":"Create","evidence":"generated-authoritative","key":"behavior-v1-c1dbeb960bc50979","kind":"required-rejection","outputs":[],"source":"Awake"}
+behavior {"aggregate":"Lifecycle","command":"Awaken","evidence":"generated-authoritative","key":"behavior-v1-c8967a7d2e58d904","kind":"required-rejection","outputs":[],"source":"Empty"}
+behavior {"aggregate":"Lifecycle","command":"Create","evidence":"generated-authoritative","key":"behavior-v1-cc4529515153ea38","kind":"required-rejection","outputs":[],"source":"Closed"}
+behavior {"aggregate":"Lifecycle","command":"Awaken","evidence":"generated-authoritative","key":"behavior-v1-d87956d864ea179b","kind":"required-rejection","outputs":[],"source":"Closed"}
+behavior {"aggregate":"Lifecycle","command":"Reopen","evidence":"generated-authoritative","key":"behavior-v1-da9ee154eb2f350c","kind":"required-rejection","outputs":[],"source":"Awake"}
+behavior {"aggregate":"Lifecycle","command":"Mark","evidence":"generated-authoritative","key":"behavior-v1-dddc6f0d9aa7b262","kind":"required-rejection","outputs":[],"source":"Empty"}
+behavior {"aggregate":"Lifecycle","command":"Close","evidence":"generated-authoritative","key":"behavior-v1-f2c991f59a1a8e7e","kind":"live-transition","outputs":[{"command":"Close","ownership":"generated-command-identity"}],"source":"Awake"}
+semantic-impact {"declarations":[{"consequences":[{"consumer":"Lifecycle","kind":"consumer-build"},{"aggregate":"Lifecycle","kind":"snapshot-hydration"}],"consumerEvidence":[{"consumer":"Lifecycle","operation":null,"path":"Lifecycle register dormantSince : MaybeTime","surface":"snapshot-register"}],"consumers":["Lifecycle"],"declaration":"MaybeTime","identity":"opaque\u001fkeiro-dsl:Conformance.MappedRegisterConstruction.Domain:MaybeTime\u001fconformance.MaybeTime.json\u001f1\u001fConformance.MappedRegisterConstruction.Bindings.maybeTimeCases\u001fConformance.MappedRegisterConstruction.Bindings.noTime\u001f686ff6108af0cfe8"}],"mappedSurfaceEvidenceVersion":1,"serviceInventory":["MaybeTime"]}
diff --git a/test/conformance-newsurface/Generated/TransferRouting/BehaviorSourceMap.hs b/test/conformance-newsurface/Generated/TransferRouting/BehaviorSourceMap.hs
--- a/test/conformance-newsurface/Generated/TransferRouting/BehaviorSourceMap.hs
+++ b/test/conformance-newsurface/Generated/TransferRouting/BehaviorSourceMap.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context transfer-routing behavior source map; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context transfer-routing behavior source map; do not edit.
 module Generated.TransferRouting.BehaviorSourceMap
   ( BehaviorSourceLocation (..)
   , behaviorSourceLocation
diff --git a/test/conformance-newsurface/Generated/TransferRouting/Hospital/BehaviorContract.hs b/test/conformance-newsurface/Generated/TransferRouting/Hospital/BehaviorContract.hs
--- a/test/conformance-newsurface/Generated/TransferRouting/Hospital/BehaviorContract.hs
+++ b/test/conformance-newsurface/Generated/TransferRouting/Hospital/BehaviorContract.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
 module Generated.TransferRouting.Hospital.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -13,6 +13,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -144,7 +145,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -157,7 +169,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-newsurface/Generated/TransferRouting/Hospital/Codec.hs b/test/conformance-newsurface/Generated/TransferRouting/Hospital/Codec.hs
--- a/test/conformance-newsurface/Generated/TransferRouting/Hospital/Codec.hs
+++ b/test/conformance-newsurface/Generated/TransferRouting/Hospital/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
 module Generated.TransferRouting.Hospital.Codec (
     hospitalCodec,
     parseHospitalEvent,
diff --git a/test/conformance-newsurface/Generated/TransferRouting/Hospital/Domain.hs b/test/conformance-newsurface/Generated/TransferRouting/Hospital/Domain.hs
--- a/test/conformance-newsurface/Generated/TransferRouting/Hospital/Domain.hs
+++ b/test/conformance-newsurface/Generated/TransferRouting/Hospital/Domain.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
 module Generated.TransferRouting.Hospital.Domain where
 
 import Data.Text (Text)
diff --git a/test/conformance-newsurface/Generated/TransferRouting/Hospital/EventStream.hs b/test/conformance-newsurface/Generated/TransferRouting/Hospital/EventStream.hs
--- a/test/conformance-newsurface/Generated/TransferRouting/Hospital/EventStream.hs
+++ b/test/conformance-newsurface/Generated/TransferRouting/Hospital/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
 module Generated.TransferRouting.Hospital.EventStream
   ( hospitalCategory
   , hospitalCommandCategory
diff --git a/test/conformance-newsurface/Generated/TransferRouting/Hospital/Harness.hs b/test/conformance-newsurface/Generated/TransferRouting/Hospital/Harness.hs
--- a/test/conformance-newsurface/Generated/TransferRouting/Hospital/Harness.hs
+++ b/test/conformance-newsurface/Generated/TransferRouting/Hospital/Harness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
 module Generated.TransferRouting.Hospital.Harness (harnessAssertions) where
 
 import Generated.TransferRouting.Hospital.Domain
diff --git a/test/conformance-newsurface/Generated/TransferRouting/Hospital/Projection.hs b/test/conformance-newsurface/Generated/TransferRouting/Hospital/Projection.hs
--- a/test/conformance-newsurface/Generated/TransferRouting/Hospital/Projection.hs
+++ b/test/conformance-newsurface/Generated/TransferRouting/Hospital/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
 module Generated.TransferRouting.Hospital.Projection () where
 
 -- No projection declarations are present; this module keeps the generated manifest inventory total.
diff --git a/test/conformance-newsurface/Generated/TransferRouting/Hospital/Transducer.hs b/test/conformance-newsurface/Generated/TransferRouting/Hospital/Transducer.hs
--- a/test/conformance-newsurface/Generated/TransferRouting/Hospital/Transducer.hs
+++ b/test/conformance-newsurface/Generated/TransferRouting/Hospital/Transducer.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
 module Generated.TransferRouting.Hospital.Transducer
   ( hospitalTransducer
   , hospitalFoldFingerprint
diff --git a/test/conformance-newsurface/Generated/TransferRouting/HospitalLoad/ReadModel.hs b/test/conformance-newsurface/Generated/TransferRouting/HospitalLoad/ReadModel.hs
--- a/test/conformance-newsurface/Generated/TransferRouting/HospitalLoad/ReadModel.hs
+++ b/test/conformance-newsurface/Generated/TransferRouting/HospitalLoad/ReadModel.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from readmodel hospital_load; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from readmodel hospital_load; do not edit.
 module Generated.TransferRouting.HospitalLoad.ReadModel
   ( hospitalLoadReadModel
   , hospitalLoadQualifiedTable
diff --git a/test/conformance-newsurface/Generated/TransferRouting/HospitalLoad/ReadModelHarness.hs b/test/conformance-newsurface/Generated/TransferRouting/HospitalLoad/ReadModelHarness.hs
--- a/test/conformance-newsurface/Generated/TransferRouting/HospitalLoad/ReadModelHarness.hs
+++ b/test/conformance-newsurface/Generated/TransferRouting/HospitalLoad/ReadModelHarness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from readmodel hospital_load; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from readmodel hospital_load; do not edit.
 module Generated.TransferRouting.HospitalLoad.ReadModelHarness (readModelFacts, readModelFactResults, runReadModelFacts) where
 
 import Generated.TransferRouting.HospitalLoad.ReadModel (hospitalLoadReadModel, hospitalLoadAsyncProjection)
diff --git a/test/conformance-newsurface/Generated/TransferRouting/HospitalLoad/ReadModelTable.hs b/test/conformance-newsurface/Generated/TransferRouting/HospitalLoad/ReadModelTable.hs
--- a/test/conformance-newsurface/Generated/TransferRouting/HospitalLoad/ReadModelTable.hs
+++ b/test/conformance-newsurface/Generated/TransferRouting/HospitalLoad/ReadModelTable.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from readmodel hospital_load; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from readmodel hospital_load; do not edit.
 module Generated.TransferRouting.HospitalLoad.ReadModelTable (hospitalLoadQualifiedTable) where
 
 import Data.Text (Text)
diff --git a/test/conformance-newsurface/Generated/TransferRouting/HospitalTransferRouter/Router.hs b/test/conformance-newsurface/Generated/TransferRouting/HospitalTransferRouter/Router.hs
--- a/test/conformance-newsurface/Generated/TransferRouting/HospitalTransferRouter/Router.hs
+++ b/test/conformance-newsurface/Generated/TransferRouting/HospitalTransferRouter/Router.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from router HospitalTransferRouter; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from router HospitalTransferRouter; do not edit.
 module Generated.TransferRouting.HospitalTransferRouter.Router
   ( hospitalTransferRouterName
   , hospitalTransferRouterWorkerOptions
diff --git a/test/conformance-newsurface/Generated/TransferRouting/HospitalTransferRouter/RouterHarness.hs b/test/conformance-newsurface/Generated/TransferRouting/HospitalTransferRouter/RouterHarness.hs
--- a/test/conformance-newsurface/Generated/TransferRouting/HospitalTransferRouter/RouterHarness.hs
+++ b/test/conformance-newsurface/Generated/TransferRouting/HospitalTransferRouter/RouterHarness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from router HospitalTransferRouter; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from router HospitalTransferRouter; do not edit.
 module Generated.TransferRouting.HospitalTransferRouter.RouterHarness (routerHarnessValues) where
 
 routerHarnessValues :: [(String, String)]
diff --git a/test/conformance-newsurface/Generated/TransferRouting/ReplayAudit.hs b/test/conformance-newsurface/Generated/TransferRouting/ReplayAudit.hs
--- a/test/conformance-newsurface/Generated/TransferRouting/ReplayAudit.hs
+++ b/test/conformance-newsurface/Generated/TransferRouting/ReplayAudit.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context transfer-routing replay-audit assembly; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context transfer-routing replay-audit assembly; do not edit.
 --
 -- Deployment contract:
 --   * replay-neutral diff: no data audit is required;
diff --git a/test/conformance-nominal-query-only/Generated/MappedNominalQueryOnly/Nominals.hs b/test/conformance-nominal-query-only/Generated/MappedNominalQueryOnly/Nominals.hs
--- a/test/conformance-nominal-query-only/Generated/MappedNominalQueryOnly/Nominals.hs
+++ b/test/conformance-nominal-query-only/Generated/MappedNominalQueryOnly/Nominals.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context mapped-nominal-query-only generated nominal declarations; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context mapped-nominal-query-only generated nominal declarations; do not edit.
 module Generated.MappedNominalQueryOnly.Nominals
   ( TemplateId
   , parseTemplateId
diff --git a/test/conformance-nominal-query-only/Generated/MappedNominalQueryOnly/Nominals/Internal.hs b/test/conformance-nominal-query-only/Generated/MappedNominalQueryOnly/Nominals/Internal.hs
--- a/test/conformance-nominal-query-only/Generated/MappedNominalQueryOnly/Nominals/Internal.hs
+++ b/test/conformance-nominal-query-only/Generated/MappedNominalQueryOnly/Nominals/Internal.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context mapped-nominal-query-only generated nominal ID internals; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context mapped-nominal-query-only generated nominal ID internals; do not edit.
 module Generated.MappedNominalQueryOnly.Nominals.Internal
   ( TemplateId
   , parseTemplateId
diff --git a/test/conformance-nominal-query-only/Generated/MappedNominalQueryOnly/ProjectionCatalog.hs b/test/conformance-nominal-query-only/Generated/MappedNominalQueryOnly/ProjectionCatalog.hs
--- a/test/conformance-nominal-query-only/Generated/MappedNominalQueryOnly/ProjectionCatalog.hs
+++ b/test/conformance-nominal-query-only/Generated/MappedNominalQueryOnly/ProjectionCatalog.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from projection-catalog mapped-nominal-query-only; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from projection-catalog mapped-nominal-query-only; do not edit.
 {-# LANGUAGE OverloadedStrings #-}
 module Generated.MappedNominalQueryOnly.ProjectionCatalog
   ( projectionCatalog
diff --git a/test/conformance-nominal-query-only/Generated/MappedNominalQueryOnly/StructuralConformance.hs b/test/conformance-nominal-query-only/Generated/MappedNominalQueryOnly/StructuralConformance.hs
--- a/test/conformance-nominal-query-only/Generated/MappedNominalQueryOnly/StructuralConformance.hs
+++ b/test/conformance-nominal-query-only/Generated/MappedNominalQueryOnly/StructuralConformance.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context mapped-nominal-query-only structural conformance; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context mapped-nominal-query-only structural conformance; do not edit.
 module Generated.MappedNominalQueryOnly.StructuralConformance
   ( structuralConformanceAssertions
   ) where
diff --git a/test/conformance-nominal-query-only/Generated/MappedNominalQueryOnly/TemplateLookup/QueryContract.hs b/test/conformance-nominal-query-only/Generated/MappedNominalQueryOnly/TemplateLookup/QueryContract.hs
--- a/test/conformance-nominal-query-only/Generated/MappedNominalQueryOnly/TemplateLookup/QueryContract.hs
+++ b/test/conformance-nominal-query-only/Generated/MappedNominalQueryOnly/TemplateLookup/QueryContract.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from readmodel template_lookup; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from readmodel template_lookup; do not edit.
 module Generated.MappedNominalQueryOnly.TemplateLookup.QueryContract
   ( TemplateLookupQueryInput
   , TemplateLookupQueryResult
diff --git a/test/conformance-nominal-query-only/Generated/MappedNominalQueryOnly/TemplateLookup/ReadModel.hs b/test/conformance-nominal-query-only/Generated/MappedNominalQueryOnly/TemplateLookup/ReadModel.hs
--- a/test/conformance-nominal-query-only/Generated/MappedNominalQueryOnly/TemplateLookup/ReadModel.hs
+++ b/test/conformance-nominal-query-only/Generated/MappedNominalQueryOnly/TemplateLookup/ReadModel.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from readmodel template_lookup; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from readmodel template_lookup; do not edit.
 module Generated.MappedNominalQueryOnly.TemplateLookup.ReadModel
   ( templateLookupReadModel
   , templateLookupQualifiedTable
diff --git a/test/conformance-nominal-query-only/Generated/MappedNominalQueryOnly/TemplateLookup/ReadModelHarness.hs b/test/conformance-nominal-query-only/Generated/MappedNominalQueryOnly/TemplateLookup/ReadModelHarness.hs
--- a/test/conformance-nominal-query-only/Generated/MappedNominalQueryOnly/TemplateLookup/ReadModelHarness.hs
+++ b/test/conformance-nominal-query-only/Generated/MappedNominalQueryOnly/TemplateLookup/ReadModelHarness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from readmodel template_lookup; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from readmodel template_lookup; do not edit.
 module Generated.MappedNominalQueryOnly.TemplateLookup.ReadModelHarness (readModelFacts, readModelFactResults, runReadModelFacts, catalogFactsAgainst) where
 
 import Generated.MappedNominalQueryOnly.TemplateLookup.ReadModel (templateLookupReadModel)
diff --git a/test/conformance-nominal-query-only/Generated/MappedNominalQueryOnly/TemplateLookup/ReadModelTable.hs b/test/conformance-nominal-query-only/Generated/MappedNominalQueryOnly/TemplateLookup/ReadModelTable.hs
--- a/test/conformance-nominal-query-only/Generated/MappedNominalQueryOnly/TemplateLookup/ReadModelTable.hs
+++ b/test/conformance-nominal-query-only/Generated/MappedNominalQueryOnly/TemplateLookup/ReadModelTable.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from readmodel template_lookup; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from readmodel template_lookup; do not edit.
 module Generated.MappedNominalQueryOnly.TemplateLookup.ReadModelTable (templateLookupQualifiedTable) where
 
 import Data.Text (Text)
diff --git a/test/conformance-nominal-queue-only/Generated/MappedNominalQueueOnly/Nominals.hs b/test/conformance-nominal-queue-only/Generated/MappedNominalQueueOnly/Nominals.hs
--- a/test/conformance-nominal-queue-only/Generated/MappedNominalQueueOnly/Nominals.hs
+++ b/test/conformance-nominal-queue-only/Generated/MappedNominalQueueOnly/Nominals.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context mapped-nominal-queue-only generated nominal declarations; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context mapped-nominal-queue-only generated nominal declarations; do not edit.
 module Generated.MappedNominalQueueOnly.Nominals
   ( TemplateId
   , parseTemplateId
diff --git a/test/conformance-nominal-queue-only/Generated/MappedNominalQueueOnly/Nominals/Internal.hs b/test/conformance-nominal-queue-only/Generated/MappedNominalQueueOnly/Nominals/Internal.hs
--- a/test/conformance-nominal-queue-only/Generated/MappedNominalQueueOnly/Nominals/Internal.hs
+++ b/test/conformance-nominal-queue-only/Generated/MappedNominalQueueOnly/Nominals/Internal.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context mapped-nominal-queue-only generated nominal ID internals; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context mapped-nominal-queue-only generated nominal ID internals; do not edit.
 module Generated.MappedNominalQueueOnly.Nominals.Internal
   ( TemplateId
   , parseTemplateId
diff --git a/test/conformance-nominal-queue-only/Generated/MappedNominalQueueOnly/Structural/NominalLeaves.hs b/test/conformance-nominal-queue-only/Generated/MappedNominalQueueOnly/Structural/NominalLeaves.hs
--- a/test/conformance-nominal-queue-only/Generated/MappedNominalQueueOnly/Structural/NominalLeaves.hs
+++ b/test/conformance-nominal-queue-only/Generated/MappedNominalQueueOnly/Structural/NominalLeaves.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context mapped-nominal-queue-only structural nominal leaves; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context mapped-nominal-queue-only structural nominal leaves; do not edit.
 module Generated.MappedNominalQueueOnly.Structural.NominalLeaves where
 
 import Data.Aeson (Value (..), withText)
diff --git a/test/conformance-nominal-queue-only/Generated/MappedNominalQueueOnly/StructuralConformance.hs b/test/conformance-nominal-queue-only/Generated/MappedNominalQueueOnly/StructuralConformance.hs
--- a/test/conformance-nominal-queue-only/Generated/MappedNominalQueueOnly/StructuralConformance.hs
+++ b/test/conformance-nominal-queue-only/Generated/MappedNominalQueueOnly/StructuralConformance.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context mapped-nominal-queue-only structural conformance; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context mapped-nominal-queue-only structural conformance; do not edit.
 module Generated.MappedNominalQueueOnly.StructuralConformance
   ( structuralConformanceAssertions
   ) where
diff --git a/test/conformance-nominal-queue-only/Generated/MappedNominalQueueOnly/TemplateWork/Queue.hs b/test/conformance-nominal-queue-only/Generated/MappedNominalQueueOnly/TemplateWork/Queue.hs
--- a/test/conformance-nominal-queue-only/Generated/MappedNominalQueueOnly/TemplateWork/Queue.hs
+++ b/test/conformance-nominal-queue-only/Generated/MappedNominalQueueOnly/TemplateWork/Queue.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from workqueue template_work; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from workqueue template_work; do not edit.
 module Generated.MappedNominalQueueOnly.TemplateWork.Queue
   ( TemplateWork (..)
   , encodeTemplateWork
diff --git a/test/conformance-nominal-queue-only/Generated/MappedNominalQueueOnly/TemplateWork/QueueCodec.hs b/test/conformance-nominal-queue-only/Generated/MappedNominalQueueOnly/TemplateWork/QueueCodec.hs
--- a/test/conformance-nominal-queue-only/Generated/MappedNominalQueueOnly/TemplateWork/QueueCodec.hs
+++ b/test/conformance-nominal-queue-only/Generated/MappedNominalQueueOnly/TemplateWork/QueueCodec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from workqueue template_work; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from workqueue template_work; do not edit.
 -- | Versioned job payload envelope: @{\"v\",\"t\",\"data\"}@.
 --
 -- Deploy workers before producers when raising its schema version. Do not
diff --git a/test/conformance-nominal-queue-only/Generated/MappedNominalQueueOnly/TemplateWork/QueuePolicy.hs b/test/conformance-nominal-queue-only/Generated/MappedNominalQueueOnly/TemplateWork/QueuePolicy.hs
--- a/test/conformance-nominal-queue-only/Generated/MappedNominalQueueOnly/TemplateWork/QueuePolicy.hs
+++ b/test/conformance-nominal-queue-only/Generated/MappedNominalQueueOnly/TemplateWork/QueuePolicy.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from workqueue template_work; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from workqueue template_work; do not edit.
 module Generated.MappedNominalQueueOnly.TemplateWork.QueuePolicy
   ( TemplateWorkOutcome (..)
   , retryPolicy, jobOutcomeFor
diff --git a/test/conformance-nominal-scalars/Generated/NominalScalars/BehaviorSourceMap.hs b/test/conformance-nominal-scalars/Generated/NominalScalars/BehaviorSourceMap.hs
--- a/test/conformance-nominal-scalars/Generated/NominalScalars/BehaviorSourceMap.hs
+++ b/test/conformance-nominal-scalars/Generated/NominalScalars/BehaviorSourceMap.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context nominal-scalars behavior source map; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context nominal-scalars behavior source map; do not edit.
 module Generated.NominalScalars.BehaviorSourceMap
   ( BehaviorSourceLocation (..)
   , behaviorSourceLocation
diff --git a/test/conformance-nominal-scalars/Generated/NominalScalars/Nominal/Shape/OrderStatus.hs b/test/conformance-nominal-scalars/Generated/NominalScalars/Nominal/Shape/OrderStatus.hs
--- a/test/conformance-nominal-scalars/Generated/NominalScalars/Nominal/Shape/OrderStatus.hs
+++ b/test/conformance-nominal-scalars/Generated/NominalScalars/Nominal/Shape/OrderStatus.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from bound nominal enum representation OrderStatus; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from bound nominal enum representation OrderStatus; do not edit.
 module Generated.NominalScalars.Nominal.Shape.OrderStatus (OrderStatusRepresentation (..), orderStatusRepresentationText) where
 
 import Data.Text (Text)
diff --git a/test/conformance-nominal-scalars/Generated/NominalScalars/NominalLedger/BehaviorContract.hs b/test/conformance-nominal-scalars/Generated/NominalScalars/NominalLedger/BehaviorContract.hs
--- a/test/conformance-nominal-scalars/Generated/NominalScalars/NominalLedger/BehaviorContract.hs
+++ b/test/conformance-nominal-scalars/Generated/NominalScalars/NominalLedger/BehaviorContract.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate NominalLedger; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate NominalLedger; do not edit.
 module Generated.NominalScalars.NominalLedger.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -14,6 +14,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -157,7 +158,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -170,7 +182,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-nominal-scalars/Generated/NominalScalars/NominalLedger/Codec.hs b/test/conformance-nominal-scalars/Generated/NominalScalars/NominalLedger/Codec.hs
--- a/test/conformance-nominal-scalars/Generated/NominalScalars/NominalLedger/Codec.hs
+++ b/test/conformance-nominal-scalars/Generated/NominalScalars/NominalLedger/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate NominalLedger; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate NominalLedger; do not edit.
 module Generated.NominalScalars.NominalLedger.Codec (
     nominalLedgerCodec,
     parseNominalLedgerEvent,
diff --git a/test/conformance-nominal-scalars/Generated/NominalScalars/NominalLedger/Domain.hs b/test/conformance-nominal-scalars/Generated/NominalScalars/NominalLedger/Domain.hs
--- a/test/conformance-nominal-scalars/Generated/NominalScalars/NominalLedger/Domain.hs
+++ b/test/conformance-nominal-scalars/Generated/NominalScalars/NominalLedger/Domain.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE DeriveAnyClass #-}
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate NominalLedger; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate NominalLedger; do not edit.
 module Generated.NominalScalars.NominalLedger.Domain where
 
 import Data.Aeson (FromJSON, ToJSON)
diff --git a/test/conformance-nominal-scalars/Generated/NominalScalars/NominalLedger/EventStream.hs b/test/conformance-nominal-scalars/Generated/NominalScalars/NominalLedger/EventStream.hs
--- a/test/conformance-nominal-scalars/Generated/NominalScalars/NominalLedger/EventStream.hs
+++ b/test/conformance-nominal-scalars/Generated/NominalScalars/NominalLedger/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate NominalLedger; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate NominalLedger; do not edit.
 module Generated.NominalScalars.NominalLedger.EventStream
   ( nominalLedgerCategory
   , nominalLedgerCommandCategory
diff --git a/test/conformance-nominal-scalars/Generated/NominalScalars/NominalLedger/Harness.hs b/test/conformance-nominal-scalars/Generated/NominalScalars/NominalLedger/Harness.hs
--- a/test/conformance-nominal-scalars/Generated/NominalScalars/NominalLedger/Harness.hs
+++ b/test/conformance-nominal-scalars/Generated/NominalScalars/NominalLedger/Harness.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate NominalLedger; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate NominalLedger; do not edit.
 module Generated.NominalScalars.NominalLedger.Harness (harnessAssertions) where
 
 import Generated.NominalScalars.NominalLedger.Domain
diff --git a/test/conformance-nominal-scalars/Generated/NominalScalars/NominalLedger/Projection.hs b/test/conformance-nominal-scalars/Generated/NominalScalars/NominalLedger/Projection.hs
--- a/test/conformance-nominal-scalars/Generated/NominalScalars/NominalLedger/Projection.hs
+++ b/test/conformance-nominal-scalars/Generated/NominalScalars/NominalLedger/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate NominalLedger; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate NominalLedger; do not edit.
 module Generated.NominalScalars.NominalLedger.Projection () where
 
 -- No projection declarations are present; this module keeps the generated manifest inventory total.
diff --git a/test/conformance-nominal-scalars/Generated/NominalScalars/NominalLedger/Transducer.hs b/test/conformance-nominal-scalars/Generated/NominalScalars/NominalLedger/Transducer.hs
--- a/test/conformance-nominal-scalars/Generated/NominalScalars/NominalLedger/Transducer.hs
+++ b/test/conformance-nominal-scalars/Generated/NominalScalars/NominalLedger/Transducer.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE OverloadedLabels #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate NominalLedger; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate NominalLedger; do not edit.
 module Generated.NominalScalars.NominalLedger.Transducer
   ( nominalLedgerTransducer
   , nominalLedgerFoldFingerprint
diff --git a/test/conformance-nominal-scalars/Generated/NominalScalars/NominalProjections.hs b/test/conformance-nominal-scalars/Generated/NominalScalars/NominalProjections.hs
--- a/test/conformance-nominal-scalars/Generated/NominalScalars/NominalProjections.hs
+++ b/test/conformance-nominal-scalars/Generated/NominalScalars/NominalProjections.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TypeFamilies #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context nominal-scalars nominal scalar projection facade; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context nominal-scalars nominal scalar projection facade; do not edit.
 module Generated.NominalScalars.NominalProjections where
 
 import Data.KindID qualified as KindID
diff --git a/test/conformance-nominal-scalars/Generated/NominalScalars/ReplayAudit.hs b/test/conformance-nominal-scalars/Generated/NominalScalars/ReplayAudit.hs
--- a/test/conformance-nominal-scalars/Generated/NominalScalars/ReplayAudit.hs
+++ b/test/conformance-nominal-scalars/Generated/NominalScalars/ReplayAudit.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context nominal-scalars replay-audit assembly; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context nominal-scalars replay-audit assembly; do not edit.
 --
 -- Deployment contract:
 --   * replay-neutral diff: no data audit is required;
diff --git a/test/conformance-process-full/Generated/SurgeDemo/BehaviorSourceMap.hs b/test/conformance-process-full/Generated/SurgeDemo/BehaviorSourceMap.hs
--- a/test/conformance-process-full/Generated/SurgeDemo/BehaviorSourceMap.hs
+++ b/test/conformance-process-full/Generated/SurgeDemo/BehaviorSourceMap.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context surge-demo behavior source map; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context surge-demo behavior source map; do not edit.
 module Generated.SurgeDemo.BehaviorSourceMap
   ( BehaviorSourceLocation (..)
   , behaviorSourceLocation
diff --git a/test/conformance-process-full/Generated/SurgeDemo/Hospital/BehaviorContract.hs b/test/conformance-process-full/Generated/SurgeDemo/Hospital/BehaviorContract.hs
--- a/test/conformance-process-full/Generated/SurgeDemo/Hospital/BehaviorContract.hs
+++ b/test/conformance-process-full/Generated/SurgeDemo/Hospital/BehaviorContract.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
 module Generated.SurgeDemo.Hospital.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -13,6 +13,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -156,7 +157,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -169,7 +181,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-process-full/Generated/SurgeDemo/Hospital/Codec.hs b/test/conformance-process-full/Generated/SurgeDemo/Hospital/Codec.hs
--- a/test/conformance-process-full/Generated/SurgeDemo/Hospital/Codec.hs
+++ b/test/conformance-process-full/Generated/SurgeDemo/Hospital/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
 module Generated.SurgeDemo.Hospital.Codec (
     hospitalCodec,
     parseHospitalEvent,
diff --git a/test/conformance-process-full/Generated/SurgeDemo/Hospital/Domain.hs b/test/conformance-process-full/Generated/SurgeDemo/Hospital/Domain.hs
--- a/test/conformance-process-full/Generated/SurgeDemo/Hospital/Domain.hs
+++ b/test/conformance-process-full/Generated/SurgeDemo/Hospital/Domain.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
 module Generated.SurgeDemo.Hospital.Domain where
 
 import GHC.Generics (Generic)
diff --git a/test/conformance-process-full/Generated/SurgeDemo/Hospital/EventStream.hs b/test/conformance-process-full/Generated/SurgeDemo/Hospital/EventStream.hs
--- a/test/conformance-process-full/Generated/SurgeDemo/Hospital/EventStream.hs
+++ b/test/conformance-process-full/Generated/SurgeDemo/Hospital/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
 module Generated.SurgeDemo.Hospital.EventStream
   ( hospitalCategory
   , hospitalCommandCategory
diff --git a/test/conformance-process-full/Generated/SurgeDemo/Hospital/Harness.hs b/test/conformance-process-full/Generated/SurgeDemo/Hospital/Harness.hs
--- a/test/conformance-process-full/Generated/SurgeDemo/Hospital/Harness.hs
+++ b/test/conformance-process-full/Generated/SurgeDemo/Hospital/Harness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
 module Generated.SurgeDemo.Hospital.Harness (harnessAssertions) where
 
 import Generated.SurgeDemo.Hospital.Domain
diff --git a/test/conformance-process-full/Generated/SurgeDemo/Hospital/Projection.hs b/test/conformance-process-full/Generated/SurgeDemo/Hospital/Projection.hs
--- a/test/conformance-process-full/Generated/SurgeDemo/Hospital/Projection.hs
+++ b/test/conformance-process-full/Generated/SurgeDemo/Hospital/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
 module Generated.SurgeDemo.Hospital.Projection
   ( hospitalProjection
   , hospitalStatusFor
diff --git a/test/conformance-process-full/Generated/SurgeDemo/Hospital/Transducer.hs b/test/conformance-process-full/Generated/SurgeDemo/Hospital/Transducer.hs
--- a/test/conformance-process-full/Generated/SurgeDemo/Hospital/Transducer.hs
+++ b/test/conformance-process-full/Generated/SurgeDemo/Hospital/Transducer.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
 module Generated.SurgeDemo.Hospital.Transducer
   ( hospitalTransducer
   , hospitalFoldFingerprint
diff --git a/test/conformance-process-full/Generated/SurgeDemo/Nominals.hs b/test/conformance-process-full/Generated/SurgeDemo/Nominals.hs
--- a/test/conformance-process-full/Generated/SurgeDemo/Nominals.hs
+++ b/test/conformance-process-full/Generated/SurgeDemo/Nominals.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context surge-demo generated nominal declarations; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context surge-demo generated nominal declarations; do not edit.
 module Generated.SurgeDemo.Nominals
   ( HospitalId
   , parseHospitalId
diff --git a/test/conformance-process-full/Generated/SurgeDemo/Nominals/Internal.hs b/test/conformance-process-full/Generated/SurgeDemo/Nominals/Internal.hs
--- a/test/conformance-process-full/Generated/SurgeDemo/Nominals/Internal.hs
+++ b/test/conformance-process-full/Generated/SurgeDemo/Nominals/Internal.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context surge-demo generated nominal ID internals; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context surge-demo generated nominal ID internals; do not edit.
 module Generated.SurgeDemo.Nominals.Internal
   ( HospitalId
   , parseHospitalId
diff --git a/test/conformance-process-full/Generated/SurgeDemo/ReplayAudit.hs b/test/conformance-process-full/Generated/SurgeDemo/ReplayAudit.hs
--- a/test/conformance-process-full/Generated/SurgeDemo/ReplayAudit.hs
+++ b/test/conformance-process-full/Generated/SurgeDemo/ReplayAudit.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context surge-demo replay-audit assembly; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context surge-demo replay-audit assembly; do not edit.
 --
 -- Deployment contract:
 --   * replay-neutral diff: no data audit is required;
diff --git a/test/conformance-process-full/Generated/SurgeDemo/Surge/BehaviorContract.hs b/test/conformance-process-full/Generated/SurgeDemo/Surge/BehaviorContract.hs
--- a/test/conformance-process-full/Generated/SurgeDemo/Surge/BehaviorContract.hs
+++ b/test/conformance-process-full/Generated/SurgeDemo/Surge/BehaviorContract.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.
 module Generated.SurgeDemo.Surge.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -13,6 +13,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -204,7 +205,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -217,7 +229,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-process-full/Generated/SurgeDemo/Surge/Codec.hs b/test/conformance-process-full/Generated/SurgeDemo/Surge/Codec.hs
--- a/test/conformance-process-full/Generated/SurgeDemo/Surge/Codec.hs
+++ b/test/conformance-process-full/Generated/SurgeDemo/Surge/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.
 module Generated.SurgeDemo.Surge.Codec (
     surgeCodec,
     parseSurgeEvent,
diff --git a/test/conformance-process-full/Generated/SurgeDemo/Surge/Domain.hs b/test/conformance-process-full/Generated/SurgeDemo/Surge/Domain.hs
--- a/test/conformance-process-full/Generated/SurgeDemo/Surge/Domain.hs
+++ b/test/conformance-process-full/Generated/SurgeDemo/Surge/Domain.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.
 module Generated.SurgeDemo.Surge.Domain where
 
 import GHC.Generics (Generic)
diff --git a/test/conformance-process-full/Generated/SurgeDemo/Surge/EventStream.hs b/test/conformance-process-full/Generated/SurgeDemo/Surge/EventStream.hs
--- a/test/conformance-process-full/Generated/SurgeDemo/Surge/EventStream.hs
+++ b/test/conformance-process-full/Generated/SurgeDemo/Surge/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.
 module Generated.SurgeDemo.Surge.EventStream
   ( surgeCategory
   , surgeCommandCategory
diff --git a/test/conformance-process-full/Generated/SurgeDemo/Surge/Harness.hs b/test/conformance-process-full/Generated/SurgeDemo/Surge/Harness.hs
--- a/test/conformance-process-full/Generated/SurgeDemo/Surge/Harness.hs
+++ b/test/conformance-process-full/Generated/SurgeDemo/Surge/Harness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.
 module Generated.SurgeDemo.Surge.Harness (harnessAssertions) where
 
 import Generated.SurgeDemo.Surge.Domain
diff --git a/test/conformance-process-full/Generated/SurgeDemo/Surge/Projection.hs b/test/conformance-process-full/Generated/SurgeDemo/Surge/Projection.hs
--- a/test/conformance-process-full/Generated/SurgeDemo/Surge/Projection.hs
+++ b/test/conformance-process-full/Generated/SurgeDemo/Surge/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.
 module Generated.SurgeDemo.Surge.Projection
   ( surgeProjection
   , surgeStatusFor
diff --git a/test/conformance-process-full/Generated/SurgeDemo/Surge/Transducer.hs b/test/conformance-process-full/Generated/SurgeDemo/Surge/Transducer.hs
--- a/test/conformance-process-full/Generated/SurgeDemo/Surge/Transducer.hs
+++ b/test/conformance-process-full/Generated/SurgeDemo/Surge/Transducer.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.
 module Generated.SurgeDemo.Surge.Transducer
   ( surgeTransducer
   , surgeFoldFingerprint
diff --git a/test/conformance-process-full/Generated/SurgeDemo/SurgeFlow/Process.hs b/test/conformance-process-full/Generated/SurgeDemo/SurgeFlow/Process.hs
--- a/test/conformance-process-full/Generated/SurgeDemo/SurgeFlow/Process.hs
+++ b/test/conformance-process-full/Generated/SurgeDemo/SurgeFlow/Process.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from process SurgeFlow; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from process SurgeFlow; do not edit.
 module Generated.SurgeDemo.SurgeFlow.Process
   ( surgeFlowProcessName
   , surgeFlowCategory
diff --git a/test/conformance-process-full/Generated/SurgeDemo/SurgeFlow/ProcessHarness.hs b/test/conformance-process-full/Generated/SurgeDemo/SurgeFlow/ProcessHarness.hs
--- a/test/conformance-process-full/Generated/SurgeDemo/SurgeFlow/ProcessHarness.hs
+++ b/test/conformance-process-full/Generated/SurgeDemo/SurgeFlow/ProcessHarness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from process SurgeFlow; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from process SurgeFlow; do not edit.
 module Generated.SurgeDemo.SurgeFlow.ProcessHarness (processHarnessValues) where
 
 -- | (label, value): the spec's deterministic process/timer decisions,
diff --git a/test/conformance-process-reactions/Generated/ProcessReactions/AuditOnly/Input.hs b/test/conformance-process-reactions/Generated/ProcessReactions/AuditOnly/Input.hs
--- a/test/conformance-process-reactions/Generated/ProcessReactions/AuditOnly/Input.hs
+++ b/test/conformance-process-reactions/Generated/ProcessReactions/AuditOnly/Input.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE DeriveAnyClass #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from process input AuditOnly; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from process input AuditOnly; do not edit.
 module Generated.ProcessReactions.AuditOnly.Input (AuditOnlyInput (..)) where
 
 import Data.Aeson (FromJSON, ToJSON)
diff --git a/test/conformance-process-reactions/Generated/ProcessReactions/AuditOnly/Process.hs b/test/conformance-process-reactions/Generated/ProcessReactions/AuditOnly/Process.hs
--- a/test/conformance-process-reactions/Generated/ProcessReactions/AuditOnly/Process.hs
+++ b/test/conformance-process-reactions/Generated/ProcessReactions/AuditOnly/Process.hs
@@ -1,5 +1,5 @@
 {-# OPTIONS_GHC -Wno-missing-signatures #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from process reaction AuditOnly; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from process reaction AuditOnly; do not edit.
 module Generated.ProcessReactions.AuditOnly.Process
   ( AuditOnlyInput (..)
   , auditOnlyProcessName
diff --git a/test/conformance-process-reactions/Generated/ProcessReactions/AuditOnly/ProcessHarness.hs b/test/conformance-process-reactions/Generated/ProcessReactions/AuditOnly/ProcessHarness.hs
--- a/test/conformance-process-reactions/Generated/ProcessReactions/AuditOnly/ProcessHarness.hs
+++ b/test/conformance-process-reactions/Generated/ProcessReactions/AuditOnly/ProcessHarness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from process AuditOnly; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from process AuditOnly; do not edit.
 module Generated.ProcessReactions.AuditOnly.ProcessHarness (processHarnessValues) where
 
 -- | (label, value): the spec's deterministic process/timer decisions,
diff --git a/test/conformance-process-reactions/Generated/ProcessReactions/BehaviorSourceMap.hs b/test/conformance-process-reactions/Generated/ProcessReactions/BehaviorSourceMap.hs
--- a/test/conformance-process-reactions/Generated/ProcessReactions/BehaviorSourceMap.hs
+++ b/test/conformance-process-reactions/Generated/ProcessReactions/BehaviorSourceMap.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context process-reactions behavior source map; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context process-reactions behavior source map; do not edit.
 module Generated.ProcessReactions.BehaviorSourceMap
   ( BehaviorSourceLocation (..)
   , behaviorSourceLocation
diff --git a/test/conformance-process-reactions/Generated/ProcessReactions/Incident/BehaviorContract.hs b/test/conformance-process-reactions/Generated/ProcessReactions/Incident/BehaviorContract.hs
--- a/test/conformance-process-reactions/Generated/ProcessReactions/Incident/BehaviorContract.hs
+++ b/test/conformance-process-reactions/Generated/ProcessReactions/Incident/BehaviorContract.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.
 module Generated.ProcessReactions.Incident.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -13,6 +13,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -144,7 +145,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -157,7 +169,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-process-reactions/Generated/ProcessReactions/Incident/Codec.hs b/test/conformance-process-reactions/Generated/ProcessReactions/Incident/Codec.hs
--- a/test/conformance-process-reactions/Generated/ProcessReactions/Incident/Codec.hs
+++ b/test/conformance-process-reactions/Generated/ProcessReactions/Incident/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.
 module Generated.ProcessReactions.Incident.Codec (
     incidentCodec,
     parseIncidentEvent,
diff --git a/test/conformance-process-reactions/Generated/ProcessReactions/Incident/Domain.hs b/test/conformance-process-reactions/Generated/ProcessReactions/Incident/Domain.hs
--- a/test/conformance-process-reactions/Generated/ProcessReactions/Incident/Domain.hs
+++ b/test/conformance-process-reactions/Generated/ProcessReactions/Incident/Domain.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.
 module Generated.ProcessReactions.Incident.Domain where
 
 import GHC.Generics (Generic)
diff --git a/test/conformance-process-reactions/Generated/ProcessReactions/Incident/EventStream.hs b/test/conformance-process-reactions/Generated/ProcessReactions/Incident/EventStream.hs
--- a/test/conformance-process-reactions/Generated/ProcessReactions/Incident/EventStream.hs
+++ b/test/conformance-process-reactions/Generated/ProcessReactions/Incident/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.
 module Generated.ProcessReactions.Incident.EventStream
   ( incidentCategory
   , incidentCommandCategory
diff --git a/test/conformance-process-reactions/Generated/ProcessReactions/Incident/Harness.hs b/test/conformance-process-reactions/Generated/ProcessReactions/Incident/Harness.hs
--- a/test/conformance-process-reactions/Generated/ProcessReactions/Incident/Harness.hs
+++ b/test/conformance-process-reactions/Generated/ProcessReactions/Incident/Harness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.
 module Generated.ProcessReactions.Incident.Harness (harnessAssertions) where
 
 import Generated.ProcessReactions.Incident.Domain
diff --git a/test/conformance-process-reactions/Generated/ProcessReactions/Incident/Projection.hs b/test/conformance-process-reactions/Generated/ProcessReactions/Incident/Projection.hs
--- a/test/conformance-process-reactions/Generated/ProcessReactions/Incident/Projection.hs
+++ b/test/conformance-process-reactions/Generated/ProcessReactions/Incident/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.
 module Generated.ProcessReactions.Incident.Projection () where
 
 -- No projection declarations are present; this module keeps the generated manifest inventory total.
diff --git a/test/conformance-process-reactions/Generated/ProcessReactions/Incident/Transducer.hs b/test/conformance-process-reactions/Generated/ProcessReactions/Incident/Transducer.hs
--- a/test/conformance-process-reactions/Generated/ProcessReactions/Incident/Transducer.hs
+++ b/test/conformance-process-reactions/Generated/ProcessReactions/Incident/Transducer.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.
 module Generated.ProcessReactions.Incident.Transducer
   ( incidentTransducer
   , incidentFoldFingerprint
diff --git a/test/conformance-process-reactions/Generated/ProcessReactions/IncidentReaction/Input.hs b/test/conformance-process-reactions/Generated/ProcessReactions/IncidentReaction/Input.hs
--- a/test/conformance-process-reactions/Generated/ProcessReactions/IncidentReaction/Input.hs
+++ b/test/conformance-process-reactions/Generated/ProcessReactions/IncidentReaction/Input.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE DeriveAnyClass #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from process input IncidentReaction; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from process input IncidentReaction; do not edit.
 module Generated.ProcessReactions.IncidentReaction.Input (IncidentReactionInput (..)) where
 
 import Data.Aeson (FromJSON, ToJSON)
diff --git a/test/conformance-process-reactions/Generated/ProcessReactions/IncidentReaction/Process.hs b/test/conformance-process-reactions/Generated/ProcessReactions/IncidentReaction/Process.hs
--- a/test/conformance-process-reactions/Generated/ProcessReactions/IncidentReaction/Process.hs
+++ b/test/conformance-process-reactions/Generated/ProcessReactions/IncidentReaction/Process.hs
@@ -1,5 +1,5 @@
 {-# OPTIONS_GHC -Wno-missing-signatures #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from process reaction IncidentReaction; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from process reaction IncidentReaction; do not edit.
 module Generated.ProcessReactions.IncidentReaction.Process
   ( IncidentReactionInput (..)
   , incidentReactionProcessName
diff --git a/test/conformance-process-reactions/Generated/ProcessReactions/IncidentReaction/ProcessHarness.hs b/test/conformance-process-reactions/Generated/ProcessReactions/IncidentReaction/ProcessHarness.hs
--- a/test/conformance-process-reactions/Generated/ProcessReactions/IncidentReaction/ProcessHarness.hs
+++ b/test/conformance-process-reactions/Generated/ProcessReactions/IncidentReaction/ProcessHarness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from process IncidentReaction; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from process IncidentReaction; do not edit.
 module Generated.ProcessReactions.IncidentReaction.ProcessHarness (processHarnessValues) where
 
 -- | (label, value): the spec's deterministic process/timer decisions,
diff --git a/test/conformance-process-reactions/Generated/ProcessReactions/IncidentSaga/BehaviorContract.hs b/test/conformance-process-reactions/Generated/ProcessReactions/IncidentSaga/BehaviorContract.hs
--- a/test/conformance-process-reactions/Generated/ProcessReactions/IncidentSaga/BehaviorContract.hs
+++ b/test/conformance-process-reactions/Generated/ProcessReactions/IncidentSaga/BehaviorContract.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate IncidentSaga; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate IncidentSaga; do not edit.
 module Generated.ProcessReactions.IncidentSaga.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -13,6 +13,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -156,7 +157,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -169,7 +181,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-process-reactions/Generated/ProcessReactions/IncidentSaga/Codec.hs b/test/conformance-process-reactions/Generated/ProcessReactions/IncidentSaga/Codec.hs
--- a/test/conformance-process-reactions/Generated/ProcessReactions/IncidentSaga/Codec.hs
+++ b/test/conformance-process-reactions/Generated/ProcessReactions/IncidentSaga/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate IncidentSaga; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate IncidentSaga; do not edit.
 module Generated.ProcessReactions.IncidentSaga.Codec (
     incidentSagaCodec,
     parseIncidentSagaEvent,
diff --git a/test/conformance-process-reactions/Generated/ProcessReactions/IncidentSaga/Domain.hs b/test/conformance-process-reactions/Generated/ProcessReactions/IncidentSaga/Domain.hs
--- a/test/conformance-process-reactions/Generated/ProcessReactions/IncidentSaga/Domain.hs
+++ b/test/conformance-process-reactions/Generated/ProcessReactions/IncidentSaga/Domain.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate IncidentSaga; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate IncidentSaga; do not edit.
 module Generated.ProcessReactions.IncidentSaga.Domain where
 
 import GHC.Generics (Generic)
diff --git a/test/conformance-process-reactions/Generated/ProcessReactions/IncidentSaga/EventStream.hs b/test/conformance-process-reactions/Generated/ProcessReactions/IncidentSaga/EventStream.hs
--- a/test/conformance-process-reactions/Generated/ProcessReactions/IncidentSaga/EventStream.hs
+++ b/test/conformance-process-reactions/Generated/ProcessReactions/IncidentSaga/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate IncidentSaga; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate IncidentSaga; do not edit.
 module Generated.ProcessReactions.IncidentSaga.EventStream
   ( incidentSagaCategory
   , incidentSagaCommandCategory
diff --git a/test/conformance-process-reactions/Generated/ProcessReactions/IncidentSaga/Harness.hs b/test/conformance-process-reactions/Generated/ProcessReactions/IncidentSaga/Harness.hs
--- a/test/conformance-process-reactions/Generated/ProcessReactions/IncidentSaga/Harness.hs
+++ b/test/conformance-process-reactions/Generated/ProcessReactions/IncidentSaga/Harness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate IncidentSaga; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate IncidentSaga; do not edit.
 module Generated.ProcessReactions.IncidentSaga.Harness (harnessAssertions) where
 
 import Generated.ProcessReactions.IncidentSaga.Domain
diff --git a/test/conformance-process-reactions/Generated/ProcessReactions/IncidentSaga/Projection.hs b/test/conformance-process-reactions/Generated/ProcessReactions/IncidentSaga/Projection.hs
--- a/test/conformance-process-reactions/Generated/ProcessReactions/IncidentSaga/Projection.hs
+++ b/test/conformance-process-reactions/Generated/ProcessReactions/IncidentSaga/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate IncidentSaga; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate IncidentSaga; do not edit.
 module Generated.ProcessReactions.IncidentSaga.Projection () where
 
 -- No projection declarations are present; this module keeps the generated manifest inventory total.
diff --git a/test/conformance-process-reactions/Generated/ProcessReactions/IncidentSaga/Transducer.hs b/test/conformance-process-reactions/Generated/ProcessReactions/IncidentSaga/Transducer.hs
--- a/test/conformance-process-reactions/Generated/ProcessReactions/IncidentSaga/Transducer.hs
+++ b/test/conformance-process-reactions/Generated/ProcessReactions/IncidentSaga/Transducer.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate IncidentSaga; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate IncidentSaga; do not edit.
 module Generated.ProcessReactions.IncidentSaga.Transducer
   ( incidentSagaTransducer
   , incidentSagaFoldFingerprint
diff --git a/test/conformance-process-reactions/Generated/ProcessReactions/Nominals.hs b/test/conformance-process-reactions/Generated/ProcessReactions/Nominals.hs
--- a/test/conformance-process-reactions/Generated/ProcessReactions/Nominals.hs
+++ b/test/conformance-process-reactions/Generated/ProcessReactions/Nominals.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE DeriveAnyClass #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context process-reactions generated nominal declarations; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context process-reactions generated nominal declarations; do not edit.
 module Generated.ProcessReactions.Nominals
   ( IncidentId
   , parseIncidentId
diff --git a/test/conformance-process-reactions/Generated/ProcessReactions/Nominals/Internal.hs b/test/conformance-process-reactions/Generated/ProcessReactions/Nominals/Internal.hs
--- a/test/conformance-process-reactions/Generated/ProcessReactions/Nominals/Internal.hs
+++ b/test/conformance-process-reactions/Generated/ProcessReactions/Nominals/Internal.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context process-reactions generated nominal ID internals; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context process-reactions generated nominal ID internals; do not edit.
 module Generated.ProcessReactions.Nominals.Internal
   ( IncidentId
   , parseIncidentId
diff --git a/test/conformance-process-reactions/Generated/ProcessReactions/ReplayAudit.hs b/test/conformance-process-reactions/Generated/ProcessReactions/ReplayAudit.hs
--- a/test/conformance-process-reactions/Generated/ProcessReactions/ReplayAudit.hs
+++ b/test/conformance-process-reactions/Generated/ProcessReactions/ReplayAudit.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context process-reactions replay-audit assembly; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context process-reactions replay-audit assembly; do not edit.
 --
 -- Deployment contract:
 --   * replay-neutral diff: no data audit is required;
diff --git a/test/conformance-process-reactions/Generated/ProcessReactions/ScalingReaction/Input.hs b/test/conformance-process-reactions/Generated/ProcessReactions/ScalingReaction/Input.hs
--- a/test/conformance-process-reactions/Generated/ProcessReactions/ScalingReaction/Input.hs
+++ b/test/conformance-process-reactions/Generated/ProcessReactions/ScalingReaction/Input.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE DeriveAnyClass #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from process input ScalingReaction; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from process input ScalingReaction; do not edit.
 module Generated.ProcessReactions.ScalingReaction.Input (ScalingReactionInput (..)) where
 
 import Data.Aeson (FromJSON, ToJSON)
diff --git a/test/conformance-process-reactions/Generated/ProcessReactions/ScalingReaction/Process.hs b/test/conformance-process-reactions/Generated/ProcessReactions/ScalingReaction/Process.hs
--- a/test/conformance-process-reactions/Generated/ProcessReactions/ScalingReaction/Process.hs
+++ b/test/conformance-process-reactions/Generated/ProcessReactions/ScalingReaction/Process.hs
@@ -1,5 +1,5 @@
 {-# OPTIONS_GHC -Wno-missing-signatures #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from process reaction ScalingReaction; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from process reaction ScalingReaction; do not edit.
 module Generated.ProcessReactions.ScalingReaction.Process
   ( ScalingReactionInput (..)
   , scalingReactionProcessName
diff --git a/test/conformance-process-reactions/Generated/ProcessReactions/ScalingReaction/ProcessHarness.hs b/test/conformance-process-reactions/Generated/ProcessReactions/ScalingReaction/ProcessHarness.hs
--- a/test/conformance-process-reactions/Generated/ProcessReactions/ScalingReaction/ProcessHarness.hs
+++ b/test/conformance-process-reactions/Generated/ProcessReactions/ScalingReaction/ProcessHarness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from process ScalingReaction; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from process ScalingReaction; do not edit.
 module Generated.ProcessReactions.ScalingReaction.ProcessHarness (processHarnessValues) where
 
 -- | (label, value): the spec's deterministic process/timer decisions,
diff --git a/test/conformance-process-runtime/Generated/HospitalCapacity/BehaviorSourceMap.hs b/test/conformance-process-runtime/Generated/HospitalCapacity/BehaviorSourceMap.hs
--- a/test/conformance-process-runtime/Generated/HospitalCapacity/BehaviorSourceMap.hs
+++ b/test/conformance-process-runtime/Generated/HospitalCapacity/BehaviorSourceMap.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context hospital-capacity behavior source map; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context hospital-capacity behavior source map; do not edit.
 module Generated.HospitalCapacity.BehaviorSourceMap
   ( BehaviorSourceLocation (..)
   , behaviorSourceLocation
diff --git a/test/conformance-process-runtime/Generated/HospitalCapacity/Hospital/BehaviorContract.hs b/test/conformance-process-runtime/Generated/HospitalCapacity/Hospital/BehaviorContract.hs
--- a/test/conformance-process-runtime/Generated/HospitalCapacity/Hospital/BehaviorContract.hs
+++ b/test/conformance-process-runtime/Generated/HospitalCapacity/Hospital/BehaviorContract.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
 module Generated.HospitalCapacity.Hospital.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -13,6 +13,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -144,7 +145,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -157,7 +169,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-process-runtime/Generated/HospitalCapacity/Hospital/Codec.hs b/test/conformance-process-runtime/Generated/HospitalCapacity/Hospital/Codec.hs
--- a/test/conformance-process-runtime/Generated/HospitalCapacity/Hospital/Codec.hs
+++ b/test/conformance-process-runtime/Generated/HospitalCapacity/Hospital/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
 module Generated.HospitalCapacity.Hospital.Codec (
     hospitalCodec,
     parseHospitalEvent,
diff --git a/test/conformance-process-runtime/Generated/HospitalCapacity/Hospital/Domain.hs b/test/conformance-process-runtime/Generated/HospitalCapacity/Hospital/Domain.hs
--- a/test/conformance-process-runtime/Generated/HospitalCapacity/Hospital/Domain.hs
+++ b/test/conformance-process-runtime/Generated/HospitalCapacity/Hospital/Domain.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
 module Generated.HospitalCapacity.Hospital.Domain where
 
 import GHC.Generics (Generic)
diff --git a/test/conformance-process-runtime/Generated/HospitalCapacity/Hospital/EventStream.hs b/test/conformance-process-runtime/Generated/HospitalCapacity/Hospital/EventStream.hs
--- a/test/conformance-process-runtime/Generated/HospitalCapacity/Hospital/EventStream.hs
+++ b/test/conformance-process-runtime/Generated/HospitalCapacity/Hospital/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
 module Generated.HospitalCapacity.Hospital.EventStream
   ( hospitalCategory
   , hospitalCommandCategory
diff --git a/test/conformance-process-runtime/Generated/HospitalCapacity/Hospital/Harness.hs b/test/conformance-process-runtime/Generated/HospitalCapacity/Hospital/Harness.hs
--- a/test/conformance-process-runtime/Generated/HospitalCapacity/Hospital/Harness.hs
+++ b/test/conformance-process-runtime/Generated/HospitalCapacity/Hospital/Harness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
 module Generated.HospitalCapacity.Hospital.Harness (harnessAssertions) where
 
 import Generated.HospitalCapacity.Hospital.Domain
diff --git a/test/conformance-process-runtime/Generated/HospitalCapacity/Hospital/Projection.hs b/test/conformance-process-runtime/Generated/HospitalCapacity/Hospital/Projection.hs
--- a/test/conformance-process-runtime/Generated/HospitalCapacity/Hospital/Projection.hs
+++ b/test/conformance-process-runtime/Generated/HospitalCapacity/Hospital/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
 module Generated.HospitalCapacity.Hospital.Projection () where
 
 -- No projection declarations are present; this module keeps the generated manifest inventory total.
diff --git a/test/conformance-process-runtime/Generated/HospitalCapacity/Hospital/Transducer.hs b/test/conformance-process-runtime/Generated/HospitalCapacity/Hospital/Transducer.hs
--- a/test/conformance-process-runtime/Generated/HospitalCapacity/Hospital/Transducer.hs
+++ b/test/conformance-process-runtime/Generated/HospitalCapacity/Hospital/Transducer.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
 module Generated.HospitalCapacity.Hospital.Transducer
   ( hospitalTransducer
   , hospitalFoldFingerprint
diff --git a/test/conformance-process-runtime/Generated/HospitalCapacity/HospitalSurge/Process.hs b/test/conformance-process-runtime/Generated/HospitalCapacity/HospitalSurge/Process.hs
--- a/test/conformance-process-runtime/Generated/HospitalCapacity/HospitalSurge/Process.hs
+++ b/test/conformance-process-runtime/Generated/HospitalCapacity/HospitalSurge/Process.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from process HospitalSurge; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from process HospitalSurge; do not edit.
 module Generated.HospitalCapacity.HospitalSurge.Process
   ( hospitalSurgeProcessName
   , hospitalSurgeCategory
diff --git a/test/conformance-process-runtime/Generated/HospitalCapacity/HospitalSurge/ProcessHarness.hs b/test/conformance-process-runtime/Generated/HospitalCapacity/HospitalSurge/ProcessHarness.hs
--- a/test/conformance-process-runtime/Generated/HospitalCapacity/HospitalSurge/ProcessHarness.hs
+++ b/test/conformance-process-runtime/Generated/HospitalCapacity/HospitalSurge/ProcessHarness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from process HospitalSurge; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from process HospitalSurge; do not edit.
 module Generated.HospitalCapacity.HospitalSurge.ProcessHarness (processHarnessValues) where
 
 -- | (label, value): the spec's deterministic process/timer decisions,
diff --git a/test/conformance-process-runtime/Generated/HospitalCapacity/Nominals.hs b/test/conformance-process-runtime/Generated/HospitalCapacity/Nominals.hs
--- a/test/conformance-process-runtime/Generated/HospitalCapacity/Nominals.hs
+++ b/test/conformance-process-runtime/Generated/HospitalCapacity/Nominals.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context hospital-capacity generated nominal declarations; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context hospital-capacity generated nominal declarations; do not edit.
 module Generated.HospitalCapacity.Nominals
   ( CommandId
   , parseCommandId
diff --git a/test/conformance-process-runtime/Generated/HospitalCapacity/Nominals/Internal.hs b/test/conformance-process-runtime/Generated/HospitalCapacity/Nominals/Internal.hs
--- a/test/conformance-process-runtime/Generated/HospitalCapacity/Nominals/Internal.hs
+++ b/test/conformance-process-runtime/Generated/HospitalCapacity/Nominals/Internal.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context hospital-capacity generated nominal ID internals; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context hospital-capacity generated nominal ID internals; do not edit.
 module Generated.HospitalCapacity.Nominals.Internal
   ( CommandId
   , parseCommandId
diff --git a/test/conformance-process-runtime/Generated/HospitalCapacity/ReplayAudit.hs b/test/conformance-process-runtime/Generated/HospitalCapacity/ReplayAudit.hs
--- a/test/conformance-process-runtime/Generated/HospitalCapacity/ReplayAudit.hs
+++ b/test/conformance-process-runtime/Generated/HospitalCapacity/ReplayAudit.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context hospital-capacity replay-audit assembly; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context hospital-capacity replay-audit assembly; do not edit.
 --
 -- Deployment contract:
 --   * replay-neutral diff: no data audit is required;
diff --git a/test/conformance-process-runtime/Generated/HospitalCapacity/Surge/BehaviorContract.hs b/test/conformance-process-runtime/Generated/HospitalCapacity/Surge/BehaviorContract.hs
--- a/test/conformance-process-runtime/Generated/HospitalCapacity/Surge/BehaviorContract.hs
+++ b/test/conformance-process-runtime/Generated/HospitalCapacity/Surge/BehaviorContract.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.
 module Generated.HospitalCapacity.Surge.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -13,6 +13,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -156,7 +157,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -169,7 +181,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-process-runtime/Generated/HospitalCapacity/Surge/Codec.hs b/test/conformance-process-runtime/Generated/HospitalCapacity/Surge/Codec.hs
--- a/test/conformance-process-runtime/Generated/HospitalCapacity/Surge/Codec.hs
+++ b/test/conformance-process-runtime/Generated/HospitalCapacity/Surge/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.
 module Generated.HospitalCapacity.Surge.Codec (
     surgeCodec,
     parseSurgeEvent,
diff --git a/test/conformance-process-runtime/Generated/HospitalCapacity/Surge/Domain.hs b/test/conformance-process-runtime/Generated/HospitalCapacity/Surge/Domain.hs
--- a/test/conformance-process-runtime/Generated/HospitalCapacity/Surge/Domain.hs
+++ b/test/conformance-process-runtime/Generated/HospitalCapacity/Surge/Domain.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.
 module Generated.HospitalCapacity.Surge.Domain where
 
 import Data.Text (Text)
diff --git a/test/conformance-process-runtime/Generated/HospitalCapacity/Surge/EventStream.hs b/test/conformance-process-runtime/Generated/HospitalCapacity/Surge/EventStream.hs
--- a/test/conformance-process-runtime/Generated/HospitalCapacity/Surge/EventStream.hs
+++ b/test/conformance-process-runtime/Generated/HospitalCapacity/Surge/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.
 module Generated.HospitalCapacity.Surge.EventStream
   ( surgeCategory
   , surgeCommandCategory
diff --git a/test/conformance-process-runtime/Generated/HospitalCapacity/Surge/Harness.hs b/test/conformance-process-runtime/Generated/HospitalCapacity/Surge/Harness.hs
--- a/test/conformance-process-runtime/Generated/HospitalCapacity/Surge/Harness.hs
+++ b/test/conformance-process-runtime/Generated/HospitalCapacity/Surge/Harness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.
 module Generated.HospitalCapacity.Surge.Harness (harnessAssertions) where
 
 import Generated.HospitalCapacity.Surge.Domain
diff --git a/test/conformance-process-runtime/Generated/HospitalCapacity/Surge/Projection.hs b/test/conformance-process-runtime/Generated/HospitalCapacity/Surge/Projection.hs
--- a/test/conformance-process-runtime/Generated/HospitalCapacity/Surge/Projection.hs
+++ b/test/conformance-process-runtime/Generated/HospitalCapacity/Surge/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.
 module Generated.HospitalCapacity.Surge.Projection () where
 
 -- No projection declarations are present; this module keeps the generated manifest inventory total.
diff --git a/test/conformance-process-runtime/Generated/HospitalCapacity/Surge/Transducer.hs b/test/conformance-process-runtime/Generated/HospitalCapacity/Surge/Transducer.hs
--- a/test/conformance-process-runtime/Generated/HospitalCapacity/Surge/Transducer.hs
+++ b/test/conformance-process-runtime/Generated/HospitalCapacity/Surge/Transducer.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.
 module Generated.HospitalCapacity.Surge.Transducer
   ( surgeTransducer
   , surgeFoldFingerprint
diff --git a/test/conformance-process-state-authority/Generated/IncidentResponse/BehaviorSourceMap.hs b/test/conformance-process-state-authority/Generated/IncidentResponse/BehaviorSourceMap.hs
--- a/test/conformance-process-state-authority/Generated/IncidentResponse/BehaviorSourceMap.hs
+++ b/test/conformance-process-state-authority/Generated/IncidentResponse/BehaviorSourceMap.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context incident-response behavior source map; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context incident-response behavior source map; do not edit.
 module Generated.IncidentResponse.BehaviorSourceMap
   ( BehaviorSourceLocation (..)
   , behaviorSourceLocation
diff --git a/test/conformance-process-state-authority/Generated/IncidentResponse/Escalation/BehaviorContract.hs b/test/conformance-process-state-authority/Generated/IncidentResponse/Escalation/BehaviorContract.hs
--- a/test/conformance-process-state-authority/Generated/IncidentResponse/Escalation/BehaviorContract.hs
+++ b/test/conformance-process-state-authority/Generated/IncidentResponse/Escalation/BehaviorContract.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate Escalation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Escalation; do not edit.
 module Generated.IncidentResponse.Escalation.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -13,6 +13,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -233,7 +234,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -246,7 +258,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-process-state-authority/Generated/IncidentResponse/Escalation/Codec.hs b/test/conformance-process-state-authority/Generated/IncidentResponse/Escalation/Codec.hs
--- a/test/conformance-process-state-authority/Generated/IncidentResponse/Escalation/Codec.hs
+++ b/test/conformance-process-state-authority/Generated/IncidentResponse/Escalation/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate Escalation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Escalation; do not edit.
 module Generated.IncidentResponse.Escalation.Codec (
     escalationCodec,
     parseEscalationEvent,
diff --git a/test/conformance-process-state-authority/Generated/IncidentResponse/Escalation/Domain.hs b/test/conformance-process-state-authority/Generated/IncidentResponse/Escalation/Domain.hs
--- a/test/conformance-process-state-authority/Generated/IncidentResponse/Escalation/Domain.hs
+++ b/test/conformance-process-state-authority/Generated/IncidentResponse/Escalation/Domain.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate Escalation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Escalation; do not edit.
 module Generated.IncidentResponse.Escalation.Domain where
 
 import GHC.Generics (Generic)
diff --git a/test/conformance-process-state-authority/Generated/IncidentResponse/Escalation/EventStream.hs b/test/conformance-process-state-authority/Generated/IncidentResponse/Escalation/EventStream.hs
--- a/test/conformance-process-state-authority/Generated/IncidentResponse/Escalation/EventStream.hs
+++ b/test/conformance-process-state-authority/Generated/IncidentResponse/Escalation/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate Escalation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Escalation; do not edit.
 module Generated.IncidentResponse.Escalation.EventStream
   ( escalationCategory
   , escalationCommandCategory
diff --git a/test/conformance-process-state-authority/Generated/IncidentResponse/Escalation/Harness.hs b/test/conformance-process-state-authority/Generated/IncidentResponse/Escalation/Harness.hs
--- a/test/conformance-process-state-authority/Generated/IncidentResponse/Escalation/Harness.hs
+++ b/test/conformance-process-state-authority/Generated/IncidentResponse/Escalation/Harness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate Escalation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Escalation; do not edit.
 module Generated.IncidentResponse.Escalation.Harness (harnessAssertions) where
 
 import Generated.IncidentResponse.Escalation.Domain
diff --git a/test/conformance-process-state-authority/Generated/IncidentResponse/Escalation/Projection.hs b/test/conformance-process-state-authority/Generated/IncidentResponse/Escalation/Projection.hs
--- a/test/conformance-process-state-authority/Generated/IncidentResponse/Escalation/Projection.hs
+++ b/test/conformance-process-state-authority/Generated/IncidentResponse/Escalation/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate Escalation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Escalation; do not edit.
 module Generated.IncidentResponse.Escalation.Projection () where
 
 -- No projection declarations are present; this module keeps the generated manifest inventory total.
diff --git a/test/conformance-process-state-authority/Generated/IncidentResponse/Escalation/Transducer.hs b/test/conformance-process-state-authority/Generated/IncidentResponse/Escalation/Transducer.hs
--- a/test/conformance-process-state-authority/Generated/IncidentResponse/Escalation/Transducer.hs
+++ b/test/conformance-process-state-authority/Generated/IncidentResponse/Escalation/Transducer.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate Escalation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Escalation; do not edit.
 module Generated.IncidentResponse.Escalation.Transducer
   ( escalationTransducer
   , escalationFoldFingerprint
diff --git a/test/conformance-process-state-authority/Generated/IncidentResponse/Incident/BehaviorContract.hs b/test/conformance-process-state-authority/Generated/IncidentResponse/Incident/BehaviorContract.hs
--- a/test/conformance-process-state-authority/Generated/IncidentResponse/Incident/BehaviorContract.hs
+++ b/test/conformance-process-state-authority/Generated/IncidentResponse/Incident/BehaviorContract.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.
 module Generated.IncidentResponse.Incident.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -13,6 +13,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -156,7 +157,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -169,7 +181,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-process-state-authority/Generated/IncidentResponse/Incident/Codec.hs b/test/conformance-process-state-authority/Generated/IncidentResponse/Incident/Codec.hs
--- a/test/conformance-process-state-authority/Generated/IncidentResponse/Incident/Codec.hs
+++ b/test/conformance-process-state-authority/Generated/IncidentResponse/Incident/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.
 module Generated.IncidentResponse.Incident.Codec (
     incidentCodec,
     parseIncidentEvent,
diff --git a/test/conformance-process-state-authority/Generated/IncidentResponse/Incident/Domain.hs b/test/conformance-process-state-authority/Generated/IncidentResponse/Incident/Domain.hs
--- a/test/conformance-process-state-authority/Generated/IncidentResponse/Incident/Domain.hs
+++ b/test/conformance-process-state-authority/Generated/IncidentResponse/Incident/Domain.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.
 module Generated.IncidentResponse.Incident.Domain where
 
 import GHC.Generics (Generic)
diff --git a/test/conformance-process-state-authority/Generated/IncidentResponse/Incident/EventStream.hs b/test/conformance-process-state-authority/Generated/IncidentResponse/Incident/EventStream.hs
--- a/test/conformance-process-state-authority/Generated/IncidentResponse/Incident/EventStream.hs
+++ b/test/conformance-process-state-authority/Generated/IncidentResponse/Incident/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.
 module Generated.IncidentResponse.Incident.EventStream
   ( incidentCategory
   , incidentCommandCategory
diff --git a/test/conformance-process-state-authority/Generated/IncidentResponse/Incident/Harness.hs b/test/conformance-process-state-authority/Generated/IncidentResponse/Incident/Harness.hs
--- a/test/conformance-process-state-authority/Generated/IncidentResponse/Incident/Harness.hs
+++ b/test/conformance-process-state-authority/Generated/IncidentResponse/Incident/Harness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.
 module Generated.IncidentResponse.Incident.Harness (harnessAssertions) where
 
 import Generated.IncidentResponse.Incident.Domain
diff --git a/test/conformance-process-state-authority/Generated/IncidentResponse/Incident/Projection.hs b/test/conformance-process-state-authority/Generated/IncidentResponse/Incident/Projection.hs
--- a/test/conformance-process-state-authority/Generated/IncidentResponse/Incident/Projection.hs
+++ b/test/conformance-process-state-authority/Generated/IncidentResponse/Incident/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.
 module Generated.IncidentResponse.Incident.Projection () where
 
 -- No projection declarations are present; this module keeps the generated manifest inventory total.
diff --git a/test/conformance-process-state-authority/Generated/IncidentResponse/Incident/Transducer.hs b/test/conformance-process-state-authority/Generated/IncidentResponse/Incident/Transducer.hs
--- a/test/conformance-process-state-authority/Generated/IncidentResponse/Incident/Transducer.hs
+++ b/test/conformance-process-state-authority/Generated/IncidentResponse/Incident/Transducer.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.
 module Generated.IncidentResponse.Incident.Transducer
   ( incidentTransducer
   , incidentFoldFingerprint
diff --git a/test/conformance-process-state-authority/Generated/IncidentResponse/IncidentEscalation/Input.hs b/test/conformance-process-state-authority/Generated/IncidentResponse/IncidentEscalation/Input.hs
--- a/test/conformance-process-state-authority/Generated/IncidentResponse/IncidentEscalation/Input.hs
+++ b/test/conformance-process-state-authority/Generated/IncidentResponse/IncidentEscalation/Input.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE DeriveAnyClass #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from process input IncidentEscalation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from process input IncidentEscalation; do not edit.
 module Generated.IncidentResponse.IncidentEscalation.Input (IncidentEscalationInput (..)) where
 
 import Data.Aeson (FromJSON, ToJSON)
diff --git a/test/conformance-process-state-authority/Generated/IncidentResponse/IncidentEscalation/Process.hs b/test/conformance-process-state-authority/Generated/IncidentResponse/IncidentEscalation/Process.hs
--- a/test/conformance-process-state-authority/Generated/IncidentResponse/IncidentEscalation/Process.hs
+++ b/test/conformance-process-state-authority/Generated/IncidentResponse/IncidentEscalation/Process.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE DeriveAnyClass #-}
 {-# OPTIONS_GHC -Wno-missing-signatures #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from process reaction IncidentEscalation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from process reaction IncidentEscalation; do not edit.
 module Generated.IncidentResponse.IncidentEscalation.Process
   ( IncidentEscalationInput (..)
   , incidentEscalationProcessName
diff --git a/test/conformance-process-state-authority/Generated/IncidentResponse/IncidentEscalation/ProcessHarness.hs b/test/conformance-process-state-authority/Generated/IncidentResponse/IncidentEscalation/ProcessHarness.hs
--- a/test/conformance-process-state-authority/Generated/IncidentResponse/IncidentEscalation/ProcessHarness.hs
+++ b/test/conformance-process-state-authority/Generated/IncidentResponse/IncidentEscalation/ProcessHarness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from process IncidentEscalation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from process IncidentEscalation; do not edit.
 module Generated.IncidentResponse.IncidentEscalation.ProcessHarness (processHarnessValues) where
 
 -- | (label, value): the spec's deterministic process/timer decisions,
diff --git a/test/conformance-process-state-authority/Generated/IncidentResponse/Nominals.hs b/test/conformance-process-state-authority/Generated/IncidentResponse/Nominals.hs
--- a/test/conformance-process-state-authority/Generated/IncidentResponse/Nominals.hs
+++ b/test/conformance-process-state-authority/Generated/IncidentResponse/Nominals.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE DeriveAnyClass #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context incident-response generated nominal declarations; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context incident-response generated nominal declarations; do not edit.
 module Generated.IncidentResponse.Nominals
   ( EscalationNoOp (..)
   , escalationNoOpText
diff --git a/test/conformance-process-state-authority/Generated/IncidentResponse/Nominals/Internal.hs b/test/conformance-process-state-authority/Generated/IncidentResponse/Nominals/Internal.hs
--- a/test/conformance-process-state-authority/Generated/IncidentResponse/Nominals/Internal.hs
+++ b/test/conformance-process-state-authority/Generated/IncidentResponse/Nominals/Internal.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context incident-response generated nominal ID internals; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context incident-response generated nominal ID internals; do not edit.
 module Generated.IncidentResponse.Nominals.Internal
   ( IncidentId
   , parseIncidentId
diff --git a/test/conformance-process-state-authority/Generated/IncidentResponse/ReplayAudit.hs b/test/conformance-process-state-authority/Generated/IncidentResponse/ReplayAudit.hs
--- a/test/conformance-process-state-authority/Generated/IncidentResponse/ReplayAudit.hs
+++ b/test/conformance-process-state-authority/Generated/IncidentResponse/ReplayAudit.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context incident-response replay-audit assembly; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context incident-response replay-audit assembly; do not edit.
 --
 -- Deployment contract:
 --   * replay-neutral diff: no data audit is required;
diff --git a/test/conformance-process-timers/Generated/ProcessTimers/BehaviorSourceMap.hs b/test/conformance-process-timers/Generated/ProcessTimers/BehaviorSourceMap.hs
--- a/test/conformance-process-timers/Generated/ProcessTimers/BehaviorSourceMap.hs
+++ b/test/conformance-process-timers/Generated/ProcessTimers/BehaviorSourceMap.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context process-timers behavior source map; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context process-timers behavior source map; do not edit.
 module Generated.ProcessTimers.BehaviorSourceMap
   ( BehaviorSourceLocation (..)
   , behaviorSourceLocation
diff --git a/test/conformance-process-timers/Generated/ProcessTimers/Incident/BehaviorContract.hs b/test/conformance-process-timers/Generated/ProcessTimers/Incident/BehaviorContract.hs
--- a/test/conformance-process-timers/Generated/ProcessTimers/Incident/BehaviorContract.hs
+++ b/test/conformance-process-timers/Generated/ProcessTimers/Incident/BehaviorContract.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.
 module Generated.ProcessTimers.Incident.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -13,6 +13,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -180,7 +181,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -193,7 +205,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-process-timers/Generated/ProcessTimers/Incident/Codec.hs b/test/conformance-process-timers/Generated/ProcessTimers/Incident/Codec.hs
--- a/test/conformance-process-timers/Generated/ProcessTimers/Incident/Codec.hs
+++ b/test/conformance-process-timers/Generated/ProcessTimers/Incident/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.
 module Generated.ProcessTimers.Incident.Codec (
     incidentCodec,
     parseIncidentEvent,
diff --git a/test/conformance-process-timers/Generated/ProcessTimers/Incident/Domain.hs b/test/conformance-process-timers/Generated/ProcessTimers/Incident/Domain.hs
--- a/test/conformance-process-timers/Generated/ProcessTimers/Incident/Domain.hs
+++ b/test/conformance-process-timers/Generated/ProcessTimers/Incident/Domain.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.
 module Generated.ProcessTimers.Incident.Domain where
 
 import GHC.Generics (Generic)
diff --git a/test/conformance-process-timers/Generated/ProcessTimers/Incident/EventStream.hs b/test/conformance-process-timers/Generated/ProcessTimers/Incident/EventStream.hs
--- a/test/conformance-process-timers/Generated/ProcessTimers/Incident/EventStream.hs
+++ b/test/conformance-process-timers/Generated/ProcessTimers/Incident/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.
 module Generated.ProcessTimers.Incident.EventStream
   ( incidentCategory
   , incidentCommandCategory
diff --git a/test/conformance-process-timers/Generated/ProcessTimers/Incident/Harness.hs b/test/conformance-process-timers/Generated/ProcessTimers/Incident/Harness.hs
--- a/test/conformance-process-timers/Generated/ProcessTimers/Incident/Harness.hs
+++ b/test/conformance-process-timers/Generated/ProcessTimers/Incident/Harness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.
 module Generated.ProcessTimers.Incident.Harness (harnessAssertions) where
 
 import Generated.ProcessTimers.Incident.Domain
diff --git a/test/conformance-process-timers/Generated/ProcessTimers/Incident/Projection.hs b/test/conformance-process-timers/Generated/ProcessTimers/Incident/Projection.hs
--- a/test/conformance-process-timers/Generated/ProcessTimers/Incident/Projection.hs
+++ b/test/conformance-process-timers/Generated/ProcessTimers/Incident/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.
 module Generated.ProcessTimers.Incident.Projection () where
 
 -- No projection declarations are present; this module keeps the generated manifest inventory total.
diff --git a/test/conformance-process-timers/Generated/ProcessTimers/Incident/Transducer.hs b/test/conformance-process-timers/Generated/ProcessTimers/Incident/Transducer.hs
--- a/test/conformance-process-timers/Generated/ProcessTimers/Incident/Transducer.hs
+++ b/test/conformance-process-timers/Generated/ProcessTimers/Incident/Transducer.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.
 module Generated.ProcessTimers.Incident.Transducer
   ( incidentTransducer
   , incidentFoldFingerprint
diff --git a/test/conformance-process-timers/Generated/ProcessTimers/IncidentSaga/BehaviorContract.hs b/test/conformance-process-timers/Generated/ProcessTimers/IncidentSaga/BehaviorContract.hs
--- a/test/conformance-process-timers/Generated/ProcessTimers/IncidentSaga/BehaviorContract.hs
+++ b/test/conformance-process-timers/Generated/ProcessTimers/IncidentSaga/BehaviorContract.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate IncidentSaga; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate IncidentSaga; do not edit.
 module Generated.ProcessTimers.IncidentSaga.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -13,6 +13,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -144,7 +145,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -157,7 +169,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-process-timers/Generated/ProcessTimers/IncidentSaga/Codec.hs b/test/conformance-process-timers/Generated/ProcessTimers/IncidentSaga/Codec.hs
--- a/test/conformance-process-timers/Generated/ProcessTimers/IncidentSaga/Codec.hs
+++ b/test/conformance-process-timers/Generated/ProcessTimers/IncidentSaga/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate IncidentSaga; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate IncidentSaga; do not edit.
 module Generated.ProcessTimers.IncidentSaga.Codec (
     incidentSagaCodec,
     parseIncidentSagaEvent,
diff --git a/test/conformance-process-timers/Generated/ProcessTimers/IncidentSaga/Domain.hs b/test/conformance-process-timers/Generated/ProcessTimers/IncidentSaga/Domain.hs
--- a/test/conformance-process-timers/Generated/ProcessTimers/IncidentSaga/Domain.hs
+++ b/test/conformance-process-timers/Generated/ProcessTimers/IncidentSaga/Domain.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate IncidentSaga; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate IncidentSaga; do not edit.
 module Generated.ProcessTimers.IncidentSaga.Domain where
 
 import GHC.Generics (Generic)
diff --git a/test/conformance-process-timers/Generated/ProcessTimers/IncidentSaga/EventStream.hs b/test/conformance-process-timers/Generated/ProcessTimers/IncidentSaga/EventStream.hs
--- a/test/conformance-process-timers/Generated/ProcessTimers/IncidentSaga/EventStream.hs
+++ b/test/conformance-process-timers/Generated/ProcessTimers/IncidentSaga/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate IncidentSaga; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate IncidentSaga; do not edit.
 module Generated.ProcessTimers.IncidentSaga.EventStream
   ( incidentSagaCategory
   , incidentSagaCommandCategory
diff --git a/test/conformance-process-timers/Generated/ProcessTimers/IncidentSaga/Harness.hs b/test/conformance-process-timers/Generated/ProcessTimers/IncidentSaga/Harness.hs
--- a/test/conformance-process-timers/Generated/ProcessTimers/IncidentSaga/Harness.hs
+++ b/test/conformance-process-timers/Generated/ProcessTimers/IncidentSaga/Harness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate IncidentSaga; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate IncidentSaga; do not edit.
 module Generated.ProcessTimers.IncidentSaga.Harness (harnessAssertions) where
 
 import Generated.ProcessTimers.IncidentSaga.Domain
diff --git a/test/conformance-process-timers/Generated/ProcessTimers/IncidentSaga/Projection.hs b/test/conformance-process-timers/Generated/ProcessTimers/IncidentSaga/Projection.hs
--- a/test/conformance-process-timers/Generated/ProcessTimers/IncidentSaga/Projection.hs
+++ b/test/conformance-process-timers/Generated/ProcessTimers/IncidentSaga/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate IncidentSaga; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate IncidentSaga; do not edit.
 module Generated.ProcessTimers.IncidentSaga.Projection () where
 
 -- No projection declarations are present; this module keeps the generated manifest inventory total.
diff --git a/test/conformance-process-timers/Generated/ProcessTimers/IncidentSaga/Transducer.hs b/test/conformance-process-timers/Generated/ProcessTimers/IncidentSaga/Transducer.hs
--- a/test/conformance-process-timers/Generated/ProcessTimers/IncidentSaga/Transducer.hs
+++ b/test/conformance-process-timers/Generated/ProcessTimers/IncidentSaga/Transducer.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate IncidentSaga; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate IncidentSaga; do not edit.
 module Generated.ProcessTimers.IncidentSaga.Transducer
   ( incidentSagaTransducer
   , incidentSagaFoldFingerprint
diff --git a/test/conformance-process-timers/Generated/ProcessTimers/IncidentTimers/Input.hs b/test/conformance-process-timers/Generated/ProcessTimers/IncidentTimers/Input.hs
--- a/test/conformance-process-timers/Generated/ProcessTimers/IncidentTimers/Input.hs
+++ b/test/conformance-process-timers/Generated/ProcessTimers/IncidentTimers/Input.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE DeriveAnyClass #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from process input IncidentTimers; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from process input IncidentTimers; do not edit.
 module Generated.ProcessTimers.IncidentTimers.Input (IncidentTimersInput (..)) where
 
 import Data.Aeson (FromJSON, ToJSON)
diff --git a/test/conformance-process-timers/Generated/ProcessTimers/IncidentTimers/Process.hs b/test/conformance-process-timers/Generated/ProcessTimers/IncidentTimers/Process.hs
--- a/test/conformance-process-timers/Generated/ProcessTimers/IncidentTimers/Process.hs
+++ b/test/conformance-process-timers/Generated/ProcessTimers/IncidentTimers/Process.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE DeriveAnyClass #-}
 {-# OPTIONS_GHC -Wno-missing-signatures #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from process reaction IncidentTimers; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from process reaction IncidentTimers; do not edit.
 module Generated.ProcessTimers.IncidentTimers.Process
   ( IncidentTimersInput (..)
   , incidentTimersProcessName
diff --git a/test/conformance-process-timers/Generated/ProcessTimers/IncidentTimers/ProcessHarness.hs b/test/conformance-process-timers/Generated/ProcessTimers/IncidentTimers/ProcessHarness.hs
--- a/test/conformance-process-timers/Generated/ProcessTimers/IncidentTimers/ProcessHarness.hs
+++ b/test/conformance-process-timers/Generated/ProcessTimers/IncidentTimers/ProcessHarness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from process IncidentTimers; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from process IncidentTimers; do not edit.
 module Generated.ProcessTimers.IncidentTimers.ProcessHarness (processHarnessValues) where
 
 -- | (label, value): the spec's deterministic process/timer decisions,
diff --git a/test/conformance-process-timers/Generated/ProcessTimers/Nominals.hs b/test/conformance-process-timers/Generated/ProcessTimers/Nominals.hs
--- a/test/conformance-process-timers/Generated/ProcessTimers/Nominals.hs
+++ b/test/conformance-process-timers/Generated/ProcessTimers/Nominals.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context process-timers generated nominal declarations; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context process-timers generated nominal declarations; do not edit.
 module Generated.ProcessTimers.Nominals
   ( IncidentId
   , parseIncidentId
diff --git a/test/conformance-process-timers/Generated/ProcessTimers/Nominals/Internal.hs b/test/conformance-process-timers/Generated/ProcessTimers/Nominals/Internal.hs
--- a/test/conformance-process-timers/Generated/ProcessTimers/Nominals/Internal.hs
+++ b/test/conformance-process-timers/Generated/ProcessTimers/Nominals/Internal.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context process-timers generated nominal ID internals; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context process-timers generated nominal ID internals; do not edit.
 module Generated.ProcessTimers.Nominals.Internal
   ( IncidentId
   , parseIncidentId
diff --git a/test/conformance-process-timers/Generated/ProcessTimers/ReplayAudit.hs b/test/conformance-process-timers/Generated/ProcessTimers/ReplayAudit.hs
--- a/test/conformance-process-timers/Generated/ProcessTimers/ReplayAudit.hs
+++ b/test/conformance-process-timers/Generated/ProcessTimers/ReplayAudit.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context process-timers replay-audit assembly; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context process-timers replay-audit assembly; do not edit.
 --
 -- Deployment contract:
 --   * replay-neutral diff: no data audit is required;
diff --git a/test/conformance-process/Generated/HospitalCapacity/BehaviorSourceMap.hs b/test/conformance-process/Generated/HospitalCapacity/BehaviorSourceMap.hs
--- a/test/conformance-process/Generated/HospitalCapacity/BehaviorSourceMap.hs
+++ b/test/conformance-process/Generated/HospitalCapacity/BehaviorSourceMap.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context hospital-capacity behavior source map; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context hospital-capacity behavior source map; do not edit.
 module Generated.HospitalCapacity.BehaviorSourceMap
   ( BehaviorSourceLocation (..)
   , behaviorSourceLocation
diff --git a/test/conformance-process/Generated/HospitalCapacity/Hospital/BehaviorContract.hs b/test/conformance-process/Generated/HospitalCapacity/Hospital/BehaviorContract.hs
--- a/test/conformance-process/Generated/HospitalCapacity/Hospital/BehaviorContract.hs
+++ b/test/conformance-process/Generated/HospitalCapacity/Hospital/BehaviorContract.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
 module Generated.HospitalCapacity.Hospital.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -13,6 +13,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -144,7 +145,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -157,7 +169,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-process/Generated/HospitalCapacity/Hospital/Codec.hs b/test/conformance-process/Generated/HospitalCapacity/Hospital/Codec.hs
--- a/test/conformance-process/Generated/HospitalCapacity/Hospital/Codec.hs
+++ b/test/conformance-process/Generated/HospitalCapacity/Hospital/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
 module Generated.HospitalCapacity.Hospital.Codec (
     hospitalCodec,
     parseHospitalEvent,
diff --git a/test/conformance-process/Generated/HospitalCapacity/Hospital/Domain.hs b/test/conformance-process/Generated/HospitalCapacity/Hospital/Domain.hs
--- a/test/conformance-process/Generated/HospitalCapacity/Hospital/Domain.hs
+++ b/test/conformance-process/Generated/HospitalCapacity/Hospital/Domain.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
 module Generated.HospitalCapacity.Hospital.Domain where
 
 import GHC.Generics (Generic)
diff --git a/test/conformance-process/Generated/HospitalCapacity/Hospital/EventStream.hs b/test/conformance-process/Generated/HospitalCapacity/Hospital/EventStream.hs
--- a/test/conformance-process/Generated/HospitalCapacity/Hospital/EventStream.hs
+++ b/test/conformance-process/Generated/HospitalCapacity/Hospital/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
 module Generated.HospitalCapacity.Hospital.EventStream
   ( hospitalCategory
   , hospitalCommandCategory
diff --git a/test/conformance-process/Generated/HospitalCapacity/Hospital/Harness.hs b/test/conformance-process/Generated/HospitalCapacity/Hospital/Harness.hs
--- a/test/conformance-process/Generated/HospitalCapacity/Hospital/Harness.hs
+++ b/test/conformance-process/Generated/HospitalCapacity/Hospital/Harness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
 module Generated.HospitalCapacity.Hospital.Harness (harnessAssertions) where
 
 import Generated.HospitalCapacity.Hospital.Domain
diff --git a/test/conformance-process/Generated/HospitalCapacity/Hospital/Projection.hs b/test/conformance-process/Generated/HospitalCapacity/Hospital/Projection.hs
--- a/test/conformance-process/Generated/HospitalCapacity/Hospital/Projection.hs
+++ b/test/conformance-process/Generated/HospitalCapacity/Hospital/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
 module Generated.HospitalCapacity.Hospital.Projection () where
 
 -- No projection declarations are present; this module keeps the generated manifest inventory total.
diff --git a/test/conformance-process/Generated/HospitalCapacity/Hospital/Transducer.hs b/test/conformance-process/Generated/HospitalCapacity/Hospital/Transducer.hs
--- a/test/conformance-process/Generated/HospitalCapacity/Hospital/Transducer.hs
+++ b/test/conformance-process/Generated/HospitalCapacity/Hospital/Transducer.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.
 module Generated.HospitalCapacity.Hospital.Transducer
   ( hospitalTransducer
   , hospitalFoldFingerprint
diff --git a/test/conformance-process/Generated/HospitalCapacity/HospitalSurge/Process.hs b/test/conformance-process/Generated/HospitalCapacity/HospitalSurge/Process.hs
--- a/test/conformance-process/Generated/HospitalCapacity/HospitalSurge/Process.hs
+++ b/test/conformance-process/Generated/HospitalCapacity/HospitalSurge/Process.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from process HospitalSurge; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from process HospitalSurge; do not edit.
 module Generated.HospitalCapacity.HospitalSurge.Process
   ( hospitalSurgeProcessName
   , hospitalSurgeCategory
diff --git a/test/conformance-process/Generated/HospitalCapacity/HospitalSurge/ProcessHarness.hs b/test/conformance-process/Generated/HospitalCapacity/HospitalSurge/ProcessHarness.hs
--- a/test/conformance-process/Generated/HospitalCapacity/HospitalSurge/ProcessHarness.hs
+++ b/test/conformance-process/Generated/HospitalCapacity/HospitalSurge/ProcessHarness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from process HospitalSurge; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from process HospitalSurge; do not edit.
 module Generated.HospitalCapacity.HospitalSurge.ProcessHarness (processHarnessValues) where
 
 -- | (label, value): the spec's deterministic process/timer decisions,
diff --git a/test/conformance-process/Generated/HospitalCapacity/Nominals.hs b/test/conformance-process/Generated/HospitalCapacity/Nominals.hs
--- a/test/conformance-process/Generated/HospitalCapacity/Nominals.hs
+++ b/test/conformance-process/Generated/HospitalCapacity/Nominals.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context hospital-capacity generated nominal declarations; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context hospital-capacity generated nominal declarations; do not edit.
 module Generated.HospitalCapacity.Nominals
   ( CommandId
   , parseCommandId
diff --git a/test/conformance-process/Generated/HospitalCapacity/Nominals/Internal.hs b/test/conformance-process/Generated/HospitalCapacity/Nominals/Internal.hs
--- a/test/conformance-process/Generated/HospitalCapacity/Nominals/Internal.hs
+++ b/test/conformance-process/Generated/HospitalCapacity/Nominals/Internal.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context hospital-capacity generated nominal ID internals; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context hospital-capacity generated nominal ID internals; do not edit.
 module Generated.HospitalCapacity.Nominals.Internal
   ( CommandId
   , parseCommandId
diff --git a/test/conformance-process/Generated/HospitalCapacity/ReplayAudit.hs b/test/conformance-process/Generated/HospitalCapacity/ReplayAudit.hs
--- a/test/conformance-process/Generated/HospitalCapacity/ReplayAudit.hs
+++ b/test/conformance-process/Generated/HospitalCapacity/ReplayAudit.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context hospital-capacity replay-audit assembly; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context hospital-capacity replay-audit assembly; do not edit.
 --
 -- Deployment contract:
 --   * replay-neutral diff: no data audit is required;
diff --git a/test/conformance-process/Generated/HospitalCapacity/Surge/BehaviorContract.hs b/test/conformance-process/Generated/HospitalCapacity/Surge/BehaviorContract.hs
--- a/test/conformance-process/Generated/HospitalCapacity/Surge/BehaviorContract.hs
+++ b/test/conformance-process/Generated/HospitalCapacity/Surge/BehaviorContract.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.
 module Generated.HospitalCapacity.Surge.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -13,6 +13,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -156,7 +157,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -169,7 +181,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-process/Generated/HospitalCapacity/Surge/Codec.hs b/test/conformance-process/Generated/HospitalCapacity/Surge/Codec.hs
--- a/test/conformance-process/Generated/HospitalCapacity/Surge/Codec.hs
+++ b/test/conformance-process/Generated/HospitalCapacity/Surge/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.
 module Generated.HospitalCapacity.Surge.Codec (
     surgeCodec,
     parseSurgeEvent,
diff --git a/test/conformance-process/Generated/HospitalCapacity/Surge/Domain.hs b/test/conformance-process/Generated/HospitalCapacity/Surge/Domain.hs
--- a/test/conformance-process/Generated/HospitalCapacity/Surge/Domain.hs
+++ b/test/conformance-process/Generated/HospitalCapacity/Surge/Domain.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.
 module Generated.HospitalCapacity.Surge.Domain where
 
 import Data.Text (Text)
diff --git a/test/conformance-process/Generated/HospitalCapacity/Surge/EventStream.hs b/test/conformance-process/Generated/HospitalCapacity/Surge/EventStream.hs
--- a/test/conformance-process/Generated/HospitalCapacity/Surge/EventStream.hs
+++ b/test/conformance-process/Generated/HospitalCapacity/Surge/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.
 module Generated.HospitalCapacity.Surge.EventStream
   ( surgeCategory
   , surgeCommandCategory
diff --git a/test/conformance-process/Generated/HospitalCapacity/Surge/Harness.hs b/test/conformance-process/Generated/HospitalCapacity/Surge/Harness.hs
--- a/test/conformance-process/Generated/HospitalCapacity/Surge/Harness.hs
+++ b/test/conformance-process/Generated/HospitalCapacity/Surge/Harness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.
 module Generated.HospitalCapacity.Surge.Harness (harnessAssertions) where
 
 import Generated.HospitalCapacity.Surge.Domain
diff --git a/test/conformance-process/Generated/HospitalCapacity/Surge/Projection.hs b/test/conformance-process/Generated/HospitalCapacity/Surge/Projection.hs
--- a/test/conformance-process/Generated/HospitalCapacity/Surge/Projection.hs
+++ b/test/conformance-process/Generated/HospitalCapacity/Surge/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.
 module Generated.HospitalCapacity.Surge.Projection () where
 
 -- No projection declarations are present; this module keeps the generated manifest inventory total.
diff --git a/test/conformance-process/Generated/HospitalCapacity/Surge/Transducer.hs b/test/conformance-process/Generated/HospitalCapacity/Surge/Transducer.hs
--- a/test/conformance-process/Generated/HospitalCapacity/Surge/Transducer.hs
+++ b/test/conformance-process/Generated/HospitalCapacity/Surge/Transducer.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.
 module Generated.HospitalCapacity.Surge.Transducer
   ( surgeTransducer
   , surgeFoldFingerprint
diff --git a/test/conformance-projection-catalog/Generated/CatalogDemo/BehaviorSourceMap.hs b/test/conformance-projection-catalog/Generated/CatalogDemo/BehaviorSourceMap.hs
--- a/test/conformance-projection-catalog/Generated/CatalogDemo/BehaviorSourceMap.hs
+++ b/test/conformance-projection-catalog/Generated/CatalogDemo/BehaviorSourceMap.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from context catalog-demo behavior source map; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from context catalog-demo behavior source map; do not edit.
 module Generated.CatalogDemo.BehaviorSourceMap
   ( BehaviorSourceLocation (..)
   , behaviorSourceLocation
diff --git a/test/conformance-projection-catalog/Generated/CatalogDemo/CatalogAudit/ReadModel.hs b/test/conformance-projection-catalog/Generated/CatalogDemo/CatalogAudit/ReadModel.hs
--- a/test/conformance-projection-catalog/Generated/CatalogDemo/CatalogAudit/ReadModel.hs
+++ b/test/conformance-projection-catalog/Generated/CatalogDemo/CatalogAudit/ReadModel.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from readmodel catalogAudit; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from readmodel catalogAudit; do not edit.
 module Generated.CatalogDemo.CatalogAudit.ReadModel
   ( catalogAuditReadModel
   , catalogAuditQualifiedTable
diff --git a/test/conformance-projection-catalog/Generated/CatalogDemo/CatalogAudit/ReadModelHarness.hs b/test/conformance-projection-catalog/Generated/CatalogDemo/CatalogAudit/ReadModelHarness.hs
--- a/test/conformance-projection-catalog/Generated/CatalogDemo/CatalogAudit/ReadModelHarness.hs
+++ b/test/conformance-projection-catalog/Generated/CatalogDemo/CatalogAudit/ReadModelHarness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from readmodel catalogAudit; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from readmodel catalogAudit; do not edit.
 module Generated.CatalogDemo.CatalogAudit.ReadModelHarness (readModelFacts, readModelFactResults, runReadModelFacts, catalogFactsAgainst) where
 
 import Generated.CatalogDemo.CatalogAudit.ReadModel (catalogAuditReadModel)
diff --git a/test/conformance-projection-catalog/Generated/CatalogDemo/CatalogAudit/ReadModelTable.hs b/test/conformance-projection-catalog/Generated/CatalogDemo/CatalogAudit/ReadModelTable.hs
--- a/test/conformance-projection-catalog/Generated/CatalogDemo/CatalogAudit/ReadModelTable.hs
+++ b/test/conformance-projection-catalog/Generated/CatalogDemo/CatalogAudit/ReadModelTable.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from readmodel catalogAudit; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from readmodel catalogAudit; do not edit.
 module Generated.CatalogDemo.CatalogAudit.ReadModelTable (catalogAuditQualifiedTable) where
 
 import Data.Text (Text)
diff --git a/test/conformance-projection-catalog/Generated/CatalogDemo/OrderInline/QueryContract.hs b/test/conformance-projection-catalog/Generated/CatalogDemo/OrderInline/QueryContract.hs
--- a/test/conformance-projection-catalog/Generated/CatalogDemo/OrderInline/QueryContract.hs
+++ b/test/conformance-projection-catalog/Generated/CatalogDemo/OrderInline/QueryContract.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from readmodel order_inline; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from readmodel order_inline; do not edit.
 module Generated.CatalogDemo.OrderInline.QueryContract
   ( OrderInlineQueryInput
   , OrderInlineQueryResult
diff --git a/test/conformance-projection-catalog/Generated/CatalogDemo/OrderInline/ReadModel.hs b/test/conformance-projection-catalog/Generated/CatalogDemo/OrderInline/ReadModel.hs
--- a/test/conformance-projection-catalog/Generated/CatalogDemo/OrderInline/ReadModel.hs
+++ b/test/conformance-projection-catalog/Generated/CatalogDemo/OrderInline/ReadModel.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from readmodel order_inline; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from readmodel order_inline; do not edit.
 module Generated.CatalogDemo.OrderInline.ReadModel
   ( orderInlineReadModel
   , orderInlineQualifiedTable
diff --git a/test/conformance-projection-catalog/Generated/CatalogDemo/OrderInline/ReadModelHarness.hs b/test/conformance-projection-catalog/Generated/CatalogDemo/OrderInline/ReadModelHarness.hs
--- a/test/conformance-projection-catalog/Generated/CatalogDemo/OrderInline/ReadModelHarness.hs
+++ b/test/conformance-projection-catalog/Generated/CatalogDemo/OrderInline/ReadModelHarness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from readmodel order_inline; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from readmodel order_inline; do not edit.
 module Generated.CatalogDemo.OrderInline.ReadModelHarness (readModelFacts, readModelFactResults, runReadModelFacts, catalogFactsAgainst) where
 
 import Generated.CatalogDemo.OrderInline.ReadModel (orderInlineReadModel)
diff --git a/test/conformance-projection-catalog/Generated/CatalogDemo/OrderInline/ReadModelTable.hs b/test/conformance-projection-catalog/Generated/CatalogDemo/OrderInline/ReadModelTable.hs
--- a/test/conformance-projection-catalog/Generated/CatalogDemo/OrderInline/ReadModelTable.hs
+++ b/test/conformance-projection-catalog/Generated/CatalogDemo/OrderInline/ReadModelTable.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from readmodel order_inline; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from readmodel order_inline; do not edit.
 module Generated.CatalogDemo.OrderInline.ReadModelTable (orderInlineQualifiedTable) where
 
 import Data.Text (Text)
diff --git a/test/conformance-projection-catalog/Generated/CatalogDemo/OrderTotalsLookup/ReadModel.hs b/test/conformance-projection-catalog/Generated/CatalogDemo/OrderTotalsLookup/ReadModel.hs
--- a/test/conformance-projection-catalog/Generated/CatalogDemo/OrderTotalsLookup/ReadModel.hs
+++ b/test/conformance-projection-catalog/Generated/CatalogDemo/OrderTotalsLookup/ReadModel.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from readmodel order_totals_lookup; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from readmodel order_totals_lookup; do not edit.
 module Generated.CatalogDemo.OrderTotalsLookup.ReadModel
   ( orderTotalsLookupReadModel
   , orderTotalsLookupQualifiedTable
diff --git a/test/conformance-projection-catalog/Generated/CatalogDemo/OrderTotalsLookup/ReadModelHarness.hs b/test/conformance-projection-catalog/Generated/CatalogDemo/OrderTotalsLookup/ReadModelHarness.hs
--- a/test/conformance-projection-catalog/Generated/CatalogDemo/OrderTotalsLookup/ReadModelHarness.hs
+++ b/test/conformance-projection-catalog/Generated/CatalogDemo/OrderTotalsLookup/ReadModelHarness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from readmodel order_totals_lookup; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from readmodel order_totals_lookup; do not edit.
 module Generated.CatalogDemo.OrderTotalsLookup.ReadModelHarness (readModelFacts, readModelFactResults, runReadModelFacts, catalogFactsAgainst) where
 
 import Generated.CatalogDemo.OrderTotalsLookup.ReadModel (orderTotalsLookupReadModel)
diff --git a/test/conformance-projection-catalog/Generated/CatalogDemo/OrderTotalsLookup/ReadModelTable.hs b/test/conformance-projection-catalog/Generated/CatalogDemo/OrderTotalsLookup/ReadModelTable.hs
--- a/test/conformance-projection-catalog/Generated/CatalogDemo/OrderTotalsLookup/ReadModelTable.hs
+++ b/test/conformance-projection-catalog/Generated/CatalogDemo/OrderTotalsLookup/ReadModelTable.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from readmodel order_totals_lookup; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from readmodel order_totals_lookup; do not edit.
 module Generated.CatalogDemo.OrderTotalsLookup.ReadModelTable (orderTotalsLookupQualifiedTable) where
 
 import Data.Text (Text)
diff --git a/test/conformance-projection-catalog/Generated/CatalogDemo/Orders/BehaviorContract.hs b/test/conformance-projection-catalog/Generated/CatalogDemo/Orders/BehaviorContract.hs
--- a/test/conformance-projection-catalog/Generated/CatalogDemo/Orders/BehaviorContract.hs
+++ b/test/conformance-projection-catalog/Generated/CatalogDemo/Orders/BehaviorContract.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from aggregate Orders; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from aggregate Orders; do not edit.
 module Generated.CatalogDemo.Orders.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -14,6 +14,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -157,7 +158,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -170,7 +182,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-projection-catalog/Generated/CatalogDemo/Orders/Codec.hs b/test/conformance-projection-catalog/Generated/CatalogDemo/Orders/Codec.hs
--- a/test/conformance-projection-catalog/Generated/CatalogDemo/Orders/Codec.hs
+++ b/test/conformance-projection-catalog/Generated/CatalogDemo/Orders/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from aggregate Orders; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from aggregate Orders; do not edit.
 module Generated.CatalogDemo.Orders.Codec (
     ordersCodec,
     parseOrdersEvent,
diff --git a/test/conformance-projection-catalog/Generated/CatalogDemo/Orders/Domain.hs b/test/conformance-projection-catalog/Generated/CatalogDemo/Orders/Domain.hs
--- a/test/conformance-projection-catalog/Generated/CatalogDemo/Orders/Domain.hs
+++ b/test/conformance-projection-catalog/Generated/CatalogDemo/Orders/Domain.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from aggregate Orders; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from aggregate Orders; do not edit.
 module Generated.CatalogDemo.Orders.Domain where
 
 import Data.Proxy (Proxy (..))
diff --git a/test/conformance-projection-catalog/Generated/CatalogDemo/Orders/EventStream.hs b/test/conformance-projection-catalog/Generated/CatalogDemo/Orders/EventStream.hs
--- a/test/conformance-projection-catalog/Generated/CatalogDemo/Orders/EventStream.hs
+++ b/test/conformance-projection-catalog/Generated/CatalogDemo/Orders/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from aggregate Orders; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from aggregate Orders; do not edit.
 module Generated.CatalogDemo.Orders.EventStream
   ( ordersCategory
   , ordersCommandCategory
diff --git a/test/conformance-projection-catalog/Generated/CatalogDemo/Orders/Harness.hs b/test/conformance-projection-catalog/Generated/CatalogDemo/Orders/Harness.hs
--- a/test/conformance-projection-catalog/Generated/CatalogDemo/Orders/Harness.hs
+++ b/test/conformance-projection-catalog/Generated/CatalogDemo/Orders/Harness.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from aggregate Orders; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from aggregate Orders; do not edit.
 module Generated.CatalogDemo.Orders.Harness (harnessAssertions) where
 
 import Generated.CatalogDemo.Orders.Domain
diff --git a/test/conformance-projection-catalog/Generated/CatalogDemo/Orders/Projection.hs b/test/conformance-projection-catalog/Generated/CatalogDemo/Orders/Projection.hs
--- a/test/conformance-projection-catalog/Generated/CatalogDemo/Orders/Projection.hs
+++ b/test/conformance-projection-catalog/Generated/CatalogDemo/Orders/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from aggregate Orders; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from aggregate Orders; do not edit.
 module Generated.CatalogDemo.Orders.Projection () where
 
 -- No projection declarations are present; this module keeps the generated manifest inventory total.
diff --git a/test/conformance-projection-catalog/Generated/CatalogDemo/Orders/Transducer.hs b/test/conformance-projection-catalog/Generated/CatalogDemo/Orders/Transducer.hs
--- a/test/conformance-projection-catalog/Generated/CatalogDemo/Orders/Transducer.hs
+++ b/test/conformance-projection-catalog/Generated/CatalogDemo/Orders/Transducer.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from aggregate Orders; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from aggregate Orders; do not edit.
 module Generated.CatalogDemo.Orders.Transducer
   ( ordersTransducer
   , ordersFoldFingerprint
diff --git a/test/conformance-projection-catalog/Generated/CatalogDemo/ProjectionCatalog.hs b/test/conformance-projection-catalog/Generated/CatalogDemo/ProjectionCatalog.hs
--- a/test/conformance-projection-catalog/Generated/CatalogDemo/ProjectionCatalog.hs
+++ b/test/conformance-projection-catalog/Generated/CatalogDemo/ProjectionCatalog.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from projection-catalog catalog-demo; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from projection-catalog catalog-demo; do not edit.
 {-# LANGUAGE OverloadedStrings #-}
 module Generated.CatalogDemo.ProjectionCatalog
   ( projectionCatalog
diff --git a/test/conformance-projection-catalog/Generated/CatalogDemo/QualificationJobs/Queue.hs b/test/conformance-projection-catalog/Generated/CatalogDemo/QualificationJobs/Queue.hs
--- a/test/conformance-projection-catalog/Generated/CatalogDemo/QualificationJobs/Queue.hs
+++ b/test/conformance-projection-catalog/Generated/CatalogDemo/QualificationJobs/Queue.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from workqueue qualification_jobs; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from workqueue qualification_jobs; do not edit.
 module Generated.CatalogDemo.QualificationJobs.Queue
   ( QualificationJob (..)
   , encodeQualificationJob
diff --git a/test/conformance-projection-catalog/Generated/CatalogDemo/QualificationJobs/QueueCodec.hs b/test/conformance-projection-catalog/Generated/CatalogDemo/QualificationJobs/QueueCodec.hs
--- a/test/conformance-projection-catalog/Generated/CatalogDemo/QualificationJobs/QueueCodec.hs
+++ b/test/conformance-projection-catalog/Generated/CatalogDemo/QualificationJobs/QueueCodec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from workqueue qualification_jobs; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from workqueue qualification_jobs; do not edit.
 -- | Versioned job payload envelope: @{\"v\",\"t\",\"data\"}@.
 --
 -- Deploy workers before producers when raising its schema version. Do not
diff --git a/test/conformance-projection-catalog/Generated/CatalogDemo/QualificationJobs/QueuePolicy.hs b/test/conformance-projection-catalog/Generated/CatalogDemo/QualificationJobs/QueuePolicy.hs
--- a/test/conformance-projection-catalog/Generated/CatalogDemo/QualificationJobs/QueuePolicy.hs
+++ b/test/conformance-projection-catalog/Generated/CatalogDemo/QualificationJobs/QueuePolicy.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from workqueue qualification_jobs; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from workqueue qualification_jobs; do not edit.
 module Generated.CatalogDemo.QualificationJobs.QueuePolicy
   ( QualificationJobsOutcome (..)
   , retryPolicy, jobOutcomeFor
diff --git a/test/conformance-projection-catalog/Generated/CatalogDemo/ReplayAudit.hs b/test/conformance-projection-catalog/Generated/CatalogDemo/ReplayAudit.hs
--- a/test/conformance-projection-catalog/Generated/CatalogDemo/ReplayAudit.hs
+++ b/test/conformance-projection-catalog/Generated/CatalogDemo/ReplayAudit.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from context catalog-demo replay-audit assembly; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from context catalog-demo replay-audit assembly; do not edit.
 --
 -- Deployment contract:
 --   * replay-neutral diff: no data audit is required;
diff --git a/test/conformance-projection-catalog/Generated/CatalogDemo/ShipmentLookup/ReadModel.hs b/test/conformance-projection-catalog/Generated/CatalogDemo/ShipmentLookup/ReadModel.hs
--- a/test/conformance-projection-catalog/Generated/CatalogDemo/ShipmentLookup/ReadModel.hs
+++ b/test/conformance-projection-catalog/Generated/CatalogDemo/ShipmentLookup/ReadModel.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from readmodel shipmentLookup; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from readmodel shipmentLookup; do not edit.
 module Generated.CatalogDemo.ShipmentLookup.ReadModel
   ( shipmentLookupReadModel
   , shipmentLookupQualifiedTable
diff --git a/test/conformance-projection-catalog/Generated/CatalogDemo/ShipmentLookup/ReadModelHarness.hs b/test/conformance-projection-catalog/Generated/CatalogDemo/ShipmentLookup/ReadModelHarness.hs
--- a/test/conformance-projection-catalog/Generated/CatalogDemo/ShipmentLookup/ReadModelHarness.hs
+++ b/test/conformance-projection-catalog/Generated/CatalogDemo/ShipmentLookup/ReadModelHarness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from readmodel shipmentLookup; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from readmodel shipmentLookup; do not edit.
 module Generated.CatalogDemo.ShipmentLookup.ReadModelHarness (readModelFacts, readModelFactResults, runReadModelFacts, catalogFactsAgainst) where
 
 import Generated.CatalogDemo.ShipmentLookup.ReadModel (shipmentLookupReadModel)
diff --git a/test/conformance-projection-catalog/Generated/CatalogDemo/ShipmentLookup/ReadModelTable.hs b/test/conformance-projection-catalog/Generated/CatalogDemo/ShipmentLookup/ReadModelTable.hs
--- a/test/conformance-projection-catalog/Generated/CatalogDemo/ShipmentLookup/ReadModelTable.hs
+++ b/test/conformance-projection-catalog/Generated/CatalogDemo/ShipmentLookup/ReadModelTable.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from readmodel shipmentLookup; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from readmodel shipmentLookup; do not edit.
 module Generated.CatalogDemo.ShipmentLookup.ReadModelTable (shipmentLookupQualifiedTable) where
 
 import Data.Text (Text)
diff --git a/test/conformance-projection-catalog/Generated/CatalogDemo/Shipments/BehaviorContract.hs b/test/conformance-projection-catalog/Generated/CatalogDemo/Shipments/BehaviorContract.hs
--- a/test/conformance-projection-catalog/Generated/CatalogDemo/Shipments/BehaviorContract.hs
+++ b/test/conformance-projection-catalog/Generated/CatalogDemo/Shipments/BehaviorContract.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from aggregate Shipments; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from aggregate Shipments; do not edit.
 module Generated.CatalogDemo.Shipments.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -14,6 +14,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -157,7 +158,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -170,7 +182,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-projection-catalog/Generated/CatalogDemo/Shipments/Codec.hs b/test/conformance-projection-catalog/Generated/CatalogDemo/Shipments/Codec.hs
--- a/test/conformance-projection-catalog/Generated/CatalogDemo/Shipments/Codec.hs
+++ b/test/conformance-projection-catalog/Generated/CatalogDemo/Shipments/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from aggregate Shipments; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from aggregate Shipments; do not edit.
 module Generated.CatalogDemo.Shipments.Codec (
     shipmentsCodec,
     parseShipmentsEvent,
diff --git a/test/conformance-projection-catalog/Generated/CatalogDemo/Shipments/Domain.hs b/test/conformance-projection-catalog/Generated/CatalogDemo/Shipments/Domain.hs
--- a/test/conformance-projection-catalog/Generated/CatalogDemo/Shipments/Domain.hs
+++ b/test/conformance-projection-catalog/Generated/CatalogDemo/Shipments/Domain.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from aggregate Shipments; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from aggregate Shipments; do not edit.
 module Generated.CatalogDemo.Shipments.Domain where
 
 import Data.Proxy (Proxy (..))
diff --git a/test/conformance-projection-catalog/Generated/CatalogDemo/Shipments/EventStream.hs b/test/conformance-projection-catalog/Generated/CatalogDemo/Shipments/EventStream.hs
--- a/test/conformance-projection-catalog/Generated/CatalogDemo/Shipments/EventStream.hs
+++ b/test/conformance-projection-catalog/Generated/CatalogDemo/Shipments/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from aggregate Shipments; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from aggregate Shipments; do not edit.
 module Generated.CatalogDemo.Shipments.EventStream
   ( shipmentsCategory
   , shipmentsCommandCategory
diff --git a/test/conformance-projection-catalog/Generated/CatalogDemo/Shipments/Harness.hs b/test/conformance-projection-catalog/Generated/CatalogDemo/Shipments/Harness.hs
--- a/test/conformance-projection-catalog/Generated/CatalogDemo/Shipments/Harness.hs
+++ b/test/conformance-projection-catalog/Generated/CatalogDemo/Shipments/Harness.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from aggregate Shipments; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from aggregate Shipments; do not edit.
 module Generated.CatalogDemo.Shipments.Harness (harnessAssertions) where
 
 import Generated.CatalogDemo.Shipments.Domain
diff --git a/test/conformance-projection-catalog/Generated/CatalogDemo/Shipments/Projection.hs b/test/conformance-projection-catalog/Generated/CatalogDemo/Shipments/Projection.hs
--- a/test/conformance-projection-catalog/Generated/CatalogDemo/Shipments/Projection.hs
+++ b/test/conformance-projection-catalog/Generated/CatalogDemo/Shipments/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from aggregate Shipments; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from aggregate Shipments; do not edit.
 module Generated.CatalogDemo.Shipments.Projection () where
 
 -- No projection declarations are present; this module keeps the generated manifest inventory total.
diff --git a/test/conformance-projection-catalog/Generated/CatalogDemo/Shipments/Transducer.hs b/test/conformance-projection-catalog/Generated/CatalogDemo/Shipments/Transducer.hs
--- a/test/conformance-projection-catalog/Generated/CatalogDemo/Shipments/Transducer.hs
+++ b/test/conformance-projection-catalog/Generated/CatalogDemo/Shipments/Transducer.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from aggregate Shipments; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from aggregate Shipments; do not edit.
 module Generated.CatalogDemo.Shipments.Transducer
   ( shipmentsTransducer
   , shipmentsFoldFingerprint
diff --git a/test/conformance-projection-catalog/Generated/CatalogDemo/Structural/Shape/QualificationPayload.hs b/test/conformance-projection-catalog/Generated/CatalogDemo/Structural/Shape/QualificationPayload.hs
--- a/test/conformance-projection-catalog/Generated/CatalogDemo/Structural/Shape/QualificationPayload.hs
+++ b/test/conformance-projection-catalog/Generated/CatalogDemo/Structural/Shape/QualificationPayload.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from mapped structural QualificationPayload; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from mapped structural QualificationPayload; do not edit.
 module Generated.CatalogDemo.Structural.Shape.QualificationPayload (QualificationPayloadShape (..)) where
 
 import Data.Text (Text)
diff --git a/test/conformance-projection-catalog/Generated/CatalogDemo/StructuralConformance.hs b/test/conformance-projection-catalog/Generated/CatalogDemo/StructuralConformance.hs
--- a/test/conformance-projection-catalog/Generated/CatalogDemo/StructuralConformance.hs
+++ b/test/conformance-projection-catalog/Generated/CatalogDemo/StructuralConformance.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from context catalog-demo structural conformance; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from context catalog-demo structural conformance; do not edit.
 module Generated.CatalogDemo.StructuralConformance
   ( structuralConformanceAssertions
   ) where
diff --git a/test/conformance-projection-catalog/Generated/CatalogDemo/StructuralProjections.hs b/test/conformance-projection-catalog/Generated/CatalogDemo/StructuralProjections.hs
--- a/test/conformance-projection-catalog/Generated/CatalogDemo/StructuralProjections.hs
+++ b/test/conformance-projection-catalog/Generated/CatalogDemo/StructuralProjections.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TypeFamilies #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from context catalog-demo mapped structural facade; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from context catalog-demo mapped structural facade; do not edit.
 -- Equality witnesses are emitted for Text, Int, Bool, Natural, and UTCTime.
 -- Nominal ID and enum leaves carry exact canonical-text domains.
 -- Int, Natural, and UTCTime belong to Keiki's ordered subset.
diff --git a/test/conformance-publisher-runtime/Generated/HospitalCapacity/Emergency/Contract.hs b/test/conformance-publisher-runtime/Generated/HospitalCapacity/Emergency/Contract.hs
--- a/test/conformance-publisher-runtime/Generated/HospitalCapacity/Emergency/Contract.hs
+++ b/test/conformance-publisher-runtime/Generated/HospitalCapacity/Emergency/Contract.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from contract emergency; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from contract emergency; do not edit.
 module Generated.HospitalCapacity.Emergency.Contract
   ( EmergencyPayload (..)
   , TransferReservationAcceptedData (..)
diff --git a/test/conformance-publisher-runtime/Generated/HospitalCapacity/HospitalPublisher/Publisher.hs b/test/conformance-publisher-runtime/Generated/HospitalCapacity/HospitalPublisher/Publisher.hs
--- a/test/conformance-publisher-runtime/Generated/HospitalCapacity/HospitalPublisher/Publisher.hs
+++ b/test/conformance-publisher-runtime/Generated/HospitalCapacity/HospitalPublisher/Publisher.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from publisher hospitalPublisher; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from publisher hospitalPublisher; do not edit.
 module Generated.HospitalCapacity.HospitalPublisher.Publisher
   ( publisherOrdering
   , publisherBackoff
diff --git a/test/conformance-queue-runtime/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModel.hs b/test/conformance-queue-runtime/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModel.hs
--- a/test/conformance-queue-runtime/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModel.hs
+++ b/test/conformance-queue-runtime/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModel.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from readmodel accepted_transfer_needs; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from readmodel accepted_transfer_needs; do not edit.
 module Generated.HospitalCapacity.AcceptedTransferNeeds.ReadModel
   ( acceptedTransferNeedsReadModel
   , acceptedTransferNeedsQualifiedTable
diff --git a/test/conformance-queue-runtime/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModelHarness.hs b/test/conformance-queue-runtime/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModelHarness.hs
--- a/test/conformance-queue-runtime/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModelHarness.hs
+++ b/test/conformance-queue-runtime/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModelHarness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from readmodel accepted_transfer_needs; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from readmodel accepted_transfer_needs; do not edit.
 module Generated.HospitalCapacity.AcceptedTransferNeeds.ReadModelHarness (readModelFacts, readModelFactResults, runReadModelFacts) where
 
 import Generated.HospitalCapacity.AcceptedTransferNeeds.ReadModel (acceptedTransferNeedsReadModel, acceptedTransferNeedsAsyncProjection)
diff --git a/test/conformance-queue-runtime/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModelTable.hs b/test/conformance-queue-runtime/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModelTable.hs
--- a/test/conformance-queue-runtime/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModelTable.hs
+++ b/test/conformance-queue-runtime/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModelTable.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from readmodel accepted_transfer_needs; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from readmodel accepted_transfer_needs; do not edit.
 module Generated.HospitalCapacity.AcceptedTransferNeeds.ReadModelTable (acceptedTransferNeedsQualifiedTable) where
 
 import Data.Text (Text)
diff --git a/test/conformance-queue-runtime/Generated/HospitalCapacity/ReservationWork/Queue.hs b/test/conformance-queue-runtime/Generated/HospitalCapacity/ReservationWork/Queue.hs
--- a/test/conformance-queue-runtime/Generated/HospitalCapacity/ReservationWork/Queue.hs
+++ b/test/conformance-queue-runtime/Generated/HospitalCapacity/ReservationWork/Queue.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from workqueue reservation_work; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from workqueue reservation_work; do not edit.
 module Generated.HospitalCapacity.ReservationWork.Queue
   ( ReservationWorkItem (..)
   , encodeReservationWorkItem
diff --git a/test/conformance-queue-runtime/Generated/HospitalCapacity/ReservationWork/QueueCodec.hs b/test/conformance-queue-runtime/Generated/HospitalCapacity/ReservationWork/QueueCodec.hs
--- a/test/conformance-queue-runtime/Generated/HospitalCapacity/ReservationWork/QueueCodec.hs
+++ b/test/conformance-queue-runtime/Generated/HospitalCapacity/ReservationWork/QueueCodec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from workqueue reservation_work; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from workqueue reservation_work; do not edit.
 -- | Versioned job payload envelope: @{\"v\",\"t\",\"data\"}@.
 --
 -- Deploy workers before producers when raising its schema version. Do not
diff --git a/test/conformance-queue-runtime/Generated/HospitalCapacity/ReservationWork/QueuePolicy.hs b/test/conformance-queue-runtime/Generated/HospitalCapacity/ReservationWork/QueuePolicy.hs
--- a/test/conformance-queue-runtime/Generated/HospitalCapacity/ReservationWork/QueuePolicy.hs
+++ b/test/conformance-queue-runtime/Generated/HospitalCapacity/ReservationWork/QueuePolicy.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from workqueue reservation_work; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from workqueue reservation_work; do not edit.
 module Generated.HospitalCapacity.ReservationWork.QueuePolicy
   ( ReservationWorkOutcome (..)
   , retryPolicy, jobOutcomeFor
diff --git a/test/conformance-queue-runtime/Generated/HospitalCapacity/TransferDecisions/ReadModel.hs b/test/conformance-queue-runtime/Generated/HospitalCapacity/TransferDecisions/ReadModel.hs
--- a/test/conformance-queue-runtime/Generated/HospitalCapacity/TransferDecisions/ReadModel.hs
+++ b/test/conformance-queue-runtime/Generated/HospitalCapacity/TransferDecisions/ReadModel.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from readmodel transfer_decisions; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from readmodel transfer_decisions; do not edit.
 module Generated.HospitalCapacity.TransferDecisions.ReadModel
   ( transferDecisionsReadModel
   , transferDecisionsQualifiedTable
diff --git a/test/conformance-queue-runtime/Generated/HospitalCapacity/TransferDecisions/ReadModelHarness.hs b/test/conformance-queue-runtime/Generated/HospitalCapacity/TransferDecisions/ReadModelHarness.hs
--- a/test/conformance-queue-runtime/Generated/HospitalCapacity/TransferDecisions/ReadModelHarness.hs
+++ b/test/conformance-queue-runtime/Generated/HospitalCapacity/TransferDecisions/ReadModelHarness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from readmodel transfer_decisions; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from readmodel transfer_decisions; do not edit.
 module Generated.HospitalCapacity.TransferDecisions.ReadModelHarness (readModelFacts, readModelFactResults, runReadModelFacts) where
 
 import Generated.HospitalCapacity.TransferDecisions.ReadModel (transferDecisionsReadModel, transferDecisionsAsyncProjection)
diff --git a/test/conformance-queue-runtime/Generated/HospitalCapacity/TransferDecisions/ReadModelTable.hs b/test/conformance-queue-runtime/Generated/HospitalCapacity/TransferDecisions/ReadModelTable.hs
--- a/test/conformance-queue-runtime/Generated/HospitalCapacity/TransferDecisions/ReadModelTable.hs
+++ b/test/conformance-queue-runtime/Generated/HospitalCapacity/TransferDecisions/ReadModelTable.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from readmodel transfer_decisions; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from readmodel transfer_decisions; do not edit.
 module Generated.HospitalCapacity.TransferDecisions.ReadModelTable (transferDecisionsQualifiedTable) where
 
 import Data.Text (Text)
diff --git a/test/conformance-queue/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModel.hs b/test/conformance-queue/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModel.hs
--- a/test/conformance-queue/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModel.hs
+++ b/test/conformance-queue/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModel.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from readmodel accepted_transfer_needs; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from readmodel accepted_transfer_needs; do not edit.
 module Generated.HospitalCapacity.AcceptedTransferNeeds.ReadModel
   ( acceptedTransferNeedsReadModel
   , acceptedTransferNeedsQualifiedTable
diff --git a/test/conformance-queue/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModelHarness.hs b/test/conformance-queue/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModelHarness.hs
--- a/test/conformance-queue/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModelHarness.hs
+++ b/test/conformance-queue/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModelHarness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from readmodel accepted_transfer_needs; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from readmodel accepted_transfer_needs; do not edit.
 module Generated.HospitalCapacity.AcceptedTransferNeeds.ReadModelHarness (readModelFacts, readModelFactResults, runReadModelFacts) where
 
 import Generated.HospitalCapacity.AcceptedTransferNeeds.ReadModel (acceptedTransferNeedsReadModel, acceptedTransferNeedsAsyncProjection)
diff --git a/test/conformance-queue/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModelTable.hs b/test/conformance-queue/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModelTable.hs
--- a/test/conformance-queue/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModelTable.hs
+++ b/test/conformance-queue/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModelTable.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from readmodel accepted_transfer_needs; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from readmodel accepted_transfer_needs; do not edit.
 module Generated.HospitalCapacity.AcceptedTransferNeeds.ReadModelTable (acceptedTransferNeedsQualifiedTable) where
 
 import Data.Text (Text)
diff --git a/test/conformance-queue/Generated/HospitalCapacity/ReservationWork/Queue.hs b/test/conformance-queue/Generated/HospitalCapacity/ReservationWork/Queue.hs
--- a/test/conformance-queue/Generated/HospitalCapacity/ReservationWork/Queue.hs
+++ b/test/conformance-queue/Generated/HospitalCapacity/ReservationWork/Queue.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from workqueue reservation_work; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from workqueue reservation_work; do not edit.
 module Generated.HospitalCapacity.ReservationWork.Queue
   ( ReservationWorkItem (..)
   , encodeReservationWorkItem
diff --git a/test/conformance-queue/Generated/HospitalCapacity/ReservationWork/QueueCodec.hs b/test/conformance-queue/Generated/HospitalCapacity/ReservationWork/QueueCodec.hs
--- a/test/conformance-queue/Generated/HospitalCapacity/ReservationWork/QueueCodec.hs
+++ b/test/conformance-queue/Generated/HospitalCapacity/ReservationWork/QueueCodec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from workqueue reservation_work; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from workqueue reservation_work; do not edit.
 -- | Versioned job payload envelope: @{\"v\",\"t\",\"data\"}@.
 --
 -- Deploy workers before producers when raising its schema version. Do not
diff --git a/test/conformance-queue/Generated/HospitalCapacity/ReservationWork/QueuePolicy.hs b/test/conformance-queue/Generated/HospitalCapacity/ReservationWork/QueuePolicy.hs
--- a/test/conformance-queue/Generated/HospitalCapacity/ReservationWork/QueuePolicy.hs
+++ b/test/conformance-queue/Generated/HospitalCapacity/ReservationWork/QueuePolicy.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from workqueue reservation_work; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from workqueue reservation_work; do not edit.
 module Generated.HospitalCapacity.ReservationWork.QueuePolicy
   ( ReservationWorkOutcome (..)
   , retryPolicy, jobOutcomeFor
diff --git a/test/conformance-queue/Generated/HospitalCapacity/TransferDecisions/ReadModel.hs b/test/conformance-queue/Generated/HospitalCapacity/TransferDecisions/ReadModel.hs
--- a/test/conformance-queue/Generated/HospitalCapacity/TransferDecisions/ReadModel.hs
+++ b/test/conformance-queue/Generated/HospitalCapacity/TransferDecisions/ReadModel.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from readmodel transfer_decisions; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from readmodel transfer_decisions; do not edit.
 module Generated.HospitalCapacity.TransferDecisions.ReadModel
   ( transferDecisionsReadModel
   , transferDecisionsQualifiedTable
diff --git a/test/conformance-queue/Generated/HospitalCapacity/TransferDecisions/ReadModelHarness.hs b/test/conformance-queue/Generated/HospitalCapacity/TransferDecisions/ReadModelHarness.hs
--- a/test/conformance-queue/Generated/HospitalCapacity/TransferDecisions/ReadModelHarness.hs
+++ b/test/conformance-queue/Generated/HospitalCapacity/TransferDecisions/ReadModelHarness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from readmodel transfer_decisions; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from readmodel transfer_decisions; do not edit.
 module Generated.HospitalCapacity.TransferDecisions.ReadModelHarness (readModelFacts, readModelFactResults, runReadModelFacts) where
 
 import Generated.HospitalCapacity.TransferDecisions.ReadModel (transferDecisionsReadModel, transferDecisionsAsyncProjection)
diff --git a/test/conformance-queue/Generated/HospitalCapacity/TransferDecisions/ReadModelTable.hs b/test/conformance-queue/Generated/HospitalCapacity/TransferDecisions/ReadModelTable.hs
--- a/test/conformance-queue/Generated/HospitalCapacity/TransferDecisions/ReadModelTable.hs
+++ b/test/conformance-queue/Generated/HospitalCapacity/TransferDecisions/ReadModelTable.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from readmodel transfer_decisions; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from readmodel transfer_decisions; do not edit.
 module Generated.HospitalCapacity.TransferDecisions.ReadModelTable (transferDecisionsQualifiedTable) where
 
 import Data.Text (Text)
diff --git a/test/conformance-readmodel-runtime/Generated/HospitalCapacity/TransferDecisions/ReadModel.hs b/test/conformance-readmodel-runtime/Generated/HospitalCapacity/TransferDecisions/ReadModel.hs
--- a/test/conformance-readmodel-runtime/Generated/HospitalCapacity/TransferDecisions/ReadModel.hs
+++ b/test/conformance-readmodel-runtime/Generated/HospitalCapacity/TransferDecisions/ReadModel.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from readmodel transfer_decisions; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from readmodel transfer_decisions; do not edit.
 module Generated.HospitalCapacity.TransferDecisions.ReadModel
   ( transferDecisionsReadModel
   , transferDecisionsQualifiedTable
diff --git a/test/conformance-readmodel-runtime/Generated/HospitalCapacity/TransferDecisions/ReadModelHarness.hs b/test/conformance-readmodel-runtime/Generated/HospitalCapacity/TransferDecisions/ReadModelHarness.hs
--- a/test/conformance-readmodel-runtime/Generated/HospitalCapacity/TransferDecisions/ReadModelHarness.hs
+++ b/test/conformance-readmodel-runtime/Generated/HospitalCapacity/TransferDecisions/ReadModelHarness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from readmodel transfer_decisions; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from readmodel transfer_decisions; do not edit.
 module Generated.HospitalCapacity.TransferDecisions.ReadModelHarness (readModelFacts, readModelFactResults, runReadModelFacts) where
 
 import Generated.HospitalCapacity.TransferDecisions.ReadModel (transferDecisionsReadModel, transferDecisionsAsyncProjection)
diff --git a/test/conformance-readmodel-runtime/Generated/HospitalCapacity/TransferDecisions/ReadModelTable.hs b/test/conformance-readmodel-runtime/Generated/HospitalCapacity/TransferDecisions/ReadModelTable.hs
--- a/test/conformance-readmodel-runtime/Generated/HospitalCapacity/TransferDecisions/ReadModelTable.hs
+++ b/test/conformance-readmodel-runtime/Generated/HospitalCapacity/TransferDecisions/ReadModelTable.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from readmodel transfer_decisions; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from readmodel transfer_decisions; do not edit.
 module Generated.HospitalCapacity.TransferDecisions.ReadModelTable (transferDecisionsQualifiedTable) where
 
 import Data.Text (Text)
diff --git a/test/conformance-refined-base16/Generated/RefinedBase16/BehaviorSourceMap.hs b/test/conformance-refined-base16/Generated/RefinedBase16/BehaviorSourceMap.hs
--- a/test/conformance-refined-base16/Generated/RefinedBase16/BehaviorSourceMap.hs
+++ b/test/conformance-refined-base16/Generated/RefinedBase16/BehaviorSourceMap.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context refined-base16 behavior source map; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context refined-base16 behavior source map; do not edit.
 module Generated.RefinedBase16.BehaviorSourceMap
   ( BehaviorSourceLocation (..)
   , behaviorSourceLocation
diff --git a/test/conformance-refined-base16/Generated/RefinedBase16/HashJobs/Queue.hs b/test/conformance-refined-base16/Generated/RefinedBase16/HashJobs/Queue.hs
--- a/test/conformance-refined-base16/Generated/RefinedBase16/HashJobs/Queue.hs
+++ b/test/conformance-refined-base16/Generated/RefinedBase16/HashJobs/Queue.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from workqueue hash_jobs; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from workqueue hash_jobs; do not edit.
 module Generated.RefinedBase16.HashJobs.Queue
   ( HashJob (..)
   , encodeHashJob
diff --git a/test/conformance-refined-base16/Generated/RefinedBase16/HashJobs/QueueCodec.hs b/test/conformance-refined-base16/Generated/RefinedBase16/HashJobs/QueueCodec.hs
--- a/test/conformance-refined-base16/Generated/RefinedBase16/HashJobs/QueueCodec.hs
+++ b/test/conformance-refined-base16/Generated/RefinedBase16/HashJobs/QueueCodec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from workqueue hash_jobs; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from workqueue hash_jobs; do not edit.
 -- | Versioned job payload envelope: @{\"v\",\"t\",\"data\"}@.
 --
 -- Deploy workers before producers when raising its schema version. Do not
diff --git a/test/conformance-refined-base16/Generated/RefinedBase16/HashJobs/QueuePolicy.hs b/test/conformance-refined-base16/Generated/RefinedBase16/HashJobs/QueuePolicy.hs
--- a/test/conformance-refined-base16/Generated/RefinedBase16/HashJobs/QueuePolicy.hs
+++ b/test/conformance-refined-base16/Generated/RefinedBase16/HashJobs/QueuePolicy.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from workqueue hash_jobs; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from workqueue hash_jobs; do not edit.
 module Generated.RefinedBase16.HashJobs.QueuePolicy
   ( HashJobsOutcome (..)
   , retryPolicy, jobOutcomeFor
diff --git a/test/conformance-refined-base16/Generated/RefinedBase16/HashLookup/QueryContract.hs b/test/conformance-refined-base16/Generated/RefinedBase16/HashLookup/QueryContract.hs
--- a/test/conformance-refined-base16/Generated/RefinedBase16/HashLookup/QueryContract.hs
+++ b/test/conformance-refined-base16/Generated/RefinedBase16/HashLookup/QueryContract.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from readmodel hash_lookup; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from readmodel hash_lookup; do not edit.
 module Generated.RefinedBase16.HashLookup.QueryContract
   ( HashLookupQueryInput
   , HashLookupQueryResult
diff --git a/test/conformance-refined-base16/Generated/RefinedBase16/HashLookup/ReadModel.hs b/test/conformance-refined-base16/Generated/RefinedBase16/HashLookup/ReadModel.hs
--- a/test/conformance-refined-base16/Generated/RefinedBase16/HashLookup/ReadModel.hs
+++ b/test/conformance-refined-base16/Generated/RefinedBase16/HashLookup/ReadModel.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from readmodel hash_lookup; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from readmodel hash_lookup; do not edit.
 module Generated.RefinedBase16.HashLookup.ReadModel
   ( hashLookupReadModel
   , hashLookupQualifiedTable
diff --git a/test/conformance-refined-base16/Generated/RefinedBase16/HashLookup/ReadModelHarness.hs b/test/conformance-refined-base16/Generated/RefinedBase16/HashLookup/ReadModelHarness.hs
--- a/test/conformance-refined-base16/Generated/RefinedBase16/HashLookup/ReadModelHarness.hs
+++ b/test/conformance-refined-base16/Generated/RefinedBase16/HashLookup/ReadModelHarness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from readmodel hash_lookup; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from readmodel hash_lookup; do not edit.
 module Generated.RefinedBase16.HashLookup.ReadModelHarness (readModelFacts, readModelFactResults, runReadModelFacts, catalogFactsAgainst) where
 
 import Generated.RefinedBase16.HashLookup.ReadModel (hashLookupReadModel)
diff --git a/test/conformance-refined-base16/Generated/RefinedBase16/HashLookup/ReadModelTable.hs b/test/conformance-refined-base16/Generated/RefinedBase16/HashLookup/ReadModelTable.hs
--- a/test/conformance-refined-base16/Generated/RefinedBase16/HashLookup/ReadModelTable.hs
+++ b/test/conformance-refined-base16/Generated/RefinedBase16/HashLookup/ReadModelTable.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from readmodel hash_lookup; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from readmodel hash_lookup; do not edit.
 module Generated.RefinedBase16.HashLookup.ReadModelTable (hashLookupQualifiedTable) where
 
 import Data.Text (Text)
diff --git a/test/conformance-refined-base16/Generated/RefinedBase16/HashStore/BehaviorContract.hs b/test/conformance-refined-base16/Generated/RefinedBase16/HashStore/BehaviorContract.hs
--- a/test/conformance-refined-base16/Generated/RefinedBase16/HashStore/BehaviorContract.hs
+++ b/test/conformance-refined-base16/Generated/RefinedBase16/HashStore/BehaviorContract.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate HashStore; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate HashStore; do not edit.
 module Generated.RefinedBase16.HashStore.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -14,6 +14,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -193,7 +194,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -206,7 +218,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-refined-base16/Generated/RefinedBase16/HashStore/Codec.hs b/test/conformance-refined-base16/Generated/RefinedBase16/HashStore/Codec.hs
--- a/test/conformance-refined-base16/Generated/RefinedBase16/HashStore/Codec.hs
+++ b/test/conformance-refined-base16/Generated/RefinedBase16/HashStore/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate HashStore; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate HashStore; do not edit.
 module Generated.RefinedBase16.HashStore.Codec (
     hashStoreCodec,
     parseHashStoreEvent,
diff --git a/test/conformance-refined-base16/Generated/RefinedBase16/HashStore/Domain.hs b/test/conformance-refined-base16/Generated/RefinedBase16/HashStore/Domain.hs
--- a/test/conformance-refined-base16/Generated/RefinedBase16/HashStore/Domain.hs
+++ b/test/conformance-refined-base16/Generated/RefinedBase16/HashStore/Domain.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE DeriveAnyClass #-}
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate HashStore; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate HashStore; do not edit.
 module Generated.RefinedBase16.HashStore.Domain where
 
 import Data.Aeson (FromJSON, ToJSON)
diff --git a/test/conformance-refined-base16/Generated/RefinedBase16/HashStore/EventStream.hs b/test/conformance-refined-base16/Generated/RefinedBase16/HashStore/EventStream.hs
--- a/test/conformance-refined-base16/Generated/RefinedBase16/HashStore/EventStream.hs
+++ b/test/conformance-refined-base16/Generated/RefinedBase16/HashStore/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate HashStore; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate HashStore; do not edit.
 module Generated.RefinedBase16.HashStore.EventStream
   ( hashStoreCategory
   , hashStoreCommandCategory
diff --git a/test/conformance-refined-base16/Generated/RefinedBase16/HashStore/Harness.hs b/test/conformance-refined-base16/Generated/RefinedBase16/HashStore/Harness.hs
--- a/test/conformance-refined-base16/Generated/RefinedBase16/HashStore/Harness.hs
+++ b/test/conformance-refined-base16/Generated/RefinedBase16/HashStore/Harness.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate HashStore; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate HashStore; do not edit.
 module Generated.RefinedBase16.HashStore.Harness (harnessAssertions) where
 
 import Generated.RefinedBase16.HashStore.Domain
diff --git a/test/conformance-refined-base16/Generated/RefinedBase16/HashStore/Projection.hs b/test/conformance-refined-base16/Generated/RefinedBase16/HashStore/Projection.hs
--- a/test/conformance-refined-base16/Generated/RefinedBase16/HashStore/Projection.hs
+++ b/test/conformance-refined-base16/Generated/RefinedBase16/HashStore/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate HashStore; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate HashStore; do not edit.
 module Generated.RefinedBase16.HashStore.Projection () where
 
 -- No projection declarations are present; this module keeps the generated manifest inventory total.
diff --git a/test/conformance-refined-base16/Generated/RefinedBase16/HashStore/Transducer.hs b/test/conformance-refined-base16/Generated/RefinedBase16/HashStore/Transducer.hs
--- a/test/conformance-refined-base16/Generated/RefinedBase16/HashStore/Transducer.hs
+++ b/test/conformance-refined-base16/Generated/RefinedBase16/HashStore/Transducer.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate HashStore; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate HashStore; do not edit.
 module Generated.RefinedBase16.HashStore.Transducer
   ( hashStoreTransducer
   , hashStoreFoldFingerprint
diff --git a/test/conformance-refined-base16/Generated/RefinedBase16/ProjectionCatalog.hs b/test/conformance-refined-base16/Generated/RefinedBase16/ProjectionCatalog.hs
--- a/test/conformance-refined-base16/Generated/RefinedBase16/ProjectionCatalog.hs
+++ b/test/conformance-refined-base16/Generated/RefinedBase16/ProjectionCatalog.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from projection-catalog refined-base16; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from projection-catalog refined-base16; do not edit.
 {-# LANGUAGE OverloadedStrings #-}
 module Generated.RefinedBase16.ProjectionCatalog
   ( projectionCatalog
diff --git a/test/conformance-refined-base16/Generated/RefinedBase16/ReplayAudit.hs b/test/conformance-refined-base16/Generated/RefinedBase16/ReplayAudit.hs
--- a/test/conformance-refined-base16/Generated/RefinedBase16/ReplayAudit.hs
+++ b/test/conformance-refined-base16/Generated/RefinedBase16/ReplayAudit.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context refined-base16 replay-audit assembly; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context refined-base16 replay-audit assembly; do not edit.
 --
 -- Deployment contract:
 --   * replay-neutral diff: no data audit is required;
diff --git a/test/conformance-refined-base16/Generated/RefinedBase16/Structural/Shape/ContentHash.hs b/test/conformance-refined-base16/Generated/RefinedBase16/Structural/Shape/ContentHash.hs
--- a/test/conformance-refined-base16/Generated/RefinedBase16/Structural/Shape/ContentHash.hs
+++ b/test/conformance-refined-base16/Generated/RefinedBase16/Structural/Shape/ContentHash.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from mapped structural ContentHash; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from mapped structural ContentHash; do not edit.
 module Generated.RefinedBase16.Structural.Shape.ContentHash (ContentHashShape) where
 
 import Data.ByteString (ByteString)
diff --git a/test/conformance-refined-base16/Generated/RefinedBase16/Structural/Shape/HashEnvelope.hs b/test/conformance-refined-base16/Generated/RefinedBase16/Structural/Shape/HashEnvelope.hs
--- a/test/conformance-refined-base16/Generated/RefinedBase16/Structural/Shape/HashEnvelope.hs
+++ b/test/conformance-refined-base16/Generated/RefinedBase16/Structural/Shape/HashEnvelope.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from mapped structural HashEnvelope; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from mapped structural HashEnvelope; do not edit.
 module Generated.RefinedBase16.Structural.Shape.HashEnvelope (HashEnvelopeShape (..)) where
 
 import Data.Map.Strict (Map)
diff --git a/test/conformance-refined-base16/Generated/RefinedBase16/Structural/Shape/MaybeContentHash.hs b/test/conformance-refined-base16/Generated/RefinedBase16/Structural/Shape/MaybeContentHash.hs
--- a/test/conformance-refined-base16/Generated/RefinedBase16/Structural/Shape/MaybeContentHash.hs
+++ b/test/conformance-refined-base16/Generated/RefinedBase16/Structural/Shape/MaybeContentHash.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from mapped structural MaybeContentHash; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from mapped structural MaybeContentHash; do not edit.
 module Generated.RefinedBase16.Structural.Shape.MaybeContentHash (MaybeContentHashShape) where
 
 import Generated.RefinedBase16.Structural.Shape.ContentHash qualified as ContentHash
diff --git a/test/conformance-refined-base16/Generated/RefinedBase16/StructuralConformance.hs b/test/conformance-refined-base16/Generated/RefinedBase16/StructuralConformance.hs
--- a/test/conformance-refined-base16/Generated/RefinedBase16/StructuralConformance.hs
+++ b/test/conformance-refined-base16/Generated/RefinedBase16/StructuralConformance.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context refined-base16 structural conformance; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context refined-base16 structural conformance; do not edit.
 module Generated.RefinedBase16.StructuralConformance
   ( structuralConformanceAssertions
   ) where
diff --git a/test/conformance-replay/Generated/ReplayDivergence/BehaviorSourceMap.hs b/test/conformance-replay/Generated/ReplayDivergence/BehaviorSourceMap.hs
--- a/test/conformance-replay/Generated/ReplayDivergence/BehaviorSourceMap.hs
+++ b/test/conformance-replay/Generated/ReplayDivergence/BehaviorSourceMap.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context replay-divergence behavior source map; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context replay-divergence behavior source map; do not edit.
 module Generated.ReplayDivergence.BehaviorSourceMap
   ( BehaviorSourceLocation (..)
   , behaviorSourceLocation
diff --git a/test/conformance-replay/Generated/ReplayDivergence/Note/BehaviorContract.hs b/test/conformance-replay/Generated/ReplayDivergence/Note/BehaviorContract.hs
--- a/test/conformance-replay/Generated/ReplayDivergence/Note/BehaviorContract.hs
+++ b/test/conformance-replay/Generated/ReplayDivergence/Note/BehaviorContract.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Note; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Note; do not edit.
 module Generated.ReplayDivergence.Note.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -14,6 +14,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -157,7 +158,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -170,7 +182,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-replay/Generated/ReplayDivergence/Note/Codec.hs b/test/conformance-replay/Generated/ReplayDivergence/Note/Codec.hs
--- a/test/conformance-replay/Generated/ReplayDivergence/Note/Codec.hs
+++ b/test/conformance-replay/Generated/ReplayDivergence/Note/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Note; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Note; do not edit.
 module Generated.ReplayDivergence.Note.Codec (
     noteCodec,
     parseNoteEvent,
diff --git a/test/conformance-replay/Generated/ReplayDivergence/Note/Domain.hs b/test/conformance-replay/Generated/ReplayDivergence/Note/Domain.hs
--- a/test/conformance-replay/Generated/ReplayDivergence/Note/Domain.hs
+++ b/test/conformance-replay/Generated/ReplayDivergence/Note/Domain.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Note; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Note; do not edit.
 module Generated.ReplayDivergence.Note.Domain where
 
 import Data.Proxy (Proxy (..))
diff --git a/test/conformance-replay/Generated/ReplayDivergence/Note/EventStream.hs b/test/conformance-replay/Generated/ReplayDivergence/Note/EventStream.hs
--- a/test/conformance-replay/Generated/ReplayDivergence/Note/EventStream.hs
+++ b/test/conformance-replay/Generated/ReplayDivergence/Note/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Note; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Note; do not edit.
 module Generated.ReplayDivergence.Note.EventStream
   ( noteCategory
   , noteCommandCategory
diff --git a/test/conformance-replay/Generated/ReplayDivergence/Note/Harness.hs b/test/conformance-replay/Generated/ReplayDivergence/Note/Harness.hs
--- a/test/conformance-replay/Generated/ReplayDivergence/Note/Harness.hs
+++ b/test/conformance-replay/Generated/ReplayDivergence/Note/Harness.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Note; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Note; do not edit.
 module Generated.ReplayDivergence.Note.Harness (harnessAssertions) where
 
 import Generated.ReplayDivergence.Note.Domain
diff --git a/test/conformance-replay/Generated/ReplayDivergence/Note/Projection.hs b/test/conformance-replay/Generated/ReplayDivergence/Note/Projection.hs
--- a/test/conformance-replay/Generated/ReplayDivergence/Note/Projection.hs
+++ b/test/conformance-replay/Generated/ReplayDivergence/Note/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Note; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Note; do not edit.
 module Generated.ReplayDivergence.Note.Projection () where
 
 -- No projection declarations are present; this module keeps the generated manifest inventory total.
diff --git a/test/conformance-replay/Generated/ReplayDivergence/Note/Transducer.hs b/test/conformance-replay/Generated/ReplayDivergence/Note/Transducer.hs
--- a/test/conformance-replay/Generated/ReplayDivergence/Note/Transducer.hs
+++ b/test/conformance-replay/Generated/ReplayDivergence/Note/Transducer.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Note; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Note; do not edit.
 module Generated.ReplayDivergence.Note.Transducer
   ( noteTransducer
   , noteFoldFingerprint
diff --git a/test/conformance-replay/Generated/ReplayDivergence/ReplayAudit.hs b/test/conformance-replay/Generated/ReplayDivergence/ReplayAudit.hs
--- a/test/conformance-replay/Generated/ReplayDivergence/ReplayAudit.hs
+++ b/test/conformance-replay/Generated/ReplayDivergence/ReplayAudit.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context replay-divergence replay-audit assembly; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context replay-divergence replay-audit assembly; do not edit.
 --
 -- Deployment contract:
 --   * replay-neutral diff: no data audit is required;
diff --git a/test/conformance-router-full/Generated/IncidentPaging/BehaviorSourceMap.hs b/test/conformance-router-full/Generated/IncidentPaging/BehaviorSourceMap.hs
--- a/test/conformance-router-full/Generated/IncidentPaging/BehaviorSourceMap.hs
+++ b/test/conformance-router-full/Generated/IncidentPaging/BehaviorSourceMap.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context incident-paging behavior source map; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context incident-paging behavior source map; do not edit.
 module Generated.IncidentPaging.BehaviorSourceMap
   ( BehaviorSourceLocation (..)
   , behaviorSourceLocation
diff --git a/test/conformance-router-full/Generated/IncidentPaging/Page/BehaviorContract.hs b/test/conformance-router-full/Generated/IncidentPaging/Page/BehaviorContract.hs
--- a/test/conformance-router-full/Generated/IncidentPaging/Page/BehaviorContract.hs
+++ b/test/conformance-router-full/Generated/IncidentPaging/Page/BehaviorContract.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Page; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Page; do not edit.
 module Generated.IncidentPaging.Page.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -13,6 +13,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -156,7 +157,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -169,7 +181,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-router-full/Generated/IncidentPaging/Page/Codec.hs b/test/conformance-router-full/Generated/IncidentPaging/Page/Codec.hs
--- a/test/conformance-router-full/Generated/IncidentPaging/Page/Codec.hs
+++ b/test/conformance-router-full/Generated/IncidentPaging/Page/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Page; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Page; do not edit.
 module Generated.IncidentPaging.Page.Codec (
     pageCodec,
     parsePageEvent,
diff --git a/test/conformance-router-full/Generated/IncidentPaging/Page/Domain.hs b/test/conformance-router-full/Generated/IncidentPaging/Page/Domain.hs
--- a/test/conformance-router-full/Generated/IncidentPaging/Page/Domain.hs
+++ b/test/conformance-router-full/Generated/IncidentPaging/Page/Domain.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Page; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Page; do not edit.
 module Generated.IncidentPaging.Page.Domain where
 
 import Data.Text (Text)
diff --git a/test/conformance-router-full/Generated/IncidentPaging/Page/EventStream.hs b/test/conformance-router-full/Generated/IncidentPaging/Page/EventStream.hs
--- a/test/conformance-router-full/Generated/IncidentPaging/Page/EventStream.hs
+++ b/test/conformance-router-full/Generated/IncidentPaging/Page/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Page; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Page; do not edit.
 module Generated.IncidentPaging.Page.EventStream
   ( pageCategory
   , pageCommandCategory
diff --git a/test/conformance-router-full/Generated/IncidentPaging/Page/Harness.hs b/test/conformance-router-full/Generated/IncidentPaging/Page/Harness.hs
--- a/test/conformance-router-full/Generated/IncidentPaging/Page/Harness.hs
+++ b/test/conformance-router-full/Generated/IncidentPaging/Page/Harness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Page; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Page; do not edit.
 module Generated.IncidentPaging.Page.Harness (harnessAssertions) where
 
 import Generated.IncidentPaging.Page.Domain
diff --git a/test/conformance-router-full/Generated/IncidentPaging/Page/Projection.hs b/test/conformance-router-full/Generated/IncidentPaging/Page/Projection.hs
--- a/test/conformance-router-full/Generated/IncidentPaging/Page/Projection.hs
+++ b/test/conformance-router-full/Generated/IncidentPaging/Page/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Page; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Page; do not edit.
 module Generated.IncidentPaging.Page.Projection () where
 
 -- No projection declarations are present; this module keeps the generated manifest inventory total.
diff --git a/test/conformance-router-full/Generated/IncidentPaging/Page/Transducer.hs b/test/conformance-router-full/Generated/IncidentPaging/Page/Transducer.hs
--- a/test/conformance-router-full/Generated/IncidentPaging/Page/Transducer.hs
+++ b/test/conformance-router-full/Generated/IncidentPaging/Page/Transducer.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Page; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Page; do not edit.
 module Generated.IncidentPaging.Page.Transducer
   ( pageTransducer
   , pageFoldFingerprint
diff --git a/test/conformance-router-full/Generated/IncidentPaging/PagingRouter/Router.hs b/test/conformance-router-full/Generated/IncidentPaging/PagingRouter/Router.hs
--- a/test/conformance-router-full/Generated/IncidentPaging/PagingRouter/Router.hs
+++ b/test/conformance-router-full/Generated/IncidentPaging/PagingRouter/Router.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from router PagingRouter; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from router PagingRouter; do not edit.
 module Generated.IncidentPaging.PagingRouter.Router
   ( pagingRouterName
   , pagingRouterWorkerOptions
diff --git a/test/conformance-router-full/Generated/IncidentPaging/PagingRouter/RouterHarness.hs b/test/conformance-router-full/Generated/IncidentPaging/PagingRouter/RouterHarness.hs
--- a/test/conformance-router-full/Generated/IncidentPaging/PagingRouter/RouterHarness.hs
+++ b/test/conformance-router-full/Generated/IncidentPaging/PagingRouter/RouterHarness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from router PagingRouter; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from router PagingRouter; do not edit.
 module Generated.IncidentPaging.PagingRouter.RouterHarness (routerHarnessValues) where
 
 routerHarnessValues :: [(String, String)]
diff --git a/test/conformance-router-full/Generated/IncidentPaging/ReplayAudit.hs b/test/conformance-router-full/Generated/IncidentPaging/ReplayAudit.hs
--- a/test/conformance-router-full/Generated/IncidentPaging/ReplayAudit.hs
+++ b/test/conformance-router-full/Generated/IncidentPaging/ReplayAudit.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context incident-paging replay-audit assembly; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context incident-paging replay-audit assembly; do not edit.
 --
 -- Deployment contract:
 --   * replay-neutral diff: no data audit is required;
diff --git a/test/conformance-router-full/Generated/IncidentPaging/ServiceOncall/ReadModel.hs b/test/conformance-router-full/Generated/IncidentPaging/ServiceOncall/ReadModel.hs
--- a/test/conformance-router-full/Generated/IncidentPaging/ServiceOncall/ReadModel.hs
+++ b/test/conformance-router-full/Generated/IncidentPaging/ServiceOncall/ReadModel.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from readmodel service_oncall; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from readmodel service_oncall; do not edit.
 module Generated.IncidentPaging.ServiceOncall.ReadModel
   ( serviceOncallReadModel
   , serviceOncallQualifiedTable
diff --git a/test/conformance-router-full/Generated/IncidentPaging/ServiceOncall/ReadModelHarness.hs b/test/conformance-router-full/Generated/IncidentPaging/ServiceOncall/ReadModelHarness.hs
--- a/test/conformance-router-full/Generated/IncidentPaging/ServiceOncall/ReadModelHarness.hs
+++ b/test/conformance-router-full/Generated/IncidentPaging/ServiceOncall/ReadModelHarness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from readmodel service_oncall; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from readmodel service_oncall; do not edit.
 module Generated.IncidentPaging.ServiceOncall.ReadModelHarness (readModelFacts, readModelFactResults, runReadModelFacts) where
 
 import Generated.IncidentPaging.ServiceOncall.ReadModel (serviceOncallReadModel, serviceOncallAsyncProjection)
diff --git a/test/conformance-router-full/Generated/IncidentPaging/ServiceOncall/ReadModelTable.hs b/test/conformance-router-full/Generated/IncidentPaging/ServiceOncall/ReadModelTable.hs
--- a/test/conformance-router-full/Generated/IncidentPaging/ServiceOncall/ReadModelTable.hs
+++ b/test/conformance-router-full/Generated/IncidentPaging/ServiceOncall/ReadModelTable.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from readmodel service_oncall; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from readmodel service_oncall; do not edit.
 module Generated.IncidentPaging.ServiceOncall.ReadModelTable (serviceOncallQualifiedTable) where
 
 import Data.Text (Text)
diff --git a/test/conformance-router-runtime/Generated/IncidentPaging/BehaviorSourceMap.hs b/test/conformance-router-runtime/Generated/IncidentPaging/BehaviorSourceMap.hs
--- a/test/conformance-router-runtime/Generated/IncidentPaging/BehaviorSourceMap.hs
+++ b/test/conformance-router-runtime/Generated/IncidentPaging/BehaviorSourceMap.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context incident-paging behavior source map; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context incident-paging behavior source map; do not edit.
 module Generated.IncidentPaging.BehaviorSourceMap
   ( BehaviorSourceLocation (..)
   , behaviorSourceLocation
diff --git a/test/conformance-router-runtime/Generated/IncidentPaging/Page/BehaviorContract.hs b/test/conformance-router-runtime/Generated/IncidentPaging/Page/BehaviorContract.hs
--- a/test/conformance-router-runtime/Generated/IncidentPaging/Page/BehaviorContract.hs
+++ b/test/conformance-router-runtime/Generated/IncidentPaging/Page/BehaviorContract.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Page; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Page; do not edit.
 module Generated.IncidentPaging.Page.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -13,6 +13,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -156,7 +157,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -169,7 +181,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-router-runtime/Generated/IncidentPaging/Page/Codec.hs b/test/conformance-router-runtime/Generated/IncidentPaging/Page/Codec.hs
--- a/test/conformance-router-runtime/Generated/IncidentPaging/Page/Codec.hs
+++ b/test/conformance-router-runtime/Generated/IncidentPaging/Page/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Page; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Page; do not edit.
 module Generated.IncidentPaging.Page.Codec (
     pageCodec,
     parsePageEvent,
diff --git a/test/conformance-router-runtime/Generated/IncidentPaging/Page/Domain.hs b/test/conformance-router-runtime/Generated/IncidentPaging/Page/Domain.hs
--- a/test/conformance-router-runtime/Generated/IncidentPaging/Page/Domain.hs
+++ b/test/conformance-router-runtime/Generated/IncidentPaging/Page/Domain.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Page; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Page; do not edit.
 module Generated.IncidentPaging.Page.Domain where
 
 import Data.Text (Text)
diff --git a/test/conformance-router-runtime/Generated/IncidentPaging/Page/EventStream.hs b/test/conformance-router-runtime/Generated/IncidentPaging/Page/EventStream.hs
--- a/test/conformance-router-runtime/Generated/IncidentPaging/Page/EventStream.hs
+++ b/test/conformance-router-runtime/Generated/IncidentPaging/Page/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Page; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Page; do not edit.
 module Generated.IncidentPaging.Page.EventStream
   ( pageCategory
   , pageCommandCategory
diff --git a/test/conformance-router-runtime/Generated/IncidentPaging/Page/Harness.hs b/test/conformance-router-runtime/Generated/IncidentPaging/Page/Harness.hs
--- a/test/conformance-router-runtime/Generated/IncidentPaging/Page/Harness.hs
+++ b/test/conformance-router-runtime/Generated/IncidentPaging/Page/Harness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Page; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Page; do not edit.
 module Generated.IncidentPaging.Page.Harness (harnessAssertions) where
 
 import Generated.IncidentPaging.Page.Domain
diff --git a/test/conformance-router-runtime/Generated/IncidentPaging/Page/Projection.hs b/test/conformance-router-runtime/Generated/IncidentPaging/Page/Projection.hs
--- a/test/conformance-router-runtime/Generated/IncidentPaging/Page/Projection.hs
+++ b/test/conformance-router-runtime/Generated/IncidentPaging/Page/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Page; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Page; do not edit.
 module Generated.IncidentPaging.Page.Projection () where
 
 -- No projection declarations are present; this module keeps the generated manifest inventory total.
diff --git a/test/conformance-router-runtime/Generated/IncidentPaging/Page/Transducer.hs b/test/conformance-router-runtime/Generated/IncidentPaging/Page/Transducer.hs
--- a/test/conformance-router-runtime/Generated/IncidentPaging/Page/Transducer.hs
+++ b/test/conformance-router-runtime/Generated/IncidentPaging/Page/Transducer.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Page; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Page; do not edit.
 module Generated.IncidentPaging.Page.Transducer
   ( pageTransducer
   , pageFoldFingerprint
diff --git a/test/conformance-router-runtime/Generated/IncidentPaging/PagingRouter/Router.hs b/test/conformance-router-runtime/Generated/IncidentPaging/PagingRouter/Router.hs
--- a/test/conformance-router-runtime/Generated/IncidentPaging/PagingRouter/Router.hs
+++ b/test/conformance-router-runtime/Generated/IncidentPaging/PagingRouter/Router.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from router PagingRouter; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from router PagingRouter; do not edit.
 module Generated.IncidentPaging.PagingRouter.Router
   ( pagingRouterName
   , pagingRouterWorkerOptions
diff --git a/test/conformance-router-runtime/Generated/IncidentPaging/PagingRouter/RouterHarness.hs b/test/conformance-router-runtime/Generated/IncidentPaging/PagingRouter/RouterHarness.hs
--- a/test/conformance-router-runtime/Generated/IncidentPaging/PagingRouter/RouterHarness.hs
+++ b/test/conformance-router-runtime/Generated/IncidentPaging/PagingRouter/RouterHarness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from router PagingRouter; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from router PagingRouter; do not edit.
 module Generated.IncidentPaging.PagingRouter.RouterHarness (routerHarnessValues) where
 
 routerHarnessValues :: [(String, String)]
diff --git a/test/conformance-router-runtime/Generated/IncidentPaging/ReplayAudit.hs b/test/conformance-router-runtime/Generated/IncidentPaging/ReplayAudit.hs
--- a/test/conformance-router-runtime/Generated/IncidentPaging/ReplayAudit.hs
+++ b/test/conformance-router-runtime/Generated/IncidentPaging/ReplayAudit.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context incident-paging replay-audit assembly; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context incident-paging replay-audit assembly; do not edit.
 --
 -- Deployment contract:
 --   * replay-neutral diff: no data audit is required;
diff --git a/test/conformance-router-runtime/Generated/IncidentPaging/ServiceOncall/ReadModel.hs b/test/conformance-router-runtime/Generated/IncidentPaging/ServiceOncall/ReadModel.hs
--- a/test/conformance-router-runtime/Generated/IncidentPaging/ServiceOncall/ReadModel.hs
+++ b/test/conformance-router-runtime/Generated/IncidentPaging/ServiceOncall/ReadModel.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from readmodel service_oncall; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from readmodel service_oncall; do not edit.
 module Generated.IncidentPaging.ServiceOncall.ReadModel
   ( serviceOncallReadModel
   , serviceOncallQualifiedTable
diff --git a/test/conformance-router-runtime/Generated/IncidentPaging/ServiceOncall/ReadModelHarness.hs b/test/conformance-router-runtime/Generated/IncidentPaging/ServiceOncall/ReadModelHarness.hs
--- a/test/conformance-router-runtime/Generated/IncidentPaging/ServiceOncall/ReadModelHarness.hs
+++ b/test/conformance-router-runtime/Generated/IncidentPaging/ServiceOncall/ReadModelHarness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from readmodel service_oncall; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from readmodel service_oncall; do not edit.
 module Generated.IncidentPaging.ServiceOncall.ReadModelHarness (readModelFacts, readModelFactResults, runReadModelFacts) where
 
 import Generated.IncidentPaging.ServiceOncall.ReadModel (serviceOncallReadModel, serviceOncallAsyncProjection)
diff --git a/test/conformance-router-runtime/Generated/IncidentPaging/ServiceOncall/ReadModelTable.hs b/test/conformance-router-runtime/Generated/IncidentPaging/ServiceOncall/ReadModelTable.hs
--- a/test/conformance-router-runtime/Generated/IncidentPaging/ServiceOncall/ReadModelTable.hs
+++ b/test/conformance-router-runtime/Generated/IncidentPaging/ServiceOncall/ReadModelTable.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from readmodel service_oncall; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from readmodel service_oncall; do not edit.
 module Generated.IncidentPaging.ServiceOncall.ReadModelTable (serviceOncallQualifiedTable) where
 
 import Data.Text (Text)
diff --git a/test/conformance-router/Generated/IncidentPaging/BehaviorSourceMap.hs b/test/conformance-router/Generated/IncidentPaging/BehaviorSourceMap.hs
--- a/test/conformance-router/Generated/IncidentPaging/BehaviorSourceMap.hs
+++ b/test/conformance-router/Generated/IncidentPaging/BehaviorSourceMap.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context incident-paging behavior source map; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context incident-paging behavior source map; do not edit.
 module Generated.IncidentPaging.BehaviorSourceMap
   ( BehaviorSourceLocation (..)
   , behaviorSourceLocation
diff --git a/test/conformance-router/Generated/IncidentPaging/Page/BehaviorContract.hs b/test/conformance-router/Generated/IncidentPaging/Page/BehaviorContract.hs
--- a/test/conformance-router/Generated/IncidentPaging/Page/BehaviorContract.hs
+++ b/test/conformance-router/Generated/IncidentPaging/Page/BehaviorContract.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Page; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Page; do not edit.
 module Generated.IncidentPaging.Page.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -13,6 +13,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -156,7 +157,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -169,7 +181,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-router/Generated/IncidentPaging/Page/Codec.hs b/test/conformance-router/Generated/IncidentPaging/Page/Codec.hs
--- a/test/conformance-router/Generated/IncidentPaging/Page/Codec.hs
+++ b/test/conformance-router/Generated/IncidentPaging/Page/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Page; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Page; do not edit.
 module Generated.IncidentPaging.Page.Codec (
     pageCodec,
     parsePageEvent,
diff --git a/test/conformance-router/Generated/IncidentPaging/Page/Domain.hs b/test/conformance-router/Generated/IncidentPaging/Page/Domain.hs
--- a/test/conformance-router/Generated/IncidentPaging/Page/Domain.hs
+++ b/test/conformance-router/Generated/IncidentPaging/Page/Domain.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Page; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Page; do not edit.
 module Generated.IncidentPaging.Page.Domain where
 
 import Data.Text (Text)
diff --git a/test/conformance-router/Generated/IncidentPaging/Page/EventStream.hs b/test/conformance-router/Generated/IncidentPaging/Page/EventStream.hs
--- a/test/conformance-router/Generated/IncidentPaging/Page/EventStream.hs
+++ b/test/conformance-router/Generated/IncidentPaging/Page/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Page; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Page; do not edit.
 module Generated.IncidentPaging.Page.EventStream
   ( pageCategory
   , pageCommandCategory
diff --git a/test/conformance-router/Generated/IncidentPaging/Page/Harness.hs b/test/conformance-router/Generated/IncidentPaging/Page/Harness.hs
--- a/test/conformance-router/Generated/IncidentPaging/Page/Harness.hs
+++ b/test/conformance-router/Generated/IncidentPaging/Page/Harness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Page; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Page; do not edit.
 module Generated.IncidentPaging.Page.Harness (harnessAssertions) where
 
 import Generated.IncidentPaging.Page.Domain
diff --git a/test/conformance-router/Generated/IncidentPaging/Page/Projection.hs b/test/conformance-router/Generated/IncidentPaging/Page/Projection.hs
--- a/test/conformance-router/Generated/IncidentPaging/Page/Projection.hs
+++ b/test/conformance-router/Generated/IncidentPaging/Page/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Page; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Page; do not edit.
 module Generated.IncidentPaging.Page.Projection () where
 
 -- No projection declarations are present; this module keeps the generated manifest inventory total.
diff --git a/test/conformance-router/Generated/IncidentPaging/Page/Transducer.hs b/test/conformance-router/Generated/IncidentPaging/Page/Transducer.hs
--- a/test/conformance-router/Generated/IncidentPaging/Page/Transducer.hs
+++ b/test/conformance-router/Generated/IncidentPaging/Page/Transducer.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Page; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Page; do not edit.
 module Generated.IncidentPaging.Page.Transducer
   ( pageTransducer
   , pageFoldFingerprint
diff --git a/test/conformance-router/Generated/IncidentPaging/PagingRouter/Router.hs b/test/conformance-router/Generated/IncidentPaging/PagingRouter/Router.hs
--- a/test/conformance-router/Generated/IncidentPaging/PagingRouter/Router.hs
+++ b/test/conformance-router/Generated/IncidentPaging/PagingRouter/Router.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from router PagingRouter; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from router PagingRouter; do not edit.
 module Generated.IncidentPaging.PagingRouter.Router
   ( pagingRouterName
   , pagingRouterWorkerOptions
diff --git a/test/conformance-router/Generated/IncidentPaging/PagingRouter/RouterHarness.hs b/test/conformance-router/Generated/IncidentPaging/PagingRouter/RouterHarness.hs
--- a/test/conformance-router/Generated/IncidentPaging/PagingRouter/RouterHarness.hs
+++ b/test/conformance-router/Generated/IncidentPaging/PagingRouter/RouterHarness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from router PagingRouter; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from router PagingRouter; do not edit.
 module Generated.IncidentPaging.PagingRouter.RouterHarness (routerHarnessValues) where
 
 routerHarnessValues :: [(String, String)]
diff --git a/test/conformance-router/Generated/IncidentPaging/ReplayAudit.hs b/test/conformance-router/Generated/IncidentPaging/ReplayAudit.hs
--- a/test/conformance-router/Generated/IncidentPaging/ReplayAudit.hs
+++ b/test/conformance-router/Generated/IncidentPaging/ReplayAudit.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context incident-paging replay-audit assembly; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context incident-paging replay-audit assembly; do not edit.
 --
 -- Deployment contract:
 --   * replay-neutral diff: no data audit is required;
diff --git a/test/conformance-router/Generated/IncidentPaging/ServiceOncall/ReadModel.hs b/test/conformance-router/Generated/IncidentPaging/ServiceOncall/ReadModel.hs
--- a/test/conformance-router/Generated/IncidentPaging/ServiceOncall/ReadModel.hs
+++ b/test/conformance-router/Generated/IncidentPaging/ServiceOncall/ReadModel.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from readmodel service_oncall; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from readmodel service_oncall; do not edit.
 module Generated.IncidentPaging.ServiceOncall.ReadModel
   ( serviceOncallReadModel
   , serviceOncallQualifiedTable
diff --git a/test/conformance-router/Generated/IncidentPaging/ServiceOncall/ReadModelHarness.hs b/test/conformance-router/Generated/IncidentPaging/ServiceOncall/ReadModelHarness.hs
--- a/test/conformance-router/Generated/IncidentPaging/ServiceOncall/ReadModelHarness.hs
+++ b/test/conformance-router/Generated/IncidentPaging/ServiceOncall/ReadModelHarness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from readmodel service_oncall; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from readmodel service_oncall; do not edit.
 module Generated.IncidentPaging.ServiceOncall.ReadModelHarness (readModelFacts, readModelFactResults, runReadModelFacts) where
 
 import Generated.IncidentPaging.ServiceOncall.ReadModel (serviceOncallReadModel, serviceOncallAsyncProjection)
diff --git a/test/conformance-router/Generated/IncidentPaging/ServiceOncall/ReadModelTable.hs b/test/conformance-router/Generated/IncidentPaging/ServiceOncall/ReadModelTable.hs
--- a/test/conformance-router/Generated/IncidentPaging/ServiceOncall/ReadModelTable.hs
+++ b/test/conformance-router/Generated/IncidentPaging/ServiceOncall/ReadModelTable.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from readmodel service_oncall; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from readmodel service_oncall; do not edit.
 module Generated.IncidentPaging.ServiceOncall.ReadModelTable (serviceOncallQualifiedTable) where
 
 import Data.Text (Text)
diff --git a/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/BehaviorSourceMap.hs b/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/BehaviorSourceMap.hs
--- a/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/BehaviorSourceMap.hs
+++ b/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/BehaviorSourceMap.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context aggregate-scalar-expressions behavior source map; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context aggregate-scalar-expressions behavior source map; do not edit.
 module Generated.AggregateScalarExpressions.BehaviorSourceMap
   ( BehaviorSourceLocation (..)
   , behaviorSourceLocation
diff --git a/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/Nominals.hs b/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/Nominals.hs
--- a/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/Nominals.hs
+++ b/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/Nominals.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE DeriveAnyClass #-}
 {-# LANGUAGE TypeFamilies #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context aggregate-scalar-expressions generated nominal declarations; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context aggregate-scalar-expressions generated nominal declarations; do not edit.
 module Generated.AggregateScalarExpressions.Nominals
   ( AccountMode (..)
   , accountModeText
diff --git a/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/Nominals/Internal.hs b/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/Nominals/Internal.hs
--- a/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/Nominals/Internal.hs
+++ b/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/Nominals/Internal.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context aggregate-scalar-expressions generated nominal ID internals; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context aggregate-scalar-expressions generated nominal ID internals; do not edit.
 module Generated.AggregateScalarExpressions.Nominals.Internal
   ( RequestId
   , parseRequestId
diff --git a/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/ReplayAudit.hs b/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/ReplayAudit.hs
--- a/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/ReplayAudit.hs
+++ b/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/ReplayAudit.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context aggregate-scalar-expressions replay-audit assembly; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context aggregate-scalar-expressions replay-audit assembly; do not edit.
 --
 -- Deployment contract:
 --   * replay-neutral diff: no data audit is required;
diff --git a/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/ScalarAccount/BehaviorContract.hs b/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/ScalarAccount/BehaviorContract.hs
--- a/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/ScalarAccount/BehaviorContract.hs
+++ b/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/ScalarAccount/BehaviorContract.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate ScalarAccount; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate ScalarAccount; do not edit.
 module Generated.AggregateScalarExpressions.ScalarAccount.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -14,6 +14,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -205,7 +206,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -218,7 +230,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/ScalarAccount/Codec.hs b/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/ScalarAccount/Codec.hs
--- a/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/ScalarAccount/Codec.hs
+++ b/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/ScalarAccount/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate ScalarAccount; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate ScalarAccount; do not edit.
 module Generated.AggregateScalarExpressions.ScalarAccount.Codec (
     scalarAccountCodec,
     parseScalarAccountEvent,
diff --git a/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/ScalarAccount/Domain.hs b/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/ScalarAccount/Domain.hs
--- a/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/ScalarAccount/Domain.hs
+++ b/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/ScalarAccount/Domain.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE DeriveAnyClass #-}
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate ScalarAccount; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate ScalarAccount; do not edit.
 module Generated.AggregateScalarExpressions.ScalarAccount.Domain where
 
 import Data.Aeson (FromJSON, ToJSON)
diff --git a/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/ScalarAccount/EventStream.hs b/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/ScalarAccount/EventStream.hs
--- a/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/ScalarAccount/EventStream.hs
+++ b/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/ScalarAccount/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate ScalarAccount; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate ScalarAccount; do not edit.
 module Generated.AggregateScalarExpressions.ScalarAccount.EventStream
   ( scalarAccountCategory
   , scalarAccountCommandCategory
diff --git a/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/ScalarAccount/Harness.hs b/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/ScalarAccount/Harness.hs
--- a/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/ScalarAccount/Harness.hs
+++ b/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/ScalarAccount/Harness.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate ScalarAccount; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate ScalarAccount; do not edit.
 module Generated.AggregateScalarExpressions.ScalarAccount.Harness (harnessAssertions) where
 
 import Generated.AggregateScalarExpressions.ScalarAccount.Domain
diff --git a/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/ScalarAccount/Projection.hs b/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/ScalarAccount/Projection.hs
--- a/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/ScalarAccount/Projection.hs
+++ b/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/ScalarAccount/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate ScalarAccount; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate ScalarAccount; do not edit.
 module Generated.AggregateScalarExpressions.ScalarAccount.Projection () where
 
 -- No projection declarations are present; this module keeps the generated manifest inventory total.
diff --git a/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/ScalarAccount/Transducer.hs b/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/ScalarAccount/Transducer.hs
--- a/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/ScalarAccount/Transducer.hs
+++ b/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/ScalarAccount/Transducer.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE OverloadedLabels #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate ScalarAccount; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate ScalarAccount; do not edit.
 module Generated.AggregateScalarExpressions.ScalarAccount.Transducer
   ( scalarAccountTransducer
   , scalarAccountFoldFingerprint
diff --git a/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/Structural/Shape/Limits.hs b/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/Structural/Shape/Limits.hs
--- a/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/Structural/Shape/Limits.hs
+++ b/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/Structural/Shape/Limits.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from mapped structural Limits; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from mapped structural Limits; do not edit.
 module Generated.AggregateScalarExpressions.Structural.Shape.Limits (LimitsShape (..)) where
 
 import GHC.Generics (Generic)
diff --git a/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/StructuralConformance.hs b/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/StructuralConformance.hs
--- a/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/StructuralConformance.hs
+++ b/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/StructuralConformance.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context aggregate-scalar-expressions structural conformance; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context aggregate-scalar-expressions structural conformance; do not edit.
 module Generated.AggregateScalarExpressions.StructuralConformance
   ( structuralConformanceAssertions
   ) where
diff --git a/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/StructuralProjections.hs b/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/StructuralProjections.hs
--- a/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/StructuralProjections.hs
+++ b/test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/StructuralProjections.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TypeFamilies #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context aggregate-scalar-expressions mapped structural facade; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context aggregate-scalar-expressions mapped structural facade; do not edit.
 -- Equality witnesses are emitted for Text, Int, Bool, Natural, and UTCTime.
 -- Nominal ID and enum leaves carry exact canonical-text domains.
 -- Int, Natural, and UTCTime belong to Keiki's ordered subset.
diff --git a/test/conformance-service-package/domain/assignment.keiro b/test/conformance-service-package/domain/assignment.keiro
new file mode 100644
--- /dev/null
+++ b/test/conformance-service-package/domain/assignment.keiro
@@ -0,0 +1,48 @@
+language keiro-dsl 4
+context workspace-proof
+
+mapped opaque PropertyValues {
+  haskell package=keiro-dsl-conformance-service-runtime module=Proof.WorkspaceProof.AssignmentDomain type=PropertyValues
+  codec = "conformance.history-dependent-holes.PropertyValues.json"
+  version = "1"
+  fixtures = "Proof.WorkspaceProof.AssignmentSupport.propertyValuesCases"
+  initial = "Proof.WorkspaceProof.AssignmentSupport.emptyPropertyValues"
+}
+
+aggregate Assignment
+  regs
+    values PropertyValues = initial
+  states Active
+
+  command SetProperty { key:Text value:Text }
+  command ClearProperty { key:Text }
+  command Touch { note:Text }
+
+  event PropertySet = fields(SetProperty)
+  event PropertyCleared = fields(ClearProperty)
+  event Touched = fields(Touch)
+
+  # Hole-owned: insert key -> value.
+  Active -- SetProperty -->
+    implementation hole
+    emit PropertySet
+    goto Active
+
+  # Hole-owned: the key must already be present; delete it.
+  Active -- ClearProperty -->
+    implementation hole
+    emit PropertyCleared
+    goto Active
+
+  # Generated-owned: keeps the ordinary synthetic probe.
+  Active -- Touch -->
+    emit Touched
+    goto Active
+
+  # Retained history: clears of absent keys appended under a retired rule.
+  replay-only Active -- ClearProperty -->
+    implementation hole
+    emit PropertyCleared
+    goto Active
+
+  wire kind=ctorName fields=camelCase schemaVersion=1
diff --git a/test/conformance-service-package/runtime/keiro-dsl-conformance-service-runtime.cabal b/test/conformance-service-package/runtime/keiro-dsl-conformance-service-runtime.cabal
--- a/test/conformance-service-package/runtime/keiro-dsl-conformance-service-runtime.cabal
+++ b/test/conformance-service-package/runtime/keiro-dsl-conformance-service-runtime.cabal
@@ -11,6 +11,17 @@
   exposed-modules:
     Proof.WorkspaceProof.Generated.Conformance
   other-modules:
+    Proof.WorkspaceProof.Assignment.BehaviorHoles
+    Proof.WorkspaceProof.Assignment.Generated.BehaviorContract
+    Proof.WorkspaceProof.Assignment.Generated.Codec
+    Proof.WorkspaceProof.Assignment.Generated.Domain
+    Proof.WorkspaceProof.Assignment.Generated.EventStream
+    Proof.WorkspaceProof.Assignment.Generated.Harness
+    Proof.WorkspaceProof.Assignment.Generated.Projection
+    Proof.WorkspaceProof.Assignment.Generated.Transducer
+    Proof.WorkspaceProof.Assignment.Holes
+    Proof.WorkspaceProof.AssignmentDomain
+    Proof.WorkspaceProof.AssignmentSupport
     Proof.WorkspaceProof.Alpha.BehaviorHoles
     Proof.WorkspaceProof.Alpha.Generated.BehaviorContract
     Proof.WorkspaceProof.Alpha.Generated.Codec
@@ -39,6 +50,7 @@
     Proof.WorkspaceProof.Generated.Nominals
     Proof.WorkspaceProof.Generated.Nominals.Internal
     Proof.WorkspaceProof.Generated.ReplayAudit
+    Proof.WorkspaceProof.Generated.StructuralConformance
     Proof.WorkspaceProof.WorkspaceProofWorkflow.Generated.WorkflowFacts
     Proof.WorkspaceProof.WorkspaceProofWorkflow.Generated.WorkflowRuntime
   build-depends:
diff --git a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Alpha/Generated/BehaviorContract.hs b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Alpha/Generated/BehaviorContract.hs
--- a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Alpha/Generated/BehaviorContract.hs
+++ b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Alpha/Generated/BehaviorContract.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Alpha; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Alpha; do not edit.
 module Proof.WorkspaceProof.Alpha.Generated.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -13,6 +13,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -180,7 +181,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -193,7 +205,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Alpha/Generated/Codec.hs b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Alpha/Generated/Codec.hs
--- a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Alpha/Generated/Codec.hs
+++ b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Alpha/Generated/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Alpha; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Alpha; do not edit.
 module Proof.WorkspaceProof.Alpha.Generated.Codec (
     alphaCodec,
     parseAlphaEvent,
diff --git a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Alpha/Generated/Domain.hs b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Alpha/Generated/Domain.hs
--- a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Alpha/Generated/Domain.hs
+++ b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Alpha/Generated/Domain.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Alpha; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Alpha; do not edit.
 module Proof.WorkspaceProof.Alpha.Generated.Domain where
 
 import GHC.Generics (Generic)
diff --git a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Alpha/Generated/EventStream.hs b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Alpha/Generated/EventStream.hs
--- a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Alpha/Generated/EventStream.hs
+++ b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Alpha/Generated/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Alpha; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Alpha; do not edit.
 module Proof.WorkspaceProof.Alpha.Generated.EventStream
   ( alphaCategory
   , alphaCommandCategory
diff --git a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Alpha/Generated/Harness.hs b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Alpha/Generated/Harness.hs
--- a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Alpha/Generated/Harness.hs
+++ b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Alpha/Generated/Harness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Alpha; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Alpha; do not edit.
 module Proof.WorkspaceProof.Alpha.Generated.Harness (harnessAssertions) where
 
 import Proof.WorkspaceProof.Alpha.Generated.Domain
diff --git a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Alpha/Generated/Projection.hs b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Alpha/Generated/Projection.hs
--- a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Alpha/Generated/Projection.hs
+++ b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Alpha/Generated/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Alpha; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Alpha; do not edit.
 module Proof.WorkspaceProof.Alpha.Generated.Projection () where
 
 -- No projection declarations are present; this module keeps the generated manifest inventory total.
diff --git a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Alpha/Generated/Transducer.hs b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Alpha/Generated/Transducer.hs
--- a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Alpha/Generated/Transducer.hs
+++ b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Alpha/Generated/Transducer.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Alpha; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Alpha; do not edit.
 module Proof.WorkspaceProof.Alpha.Generated.Transducer
   ( alphaTransducer
   , alphaFoldFingerprint
diff --git a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/AlphaView/Generated/ReadModel.hs b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/AlphaView/Generated/ReadModel.hs
--- a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/AlphaView/Generated/ReadModel.hs
+++ b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/AlphaView/Generated/ReadModel.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from readmodel alpha_view; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from readmodel alpha_view; do not edit.
 module Proof.WorkspaceProof.AlphaView.Generated.ReadModel
   ( alphaViewReadModel
   , alphaViewQualifiedTable
diff --git a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/AlphaView/Generated/ReadModelHarness.hs b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/AlphaView/Generated/ReadModelHarness.hs
--- a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/AlphaView/Generated/ReadModelHarness.hs
+++ b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/AlphaView/Generated/ReadModelHarness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from readmodel alpha_view; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from readmodel alpha_view; do not edit.
 module Proof.WorkspaceProof.AlphaView.Generated.ReadModelHarness (readModelFacts, readModelFactResults, runReadModelFacts) where
 
 import Proof.WorkspaceProof.AlphaView.Generated.ReadModel (alphaViewReadModel, alphaViewAsyncProjection)
diff --git a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/AlphaView/Generated/ReadModelTable.hs b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/AlphaView/Generated/ReadModelTable.hs
--- a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/AlphaView/Generated/ReadModelTable.hs
+++ b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/AlphaView/Generated/ReadModelTable.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from readmodel alpha_view; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from readmodel alpha_view; do not edit.
 module Proof.WorkspaceProof.AlphaView.Generated.ReadModelTable (alphaViewQualifiedTable) where
 
 import Data.Text (Text)
diff --git a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Assignment/BehaviorHoles.hs b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Assignment/BehaviorHoles.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Assignment/BehaviorHoles.hs
@@ -0,0 +1,13 @@
+module Proof.WorkspaceProof.Assignment.BehaviorHoles (behaviorWitnesses) where
+
+import Data.List.NonEmpty (NonEmpty (..))
+import Proof.WorkspaceProof.Assignment.Generated.BehaviorContract
+import Proof.WorkspaceProof.Assignment.Generated.Domain
+
+behaviorWitnesses :: [BehaviorWitness]
+behaviorWitnesses =
+  [ LiveWitness (BehaviorKey "behavior-v1-fbe5335a1e485829") [] (SetProperty (SetPropertyData "colour" "blue")) (Emits (PropertySet (PropertySetData "colour" "blue") :| []))
+  , LiveWitness (BehaviorKey "behavior-v1-075a56dd42e6bc95") [PropertySet (PropertySetData "colour" "blue")] (ClearProperty (ClearPropertyData "colour")) (Emits (PropertyCleared (PropertyClearedData "colour") :| []))
+  , LiveWitness (BehaviorKey "behavior-v1-0db4efc62e642065") [] (Touch (TouchData "touch")) (Emits (Touched (TouchedData "touch") :| []))
+  , ReplayWitness (BehaviorKey "behavior-v1-9200cd4f93c83098") [] [PropertyCleared (PropertyClearedData "colour")]
+  ]
diff --git a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Assignment/Generated/BehaviorContract.hs b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Assignment/Generated/BehaviorContract.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Assignment/Generated/BehaviorContract.hs
@@ -0,0 +1,388 @@
+{-# LANGUAGE OverloadedLabels #-}
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Assignment; do not edit.
+module Proof.WorkspaceProof.Assignment.Generated.BehaviorContract
+  ( BehaviorKey (..)
+  , unBehaviorKey
+  , ObligationKind (..)
+  , EvidenceLevel (..)
+  , GuardCoverage (..)
+  , BehaviorRequirement (..)
+  , RejectionClass (..)
+  , LiveExpectation (..)
+  , BehaviorWitness (..)
+  , BehaviorFailure (..)
+  , BehaviorConformanceReport (..)
+  , behaviorRequirements
+  , behaviorCoverageReport
+  , behaviorObligationReport
+  , behaviorConformancePassed
+  , behaviorConformancePassedWith
+  , renderBehaviorConformanceText
+  ) where
+
+import Proof.WorkspaceProof.Assignment.Generated.Codec (encodeAssignmentEvent, parseAssignmentEvent, assignmentCodec)
+import Proof.WorkspaceProof.Assignment.Generated.Domain
+import Proof.WorkspaceProof.Assignment.Generated.Transducer (assignmentTransducer)
+import Proof.WorkspaceProof.Generated.BehaviorSourceMap qualified as BehaviorSourceMap
+import Data.Aeson (ToJSON (..), object, (.=))
+import Data.List (sortOn)
+import Data.List.NonEmpty (NonEmpty)
+import Data.List.NonEmpty qualified as NonEmpty
+import Data.Map.Strict qualified as Map
+import Data.Text (Text)
+import Data.Text qualified as T
+import Keiki.Core qualified as K (EdgeMode (..), EdgeRef (..), RegFile, ReplayAttribution (..), ReplayEventSpan (..), ReplaySuccess (..), StepFailure (..), StepSuccess (..), applyEventsDetailedEither, stepDetailedEither, (!))
+import Keiro.Codec qualified as Codec (Codec (eventType), EventType (..))
+
+newtype BehaviorKey = BehaviorKey { unBehaviorKey :: Text }
+  deriving stock (Eq, Ord, Show)
+
+unBehaviorKey :: BehaviorKey -> Text
+unBehaviorKey (BehaviorKey value) = value
+
+data ObligationKind = LiveTransition | RequiredRejection | ReplayTransition
+  deriving stock (Eq, Ord, Show)
+
+data EvidenceLevel = GeneratedAuthoritative | HoleWitnessed | LegacyRuntimeWitness
+  deriving stock (Eq, Ord, Show)
+
+data GuardCoverage = GuardTotal | GuardPartial | GuardUnknown | GuardNotApplicable
+  deriving stock (Eq, Ord, Show)
+
+data BehaviorRequirement = BehaviorRequirement
+  { key :: !BehaviorKey
+  , kind :: !ObligationKind
+  , evidence :: !EvidenceLevel
+  , guardCoverage :: !GuardCoverage
+  , source :: !AssignmentVertex
+  , commandName :: !Text
+  , expectedEdge :: !(Maybe (K.EdgeRef AssignmentVertex))
+  , target :: !(Maybe AssignmentVertex)
+  , eventKinds :: ![Text]
+  }
+  deriving stock (Eq, Show)
+
+data RejectionClass = RejectNoOutgoingEdges | RejectNoMatchingEdge
+  deriving stock (Eq, Show)
+
+data LiveExpectation
+  = Emits (NonEmpty AssignmentEvent)
+  | Rejects RejectionClass
+  | NoOp
+  deriving stock (Eq, Show)
+
+data BehaviorWitness
+  = Pending BehaviorKey
+  | LiveWitness
+      { key :: BehaviorKey
+      , history :: [AssignmentEvent]
+      , command :: AssignmentCommand
+      , expected :: LiveExpectation
+      }
+  | ReplayWitness
+      { key :: BehaviorKey
+      , historyPrefix :: [AssignmentEvent]
+      , observedChunk :: [AssignmentEvent]
+      }
+  deriving stock (Eq, Show)
+
+data BehaviorFailure = BehaviorFailure
+  { key :: !BehaviorKey
+  , subject :: !Text
+  , code :: !Text
+  , detail :: !Text
+  }
+  deriving stock (Eq, Show)
+
+instance ToJSON BehaviorFailure where
+  toJSON behaviorFailure = object
+    [ "key" .= unBehaviorKey behaviorFailure.key
+    , "subject" .= behaviorFailure.subject
+    , "code" .= behaviorFailure.code
+    , "detail" .= behaviorFailure.detail
+    ]
+
+data BehaviorConformanceReport = BehaviorConformanceReport
+  { required :: ![BehaviorKey]
+  , filled :: ![BehaviorKey]
+  , pending :: ![BehaviorKey]
+  , missing :: ![BehaviorKey]
+  , duplicate :: ![BehaviorKey]
+  , stale :: ![BehaviorKey]
+  , failed :: ![BehaviorFailure]
+  , verified :: ![BehaviorKey]
+  , unverified :: ![BehaviorKey]
+  }
+  deriving stock (Eq, Show)
+
+instance ToJSON BehaviorConformanceReport where
+  toJSON report = object
+    [ "schema" .= ("keiro/behavior-conformance/1" :: Text)
+    , "required" .= keyTexts report.required
+    , "filled" .= keyTexts report.filled
+    , "pending" .= keyTexts report.pending
+    , "missing" .= keyTexts report.missing
+    , "duplicate" .= keyTexts report.duplicate
+    , "stale" .= keyTexts report.stale
+    , "failed" .= report.failed
+    , "verified" .= keyTexts report.verified
+    , "unverified" .= keyTexts report.unverified
+    ]
+
+behaviorRequirements :: [BehaviorRequirement]
+behaviorRequirements =
+  [ -- AssignmentActive x ClearProperty: live transition
+    BehaviorRequirement
+      { key = BehaviorKey "behavior-v1-075a56dd42e6bc95"
+      , kind = LiveTransition
+      , evidence = HoleWitnessed
+      , guardCoverage = GuardTotal
+      , source = AssignmentActive
+      , commandName = "ClearProperty"
+      , expectedEdge = (Just (K.EdgeRef AssignmentActive 1))
+      , target = Just AssignmentActive
+      , eventKinds = ["PropertyCleared"]
+      }
+  , -- AssignmentActive x Touch: live transition
+    BehaviorRequirement
+      { key = BehaviorKey "behavior-v1-0db4efc62e642065"
+      , kind = LiveTransition
+      , evidence = GeneratedAuthoritative
+      , guardCoverage = GuardTotal
+      , source = AssignmentActive
+      , commandName = "Touch"
+      , expectedEdge = (Just (K.EdgeRef AssignmentActive 2))
+      , target = Just AssignmentActive
+      , eventKinds = ["Touched"]
+      }
+  , -- AssignmentActive x ClearProperty: replay-only transition
+    BehaviorRequirement
+      { key = BehaviorKey "behavior-v1-9200cd4f93c83098"
+      , kind = ReplayTransition
+      , evidence = HoleWitnessed
+      , guardCoverage = GuardNotApplicable
+      , source = AssignmentActive
+      , commandName = "ClearProperty"
+      , expectedEdge = (Just (K.EdgeRef AssignmentActive 3))
+      , target = Just AssignmentActive
+      , eventKinds = ["PropertyCleared"]
+      }
+  , -- AssignmentActive x SetProperty: live transition
+    BehaviorRequirement
+      { key = BehaviorKey "behavior-v1-fbe5335a1e485829"
+      , kind = LiveTransition
+      , evidence = HoleWitnessed
+      , guardCoverage = GuardTotal
+      , source = AssignmentActive
+      , commandName = "SetProperty"
+      , expectedEdge = (Just (K.EdgeRef AssignmentActive 0))
+      , target = Just AssignmentActive
+      , eventKinds = ["PropertySet"]
+      }
+  ]
+
+behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
+  BehaviorConformanceReport
+    { required = sortedKeys (Map.keys requiredByKey)
+    , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
+    , pending = sortedKeys [key | (key, rows) <- Map.toList witnessGroups, Map.member key requiredByKey, any isPending rows]
+    , missing = sortedKeys [key | key <- Map.keys requiredByKey, Map.notMember key witnessGroups]
+    , duplicate = sortedKeys [key | (key, rows) <- Map.toList witnessGroups, length rows > 1]
+    , stale = sortedKeys [key | key <- Map.keys witnessGroups, Map.notMember key requiredByKey]
+    , failed = sortOn (unBehaviorKey . (.key)) failures
+    , verified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, proofStrength requirement]
+    , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
+    }
+ where
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
+  witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
+  executions =
+    [ (requirement, runWitness requirement witness)
+    | (key, [witness]) <- Map.toList witnessGroups
+    , not (isPending witness)
+    , Just requirement <- [Map.lookup key requiredByKey]
+    ]
+  failures = [behaviorFailure | (_, Left behaviorFailure) <- executions]
+
+behaviorConformancePassed :: BehaviorConformanceReport -> Bool
+behaviorConformancePassed = behaviorConformancePassedWith False
+
+behaviorConformancePassedWith :: Bool -> BehaviorConformanceReport -> Bool
+behaviorConformancePassedWith failOnUnverified report =
+  null report.pending
+    && null report.missing
+    && null report.duplicate
+    && null report.stale
+    && null report.failed
+    && (not failOnUnverified || null report.unverified)
+
+renderBehaviorConformanceText :: BehaviorConformanceReport -> Text
+renderBehaviorConformanceText report = T.unlines
+  [ "behavior conformance: Assignment"
+  , "schema: keiro/behavior-conformance/1"
+  , countLine "required" report.required
+  , countLine "filled" report.filled
+  , countLine "pending" report.pending
+  , countLine "missing" report.missing
+  , countLine "duplicate" report.duplicate
+  , countLine "stale" report.stale
+  , "failed: " <> tshow (length report.failed)
+  , countLine "verified" report.verified
+  , countLine "unverified" report.unverified
+  ] <> T.unlines ["FAIL " <> unBehaviorKey behaviorFailure.key <> " " <> behaviorFailure.subject <> " [" <> behaviorFailure.code <> "] " <> behaviorFailure.detail | behaviorFailure <- report.failed]
+
+runWitness :: BehaviorRequirement -> BehaviorWitness -> Either BehaviorFailure ()
+runWitness requirement witness = case witness of
+  Pending _ -> failure requirement "pending" "witness is still Pending"
+  LiveWitness _ history command expectation -> runLive requirement history command expectation
+  ReplayWitness _ prefix chunk -> runReplay requirement prefix chunk
+
+runLive :: BehaviorRequirement -> [AssignmentEvent] -> AssignmentCommand -> LiveExpectation -> Either BehaviorFailure ()
+runLive requirement history command expectation = do
+  settled <- settleHistory requirement "history" history
+  ensure requirement (K.replaySuccessState settled == requirement.source) "history-wrong-source" "history does not settle at the required source vertex"
+  ensure requirement (commandKind command == requirement.commandName) "command-mismatch" "witness command constructor does not match the required state/command cell"
+  case requirement.kind of
+    ReplayTransition -> failure requirement "witness-kind" "a replay-only requirement needs ReplayWitness"
+    RequiredRejection -> runRejection requirement (K.replaySuccessState settled, K.replaySuccessRegs settled) command expectation
+    LiveTransition -> runAcceptance requirement (K.replaySuccessState settled, K.replaySuccessRegs settled) command expectation
+
+runRejection :: BehaviorRequirement -> (AssignmentVertex, K.RegFile AssignmentRegs) -> AssignmentCommand -> LiveExpectation -> Either BehaviorFailure ()
+runRejection requirement seed command expectation = case expectation of
+  Emits _ -> failure requirement "expectation-kind" "a rejection requirement cannot expect emitted events"
+  NoOp -> failure requirement "expectation-kind" "a rejection requirement cannot expect an accepted no-op"
+  Rejects expectedClass -> case K.stepDetailedEither assignmentTransducer seed command of
+    Left K.NoOutgoingEdges {} -> ensure requirement (expectedClass == RejectNoOutgoingEdges) "rejection-class" "expected NoMatchingEdge but runtime returned NoOutgoingEdges"
+    Left K.NoMatchingEdge {} -> ensure requirement (expectedClass == RejectNoMatchingEdge) "rejection-class" "expected NoOutgoingEdges but runtime returned NoMatchingEdge"
+    Left K.AmbiguousEdges {} -> failure requirement "ambiguous-edges" "AmbiguousEdges can never satisfy a rejection witness"
+    Right _ -> failure requirement "unexpected-acceptance" "runtime accepted a command required to reject"
+
+runAcceptance :: BehaviorRequirement -> (AssignmentVertex, K.RegFile AssignmentRegs) -> AssignmentCommand -> LiveExpectation -> Either BehaviorFailure ()
+runAcceptance requirement seed command expectation = case expectation of
+  Rejects _ -> failure requirement "expectation-kind" "a live-transition requirement needs Emits or NoOp"
+  NoOp -> case K.stepDetailedEither assignmentTransducer seed command of
+    Left stepFailure -> failure requirement "unexpected-rejection" (tshow stepFailure)
+    Right success -> do
+      checkAcceptedEnvelope requirement success
+      ensure requirement (null (K.stepSuccessOutputs success)) "noop-emitted" "NoOp emitted one or more events"
+      ensure requirement (K.stepSuccessState success == fst seed) "noop-vertex-change" "NoOp changed the control vertex"
+      ensure requirement (regsEqual (K.stepSuccessRegs success) (snd seed)) "noop-register-change" "NoOp changed one or more registers"
+  Emits expectedEvents -> case K.stepDetailedEither assignmentTransducer seed command of
+    Left stepFailure -> failure requirement "unexpected-rejection" (tshow stepFailure)
+    Right success -> do
+      checkAcceptedEnvelope requirement success
+      let expected = NonEmpty.toList expectedEvents
+          actual = K.stepSuccessOutputs success
+      ensure requirement (actual == expected) "event-value-mismatch" ("runtime event values differ from the exact witness expectation; actual=" <> tshow actual <> " expected=" <> tshow expected)
+      ensure requirement (map eventKind actual == requirement.eventKinds) "event-envelope-mismatch" ("runtime event kinds differ from the declared ordered envelope; actual=" <> tshow (map eventKind actual) <> " expected=" <> tshow requirement.eventKinds)
+      decoded <- either (failure requirement "emitted-codec-decode") Right (decodeEvents actual)
+      replayed <- case K.applyEventsDetailedEither assignmentTransducer seed decoded of
+        Left replayFailure -> failure requirement "emitted-replay-failed" (tshow replayFailure)
+        Right replaySuccess -> Right replaySuccess
+      ensure requirement (K.replaySuccessState replayed == K.stepSuccessState success) "forward-replay-vertex" "decoded emissions replay to a different vertex"
+      ensure requirement (regsEqual (K.replaySuccessRegs replayed) (K.stepSuccessRegs success)) "forward-replay-registers" "decoded emissions replay to different registers"
+      checkSingleAttribution requirement K.Live (length decoded) (K.replaySuccessTrace replayed)
+
+checkAcceptedEnvelope :: BehaviorRequirement -> K.StepSuccess AssignmentRegs AssignmentVertex AssignmentEvent -> Either BehaviorFailure ()
+checkAcceptedEnvelope requirement success = do
+  ensure requirement (K.stepSuccessMode success == K.Live) "forward-mode" ("forward execution selected a non-live edge; actual=" <> tshow (K.stepSuccessMode success) <> " expected=" <> tshow K.Live)
+  ensure requirement (Just (K.stepSuccessEdge success) == requirement.expectedEdge) "edge-attribution" ("runtime selected a different guarded sibling; actual=" <> tshow (Just (K.stepSuccessEdge success)) <> " expected=" <> tshow requirement.expectedEdge)
+  ensure requirement (Just (K.stepSuccessState success) == requirement.target) "target-mismatch" ("runtime reached a different target vertex; actual=" <> tshow (Just (K.stepSuccessState success)) <> " expected=" <> tshow requirement.target)
+
+runReplay :: BehaviorRequirement -> [AssignmentEvent] -> [AssignmentEvent] -> Either BehaviorFailure ()
+runReplay requirement prefix chunk = case requirement.kind of
+  ReplayTransition -> do
+    settled <- settleHistory requirement "history-prefix" prefix
+    ensure requirement (K.replaySuccessState settled == requirement.source) "history-wrong-source" "history prefix does not settle at the replay edge source"
+    ensure requirement (not (null chunk)) "empty-replay-chunk" "a replay-only edge has no observable empty chunk"
+    decoded <- either (failure requirement "replay-chunk-codec-decode") Right (decodeEvents chunk)
+    replayed <- case K.applyEventsDetailedEither assignmentTransducer (K.replaySuccessState settled, K.replaySuccessRegs settled) decoded of
+      Left replayFailure -> failure requirement "replay-chunk-failed" (tshow replayFailure)
+      Right replaySuccess -> Right replaySuccess
+    ensure requirement (Just (K.replaySuccessState replayed) == requirement.target) "target-mismatch" ("replay chunk reached a different target vertex; actual=" <> tshow (Just (K.replaySuccessState replayed)) <> " expected=" <> tshow requirement.target)
+    checkSingleAttribution requirement K.ReplayOnly (length decoded) (K.replaySuccessTrace replayed)
+  _ -> failure requirement "witness-kind" "ReplayWitness supplied for a non-replay requirement"
+
+checkSingleAttribution :: BehaviorRequirement -> K.EdgeMode -> Int -> [K.ReplayAttribution AssignmentVertex] -> Either BehaviorFailure ()
+checkSingleAttribution requirement expectedMode eventCount trace = case trace of
+  [attribution] -> do
+    ensure requirement (Just (K.replayAttributionEdge attribution) == requirement.expectedEdge) "replay-edge-attribution" ("replay selected a different edge; actual=" <> tshow (Just (K.replayAttributionEdge attribution)) <> " expected=" <> tshow requirement.expectedEdge)
+    ensure requirement (K.replayAttributionMode attribution == expectedMode) "replay-mode-attribution" ("replay selected the wrong live/replay-only phase; actual=" <> tshow (K.replayAttributionMode attribution) <> " expected=" <> tshow expectedMode)
+    ensure requirement (K.replayAttributionSource attribution == requirement.source) "replay-source-attribution" ("replay attribution starts at the wrong source; actual=" <> tshow (K.replayAttributionSource attribution) <> " expected=" <> tshow requirement.source)
+    ensure requirement (Just (K.replayAttributionTarget attribution) == requirement.target) "replay-target-attribution" ("replay attribution ends at the wrong target; actual=" <> tshow (Just (K.replayAttributionTarget attribution)) <> " expected=" <> tshow requirement.target)
+    ensure requirement (K.replayAttributionSpan attribution == K.ReplayEventSpan 0 eventCount) "replay-span-attribution" ("replay attribution did not consume the exact chunk; actual=" <> tshow (K.replayAttributionSpan attribution) <> " expected=" <> tshow (K.ReplayEventSpan 0 eventCount))
+  _ -> failure requirement "replay-trace-cardinality" "expected exactly one completed-edge attribution"
+
+settleHistory :: BehaviorRequirement -> Text -> [AssignmentEvent] -> Either BehaviorFailure (K.ReplaySuccess AssignmentRegs AssignmentVertex)
+settleHistory requirement label history = do
+  decoded <- either (failure requirement (label <> "-codec-decode")) Right (decodeEvents history)
+  case K.applyEventsDetailedEither assignmentTransducer (AssignmentActive, initialAssignmentRegs) decoded of
+    Left replayFailure -> failure requirement (label <> "-replay-failed") (tshow replayFailure)
+    Right replaySuccess -> Right replaySuccess
+
+decodeEvents :: [AssignmentEvent] -> Either Text [AssignmentEvent]
+decodeEvents = traverse (\event -> parseAssignmentEvent (Codec.eventType assignmentCodec event) (encodeAssignmentEvent event))
+
+commandKind :: AssignmentCommand -> Text
+commandKind command = case command of
+  SetProperty _ -> "SetProperty"
+  ClearProperty _ -> "ClearProperty"
+  Touch _ -> "Touch"
+
+eventKind :: AssignmentEvent -> Text
+eventKind event = case Codec.eventType assignmentCodec event of Codec.EventType tag -> tag
+
+regsEqual :: K.RegFile AssignmentRegs -> K.RegFile AssignmentRegs -> Bool
+regsEqual left right = (left K.! #values) == (right K.! #values)
+
+proofStrength :: BehaviorRequirement -> Bool
+proofStrength requirement =
+  requirement.evidence == GeneratedAuthoritative
+    && requirement.guardCoverage `elem` [GuardTotal, GuardNotApplicable]
+
+behaviorWitnessKey :: BehaviorWitness -> BehaviorKey
+behaviorWitnessKey witness = case witness of
+  Pending key -> key
+  LiveWitness { key = key } -> key
+  ReplayWitness { key = key } -> key
+
+isPending :: BehaviorWitness -> Bool
+isPending Pending {} = True
+isPending _ = False
+
+ensure :: BehaviorRequirement -> Bool -> Text -> Text -> Either BehaviorFailure ()
+ensure requirement condition code detail = if condition then Right () else failure requirement code detail
+failure :: BehaviorRequirement -> Text -> Text -> Either BehaviorFailure failed
+failure requirement code detail =
+  Left
+    ( BehaviorFailure
+        requirement.key
+        (tshow requirement.source <> " x " <> requirement.commandName <> ": " <> kindPhrase <> " (" <> BehaviorSourceMap.renderBehaviorSourceLocation (unBehaviorKey requirement.key) <> ")")
+        code
+        detail
+    )
+ where
+  kindPhrase = case requirement.kind of
+    LiveTransition -> "live transition"
+    RequiredRejection -> "required rejection"
+    ReplayTransition -> "replay-only transition"
+sortedKeys :: [BehaviorKey] -> [BehaviorKey]
+sortedKeys = sortOn unBehaviorKey
+keyTexts :: [BehaviorKey] -> [Text]
+keyTexts = map unBehaviorKey
+countLine :: Text -> [BehaviorKey] -> Text
+countLine label values = label <> ": " <> tshow (length values)
+tshow :: Show value => value -> Text
+tshow = T.pack . show
diff --git a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Assignment/Generated/Codec.hs b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Assignment/Generated/Codec.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Assignment/Generated/Codec.hs
@@ -0,0 +1,88 @@
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Assignment; do not edit.
+module Proof.WorkspaceProof.Assignment.Generated.Codec (
+    assignmentCodec,
+    parseAssignmentEvent,
+    encodeAssignmentEvent,
+) where
+
+import Proof.WorkspaceProof.Assignment.Generated.Domain
+import Data.Aeson (Value, object, withObject, (.:), (.=))
+import Data.Aeson.Types (parseEither)
+import Data.List.NonEmpty (NonEmpty (..))
+import Data.List.NonEmpty qualified as NonEmpty
+import Data.Text (Text)
+import qualified Data.Text as T
+import Keiro.Codec (Codec (..), EventType (..))
+
+
+
+
+
+assignmentEventTypes :: NonEmpty EventType
+assignmentEventTypes = EventType "PropertySet" :| [EventType "PropertyCleared", EventType "Touched"]
+
+assignmentCodec :: Codec AssignmentEvent
+assignmentCodec =
+  Codec
+    { eventTypes = assignmentEventTypes
+    , eventType = \case
+        PropertySet{} -> EventType "PropertySet"
+        PropertyCleared{} -> EventType "PropertyCleared"
+        Touched{} -> EventType "Touched"
+    , schemaVersion = 1
+    , encode = encodeAssignmentEvent
+    , decode = parseAssignmentEvent
+    , upcasters = []
+    }
+
+encodeAssignmentEvent :: AssignmentEvent -> Value
+encodeAssignmentEvent = \case
+  PropertySet payload ->
+    object
+      [ "kind" .= ("PropertySet" :: Text)
+      , "key" .= payload.key
+      , "value" .= payload.value
+      ]
+  PropertyCleared payload ->
+    object
+      [ "kind" .= ("PropertyCleared" :: Text)
+      , "key" .= payload.key
+      ]
+  Touched payload ->
+    object
+      [ "kind" .= ("Touched" :: Text)
+      , "note" .= payload.note
+      ]
+
+parseAssignmentEvent :: EventType -> Value -> Either Text AssignmentEvent
+parseAssignmentEvent (EventType tag) = mapLeftText . parseEither (withObject "AssignmentEvent" go)
+  where
+    go o = do
+      case tag of
+        "PropertySet" ->
+          PropertySet
+            <$> ( PropertySetData
+                    <$> o .: "key"
+                    <*> o .: "value"
+                )
+        "PropertyCleared" ->
+          PropertyCleared
+            <$> ( PropertyClearedData
+                    <$> o .: "key"
+                )
+        "Touched" ->
+          Touched
+            <$> ( TouchedData
+                    <$> o .: "note"
+                )
+        _ -> fail ("unknown event type " <> show tag <> "; expected one of: " <> renderExpectedEventTypes assignmentEventTypes)
+
+mapLeftText :: Either String b -> Either Text b
+mapLeftText = either (Left . T.pack) Right
+
+renderExpectedEventTypes :: NonEmpty EventType -> String
+renderExpectedEventTypes =
+  T.unpack
+    . T.intercalate ", "
+    . map (\(EventType eventTypeName) -> eventTypeName)
+    . NonEmpty.toList
diff --git a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Assignment/Generated/Domain.hs b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Assignment/Generated/Domain.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Assignment/Generated/Domain.hs
@@ -0,0 +1,70 @@
+{-# LANGUAGE TemplateHaskell #-}
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Assignment; do not edit.
+module Proof.WorkspaceProof.Assignment.Generated.Domain where
+
+import Data.Proxy (Proxy (..))
+import Data.Text (Text)
+import GHC.Generics (Generic)
+import Keiki.Core (RegFile (..))
+import Proof.WorkspaceProof.AssignmentDomain (PropertyValues)
+import Proof.WorkspaceProof.AssignmentSupport qualified as AssignmentSupport
+import Keiki.Generics.TH (deriveAggregateCtorsAll, deriveWireCtorsAll)
+
+data AssignmentVertex = AssignmentActive
+  deriving stock (Generic, Eq, Ord, Show, Enum, Bounded)
+
+data SetPropertyData = SetPropertyData
+  { key :: !Text
+  , value :: !Text
+  }
+  deriving stock (Generic, Eq, Show)
+
+data ClearPropertyData = ClearPropertyData
+  { key :: !Text
+  }
+  deriving stock (Generic, Eq, Show)
+
+data TouchData = TouchData
+  { note :: !Text
+  }
+  deriving stock (Generic, Eq, Show)
+
+data AssignmentCommand = SetProperty !SetPropertyData
+  | ClearProperty !ClearPropertyData
+  | Touch !TouchData
+  deriving stock (Generic, Eq, Show)
+
+data PropertySetData = PropertySetData
+  { key :: !Text
+  , value :: !Text
+  }
+  deriving stock (Generic, Eq, Show)
+
+data PropertyClearedData = PropertyClearedData
+  { key :: !Text
+  }
+  deriving stock (Generic, Eq, Show)
+
+data TouchedData = TouchedData
+  { note :: !Text
+  }
+  deriving stock (Generic, Eq, Show)
+
+data AssignmentEvent = PropertySet !PropertySetData
+  | PropertyCleared !PropertyClearedData
+  | Touched !TouchedData
+  deriving stock (Generic, Eq, Show)
+
+type AssignmentRegs =
+  '[ '("values", PropertyValues)
+   ]
+
+initialAssignmentRegs :: RegFile AssignmentRegs
+initialAssignmentRegs =
+  RCons (Proxy @"values") AssignmentSupport.emptyPropertyValues RNil
+
+$(deriveAggregateCtorsAll ''AssignmentCommand ''AssignmentRegs)
+
+
+
+$(deriveWireCtorsAll ''AssignmentEvent)
diff --git a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Assignment/Generated/EventStream.hs b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Assignment/Generated/EventStream.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Assignment/Generated/EventStream.hs
@@ -0,0 +1,49 @@
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Assignment; do not edit.
+module Proof.WorkspaceProof.Assignment.Generated.EventStream
+  ( assignmentCategory
+  , assignmentCommandCategory
+  , assignmentEventStream
+  , assignmentEventStreamDef
+  , AssignmentEventStream
+  , AssignmentEventStreamDef
+  ) where
+
+import Proof.WorkspaceProof.Assignment.Generated.Domain
+import Proof.WorkspaceProof.Assignment.Generated.Codec (assignmentCodec)
+import Proof.WorkspaceProof.Assignment.Generated.Transducer (assignmentTransducer)
+import Keiki.Core (HsPred)
+import Keiro.EventStream (EventStream (..), SnapshotPolicy (..))
+import Keiro.EventStream.Validate (ValidatedEventStream, mkEventStreamOrThrow)
+import Keiro.Stream qualified as Stream
+
+-- The validated aggregate stream category (hole-kind 5: referenced, never retyped).
+-- Entity streams are '<category>-<id>' via Keiro.Stream.entityStream.
+-- categoryUnsafe is safe here because this generated literal passed the DSL category proof.
+assignmentCategory :: Stream.StreamCategory AssignmentEventStreamDef
+assignmentCategory = Stream.categoryUnsafe "assignment"
+
+-- The same category text, typed for command envelopes such as PMCommand.
+assignmentCommandCategory :: Stream.StreamCategory AssignmentCommand
+assignmentCommandCategory = Stream.categoryUnsafe "assignment"
+
+type AssignmentEventStreamDef =
+  EventStream (HsPred AssignmentRegs AssignmentCommand) AssignmentRegs AssignmentVertex AssignmentCommand AssignmentEvent
+
+type AssignmentEventStream =
+  ValidatedEventStream (HsPred AssignmentRegs AssignmentCommand) AssignmentRegs AssignmentVertex AssignmentCommand AssignmentEvent
+
+assignmentEventStreamDef :: AssignmentEventStreamDef
+assignmentEventStreamDef =
+  EventStream
+    { transducer = assignmentTransducer,
+      initialState = AssignmentActive,
+      initialRegisters = initialAssignmentRegs,
+      eventCodec = assignmentCodec,
+      resolveStreamName = Stream.streamName,
+      snapshotPolicy = Never,
+      stateCodec = Nothing
+    }
+
+assignmentEventStream :: AssignmentEventStream
+assignmentEventStream =
+  mkEventStreamOrThrow "Assignment" assignmentEventStreamDef
diff --git a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Assignment/Generated/Harness.hs b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Assignment/Generated/Harness.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Assignment/Generated/Harness.hs
@@ -0,0 +1,108 @@
+{-# LANGUAGE OverloadedLabels #-}
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Assignment; do not edit.
+module Proof.WorkspaceProof.Assignment.Generated.Harness (harnessAssertions) where
+
+import Proof.WorkspaceProof.Assignment.Generated.Domain
+import Proof.WorkspaceProof.Assignment.Generated.Codec (encodeAssignmentEvent, parseAssignmentEvent, assignmentCodec)
+import Proof.WorkspaceProof.Assignment.Generated.Transducer (assignmentTransducer)
+import Keiki.Core (applyEventsEither, defaultValidationOptions, step, validateTransducer, (!))
+import Keiro.Codec (eventType)
+import Proof.WorkspaceProof.Assignment.BehaviorHoles (behaviorWitnesses)
+import Proof.WorkspaceProof.Assignment.Generated.BehaviorContract (BehaviorConformanceReport (..), BehaviorKey (..), behaviorObligationReport)
+
+-- | (label, passed). A driver runs these and exits non-zero on any False,
+-- naming the failing assertion. Filling a hole wrongly turns a specific
+-- entry False; pending Hole witnesses fail until filled and verified.
+harnessAssertions :: [(String, Bool)]
+harnessAssertions =
+  [ ("validateTransducer is empty", null (validateTransducer defaultValidationOptions assignmentTransducer))
+  -- clock-free: spec samples no wall clock (verified at scaffold time)
+  , ("golden round-trip: PropertySet", roundTrips sampleEventPropertySet)
+  , ("golden round-trip: PropertyCleared", roundTrips sampleEventPropertyCleared)
+  , ("golden round-trip: Touched", roundTrips sampleEventTouched)
+  , ("accepts SetProperty from AssignmentActive", acceptSetProperty)
+  , ("accepts ClearProperty from AssignmentActive", acceptClearProperty)
+  , ("accepts Touch from AssignmentActive", acceptTouch)
+  ]
+  ++ forwardReplaySetProperty
+  ++ forwardReplayClearProperty
+  ++ forwardReplayTouch
+
+roundTrips :: AssignmentEvent -> Bool
+roundTrips e = parseAssignmentEvent (eventType assignmentCodec e) (encodeAssignmentEvent e) == Right e
+
+-- | One required obligation carrying exactly one non-pending witness.
+holeWitnessFilled :: BehaviorKey -> BehaviorConformanceReport -> Bool
+holeWitnessFilled key report = report.required == [key] && report.filled == [key]
+
+sampleEventPropertySet :: AssignmentEvent
+sampleEventPropertySet = PropertySet (PropertySetData "sample-key" "sample-value")
+
+sampleEventPropertyCleared :: AssignmentEvent
+sampleEventPropertyCleared = PropertyCleared (PropertyClearedData "sample-key")
+
+sampleEventTouched :: AssignmentEvent
+sampleEventTouched = Touched (TouchedData "sample-note")
+
+acceptTouch :: Bool
+acceptTouch =
+  case step assignmentTransducer (AssignmentActive, initialAssignmentRegs) (Touch (TouchData "sample-note")) of
+    Just (v, _, _) -> v == AssignmentActive
+    Nothing -> False
+
+-- Hole-owned initial edge: the consumer's history-backed live witness
+-- proves acceptance through the generated behavior contract.
+holeWitnessSetProperty :: BehaviorConformanceReport
+holeWitnessSetProperty = behaviorObligationReport (BehaviorKey "behavior-v1-fbe5335a1e485829") behaviorWitnesses
+
+acceptSetProperty :: Bool
+acceptSetProperty = holeWitnessFilled (BehaviorKey "behavior-v1-fbe5335a1e485829") holeWitnessSetProperty && null holeWitnessSetProperty.failed
+
+-- Hole-owned initial edge: the consumer's history-backed live witness
+-- proves acceptance through the generated behavior contract.
+holeWitnessClearProperty :: BehaviorConformanceReport
+holeWitnessClearProperty = behaviorObligationReport (BehaviorKey "behavior-v1-075a56dd42e6bc95") behaviorWitnesses
+
+acceptClearProperty :: Bool
+acceptClearProperty = holeWitnessFilled (BehaviorKey "behavior-v1-075a56dd42e6bc95") holeWitnessClearProperty && null holeWitnessClearProperty.failed
+
+-- forward/replay equality (plan 147): cross the persisted codec boundary,
+-- replay the emitted chain, and compare the final vertex and every register.
+forwardReplayTouch :: [(String, Bool)]
+forwardReplayTouch =
+  case step assignmentTransducer (AssignmentActive, initialAssignmentRegs) (Touch (TouchData "sample-note")) of
+    Nothing -> [(prefix <> "forward step accepted", False)]
+    Just (forwardVertex, forwardRegs, emitted) ->
+      case mapM (\event -> parseAssignmentEvent (eventType assignmentCodec event) (encodeAssignmentEvent event)) emitted of
+        Left _ -> [(prefix <> "emitted chain decodes", False)]
+        Right decodedEvents ->
+          case applyEventsEither assignmentTransducer (AssignmentActive, initialAssignmentRegs) decodedEvents of
+            Left _ -> [(prefix <> "replay succeeds", False)]
+            Right (replayVertex, replayRegs) ->
+              [ (prefix <> "final vertex", replayVertex == forwardVertex)
+              , (prefix <> "register values", (replayRegs ! #values) == (forwardRegs ! #values))
+              ]
+  where
+    prefix = "forward/replay equality: Touch from AssignmentActive -- "
+
+-- The behavior contract decodes emissions through the persisted codec,
+-- replays them, and compares the final vertex and every register.
+forwardReplaySetProperty :: [(String, Bool)]
+forwardReplaySetProperty =
+  [ (prefix <> "hole witness filled", holeWitnessFilled key holeWitnessSetProperty)
+  , (prefix <> "hole witness verified", holeWitnessFilled key holeWitnessSetProperty && null holeWitnessSetProperty.failed)
+  ]
+  where
+    key = BehaviorKey "behavior-v1-fbe5335a1e485829"
+    prefix = "forward/replay equality: SetProperty from AssignmentActive -- "
+
+-- The behavior contract decodes emissions through the persisted codec,
+-- replays them, and compares the final vertex and every register.
+forwardReplayClearProperty :: [(String, Bool)]
+forwardReplayClearProperty =
+  [ (prefix <> "hole witness filled", holeWitnessFilled key holeWitnessClearProperty)
+  , (prefix <> "hole witness verified", holeWitnessFilled key holeWitnessClearProperty && null holeWitnessClearProperty.failed)
+  ]
+  where
+    key = BehaviorKey "behavior-v1-075a56dd42e6bc95"
+    prefix = "forward/replay equality: ClearProperty from AssignmentActive -- "
diff --git a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Assignment/Generated/Projection.hs b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Assignment/Generated/Projection.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Assignment/Generated/Projection.hs
@@ -0,0 +1,4 @@
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Assignment; do not edit.
+module Proof.WorkspaceProof.Assignment.Generated.Projection () where
+
+-- No projection declarations are present; this module keeps the generated manifest inventory total.
diff --git a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Assignment/Generated/Transducer.hs b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Assignment/Generated/Transducer.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Assignment/Generated/Transducer.hs
@@ -0,0 +1,80 @@
+{-# LANGUAGE BlockArguments #-}
+{-# LANGUAGE QualifiedDo #-}
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Assignment; do not edit.
+module Proof.WorkspaceProof.Assignment.Generated.Transducer
+  ( assignmentTransducer
+  , assignmentFoldFingerprint
+  , BehaviorOwnership (..)
+  , assignmentPredicateVerifications
+  ) where
+
+import Proof.WorkspaceProof.Assignment.Generated.Domain
+import Data.Text (Text)
+import Keiki.Builder qualified as B
+import Keiki.Core (HsPred, SymTransducer)
+import Keiki.Core qualified as K
+import Keiki.Symbolic qualified as S
+import Proof.WorkspaceProof.Assignment.Holes qualified as Holes
+import Data.Text qualified as T
+import Keiro.Snapshot.Codec (FoldVersion (..))
+
+assignmentTransducer
+  :: SymTransducer
+       (HsPred AssignmentRegs AssignmentCommand)
+       AssignmentRegs
+       AssignmentVertex
+       AssignmentCommand
+       AssignmentEvent
+assignmentTransducer =
+  B.buildTransducer AssignmentActive initialAssignmentRegs isTerminal do
+    B.from AssignmentActive do
+      B.onCmd inCtorSetProperty $ \d -> B.do
+        Holes.transition1ActiveSetPropertyHole d
+        B.emit wirePropertySet (PropertySetTermFields
+          { key = d.key
+          , value = d.value
+          })
+        B.goto AssignmentActive
+      B.onCmd inCtorClearProperty $ \d -> B.do
+        Holes.transition2ActiveClearPropertyHole d
+        B.emit wirePropertyCleared (PropertyClearedTermFields
+          { key = d.key
+          })
+        B.goto AssignmentActive
+      B.onCmd inCtorTouch $ \d -> B.do
+        B.emit wireTouched (TouchedTermFields
+          { note = d.note
+          })
+        B.goto AssignmentActive
+      B.onCmd inCtorClearProperty $ \d -> B.do
+        B.replayOnly
+        Holes.transition4ActiveClearPropertyHole d
+        B.emit wirePropertyCleared (PropertyClearedTermFields
+          { key = d.key
+          })
+        B.goto AssignmentActive
+ where
+  isTerminal = \case
+
+    _ -> False
+
+assignmentFoldFingerprint :: Text
+assignmentFoldFingerprint = T.intercalate "|" ("a54553687057587434f20f69114efc14" : [foldToken Holes.transition1ActiveSetPropertyHoleFoldVersion, foldToken Holes.transition2ActiveClearPropertyHoleFoldVersion, foldToken Holes.transition4ActiveClearPropertyHoleFoldVersion] ) where foldToken (FoldVersion token) = T.pack (show (T.length token)) <> ":" <> token
+
+data BehaviorOwnership = GeneratedOwned | HoleOwned
+  deriving stock (Eq, Show)
+
+-- Every checked transition predicate is audited through Keiki's conservative
+-- symbolic verifier. Opaque Hole terms remain explicitly unverified.
+assignmentPredicateVerifications :: IO [(Text, BehaviorOwnership, S.PredicateVerification)]
+assignmentPredicateVerifications = sequence
+  [ verifyTransition "transition1ActiveSetProperty" HoleOwned AssignmentActive 0
+  , verifyTransition "transition2ActiveClearProperty" HoleOwned AssignmentActive 1
+  , verifyTransition "transition3ActiveTouch" GeneratedOwned AssignmentActive 2
+  , verifyTransition "transition4ActiveClearProperty" HoleOwned AssignmentActive 3
+  ]
+ where
+  verifyTransition label owner source edgeIndex =
+    case drop edgeIndex (K.edgesOut assignmentTransducer source) of
+      K.Edge predicate _ _ _ _ : _ -> (\result -> (label, owner, result)) <$> S.verifyPredicate predicate
+      [] -> pure (label, owner, S.UnverifiedSolverFailure "generated transition edge missing")
diff --git a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Assignment/Holes.hs b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Assignment/Holes.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Assignment/Holes.hs
@@ -0,0 +1,74 @@
+{-# LANGUAGE BlockArguments #-}
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE OverloadedRecordDot #-}
+{-# LANGUAGE QualifiedDo #-}
+{-# LANGUAGE TypeApplications #-}
+-- This is a HAND-OWNED version-2 hook module. keiro-dsl creates it once
+-- and never overwrites it. Generated code owns every transition envelope
+-- and every declared guard/write. This module supplies explicit event-field
+-- mappings and explicitly selected Hole behavior only; fields(Command)
+-- identity mappings are generated directly and have no hook.
+module Proof.WorkspaceProof.Assignment.Holes
+  ( transition1ActiveSetPropertyHole
+  , transition1ActiveSetPropertyHoleFoldVersion
+  , transition2ActiveClearPropertyHole
+  , transition2ActiveClearPropertyHoleFoldVersion
+  , transition4ActiveClearPropertyHole
+  , transition4ActiveClearPropertyHoleFoldVersion
+  ) where
+
+import Proof.WorkspaceProof.Assignment.Generated.Domain
+import Keiki.Builder ((=:))
+import Keiki.Builder qualified as B
+import Keiki.Generics (RegFieldsOf)
+
+
+import Proof.WorkspaceProof.AssignmentDomain (PropertyValues (..))
+import Data.Map.Strict qualified as Map
+import Data.Text (Text)
+import Keiki.Core qualified as K
+import Keiro.Snapshot.Codec (FoldVersion (..))
+
+-- HOLE: add the predicate and ordered register updates for this transition.
+-- The generated transducer still owns command matching, mode, emits, and goto.
+transition1ActiveSetPropertyHole :: B.PayloadProj AssignmentRegs AssignmentCommand (RegFieldsOf SetPropertyData) -> B.EdgeBuilder AssignmentRegs AssignmentCommand AssignmentEvent AssignmentVertex ('Just (RegFieldsOf SetPropertyData)) '[] '["values"] ()
+transition1ActiveSetPropertyHole d = B.do
+  B.requireGuard K.PTop
+  B.slot @"values" =: K.TApp2 insertValue (B.reg @"values") (K.TApp2 (,) d.key d.value)
+
+-- Bump this token whenever the Hole predicate or updates change.
+transition1ActiveSetPropertyHoleFoldVersion :: FoldVersion
+transition1ActiveSetPropertyHoleFoldVersion = FoldVersion "transition1ActiveSetProperty-fold-v1"
+
+-- HOLE: add the predicate and ordered register updates for this transition.
+-- The generated transducer still owns command matching, mode, emits, and goto.
+transition2ActiveClearPropertyHole :: B.PayloadProj AssignmentRegs AssignmentCommand (RegFieldsOf ClearPropertyData) -> B.EdgeBuilder AssignmentRegs AssignmentCommand AssignmentEvent AssignmentVertex ('Just (RegFieldsOf ClearPropertyData)) '[] '["values"] ()
+transition2ActiveClearPropertyHole d = B.do
+  B.requireGuard (K.PEq (K.TApp2 memberValue d.key (B.reg @"values")) (K.TLit True))
+  B.slot @"values" =: K.TApp2 deleteValue (B.reg @"values") d.key
+
+-- Bump this token whenever the Hole predicate or updates change.
+transition2ActiveClearPropertyHoleFoldVersion :: FoldVersion
+transition2ActiveClearPropertyHoleFoldVersion = FoldVersion "transition2ActiveClearProperty-fold-v1"
+
+-- HOLE: add the predicate and ordered register updates for this transition.
+-- The generated transducer still owns command matching, mode, emits, and goto.
+transition4ActiveClearPropertyHole :: B.PayloadProj AssignmentRegs AssignmentCommand (RegFieldsOf ClearPropertyData) -> B.EdgeBuilder AssignmentRegs AssignmentCommand AssignmentEvent AssignmentVertex ('Just (RegFieldsOf ClearPropertyData)) '[] '["values"] ()
+transition4ActiveClearPropertyHole d = B.do
+  B.requireGuard K.PTop
+  B.slot @"values" =: K.TApp2 deleteValue (B.reg @"values") d.key
+
+-- Bump this token whenever the Hole predicate or updates change.
+transition4ActiveClearPropertyHoleFoldVersion :: FoldVersion
+transition4ActiveClearPropertyHoleFoldVersion = FoldVersion "transition4ActiveClearProperty-fold-v1"
+
+
+insertValue :: PropertyValues -> (Text, Text) -> PropertyValues
+insertValue (PropertyValues values) (key, value) = PropertyValues (Map.insert key value values)
+
+memberValue :: Text -> PropertyValues -> Bool
+memberValue key (PropertyValues values) = Map.member key values
+
+deleteValue :: PropertyValues -> Text -> PropertyValues
+deleteValue (PropertyValues values) key = PropertyValues (Map.delete key values)
diff --git a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/AssignmentDomain.hs b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/AssignmentDomain.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/AssignmentDomain.hs
@@ -0,0 +1,12 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+module Proof.WorkspaceProof.AssignmentDomain (PropertyValues (..)) where
+
+import Data.Aeson (FromJSON, ToJSON)
+import Data.Map.Strict (Map)
+import Data.Text (Text)
+import GHC.Generics (Generic)
+
+newtype PropertyValues = PropertyValues (Map Text Text)
+  deriving stock (Eq, Show, Generic)
+  deriving newtype (FromJSON, ToJSON)
diff --git a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/AssignmentSupport.hs b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/AssignmentSupport.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/AssignmentSupport.hs
@@ -0,0 +1,12 @@
+module Proof.WorkspaceProof.AssignmentSupport (emptyPropertyValues, propertyValuesCases) where
+
+import Proof.WorkspaceProof.AssignmentDomain (PropertyValues (..))
+import Data.Map.Strict qualified as Map
+import Data.List.NonEmpty (NonEmpty (..))
+import Keiro.Codec.Structural (FixtureCases (..))
+
+emptyPropertyValues :: PropertyValues
+emptyPropertyValues = PropertyValues Map.empty
+
+propertyValuesCases :: FixtureCases PropertyValues
+propertyValuesCases = FixtureCases (("empty", emptyPropertyValues) :| [("one", PropertyValues (Map.singleton "colour" "blue"))])
diff --git a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Beta/Generated/BehaviorContract.hs b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Beta/Generated/BehaviorContract.hs
--- a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Beta/Generated/BehaviorContract.hs
+++ b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Beta/Generated/BehaviorContract.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Beta; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Beta; do not edit.
 module Proof.WorkspaceProof.Beta.Generated.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -13,6 +13,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -144,7 +145,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -157,7 +169,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Beta/Generated/Codec.hs b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Beta/Generated/Codec.hs
--- a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Beta/Generated/Codec.hs
+++ b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Beta/Generated/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Beta; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Beta; do not edit.
 module Proof.WorkspaceProof.Beta.Generated.Codec (
     betaCodec,
     parseBetaEvent,
diff --git a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Beta/Generated/Domain.hs b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Beta/Generated/Domain.hs
--- a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Beta/Generated/Domain.hs
+++ b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Beta/Generated/Domain.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Beta; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Beta; do not edit.
 module Proof.WorkspaceProof.Beta.Generated.Domain where
 
 import GHC.Generics (Generic)
diff --git a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Beta/Generated/EventStream.hs b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Beta/Generated/EventStream.hs
--- a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Beta/Generated/EventStream.hs
+++ b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Beta/Generated/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Beta; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Beta; do not edit.
 module Proof.WorkspaceProof.Beta.Generated.EventStream
   ( betaCategory
   , betaCommandCategory
diff --git a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Beta/Generated/Harness.hs b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Beta/Generated/Harness.hs
--- a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Beta/Generated/Harness.hs
+++ b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Beta/Generated/Harness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Beta; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Beta; do not edit.
 module Proof.WorkspaceProof.Beta.Generated.Harness (harnessAssertions) where
 
 import Proof.WorkspaceProof.Beta.Generated.Domain
diff --git a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Beta/Generated/Projection.hs b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Beta/Generated/Projection.hs
--- a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Beta/Generated/Projection.hs
+++ b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Beta/Generated/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Beta; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Beta; do not edit.
 module Proof.WorkspaceProof.Beta.Generated.Projection () where
 
 -- No projection declarations are present; this module keeps the generated manifest inventory total.
diff --git a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Beta/Generated/Transducer.hs b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Beta/Generated/Transducer.hs
--- a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Beta/Generated/Transducer.hs
+++ b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Beta/Generated/Transducer.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Beta; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Beta; do not edit.
 module Proof.WorkspaceProof.Beta.Generated.Transducer
   ( betaTransducer
   , betaFoldFingerprint
diff --git a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/BetaView/Generated/ReadModel.hs b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/BetaView/Generated/ReadModel.hs
--- a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/BetaView/Generated/ReadModel.hs
+++ b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/BetaView/Generated/ReadModel.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from readmodel beta_view; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from readmodel beta_view; do not edit.
 module Proof.WorkspaceProof.BetaView.Generated.ReadModel
   ( betaViewReadModel
   , betaViewQualifiedTable
diff --git a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/BetaView/Generated/ReadModelHarness.hs b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/BetaView/Generated/ReadModelHarness.hs
--- a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/BetaView/Generated/ReadModelHarness.hs
+++ b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/BetaView/Generated/ReadModelHarness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from readmodel beta_view; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from readmodel beta_view; do not edit.
 module Proof.WorkspaceProof.BetaView.Generated.ReadModelHarness (readModelFacts, readModelFactResults, runReadModelFacts) where
 
 import Proof.WorkspaceProof.BetaView.Generated.ReadModel (betaViewReadModel, betaViewAsyncProjection)
diff --git a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/BetaView/Generated/ReadModelTable.hs b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/BetaView/Generated/ReadModelTable.hs
--- a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/BetaView/Generated/ReadModelTable.hs
+++ b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/BetaView/Generated/ReadModelTable.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from readmodel beta_view; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from readmodel beta_view; do not edit.
 module Proof.WorkspaceProof.BetaView.Generated.ReadModelTable (betaViewQualifiedTable) where
 
 import Data.Text (Text)
diff --git a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Generated/BehaviorSourceMap.hs b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Generated/BehaviorSourceMap.hs
--- a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Generated/BehaviorSourceMap.hs
+++ b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Generated/BehaviorSourceMap.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context workspace-proof behavior source map; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context workspace-proof behavior source map; do not edit.
 module Proof.WorkspaceProof.Generated.BehaviorSourceMap
   ( BehaviorSourceLocation (..)
   , behaviorSourceLocation
@@ -17,11 +17,15 @@
 
 behaviorSourceLocation :: Text -> Maybe BehaviorSourceLocation
 behaviorSourceLocation key = case key of
+  "behavior-v1-075a56dd42e6bc95" -> Just (BehaviorSourceLocation "domain/assignment.keiro" 32 3)
+  "behavior-v1-0db4efc62e642065" -> Just (BehaviorSourceLocation "domain/assignment.keiro" 38 3)
   "behavior-v1-579df4e5e81f7729" -> Just (BehaviorSourceLocation "domain/alpha.keiro" 15 3)
   "behavior-v1-6ab7fee2c8aa4e1d" -> Just (BehaviorSourceLocation "domain/beta.keiro" 11 3)
   "behavior-v1-72a96c964b44a2b6" -> Just (BehaviorSourceLocation "domain/alpha.keiro" 14 3)
+  "behavior-v1-9200cd4f93c83098" -> Just (BehaviorSourceLocation "domain/assignment.keiro" 43 3)
   "behavior-v1-baf43b4c31db955a" -> Just (BehaviorSourceLocation "domain/alpha.keiro" 13 3)
   "behavior-v1-c062ccf5e9b6f5c4" -> Just (BehaviorSourceLocation "domain/alpha.keiro" 6 10)
+  "behavior-v1-fbe5335a1e485829" -> Just (BehaviorSourceLocation "domain/assignment.keiro" 26 3)
   _ -> Nothing
 
 renderBehaviorSourceLocation :: Text -> Text
diff --git a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Generated/Conformance.hs b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Generated/Conformance.hs
--- a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Generated/Conformance.hs
+++ b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Generated/Conformance.hs
@@ -1,10 +1,12 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context workspace-proof service conformance facade; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context workspace-proof service conformance facade; do not edit.
 module Proof.WorkspaceProof.Generated.Conformance
   ( runServiceConformanceChecks
   , serviceConformanceFacts
   ) where
 
+import Proof.WorkspaceProof.Generated.StructuralConformance qualified as StructuralConformance
 import Proof.WorkspaceProof.Alpha.Generated.Harness qualified as Alpha
+import Proof.WorkspaceProof.Assignment.Generated.Harness qualified as Assignment
 import Proof.WorkspaceProof.Beta.Generated.Harness qualified as Beta
 import Proof.WorkspaceProof.AlphaView.Generated.ReadModelHarness qualified as AlphaView
 import Proof.WorkspaceProof.BetaView.Generated.ReadModelHarness qualified as BetaView
@@ -13,7 +15,9 @@
 runServiceConformanceChecks :: IO [(String, Bool)]
 runServiceConformanceChecks =
   pure (
-    [("aggregate/Alpha/" <> fact, passed) | (fact, passed) <- Alpha.harnessAssertions]
+    [("structural/" <> fact, passed) | (fact, passed) <- StructuralConformance.structuralConformanceAssertions]
+    <> [("aggregate/Alpha/" <> fact, passed) | (fact, passed) <- Alpha.harnessAssertions]
+    <> [("aggregate/Assignment/" <> fact, passed) | (fact, passed) <- Assignment.harnessAssertions]
     <> [("aggregate/Beta/" <> fact, passed) | (fact, passed) <- Beta.harnessAssertions]
     <> [("readmodel/alpha_view/" <> fact, passed) | (fact, passed) <- AlphaView.readModelFactResults]
     <> [("readmodel/beta_view/" <> fact, passed) | (fact, passed) <- BetaView.readModelFactResults]
diff --git a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Generated/Nominals.hs b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Generated/Nominals.hs
--- a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Generated/Nominals.hs
+++ b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Generated/Nominals.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context workspace-proof generated nominal declarations; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context workspace-proof generated nominal declarations; do not edit.
 module Proof.WorkspaceProof.Generated.Nominals
   ( ProofId
   , parseProofId
diff --git a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Generated/Nominals/Internal.hs b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Generated/Nominals/Internal.hs
--- a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Generated/Nominals/Internal.hs
+++ b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Generated/Nominals/Internal.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context workspace-proof generated nominal ID internals; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context workspace-proof generated nominal ID internals; do not edit.
 module Proof.WorkspaceProof.Generated.Nominals.Internal
   ( ProofId
   , parseProofId
diff --git a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Generated/ReplayAudit.hs b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Generated/ReplayAudit.hs
--- a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Generated/ReplayAudit.hs
+++ b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Generated/ReplayAudit.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context workspace-proof replay-audit assembly; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context workspace-proof replay-audit assembly; do not edit.
 --
 -- Deployment contract:
 --   * replay-neutral diff: no data audit is required;
@@ -9,6 +9,7 @@
 module Proof.WorkspaceProof.Generated.ReplayAudit (auditTargets) where
 
 import Proof.WorkspaceProof.Alpha.Generated.EventStream qualified as Alpha
+import Proof.WorkspaceProof.Assignment.Generated.EventStream qualified as Assignment
 import Proof.WorkspaceProof.Beta.Generated.EventStream qualified as Beta
 import Keiro.ReplayAudit (AuditTarget (..), SomeAuditTarget (..), streamInCategory)
 import Keiro.Stream qualified as Stream
@@ -20,6 +21,12 @@
         { eventStream = Alpha.alphaEventStream
         , category = Stream.categoryText Alpha.alphaCategory
         , mkStream = streamInCategory (Stream.categoryText Alpha.alphaCategory)
+        }
+  , SomeAuditTarget
+      AuditTarget
+        { eventStream = Assignment.assignmentEventStream
+        , category = Stream.categoryText Assignment.assignmentCategory
+        , mkStream = streamInCategory (Stream.categoryText Assignment.assignmentCategory)
         }
   , SomeAuditTarget
       AuditTarget
diff --git a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Generated/StructuralConformance.hs b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Generated/StructuralConformance.hs
new file mode 100644
--- /dev/null
+++ b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Generated/StructuralConformance.hs
@@ -0,0 +1,32 @@
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context workspace-proof structural conformance; do not edit.
+module Proof.WorkspaceProof.Generated.StructuralConformance
+  ( structuralConformanceAssertions
+  ) where
+
+import Data.Aeson qualified as Aeson
+import Data.List (nub)
+import Data.List.NonEmpty qualified as NonEmpty
+import Data.Text qualified as T
+import Keiro.Codec.Structural (FixtureCases (..))
+import Proof.WorkspaceProof.AssignmentSupport qualified as AssignmentSupport
+
+structuralConformanceAssertions :: [(String, Bool)]
+structuralConformanceAssertions =
+  concat
+    [ propertyValuesOpaqueAssertions
+    ]
+
+validFixtureLabels :: NonEmpty.NonEmpty (T.Text, value) -> Bool
+validFixtureLabels cases =
+  all (not . T.null) labels && length labels == length (nub labels)
+  where
+    labels = map fst (NonEmpty.toList cases)
+
+propertyValuesOpaqueAssertions :: [(String, Bool)]
+propertyValuesOpaqueAssertions =
+  ("opaque boundary fixtures: conformance.history-dependent-holes.PropertyValues.json@1", validFixtureLabels cases) :
+  [ ("opaque codec round-trip: conformance.history-dependent-holes.PropertyValues.json@1/" <> T.unpack caseLabel, case Aeson.fromJSON (Aeson.toJSON value) of Aeson.Success decoded -> decoded == value; Aeson.Error _ -> False)
+  | (caseLabel, value) <- NonEmpty.toList cases
+  ]
+  where
+    cases = fixtureCases AssignmentSupport.propertyValuesCases
diff --git a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/WorkspaceProofWorkflow/Generated/WorkflowFacts.hs b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/WorkspaceProofWorkflow/Generated/WorkflowFacts.hs
--- a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/WorkspaceProofWorkflow/Generated/WorkflowFacts.hs
+++ b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/WorkspaceProofWorkflow/Generated/WorkflowFacts.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from workflow WorkspaceProofWorkflow; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from workflow WorkspaceProofWorkflow; do not edit.
 module Proof.WorkspaceProof.WorkspaceProofWorkflow.Generated.WorkflowFacts (WorkflowFacts (..), workflowFacts, workflowFactValues) where
 
 -- | The workflow's deterministic decisions, pinned as typed pure facts.
diff --git a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/WorkspaceProofWorkflow/Generated/WorkflowRuntime.hs b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/WorkspaceProofWorkflow/Generated/WorkflowRuntime.hs
--- a/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/WorkspaceProofWorkflow/Generated/WorkflowRuntime.hs
+++ b/test/conformance-service-package/runtime/src/Proof/WorkspaceProof/WorkspaceProofWorkflow/Generated/WorkflowRuntime.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from workflow WorkspaceProofWorkflow; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from workflow WorkspaceProofWorkflow; do not edit.
 module Proof.WorkspaceProof.WorkspaceProofWorkflow.Generated.WorkflowRuntime
   ( workflowName
   , AwaitBinding
diff --git a/test/conformance-service-package/runtime/src/keiro-dsl-cabal-fragment.workspace.workspace-proof.txt b/test/conformance-service-package/runtime/src/keiro-dsl-cabal-fragment.workspace.workspace-proof.txt
--- a/test/conformance-service-package/runtime/src/keiro-dsl-cabal-fragment.workspace.workspace-proof.txt
+++ b/test/conformance-service-package/runtime/src/keiro-dsl-cabal-fragment.workspace.workspace-proof.txt
@@ -26,6 +26,15 @@
     Proof.WorkspaceProof.AlphaView.Generated.ReadModelHarness
     Proof.WorkspaceProof.AlphaView.Generated.ReadModelTable
     Proof.WorkspaceProof.AlphaView.ReadModelHoles
+    Proof.WorkspaceProof.Assignment.BehaviorHoles
+    Proof.WorkspaceProof.Assignment.Generated.BehaviorContract
+    Proof.WorkspaceProof.Assignment.Generated.Codec
+    Proof.WorkspaceProof.Assignment.Generated.Domain
+    Proof.WorkspaceProof.Assignment.Generated.EventStream
+    Proof.WorkspaceProof.Assignment.Generated.Harness
+    Proof.WorkspaceProof.Assignment.Generated.Projection
+    Proof.WorkspaceProof.Assignment.Generated.Transducer
+    Proof.WorkspaceProof.Assignment.Holes
     Proof.WorkspaceProof.Beta.BehaviorHoles
     Proof.WorkspaceProof.Beta.Generated.BehaviorContract
     Proof.WorkspaceProof.Beta.Generated.Codec
@@ -42,6 +51,7 @@
     Proof.WorkspaceProof.Generated.Nominals
     Proof.WorkspaceProof.Generated.Nominals.Internal
     Proof.WorkspaceProof.Generated.ReplayAudit
+    Proof.WorkspaceProof.Generated.StructuralConformance
     Proof.WorkspaceProof.WorkspaceProofWorkflow.Generated.WorkflowFacts
     Proof.WorkspaceProof.WorkspaceProofWorkflow.Generated.WorkflowRuntime
 
@@ -53,5 +63,13 @@
     , hasql-transaction
     , keiki
     , keiro
+    , keiro-dsl-conformance-service-runtime
     , kiroku-store
     , text
+
+consumer-packages:
+    keiro-dsl-conformance-service-runtime
+
+consumer-modules:
+    Proof.WorkspaceProof.AssignmentDomain
+    Proof.WorkspaceProof.AssignmentSupport
diff --git a/test/conformance-service-package/runtime/src/keiro-dsl-conformance.workspace.workspace-proof/keiro-dsl-conformance-ledger.txt b/test/conformance-service-package/runtime/src/keiro-dsl-conformance.workspace.workspace-proof/keiro-dsl-conformance-ledger.txt
--- a/test/conformance-service-package/runtime/src/keiro-dsl-conformance.workspace.workspace-proof/keiro-dsl-conformance-ledger.txt
+++ b/test/conformance-service-package/runtime/src/keiro-dsl-conformance.workspace.workspace-proof/keiro-dsl-conformance-ledger.txt
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from conformance package workspace workspace-proof; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from conformance package workspace workspace-proof; do not edit.
 keiro-dsl conformance ledger v1
 service-key workspace workspace-proof
 runtime-package keiro-dsl-conformance-service-runtime
diff --git a/test/conformance-service-package/runtime/src/keiro-dsl-conformance.workspace.workspace-proof/keiro-workspace-proof-conformance.cabal b/test/conformance-service-package/runtime/src/keiro-dsl-conformance.workspace.workspace-proof/keiro-workspace-proof-conformance.cabal
--- a/test/conformance-service-package/runtime/src/keiro-dsl-conformance.workspace.workspace-proof/keiro-workspace-proof-conformance.cabal
+++ b/test/conformance-service-package/runtime/src/keiro-dsl-conformance.workspace.workspace-proof/keiro-workspace-proof-conformance.cabal
@@ -1,5 +1,5 @@
 cabal-version: 3.0
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from conformance package workspace workspace-proof; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from conformance package workspace workspace-proof; do not edit.
 name: keiro-workspace-proof-conformance
 version: 0.0.0.0
 synopsis: Generated conformance runner for Keiro service workspace-proof
diff --git a/test/conformance-service-package/runtime/src/keiro-dsl-conformance.workspace.workspace-proof/src/Main.hs b/test/conformance-service-package/runtime/src/keiro-dsl-conformance.workspace.workspace-proof/src/Main.hs
--- a/test/conformance-service-package/runtime/src/keiro-dsl-conformance.workspace.workspace-proof/src/Main.hs
+++ b/test/conformance-service-package/runtime/src/keiro-dsl-conformance.workspace.workspace-proof/src/Main.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from conformance package workspace workspace-proof; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from conformance package workspace workspace-proof; do not edit.
 module Main (main) where
 
 import Control.Monad (when)
diff --git a/test/conformance-service-package/runtime/src/keiro-dsl-ledger.workspace.workspace-proof.txt b/test/conformance-service-package/runtime/src/keiro-dsl-ledger.workspace.workspace-proof.txt
--- a/test/conformance-service-package/runtime/src/keiro-dsl-ledger.workspace.workspace-proof.txt
+++ b/test/conformance-service-package/runtime/src/keiro-dsl-ledger.workspace.workspace-proof.txt
@@ -6,14 +6,17 @@
 layout: collocated
 naming-edition idiomatic-v2
 member domain/alpha.keiro
+member domain/assignment.keiro
 member domain/beta.keiro
 member domain/evidence.keiro
 member domain/shared.keiro
 source-language {"declaredLanguageVersion":4,"effectiveLanguageVersion":4,"path":"domain/alpha.keiro","sourceForm":"declared"}
+source-language {"declaredLanguageVersion":4,"effectiveLanguageVersion":4,"path":"domain/assignment.keiro","sourceForm":"declared"}
 source-language {"declaredLanguageVersion":4,"effectiveLanguageVersion":4,"path":"domain/beta.keiro","sourceForm":"declared"}
 source-language {"declaredLanguageVersion":4,"effectiveLanguageVersion":4,"path":"domain/evidence.keiro","sourceForm":"declared"}
 source-language {"declaredLanguageVersion":4,"effectiveLanguageVersion":4,"path":"domain/shared.keiro","sourceForm":"declared"}
 semantic-contract {"languageSupport":"compatibility-only","languageVersion":4,"runtimeSemantics":"keiro-dsl/runtime-semantics/3"}
+module {"kind":"generated","path":"Proof/WorkspaceProof/Generated/StructuralConformance.hs","roleFamily":"StructuralConformance","roleOwnerKind":"context","roleOwnerName":"context workspace-proof structural conformance"}
 module {"kind":"generated","path":"Proof/WorkspaceProof/Generated/BehaviorSourceMap.hs","roleFamily":"BehaviorSourceMap","roleOwnerKind":"context","roleOwnerName":"context workspace-proof behavior source map"}
 module {"kind":"generated","path":"Proof/WorkspaceProof/Generated/Nominals.hs","roleFamily":"Nominals","roleOwnerKind":"context","roleOwnerName":"context workspace-proof generated nominal declarations"}
 module {"kind":"generated","path":"Proof/WorkspaceProof/Generated/Nominals/Internal.hs","roleFamily":"Internal","roleOwnerKind":"context","roleOwnerName":"context workspace-proof generated nominal ID internals"}
@@ -26,30 +29,44 @@
 module {"kind":"generated","owner":"domain/alpha.keiro","path":"Proof/WorkspaceProof/Alpha/Generated/EventStream.hs","roleFamily":"EventStream","roleOwnerKind":"domain/alpha.keiro:","roleOwnerName":"domain/alpha.keiro: aggregate Alpha (line 4)"}
 module {"kind":"generated","owner":"domain/alpha.keiro","path":"Proof/WorkspaceProof/Alpha/Generated/Projection.hs","roleFamily":"Projection","roleOwnerKind":"domain/alpha.keiro:","roleOwnerName":"domain/alpha.keiro: aggregate Alpha (line 4)"}
 module {"kind":"generated","owner":"domain/alpha.keiro","path":"Proof/WorkspaceProof/Alpha/Generated/Harness.hs","roleFamily":"Harness","roleOwnerKind":"domain/alpha.keiro:","roleOwnerName":"domain/alpha.keiro: aggregate Alpha (line 4)"}
-module {"kind":"generated","owner":"domain/beta.keiro","path":"Proof/WorkspaceProof/Beta/Generated/Domain.hs","roleFamily":"Domain","roleOwnerKind":"domain/beta.keiro:","roleOwnerName":"domain/beta.keiro: aggregate Beta (line 21)"}
-module {"kind":"generated","owner":"domain/beta.keiro","path":"Proof/WorkspaceProof/Beta/Generated/Codec.hs","roleFamily":"Codec","roleOwnerKind":"domain/beta.keiro:","roleOwnerName":"domain/beta.keiro: aggregate Beta (line 21)"}
-module {"kind":"generated","owner":"domain/beta.keiro","path":"Proof/WorkspaceProof/Beta/Generated/Transducer.hs","roleFamily":"Transducer","roleOwnerKind":"domain/beta.keiro:","roleOwnerName":"domain/beta.keiro: aggregate Beta (line 21)"}
-module {"kind":"generated","owner":"domain/beta.keiro","path":"Proof/WorkspaceProof/Beta/Generated/BehaviorContract.hs","roleFamily":"BehaviorContract","roleOwnerKind":"domain/beta.keiro:","roleOwnerName":"domain/beta.keiro: aggregate Beta (line 21)"}
-module {"kind":"hole","owner":"domain/beta.keiro","path":"Proof/WorkspaceProof/Beta/BehaviorHoles.hs","roleFamily":"BehaviorHoles","roleOwnerKind":"domain/beta.keiro:","roleOwnerName":"domain/beta.keiro: aggregate behavior witnesses Beta (line 21)"}
-module {"kind":"generated","owner":"domain/beta.keiro","path":"Proof/WorkspaceProof/Beta/Generated/EventStream.hs","roleFamily":"EventStream","roleOwnerKind":"domain/beta.keiro:","roleOwnerName":"domain/beta.keiro: aggregate Beta (line 21)"}
-module {"kind":"generated","owner":"domain/beta.keiro","path":"Proof/WorkspaceProof/Beta/Generated/Projection.hs","roleFamily":"Projection","roleOwnerKind":"domain/beta.keiro:","roleOwnerName":"domain/beta.keiro: aggregate Beta (line 21)"}
-module {"kind":"generated","owner":"domain/beta.keiro","path":"Proof/WorkspaceProof/Beta/Generated/Harness.hs","roleFamily":"Harness","roleOwnerKind":"domain/beta.keiro:","roleOwnerName":"domain/beta.keiro: aggregate Beta (line 21)"}
-module {"kind":"generated","owner":"domain/evidence.keiro","path":"Proof/WorkspaceProof/AlphaView/Generated/ReadModelTable.hs","roleFamily":"ReadModelTable","roleOwnerKind":"domain/evidence.keiro:","roleOwnerName":"domain/evidence.keiro: readmodel alpha_view (line 34)"}
-module {"kind":"generated","owner":"domain/evidence.keiro","path":"Proof/WorkspaceProof/AlphaView/Generated/ReadModel.hs","roleFamily":"ReadModel","roleOwnerKind":"domain/evidence.keiro:","roleOwnerName":"domain/evidence.keiro: readmodel alpha_view (line 34)"}
-module {"kind":"hole","owner":"domain/evidence.keiro","path":"Proof/WorkspaceProof/AlphaView/ReadModelHoles.hs","roleFamily":"ReadModelHoles","roleOwnerKind":"domain/evidence.keiro:","roleOwnerName":"domain/evidence.keiro: readmodel alpha_view (line 34)"}
-module {"kind":"generated","owner":"domain/evidence.keiro","path":"Proof/WorkspaceProof/AlphaView/Generated/ReadModelHarness.hs","roleFamily":"ReadModelHarness","roleOwnerKind":"domain/evidence.keiro:","roleOwnerName":"domain/evidence.keiro: readmodel alpha_view (line 34)"}
-module {"kind":"generated","owner":"domain/evidence.keiro","path":"Proof/WorkspaceProof/BetaView/Generated/ReadModelTable.hs","roleFamily":"ReadModelTable","roleOwnerKind":"domain/evidence.keiro:","roleOwnerName":"domain/evidence.keiro: readmodel beta_view (line 48)"}
-module {"kind":"generated","owner":"domain/evidence.keiro","path":"Proof/WorkspaceProof/BetaView/Generated/ReadModel.hs","roleFamily":"ReadModel","roleOwnerKind":"domain/evidence.keiro:","roleOwnerName":"domain/evidence.keiro: readmodel beta_view (line 48)"}
-module {"kind":"hole","owner":"domain/evidence.keiro","path":"Proof/WorkspaceProof/BetaView/ReadModelHoles.hs","roleFamily":"ReadModelHoles","roleOwnerKind":"domain/evidence.keiro:","roleOwnerName":"domain/evidence.keiro: readmodel beta_view (line 48)"}
-module {"kind":"generated","owner":"domain/evidence.keiro","path":"Proof/WorkspaceProof/BetaView/Generated/ReadModelHarness.hs","roleFamily":"ReadModelHarness","roleOwnerKind":"domain/evidence.keiro:","roleOwnerName":"domain/evidence.keiro: readmodel beta_view (line 48)"}
-module {"kind":"generated","owner":"domain/evidence.keiro","path":"Proof/WorkspaceProof/WorkspaceProofWorkflow/Generated/WorkflowFacts.hs","roleFamily":"WorkflowFacts","roleOwnerKind":"domain/evidence.keiro:","roleOwnerName":"domain/evidence.keiro: workflow WorkspaceProofWorkflow (line 62)"}
-module {"kind":"generated","owner":"domain/evidence.keiro","path":"Proof/WorkspaceProof/WorkspaceProofWorkflow/Generated/WorkflowRuntime.hs","roleFamily":"WorkflowRuntime","roleOwnerKind":"domain/evidence.keiro:","roleOwnerName":"domain/evidence.keiro: workflow WorkspaceProofWorkflow (line 62)"}
+module {"kind":"generated","owner":"domain/assignment.keiro","path":"Proof/WorkspaceProof/Assignment/Generated/Domain.hs","roleFamily":"Domain","roleOwnerKind":"domain/assignment.keiro:","roleOwnerName":"domain/assignment.keiro: aggregate Assignment (line 29)"}
+module {"kind":"generated","owner":"domain/assignment.keiro","path":"Proof/WorkspaceProof/Assignment/Generated/Codec.hs","roleFamily":"Codec","roleOwnerKind":"domain/assignment.keiro:","roleOwnerName":"domain/assignment.keiro: aggregate Assignment (line 29)"}
+module {"kind":"generated","owner":"domain/assignment.keiro","path":"Proof/WorkspaceProof/Assignment/Generated/Transducer.hs","roleFamily":"Transducer","roleOwnerKind":"domain/assignment.keiro:","roleOwnerName":"domain/assignment.keiro: aggregate Assignment (line 29)"}
+module {"kind":"generated","owner":"domain/assignment.keiro","path":"Proof/WorkspaceProof/Assignment/Generated/BehaviorContract.hs","roleFamily":"BehaviorContract","roleOwnerKind":"domain/assignment.keiro:","roleOwnerName":"domain/assignment.keiro: aggregate Assignment (line 29)"}
+module {"kind":"hole","owner":"domain/assignment.keiro","path":"Proof/WorkspaceProof/Assignment/BehaviorHoles.hs","roleFamily":"BehaviorHoles","roleOwnerKind":"domain/assignment.keiro:","roleOwnerName":"domain/assignment.keiro: aggregate behavior witnesses Assignment (line 29)"}
+module {"kind":"generated","owner":"domain/assignment.keiro","path":"Proof/WorkspaceProof/Assignment/Generated/EventStream.hs","roleFamily":"EventStream","roleOwnerKind":"domain/assignment.keiro:","roleOwnerName":"domain/assignment.keiro: aggregate Assignment (line 29)"}
+module {"kind":"generated","owner":"domain/assignment.keiro","path":"Proof/WorkspaceProof/Assignment/Generated/Projection.hs","roleFamily":"Projection","roleOwnerKind":"domain/assignment.keiro:","roleOwnerName":"domain/assignment.keiro: aggregate Assignment (line 29)"}
+module {"kind":"hole","owner":"domain/assignment.keiro","path":"Proof/WorkspaceProof/Assignment/Holes.hs","roleFamily":"Holes","roleOwnerKind":"domain/assignment.keiro:","roleOwnerName":"domain/assignment.keiro: aggregate Assignment (line 29)"}
+module {"kind":"generated","owner":"domain/assignment.keiro","path":"Proof/WorkspaceProof/Assignment/Generated/Harness.hs","roleFamily":"Harness","roleOwnerKind":"domain/assignment.keiro:","roleOwnerName":"domain/assignment.keiro: aggregate Assignment (line 29)"}
+module {"kind":"generated","owner":"domain/beta.keiro","path":"Proof/WorkspaceProof/Beta/Generated/Domain.hs","roleFamily":"Domain","roleOwnerKind":"domain/beta.keiro:","roleOwnerName":"domain/beta.keiro: aggregate Beta (line 69)"}
+module {"kind":"generated","owner":"domain/beta.keiro","path":"Proof/WorkspaceProof/Beta/Generated/Codec.hs","roleFamily":"Codec","roleOwnerKind":"domain/beta.keiro:","roleOwnerName":"domain/beta.keiro: aggregate Beta (line 69)"}
+module {"kind":"generated","owner":"domain/beta.keiro","path":"Proof/WorkspaceProof/Beta/Generated/Transducer.hs","roleFamily":"Transducer","roleOwnerKind":"domain/beta.keiro:","roleOwnerName":"domain/beta.keiro: aggregate Beta (line 69)"}
+module {"kind":"generated","owner":"domain/beta.keiro","path":"Proof/WorkspaceProof/Beta/Generated/BehaviorContract.hs","roleFamily":"BehaviorContract","roleOwnerKind":"domain/beta.keiro:","roleOwnerName":"domain/beta.keiro: aggregate Beta (line 69)"}
+module {"kind":"hole","owner":"domain/beta.keiro","path":"Proof/WorkspaceProof/Beta/BehaviorHoles.hs","roleFamily":"BehaviorHoles","roleOwnerKind":"domain/beta.keiro:","roleOwnerName":"domain/beta.keiro: aggregate behavior witnesses Beta (line 69)"}
+module {"kind":"generated","owner":"domain/beta.keiro","path":"Proof/WorkspaceProof/Beta/Generated/EventStream.hs","roleFamily":"EventStream","roleOwnerKind":"domain/beta.keiro:","roleOwnerName":"domain/beta.keiro: aggregate Beta (line 69)"}
+module {"kind":"generated","owner":"domain/beta.keiro","path":"Proof/WorkspaceProof/Beta/Generated/Projection.hs","roleFamily":"Projection","roleOwnerKind":"domain/beta.keiro:","roleOwnerName":"domain/beta.keiro: aggregate Beta (line 69)"}
+module {"kind":"generated","owner":"domain/beta.keiro","path":"Proof/WorkspaceProof/Beta/Generated/Harness.hs","roleFamily":"Harness","roleOwnerKind":"domain/beta.keiro:","roleOwnerName":"domain/beta.keiro: aggregate Beta (line 69)"}
+module {"kind":"generated","owner":"domain/evidence.keiro","path":"Proof/WorkspaceProof/AlphaView/Generated/ReadModelTable.hs","roleFamily":"ReadModelTable","roleOwnerKind":"domain/evidence.keiro:","roleOwnerName":"domain/evidence.keiro: readmodel alpha_view (line 82)"}
+module {"kind":"generated","owner":"domain/evidence.keiro","path":"Proof/WorkspaceProof/AlphaView/Generated/ReadModel.hs","roleFamily":"ReadModel","roleOwnerKind":"domain/evidence.keiro:","roleOwnerName":"domain/evidence.keiro: readmodel alpha_view (line 82)"}
+module {"kind":"hole","owner":"domain/evidence.keiro","path":"Proof/WorkspaceProof/AlphaView/ReadModelHoles.hs","roleFamily":"ReadModelHoles","roleOwnerKind":"domain/evidence.keiro:","roleOwnerName":"domain/evidence.keiro: readmodel alpha_view (line 82)"}
+module {"kind":"generated","owner":"domain/evidence.keiro","path":"Proof/WorkspaceProof/AlphaView/Generated/ReadModelHarness.hs","roleFamily":"ReadModelHarness","roleOwnerKind":"domain/evidence.keiro:","roleOwnerName":"domain/evidence.keiro: readmodel alpha_view (line 82)"}
+module {"kind":"generated","owner":"domain/evidence.keiro","path":"Proof/WorkspaceProof/BetaView/Generated/ReadModelTable.hs","roleFamily":"ReadModelTable","roleOwnerKind":"domain/evidence.keiro:","roleOwnerName":"domain/evidence.keiro: readmodel beta_view (line 96)"}
+module {"kind":"generated","owner":"domain/evidence.keiro","path":"Proof/WorkspaceProof/BetaView/Generated/ReadModel.hs","roleFamily":"ReadModel","roleOwnerKind":"domain/evidence.keiro:","roleOwnerName":"domain/evidence.keiro: readmodel beta_view (line 96)"}
+module {"kind":"hole","owner":"domain/evidence.keiro","path":"Proof/WorkspaceProof/BetaView/ReadModelHoles.hs","roleFamily":"ReadModelHoles","roleOwnerKind":"domain/evidence.keiro:","roleOwnerName":"domain/evidence.keiro: readmodel beta_view (line 96)"}
+module {"kind":"generated","owner":"domain/evidence.keiro","path":"Proof/WorkspaceProof/BetaView/Generated/ReadModelHarness.hs","roleFamily":"ReadModelHarness","roleOwnerKind":"domain/evidence.keiro:","roleOwnerName":"domain/evidence.keiro: readmodel beta_view (line 96)"}
+module {"kind":"generated","owner":"domain/evidence.keiro","path":"Proof/WorkspaceProof/WorkspaceProofWorkflow/Generated/WorkflowFacts.hs","roleFamily":"WorkflowFacts","roleOwnerKind":"domain/evidence.keiro:","roleOwnerName":"domain/evidence.keiro: workflow WorkspaceProofWorkflow (line 110)"}
+module {"kind":"generated","owner":"domain/evidence.keiro","path":"Proof/WorkspaceProof/WorkspaceProofWorkflow/Generated/WorkflowRuntime.hs","roleFamily":"WorkflowRuntime","roleOwnerKind":"domain/evidence.keiro:","roleOwnerName":"domain/evidence.keiro: workflow WorkspaceProofWorkflow (line 110)"}
 module {"kind":"generated","path":"Proof/WorkspaceProof/Generated/Conformance.hs","roleFamily":"Conformance","roleOwnerKind":"context","roleOwnerName":"context workspace-proof service conformance facade"}
+mapping {"codecIdentity":"conformance.history-dependent-holes.PropertyValues.json","codecVersion":"1","mode":"opaque","module":"Proof.WorkspaceProof.AssignmentDomain","package":"keiro-dsl-conformance-service-runtime","schema":1,"specName":"PropertyValues","type":"PropertyValues"}
 id-domain id-domain|name=ProofId|contract=keiro-dsl/id-domain/typeid-v7/1|prefix=proof|separator=_|json=canonical-json-text
 nominal-equality nominal-equality|name=ProofId|contract=keiro-dsl/nominal-equality/2|key=Text|domain=typeid-v7-text:proof:keiro-dsl/id-domain/typeid-v7/1|owner=generated
+behavior {"aggregate":"Assignment","command":"ClearProperty","evidence":"hole-witnessed","key":"behavior-v1-075a56dd42e6bc95","kind":"live-transition","outputs":[{"command":"ClearProperty","ownership":"generated-command-identity"}],"owner":"domain/assignment.keiro","source":"Active"}
+behavior {"aggregate":"Assignment","command":"Touch","evidence":"generated-authoritative","key":"behavior-v1-0db4efc62e642065","kind":"live-transition","outputs":[{"command":"Touch","ownership":"generated-command-identity"}],"owner":"domain/assignment.keiro","source":"Active"}
 behavior {"aggregate":"Alpha","command":"LegacyPingAlpha","evidence":"generated-authoritative","key":"behavior-v1-579df4e5e81f7729","kind":"replay-transition","outputs":[{"command":"LegacyPingAlpha","ownership":"generated-command-identity"}],"owner":"domain/alpha.keiro","source":"Active"}
 behavior {"aggregate":"Beta","command":"PingBeta","evidence":"generated-authoritative","key":"behavior-v1-6ab7fee2c8aa4e1d","kind":"live-transition","outputs":[{"command":"PingBeta","ownership":"generated-command-identity"}],"owner":"domain/beta.keiro","source":"Active"}
 behavior {"aggregate":"Alpha","command":"PingAlpha","evidence":"generated-authoritative","key":"behavior-v1-72a96c964b44a2b6","kind":"replay-transition","outputs":[{"command":"PingAlpha","ownership":"generated-command-identity"}],"owner":"domain/alpha.keiro","source":"Active"}
+behavior {"aggregate":"Assignment","command":"ClearProperty","evidence":"hole-witnessed","key":"behavior-v1-9200cd4f93c83098","kind":"replay-transition","outputs":[{"command":"ClearProperty","ownership":"generated-command-identity"}],"owner":"domain/assignment.keiro","source":"Active"}
 behavior {"aggregate":"Alpha","command":"PingAlpha","evidence":"generated-authoritative","key":"behavior-v1-baf43b4c31db955a","kind":"live-transition","outputs":[{"command":"PingAlpha","ownership":"generated-command-identity"}],"owner":"domain/alpha.keiro","source":"Active"}
 behavior {"aggregate":"Alpha","command":"LegacyPingAlpha","evidence":"generated-authoritative","key":"behavior-v1-c062ccf5e9b6f5c4","kind":"required-rejection","outputs":[],"owner":"domain/alpha.keiro","source":"Active"}
-semantic-impact {"declarations":[],"mappedSurfaceEvidenceVersion":1,"serviceInventory":[]}
+behavior {"aggregate":"Assignment","command":"SetProperty","evidence":"hole-witnessed","key":"behavior-v1-fbe5335a1e485829","kind":"live-transition","outputs":[{"command":"SetProperty","ownership":"generated-command-identity"}],"owner":"domain/assignment.keiro","source":"Active"}
+semantic-impact {"declarations":[{"consequences":[{"consumer":"Assignment","kind":"consumer-build"},{"aggregate":"Assignment","kind":"snapshot-hydration"}],"consumerEvidence":[{"consumer":"Assignment","operation":null,"path":"Assignment register values : PropertyValues","surface":"snapshot-register"}],"consumers":["Assignment"],"declaration":"PropertyValues","identity":"opaque\u001fkeiro-dsl-conformance-service-runtime:Proof.WorkspaceProof.AssignmentDomain:PropertyValues\u001fconformance.history-dependent-holes.PropertyValues.json\u001f1\u001fProof.WorkspaceProof.AssignmentSupport.propertyValuesCases\u001fProof.WorkspaceProof.AssignmentSupport.emptyPropertyValues\u001faea479573cfac02e"}],"mappedSurfaceEvidenceVersion":1,"serviceInventory":["PropertyValues"]}
diff --git a/test/conformance-service-package/service.keiro-workspace b/test/conformance-service-package/service.keiro-workspace
--- a/test/conformance-service-package/service.keiro-workspace
+++ b/test/conformance-service-package/service.keiro-workspace
@@ -8,3 +8,4 @@
 spec domain/beta.keiro
 spec domain/evidence.keiro
 spec domain/shared.keiro
+spec domain/assignment.keiro
diff --git a/test/conformance-snapshot/Generated/HospitalCapacity/BehaviorSourceMap.hs b/test/conformance-snapshot/Generated/HospitalCapacity/BehaviorSourceMap.hs
--- a/test/conformance-snapshot/Generated/HospitalCapacity/BehaviorSourceMap.hs
+++ b/test/conformance-snapshot/Generated/HospitalCapacity/BehaviorSourceMap.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context hospital-capacity behavior source map; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context hospital-capacity behavior source map; do not edit.
 module Generated.HospitalCapacity.BehaviorSourceMap
   ( BehaviorSourceLocation (..)
   , behaviorSourceLocation
diff --git a/test/conformance-snapshot/Generated/HospitalCapacity/Nominals.hs b/test/conformance-snapshot/Generated/HospitalCapacity/Nominals.hs
--- a/test/conformance-snapshot/Generated/HospitalCapacity/Nominals.hs
+++ b/test/conformance-snapshot/Generated/HospitalCapacity/Nominals.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE DeriveAnyClass #-}
 {-# LANGUAGE TypeFamilies #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context hospital-capacity generated nominal declarations; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context hospital-capacity generated nominal declarations; do not edit.
 module Generated.HospitalCapacity.Nominals
   ( BedType (..)
   , bedTypeText
diff --git a/test/conformance-snapshot/Generated/HospitalCapacity/Nominals/Internal.hs b/test/conformance-snapshot/Generated/HospitalCapacity/Nominals/Internal.hs
--- a/test/conformance-snapshot/Generated/HospitalCapacity/Nominals/Internal.hs
+++ b/test/conformance-snapshot/Generated/HospitalCapacity/Nominals/Internal.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context hospital-capacity generated nominal ID internals; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context hospital-capacity generated nominal ID internals; do not edit.
 module Generated.HospitalCapacity.Nominals.Internal
   ( CommandId
   , parseCommandId
diff --git a/test/conformance-snapshot/Generated/HospitalCapacity/ReplayAudit.hs b/test/conformance-snapshot/Generated/HospitalCapacity/ReplayAudit.hs
--- a/test/conformance-snapshot/Generated/HospitalCapacity/ReplayAudit.hs
+++ b/test/conformance-snapshot/Generated/HospitalCapacity/ReplayAudit.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context hospital-capacity replay-audit assembly; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context hospital-capacity replay-audit assembly; do not edit.
 --
 -- Deployment contract:
 --   * replay-neutral diff: no data audit is required;
diff --git a/test/conformance-snapshot/Generated/HospitalCapacity/Reservation/BehaviorContract.hs b/test/conformance-snapshot/Generated/HospitalCapacity/Reservation/BehaviorContract.hs
--- a/test/conformance-snapshot/Generated/HospitalCapacity/Reservation/BehaviorContract.hs
+++ b/test/conformance-snapshot/Generated/HospitalCapacity/Reservation/BehaviorContract.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Reservation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Reservation; do not edit.
 module Generated.HospitalCapacity.Reservation.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -14,6 +14,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -205,7 +206,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -218,7 +230,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-snapshot/Generated/HospitalCapacity/Reservation/Codec.hs b/test/conformance-snapshot/Generated/HospitalCapacity/Reservation/Codec.hs
--- a/test/conformance-snapshot/Generated/HospitalCapacity/Reservation/Codec.hs
+++ b/test/conformance-snapshot/Generated/HospitalCapacity/Reservation/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Reservation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Reservation; do not edit.
 module Generated.HospitalCapacity.Reservation.Codec (
     reservationCodec,
     parseReservationEvent,
diff --git a/test/conformance-snapshot/Generated/HospitalCapacity/Reservation/Domain.hs b/test/conformance-snapshot/Generated/HospitalCapacity/Reservation/Domain.hs
--- a/test/conformance-snapshot/Generated/HospitalCapacity/Reservation/Domain.hs
+++ b/test/conformance-snapshot/Generated/HospitalCapacity/Reservation/Domain.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE DeriveAnyClass #-}
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Reservation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Reservation; do not edit.
 module Generated.HospitalCapacity.Reservation.Domain where
 
 import Data.Aeson (FromJSON, ToJSON)
diff --git a/test/conformance-snapshot/Generated/HospitalCapacity/Reservation/EventStream.hs b/test/conformance-snapshot/Generated/HospitalCapacity/Reservation/EventStream.hs
--- a/test/conformance-snapshot/Generated/HospitalCapacity/Reservation/EventStream.hs
+++ b/test/conformance-snapshot/Generated/HospitalCapacity/Reservation/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Reservation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Reservation; do not edit.
 module Generated.HospitalCapacity.Reservation.EventStream
   ( reservationCategory
   , reservationCommandCategory
diff --git a/test/conformance-snapshot/Generated/HospitalCapacity/Reservation/Harness.hs b/test/conformance-snapshot/Generated/HospitalCapacity/Reservation/Harness.hs
--- a/test/conformance-snapshot/Generated/HospitalCapacity/Reservation/Harness.hs
+++ b/test/conformance-snapshot/Generated/HospitalCapacity/Reservation/Harness.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Reservation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Reservation; do not edit.
 module Generated.HospitalCapacity.Reservation.Harness (harnessAssertions) where
 
 import Generated.HospitalCapacity.Reservation.Domain
diff --git a/test/conformance-snapshot/Generated/HospitalCapacity/Reservation/Projection.hs b/test/conformance-snapshot/Generated/HospitalCapacity/Reservation/Projection.hs
--- a/test/conformance-snapshot/Generated/HospitalCapacity/Reservation/Projection.hs
+++ b/test/conformance-snapshot/Generated/HospitalCapacity/Reservation/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Reservation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Reservation; do not edit.
 module Generated.HospitalCapacity.Reservation.Projection
   ( transferDecisionsProjection
   , transferDecisionsStatusFor
diff --git a/test/conformance-snapshot/Generated/HospitalCapacity/Reservation/Transducer.hs b/test/conformance-snapshot/Generated/HospitalCapacity/Reservation/Transducer.hs
--- a/test/conformance-snapshot/Generated/HospitalCapacity/Reservation/Transducer.hs
+++ b/test/conformance-snapshot/Generated/HospitalCapacity/Reservation/Transducer.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE OverloadedLabels #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Reservation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Reservation; do not edit.
 module Generated.HospitalCapacity.Reservation.Transducer
   ( reservationTransducer
   , reservationFoldFingerprint
diff --git a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/BehaviorSourceMap.hs b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/BehaviorSourceMap.hs
--- a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/BehaviorSourceMap.hs
+++ b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/BehaviorSourceMap.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context structural-nominal-leaves behavior source map; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context structural-nominal-leaves behavior source map; do not edit.
 module Generated.StructuralNominalLeaves.BehaviorSourceMap
   ( BehaviorSourceLocation (..)
   , behaviorSourceLocation
diff --git a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Nominal/Shape/Channel.hs b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Nominal/Shape/Channel.hs
--- a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Nominal/Shape/Channel.hs
+++ b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Nominal/Shape/Channel.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from bound nominal enum representation Channel; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from bound nominal enum representation Channel; do not edit.
 module Generated.StructuralNominalLeaves.Nominal.Shape.Channel (ChannelRepresentation (..), channelRepresentationText) where
 
 import Data.Text (Text)
diff --git a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/NominalProjections.hs b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/NominalProjections.hs
--- a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/NominalProjections.hs
+++ b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/NominalProjections.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TypeFamilies #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context structural-nominal-leaves nominal scalar projection facade; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context structural-nominal-leaves nominal scalar projection facade; do not edit.
 module Generated.StructuralNominalLeaves.NominalProjections where
 
 import Data.KindID qualified as KindID
diff --git a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Nominals.hs b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Nominals.hs
--- a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Nominals.hs
+++ b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Nominals.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE DeriveAnyClass #-}
 {-# LANGUAGE TypeFamilies #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context structural-nominal-leaves generated nominal declarations; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context structural-nominal-leaves generated nominal declarations; do not edit.
 module Generated.StructuralNominalLeaves.Nominals
   ( TemplateId
   , parseTemplateId
diff --git a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Nominals/Internal.hs b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Nominals/Internal.hs
--- a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Nominals/Internal.hs
+++ b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Nominals/Internal.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context structural-nominal-leaves generated nominal ID internals; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context structural-nominal-leaves generated nominal ID internals; do not edit.
 module Generated.StructuralNominalLeaves.Nominals.Internal
   ( TemplateId
   , parseTemplateId
diff --git a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/ProjectionCatalog.hs b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/ProjectionCatalog.hs
--- a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/ProjectionCatalog.hs
+++ b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/ProjectionCatalog.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from projection-catalog structural-nominal-leaves; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from projection-catalog structural-nominal-leaves; do not edit.
 {-# LANGUAGE OverloadedStrings #-}
 module Generated.StructuralNominalLeaves.ProjectionCatalog
   ( projectionCatalog
diff --git a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/ReplayAudit.hs b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/ReplayAudit.hs
--- a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/ReplayAudit.hs
+++ b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/ReplayAudit.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context structural-nominal-leaves replay-audit assembly; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context structural-nominal-leaves replay-audit assembly; do not edit.
 --
 -- Deployment contract:
 --   * replay-neutral diff: no data audit is required;
diff --git a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Structural/NominalLeaves.hs b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Structural/NominalLeaves.hs
--- a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Structural/NominalLeaves.hs
+++ b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Structural/NominalLeaves.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context structural-nominal-leaves structural nominal leaves; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context structural-nominal-leaves structural nominal leaves; do not edit.
 module Generated.StructuralNominalLeaves.Structural.NominalLeaves where
 
 import Data.Aeson (Value (..), parseJSON, toJSON, withText)
diff --git a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Structural/Shape/TemplateBook.hs b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Structural/Shape/TemplateBook.hs
--- a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Structural/Shape/TemplateBook.hs
+++ b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Structural/Shape/TemplateBook.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from mapped structural TemplateBook; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from mapped structural TemplateBook; do not edit.
 module Generated.StructuralNominalLeaves.Structural.Shape.TemplateBook (TemplateBookShape (..)) where
 
 import Data.Map.Strict (Map)
diff --git a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Structural/Shape/TemplateLookupInput.hs b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Structural/Shape/TemplateLookupInput.hs
--- a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Structural/Shape/TemplateLookupInput.hs
+++ b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Structural/Shape/TemplateLookupInput.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from mapped structural TemplateLookupInput; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from mapped structural TemplateLookupInput; do not edit.
 module Generated.StructuralNominalLeaves.Structural.Shape.TemplateLookupInput (TemplateLookupInputShape (..)) where
 
 import GHC.Generics (Generic)
diff --git a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Structural/Shape/TemplateLookupRow.hs b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Structural/Shape/TemplateLookupRow.hs
--- a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Structural/Shape/TemplateLookupRow.hs
+++ b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Structural/Shape/TemplateLookupRow.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from mapped structural TemplateLookupRow; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from mapped structural TemplateLookupRow; do not edit.
 module Generated.StructuralNominalLeaves.Structural.Shape.TemplateLookupRow (TemplateLookupRowShape (..)) where
 
 import GHC.Generics (Generic)
diff --git a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Structural/Shape/TemplateRef.hs b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Structural/Shape/TemplateRef.hs
--- a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Structural/Shape/TemplateRef.hs
+++ b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Structural/Shape/TemplateRef.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from mapped structural TemplateRef; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from mapped structural TemplateRef; do not edit.
 module Generated.StructuralNominalLeaves.Structural.Shape.TemplateRef (TemplateRefShape (..)) where
 
 import GHC.Generics (Generic)
diff --git a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Structural/Shape/TemplateState.hs b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Structural/Shape/TemplateState.hs
--- a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Structural/Shape/TemplateState.hs
+++ b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Structural/Shape/TemplateState.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from mapped structural TemplateState; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from mapped structural TemplateState; do not edit.
 module Generated.StructuralNominalLeaves.Structural.Shape.TemplateState (TemplateStateShape (..)) where
 
 import GHC.Generics (Generic)
diff --git a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/StructuralConformance.hs b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/StructuralConformance.hs
--- a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/StructuralConformance.hs
+++ b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/StructuralConformance.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context structural-nominal-leaves structural conformance; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context structural-nominal-leaves structural conformance; do not edit.
 module Generated.StructuralNominalLeaves.StructuralConformance
   ( structuralConformanceAssertions
   ) where
diff --git a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/StructuralProjections.hs b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/StructuralProjections.hs
--- a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/StructuralProjections.hs
+++ b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/StructuralProjections.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TypeFamilies #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context structural-nominal-leaves mapped structural facade; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context structural-nominal-leaves mapped structural facade; do not edit.
 -- Equality witnesses are emitted for Text, Int, Bool, Natural, and UTCTime.
 -- Nominal ID and enum leaves carry exact canonical-text domains.
 -- Int, Natural, and UTCTime belong to Keiki's ordered subset.
diff --git a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateCatalog/BehaviorContract.hs b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateCatalog/BehaviorContract.hs
--- a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateCatalog/BehaviorContract.hs
+++ b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateCatalog/BehaviorContract.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate TemplateCatalog; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate TemplateCatalog; do not edit.
 module Generated.StructuralNominalLeaves.TemplateCatalog.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -14,6 +14,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -205,7 +206,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -218,7 +230,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateCatalog/Codec.hs b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateCatalog/Codec.hs
--- a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateCatalog/Codec.hs
+++ b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateCatalog/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate TemplateCatalog; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate TemplateCatalog; do not edit.
 module Generated.StructuralNominalLeaves.TemplateCatalog.Codec (
     templateCatalogCodec,
     parseTemplateCatalogEvent,
diff --git a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateCatalog/Domain.hs b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateCatalog/Domain.hs
--- a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateCatalog/Domain.hs
+++ b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateCatalog/Domain.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE DeriveAnyClass #-}
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate TemplateCatalog; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate TemplateCatalog; do not edit.
 module Generated.StructuralNominalLeaves.TemplateCatalog.Domain where
 
 import Data.Aeson (FromJSON, ToJSON)
diff --git a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateCatalog/EventStream.hs b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateCatalog/EventStream.hs
--- a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateCatalog/EventStream.hs
+++ b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateCatalog/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate TemplateCatalog; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate TemplateCatalog; do not edit.
 module Generated.StructuralNominalLeaves.TemplateCatalog.EventStream
   ( templateCatalogCategory
   , templateCatalogCommandCategory
diff --git a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateCatalog/Harness.hs b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateCatalog/Harness.hs
--- a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateCatalog/Harness.hs
+++ b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateCatalog/Harness.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate TemplateCatalog; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate TemplateCatalog; do not edit.
 module Generated.StructuralNominalLeaves.TemplateCatalog.Harness (harnessAssertions) where
 
 import Generated.StructuralNominalLeaves.TemplateCatalog.Domain
diff --git a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateCatalog/Projection.hs b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateCatalog/Projection.hs
--- a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateCatalog/Projection.hs
+++ b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateCatalog/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate TemplateCatalog; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate TemplateCatalog; do not edit.
 module Generated.StructuralNominalLeaves.TemplateCatalog.Projection () where
 
 -- No projection declarations are present; this module keeps the generated manifest inventory total.
diff --git a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateCatalog/Transducer.hs b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateCatalog/Transducer.hs
--- a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateCatalog/Transducer.hs
+++ b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateCatalog/Transducer.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE OverloadedLabels #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate TemplateCatalog; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate TemplateCatalog; do not edit.
 module Generated.StructuralNominalLeaves.TemplateCatalog.Transducer
   ( templateCatalogTransducer
   , templateCatalogFoldFingerprint
diff --git a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateDeliveryRouter/Router.hs b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateDeliveryRouter/Router.hs
--- a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateDeliveryRouter/Router.hs
+++ b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateDeliveryRouter/Router.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from router TemplateDeliveryRouter; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from router TemplateDeliveryRouter; do not edit.
 module Generated.StructuralNominalLeaves.TemplateDeliveryRouter.Router
   ( templateDeliveryRouterName
   , templateDeliveryRouterWorkerOptions
diff --git a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateDeliveryRouter/RouterHarness.hs b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateDeliveryRouter/RouterHarness.hs
--- a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateDeliveryRouter/RouterHarness.hs
+++ b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateDeliveryRouter/RouterHarness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from router TemplateDeliveryRouter; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from router TemplateDeliveryRouter; do not edit.
 module Generated.StructuralNominalLeaves.TemplateDeliveryRouter.RouterHarness (routerHarnessValues) where
 
 routerHarnessValues :: [(String, String)]
diff --git a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateLookup/QueryContract.hs b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateLookup/QueryContract.hs
--- a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateLookup/QueryContract.hs
+++ b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateLookup/QueryContract.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from readmodel template_lookup; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from readmodel template_lookup; do not edit.
 module Generated.StructuralNominalLeaves.TemplateLookup.QueryContract
   ( TemplateLookupQueryInput
   , TemplateLookupQueryResult
diff --git a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateLookup/ReadModel.hs b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateLookup/ReadModel.hs
--- a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateLookup/ReadModel.hs
+++ b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateLookup/ReadModel.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from readmodel template_lookup; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from readmodel template_lookup; do not edit.
 module Generated.StructuralNominalLeaves.TemplateLookup.ReadModel
   ( templateLookupReadModel
   , templateLookupQualifiedTable
diff --git a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateLookup/ReadModelHarness.hs b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateLookup/ReadModelHarness.hs
--- a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateLookup/ReadModelHarness.hs
+++ b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateLookup/ReadModelHarness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from readmodel template_lookup; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from readmodel template_lookup; do not edit.
 module Generated.StructuralNominalLeaves.TemplateLookup.ReadModelHarness (readModelFacts, readModelFactResults, runReadModelFacts, catalogFactsAgainst) where
 
 import Generated.StructuralNominalLeaves.TemplateLookup.ReadModel (templateLookupReadModel)
diff --git a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateLookup/ReadModelTable.hs b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateLookup/ReadModelTable.hs
--- a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateLookup/ReadModelTable.hs
+++ b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateLookup/ReadModelTable.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from readmodel template_lookup; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from readmodel template_lookup; do not edit.
 module Generated.StructuralNominalLeaves.TemplateLookup.ReadModelTable (templateLookupQualifiedTable) where
 
 import Data.Text (Text)
diff --git a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateWork/Queue.hs b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateWork/Queue.hs
--- a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateWork/Queue.hs
+++ b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateWork/Queue.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from workqueue template_work; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from workqueue template_work; do not edit.
 module Generated.StructuralNominalLeaves.TemplateWork.Queue
   ( TemplateWork (..)
   , encodeTemplateWork
diff --git a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateWork/QueueCodec.hs b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateWork/QueueCodec.hs
--- a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateWork/QueueCodec.hs
+++ b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateWork/QueueCodec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from workqueue template_work; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from workqueue template_work; do not edit.
 -- | Versioned job payload envelope: @{\"v\",\"t\",\"data\"}@.
 --
 -- Deploy workers before producers when raising its schema version. Do not
diff --git a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateWork/QueuePolicy.hs b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateWork/QueuePolicy.hs
--- a/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateWork/QueuePolicy.hs
+++ b/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateWork/QueuePolicy.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from workqueue template_work; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from workqueue template_work; do not edit.
 module Generated.StructuralNominalLeaves.TemplateWork.QueuePolicy
   ( TemplateWorkOutcome (..)
   , retryPolicy, jobOutcomeFor
diff --git a/test/conformance-structural-text-sets/Generated/StructuralTextSets/BehaviorSourceMap.hs b/test/conformance-structural-text-sets/Generated/StructuralTextSets/BehaviorSourceMap.hs
--- a/test/conformance-structural-text-sets/Generated/StructuralTextSets/BehaviorSourceMap.hs
+++ b/test/conformance-structural-text-sets/Generated/StructuralTextSets/BehaviorSourceMap.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context structural-text-sets behavior source map; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context structural-text-sets behavior source map; do not edit.
 module Generated.StructuralTextSets.BehaviorSourceMap
   ( BehaviorSourceLocation (..)
   , behaviorSourceLocation
diff --git a/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelJobs/Queue.hs b/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelJobs/Queue.hs
--- a/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelJobs/Queue.hs
+++ b/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelJobs/Queue.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from workqueue label_jobs; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from workqueue label_jobs; do not edit.
 module Generated.StructuralTextSets.LabelJobs.Queue
   ( LabelJob (..)
   , encodeLabelJob
diff --git a/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelJobs/QueueCodec.hs b/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelJobs/QueueCodec.hs
--- a/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelJobs/QueueCodec.hs
+++ b/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelJobs/QueueCodec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from workqueue label_jobs; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from workqueue label_jobs; do not edit.
 -- | Versioned job payload envelope: @{\"v\",\"t\",\"data\"}@.
 --
 -- Deploy workers before producers when raising its schema version. Do not
diff --git a/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelJobs/QueuePolicy.hs b/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelJobs/QueuePolicy.hs
--- a/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelJobs/QueuePolicy.hs
+++ b/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelJobs/QueuePolicy.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from workqueue label_jobs; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from workqueue label_jobs; do not edit.
 module Generated.StructuralTextSets.LabelJobs.QueuePolicy
   ( LabelJobsOutcome (..)
   , retryPolicy, jobOutcomeFor
diff --git a/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelLookup/QueryContract.hs b/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelLookup/QueryContract.hs
--- a/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelLookup/QueryContract.hs
+++ b/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelLookup/QueryContract.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from readmodel label_lookup; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from readmodel label_lookup; do not edit.
 module Generated.StructuralTextSets.LabelLookup.QueryContract
   ( LabelLookupQueryInput
   , LabelLookupQueryResult
diff --git a/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelLookup/ReadModel.hs b/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelLookup/ReadModel.hs
--- a/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelLookup/ReadModel.hs
+++ b/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelLookup/ReadModel.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from readmodel label_lookup; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from readmodel label_lookup; do not edit.
 module Generated.StructuralTextSets.LabelLookup.ReadModel
   ( labelLookupReadModel
   , labelLookupQualifiedTable
diff --git a/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelLookup/ReadModelHarness.hs b/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelLookup/ReadModelHarness.hs
--- a/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelLookup/ReadModelHarness.hs
+++ b/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelLookup/ReadModelHarness.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from readmodel label_lookup; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from readmodel label_lookup; do not edit.
 module Generated.StructuralTextSets.LabelLookup.ReadModelHarness (readModelFacts, readModelFactResults, runReadModelFacts, catalogFactsAgainst) where
 
 import Generated.StructuralTextSets.LabelLookup.ReadModel (labelLookupReadModel)
diff --git a/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelLookup/ReadModelTable.hs b/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelLookup/ReadModelTable.hs
--- a/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelLookup/ReadModelTable.hs
+++ b/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelLookup/ReadModelTable.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from readmodel label_lookup; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from readmodel label_lookup; do not edit.
 module Generated.StructuralTextSets.LabelLookup.ReadModelTable (labelLookupQualifiedTable) where
 
 import Data.Text (Text)
diff --git a/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelStore/BehaviorContract.hs b/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelStore/BehaviorContract.hs
--- a/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelStore/BehaviorContract.hs
+++ b/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelStore/BehaviorContract.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate LabelStore; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate LabelStore; do not edit.
 module Generated.StructuralTextSets.LabelStore.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -14,6 +14,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -193,7 +194,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -206,7 +218,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelStore/Codec.hs b/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelStore/Codec.hs
--- a/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelStore/Codec.hs
+++ b/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelStore/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate LabelStore; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate LabelStore; do not edit.
 module Generated.StructuralTextSets.LabelStore.Codec (
     labelStoreCodec,
     parseLabelStoreEvent,
diff --git a/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelStore/Domain.hs b/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelStore/Domain.hs
--- a/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelStore/Domain.hs
+++ b/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelStore/Domain.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE DeriveAnyClass #-}
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate LabelStore; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate LabelStore; do not edit.
 module Generated.StructuralTextSets.LabelStore.Domain where
 
 import Data.Aeson (FromJSON, ToJSON)
diff --git a/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelStore/EventStream.hs b/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelStore/EventStream.hs
--- a/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelStore/EventStream.hs
+++ b/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelStore/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate LabelStore; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate LabelStore; do not edit.
 module Generated.StructuralTextSets.LabelStore.EventStream
   ( labelStoreCategory
   , labelStoreCommandCategory
diff --git a/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelStore/Harness.hs b/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelStore/Harness.hs
--- a/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelStore/Harness.hs
+++ b/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelStore/Harness.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate LabelStore; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate LabelStore; do not edit.
 module Generated.StructuralTextSets.LabelStore.Harness (harnessAssertions) where
 
 import Generated.StructuralTextSets.LabelStore.Domain
diff --git a/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelStore/Projection.hs b/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelStore/Projection.hs
--- a/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelStore/Projection.hs
+++ b/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelStore/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate LabelStore; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate LabelStore; do not edit.
 module Generated.StructuralTextSets.LabelStore.Projection () where
 
 -- No projection declarations are present; this module keeps the generated manifest inventory total.
diff --git a/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelStore/Transducer.hs b/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelStore/Transducer.hs
--- a/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelStore/Transducer.hs
+++ b/test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelStore/Transducer.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate LabelStore; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate LabelStore; do not edit.
 module Generated.StructuralTextSets.LabelStore.Transducer
   ( labelStoreTransducer
   , labelStoreFoldFingerprint
diff --git a/test/conformance-structural-text-sets/Generated/StructuralTextSets/ProjectionCatalog.hs b/test/conformance-structural-text-sets/Generated/StructuralTextSets/ProjectionCatalog.hs
--- a/test/conformance-structural-text-sets/Generated/StructuralTextSets/ProjectionCatalog.hs
+++ b/test/conformance-structural-text-sets/Generated/StructuralTextSets/ProjectionCatalog.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from projection-catalog structural-text-sets; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from projection-catalog structural-text-sets; do not edit.
 {-# LANGUAGE OverloadedStrings #-}
 module Generated.StructuralTextSets.ProjectionCatalog
   ( projectionCatalog
diff --git a/test/conformance-structural-text-sets/Generated/StructuralTextSets/ReplayAudit.hs b/test/conformance-structural-text-sets/Generated/StructuralTextSets/ReplayAudit.hs
--- a/test/conformance-structural-text-sets/Generated/StructuralTextSets/ReplayAudit.hs
+++ b/test/conformance-structural-text-sets/Generated/StructuralTextSets/ReplayAudit.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context structural-text-sets replay-audit assembly; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context structural-text-sets replay-audit assembly; do not edit.
 --
 -- Deployment contract:
 --   * replay-neutral diff: no data audit is required;
diff --git a/test/conformance-structural-text-sets/Generated/StructuralTextSets/Structural/Shape/LabelEnvelope.hs b/test/conformance-structural-text-sets/Generated/StructuralTextSets/Structural/Shape/LabelEnvelope.hs
--- a/test/conformance-structural-text-sets/Generated/StructuralTextSets/Structural/Shape/LabelEnvelope.hs
+++ b/test/conformance-structural-text-sets/Generated/StructuralTextSets/Structural/Shape/LabelEnvelope.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from mapped structural LabelEnvelope; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from mapped structural LabelEnvelope; do not edit.
 module Generated.StructuralTextSets.Structural.Shape.LabelEnvelope (LabelEnvelopeShape (..)) where
 
 import Data.Map.Strict (Map)
diff --git a/test/conformance-structural-text-sets/Generated/StructuralTextSets/Structural/Shape/MaybeTextLabels.hs b/test/conformance-structural-text-sets/Generated/StructuralTextSets/Structural/Shape/MaybeTextLabels.hs
--- a/test/conformance-structural-text-sets/Generated/StructuralTextSets/Structural/Shape/MaybeTextLabels.hs
+++ b/test/conformance-structural-text-sets/Generated/StructuralTextSets/Structural/Shape/MaybeTextLabels.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from mapped structural MaybeTextLabels; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from mapped structural MaybeTextLabels; do not edit.
 module Generated.StructuralTextSets.Structural.Shape.MaybeTextLabels (MaybeTextLabelsShape) where
 
 import Data.Set (Set)
diff --git a/test/conformance-structural-text-sets/Generated/StructuralTextSets/Structural/Shape/TextLabels.hs b/test/conformance-structural-text-sets/Generated/StructuralTextSets/Structural/Shape/TextLabels.hs
--- a/test/conformance-structural-text-sets/Generated/StructuralTextSets/Structural/Shape/TextLabels.hs
+++ b/test/conformance-structural-text-sets/Generated/StructuralTextSets/Structural/Shape/TextLabels.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from mapped structural TextLabels; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from mapped structural TextLabels; do not edit.
 module Generated.StructuralTextSets.Structural.Shape.TextLabels (TextLabelsShape) where
 
 import Data.Set (Set)
diff --git a/test/conformance-structural-text-sets/Generated/StructuralTextSets/StructuralConformance.hs b/test/conformance-structural-text-sets/Generated/StructuralTextSets/StructuralConformance.hs
--- a/test/conformance-structural-text-sets/Generated/StructuralTextSets/StructuralConformance.hs
+++ b/test/conformance-structural-text-sets/Generated/StructuralTextSets/StructuralConformance.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context structural-text-sets structural conformance; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context structural-text-sets structural conformance; do not edit.
 module Generated.StructuralTextSets.StructuralConformance
   ( structuralConformanceAssertions
   ) where
diff --git a/test/conformance-structural/Generated/StructuralConformance/ArtifactCatalog/BehaviorContract.hs b/test/conformance-structural/Generated/StructuralConformance/ArtifactCatalog/BehaviorContract.hs
--- a/test/conformance-structural/Generated/StructuralConformance/ArtifactCatalog/BehaviorContract.hs
+++ b/test/conformance-structural/Generated/StructuralConformance/ArtifactCatalog/BehaviorContract.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate ArtifactCatalog; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate ArtifactCatalog; do not edit.
 module Generated.StructuralConformance.ArtifactCatalog.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -14,6 +14,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -157,7 +158,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -170,7 +182,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-structural/Generated/StructuralConformance/ArtifactCatalog/Codec.hs b/test/conformance-structural/Generated/StructuralConformance/ArtifactCatalog/Codec.hs
--- a/test/conformance-structural/Generated/StructuralConformance/ArtifactCatalog/Codec.hs
+++ b/test/conformance-structural/Generated/StructuralConformance/ArtifactCatalog/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate ArtifactCatalog; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate ArtifactCatalog; do not edit.
 module Generated.StructuralConformance.ArtifactCatalog.Codec (
     artifactCatalogCodec,
     parseArtifactCatalogEvent,
diff --git a/test/conformance-structural/Generated/StructuralConformance/ArtifactCatalog/Domain.hs b/test/conformance-structural/Generated/StructuralConformance/ArtifactCatalog/Domain.hs
--- a/test/conformance-structural/Generated/StructuralConformance/ArtifactCatalog/Domain.hs
+++ b/test/conformance-structural/Generated/StructuralConformance/ArtifactCatalog/Domain.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate ArtifactCatalog; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate ArtifactCatalog; do not edit.
 module Generated.StructuralConformance.ArtifactCatalog.Domain where
 
 import Data.Proxy (Proxy (..))
diff --git a/test/conformance-structural/Generated/StructuralConformance/ArtifactCatalog/EventStream.hs b/test/conformance-structural/Generated/StructuralConformance/ArtifactCatalog/EventStream.hs
--- a/test/conformance-structural/Generated/StructuralConformance/ArtifactCatalog/EventStream.hs
+++ b/test/conformance-structural/Generated/StructuralConformance/ArtifactCatalog/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate ArtifactCatalog; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate ArtifactCatalog; do not edit.
 module Generated.StructuralConformance.ArtifactCatalog.EventStream
   ( artifactCatalogCategory
   , artifactCatalogCommandCategory
diff --git a/test/conformance-structural/Generated/StructuralConformance/ArtifactCatalog/Harness.hs b/test/conformance-structural/Generated/StructuralConformance/ArtifactCatalog/Harness.hs
--- a/test/conformance-structural/Generated/StructuralConformance/ArtifactCatalog/Harness.hs
+++ b/test/conformance-structural/Generated/StructuralConformance/ArtifactCatalog/Harness.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate ArtifactCatalog; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate ArtifactCatalog; do not edit.
 module Generated.StructuralConformance.ArtifactCatalog.Harness (harnessAssertions) where
 
 import Generated.StructuralConformance.ArtifactCatalog.Domain
diff --git a/test/conformance-structural/Generated/StructuralConformance/ArtifactCatalog/Projection.hs b/test/conformance-structural/Generated/StructuralConformance/ArtifactCatalog/Projection.hs
--- a/test/conformance-structural/Generated/StructuralConformance/ArtifactCatalog/Projection.hs
+++ b/test/conformance-structural/Generated/StructuralConformance/ArtifactCatalog/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate ArtifactCatalog; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate ArtifactCatalog; do not edit.
 module Generated.StructuralConformance.ArtifactCatalog.Projection () where
 
 -- No projection declarations are present; this module keeps the generated manifest inventory total.
diff --git a/test/conformance-structural/Generated/StructuralConformance/ArtifactCatalog/Transducer.hs b/test/conformance-structural/Generated/StructuralConformance/ArtifactCatalog/Transducer.hs
--- a/test/conformance-structural/Generated/StructuralConformance/ArtifactCatalog/Transducer.hs
+++ b/test/conformance-structural/Generated/StructuralConformance/ArtifactCatalog/Transducer.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate ArtifactCatalog; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate ArtifactCatalog; do not edit.
 module Generated.StructuralConformance.ArtifactCatalog.Transducer
   ( artifactCatalogTransducer
   , artifactCatalogFoldFingerprint
diff --git a/test/conformance-structural/Generated/StructuralConformance/BehaviorSourceMap.hs b/test/conformance-structural/Generated/StructuralConformance/BehaviorSourceMap.hs
--- a/test/conformance-structural/Generated/StructuralConformance/BehaviorSourceMap.hs
+++ b/test/conformance-structural/Generated/StructuralConformance/BehaviorSourceMap.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context structural-conformance behavior source map; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context structural-conformance behavior source map; do not edit.
 module Generated.StructuralConformance.BehaviorSourceMap
   ( BehaviorSourceLocation (..)
   , behaviorSourceLocation
diff --git a/test/conformance-structural/Generated/StructuralConformance/ReplayAudit.hs b/test/conformance-structural/Generated/StructuralConformance/ReplayAudit.hs
--- a/test/conformance-structural/Generated/StructuralConformance/ReplayAudit.hs
+++ b/test/conformance-structural/Generated/StructuralConformance/ReplayAudit.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context structural-conformance replay-audit assembly; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context structural-conformance replay-audit assembly; do not edit.
 --
 -- Deployment contract:
 --   * replay-neutral diff: no data audit is required;
diff --git a/test/conformance-structural/Generated/StructuralConformance/Structural/Shape/ArtifactInfo.hs b/test/conformance-structural/Generated/StructuralConformance/Structural/Shape/ArtifactInfo.hs
--- a/test/conformance-structural/Generated/StructuralConformance/Structural/Shape/ArtifactInfo.hs
+++ b/test/conformance-structural/Generated/StructuralConformance/Structural/Shape/ArtifactInfo.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from mapped structural ArtifactInfo; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from mapped structural ArtifactInfo; do not edit.
 module Generated.StructuralConformance.Structural.Shape.ArtifactInfo (ArtifactInfoShape (..)) where
 
 import Data.Text (Text)
diff --git a/test/conformance-structural/Generated/StructuralConformance/Structural/Shape/ArtifactKind.hs b/test/conformance-structural/Generated/StructuralConformance/Structural/Shape/ArtifactKind.hs
--- a/test/conformance-structural/Generated/StructuralConformance/Structural/Shape/ArtifactKind.hs
+++ b/test/conformance-structural/Generated/StructuralConformance/Structural/Shape/ArtifactKind.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from mapped structural ArtifactKind; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from mapped structural ArtifactKind; do not edit.
 module Generated.StructuralConformance.Structural.Shape.ArtifactKind (ArtifactKindShape (..)) where
 
 import GHC.Generics (Generic)
diff --git a/test/conformance-structural/Generated/StructuralConformance/Structural/Shape/ArtifactLocation.hs b/test/conformance-structural/Generated/StructuralConformance/Structural/Shape/ArtifactLocation.hs
--- a/test/conformance-structural/Generated/StructuralConformance/Structural/Shape/ArtifactLocation.hs
+++ b/test/conformance-structural/Generated/StructuralConformance/Structural/Shape/ArtifactLocation.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from mapped structural ArtifactLocation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from mapped structural ArtifactLocation; do not edit.
 module Generated.StructuralConformance.Structural.Shape.ArtifactLocation (ArtifactLocationShape (..)) where
 
 import Data.Text (Text)
diff --git a/test/conformance-structural/Generated/StructuralConformance/Structural/Shape/ArtifactMetadata.hs b/test/conformance-structural/Generated/StructuralConformance/Structural/Shape/ArtifactMetadata.hs
--- a/test/conformance-structural/Generated/StructuralConformance/Structural/Shape/ArtifactMetadata.hs
+++ b/test/conformance-structural/Generated/StructuralConformance/Structural/Shape/ArtifactMetadata.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from mapped structural ArtifactMetadata; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from mapped structural ArtifactMetadata; do not edit.
 module Generated.StructuralConformance.Structural.Shape.ArtifactMetadata (ArtifactMetadataShape (..)) where
 
 import Data.Text (Text)
diff --git a/test/conformance-structural/Generated/StructuralConformance/StructuralConformance.hs b/test/conformance-structural/Generated/StructuralConformance/StructuralConformance.hs
--- a/test/conformance-structural/Generated/StructuralConformance/StructuralConformance.hs
+++ b/test/conformance-structural/Generated/StructuralConformance/StructuralConformance.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context structural-conformance structural conformance; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context structural-conformance structural conformance; do not edit.
 module Generated.StructuralConformance.StructuralConformance
   ( structuralConformanceAssertions
   ) where
diff --git a/test/conformance-structural/Generated/StructuralConformance/StructuralProjections.hs b/test/conformance-structural/Generated/StructuralConformance/StructuralProjections.hs
--- a/test/conformance-structural/Generated/StructuralConformance/StructuralProjections.hs
+++ b/test/conformance-structural/Generated/StructuralConformance/StructuralProjections.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TypeFamilies #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context structural-conformance mapped structural facade; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context structural-conformance mapped structural facade; do not edit.
 -- Equality witnesses are emitted for Text, Int, Bool, Natural, and UTCTime.
 -- Nominal ID and enum leaves carry exact canonical-text domains.
 -- Int, Natural, and UTCTime belong to Keiki's ordered subset.
diff --git a/test/conformance-v2/Generated/HospitalCapacity/BehaviorSourceMap.hs b/test/conformance-v2/Generated/HospitalCapacity/BehaviorSourceMap.hs
--- a/test/conformance-v2/Generated/HospitalCapacity/BehaviorSourceMap.hs
+++ b/test/conformance-v2/Generated/HospitalCapacity/BehaviorSourceMap.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context hospital-capacity behavior source map; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context hospital-capacity behavior source map; do not edit.
 module Generated.HospitalCapacity.BehaviorSourceMap
   ( BehaviorSourceLocation (..)
   , behaviorSourceLocation
diff --git a/test/conformance-v2/Generated/HospitalCapacity/Nominals.hs b/test/conformance-v2/Generated/HospitalCapacity/Nominals.hs
--- a/test/conformance-v2/Generated/HospitalCapacity/Nominals.hs
+++ b/test/conformance-v2/Generated/HospitalCapacity/Nominals.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE DeriveAnyClass #-}
 {-# LANGUAGE TypeFamilies #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context hospital-capacity generated nominal declarations; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context hospital-capacity generated nominal declarations; do not edit.
 module Generated.HospitalCapacity.Nominals
   ( BedType (..)
   , bedTypeText
diff --git a/test/conformance-v2/Generated/HospitalCapacity/Nominals/Internal.hs b/test/conformance-v2/Generated/HospitalCapacity/Nominals/Internal.hs
--- a/test/conformance-v2/Generated/HospitalCapacity/Nominals/Internal.hs
+++ b/test/conformance-v2/Generated/HospitalCapacity/Nominals/Internal.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context hospital-capacity generated nominal ID internals; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context hospital-capacity generated nominal ID internals; do not edit.
 module Generated.HospitalCapacity.Nominals.Internal
   ( CommandId
   , parseCommandId
diff --git a/test/conformance-v2/Generated/HospitalCapacity/ReplayAudit.hs b/test/conformance-v2/Generated/HospitalCapacity/ReplayAudit.hs
--- a/test/conformance-v2/Generated/HospitalCapacity/ReplayAudit.hs
+++ b/test/conformance-v2/Generated/HospitalCapacity/ReplayAudit.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context hospital-capacity replay-audit assembly; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context hospital-capacity replay-audit assembly; do not edit.
 --
 -- Deployment contract:
 --   * replay-neutral diff: no data audit is required;
diff --git a/test/conformance-v2/Generated/HospitalCapacity/Reservation/BehaviorContract.hs b/test/conformance-v2/Generated/HospitalCapacity/Reservation/BehaviorContract.hs
--- a/test/conformance-v2/Generated/HospitalCapacity/Reservation/BehaviorContract.hs
+++ b/test/conformance-v2/Generated/HospitalCapacity/Reservation/BehaviorContract.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Reservation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Reservation; do not edit.
 module Generated.HospitalCapacity.Reservation.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -14,6 +14,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -205,7 +206,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -218,7 +230,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-v2/Generated/HospitalCapacity/Reservation/Codec.hs b/test/conformance-v2/Generated/HospitalCapacity/Reservation/Codec.hs
--- a/test/conformance-v2/Generated/HospitalCapacity/Reservation/Codec.hs
+++ b/test/conformance-v2/Generated/HospitalCapacity/Reservation/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Reservation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Reservation; do not edit.
 module Generated.HospitalCapacity.Reservation.Codec (
     reservationCodec,
     parseReservationEvent,
diff --git a/test/conformance-v2/Generated/HospitalCapacity/Reservation/Domain.hs b/test/conformance-v2/Generated/HospitalCapacity/Reservation/Domain.hs
--- a/test/conformance-v2/Generated/HospitalCapacity/Reservation/Domain.hs
+++ b/test/conformance-v2/Generated/HospitalCapacity/Reservation/Domain.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Reservation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Reservation; do not edit.
 module Generated.HospitalCapacity.Reservation.Domain where
 
 import Data.Proxy (Proxy (..))
diff --git a/test/conformance-v2/Generated/HospitalCapacity/Reservation/EventStream.hs b/test/conformance-v2/Generated/HospitalCapacity/Reservation/EventStream.hs
--- a/test/conformance-v2/Generated/HospitalCapacity/Reservation/EventStream.hs
+++ b/test/conformance-v2/Generated/HospitalCapacity/Reservation/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Reservation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Reservation; do not edit.
 module Generated.HospitalCapacity.Reservation.EventStream
   ( reservationCategory
   , reservationCommandCategory
diff --git a/test/conformance-v2/Generated/HospitalCapacity/Reservation/Harness.hs b/test/conformance-v2/Generated/HospitalCapacity/Reservation/Harness.hs
--- a/test/conformance-v2/Generated/HospitalCapacity/Reservation/Harness.hs
+++ b/test/conformance-v2/Generated/HospitalCapacity/Reservation/Harness.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Reservation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Reservation; do not edit.
 module Generated.HospitalCapacity.Reservation.Harness (harnessAssertions) where
 
 import Generated.HospitalCapacity.Reservation.Domain
diff --git a/test/conformance-v2/Generated/HospitalCapacity/Reservation/Projection.hs b/test/conformance-v2/Generated/HospitalCapacity/Reservation/Projection.hs
--- a/test/conformance-v2/Generated/HospitalCapacity/Reservation/Projection.hs
+++ b/test/conformance-v2/Generated/HospitalCapacity/Reservation/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Reservation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Reservation; do not edit.
 module Generated.HospitalCapacity.Reservation.Projection
   ( transferDecisionsProjection
   , transferDecisionsStatusFor
diff --git a/test/conformance-v2/Generated/HospitalCapacity/Reservation/Transducer.hs b/test/conformance-v2/Generated/HospitalCapacity/Reservation/Transducer.hs
--- a/test/conformance-v2/Generated/HospitalCapacity/Reservation/Transducer.hs
+++ b/test/conformance-v2/Generated/HospitalCapacity/Reservation/Transducer.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE OverloadedLabels #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Reservation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Reservation; do not edit.
 module Generated.HospitalCapacity.Reservation.Transducer
   ( reservationTransducer
   , reservationFoldFingerprint
diff --git a/test/conformance-workflow-full/Generated/HospitalCapacity/HospitalTransferReservation/WorkflowFacts.hs b/test/conformance-workflow-full/Generated/HospitalCapacity/HospitalTransferReservation/WorkflowFacts.hs
--- a/test/conformance-workflow-full/Generated/HospitalCapacity/HospitalTransferReservation/WorkflowFacts.hs
+++ b/test/conformance-workflow-full/Generated/HospitalCapacity/HospitalTransferReservation/WorkflowFacts.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from workflow HospitalTransferReservation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from workflow HospitalTransferReservation; do not edit.
 module Generated.HospitalCapacity.HospitalTransferReservation.WorkflowFacts (WorkflowFacts (..), workflowFacts, workflowFactValues) where
 
 -- | The workflow's deterministic decisions, pinned as typed pure facts.
diff --git a/test/conformance-workflow-full/Generated/HospitalCapacity/HospitalTransferReservation/WorkflowRuntime.hs b/test/conformance-workflow-full/Generated/HospitalCapacity/HospitalTransferReservation/WorkflowRuntime.hs
--- a/test/conformance-workflow-full/Generated/HospitalCapacity/HospitalTransferReservation/WorkflowRuntime.hs
+++ b/test/conformance-workflow-full/Generated/HospitalCapacity/HospitalTransferReservation/WorkflowRuntime.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from workflow HospitalTransferReservation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from workflow HospitalTransferReservation; do not edit.
 module Generated.HospitalCapacity.HospitalTransferReservation.WorkflowRuntime
   ( workflowName
   , AwaitBinding
diff --git a/test/conformance-workflow-runtime/Generated/HospitalCapacity/HospitalTransferReservation/WorkflowFacts.hs b/test/conformance-workflow-runtime/Generated/HospitalCapacity/HospitalTransferReservation/WorkflowFacts.hs
--- a/test/conformance-workflow-runtime/Generated/HospitalCapacity/HospitalTransferReservation/WorkflowFacts.hs
+++ b/test/conformance-workflow-runtime/Generated/HospitalCapacity/HospitalTransferReservation/WorkflowFacts.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from workflow HospitalTransferReservation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from workflow HospitalTransferReservation; do not edit.
 module Generated.HospitalCapacity.HospitalTransferReservation.WorkflowFacts (WorkflowFacts (..), workflowFacts, workflowFactValues) where
 
 -- | The workflow's deterministic decisions, pinned as typed pure facts.
diff --git a/test/conformance-workflow-runtime/Generated/HospitalCapacity/HospitalTransferReservation/WorkflowRuntime.hs b/test/conformance-workflow-runtime/Generated/HospitalCapacity/HospitalTransferReservation/WorkflowRuntime.hs
--- a/test/conformance-workflow-runtime/Generated/HospitalCapacity/HospitalTransferReservation/WorkflowRuntime.hs
+++ b/test/conformance-workflow-runtime/Generated/HospitalCapacity/HospitalTransferReservation/WorkflowRuntime.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from workflow HospitalTransferReservation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from workflow HospitalTransferReservation; do not edit.
 module Generated.HospitalCapacity.HospitalTransferReservation.WorkflowRuntime
   ( workflowName
   , AwaitBinding
diff --git a/test/conformance-workflow/Generated/HospitalCapacity/HospitalTransferReservation/WorkflowFacts.hs b/test/conformance-workflow/Generated/HospitalCapacity/HospitalTransferReservation/WorkflowFacts.hs
--- a/test/conformance-workflow/Generated/HospitalCapacity/HospitalTransferReservation/WorkflowFacts.hs
+++ b/test/conformance-workflow/Generated/HospitalCapacity/HospitalTransferReservation/WorkflowFacts.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from workflow HospitalTransferReservation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from workflow HospitalTransferReservation; do not edit.
 module Generated.HospitalCapacity.HospitalTransferReservation.WorkflowFacts (WorkflowFacts (..), workflowFacts, workflowFactValues) where
 
 -- | The workflow's deterministic decisions, pinned as typed pure facts.
diff --git a/test/conformance-workflow/Generated/HospitalCapacity/HospitalTransferReservation/WorkflowRuntime.hs b/test/conformance-workflow/Generated/HospitalCapacity/HospitalTransferReservation/WorkflowRuntime.hs
--- a/test/conformance-workflow/Generated/HospitalCapacity/HospitalTransferReservation/WorkflowRuntime.hs
+++ b/test/conformance-workflow/Generated/HospitalCapacity/HospitalTransferReservation/WorkflowRuntime.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 5) from workflow HospitalTransferReservation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 5) from workflow HospitalTransferReservation; do not edit.
 module Generated.HospitalCapacity.HospitalTransferReservation.WorkflowRuntime
   ( workflowName
   , AwaitBinding
diff --git a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/BehaviorSourceMap.hs b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/BehaviorSourceMap.hs
--- a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/BehaviorSourceMap.hs
+++ b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/BehaviorSourceMap.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context workspace-nominal-proof behavior source map; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context workspace-nominal-proof behavior source map; do not edit.
 module Generated.WorkspaceNominalProof.BehaviorSourceMap
   ( BehaviorSourceLocation (..)
   , behaviorSourceLocation
diff --git a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Nominals.hs b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Nominals.hs
--- a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Nominals.hs
+++ b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Nominals.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE DeriveAnyClass #-}
 {-# LANGUAGE TypeFamilies #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context workspace-nominal-proof generated nominal declarations; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context workspace-nominal-proof generated nominal declarations; do not edit.
 module Generated.WorkspaceNominalProof.Nominals
   ( ProjectId
   , parseProjectId
diff --git a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Nominals/Internal.hs b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Nominals/Internal.hs
--- a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Nominals/Internal.hs
+++ b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Nominals/Internal.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context workspace-nominal-proof generated nominal ID internals; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context workspace-nominal-proof generated nominal ID internals; do not edit.
 module Generated.WorkspaceNominalProof.Nominals.Internal
   ( ProjectId
   , parseProjectId
diff --git a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Project/BehaviorContract.hs b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Project/BehaviorContract.hs
--- a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Project/BehaviorContract.hs
+++ b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Project/BehaviorContract.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate Project; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Project; do not edit.
 module Generated.WorkspaceNominalProof.Project.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -14,6 +14,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -205,7 +206,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -218,7 +230,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Project/Codec.hs b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Project/Codec.hs
--- a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Project/Codec.hs
+++ b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Project/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate Project; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Project; do not edit.
 module Generated.WorkspaceNominalProof.Project.Codec (
     projectCodec,
     parseProjectEvent,
diff --git a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Project/Domain.hs b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Project/Domain.hs
--- a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Project/Domain.hs
+++ b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Project/Domain.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate Project; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Project; do not edit.
 module Generated.WorkspaceNominalProof.Project.Domain where
 
 import Data.Proxy (Proxy (..))
diff --git a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Project/EventStream.hs b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Project/EventStream.hs
--- a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Project/EventStream.hs
+++ b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Project/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate Project; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Project; do not edit.
 module Generated.WorkspaceNominalProof.Project.EventStream
   ( projectCategory
   , projectCommandCategory
diff --git a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Project/Harness.hs b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Project/Harness.hs
--- a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Project/Harness.hs
+++ b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Project/Harness.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate Project; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Project; do not edit.
 module Generated.WorkspaceNominalProof.Project.Harness (harnessAssertions) where
 
 import Generated.WorkspaceNominalProof.Project.Domain
diff --git a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Project/Projection.hs b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Project/Projection.hs
--- a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Project/Projection.hs
+++ b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Project/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate Project; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Project; do not edit.
 module Generated.WorkspaceNominalProof.Project.Projection () where
 
 -- No projection declarations are present; this module keeps the generated manifest inventory total.
diff --git a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Project/Transducer.hs b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Project/Transducer.hs
--- a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Project/Transducer.hs
+++ b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Project/Transducer.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE OverloadedLabels #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate Project; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate Project; do not edit.
 module Generated.WorkspaceNominalProof.Project.Transducer
   ( projectTransducer
   , projectFoldFingerprint
diff --git a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/ProjectArtifact/BehaviorContract.hs b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/ProjectArtifact/BehaviorContract.hs
--- a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/ProjectArtifact/BehaviorContract.hs
+++ b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/ProjectArtifact/BehaviorContract.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate ProjectArtifact; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate ProjectArtifact; do not edit.
 module Generated.WorkspaceNominalProof.ProjectArtifact.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -14,6 +14,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -157,7 +158,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -170,7 +182,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/ProjectArtifact/Codec.hs b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/ProjectArtifact/Codec.hs
--- a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/ProjectArtifact/Codec.hs
+++ b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/ProjectArtifact/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate ProjectArtifact; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate ProjectArtifact; do not edit.
 module Generated.WorkspaceNominalProof.ProjectArtifact.Codec (
     projectArtifactCodec,
     parseProjectArtifactEvent,
diff --git a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/ProjectArtifact/Domain.hs b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/ProjectArtifact/Domain.hs
--- a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/ProjectArtifact/Domain.hs
+++ b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/ProjectArtifact/Domain.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate ProjectArtifact; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate ProjectArtifact; do not edit.
 module Generated.WorkspaceNominalProof.ProjectArtifact.Domain where
 
 import Data.Proxy (Proxy (..))
diff --git a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/ProjectArtifact/EventStream.hs b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/ProjectArtifact/EventStream.hs
--- a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/ProjectArtifact/EventStream.hs
+++ b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/ProjectArtifact/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate ProjectArtifact; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate ProjectArtifact; do not edit.
 module Generated.WorkspaceNominalProof.ProjectArtifact.EventStream
   ( projectArtifactCategory
   , projectArtifactCommandCategory
diff --git a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/ProjectArtifact/Harness.hs b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/ProjectArtifact/Harness.hs
--- a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/ProjectArtifact/Harness.hs
+++ b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/ProjectArtifact/Harness.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate ProjectArtifact; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate ProjectArtifact; do not edit.
 module Generated.WorkspaceNominalProof.ProjectArtifact.Harness (harnessAssertions) where
 
 import Generated.WorkspaceNominalProof.ProjectArtifact.Domain
diff --git a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/ProjectArtifact/Projection.hs b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/ProjectArtifact/Projection.hs
--- a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/ProjectArtifact/Projection.hs
+++ b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/ProjectArtifact/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate ProjectArtifact; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate ProjectArtifact; do not edit.
 module Generated.WorkspaceNominalProof.ProjectArtifact.Projection () where
 
 -- No projection declarations are present; this module keeps the generated manifest inventory total.
diff --git a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/ProjectArtifact/Transducer.hs b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/ProjectArtifact/Transducer.hs
--- a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/ProjectArtifact/Transducer.hs
+++ b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/ProjectArtifact/Transducer.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE OverloadedLabels #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from aggregate ProjectArtifact; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from aggregate ProjectArtifact; do not edit.
 module Generated.WorkspaceNominalProof.ProjectArtifact.Transducer
   ( projectArtifactTransducer
   , projectArtifactFoldFingerprint
diff --git a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/ReplayAudit.hs b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/ReplayAudit.hs
--- a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/ReplayAudit.hs
+++ b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/ReplayAudit.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context workspace-nominal-proof replay-audit assembly; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context workspace-nominal-proof replay-audit assembly; do not edit.
 --
 -- Deployment contract:
 --   * replay-neutral diff: no data audit is required;
diff --git a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Structural/NominalLeaves.hs b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Structural/NominalLeaves.hs
--- a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Structural/NominalLeaves.hs
+++ b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Structural/NominalLeaves.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context workspace-nominal-proof structural nominal leaves; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context workspace-nominal-proof structural nominal leaves; do not edit.
 module Generated.WorkspaceNominalProof.Structural.NominalLeaves where
 
 import Data.Aeson (Value (..), withText)
diff --git a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Structural/Shape/ArtifactClaim.hs b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Structural/Shape/ArtifactClaim.hs
--- a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Structural/Shape/ArtifactClaim.hs
+++ b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Structural/Shape/ArtifactClaim.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from mapped structural ArtifactClaim; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from mapped structural ArtifactClaim; do not edit.
 module Generated.WorkspaceNominalProof.Structural.Shape.ArtifactClaim (ArtifactClaimShape (..)) where
 
 import GHC.Generics (Generic)
diff --git a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Structural/Shape/ProjectClaim.hs b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Structural/Shape/ProjectClaim.hs
--- a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Structural/Shape/ProjectClaim.hs
+++ b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Structural/Shape/ProjectClaim.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from mapped structural ProjectClaim; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from mapped structural ProjectClaim; do not edit.
 module Generated.WorkspaceNominalProof.Structural.Shape.ProjectClaim (ProjectClaimShape (..)) where
 
 import GHC.Generics (Generic)
diff --git a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/StructuralConformance.hs b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/StructuralConformance.hs
--- a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/StructuralConformance.hs
+++ b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/StructuralConformance.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context workspace-nominal-proof structural conformance; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context workspace-nominal-proof structural conformance; do not edit.
 module Generated.WorkspaceNominalProof.StructuralConformance
   ( structuralConformanceAssertions
   ) where
diff --git a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/StructuralProjections.hs b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/StructuralProjections.hs
--- a/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/StructuralProjections.hs
+++ b/test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/StructuralProjections.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TypeFamilies #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 6) from context workspace-nominal-proof mapped structural facade; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 6) from context workspace-nominal-proof mapped structural facade; do not edit.
 -- Equality witnesses are emitted for Text, Int, Bool, Natural, and UTCTime.
 -- Nominal ID and enum leaves carry exact canonical-text domains.
 -- Int, Natural, and UTCTime belong to Keiki's ordered subset.
diff --git a/test/conformance/Generated/HospitalCapacity/BehaviorSourceMap.hs b/test/conformance/Generated/HospitalCapacity/BehaviorSourceMap.hs
--- a/test/conformance/Generated/HospitalCapacity/BehaviorSourceMap.hs
+++ b/test/conformance/Generated/HospitalCapacity/BehaviorSourceMap.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context hospital-capacity behavior source map; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context hospital-capacity behavior source map; do not edit.
 module Generated.HospitalCapacity.BehaviorSourceMap
   ( BehaviorSourceLocation (..)
   , behaviorSourceLocation
diff --git a/test/conformance/Generated/HospitalCapacity/Nominals.hs b/test/conformance/Generated/HospitalCapacity/Nominals.hs
--- a/test/conformance/Generated/HospitalCapacity/Nominals.hs
+++ b/test/conformance/Generated/HospitalCapacity/Nominals.hs
@@ -1,6 +1,6 @@
 {-# LANGUAGE DeriveAnyClass #-}
 {-# LANGUAGE TypeFamilies #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context hospital-capacity generated nominal declarations; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context hospital-capacity generated nominal declarations; do not edit.
 module Generated.HospitalCapacity.Nominals
   ( BedType (..)
   , bedTypeText
diff --git a/test/conformance/Generated/HospitalCapacity/Nominals/Internal.hs b/test/conformance/Generated/HospitalCapacity/Nominals/Internal.hs
--- a/test/conformance/Generated/HospitalCapacity/Nominals/Internal.hs
+++ b/test/conformance/Generated/HospitalCapacity/Nominals/Internal.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context hospital-capacity generated nominal ID internals; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context hospital-capacity generated nominal ID internals; do not edit.
 module Generated.HospitalCapacity.Nominals.Internal
   ( CommandId
   , parseCommandId
diff --git a/test/conformance/Generated/HospitalCapacity/ReplayAudit.hs b/test/conformance/Generated/HospitalCapacity/ReplayAudit.hs
--- a/test/conformance/Generated/HospitalCapacity/ReplayAudit.hs
+++ b/test/conformance/Generated/HospitalCapacity/ReplayAudit.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from context hospital-capacity replay-audit assembly; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from context hospital-capacity replay-audit assembly; do not edit.
 --
 -- Deployment contract:
 --   * replay-neutral diff: no data audit is required;
diff --git a/test/conformance/Generated/HospitalCapacity/Reservation/BehaviorContract.hs b/test/conformance/Generated/HospitalCapacity/Reservation/BehaviorContract.hs
--- a/test/conformance/Generated/HospitalCapacity/Reservation/BehaviorContract.hs
+++ b/test/conformance/Generated/HospitalCapacity/Reservation/BehaviorContract.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Reservation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Reservation; do not edit.
 module Generated.HospitalCapacity.Reservation.BehaviorContract
   ( BehaviorKey (..)
   , unBehaviorKey
@@ -14,6 +14,7 @@
   , BehaviorConformanceReport (..)
   , behaviorRequirements
   , behaviorCoverageReport
+  , behaviorObligationReport
   , behaviorConformancePassed
   , behaviorConformancePassedWith
   , renderBehaviorConformanceText
@@ -205,7 +206,18 @@
   ]
 
 behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport
-behaviorCoverageReport witnesses =
+behaviorCoverageReport = coverageReportFor behaviorRequirements
+
+-- | Execute one required obligation and the witnesses carrying its key.
+-- Hole-owned initial harness probes use the consumer's history-backed evidence.
+behaviorObligationReport :: BehaviorKey -> [BehaviorWitness] -> BehaviorConformanceReport
+behaviorObligationReport key witnesses =
+  coverageReportFor
+    [requirement | requirement <- behaviorRequirements, requirement.key == key]
+    [witness | witness <- witnesses, behaviorWitnessKey witness == key]
+
+coverageReportFor :: [BehaviorRequirement] -> [BehaviorWitness] -> BehaviorConformanceReport
+coverageReportFor requirements witnesses =
   BehaviorConformanceReport
     { required = sortedKeys (Map.keys requiredByKey)
     , filled = sortedKeys [key | (key, [witness]) <- Map.toList witnessGroups, Map.member key requiredByKey, not (isPending witness)]
@@ -218,7 +230,7 @@
     , unverified = sortedKeys [requirement.key | (requirement, Right ()) <- executions, not (proofStrength requirement)]
     }
  where
-  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- behaviorRequirements]
+  requiredByKey = Map.fromList [(requirement.key, requirement) | requirement <- requirements]
   witnessGroups = Map.fromListWith (flip (<>)) [(behaviorWitnessKey witness, [witness]) | witness <- witnesses]
   executions =
     [ (requirement, runWitness requirement witness)
diff --git a/test/conformance/Generated/HospitalCapacity/Reservation/Codec.hs b/test/conformance/Generated/HospitalCapacity/Reservation/Codec.hs
--- a/test/conformance/Generated/HospitalCapacity/Reservation/Codec.hs
+++ b/test/conformance/Generated/HospitalCapacity/Reservation/Codec.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Reservation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Reservation; do not edit.
 module Generated.HospitalCapacity.Reservation.Codec (
     reservationCodec,
     parseReservationEvent,
diff --git a/test/conformance/Generated/HospitalCapacity/Reservation/Domain.hs b/test/conformance/Generated/HospitalCapacity/Reservation/Domain.hs
--- a/test/conformance/Generated/HospitalCapacity/Reservation/Domain.hs
+++ b/test/conformance/Generated/HospitalCapacity/Reservation/Domain.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE TemplateHaskell #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Reservation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Reservation; do not edit.
 module Generated.HospitalCapacity.Reservation.Domain where
 
 import Data.Proxy (Proxy (..))
diff --git a/test/conformance/Generated/HospitalCapacity/Reservation/EventStream.hs b/test/conformance/Generated/HospitalCapacity/Reservation/EventStream.hs
--- a/test/conformance/Generated/HospitalCapacity/Reservation/EventStream.hs
+++ b/test/conformance/Generated/HospitalCapacity/Reservation/EventStream.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Reservation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Reservation; do not edit.
 module Generated.HospitalCapacity.Reservation.EventStream
   ( reservationCategory
   , reservationCommandCategory
diff --git a/test/conformance/Generated/HospitalCapacity/Reservation/Harness.hs b/test/conformance/Generated/HospitalCapacity/Reservation/Harness.hs
--- a/test/conformance/Generated/HospitalCapacity/Reservation/Harness.hs
+++ b/test/conformance/Generated/HospitalCapacity/Reservation/Harness.hs
@@ -1,5 +1,5 @@
 {-# LANGUAGE OverloadedLabels #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Reservation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Reservation; do not edit.
 module Generated.HospitalCapacity.Reservation.Harness (harnessAssertions) where
 
 import Generated.HospitalCapacity.Reservation.Domain
diff --git a/test/conformance/Generated/HospitalCapacity/Reservation/Projection.hs b/test/conformance/Generated/HospitalCapacity/Reservation/Projection.hs
--- a/test/conformance/Generated/HospitalCapacity/Reservation/Projection.hs
+++ b/test/conformance/Generated/HospitalCapacity/Reservation/Projection.hs
@@ -1,4 +1,4 @@
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Reservation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Reservation; do not edit.
 module Generated.HospitalCapacity.Reservation.Projection
   ( transferDecisionsProjection
   , transferDecisionsStatusFor
diff --git a/test/conformance/Generated/HospitalCapacity/Reservation/Transducer.hs b/test/conformance/Generated/HospitalCapacity/Reservation/Transducer.hs
--- a/test/conformance/Generated/HospitalCapacity/Reservation/Transducer.hs
+++ b/test/conformance/Generated/HospitalCapacity/Reservation/Transducer.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE OverloadedLabels #-}
 {-# LANGUAGE QualifiedDo #-}
--- @generated by keiro-dsl 0.20.0.0 (language keiro-dsl 4) from aggregate Reservation; do not edit.
+-- @generated by keiro-dsl 0.21.0.0 (language keiro-dsl 4) from aggregate Reservation; do not edit.
 module Generated.HospitalCapacity.Reservation.Transducer
   ( reservationTransducer
   , reservationFoldFingerprint
diff --git a/test/fixtures/contract-list-fields-admission-change.keiro b/test/fixtures/contract-list-fields-admission-change.keiro
new file mode 100644
--- /dev/null
+++ b/test/fixtures/contract-list-fields-admission-change.keiro
@@ -0,0 +1,32 @@
+language keiro-dsl 6
+context contract-list-fields
+
+id TemplateId prefix=template domain=typeid-v5-or-v7
+
+id ClaimId prefix=claim using {
+  haskell package=keiro-dsl module=Conformance.ContractListFields.Domain type=ClaimId
+  binding = "Conformance.ContractListFields.Bindings.claimIdBinding"
+  binding-version = "1"
+  canonical-type = "conformance.contract-list-fields.ClaimId.v1"
+  fixtures = "Conformance.ContractListFields.Bindings.claimIdFixtures"
+}
+
+contract templates {
+  schemaVersion 1
+  discriminator messageType
+
+  topic templateEvents "templates.events"
+
+  event TemplatesReassigned on templateEvents {
+    typeId: TemplateId
+    templateIds: List TemplateId
+    claimIds: List ClaimId
+    legacyTemplateIds: List typeid "template"
+    labels: List text
+    positions: List int
+  }
+
+  event Index on templateEvents {
+    offsets: List int
+  }
+}
diff --git a/test/fixtures/contract-list-fields-element-change.keiro b/test/fixtures/contract-list-fields-element-change.keiro
new file mode 100644
--- /dev/null
+++ b/test/fixtures/contract-list-fields-element-change.keiro
@@ -0,0 +1,32 @@
+language keiro-dsl 6
+context contract-list-fields
+
+id TemplateId prefix=template
+
+id ClaimId prefix=claim using {
+  haskell package=keiro-dsl module=Conformance.ContractListFields.Domain type=ClaimId
+  binding = "Conformance.ContractListFields.Bindings.claimIdBinding"
+  binding-version = "1"
+  canonical-type = "conformance.contract-list-fields.ClaimId.v1"
+  fixtures = "Conformance.ContractListFields.Bindings.claimIdFixtures"
+}
+
+contract templates {
+  schemaVersion 1
+  discriminator messageType
+
+  topic templateEvents "templates.events"
+
+  event TemplatesReassigned on templateEvents {
+    typeId: TemplateId
+    templateIds: List TemplateId
+    claimIds: List ClaimId
+    legacyTemplateIds: List typeid "template"
+    labels: List int
+    positions: List int
+  }
+
+  event Index on templateEvents {
+    offsets: List int
+  }
+}
diff --git a/test/fixtures/contract-list-fields-language5.keiro b/test/fixtures/contract-list-fields-language5.keiro
new file mode 100644
--- /dev/null
+++ b/test/fixtures/contract-list-fields-language5.keiro
@@ -0,0 +1,13 @@
+language keiro-dsl 5
+context contract-list-fields-language5
+
+id TemplateId prefix=template
+
+contract templates {
+  schemaVersion 1
+  discriminator messageType
+  topic templateEvents "templates.events"
+  event TemplatesReassigned on templateEvents {
+    templateIds: List TemplateId
+  }
+}
diff --git a/test/fixtures/contract-list-fields-literal-to-declared.keiro b/test/fixtures/contract-list-fields-literal-to-declared.keiro
new file mode 100644
--- /dev/null
+++ b/test/fixtures/contract-list-fields-literal-to-declared.keiro
@@ -0,0 +1,32 @@
+language keiro-dsl 6
+context contract-list-fields
+
+id TemplateId prefix=template
+
+id ClaimId prefix=claim using {
+  haskell package=keiro-dsl module=Conformance.ContractListFields.Domain type=ClaimId
+  binding = "Conformance.ContractListFields.Bindings.claimIdBinding"
+  binding-version = "1"
+  canonical-type = "conformance.contract-list-fields.ClaimId.v1"
+  fixtures = "Conformance.ContractListFields.Bindings.claimIdFixtures"
+}
+
+contract templates {
+  schemaVersion 1
+  discriminator messageType
+
+  topic templateEvents "templates.events"
+
+  event TemplatesReassigned on templateEvents {
+    typeId: TemplateId
+    templateIds: List TemplateId
+    claimIds: List ClaimId
+    legacyTemplateIds: List TemplateId
+    labels: List text
+    positions: List int
+  }
+
+  event Index on templateEvents {
+    offsets: List int
+  }
+}
diff --git a/test/fixtures/contract-list-fields-prefix-change.keiro b/test/fixtures/contract-list-fields-prefix-change.keiro
new file mode 100644
--- /dev/null
+++ b/test/fixtures/contract-list-fields-prefix-change.keiro
@@ -0,0 +1,32 @@
+language keiro-dsl 6
+context contract-list-fields
+
+id TemplateId prefix=project
+
+id ClaimId prefix=claim using {
+  haskell package=keiro-dsl module=Conformance.ContractListFields.Domain type=ClaimId
+  binding = "Conformance.ContractListFields.Bindings.claimIdBinding"
+  binding-version = "1"
+  canonical-type = "conformance.contract-list-fields.ClaimId.v1"
+  fixtures = "Conformance.ContractListFields.Bindings.claimIdFixtures"
+}
+
+contract templates {
+  schemaVersion 1
+  discriminator messageType
+
+  topic templateEvents "templates.events"
+
+  event TemplatesReassigned on templateEvents {
+    typeId: TemplateId
+    templateIds: List TemplateId
+    claimIds: List ClaimId
+    legacyTemplateIds: List typeid "template"
+    labels: List text
+    positions: List int
+  }
+
+  event Index on templateEvents {
+    offsets: List int
+  }
+}
diff --git a/test/fixtures/contract-list-fields-scalar-shape.keiro b/test/fixtures/contract-list-fields-scalar-shape.keiro
new file mode 100644
--- /dev/null
+++ b/test/fixtures/contract-list-fields-scalar-shape.keiro
@@ -0,0 +1,32 @@
+language keiro-dsl 6
+context contract-list-fields
+
+id TemplateId prefix=template
+
+id ClaimId prefix=claim using {
+  haskell package=keiro-dsl module=Conformance.ContractListFields.Domain type=ClaimId
+  binding = "Conformance.ContractListFields.Bindings.claimIdBinding"
+  binding-version = "1"
+  canonical-type = "conformance.contract-list-fields.ClaimId.v1"
+  fixtures = "Conformance.ContractListFields.Bindings.claimIdFixtures"
+}
+
+contract templates {
+  schemaVersion 1
+  discriminator messageType
+
+  topic templateEvents "templates.events"
+
+  event TemplatesReassigned on templateEvents {
+    typeId: TemplateId
+    templateIds: TemplateId
+    claimIds: List ClaimId
+    legacyTemplateIds: List typeid "template"
+    labels: List text
+    positions: List int
+  }
+
+  event Index on templateEvents {
+    offsets: List int
+  }
+}
diff --git a/test/fixtures/contract-list-fields.keiro b/test/fixtures/contract-list-fields.keiro
new file mode 100644
--- /dev/null
+++ b/test/fixtures/contract-list-fields.keiro
@@ -0,0 +1,32 @@
+language keiro-dsl 6
+context contract-list-fields
+
+id TemplateId prefix=template
+
+id ClaimId prefix=claim using {
+  haskell package=keiro-dsl module=Conformance.ContractListFields.Domain type=ClaimId
+  binding = "Conformance.ContractListFields.Bindings.claimIdBinding"
+  binding-version = "1"
+  canonical-type = "conformance.contract-list-fields.ClaimId.v1"
+  fixtures = "Conformance.ContractListFields.Bindings.claimIdFixtures"
+}
+
+contract templates {
+  schemaVersion 1
+  discriminator messageType
+
+  topic templateEvents "templates.events"
+
+  event TemplatesReassigned on templateEvents {
+    typeId: TemplateId
+    templateIds: List TemplateId
+    claimIds: List ClaimId
+    legacyTemplateIds: List typeid "template"
+    labels: List text
+    positions: List int
+  }
+
+  event Index on templateEvents {
+    offsets: List int
+  }
+}
diff --git a/test/fixtures/history-dependent-holes.keiro b/test/fixtures/history-dependent-holes.keiro
new file mode 100644
--- /dev/null
+++ b/test/fixtures/history-dependent-holes.keiro
@@ -0,0 +1,48 @@
+language keiro-dsl 6
+context history-dependent-holes
+
+mapped opaque PropertyValues {
+  haskell package=keiro-dsl module=Conformance.HistoryDependentHoles.Domain type=PropertyValues
+  codec = "conformance.history-dependent-holes.PropertyValues.json"
+  version = "1"
+  fixtures = "Conformance.HistoryDependentHoles.Bindings.propertyValuesCases"
+  initial = "Conformance.HistoryDependentHoles.Bindings.emptyPropertyValues"
+}
+
+aggregate Assignment
+  regs
+    values PropertyValues = initial
+  states Active
+
+  command SetProperty { key:Text value:Text }
+  command ClearProperty { key:Text }
+  command Touch { note:Text }
+
+  event PropertySet = fields(SetProperty)
+  event PropertyCleared = fields(ClearProperty)
+  event Touched = fields(Touch)
+
+  # Hole-owned: insert key -> value.
+  Active -- SetProperty -->
+    implementation hole
+    emit PropertySet
+    goto Active
+
+  # Hole-owned: the key must already be present; delete it.
+  Active -- ClearProperty -->
+    implementation hole
+    emit PropertyCleared
+    goto Active
+
+  # Generated-owned: keeps the ordinary synthetic probe.
+  Active -- Touch -->
+    emit Touched
+    goto Active
+
+  # Retained history: clears of absent keys appended under a retired rule.
+  replay-only Active -- ClearProperty -->
+    implementation hole
+    emit PropertyCleared
+    goto Active
+
+  wire kind=ctorName fields=camelCase schemaVersion=1
diff --git a/test/fixtures/ir50-removal-new.keiro b/test/fixtures/ir50-removal-new.keiro
new file mode 100644
--- /dev/null
+++ b/test/fixtures/ir50-removal-new.keiro
@@ -0,0 +1,8 @@
+language keiro-dsl 6
+context retirement
+aggregate Example
+  regs
+  states Active
+  command Keep { note:Text }
+  event Kept = fields(Keep)
+  Active -- Keep --> emit Kept ; goto Active
diff --git a/test/fixtures/ir50-removal-old.keiro b/test/fixtures/ir50-removal-old.keiro
new file mode 100644
--- /dev/null
+++ b/test/fixtures/ir50-removal-old.keiro
@@ -0,0 +1,11 @@
+language keiro-dsl 6
+context retirement
+aggregate Example
+  regs
+  states Active Retired
+  command Keep { note:Text }
+  command Retire { note:Text }
+  event Kept = fields(Keep)
+  event RetiredEvent = fields(Retire)
+  Active -- Keep --> emit Kept ; goto Active
+  Active -- Retire --> emit RetiredEvent ; goto Retired
diff --git a/test/fixtures/ir50-removal-replay.json b/test/fixtures/ir50-removal-replay.json
new file mode 100644
--- /dev/null
+++ b/test/fixtures/ir50-removal-replay.json
@@ -0,0 +1,1 @@
+{"verdict":"affected","aggregates":{"Example":{"eventTypes":["Kept","RetiredEvent"],"includeSnapshotStreams":true}}}
diff --git a/test/fixtures/keyword-segments.keiro b/test/fixtures/keyword-segments.keiro
new file mode 100644
--- /dev/null
+++ b/test/fixtures/keyword-segments.keiro
@@ -0,0 +1,55 @@
+language keiro-dsl 6
+context keyword-segments
+
+id SubscriptionId prefix=subscription
+
+target validate_custom_type_table {
+  schema = "billing"
+  table = "validate_custom_type"
+  reset = clear
+}
+
+rebuild-group validate_custom_type_rebuild {
+  targets = [ validate_custom_type_table ]
+  order = [ validate_custom_type_table ]
+}
+
+projection-owner validate_custom_type_writer {
+  source = all
+  delivery = subscription
+  group = validate_custom_type_rebuild
+  targets = [ validate_custom_type_table ]
+  order = 10
+  subscription = "validate-custom-type-writer"
+  dedup = "validate-custom-type-writer-v1"
+  checkpoint-on-missing = from-beginning
+  replay = explicit
+}
+
+readmodel validate_custom_type {
+  columns {}
+  query input = SubscriptionId
+  query result = List SubscriptionId
+  version = 1
+  shape = "fnv1a:3c07a19c552c3547"
+  freshness = wait-for-head entire-log
+  group = validate_custom_type_rebuild
+  targets = [ validate_custom_type_table ]
+}
+
+workqueue job_type {
+  queue logical = "billing.job_type"
+  derive physical = "billing_job_type"
+         dlq = "billing_job_type_dlq"
+         table = "pgmq.q_billing_job_type"
+  payload JobTypePayload {
+    subscriptionId -> "subscription_id" : SubscriptionId
+  }
+  retry maxRetries = 3 delay = 1s dlq = on
+  disposition {
+    storeFailure -> retry 1s
+    commandRejected -> deadLetter
+    decodeFailure -> deadLetter
+    onCodecReject -> deadLetter
+  }
+}
diff --git a/test/fixtures/mapped-register-construction-lifts.golden b/test/fixtures/mapped-register-construction-lifts.golden
new file mode 100644
--- /dev/null
+++ b/test/fixtures/mapped-register-construction-lifts.golden
@@ -0,0 +1,1 @@
+mapped-write-lifts=[["dormantSince","MaybeTime","Time","Conformance.MappedRegisterConstruction.Lift.atTime","λ:\"|\n"],["secondSince","MaybeTime","Time","Conformance.MappedRegisterConstruction.Lift.atTime","λ:\"|\n"]]
diff --git a/test/fixtures/mapped-register-construction.keiro b/test/fixtures/mapped-register-construction.keiro
new file mode 100644
--- /dev/null
+++ b/test/fixtures/mapped-register-construction.keiro
@@ -0,0 +1,76 @@
+language keiro-dsl 6
+context mapped-register-construction
+
+mapped opaque MaybeTime {
+  haskell package=keiro-dsl module=Conformance.MappedRegisterConstruction.Domain type=MaybeTime
+  codec = "conformance.MaybeTime.json"
+  version = "1"
+  fixtures = "Conformance.MappedRegisterConstruction.Bindings.maybeTimeCases"
+  initial = "Conformance.MappedRegisterConstruction.Bindings.noTime"
+  write-lift from Time {
+    function = "Conformance.MappedRegisterConstruction.Lift.atTime"
+    version = "1"
+    fixtures = "Conformance.MappedRegisterConstruction.Lift.atTimeCases"
+  }
+}
+
+aggregate Lifecycle
+  regs
+    dormantSince MaybeTime = initial
+    automatic Bool = False
+  states Empty Awake Dormant Closed
+
+  command Create { automatic:Bool }
+  command Mark { markedAt:Time }
+  command Ping { markedAt:Time }
+  command Awaken { awakenedAt:Time }
+  command Close { closedAt:Time }
+  command Reopen { reopenedAt:Time }
+  event Created = fields(Create)
+  event Marked = fields(Mark)
+  event Pinged = fields(Ping)
+  event Awakened = fields(Awaken)
+  event ClosedEvent = fields(Close)
+  event Reopened = fields(Reopen)
+
+  Empty -- Create -->
+    write dormantSince := initial
+    write automatic := cmd.automatic
+    emit Created
+    goto Awake
+
+  Awake -- Mark -->
+    write dormantSince := mapped(cmd.markedAt)
+    emit Marked
+    goto Dormant
+
+  Dormant -- Ping -->
+    guard reg.automatic == true
+    write dormantSince := initial
+    emit Pinged
+    goto Awake
+
+  Dormant -- Ping -->
+    guard reg.automatic == false
+    write dormantSince := mapped(cmd.markedAt)
+    emit Pinged
+    goto Dormant
+
+  Dormant -- Awaken -->
+    write dormantSince := initial
+    emit Awakened
+    goto Awake
+
+  Awake -- Close -->
+    emit ClosedEvent
+    goto Closed
+
+  Closed -- Reopen -->
+    write dormantSince := initial
+    emit Reopened
+    goto Awake
+
+  snapshot every 1
+    state-codec version=1 shape-hash="mapped-register-construction-v1"
+
+  wire kind=ctorName fields=camelCase schemaVersion=1
diff --git a/test/haskell-name/Main.hs b/test/haskell-name/Main.hs
--- a/test/haskell-name/Main.hs
+++ b/test/haskell-name/Main.hs
@@ -26,6 +26,24 @@
       deriveHaskellName LogicalIdentifier (logicalSite "Module")
         `shouldBe` Left (ReservedGeneratedOccurrence (logicalSite "Module") "module")
 
+    it "derives a reserved word in an UpperCamel-only position" $ do
+      fmap renderUpperCamelName (deriveUpperCamelName LogicalIdentifier (logicalSite "type"))
+        `shouldBe` Right "Type"
+      deriveHaskellName LogicalIdentifier (logicalSite "type")
+        `shouldBe` Left (ReservedGeneratedOccurrence (logicalSite "type") "type")
+
+    it "agrees with whole-name derivation for valid compound names" $ do
+      let site = logicalSite "validate_custom_type"
+      fmap renderUpperCamelName (deriveUpperCamelName LogicalIdentifier site)
+        `shouldBe` Right "ValidateCustomType"
+      fmap (renderUpperCamelName . (.upperCamel)) (deriveHaskellName LogicalIdentifier site)
+        `shouldBe` Right "ValidateCustomType"
+
+    it "keeps invalid logical separators invalid for UpperCamel-only names" $ do
+      mapM_
+        (\raw -> deriveUpperCamelName LogicalIdentifier (logicalSite raw) `shouldSatisfy` isLeft)
+        ["foo__bar", "_foo", "foo-bar"]
+
     it "admits contextual words accepted by the generated-language contract" $
       mapM_
         (\word -> checkedLowerOccurrence (logicalSite word) word `shouldSatisfy` isRight)
diff --git a/test/history-dependent-holes-mutation-test.sh b/test/history-dependent-holes-mutation-test.sh
new file mode 100644
--- /dev/null
+++ b/test/history-dependent-holes-mutation-test.sh
@@ -0,0 +1,85 @@
+#!/usr/bin/env bash
+# BUG-10: each invalid witness must fail the initial-hole harness by name.
+set -euo pipefail
+
+WITNESSES=keiro-dsl/test/conformance-history-dependent-holes/HistoryDependentHoles/Assignment/BehaviorHoles.hs
+HARNESS=keiro-dsl/test/conformance-history-dependent-holes/Generated/HistoryDependentHoles/Assignment/Harness.hs
+BACKUP_DIR="$(mktemp -d "${TMPDIR:-/tmp}/keiro-initial-hole.XXXXXX")"
+cp "$WITNESSES" "$BACKUP_DIR/BehaviorHoles.hs"
+cleanup() {
+  cp "$BACKUP_DIR/BehaviorHoles.hs" "$WITNESSES"
+  rm -f "$BACKUP_DIR/BehaviorHoles.hs" "$BACKUP_DIR/mutation.log"
+  rmdir "$BACKUP_DIR"
+}
+trap cleanup EXIT
+trap 'exit 130' INT
+trap 'exit 143' TERM
+
+run_fixture() {
+  cabal test -v0 keiro-dsl-conformance-history-dependent-holes --test-show-details=direct
+}
+
+run_fixture >"$BACKUP_DIR/mutation.log" 2>&1
+grep -Fq 'case step assignmentTransducer (AssignmentActive, initialAssignmentRegs) (Touch' "$HARNESS"
+echo 'ok: baseline and generated-owned Touch probe'
+
+mutate() {
+  python3 - "$BACKUP_DIR/BehaviorHoles.hs" "$WITNESSES" "$1" <<'PY'
+from pathlib import Path
+import sys
+source, target, mutation = sys.argv[1:]
+text = Path(source).read_text()
+live = 'behavior-v1-fe7277b756f0ff4b'
+replay = 'behavior-v1-afe574346545beaa'
+set_key = 'behavior-v1-73b7455c36956c2b'
+line = next(row for row in text.splitlines(keepends=True) if live in row)
+if mutation == 'missing':
+    text = text.replace(line, '')
+elif mutation == 'duplicate':
+    text = text.replace(line, line + line)
+elif mutation == 'pending':
+    text = text.replace(line, '  , Pending (BehaviorKey "' + live + '")\n')
+elif mutation == 'stale':
+    text = text.replace(live, live[:-1] + 'c')
+elif mutation in ('replay sibling', 'wrong edge'):
+    other = replay if mutation == 'replay sibling' else set_key
+    text = text.replace(live, 'fe7277b756f0ff4b-KEY').replace(other, live).replace('fe7277b756f0ff4b-KEY', other)
+elif mutation == 'inadequate history':
+    text = text.replace(line, line.replace('[PropertySet (PropertySetData "colour" "blue")]', '[]'))
+elif mutation == 'lying emissions':
+    text = text.replace(line, line.replace('PropertyClearedData "colour"', 'PropertyClearedData "other"'))
+else:
+    raise ValueError(mutation)
+assert text != Path(source).read_text(), mutation
+Path(target).write_text(text)
+PY
+}
+
+expect_red() {
+  local mutation="$1" row="$2" diagnostic="${3:-}"
+  mutate "$mutation"
+  local status=0
+  run_fixture >"$BACKUP_DIR/mutation.log" 2>&1 || status=$?
+  if [[ "$status" == 0 ]] ||
+     ! grep -Fq 'FAIL  accepts ClearProperty from AssignmentActive' "$BACKUP_DIR/mutation.log" ||
+     ! grep -Fq "FAIL  forward/replay equality: ClearProperty from AssignmentActive -- hole witness $row" "$BACKUP_DIR/mutation.log" ||
+     { [[ -n "$diagnostic" ]] && ! grep -Fq "$diagnostic" "$BACKUP_DIR/mutation.log"; }; then
+    cat "$BACKUP_DIR/mutation.log"
+    echo "FAIL: $mutation did not fail through the expected harness rows ($row, $diagnostic)"
+    exit 1
+  fi
+  cp "$BACKUP_DIR/BehaviorHoles.hs" "$WITNESSES"
+  echo "ok: $mutation -> hole witness $row ${diagnostic}"
+}
+
+expect_red missing filled
+expect_red duplicate filled
+expect_red pending filled
+expect_red stale filled 'stale: 1'
+expect_red 'replay sibling' verified '[witness-kind]'
+expect_red 'inadequate history' verified '[unexpected-rejection]'
+expect_red 'lying emissions' verified '[event-value-mismatch]'
+expect_red 'wrong edge' verified '[command-mismatch]'
+run_fixture >"$BACKUP_DIR/mutation.log" 2>&1
+git diff --check
+echo 'PASS: all eight initial-hole mutations failed by name; witnesses restored'
diff --git a/test/mapped-register-construction-mutation-test.sh b/test/mapped-register-construction-mutation-test.sh
new file mode 100644
--- /dev/null
+++ b/test/mapped-register-construction-mutation-test.sh
@@ -0,0 +1,118 @@
+#!/usr/bin/env bash
+set -euo pipefail
+cd "$(git rev-parse --show-toplevel)"
+
+fixture="keiro-dsl/test/fixtures/mapped-register-construction.keiro"
+transducer="keiro-dsl/test/conformance-mapped-register-construction/Generated/MappedRegisterConstruction/Lifecycle/Transducer.hs"
+lift="keiro-dsl/test/conformance-mapped-register-construction/Conformance/MappedRegisterConstruction/Lift.hs"
+backup_dir="$(mktemp -d "${TMPDIR:-/tmp}/keiro-mapped-register-mutation.XXXXXX")"
+case "$backup_dir" in *keiro-mapped-register-mutation.*) ;; *) exit 1 ;; esac
+cp "$fixture" "$backup_dir/fixture"
+cp "$transducer" "$backup_dir/transducer"
+cp "$lift" "$backup_dir/lift"
+restore() {
+  cp "$backup_dir/fixture" "$fixture"
+  cp "$backup_dir/transducer" "$transducer"
+  cp "$backup_dir/lift" "$lift"
+}
+cleanup() {
+  restore
+  rm -f "$backup_dir/fixture" "$backup_dir/transducer" "$backup_dir/lift" "$backup_dir/red.log"
+  rmdir "$backup_dir"
+}
+trap cleanup EXIT
+trap 'exit 130' INT
+trap 'exit 143' TERM
+baseline_digest="$(shasum -a 256 "$fixture" "$transducer" "$lift")"
+
+run_green() {
+  cabal test -v0 keiro-dsl-conformance-mapped-register-construction --test-show-details=direct
+}
+run_check() {
+  cabal run -v0 keiro-dsl -- check "$fixture"
+}
+expect_red() {
+  local label="$1" expected="$2"
+  shift 2
+  set +e
+  "$@" >"$backup_dir/red.log" 2>&1
+  local status=$?
+  set -e
+  if [[ "$status" -eq 0 ]] || ! rg -F "$expected" "$backup_dir/red.log" >/dev/null; then
+    cat "$backup_dir/red.log"
+    echo "FAIL: mutation did not fail its named gate: $label ($expected)"
+    exit 1
+  fi
+  echo "PASS: mutation fails its named gate: $label"
+  restore
+}
+mutate() {
+  python3 - "$1" "$fixture" "$transducer" "$lift" <<'PY'
+import pathlib, re, sys
+mode, fixture, transducer, lift = sys.argv[1:]
+p = pathlib.Path(lift if mode == 'body' else fixture if mode in ['projection', 'arithmetic-projection', 'ownership'] else transducer)
+s = p.read_text()
+if mode == 'body':
+    s = s.replace('atTime value = MaybeTime (Just value)', 'atTime _value = MaybeTime Nothing')
+elif mode == 'identity':
+    s, count = re.subn(r'lifecycleFoldFingerprint = "[0-9a-f]{32}"', 'lifecycleFoldFingerprint = "omitted-lift-provenance"', s)
+    assert count == 1
+elif mode == 'recovery':
+    s = s.replace('{ markedAt = d.markedAt', '{ markedAt = K.opaqueLit (read "1970-01-01 00:00:00 UTC")', 1)
+elif mode == 'guard':
+    s = s.replace('        B.requireGuard $\n          B.reg @"automatic" .== K.lit True\n', '', 1)
+elif mode == 'slot':
+    s = s.replace('K.TApp1 Lift.atTime (d.markedAt)', 'K.opaqueLit Bindings.noTime', 1)
+elif mode == 'output':
+    s = s.replace('{ markedAt = d.markedAt', '{ markedAt = K.TApp1 id (d.markedAt)', 1)
+elif mode == 'ownership':
+    s = s.replace('write dormantSince := mapped(cmd.markedAt)', 'implementation hole\n    write dormantSince := mapped(cmd.markedAt)', 1)
+else:
+    declaration = '''mapped structural record ScalarCarrier {
+  haskell package=keiro-dsl module=Conformance.MappedRegisterConstruction.Domain type=ScalarCarrier
+  binding = "Conformance.MappedRegisterConstruction.Bindings.scalarBinding"
+  binding-version = "1"
+  canonical-type = "conformance.ScalarCarrier.v1"
+  fixtures = "Conformance.MappedRegisterConstruction.Bindings.scalarCases"
+  initial = "Conformance.MappedRegisterConstruction.Bindings.scalarInitial"
+  wire object constructor=ScalarCarrier unknown-fields=reject {
+    observed as "observed" : Time required
+    count as "count" : Integer required
+  }
+}
+
+'''
+    s = s.replace('aggregate Lifecycle', declaration + 'aggregate Lifecycle')
+    s = s.replace('    automatic Bool = False', '    automatic Bool = False\n    carrier ScalarCarrier = initial')
+    if mode == 'projection':
+        s = s.replace('mapped(cmd.markedAt)', 'mapped(reg.carrier.observed)')
+    else:
+        s = s.replace('write-lift from Time', 'write-lift from Integer')
+        s = s.replace('mapped(cmd.markedAt)', 'mapped(reg.carrier.count + 1)')
+assert s != p.read_text(), mode
+p.write_text(s)
+PY
+}
+
+run_green
+mutate body
+expect_red "lift contradicts declared cases" "FAIL  structural/write-lift case: MaybeTime/epoch" run_green
+mutate identity
+expect_red "lift provenance omitted from generated identity" "FAIL  lift version participates in fold and snapshot identity" run_green
+mutate recovery
+expect_red "head event no longer recovers the command" "FAIL  validateTransducer is empty" run_green
+mutate guard
+expect_red "generated sibling guard bypassed" "FAIL  complementary guard verification remains disjoint" run_green
+mutate slot
+expect_red "generated mapped slot bypassed" "FAIL  generated mapped lift writes the command timestamp" run_green
+mutate output
+expect_red "lift moved into event output" "FAIL  mapped lift occurs only inside declared register slots" run_green
+mutate projection
+expect_red "mapped projection wrapped inside a lift" "AggregateExpressionMappedLiftProjectionUnsupported" run_check
+mutate arithmetic-projection
+expect_red "projection hidden under arithmetic" "AggregateExpressionMappedLiftProjectionUnsupported" run_check
+mutate ownership
+expect_red "Hole combined with a declared write" "AggregateTransitionOwnershipConflict" run_check
+[[ "$(shasum -a 256 "$fixture" "$transducer" "$lift")" == "$baseline_digest" ]]
+run_green
+cabal test -v0 keiro-dsl-test --test-options='--match "mapped register construction"' --test-show-details=direct
