packages feed

keiro-dsl 0.17.0.0 → 0.18.0.0

raw patch · 828 files changed

+19243/−2277 lines, 828 filesdep ~aesondep ~bytestringdep ~containersPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: aeson, bytestring, containers, hasql-transaction, keiro, keiro-core, kiroku-store, time

API changes (from Hackage documentation)

- Keiro.Dsl.NominalType: EnforcedTypeIdV7TextDomain :: !Text -> !Text -> NominalEqualityDomain
+ Keiro.Dsl.Grammar: Base16BytesV1 :: RefinedWirePolicy
+ Keiro.Dsl.Grammar: MappedRefined :: !Name -> !Maybe HaskellSource -> !Maybe Text -> !Maybe Text -> !Maybe Text -> !Maybe Text -> !Maybe Text -> !RefinedWirePolicy -> !Loc -> MappedDecl
+ Keiro.Dsl.Grammar: ShapeBare :: !TypeExpr -> MappedShape
+ Keiro.Dsl.Grammar: ShapeRefined :: !RefinedWirePolicy -> MappedShape
+ Keiro.Dsl.Grammar: TDay :: TypeExpr
+ Keiro.Dsl.Grammar: TTextSet :: TypeExpr
+ Keiro.Dsl.Grammar: TypeIdV5OrV7 :: IdAdmission
+ Keiro.Dsl.Grammar: TypeIdV7 :: IdAdmission
+ Keiro.Dsl.Grammar: [admission] :: IdDecl -> !IdAdmission
+ Keiro.Dsl.Grammar: [mrBindingVersion] :: MappedDecl -> !Maybe Text
+ Keiro.Dsl.Grammar: [mrBinding] :: MappedDecl -> !Maybe Text
+ Keiro.Dsl.Grammar: [mrCanonical] :: MappedDecl -> !Maybe Text
+ Keiro.Dsl.Grammar: [mrFixtures] :: MappedDecl -> !Maybe Text
+ Keiro.Dsl.Grammar: [mrHaskell] :: MappedDecl -> !Maybe HaskellSource
+ Keiro.Dsl.Grammar: [mrInitial] :: MappedDecl -> !Maybe Text
+ Keiro.Dsl.Grammar: [mrLoc] :: MappedDecl -> !Loc
+ Keiro.Dsl.Grammar: [mrName] :: MappedDecl -> !Name
+ Keiro.Dsl.Grammar: [mrPolicy] :: MappedDecl -> !RefinedWirePolicy
+ Keiro.Dsl.Grammar: data IdAdmission
+ Keiro.Dsl.Grammar: data RefinedWirePolicy
+ Keiro.Dsl.Grammar: instance GHC.Classes.Eq Keiro.Dsl.Grammar.RefinedWirePolicy
+ Keiro.Dsl.Grammar: instance GHC.Classes.Ord Keiro.Dsl.Grammar.RefinedWirePolicy
+ Keiro.Dsl.Grammar: instance GHC.Internal.Generics.Generic Keiro.Dsl.Grammar.RefinedWirePolicy
+ Keiro.Dsl.Grammar: instance GHC.Internal.Show.Show Keiro.Dsl.Grammar.RefinedWirePolicy
+ Keiro.Dsl.IdDomain: IdDomainVariantNotRfc4122 :: !Char -> IdDomainFailure
+ Keiro.Dsl.IdDomain: IdDomainVersionNotAdmitted :: !Char -> IdDomainFailure
+ Keiro.Dsl.IdDomain: TypeIdV5OrV7 :: IdAdmission
+ Keiro.Dsl.IdDomain: TypeIdV7 :: IdAdmission
+ Keiro.Dsl.IdDomain: [idDomainAdmission] :: IdDomainContract -> !IdAdmission
+ Keiro.Dsl.IdDomain: contractIdDomainContractForAdmission :: EffectiveLanguageContract -> IdAdmission -> Text -> Maybe IdDomainContract
+ Keiro.Dsl.IdDomain: data IdAdmission
+ Keiro.Dsl.IdDomain: idDomainContractForAdmission :: EffectiveLanguageContract -> IdAdmission -> Text -> Maybe IdDomainContract
+ Keiro.Dsl.IdDomain: idDomainContractForDeclaration :: EffectiveLanguageContract -> IdDecl -> Maybe IdDomainContract
+ Keiro.Dsl.IdDomain: typeIdV5OrV7Domain :: Text -> IdDomainContract
+ Keiro.Dsl.IdDomain: typeIdV7Domain :: Text -> IdDomainContract
+ Keiro.Dsl.IdDomain: v5OrV7IdDomainVersion :: Text
+ Keiro.Dsl.LanguageVersion: BareStructuralMappingSyntax :: LanguageFeature
+ Keiro.Dsl.LanguageVersion: BareStructuralMappings :: RuntimeCapability
+ Keiro.Dsl.LanguageVersion: CalendarDayMappings :: RuntimeCapability
+ Keiro.Dsl.LanguageVersion: CalendarDaySyntax :: LanguageFeature
+ Keiro.Dsl.LanguageVersion: ExplicitIdAdmissionDomainSyntax :: LanguageFeature
+ Keiro.Dsl.LanguageVersion: ExplicitIdAdmissionDomains :: RuntimeCapability
+ Keiro.Dsl.LanguageVersion: RefinedBase16Mappings :: RuntimeCapability
+ Keiro.Dsl.LanguageVersion: RefinedBase16Syntax :: LanguageFeature
+ Keiro.Dsl.LanguageVersion: TextSetMappings :: RuntimeCapability
+ Keiro.Dsl.LanguageVersion: TextSetSyntax :: LanguageFeature
+ Keiro.Dsl.NominalType: EnforcedTypeIdTextDomain :: !Text -> !Text -> NominalEqualityDomain
+ Keiro.Dsl.Scaffold: scaffoldProcessForService :: Context -> CheckedService -> ProcessNode -> [ScaffoldModule]
+ Keiro.Dsl.TypeGraph: RBare :: !ResolvedTypeExpr -> ResolvedMappedShape
+ Keiro.Dsl.TypeGraph: RDay :: ResolvedTypeExpr
+ Keiro.Dsl.TypeGraph: RRefined :: !RefinedWirePolicy -> ResolvedMappedShape
+ Keiro.Dsl.TypeGraph: RTextSet :: ResolvedTypeExpr
+ Keiro.Dsl.TypeGraph: [onBare] :: MappedShapeAlgebra a -> ResolvedTypeExpr -> a
+ Keiro.Dsl.TypeGraph: [onDay] :: TypeExprAlgebra a -> a
+ Keiro.Dsl.TypeGraph: [onRefined] :: MappedShapeAlgebra a -> RefinedWirePolicy -> a
+ Keiro.Dsl.TypeGraph: [onTextSet] :: TypeExprAlgebra a -> a
+ Keiro.Dsl.TypeGraph: wireFingerprintForBase16BytesPolicy :: Text -> TypeGraph -> Name -> Text
+ Keiro.Dsl.TypeGraph: wireFingerprintForCalendarDayPolicy :: Text -> TypeGraph -> Name -> Text
+ Keiro.Dsl.TypeGraph: wireFingerprintForTextSetPolicy :: Text -> TypeGraph -> Name -> Text
+ Keiro.Dsl.Workspace: instance Keiro.Dsl.Workspace.HasLocs Keiro.Codec.IdDomain.IdAdmission
+ Keiro.Dsl.Workspace: instance Keiro.Dsl.Workspace.HasLocs Keiro.Dsl.Grammar.RefinedWirePolicy
- Keiro.Dsl.Grammar: IdDecl :: !Name -> !Text -> !Maybe NominalBindingDecl -> !Loc -> IdDecl
+ Keiro.Dsl.Grammar: IdDecl :: !Name -> !Text -> !IdAdmission -> !Maybe NominalBindingDecl -> !Loc -> IdDecl
- Keiro.Dsl.IdDomain: IdDomainContract :: !Text -> !Text -> !Char -> !Int -> !Int -> !IdNormalization -> !Text -> IdDomainContract
+ Keiro.Dsl.IdDomain: IdDomainContract :: !IdAdmission -> !Text -> !Text -> !Char -> !Int -> !Int -> !IdNormalization -> !Text -> IdDomainContract
- Keiro.Dsl.NominalType: IdRepresentation :: !Text -> NominalRepresentation
+ Keiro.Dsl.NominalType: IdRepresentation :: !Text -> !IdAdmission -> NominalRepresentation
- Keiro.Dsl.TypeGraph: MappedShapeAlgebra :: (Name -> UnknownFields -> [ResolvedWireField] -> a) -> ([WireEnum] -> a) -> (UnionEncoding -> [ResolvedWireArm] -> a) -> MappedShapeAlgebra a
+ Keiro.Dsl.TypeGraph: MappedShapeAlgebra :: (Name -> UnknownFields -> [ResolvedWireField] -> a) -> ([WireEnum] -> a) -> (UnionEncoding -> [ResolvedWireArm] -> a) -> (ResolvedTypeExpr -> a) -> (RefinedWirePolicy -> a) -> MappedShapeAlgebra a
- Keiro.Dsl.TypeGraph: NominalIdLeaf :: !Text -> NominalLeafKind
+ Keiro.Dsl.TypeGraph: NominalIdLeaf :: !Text -> !IdAdmission -> NominalLeafKind
- Keiro.Dsl.TypeGraph: TypeExprAlgebra :: a -> a -> a -> a -> a -> a -> a -> (a -> a) -> (a -> a) -> (a -> a) -> (NominalLeaf -> a -> a) -> (MappedKey -> a) -> (NominalLeaf -> a) -> TypeExprAlgebra a
+ Keiro.Dsl.TypeGraph: TypeExprAlgebra :: a -> a -> a -> a -> a -> a -> a -> a -> a -> (a -> a) -> (a -> a) -> (a -> a) -> (NominalLeaf -> a -> a) -> (MappedKey -> a) -> (NominalLeaf -> a) -> TypeExprAlgebra a

This diff is very large; some files are shown as “too large to diff”. Download the raw patch for the complete diff.

Files

CHANGELOG.md view
@@ -6,6 +6,62 @@  ## [Unreleased] +## 0.18.0.0 — 2026-09-20++### Breaking Changes++- The public ID declaration and resolved nominal ASTs carry an `IdAdmission`.+  `LanguageFeature` and `RuntimeCapability` gain the Language 6 explicit-ID+  admission constructors. Exhaustive matches and positional construction must+  handle the new fields and constructors.+- The checked value mappings widen the public grammar and resolved ASTs.+  `TypeExpr` gains `TDay` and `TTextSet`; `MappedShape` gains `ShapeBare` and+  `ShapeRefined`; the new `RefinedWirePolicy` type is exported from+  `Keiro.Dsl.Grammar` alongside matching constructors on the resolved type,+  expression, and requirement vocabularies (`RBare`, `RRefined`, `RDay`,+  `RTextSet`, `ExprDay`, `ExprTextSet`, `ReqDay`, `ReqSet`, `ReqByteString`,+  `MappedRefined`, `MCRefinedPolicy`). `LanguageFeature` and+  `RuntimeCapability` each gain one constructor per mapping family. Exhaustive+  matches over any of these types must be extended.++### New Features++- Candidate Language 6 ID declarations accept+  `domain=typeid-v5-or-v7`. The selected domain propagates through direct and+  nested aggregate fields, structural and keyed-map codecs, workqueues,+  read-model query types, router identities, and declared public-contract+  fields. Omitting the option keeps the released TypeID-v7 behavior.+- Admission changes now alter direct and nested fold/replay identity, raise a+  direction-specific `IdDomainContractChanged` finding, and are always reported+  replay-affected. The generated conformance corpus includes committed UUIDv5+  and UUIDv7 history with serialized forward/replay equality.+- Candidate Language 6 adds four checked value mapping families. Each lowers to+  a frozen `keiro-core` wire policy rather than a consumer validation callback,+  so the schema authority and the binding stay total:+  - **Bare containers** — a `mapped structural value` declaration may name a+    container shape directly, as in `wire Optional Text`, `wire List Text`, or+    `wire Map Text Text`. Nullability propagates transitively through nested+    declarations.+  - **Calendar days** — `wire Day`, lowered to `Keiro.Codec.CalendarDay`.+  - **Text sets** — `wire Set Text`, lowered to `Keiro.Codec.TextSet`.+  - **Refined base16 bytes** — the new `mapped refined` declaration with+    `wire base16-bytes`, lowered to `Keiro.Codec.Base16Bytes`.++  Each family reports its own runtime capability, carries generated+  conformance coverage with committed replay history, and is inert for a spec+  that does not use it. Language 6 remains a candidate contract; released+  Language 5 specs are unaffected.+- A root `Optional` mapped event field accepts an omitted key and decodes it+  exactly as an explicit `null`, matching what historical Aeson decoding always+  did for such a field. Non-optional mapped roots remain strict and still reject+  omission.++### Other Changes++- Every generated artifact is restamped with the `0.18.0.0` provenance banner.+  The stamp is recognized for any released version, so a consumer's existing+  generated tree keeps compiling and only changes on its next scaffold run.+ ## 0.17.0.0 — 2026-09-17  ### Breaking Changes
generated-haskell-edition-idiomatic-v2.md view

file too large to diff

keiro-dsl.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.0 name: keiro-dsl-version: 0.17.0.0+version: 0.18.0.0 synopsis: Typed specification toolchain for keiro services description:   keiro-dsl is the toolchain over a typed `.keiro` specification of a keiro@@ -189,7 +189,7 @@     directory >=1.3 && <1.4,     filepath >=1.4 && <1.6,     keiki >=0.9 && <0.10,-    keiro-core ^>=0.17.0.0,+    keiro-core ^>=0.18.0.0,     keiro-dsl:generated-haskell-language-internal,     megaparsec >=9.6 && <9.9,     mmzk-typeid >=0.7 && <0.8,@@ -237,12 +237,13 @@     filepath >=1.4 && <1.6,     hspec >=2.11,     keiki >=0.9 && <0.10,-    keiro-core ^>=0.17.0.0,+    keiro-core ^>=0.18.0.0,     keiro-dsl,     keiro-dsl:generated-haskell-language-internal,     mmzk-typeid >=0.7 && <0.8,     process >=1.6 && <1.7,     text >=2.1 && <2.2,+    time >=1.12 && <1.15,  test-suite keiro-dsl-import-planning-test   import: warnings, shared@@ -289,7 +290,7 @@   main-is: Main.hs   build-depends:     base >=4.21 && <5,-    keiro ^>=0.17.0.0,+    keiro ^>=0.18.0.0,     keiro-dsl,     shibuya-core ^>=0.9.0.0,     text >=2.1 && <2.2,@@ -659,6 +660,228 @@     shibuya-core,     text >=2.1 && <2.2, +-- Plan 290 / IR-42: checked named Optional, List, and text-keyed Map values+-- retain their direct JSON forms across aggregate, queue, and query surfaces.+test-suite keiro-dsl-conformance-bare-containers+  import: warnings, generated-output+  type: exitcode-stdio-1.0+  default-extensions: OverloadedLabels+  hs-source-dirs: test/conformance-bare-containers+  main-is: Main.hs+  other-modules:+    BareContainers.BareLookup.ReadModelHoles+    BareContainers.BareStore.BehaviorHoles+    BareContainers.ProjectionCatalog.ProjectionCatalogHoles+    Conformance.BareContainers.Bindings+    Conformance.BareContainers.Domain+    Conformance.BareContainers.Historical+    Generated.BareContainers.BareJobs.Queue+    Generated.BareContainers.BareJobs.QueueCodec+    Generated.BareContainers.BareJobs.QueuePolicy+    Generated.BareContainers.BareLookup.QueryContract+    Generated.BareContainers.BareLookup.ReadModel+    Generated.BareContainers.BareLookup.ReadModelHarness+    Generated.BareContainers.BareLookup.ReadModelTable+    Generated.BareContainers.BareStore.BehaviorContract+    Generated.BareContainers.BareStore.Codec+    Generated.BareContainers.BareStore.Domain+    Generated.BareContainers.BareStore.EventStream+    Generated.BareContainers.BareStore.Harness+    Generated.BareContainers.BareStore.Projection+    Generated.BareContainers.BareStore.Transducer+    Generated.BareContainers.BehaviorSourceMap+    Generated.BareContainers.Nominals+    Generated.BareContainers.Nominals.Internal+    Generated.BareContainers.ProjectionCatalog+    Generated.BareContainers.ReplayAudit+    Generated.BareContainers.Structural.CodecCompare.MaybeText+    Generated.BareContainers.Structural.NominalLeaves+    Generated.BareContainers.Structural.Shape.BareEnvelope+    Generated.BareContainers.Structural.Shape.MaybeText+    Generated.BareContainers.Structural.Shape.NestedIds+    Generated.BareContainers.Structural.Shape.TextList+    Generated.BareContainers.Structural.Shape.TextMap+    Generated.BareContainers.StructuralConformance++  build-depends:+    aeson >=2.2 && <2.3,+    base >=4.21 && <5,+    containers >=0.6 && <0.8,+    directory >=1.3 && <1.4,+    effectful-core,+    filepath >=1.4 && <1.6,+    hasql-transaction,+    keiki >=0.9 && <0.10,+    keiro,+    keiro-core,+    keiro-dsl,+    keiro-pgmq,+    kiroku-store,+    text >=2.1 && <2.2,++-- Plan 291 / IR-43: frozen full-carrier calendar-day mappings preserve their+-- canonical bytes across aggregate replay, queue, query, and historical codecs.+test-suite keiro-dsl-conformance-calendar-days+  import: warnings, generated-output+  type: exitcode-stdio-1.0+  default-extensions: OverloadedLabels+  hs-source-dirs: test/conformance-calendar-days+  main-is: Main.hs+  other-modules:+    CalendarDays.CalendarLookup.ReadModelHoles+    CalendarDays.CalendarStore.BehaviorHoles+    CalendarDays.ProjectionCatalog.ProjectionCatalogHoles+    Conformance.CalendarDays.Bindings+    Conformance.CalendarDays.Domain+    Conformance.CalendarDays.Historical+    Generated.CalendarDays.BehaviorSourceMap+    Generated.CalendarDays.CalendarJobs.Queue+    Generated.CalendarDays.CalendarJobs.QueueCodec+    Generated.CalendarDays.CalendarJobs.QueuePolicy+    Generated.CalendarDays.CalendarLookup.QueryContract+    Generated.CalendarDays.CalendarLookup.ReadModel+    Generated.CalendarDays.CalendarLookup.ReadModelHarness+    Generated.CalendarDays.CalendarLookup.ReadModelTable+    Generated.CalendarDays.CalendarStore.BehaviorContract+    Generated.CalendarDays.CalendarStore.Codec+    Generated.CalendarDays.CalendarStore.Domain+    Generated.CalendarDays.CalendarStore.EventStream+    Generated.CalendarDays.CalendarStore.Harness+    Generated.CalendarDays.CalendarStore.Projection+    Generated.CalendarDays.CalendarStore.Transducer+    Generated.CalendarDays.ProjectionCatalog+    Generated.CalendarDays.ReplayAudit+    Generated.CalendarDays.Structural.CodecCompare.MaybeLocalDay+    Generated.CalendarDays.Structural.Shape.CalendarEnvelope+    Generated.CalendarDays.Structural.Shape.LocalDay+    Generated.CalendarDays.Structural.Shape.MaybeLocalDay+    Generated.CalendarDays.StructuralConformance++  build-depends:+    aeson >=2.2 && <2.3,+    base >=4.21 && <5,+    containers >=0.6 && <0.8,+    directory >=1.3 && <1.4,+    effectful-core,+    filepath >=1.4 && <1.6,+    hasql-transaction,+    keiki >=0.9 && <0.10,+    keiro,+    keiro-core,+    keiro-dsl,+    keiro-pgmq,+    kiroku-store,+    text >=2.1 && <2.2,+    time >=1.12 && <1.15,++-- Plan 292 / IR-44: checked structural text sets normalize duplicates and+-- permutations before aggregate execution and replay.+test-suite keiro-dsl-conformance-structural-text-sets+  import: warnings, generated-output+  type: exitcode-stdio-1.0+  default-extensions: OverloadedLabels+  hs-source-dirs: test/conformance-structural-text-sets+  main-is: Main.hs+  other-modules:+    Conformance.StructuralTextSets.Bindings+    Conformance.StructuralTextSets.Domain+    Conformance.StructuralTextSets.Historical+    Generated.StructuralTextSets.BehaviorSourceMap+    Generated.StructuralTextSets.LabelJobs.Queue+    Generated.StructuralTextSets.LabelJobs.QueueCodec+    Generated.StructuralTextSets.LabelJobs.QueuePolicy+    Generated.StructuralTextSets.LabelLookup.QueryContract+    Generated.StructuralTextSets.LabelLookup.ReadModel+    Generated.StructuralTextSets.LabelLookup.ReadModelHarness+    Generated.StructuralTextSets.LabelLookup.ReadModelTable+    Generated.StructuralTextSets.LabelStore.BehaviorContract+    Generated.StructuralTextSets.LabelStore.Codec+    Generated.StructuralTextSets.LabelStore.Domain+    Generated.StructuralTextSets.LabelStore.EventStream+    Generated.StructuralTextSets.LabelStore.Harness+    Generated.StructuralTextSets.LabelStore.Projection+    Generated.StructuralTextSets.LabelStore.Transducer+    Generated.StructuralTextSets.ProjectionCatalog+    Generated.StructuralTextSets.ReplayAudit+    Generated.StructuralTextSets.Structural.Shape.LabelEnvelope+    Generated.StructuralTextSets.Structural.Shape.MaybeTextLabels+    Generated.StructuralTextSets.Structural.Shape.TextLabels+    Generated.StructuralTextSets.StructuralConformance+    StructuralTextSets.LabelLookup.ReadModelHoles+    StructuralTextSets.LabelStore.BehaviorHoles+    StructuralTextSets.ProjectionCatalog.ProjectionCatalogHoles++  build-depends:+    aeson >=2.2 && <2.3,+    base >=4.21 && <5,+    containers >=0.6 && <0.8,+    effectful-core,+    hasql-transaction,+    keiki >=0.9 && <0.10,+    keiro,+    keiro-core,+    keiro-dsl,+    keiro-pgmq,+    keiro-test-support,+    kiroku-store,+    text >=2.1 && <2.2,++-- Plan 293 / IR-45: refined base16 bytes validate before total consumer+-- bindings while preserving decoded bytes across normalization and replay.+test-suite keiro-dsl-conformance-refined-base16+  import: warnings, generated-output+  type: exitcode-stdio-1.0+  default-extensions: OverloadedLabels+  hs-source-dirs: test/conformance-refined-base16+  main-is: Main.hs+  other-modules:+    Conformance.RefinedBase16.Bindings+    Conformance.RefinedBase16.Domain+    Conformance.RefinedBase16.Historical+    Generated.RefinedBase16.BehaviorSourceMap+    Generated.RefinedBase16.HashJobs.Queue+    Generated.RefinedBase16.HashJobs.QueueCodec+    Generated.RefinedBase16.HashJobs.QueuePolicy+    Generated.RefinedBase16.HashLookup.QueryContract+    Generated.RefinedBase16.HashLookup.ReadModel+    Generated.RefinedBase16.HashLookup.ReadModelHarness+    Generated.RefinedBase16.HashLookup.ReadModelTable+    Generated.RefinedBase16.HashStore.BehaviorContract+    Generated.RefinedBase16.HashStore.Codec+    Generated.RefinedBase16.HashStore.Domain+    Generated.RefinedBase16.HashStore.EventStream+    Generated.RefinedBase16.HashStore.Harness+    Generated.RefinedBase16.HashStore.Projection+    Generated.RefinedBase16.HashStore.Transducer+    Generated.RefinedBase16.ProjectionCatalog+    Generated.RefinedBase16.ReplayAudit+    Generated.RefinedBase16.Structural.CodecCompare.ContentHash+    Generated.RefinedBase16.Structural.Shape.ContentHash+    Generated.RefinedBase16.Structural.Shape.HashEnvelope+    Generated.RefinedBase16.Structural.Shape.MaybeContentHash+    Generated.RefinedBase16.StructuralConformance+    RefinedBase16.HashLookup.ReadModelHoles+    RefinedBase16.HashStore.BehaviorHoles+    RefinedBase16.ProjectionCatalog.ProjectionCatalogHoles++  build-depends:+    aeson >=2.2 && <2.3,+    base >=4.21 && <5,+    bytestring,+    containers >=0.6 && <0.8,+    directory >=1.3 && <1.4,+    effectful-core,+    filepath >=1.4 && <1.6,+    hasql-transaction,+    keiki >=0.9 && <0.10,+    keiro,+    keiro-core,+    keiro-dsl,+    keiro-pgmq,+    keiro-test-support,+    kiroku-store,+    text >=2.1 && <2.2,+ -- Plan 224: candidate language-5 mapped workqueue payloads share structural -- codec authority while preserving the queue schema-version-1 envelope. test-suite keiro-dsl-conformance-mapped-queue@@ -846,7 +1069,7 @@     containers >=0.6 && <0.8,     deepseq >=1.5 && <1.6,     keiki >=0.9 && <0.10,-    keiro ^>=0.17.0.0,+    keiro ^>=0.18.0.0,     tasty-bench >=0.5 && <0.6,     text >=2.1 && <2.2,     time >=1.12 && <1.15,@@ -1795,3 +2018,123 @@     keiki >=0.9 && <0.10,     keiro-core,     text >=2.1 && <2.2,++-- Plan 294 / IR-46: explicit UUIDv5-or-v7 admission remains exact across+-- aggregate, structural, keyed-map, queue, and public-contract boundaries.+test-suite keiro-dsl-conformance-id-admission-domains+  import: warnings, generated-output+  type: exitcode-stdio-1.0+  default-extensions: OverloadedLabels+  hs-source-dirs: test/conformance-id-admission-domains+  main-is: Main.hs+  other-modules:+    Conformance.IdAdmissionDomains.Bindings+    Conformance.IdAdmissionDomains.Domain+    Generated.IdAdmissionDomains.BehaviorSourceMap+    Generated.IdAdmissionDomains.Identities.Contract+    Generated.IdAdmissionDomains.IdentityLedger.BehaviorContract+    Generated.IdAdmissionDomains.IdentityLedger.Codec+    Generated.IdAdmissionDomains.IdentityLedger.Domain+    Generated.IdAdmissionDomains.IdentityLedger.EventStream+    Generated.IdAdmissionDomains.IdentityLedger.Harness+    Generated.IdAdmissionDomains.IdentityLedger.Projection+    Generated.IdAdmissionDomains.IdentityLedger.Transducer+    Generated.IdAdmissionDomains.IdentityWork.Queue+    Generated.IdAdmissionDomains.IdentityWork.QueueCodec+    Generated.IdAdmissionDomains.IdentityWork.QueuePolicy+    Generated.IdAdmissionDomains.Nominals+    Generated.IdAdmissionDomains.Nominals.Internal+    Generated.IdAdmissionDomains.ReplayAudit+    Generated.IdAdmissionDomains.Structural.NominalLeaves+    Generated.IdAdmissionDomains.Structural.Shape.IdentityEnvelope+    Generated.IdAdmissionDomains.StructuralConformance+    Generated.IdAdmissionDomains.StructuralProjections+    IdAdmissionDomains.IdentityLedger.BehaviorHoles++  build-depends:+    aeson >=2.2 && <2.3,+    base >=4.21 && <5,+    containers >=0.6 && <0.8,+    keiki >=0.9 && <0.10,+    keiro,+    keiro-core,+    keiro-dsl,+    keiro-pgmq,+    mmzk-typeid >=0.7 && <0.8,+    text >=2.1 && <2.2,++-- Plan 295: integrated retained-history rehearsal for the checked mappings+-- introduced by Plans 290-294, including replay-evidence mutation detection.+test-suite keiro-dsl-conformance-checked-mapping-replay+  import: warnings, generated-output+  type: exitcode-stdio-1.0+  default-extensions: OverloadedLabels+  hs-source-dirs: test/conformance-checked-mapping-replay+  main-is: Main.hs+  other-modules:+    CheckedMappingReplay.ProjectionCatalog.ProjectionCatalogHoles+    CheckedMappingReplay.ReplayLedger.BehaviorHoles+    CheckedMappingReplay.ReplayLookup.ReadModelHoles+    CheckedMappingReplay.ReplayReaction.ProcessHoles+    CheckedMappingReplay.ReplayTarget.BehaviorHoles+    Conformance.CheckedMappingReplay.Bindings+    Conformance.CheckedMappingReplay.Domain+    Generated.CheckedMappingReplay.BehaviorSourceMap+    Generated.CheckedMappingReplay.Nominals+    Generated.CheckedMappingReplay.Nominals.Internal+    Generated.CheckedMappingReplay.ProjectionCatalog+    Generated.CheckedMappingReplay.ReplayAudit+    Generated.CheckedMappingReplay.ReplayEvents.Contract+    Generated.CheckedMappingReplay.ReplayJobs.Queue+    Generated.CheckedMappingReplay.ReplayJobs.QueueCodec+    Generated.CheckedMappingReplay.ReplayJobs.QueuePolicy+    Generated.CheckedMappingReplay.ReplayLedger.BehaviorContract+    Generated.CheckedMappingReplay.ReplayLedger.Codec+    Generated.CheckedMappingReplay.ReplayLedger.Domain+    Generated.CheckedMappingReplay.ReplayLedger.EventStream+    Generated.CheckedMappingReplay.ReplayLedger.Harness+    Generated.CheckedMappingReplay.ReplayLedger.Projection+    Generated.CheckedMappingReplay.ReplayLedger.Transducer+    Generated.CheckedMappingReplay.ReplayLookup.QueryContract+    Generated.CheckedMappingReplay.ReplayLookup.ReadModel+    Generated.CheckedMappingReplay.ReplayLookup.ReadModelHarness+    Generated.CheckedMappingReplay.ReplayLookup.ReadModelTable+    Generated.CheckedMappingReplay.ReplayReaction.Input+    Generated.CheckedMappingReplay.ReplayReaction.Process+    Generated.CheckedMappingReplay.ReplayReaction.ProcessHarness+    Generated.CheckedMappingReplay.ReplayTarget.BehaviorContract+    Generated.CheckedMappingReplay.ReplayTarget.Codec+    Generated.CheckedMappingReplay.ReplayTarget.Domain+    Generated.CheckedMappingReplay.ReplayTarget.EventStream+    Generated.CheckedMappingReplay.ReplayTarget.Harness+    Generated.CheckedMappingReplay.ReplayTarget.Projection+    Generated.CheckedMappingReplay.ReplayTarget.Transducer+    Generated.CheckedMappingReplay.Structural.NominalLeaves+    Generated.CheckedMappingReplay.Structural.Shape.ContentHash+    Generated.CheckedMappingReplay.Structural.Shape.ImportantDays+    Generated.CheckedMappingReplay.Structural.Shape.MaybeContentHash+    Generated.CheckedMappingReplay.Structural.Shape.MaybeLabel+    Generated.CheckedMappingReplay.Structural.Shape.ReplayEnvelope+    Generated.CheckedMappingReplay.Structural.Shape.TextLabels+    Generated.CheckedMappingReplay.StructuralConformance+    Generated.CheckedMappingReplay.StructuralProjections++  build-depends:+    aeson >=2.2 && <2.3,+    base >=4.21 && <5,+    bytestring >=0.12 && <0.13,+    containers >=0.6 && <0.8,+    effectful-core,+    hasql-transaction,+    keiki >=0.9 && <0.10,+    keiro,+    keiro-core,+    keiro-dsl,+    keiro-pgmq,+    keiro-test-support,+    kiroku-store,+    mmzk-typeid >=0.7 && <0.8,+    shibuya-core,+    text >=2.1 && <2.2,+    time >=1.12 && <1.15,+    uuid >=1.3 && <1.4,
record-field-migration-0.15.md view
@@ -9,1458 +9,1472 @@ 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, 1532 fields, 1489 strict fields, and 1396 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:257` | `AggregateHaskellSource` | data | no | `aggregateSourceBuiltin` | `builtin` | `!(Maybe Text)` | `(.builtin)`, pattern, or construction | rendered/canonical output | `none` |-| `keiro-dsl/src/Keiro/Dsl/AggregateType.hs:258` | `AggregateHaskellSource` | data | no | `aggregateSourceReference` | `reference` | `!(Maybe HaskellReference)` | `(.reference)`, pattern, or construction | rendered/canonical output | `none` |-| `keiro-dsl/src/Keiro/Dsl/AggregateType.hs:259` | `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:153` | `RenderedType` | data | no | `rendered` | `rendered` | `!Text` | `(.rendered)`, pattern, or construction | rendered/canonical output | `none` |-| `keiro-dsl/src/Keiro/Dsl/ConsumerTypePlan.hs:154` | `RenderedType` | data | no | `precedence` | `precedence` | `!TypePrecedence` | `(.precedence)`, pattern, or construction | rendered/canonical output | `none` |-| `keiro-dsl/src/Keiro/Dsl/ConsumerTypePlan.hs:155` | `RenderedType` | data | no | `requirements` | `requirements` | `!(Set ImportRequirement)` | `(.requirements)`, pattern, or construction | rendered/canonical output | `none` |-| `keiro-dsl/src/Keiro/Dsl/ConsumerTypePlan.hs:156` | `RenderedType` | data | no | `mappedDependencies` | `mappedDependencies` | `!(Set MappedKey)` | `(.mappedDependencies)`, pattern, or construction | rendered/canonical output | `none` |-| `keiro-dsl/src/Keiro/Dsl/ConsumerTypePlan.hs:157` | `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:67` | `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:68` | `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:69` | `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:70` | `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:71` | `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:72` | `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:73` | `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:74` | `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:75` | `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:80` | `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:81` | `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:82` | `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:83` | `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:84` | `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:89` | `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:90` | `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:91` | `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:92` | `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:93` | `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:98` | `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:99` | `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:100` | `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:105` | `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:106` | `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:107` | `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:108` | `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:109` | `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:110` | `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:111` | `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:112` | `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:113` | `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:118` | `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:119` | `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:120` | `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:121` | `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:122` | `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:123` | `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:124` | `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:125` | `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:126` | `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:131` | `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:132` | `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:133` | `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:138` | `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:139` | `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:140` | `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:141` | `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:146` | `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:147` | `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:148` | `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:149` | `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:150` | `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:151` | `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:152` | `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:157` | `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:158` | `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:159` | `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:160` | `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:165` | `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:166` | `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:167` | `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:172` | `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:173` | `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:174` | `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:175` | `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:176` | `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:177` | `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:178` | `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:179` | `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:180` | `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:181` | `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:186` | `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:187` | `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:188` | `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:189` | `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:190` | `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:191` | `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:192` | `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:193` | `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:194` | `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:195` | `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:196` | `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:197` | `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:1803` | `GuardProposal` | data | no | `proposalBody` | `body` | `!ReplayBodyDelta` | `(.body)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |-| `keiro-dsl/src/Keiro/Dsl/Diff.hs:1804` | `GuardProposal` | data | no | `proposalTwin` | `twin` | `!Transition` | `(.twin)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |-| `keiro-dsl/src/Keiro/Dsl/Diff.hs:2193` | `EventFieldSig` | data | no | `eventFieldDslName` | `dslName` | `!Name` | `(.dslName)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |-| `keiro-dsl/src/Keiro/Dsl/Diff.hs:2194` | `EventFieldSig` | data | no | `eventFieldSelector` | `selector` | `!Name` | `(.selector)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |-| `keiro-dsl/src/Keiro/Dsl/Diff.hs:2195` | `EventFieldSig` | data | no | `eventFieldWireKey` | `wireKey` | `!Text` | `(.wireKey)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |-| `keiro-dsl/src/Keiro/Dsl/Diff.hs:2196` | `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:203` | `Loc` | newtype | yes | `unLoc` | `unLoc` | `Int` | explicit `unLoc` positional function | rendered/canonical output | `deriving stock (Show)` |-| `keiro-dsl/src/Keiro/Dsl/Grammar.hs:219` | `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:220` | `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:221` | `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:222` | `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:229` | `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:230` | `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:231` | `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:232` | `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:240` | `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:241` | `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:242` | `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:243` | `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:244` | `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:285` | `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:286` | `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:287` | `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:288` | `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:289` | `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:290` | `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:298` | `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:299` | `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:300` | `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:305` | `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:306` | `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:307` | `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:312` | `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:313` | `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:314` | `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:315` | `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:326` | `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:327` | `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:328` | `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:337` | `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:338` | `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:339` | `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:340` | `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:341` | `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:342` | `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:343` | `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:352` | `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:353` | `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:354` | `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:355` | `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:361` | `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:362` | `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:363` | `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:364` | `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:365` | `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:366` | `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:367` | `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:368` | `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:369` | `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:372` | `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:373` | `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:374` | `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:375` | `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:376` | `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:377` | `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:378` | `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:386` | `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:387` | `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:497` | `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:498` | `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:499` | `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:500` | `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:508` | `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:509` | `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:510` | `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:521` | `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:522` | `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:523` | `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:524` | `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:525` | `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:532` | `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:533` | `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:539` | `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:540` | `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:541` | `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:551` | `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:552` | `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:554` | `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:557` | `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:562` | `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:566` | `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:567` | `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:585` | `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:586` | `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:587` | `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:607` | `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:608` | `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:609` | `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:610` | `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:611` | `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:612` | `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:613` | `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:616` | `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:617` | `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:618` | `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:619` | `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:647` | `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:648` | `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:649` | `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:656` | `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:657` | `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:658` | `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:659` | `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:660` | `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:673` | `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:674` | `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:675` | `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:676` | `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:683` | `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:684` | `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:685` | `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:686` | `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:687` | `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:688` | `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:689` | `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:692` | `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:693` | `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:694` | `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:695` | `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:696` | `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:706` | `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:707` | `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:714` | `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:715` | `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:716` | `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:717` | `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:724` | `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:725` | `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:733` | `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:734` | `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:745` | `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:746` | `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:747` | `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:753` | `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:754` | `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:760` | `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:761` | `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:762` | `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:763` | `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:764` | `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:765` | `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:772` | `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:773` | `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:774` | `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:775` | `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:781` | `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:782` | `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:783` | `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:794` | `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:795` | `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:805` | `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:806` | `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:807` | `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:808` | `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:809` | `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:815` | `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:816` | `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:817` | `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:818` | `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:819` | `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:820` | `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:826` | `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:827` | `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:828` | `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:829` | `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:830` | `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:831` | `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:832` | `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:833` | `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:834` | `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:847` | `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:848` | `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:849` | `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:850` | `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:851` | `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:852` | `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:857` | `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:858` | `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:859` | `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:864` | `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:865` | `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:866` | `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:879` | `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:880` | `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:885` | `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:886` | `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:887` | `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:888` | `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:889` | `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:900` | `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:901` | `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:902` | `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:903` | `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:904` | `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:912` | `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:913` | `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:914` | `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:919` | `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:920` | `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:921` | `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:922` | `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:923` | `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:924` | `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:941` | `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:943` | `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:944` | `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:945` | `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:946` | `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:947` | `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:948` | `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:949` | `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:950` | `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:951` | `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:968` | `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:969` | `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:970` | `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:971` | `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:972` | `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:973` | `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:974` | `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:975` | `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:976` | `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:977` | `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:978` | `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:979` | `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:980` | `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:981` | `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:982` | `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:983` | `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:984` | `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:985` | `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:986` | `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:987` | `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:988` | `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:989` | `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:990` | `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:991` | `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:1002` | `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:1003` | `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:1004` | `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:1009` | `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:1010` | `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:1011` | `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:1012` | `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:1020` | `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:1021` | `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:1022` | `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:1023` | `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:1024` | `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:1025` | `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:1026` | `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:1027` | `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:1028` | `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:1029` | `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:1030` | `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:1041` | `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:1042` | `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:1043` | `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:1044` | `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:1045` | `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:1051` | `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:1052` | `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:1053` | `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:1061` | `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:1062` | `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:1063` | `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:1065` | `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:1066` | `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:1067` | `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:1083` | `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:1084` | `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:1085` | `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:1086` | `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:1102` | `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:1103` | `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:1104` | `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:1111` | `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:1112` | `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:1113` | `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:1129` | `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:1130` | `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:1131` | `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:1132` | `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:1133` | `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:1134` | `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:1135` | `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:1136` | `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:1137` | `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:1138` | `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:1139` | `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:1140` | `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:1147` | `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:1152` | `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:1153` | `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:1154` | `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:1161` | `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:1162` | `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:1163` | `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:1164` | `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:1165` | `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:1166` | `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:1167` | `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:1169` | `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:1170` | `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:1171` | `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:1172` | `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:1178` | `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:1179` | `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:1180` | `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:1181` | `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:1187` | `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:1188` | `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:1189` | `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:1190` | `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:1191` | `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:1193` | `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:1194` | `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:1224` | `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:1225` | `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:1226` | `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:1227` | `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:1234` | `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:1235` | `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:1236` | `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:1246` | `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:1247` | `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:1248` | `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:1263` | `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:1264` | `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:1265` | `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:1266` | `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:1267` | `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:1268` | `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:1269` | `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:1270` | `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:1271` | `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:1272` | `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:1273` | `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:1274` | `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:1275` | `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:1276` | `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:1277` | `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:1284` | `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:1285` | `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:1286` | `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:1287` | `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:1288` | `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:1289` | `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:1290` | `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:1291` | `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:1292` | `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:1293` | `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:1294` | `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:1302` | `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:1303` | `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:1304` | `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:1333` | `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:1334` | `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:1335` | `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:1336` | `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:1344` | `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:1345` | `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:1346` | `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:1347` | `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:1354` | `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:1355` | `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:1356` | `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:1357` | `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:1358` | `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:1359` | `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:1360` | `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:1361` | `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:1362` | `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:1363` | `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:1364` | `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:1365` | `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:1366` | `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:1397` | `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:1398` | `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:1399` | `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:1400` | `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:1401` | `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:1402` | `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:1408` | `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:1409` | `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:1410` | `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:1411` | `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:1422` | `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:1423` | `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:1424` | `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:1431` | `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:1432` | `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:1433` | `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:1434` | `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:1435` | `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:1436` | `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:1437` | `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:1438` | `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:1443` | `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:1444` | `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:1445` | `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:1446` | `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:1454` | `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:1455` | `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:1456` | `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:1457` | `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:1458` | `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:1459` | `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:1460` | `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:1461` | `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:1496` | `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:1497` | `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:1498` | `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:1499` | `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:1500` | `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:1501` | `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:1502` | `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:1503` | `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:1504` | `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:1505` | `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:1506` | `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:1532` | `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:1534` | `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:1535` | `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:1536` | `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:1537` | `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:1539` | `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:1540` | `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:1541` | `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:1542` | `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:1562` | `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:1563` | `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:1564` | `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:1610` | `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:1611` | `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:1612` | `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:1613` | `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:1614` | `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:1615` | `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:1616` | `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:1617` | `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:1618` | `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:152` | `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:153` | `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:213` | `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:214` | `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:217` | `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:218` | `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:219` | `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:220` | `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:221` | `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:457` | `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:458` | `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:459` | `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:460` | `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:461` | `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:462` | `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:529` | `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:530` | `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:25` | `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:26` | `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:27` | `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:33` | `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:34` | `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:35` | `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:36` | `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:37` | `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:38` | `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:39` | `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:42` | `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:43` | `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:44` | `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:45` | `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:46` | `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:47` | `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:50` | `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:51` | `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:52` | `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:53` | `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:54` | `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:55` | `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:56` | `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:57` | `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:58` | `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:59` | `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:60` | `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:55` | `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:56` | `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:71` | `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:72` | `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:73` | `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:74` | `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:75` | `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:216` | `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:217` | `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:218` | `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:154` | `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:155` | `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:156` | `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:157` | `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:165` | `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:166` | `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:167` | `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:198` | `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:200` | `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:202` | `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:210` | `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:211` | `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:219` | `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:220` | `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:221` | `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:222` | `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:334` | `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:335` | `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:336` | `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:337` | `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:338` | `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:489` | `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:490` | `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:491` | `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:492` | `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:493` | `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:494` | `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:495` | `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:496` | `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:497` | `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:498` | `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:499` | `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:500` | `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:501` | `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:502` | `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:503` | `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:504` | `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:506` | `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:507` | `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:508` | `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:509` | `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:510` | `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:511` | `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:512` | `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:513` | `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:514` | `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:515` | `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:517` | `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:519` | `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:523` | `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:524` | `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:532` | `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:533` | `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:534` | `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:535` | `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:542` | `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:544` | `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:546` | `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:548` | `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:2457` | `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:2458` | `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:2473` | `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:2474` | `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:2475` | `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:2476` | `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:2477` | `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:2478` | `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:2479` | `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:2480` | `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:2481` | `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:2482` | `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:2483` | `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:2484` | `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:4282` | `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:4283` | `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:4284` | `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:8221` | `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:8222` | `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:8223` | `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:8224` | `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:8232` | `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:8233` | `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:8234` | `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:8370` | `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:8371` | `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:8447` | `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:8448` | `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:92` | `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:98` | `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:104` | `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:110` | `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:116` | `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:171` | `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:172` | `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:173` | `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:174` | `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:175` | `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:176` | `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:192` | `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:193` | `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:194` | `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:195` | `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:209` | `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:320` | `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:321` | `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:322` | `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:323` | `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:324` | `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:325` | `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:326` | `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:327` | `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:332` | `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:333` | `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:334` | `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:335` | `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:336` | `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:337` | `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:338` | `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:394` | `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:417` | `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:418` | `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:419` | `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:420` | `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:421` | `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:422` | `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:427` | `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:428` | `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:429` | `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:430` | `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:465` | `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:466` | `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:471` | `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:472` | `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:473` | `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:489` | `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:490` | `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:510` | `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:511` | `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:512` | `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:513` | `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:514` | `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:515` | `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:516` | `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:517` | `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:518` | `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:519` | `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:520` | `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:521` | `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:1142` | `TypeExprAlgebra` | data | yes | `onText` | `onText` | `a` | `(.onText)`, pattern, or construction | rendered/canonical output | `none` |-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1143` | `TypeExprAlgebra` | data | yes | `onInt` | `onInt` | `a` | `(.onInt)`, pattern, or construction | rendered/canonical output | `none` |-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1144` | `TypeExprAlgebra` | data | yes | `onInteger` | `onInteger` | `a` | `(.onInteger)`, pattern, or construction | rendered/canonical output | `none` |-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1145` | `TypeExprAlgebra` | data | yes | `onBool` | `onBool` | `a` | `(.onBool)`, pattern, or construction | rendered/canonical output | `none` |-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1146` | `TypeExprAlgebra` | data | yes | `onNatural` | `onNatural` | `a` | `(.onNatural)`, pattern, or construction | rendered/canonical output | `none` |-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1147` | `TypeExprAlgebra` | data | yes | `onTime` | `onTime` | `a` | `(.onTime)`, pattern, or construction | rendered/canonical output | `none` |-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1148` | `TypeExprAlgebra` | data | yes | `onJson` | `onJson` | `a` | `(.onJson)`, pattern, or construction | rendered/canonical output | `none` |-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1149` | `TypeExprAlgebra` | data | yes | `onOptional` | `onOptional` | `a -> a` | `(.onOptional)`, pattern, or construction | rendered/canonical output | `none` |-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1150` | `TypeExprAlgebra` | data | yes | `onList` | `onList` | `a -> a` | `(.onList)`, pattern, or construction | rendered/canonical output | `none` |-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1151` | `TypeExprAlgebra` | data | yes | `onMap` | `onMap` | `a -> a` | `(.onMap)`, pattern, or construction | rendered/canonical output | `none` |-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1152` | `TypeExprAlgebra` | data | yes | `onKeyedMap` | `onKeyedMap` | `NominalLeaf -> a -> a` | `(.onKeyedMap)`, pattern, or construction | rendered/canonical output | `none` |-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1153` | `TypeExprAlgebra` | data | yes | `onRef` | `onRef` | `MappedKey -> a` | `(.onRef)`, pattern, or construction | rendered/canonical output | `none` |-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1154` | `TypeExprAlgebra` | data | yes | `onNominal` | `onNominal` | `NominalLeaf -> a` | `(.onNominal)`, pattern, or construction | rendered/canonical output | `none` |-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1174` | `MappedShapeAlgebra` | data | yes | `onRecord` | `onRecord` | `Name -> UnknownFields -> [ResolvedWireField] -> a` | `(.onRecord)`, pattern, or construction | rendered/canonical output | `none` |-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1175` | `MappedShapeAlgebra` | data | yes | `onEnum` | `onEnum` | `[WireEnum] -> a` | `(.onEnum)`, pattern, or construction | rendered/canonical output | `none` |-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1176` | `MappedShapeAlgebra` | data | yes | `onUnion` | `onUnion` | `UnionEncoding -> [ResolvedWireArm] -> a` | `(.onUnion)`, pattern, or construction | rendered/canonical output | `none` |-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1186` | `MappedDeclAlgebra` | data | yes | `onStructuralDecl` | `onStructuralDecl` | `StructuralDecl -> ResolvedMappedShape -> a` | `(.onStructuralDecl)`, pattern, or construction | rendered/canonical output | `none` |-| `keiro-dsl/src/Keiro/Dsl/TypeGraph.hs:1187` | `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:1664` | `NullabilityFacts` | data | no | `nfTopNull` | `topNull` | `!Bool` | `(.topNull)`, pattern, or construction | rendered/canonical output | `none` |-| `keiro-dsl/src/Keiro/Dsl/Validate.hs:1665` | `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)` |-| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:145` | `WorkspaceManifest` | data | yes | `wmfRuntimePackageLoc` | `runtimePackageLoc` | `!Loc` | `(.runtimePackageLoc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |-| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:147` | `WorkspaceManifest` | data | yes | `wmfModuleRoot` | `moduleRoot` | `!(Maybe Text)` | `(.moduleRoot)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |-| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:149` | `WorkspaceManifest` | data | yes | `wmfModuleRootLoc` | `moduleRootLoc` | `!Loc` | `(.moduleRootLoc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |-| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:151` | `WorkspaceManifest` | data | yes | `wmfLayout` | `layout` | `!(Maybe Placement)` | `(.layout)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |-| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:153` | `WorkspaceManifest` | data | yes | `wmfLayoutLoc` | `layoutLoc` | `!Loc` | `(.layoutLoc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |-| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:155` | `WorkspaceManifest` | data | yes | `wmfMembers` | `members` | `!(NonEmpty WorkspaceMemberRef)` | `(.members)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |-| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:162` | `WorkspaceMemberRef` | data | yes | `wmrPath` | `path` | `!FilePath` | `(.path)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |-| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:163` | `WorkspaceMemberRef` | data | yes | `wmrLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |-| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:545` | `WorkspaceLocation` | data | yes | `wlFile` | `file` | `!WorkspaceFile` | `(.file)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |-| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:546` | `WorkspaceLocation` | data | yes | `wlLine` | `line` | `!Int` | `(.line)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |-| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:547` | `WorkspaceLocation` | data | yes | `wlRole` | `role` | `!Text` | `(.role)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |-| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:557` | `WorkspaceDiagnostic` | data | yes | `wdLocations` | `locations` | `!(NonEmpty WorkspaceLocation)` | `(.locations)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |-| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:558` | `WorkspaceDiagnostic` | data | yes | `wdSeverity` | `severity` | `!Severity` | `(.severity)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |-| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:559` | `WorkspaceDiagnostic` | data | yes | `wdCode` | `code` | `!DiagnosticCode` | `(.code)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |-| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:560` | `WorkspaceDiagnostic` | data | yes | `wdSourceLanguageCause` | `sourceLanguageCause` | `!(Maybe SourceLanguageDiagnostic)` | `(.sourceLanguageCause)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |-| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:561` | `WorkspaceDiagnostic` | data | yes | `wdMessage` | `message` | `!Text` | `(.message)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |-| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:628` | `LineMap` | newtype | yes | `lmRanges` | `lmRanges` | `[(Int, Int, FilePath)]` | `(.lmRanges)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |-| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:637` | `OwnershipIndex` | data | yes | `oiDeclarations` | `declarations` | `!(Map (Text, Name) (FilePath, Loc))` | `(.declarations)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |-| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:638` | `OwnershipIndex` | data | yes | `oiNodes` | `nodes` | `!(Map (Text, Name) (FilePath, Loc))` | `(.nodes)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |-| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:653` | `WorkspaceMember` | data | yes | `wmPath` | `path` | `!FilePath` | `(.path)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |-| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:655` | `WorkspaceMember` | data | yes | `wmSpec` | `spec` | `!Spec` | `(.spec)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |-| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:657` | `WorkspaceMember` | data | yes | `wmSourceLanguage` | `sourceLanguage` | `!SourceLanguage` | `(.sourceLanguage)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |-| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:660` | `WorkspaceMember` | data | yes | `wmSourceIndex` | `sourceIndex` | `!SemanticSourceIndex` | `(.sourceIndex)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |-| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:662` | `WorkspaceMember` | data | yes | `wmLineBase` | `lineBase` | `!Int` | `(.lineBase)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |-| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:664` | `WorkspaceMember` | data | yes | `wmLineCount` | `lineCount` | `!Int` | `(.lineCount)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |-| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:680` | `WorkspaceSpec` | data | yes | `wsService` | `service` | `!Text` | `(.service)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |-| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:681` | `WorkspaceSpec` | data | yes | `wsManifestPath` | `manifestPath` | `!FilePath` | `(.manifestPath)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |-| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:684` | `WorkspaceSpec` | data | yes | `wsLanguageContract` | `languageContract` | `!EffectiveLanguageContract` | `(.languageContract)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |-| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:686` | `WorkspaceSpec` | data | yes | `wsContext` | `context` | `!Name` | `(.context)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |-| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:687` | `WorkspaceSpec` | data | yes | `wsRuntimePackage` | `runtimePackage` | `!(Maybe RuntimePackageName)` | `(.runtimePackage)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |-| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:688` | `WorkspaceSpec` | data | yes | `wsModuleRoot` | `moduleRoot` | `!(Maybe Text)` | `(.moduleRoot)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |-| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:689` | `WorkspaceSpec` | data | yes | `wsLayout` | `layout` | `!(Maybe Placement)` | `(.layout)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |-| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:691` | `WorkspaceSpec` | data | yes | `wsMembers` | `members` | `![WorkspaceMember]` | `(.members)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |-| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:692` | `WorkspaceSpec` | data | yes | `wsMergedSpec` | `mergedSpec` | `!Spec` | `(.mergedSpec)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |-| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:694` | `WorkspaceSpec` | data | yes | `wsSourceIndex` | `sourceIndex` | `!SemanticSourceIndex` | `(.sourceIndex)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |-| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:695` | `WorkspaceSpec` | data | yes | `wsLineMap` | `lineMap` | `!LineMap` | `(.lineMap)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |-| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:696` | `WorkspaceSpec` | data | yes | `wsOwnership` | `ownership` | `!OwnershipIndex` | `(.ownership)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |-| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:1309` | `ContentSource` | newtype | yes | `csRead` | `csRead` | `FilePath -> IO (Either Text Text)` | `(.csRead)`, pattern, or construction | rendered/canonical output | `none` |+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` |+| `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)` |+| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:145` | `WorkspaceManifest` | data | yes | `wmfRuntimePackageLoc` | `runtimePackageLoc` | `!Loc` | `(.runtimePackageLoc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |+| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:147` | `WorkspaceManifest` | data | yes | `wmfModuleRoot` | `moduleRoot` | `!(Maybe Text)` | `(.moduleRoot)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |+| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:149` | `WorkspaceManifest` | data | yes | `wmfModuleRootLoc` | `moduleRootLoc` | `!Loc` | `(.moduleRootLoc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |+| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:151` | `WorkspaceManifest` | data | yes | `wmfLayout` | `layout` | `!(Maybe Placement)` | `(.layout)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |+| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:153` | `WorkspaceManifest` | data | yes | `wmfLayoutLoc` | `layoutLoc` | `!Loc` | `(.layoutLoc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |+| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:155` | `WorkspaceManifest` | data | yes | `wmfMembers` | `members` | `!(NonEmpty WorkspaceMemberRef)` | `(.members)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |+| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:162` | `WorkspaceMemberRef` | data | yes | `wmrPath` | `path` | `!FilePath` | `(.path)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |+| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:163` | `WorkspaceMemberRef` | data | yes | `wmrLoc` | `loc` | `!Loc` | `(.loc)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |+| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:545` | `WorkspaceLocation` | data | yes | `wlFile` | `file` | `!WorkspaceFile` | `(.file)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |+| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:546` | `WorkspaceLocation` | data | yes | `wlLine` | `line` | `!Int` | `(.line)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |+| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:547` | `WorkspaceLocation` | data | yes | `wlRole` | `role` | `!Text` | `(.role)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |+| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:557` | `WorkspaceDiagnostic` | data | yes | `wdLocations` | `locations` | `!(NonEmpty WorkspaceLocation)` | `(.locations)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |+| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:558` | `WorkspaceDiagnostic` | data | yes | `wdSeverity` | `severity` | `!Severity` | `(.severity)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |+| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:559` | `WorkspaceDiagnostic` | data | yes | `wdCode` | `code` | `!DiagnosticCode` | `(.code)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |+| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:560` | `WorkspaceDiagnostic` | data | yes | `wdSourceLanguageCause` | `sourceLanguageCause` | `!(Maybe SourceLanguageDiagnostic)` | `(.sourceLanguageCause)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |+| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:561` | `WorkspaceDiagnostic` | data | yes | `wdMessage` | `message` | `!Text` | `(.message)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |+| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:628` | `LineMap` | newtype | yes | `lmRanges` | `lmRanges` | `[(Int, Int, FilePath)]` | `(.lmRanges)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |+| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:637` | `OwnershipIndex` | data | yes | `oiDeclarations` | `declarations` | `!(Map (Text, Name) (FilePath, Loc))` | `(.declarations)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |+| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:638` | `OwnershipIndex` | data | yes | `oiNodes` | `nodes` | `!(Map (Text, Name) (FilePath, Loc))` | `(.nodes)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |+| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:653` | `WorkspaceMember` | data | yes | `wmPath` | `path` | `!FilePath` | `(.path)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |+| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:655` | `WorkspaceMember` | data | yes | `wmSpec` | `spec` | `!Spec` | `(.spec)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |+| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:657` | `WorkspaceMember` | data | yes | `wmSourceLanguage` | `sourceLanguage` | `!SourceLanguage` | `(.sourceLanguage)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |+| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:660` | `WorkspaceMember` | data | yes | `wmSourceIndex` | `sourceIndex` | `!SemanticSourceIndex` | `(.sourceIndex)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |+| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:662` | `WorkspaceMember` | data | yes | `wmLineBase` | `lineBase` | `!Int` | `(.lineBase)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |+| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:664` | `WorkspaceMember` | data | yes | `wmLineCount` | `lineCount` | `!Int` | `(.lineCount)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |+| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:680` | `WorkspaceSpec` | data | yes | `wsService` | `service` | `!Text` | `(.service)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |+| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:681` | `WorkspaceSpec` | data | yes | `wsManifestPath` | `manifestPath` | `!FilePath` | `(.manifestPath)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |+| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:684` | `WorkspaceSpec` | data | yes | `wsLanguageContract` | `languageContract` | `!EffectiveLanguageContract` | `(.languageContract)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |+| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:686` | `WorkspaceSpec` | data | yes | `wsContext` | `context` | `!Name` | `(.context)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |+| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:687` | `WorkspaceSpec` | data | yes | `wsRuntimePackage` | `runtimePackage` | `!(Maybe RuntimePackageName)` | `(.runtimePackage)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |+| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:688` | `WorkspaceSpec` | data | yes | `wsModuleRoot` | `moduleRoot` | `!(Maybe Text)` | `(.moduleRoot)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |+| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:689` | `WorkspaceSpec` | data | yes | `wsLayout` | `layout` | `!(Maybe Placement)` | `(.layout)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |+| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:691` | `WorkspaceSpec` | data | yes | `wsMembers` | `members` | `![WorkspaceMember]` | `(.members)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |+| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:692` | `WorkspaceSpec` | data | yes | `wsMergedSpec` | `mergedSpec` | `!Spec` | `(.mergedSpec)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |+| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:694` | `WorkspaceSpec` | data | yes | `wsSourceIndex` | `sourceIndex` | `!SemanticSourceIndex` | `(.sourceIndex)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |+| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:695` | `WorkspaceSpec` | data | yes | `wsLineMap` | `lineMap` | `!LineMap` | `(.lineMap)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |+| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:696` | `WorkspaceSpec` | data | yes | `wsOwnership` | `ownership` | `!OwnershipIndex` | `(.ownership)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |+| `keiro-dsl/src/Keiro/Dsl/Workspace.hs:1311` | `ContentSource` | newtype | yes | `csRead` | `csRead` | `FilePath -> IO (Either Text Text)` | `(.csRead)`, pattern, or construction | rendered/canonical output | `none` | | `keiro-dsl/src/Keiro/Dsl/WorkspaceAdoption.hs:63` | `ClaimedFile` | data | yes | `cfPath` | `path` | `!FilePath` | `(.path)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` | | `keiro-dsl/src/Keiro/Dsl/WorkspaceAdoption.hs:64` | `ClaimedFile` | data | yes | `cfEvidence` | `evidence` | `!ClaimEvidence` | `(.evidence)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` | | `keiro-dsl/src/Keiro/Dsl/WorkspaceAdoption.hs:66` | `ClaimedFile` | data | yes | `cfSource` | `source` | `!(Maybe Text)` | `(.source)`, pattern, or construction | rendered/canonical output | `deriving stock (Eq, Show)` |
src/Keiro/Dsl/AggregateType.hs view
@@ -137,6 +137,8 @@     TBool -> pure AggregateBool     TNatural -> pure AggregateNatural     TTime -> pure AggregateTime+    TDay -> unsupportedShape+    TTextSet -> unsupportedShape     TJson -> unsupportedShape     TOptional {} -> unsupportedShape     TList {} -> unsupportedShape@@ -246,6 +248,8 @@   TBool -> "Bool"   TNatural -> "Natural"   TTime -> "Time"+  TDay -> "Day"+  TTextSet -> "Set(Text)"   TJson -> "Json"   TOptional value -> "Optional(" <> typeExprCanonicalName value <> ")"   TList value -> "List(" <> typeExprCanonicalName value <> ")"@@ -301,12 +305,49 @@     GeneratedNominal -> Set.empty     ConsumerNominal binding -> Set.singleton ((.package) ((.haskell) binding))   AggregateMapped key -> case Map.lookup key ((.mapped) symbols) of-    Just declaration -> Set.singleton ((.package) (mappedHaskell declaration))+    Just declaration ->+      Set.insert+        ((.package) (mappedHaskell declaration))+        (if mappedUsesDay Set.empty declaration then Set.singleton "time" else Set.empty)     Nothing -> Set.empty   _ -> Set.empty   where     mappedHaskell (ResolvedStructural declaration _) = (.haskell) declaration     mappedHaskell (ResolvedOpaque declaration) = (.haskell) declaration+    mappedUsesDay visited = \case+      ResolvedOpaque {} -> False+      ResolvedStructural _ shape ->+        foldMappedShape+          MappedShapeAlgebra+            { onRecord = \_ _ fields -> any (exprUsesDay visited . (.valueType)) fields,+              onEnum = const False,+              onUnion = \_ arms -> any (maybe False (exprUsesDay visited) . (.payload)) arms,+              onBare = exprUsesDay visited,+              onRefined = const False+            }+          shape+    exprUsesDay visited =+      foldTypeExpr+        TypeExprAlgebra+          { onText = False,+            onInt = False,+            onInteger = False,+            onBool = False,+            onNatural = False,+            onTime = False,+            onDay = True,+            onTextSet = False,+            onJson = False,+            onOptional = id,+            onList = id,+            onMap = id,+            onKeyedMap = \_ -> id,+            onRef = \ref ->+              if Set.member ref visited+                then False+                else maybe False (mappedUsesDay (Set.insert ref visited)) (Map.lookup ref ((.mapped) symbols)),+            onNominal = const False+          }  aggregateSampleHaskell :: AggregateSymbols -> Text -> ResolvedAggregateType -> Text aggregateSampleHaskell symbols sampleName resolved = case resolved of
src/Keiro/Dsl/CanonicalEncoding.hs view
@@ -21,6 +21,8 @@ import Data.Text (Text) import Data.Text qualified as T import Data.Text.Encoding qualified as Text+import Keiro.Codec.CalendarDay (calendarDayCodecPolicyIdentity)+import Keiro.Codec.TextSet (textSetCodecPolicyIdentity) import Keiro.Dsl.Grammar import Numeric (showHex) import Prettyprinter@@ -69,6 +71,8 @@       TBool -> scalar "bool"       TNatural -> scalar "natural"       TTime -> scalar "time"+      TDay -> scalar ("calendar-day:" <> calendarDayCodecPolicyIdentity)+      TTextSet -> scalar ("text-set:" <> textSetCodecPolicyIdentity)       TJson -> scalar "json"       TOptional value -> record "optional" [typeExpr value]       TList value -> record "list-type" [typeExpr value]
src/Keiro/Dsl/ConsumerTypePlan.hs view
@@ -72,6 +72,8 @@       RBool -> atom "Bool" []       RNatural -> atom "Natural" [ImportRequirement "base" "Numeric.Natural" "Natural"]       RTime -> atom "UTCTime" [ImportRequirement "time" "Data.Time" "UTCTime"]+      RDay -> atom "Day" [ImportRequirement "time" "Data.Time.Calendar" "Day"]+      RTextSet -> textSetType       RJson -> atom "Value" [ImportRequirement "aeson" "Data.Aeson" "Value"]       ROptional value -> application "Maybe" [ImportRequirement "base" "Data.Maybe" "Maybe"] <$> plan value       RList value -> listType <$> plan value@@ -110,6 +112,13 @@      listType value = replaceRenderedType ("[" <> value.rendered <> "]") AtomicType value.requirements value +    textSetType =+      atom+        "Set Text"+        [ ImportRequirement "containers" "Data.Set" "Set",+          ImportRequirement "text" "Data.Text" "Text"+        ]+     mapType value =       replaceRenderedType         ("Map Text " <> argument value)@@ -184,6 +193,11 @@       RBool -> pure (plainAtom "Bool")       RNatural -> pure (plainAtom "Natural")       RTime -> pure (plainAtom "UTCTime")+      RDay -> pure (plainAtom "Day")+      RTextSet -> do+        setType <- plannedReference (reference "Data.Set" "Set")+        textType <- plannedReference (reference "Data.Text" "Text")+        pure (RenderedType (setType <> " " <> textType) ApplicationType Set.empty Set.empty Set.empty)       RJson -> pure (plainAtom "Value")       ROptional value -> application "Maybe" <$> render value       RList value -> listType <$> render value
src/Keiro/Dsl/Coverage.hs view
@@ -42,6 +42,7 @@ import Data.Set qualified as Set import Data.Text (Text) import Data.Text qualified as T+import Keiro.Codec.IdDomain (enforcedIdDomainVersion, v5OrV7IdDomainVersion) import Keiro.Dsl.Grammar import Keiro.Dsl.SemanticContract (CheckedService, checkedSpec, checkedTypeGraph, legacyCheckedService) import Keiro.Dsl.SemanticImpact@@ -479,8 +480,8 @@           position = if SegMapKey `elem` (.segments) path then "key" else "value",           nominal = (.name) leaf,           kind = case (.kind) leaf of NominalIdLeaf {} -> "id"; NominalEnumLeaf {} -> "enum"; NominalScalarLeaf {} -> "scalar",-          prefix = case (.kind) leaf of NominalIdLeaf value -> Just value; NominalEnumLeaf {} -> Nothing; NominalScalarLeaf {} -> Nothing,-          domainVersion = case (.kind) leaf of NominalIdLeaf {} -> Just "keiro-dsl/id-domain/typeid-v7/1"; NominalEnumLeaf {} -> Nothing; NominalScalarLeaf {} -> Nothing,+          prefix = case (.kind) leaf of NominalIdLeaf value _ -> Just value; NominalEnumLeaf {} -> Nothing; NominalScalarLeaf {} -> Nothing,+          domainVersion = case (.kind) leaf of NominalIdLeaf _ TypeIdV7 -> Just enforcedIdDomainVersion; NominalIdLeaf _ TypeIdV5OrV7 -> Just v5OrV7IdDomainVersion; NominalEnumLeaf {} -> Nothing; NominalScalarLeaf {} -> Nothing,           canonicalType = case (.ownership) leaf of GeneratedLeaf -> Nothing; ConsumerLeaf binding -> Just (unCanonicalTypeId ((.canonical) binding)),           ownership = case (.ownership) leaf of GeneratedLeaf -> "generated"; ConsumerLeaf {} -> "consumer"         }@@ -605,7 +606,9 @@           concat             [ map (SegArm ((.ctor) arm) ((.tag) arm) :) (maybe [] (jsonPathsFromExpr graph visited) ((.payload) arm))             | arm <- arms-            ]+            ],+        onBare = jsonPathsFromExpr graph visited,+        onRefined = const []       }  jsonPathsFromExpr :: TypeGraph -> Set.Set MappedKey -> ResolvedTypeExpr -> [[PathSeg]]@@ -618,6 +621,8 @@         onBool = [],         onNatural = [],         onTime = [],+        onDay = [],+        onTextSet = [],         onJson = [[]],         onOptional = map (SegOptional :),         onList = map (SegElem :),
src/Keiro/Dsl/Diff.hs view
@@ -77,7 +77,7 @@ import Keiro.Dsl.FoldFingerprint (FoldSurfaceError, aggregateFoldSurfaceForService) import Keiro.Dsl.Grammar import Keiro.Dsl.HaskellName qualified as HaskellName-import Keiro.Dsl.IdDomain (IdDomainContract (..), contractIdDomainContractFor, idDomainContractFor)+import Keiro.Dsl.IdDomain (IdDomainContract (..), contractIdDomainContractFor, contractIdDomainContractForAdmission, idDomainContractForDeclaration) import Keiro.Dsl.LanguageVersion (ParsedSource (..), SourceLanguage (..), declaredLanguageVersionMaybe, languageVersionText, renderParseFailure, sourceFormText) import Keiro.Dsl.MappedDiff (MappedFinding (..), diffMapped, renderMappedSubject) import Keiro.Dsl.Parser (parseSource)@@ -839,15 +839,15 @@             : [nominalUseChange use IdDomainContractChanged detail | use <- nominalBoundaryUses oldSpec newSpec ((.name) newDeclaration)]         | newDeclaration <- (.ids) newSpec,           Just oldDeclaration <- [find ((== (.name) newDeclaration) . (.name)) ((.ids) oldSpec)],-          let oldContract = idDomainContractFor (checkedLanguageContract oldService) ((.prefix) oldDeclaration),-          let newContract = idDomainContractFor (checkedLanguageContract newService) ((.prefix) newDeclaration),+          let oldContract = idDomainContractForDeclaration (checkedLanguageContract oldService) oldDeclaration,+          let newContract = idDomainContractForDeclaration (checkedLanguageContract newService) newDeclaration,           oldContract /= newContract,           let detail =                 "ID admission contract changed "                   <> renderIdDomainContract oldContract                   <> " -> "                   <> renderIdDomainContract newContract-                  <> "; public construction, command decoding, current JSON codecs, and literals use the new contract; historical event replay retains its legacy decoder; old snapshots miss and rebuild from readable events, while rebuilt state that still contains legacy-invalid text remains intentionally uncacheable until overwritten or explicitly migrated"+                  <> renderIdDomainDirection oldContract newContract         ]     contractTypeIdDomainChanges =       [ breaking@@ -898,8 +898,22 @@ contractFieldIdDomain :: Spec -> EffectiveLanguageContract -> ContractField -> Maybe IdDomainContract contractFieldIdDomain spec languageContract field = case (.valueType) field of   CTypeId prefix -> contractIdDomainContractFor languageContract prefix-  CDeclaredId name -> contractTypePrefix spec (CDeclaredId name) >>= contractIdDomainContractFor languageContract+  CDeclaredId name -> do+    declaration <- find ((== name) . (.name)) ((.ids) spec)+    contractIdDomainContractForAdmission languageContract ((.admission) declaration) ((.prefix) declaration)   _ -> Nothing++renderIdDomainDirection :: Maybe IdDomainContract -> Maybe IdDomainContract -> Text+renderIdDomainDirection (Just oldContract) (Just newContract) =+  case (idDomainAdmission oldContract, idDomainAdmission newContract) of+    (TypeIdV7, TypeIdV5OrV7) ->+      "; admission widens: retained values remain readable, but new UUIDv5 writes are an old-reader/new-writer hazard until every old reader is retired"+    (TypeIdV5OrV7, TypeIdV7) ->+      "; admission narrows: retained UUIDv5 history may stop decoding, so the old reader must remain reachable until audited history proves the narrowing safe"+    _ ->+      "; public construction, command decoding, current JSON codecs, and literals use the new contract; audit retained history and rolling-reader compatibility before adoption"+renderIdDomainDirection _ _ =+  "; public construction, command decoding, current JSON codecs, and literals use the new contract; historical event replay retains its legacy decoder; old snapshots miss and rebuild from readable events, while rebuilt state that still contains legacy-invalid text remains intentionally uncacheable until overwritten or explicitly migrated"  renderContractIdDomainChange :: Maybe Text -> ContractType -> Maybe IdDomainContract -> Maybe IdDomainContract -> Text renderContractIdDomainChange resolvedPrefix valueType oldContract newContract =
src/Keiro/Dsl/ExplainBindings.hs view
@@ -18,7 +18,7 @@  import Data.Aeson (FromJSON (..), ToJSON (..), object, withObject, (.:), (.:?), (.=)) import Data.Bifunctor (first)-import Data.List (groupBy, sortOn)+import Data.List (find, groupBy, sortOn) import Data.List.NonEmpty (NonEmpty) import Data.Map.Strict qualified as Map import Data.Set qualified as Set@@ -26,7 +26,7 @@ import Data.Text qualified as T import Keiro.Dsl.Grammar import Keiro.Dsl.HaskellName qualified as HaskellName-import Keiro.Dsl.IdDomain (idDomainContractFor, idDomainVersion)+import Keiro.Dsl.IdDomain (idDomainContractForDeclaration, idDomainVersion) import Keiro.Dsl.NominalType import Keiro.Dsl.SemanticContract (CheckedService, checkedLanguageContract, checkedSpec, checkedTypeGraph, legacyCheckedService) import Keiro.Dsl.TypeGraph@@ -218,7 +218,9 @@         onUnion = \_ arms ->           [ ((.ctor) arm, maybe "constructor case" renderExprType ((.payload) arm))           | arm <- arms-          ]+          ],+        onBare = \expression -> [("value", renderExprType expression)],+        onRefined = const [("value", "ByteString")]       }  renderExprType :: ResolvedTypeExpr -> Text@@ -231,6 +233,8 @@         onBool = "Bool",         onNatural = "Natural",         onTime = "UTCTime",+        onDay = "Day",+        onTextSet = "Set Text",         onJson = "Value",         onOptional = \value -> "Maybe (" <> value <> ")",         onList = \value -> "[" <> value <> "]",@@ -312,7 +316,7 @@         EnumRepresentation {} -> "nominal-enum"         ScalarRepresentation {} -> "nominal-scalar"       representation = case (.representation) nominal of-        IdRepresentation prefix -> "(KindID " <> quoted prefix <> ")"+        IdRepresentation prefix _ -> "(KindID " <> quoted prefix <> ")"         EnumRepresentation {} -> nominalEnumRepresentationModule spec name <> "." <> name <> "Representation"         ScalarRepresentation NominalText -> "Text"         ScalarRepresentation NominalInt -> "Int"@@ -322,7 +326,9 @@       canonical = Just (unCanonicalTypeId ((.canonical) binding))       equalityContract = nominalEqualityIdentityForService (checkedLanguageContract service) nominal       idContract = case (.representation) nominal of-        IdRepresentation prefix -> idDomainVersion <$> idDomainContractFor (checkedLanguageContract service) prefix+        IdRepresentation {} -> do+          declaration <- find ((== name) . (.name)) ((.ids) spec)+          idDomainVersion <$> idDomainContractForDeclaration (checkedLanguageContract service) declaration         _ -> Nothing       bindingEntry = nominalObligation name binding category ((.binding) binding) BindingValue ("NominalBinding " <> consumerType <> " " <> representation) paths (Just (unBindingVersion ((.bindingVersion) binding))) canonical equalityContract idContract       fixtureEntry = nominalObligation name binding category ((.fixtures) binding) FixtureValue ("NominalFixtureCases " <> consumerType) paths Nothing canonical Nothing Nothing
src/Keiro/Dsl/Expression.hs view
@@ -457,6 +457,8 @@       RBool -> Right (AggregateBool, Nothing)       RNatural -> Right (AggregateNatural, Nothing)       RTime -> Right (AggregateTime, Nothing)+      RDay -> unsupported "Day"+      RTextSet -> unsupported "Set Text"       RJson -> unsupported "Json"       ROptional {} -> unsupported "Optional"       RList {} -> unsupported "List"
src/Keiro/Dsl/FoldFingerprint.hs view
@@ -17,6 +17,7 @@ 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@@ -103,10 +104,10 @@         Just declaration <- [Map.lookup (MappedKey typeName) ((.declarations) graph)]       ]     nominalSegments registry =-      [ nominalUseSegment useSite nominal binding+      [ segment       | (useSite, typeName) <- nominalUseNames aggregate,         Just nominal <- [lookupNominalType typeName registry],-        ConsumerNominal binding <- [(.ownership) nominal]+        segment <- nominalUseSegments useSite nominal       ]     nestedNominalSegments graph =       [ nestedNominalUseSegment path leaf@@ -154,7 +155,7 @@  nominalLeafRepresentationSegment :: NominalLeafKind -> Text nominalLeafRepresentationSegment = \case-  NominalIdLeaf prefix -> "id:" <> prefix+  NominalIdLeaf prefix admission -> idRepresentationSegment prefix admission   NominalEnumLeaf constructors ->     "enum:" <> T.intercalate "," [constructor <> "=" <> wire | (constructor, wire) <- NE.toList constructors]   NominalScalarLeaf representation -> case representation of@@ -247,9 +248,28 @@       "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 -> "id:" <> prefix+  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"@@ -257,6 +277,10 @@     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 _) =
src/Keiro/Dsl/Frontend/Internal.hs view
@@ -259,7 +259,7 @@ spanLoc sourceSpan = Loc (startLine sourceSpan)  setIdLoc :: Loc -> IdDecl -> IdDecl-setIdLoc loc IdDecl {name, prefix, binding} = IdDecl {name, prefix, binding, loc}+setIdLoc loc IdDecl {name, prefix, admission, binding} = IdDecl {name, prefix, admission, binding, loc}  setEnumLoc :: Loc -> EnumDecl -> EnumDecl setEnumLoc loc EnumDecl {name, ctors, binding} = EnumDecl {name, ctors, binding, loc}@@ -274,6 +274,8 @@ 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 (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 
src/Keiro/Dsl/Goldens.hs view
@@ -167,7 +167,7 @@ sampleValue graph spec _aggregate resolvedType =   case resolvedType of     AggregateNominal nominal -> case (.representation) nominal of-      IdRepresentation prefix -> String (prefix <> "_01hzy3v7q2e8kaw2m5x0d41n9c")+      IdRepresentation prefix _ -> String (prefix <> "_01hzy3v7q2e8kaw2m5x0d41n9c")       EnumRepresentation constructors -> String (snd (NE.head constructors))       ScalarRepresentation NominalText -> String "sample"       ScalarRepresentation NominalInt -> Number 1@@ -226,7 +226,9 @@                 <> [ (Key.fromText ((.contentsField) encoding), sampleMappedExpression graph payload)                    | payload <- maybeToList ((.payload) firstArm)                    ]-          [] -> emptyObject+          [] -> emptyObject,+        onBare = sampleMappedExpression graph,+        onRefined = const (String "00af")       }   where     includeField field = case (.presence) field of@@ -243,6 +245,8 @@         onBool = Bool True,         onNatural = Number 1,         onTime = String "2026-01-01T00:00:00Z",+        onDay = String "2000-02-29",+        onTextSet = Array (pure (String "sample")),         onJson = emptyObject,         onOptional = id,         onList = \value -> Array (pure value),@@ -254,7 +258,7 @@  sampleNominalLeaf :: NominalLeaf -> Value sampleNominalLeaf leaf = case (.kind) leaf of-  NominalIdLeaf prefix -> String (prefix <> "_01h455vb4pex5vsknk084sn02q")+  NominalIdLeaf prefix _ -> String (prefix <> "_01h455vb4pex5vsknk084sn02q")   NominalEnumLeaf constructors -> String (snd (NE.head constructors))   NominalScalarLeaf NominalText -> String "sample"   NominalScalarLeaf NominalInt -> Number 1
src/Keiro/Dsl/Grammar.hs view
@@ -11,6 +11,7 @@     noLoc,      -- * Shared declarations+    IdAdmission (..),     IdDecl (..),     EnumDecl (..),     RuleDecl (..),@@ -25,6 +26,7 @@     UnionEncoding (..),     WireEnum (..),     WireArm (..),+    RefinedWirePolicy (..),     MappedShape (..),     HaskellSource (..),     NominalBindingDecl (..),@@ -189,6 +191,7 @@ import Data.Text (Text) import Data.Text qualified as T import GHC.Generics (Generic)+import Keiro.Codec.IdDomain (IdAdmission (..)) import Numeric.Natural (Natural)  -- | An identifier in the notation: a type name, register name, command/event@@ -214,10 +217,12 @@ noLoc = Loc 0  -- | @id TransferReservationId prefix=rsv@ — declares an id newtype over 'Text'--- and its prefix tag.+-- and its prefix tag. Candidate syntax may explicitly widen admission to+-- @domain=typeid-v5-or-v7@ without changing generation policy. data IdDecl = IdDecl   { name :: !Name,     prefix :: !Text,+    admission :: !IdAdmission,     binding :: !(Maybe NominalBindingDecl),     loc :: !Loc   }@@ -257,6 +262,8 @@   | TBool   | TNatural   | TTime+  | TDay+  | TTextSet   | TJson   | TOptional !TypeExpr   | TList !TypeExpr@@ -316,10 +323,18 @@   }   deriving stock (Eq, Show, Generic) +-- | Keiro-owned admission and canonicalization policies available to an+-- explicit refined declaration. Each constructor is a frozen wire contract.+data RefinedWirePolicy+  = Base16BytesV1+  deriving stock (Eq, Ord, Show, Generic)+ data MappedShape   = ShapeRecord !Name !UnknownFields ![WireField]   | ShapeEnum ![WireEnum]   | ShapeUnion !UnionEncoding ![WireArm]+  | ShapeBare !TypeExpr+  | ShapeRefined !RefinedWirePolicy   deriving stock (Eq, Show, Generic)  data HaskellSource = HaskellSource@@ -367,6 +382,17 @@         msInitial :: !(Maybe Text),         msShape :: !MappedShape,         msLoc :: !Loc+      }+  | MappedRefined+      { mrName :: !Name,+        mrHaskell :: !(Maybe HaskellSource),+        mrBinding :: !(Maybe Text),+        mrBindingVersion :: !(Maybe Text),+        mrCanonical :: !(Maybe Text),+        mrFixtures :: !(Maybe Text),+        mrInitial :: !(Maybe Text),+        mrPolicy :: !RefinedWirePolicy,+        mrLoc :: !Loc       }   | MappedOpaque       { moName :: !Name,
src/Keiro/Dsl/Harness.hs view
@@ -56,7 +56,7 @@ import Keiro.Dsl.Grammar import Keiro.Dsl.HaskellImport import Keiro.Dsl.HaskellName qualified as HaskellName-import Keiro.Dsl.IdDomain (idDomainContractFor, idDomainSampleText)+import Keiro.Dsl.IdDomain (idDomainContractFor, idDomainContractForAdmission, idDomainSampleText) import Keiro.Dsl.NominalType import Keiro.Dsl.PrettyPrint (renderExpr) import Keiro.Dsl.ProcessReaction (CheckedProcessReaction (..), checkProcessReaction, processReactionFingerprintFrom)@@ -1035,11 +1035,11 @@     generatedIds =       [ nominal       | nominal <- generatedNominalHarnessTypes aggregate,-        IdRepresentation prefix <- [(.representation) nominal],+        IdRepresentation prefix _ <- [(.representation) nominal],         idDomainContractFor ((.languageContract) aggregate) prefix /= Nothing       ]     generatedIdDeclaration nominal = case (.representation) nominal of-      IdRepresentation prefix -> case idDomainContractFor ((.languageContract) aggregate) prefix of+      IdRepresentation prefix admission -> case idDomainContractForAdmission ((.languageContract) aggregate) admission prefix of         Just contract ->           let typeName = (.name) nominal               constantName = generatedIdSampleName nominal@@ -1218,12 +1218,22 @@       ]         <> ( if null enforcedIds                then []-               else ["import Data.KindID qualified as KindID", "import Data.Text qualified as T", "import Keiro.Codec.IdDomain (typeIdV7Domain, validateIdDomainText)"]+               else+                 [ "import Data.KindID qualified as KindID",+                   "import Data.Text qualified as T",+                   "import Keiro.Codec.IdDomain (" <> T.intercalate ", " (idDomainConstructors <> ["validateIdDomainText"]) <> ")"+                 ]            )         <> ["import " <> nominalProjectionModule ((.context) aggregate) <> " qualified as NominalProjections" | not (null (nominalScalarHarnessTypes aggregate)) || not (null enforcedIds)]   where     nominals = consumerNominalHarnessTypes aggregate     enforcedIds = enforcedConsumerNominalIdHarnessTypes aggregate+    idDomainConstructors =+      ["typeIdV7Domain" | any (hasAdmission TypeIdV7) enforcedIds]+        <> ["typeIdV5OrV7Domain" | any (hasAdmission TypeIdV5OrV7) enforcedIds]+    hasAdmission admission nominal = case (.representation) nominal of+      IdRepresentation _ selected -> selected == admission+      _ -> False  hasNominalHarness :: Agg -> Bool hasNominalHarness = not . null . consumerNominalHarnessTypes@@ -1253,7 +1263,7 @@ enforcedConsumerNominalIdHarnessTypes aggregate =   [ nominal   | nominal <- consumerNominalHarnessTypes aggregate,-    IdRepresentation prefix <- [(.representation) nominal],+    IdRepresentation prefix _ <- [(.representation) nominal],     idDomainContractFor ((.languageContract) aggregate) prefix /= Nothing   ] @@ -1296,8 +1306,8 @@           fixtureName = renderHarnessReference aggregate (harnessQualifiedValueReference ((.fixtures) binding))           fixtures = "(NonEmpty.toList (nominalFixtureCases " <> fixtureName <> "))"     idDomainAssertions name bindingName fixtures nominal = case (.representation) nominal of-      IdRepresentation prefix-        | Just contract <- idDomainContractFor ((.languageContract) aggregate) prefix ->+      IdRepresentation prefix admission+        | Just contract <- idDomainContractForAdmission ((.languageContract) aggregate) admission prefix ->             let firstSample = idDomainSampleText contract                 samples = [firstSample, T.dropEnd 1 firstSample <> "r"]                 wrongPrefix = "wrong_" <> T.drop (T.length prefix + 1) firstSample@@ -1310,8 +1320,8 @@                       <> fixtures                   ),                   ( "nominal ID fixture domain agreement: " <> name,-                    "all (\\fixture -> case validateIdDomainText (typeIdV7Domain "-                      <> tshow prefix+                    "all (\\fixture -> case validateIdDomainText ("+                      <> idDomainExpression admission prefix                       <> ") (KindID.toText (nominalToRepresentation "                       <> bindingName                       <> " (nominalFixtureDomain fixture))) of Right () -> True; Left _ -> False) "@@ -1325,12 +1335,12 @@                       <> "]"                   ),                   ( "nominal ID boundary rejects wrong-prefix and normalized text: " <> name,-                    "case (validateIdDomainText (typeIdV7Domain "-                      <> tshow prefix+                    "case (validateIdDomainText ("+                      <> idDomainExpression admission prefix                       <> ") "                       <> tshow wrongPrefix-                      <> ", validateIdDomainText (typeIdV7Domain "-                      <> tshow prefix+                      <> ", validateIdDomainText ("+                      <> idDomainExpression admission prefix                       <> ") (T.toUpper "                       <> tshow firstSample                       <> ")) of (Left _, Left _) -> True; _ -> False"@@ -1344,6 +1354,8 @@             <> " "             <> tshow value             <> " of Right parsed -> parsed; Left _ -> error \"generated canonical ID conformance probe failed to parse\")"+        idDomainExpression TypeIdV7 prefix = "typeIdV7Domain " <> tshow prefix+        idDomainExpression TypeIdV5OrV7 prefix = "typeIdV5OrV7Domain " <> tshow prefix     renderList values =       [ (if index == (0 :: Int) then "  [ " else "  , ") <> "(" <> tshow labelText <> ", " <> expression <> ")"       | (index, (labelText, expression)) <- zip [0 ..] values@@ -1364,15 +1376,16 @@     declarations = mappedHarnessDeclarationsResolved aggregate     structuralWire = [(declaration, shape) | ResolvedStructural declaration shape <- codecMappedDeclarations aggregate]     eitherImports =-      ["isLeft" | wirePoliciesUseIsLeft structuralWire]-        <> ["isRight" | wirePoliciesUseIsRight structuralWire]+      ["isLeft" | wirePoliciesUseIsLeft ((.typeGraph) aggregate) structuralWire]+        <> ["isRight" | wirePoliciesUseIsRight ((.typeGraph) aggregate) structuralWire]     renderImport moduleName names = "import " <> moduleName <> " (" <> T.intercalate ", " names <> ")"  mappedCodecHarnessExports :: Agg -> Text mappedCodecHarnessExports aggregate =   T.concat     [ ", encode" <> (.name) declaration <> "Mapped, decode" <> (.name) declaration <> "Mapped"-    | ResolvedStructural declaration _ <- codecMappedDeclarations aggregate+    | ResolvedStructural declaration shape <- codecMappedDeclarations aggregate,+      case shape of RBare {} -> False; RRefined {} -> False; _ -> True     ]  fixtureSample :: Agg -> QualifiedValueName -> Text@@ -1559,26 +1572,39 @@   RUnion encoding arms ->     map (unionArmAssertion aggregate declaration encoding) arms       <> [unknownFieldAssertion aggregate declaration ((.unknownFields) encoding)]+  RBare {} -> []+  RRefined {} -> [] -wirePoliciesUseIsLeft :: [(StructuralDecl, ResolvedMappedShape)] -> Bool-wirePoliciesUseIsLeft = any $ \(_, shape) -> case shape of+wirePoliciesUseIsLeft :: Maybe TypeGraph -> [(StructuralDecl, ResolvedMappedShape)] -> Bool+wirePoliciesUseIsLeft graph = any $ \(_, shape) -> case shape of   RRecord _ unknownFields fields ->     unknownFields == RejectUnknown-      || any (\field -> (.presence) field == POptional && not (isOptionalType ((.valueType) field))) fields+      || any (\field -> (.presence) field == POptional && not (isOptionalType graph ((.valueType) field))) fields   REnum {} -> True   RUnion encoding _ -> (.unknownFields) encoding == RejectUnknown+  RBare {} -> False+  RRefined {} -> False -wirePoliciesUseIsRight :: [(StructuralDecl, ResolvedMappedShape)] -> Bool-wirePoliciesUseIsRight = any $ \(_, shape) -> case shape of+wirePoliciesUseIsRight :: Maybe TypeGraph -> [(StructuralDecl, ResolvedMappedShape)] -> Bool+wirePoliciesUseIsRight graph = any $ \(_, shape) -> case shape of   RRecord _ unknownFields fields ->     unknownFields == IgnoreUnknown-      || any (\field -> (.presence) field == POptional && isOptionalType ((.valueType) field)) fields+      || any (\field -> (.presence) field == POptional && isOptionalType graph ((.valueType) field)) fields   REnum {} -> False   RUnion encoding _ -> (.unknownFields) encoding == IgnoreUnknown+  RBare {} -> False+  RRefined {} -> False -isOptionalType :: ResolvedTypeExpr -> Bool-isOptionalType ROptional {} = True-isOptionalType _ = False+isOptionalType :: Maybe TypeGraph -> ResolvedTypeExpr -> Bool+isOptionalType graph = go Set.empty+  where+    go _ ROptional {} = True+    go seen (RRef key)+      | key `Set.member` seen = False+      | otherwise = case graph >>= \resolved -> Map.lookup key ((.declarations) resolved) of+          Just (ResolvedStructural _ (RBare expression)) -> go (Set.insert key seen) expression+          _ -> False+    go _ _ = False  recordMissingAssertions :: Agg -> StructuralDecl -> ResolvedWireField -> [Text] recordMissingAssertions aggregate declaration field =@@ -1619,9 +1645,10 @@     decoder = "decode" <> (.name) declaration <> "Mapped"     fixtures = renderHarnessReference aggregate (harnessQualifiedValueReference ((.fixtures) declaration))     encodedSample = encoder <> " (snd (NonEmpty.head (fixtureCases " <> fixtures <> ")))"-    nullExpectation = case (.valueType) field of-      ROptional _ -> "isRight"-      _ -> "isLeft"+    nullExpectation =+      if isOptionalType ((.typeGraph) aggregate) ((.valueType) field)+        then "isRight"+        else "isLeft"  missingExpectedValue :: Agg -> ResolvedWireField -> Text missingExpectedValue aggregate field = case (.onMissing) field of
src/Keiro/Dsl/IdDomain.hs view
@@ -1,11 +1,18 @@ -- | Semantic selection of the published ID runtime contract. module Keiro.Dsl.IdDomain-  ( IdNormalization (..),+  ( IdAdmission (..),+    IdNormalization (..),     IdDomainContract (..),     IdDomainFailure (..),     enforcedIdDomainVersion,+    v5OrV7IdDomainVersion,+    typeIdV7Domain,+    typeIdV5OrV7Domain,     idDomainContractFor,+    idDomainContractForAdmission,+    idDomainContractForDeclaration,     contractIdDomainContractFor,+    contractIdDomainContractForAdmission,     idDomainIdentity,     idDomainIdentitiesForService,     idDomainAcceptsText,@@ -25,13 +32,24 @@  -- | Versions 1 and 2 intentionally return 'Nothing': their generated IDs -- admitted arbitrary text. Runtime-semantics generation 2 is the first--- enforcing contract.+-- enforcing contract. The candidate explicit-domain capability lets a+-- declaration select the wider frozen v5-or-v7 policy. idDomainContractFor :: EffectiveLanguageContract -> Text -> Maybe IdDomainContract idDomainContractFor languageContract prefix   | runtimeProfileHasCapability ((.runtimeProfile) languageContract) GeneratedIdDomainTypeIdV7 =       Just (typeIdV7Domain prefix)   | otherwise = Nothing +idDomainContractForAdmission :: EffectiveLanguageContract -> IdAdmission -> Text -> Maybe IdDomainContract+idDomainContractForAdmission languageContract admission prefix+  | runtimeProfileHasCapability ((.runtimeProfile) languageContract) GeneratedIdDomainTypeIdV7 =+      Just (contractForAdmission admission prefix)+  | otherwise = Nothing++idDomainContractForDeclaration :: EffectiveLanguageContract -> IdDecl -> Maybe IdDomainContract+idDomainContractForDeclaration languageContract declaration =+  idDomainContractForAdmission languageContract ((.admission) declaration) ((.prefix) declaration)+ -- | Public contract DTOs adopt the frozen TypeID-v7 admission contract only -- in runtime semantics 3. Aggregate IDs retain the independent selector above. contractIdDomainContractFor :: EffectiveLanguageContract -> Text -> Maybe IdDomainContract@@ -39,6 +57,15 @@   | runtimeProfileHasCapability ((.runtimeProfile) languageContract) ContractIdDomainTypeIdV7 = Just (typeIdV7Domain prefix)   | otherwise = Nothing +contractIdDomainContractForAdmission :: EffectiveLanguageContract -> IdAdmission -> Text -> Maybe IdDomainContract+contractIdDomainContractForAdmission languageContract admission prefix+  | runtimeProfileHasCapability ((.runtimeProfile) languageContract) ContractIdDomainTypeIdV7 = Just (contractForAdmission admission prefix)+  | otherwise = Nothing++contractForAdmission :: IdAdmission -> Text -> IdDomainContract+contractForAdmission TypeIdV7 = typeIdV7Domain+contractForAdmission TypeIdV5OrV7 = typeIdV5OrV7Domain+ -- | Durable identity for the runtime admission domain of one declaration. -- This is deliberately separate from nominal equality: IDs without equality -- expressions still have a construction and codec contract.@@ -63,17 +90,17 @@     aggregateIdentities =       [ idDomainIdentity ((.name) declaration) contract       | declaration <- (.ids) spec,-        Just contract <- [idDomainContractFor languageContract ((.prefix) declaration)]+        Just contract <- [idDomainContractForDeclaration languageContract declaration]       ]     contractIdentities =       [ idDomainIdentity ("contract:" <> (.name) contractNode <> "." <> (.name) event <> "." <> (.name) field) contract       | NContract contractNode <- (.nodes) spec,         event <- (.events) contractNode,         field <- (.fields) event,-        Just prefix <- [contractFieldPrefix field],-        Just contract <- [contractIdDomainContractFor languageContract prefix]+        Just (admission, prefix) <- [contractFieldAdmission field],+        Just contract <- [contractIdDomainContractForAdmission languageContract admission prefix]       ]-    contractFieldPrefix field = case (.valueType) field of-      CTypeId prefix -> Just prefix-      CDeclaredId name -> (.prefix) <$> find ((== name) . (.name)) ((.ids) spec)+    contractFieldAdmission field = case (.valueType) field of+      CTypeId prefix -> Just (TypeIdV7, prefix)+      CDeclaredId name -> (\declaration -> ((.admission) declaration, (.prefix) declaration)) <$> find ((== name) . (.name)) ((.ids) spec)       _ -> Nothing
src/Keiro/Dsl/LanguageVersion.hs view
@@ -143,6 +143,11 @@   | SeparatedProjectionQueryPolicy   | DelegatedInboxRuntime   | StructuralNominalLeaves+  | BareStructuralMappings+  | CalendarDayMappings+  | TextSetMappings+  | RefinedBase16Mappings+  | ExplicitIdAdmissionDomains   deriving stock (Eq, Ord, Show, Enum, Bounded)  -- | An immutable, explicitly named set of runtime capabilities.  The@@ -175,6 +180,17 @@ capabilityFoldSegment DelegatedInboxRuntime = Nothing -- Structural nominal leaves change generated codecs, not transition/fold semantics. capabilityFoldSegment StructuralNominalLeaves = Nothing+-- Bare structural mappings change generated codecs, not transition/fold semantics.+capabilityFoldSegment BareStructuralMappings = Nothing+-- Calendar-day mappings change generated codecs, not transition/fold semantics.+capabilityFoldSegment CalendarDayMappings = Nothing+-- Text-set mappings change generated codecs, not transition/fold semantics.+capabilityFoldSegment TextSetMappings = Nothing+-- Refined base16 mappings change generated codecs, not transition/fold semantics.+capabilityFoldSegment RefinedBase16Mappings = Nothing+-- Admission identity is declaration-scoped so unrelated candidate services+-- retain their existing fold fingerprints.+capabilityFoldSegment ExplicitIdAdmissionDomains = Nothing  runtimeProfileFoldSegments :: RuntimeSemanticsProfile -> [Text] runtimeProfileFoldSegments RuntimeSemanticsProfile {capabilities} =@@ -303,7 +319,7 @@ profileV5 =   SyntaxProfile     "keiro-dsl/syntax-profile/5"-    (Set.insert WorkqueueFifoHeadsSyntax (Set.insert KeyedMapSyntax (Set.insert ContractDeclaredIdSyntax (Set.insert ProcessReactionSyntax (Set.insert DelegatedInboxSyntax ((.features) profileV4))))))+    (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 =@@ -342,7 +358,7 @@ runtimeProfileV5 =   RuntimeSemanticsProfile     "keiro-dsl/runtime-semantics/5"-    (Set.insert StructuralNominalLeaves (Set.insert DelegatedInboxRuntime ((.capabilities) runtimeProfileV4)))+    (Set.insert ExplicitIdAdmissionDomains (Set.insert RefinedBase16Mappings (Set.insert TextSetMappings (Set.insert CalendarDayMappings (Set.insert BareStructuralMappings (Set.insert StructuralNominalLeaves (Set.insert DelegatedInboxRuntime ((.capabilities) runtimeProfileV4))))))))  -- | Supported versions, derived from 'languageRegistry'. supportedLanguageVersions :: NonEmpty LanguageVersion@@ -392,6 +408,11 @@   | WorkqueueFifoHeadsSyntax   | ContractDeclaredIdSyntax   | KeyedMapSyntax+  | BareStructuralMappingSyntax+  | CalendarDaySyntax+  | TextSetSyntax+  | RefinedBase16Syntax+  | ExplicitIdAdmissionDomainSyntax   deriving stock (Eq, Ord, Show)  -- | The first released contract that owns each grammar feature.
src/Keiro/Dsl/Manifest.hs view
@@ -38,10 +38,12 @@ where  import Data.List (nub, sort)+import Data.Map.Strict qualified as Map import Data.Set qualified as Set import Data.Text (Text) import Data.Text qualified as T import Keiro.Dsl.AggregateType+import Keiro.Dsl.ConsumerTypePlan (ConsumerTypePlan (..), ImportRequirement (..), planConsumerType) import Keiro.Dsl.GeneratedHaskellLanguage (generatedHaskellDefaultExtensions, generatedHaskellDefaultLanguage) import Keiro.Dsl.Grammar import Keiro.Dsl.IdDomain (contractIdDomainContractFor)@@ -49,6 +51,7 @@ import Keiro.Dsl.NominalType import Keiro.Dsl.Scaffold (ScaffoldModule (..)) import Keiro.Dsl.SemanticContract (CheckedService, checkedLanguageContract, checkedSpec, checkedTypeGraph, legacyCheckedService)+import Keiro.Dsl.TypeGraph  -- | Render a Cabal-pasteable manifest from the modules a scaffold run produced -- plus the node kinds present (which imply the dependency set). The first argument@@ -120,10 +123,68 @@  manifestDependenciesForService :: CheckedService -> [Text] manifestDependenciesForService service =-  sort (nub ("base" : (.packages) (consumerPlanForService service) <> concatMap (depsForNode service) ((.nodes) spec)))+  sort (nub ("base" : (.packages) (consumerPlanForService service) <> mappedShapeDependencies service <> concatMap (depsForNode service) ((.nodes) spec)))   where     spec = checkedSpec service +-- Generated structural shapes and codecs compile even when their primitive+-- dependencies are only reachable through a named mapping. Account for every+-- declaration here rather than asking each aggregate, queue, and query root to+-- rediscover the graph transitively.+mappedShapeDependencies :: CheckedService -> [Text]+mappedShapeDependencies service = case checkedTypeGraph service of+  Left _ -> []+  Right graph ->+    Set.toAscList+      ( Set.fromList+          [ package+          | ResolvedStructural _ shape <- Map.elems ((.declarations) graph),+            expression <- shapeExpressions shape,+            Right ConsumerTypePlan {imports = requirements} <- [planConsumerType graph expression],+            ImportRequirement {package} <- requirements+          ]+          <> Set.fromList ["keiro-core" | any usesOwnedCodec (expressions graph)]+          <> Set.fromList+            [ package+            | ResolvedStructural _ (RRefined Base16BytesV1) <- Map.elems ((.declarations) graph),+              package <- ["bytestring", "keiro-core"]+            ]+      )+  where+    expressions graph =+      [ expression+      | ResolvedStructural _ shape <- Map.elems ((.declarations) graph),+        expression <- shapeExpressions shape+      ]+    shapeExpressions =+      foldMappedShape+        MappedShapeAlgebra+          { onRecord = \_ _ fields -> map (.valueType) fields,+            onEnum = const [],+            onUnion = \_ arms -> [payload | arm <- arms, Just payload <- [(.payload) arm]],+            onBare = pure,+            onRefined = const []+          }+    usesOwnedCodec =+      foldTypeExpr+        TypeExprAlgebra+          { onText = False,+            onInt = False,+            onInteger = False,+            onBool = False,+            onNatural = False,+            onTime = False,+            onDay = True,+            onTextSet = True,+            onJson = False,+            onOptional = id,+            onList = id,+            onMap = id,+            onKeyedMap = \_ -> id,+            onRef = const False,+            onNominal = const False+          }+ -- | The dependencies a single node kind implies (see the module header table). depsForNode :: CheckedService -> Node -> [Text] depsForNode service n = case n of@@ -160,14 +221,19 @@  workqueueDependencies :: WorkqueueNode -> [Text] workqueueDependencies workqueue =-  ["containers" | any (typeExprUses isMap) expressions]+  ["containers" | any (typeExprUses isContainer) expressions]+    <> ["text" | any (typeExprUses isTextSet) expressions]     <> ["time" | any (typeExprUses isTime) expressions]   where     expressions = [expression | field <- (.payload) workqueue, TypedQueueExpression expression <- [(.valueType) field]]-    isMap TMap {} = True-    isMap TKeyedMap {} = True-    isMap _ = False+    isContainer TMap {} = True+    isContainer TKeyedMap {} = True+    isContainer TTextSet = True+    isContainer _ = False+    isTextSet TTextSet = True+    isTextSet _ = False     isTime TTime = True+    isTime TDay = True     isTime _ = False     typeExprUses predicate expression =       predicate expression@@ -181,7 +247,8 @@ readModelDependencies :: ReadModelNode -> [Text] readModelDependencies readModel =   ["aeson" | any (typeExprUses isJson) expressions]-    <> ["containers" | any (typeExprUses isMap) expressions]+    <> ["containers" | any (typeExprUses isContainer) expressions]+    <> ["text" | any (typeExprUses isTextSet) expressions]     <> ["time" | any (typeExprUses isTime) expressions]   where     expressions = case (.queryTypes) readModel of@@ -189,10 +256,14 @@       Just queryPair -> [(.input) queryPair, (.result) queryPair]     isJson TJson = True     isJson _ = False-    isMap TMap {} = True-    isMap TKeyedMap {} = True-    isMap _ = False+    isContainer TMap {} = True+    isContainer TKeyedMap {} = True+    isContainer TTextSet = True+    isContainer _ = False+    isTextSet TTextSet = True+    isTextSet _ = False     isTime TTime = True+    isTime TDay = True     isTime _ = False     typeExprUses predicate expression =       predicate expression
src/Keiro/Dsl/MappedCodecPlan.hs view
@@ -67,6 +67,8 @@           onBool = Set.singleton PrimitiveAuthority,           onNatural = Set.singleton PrimitiveAuthority,           onTime = Set.singleton PrimitiveAuthority,+          onDay = Set.singleton PrimitiveAuthority,+          onTextSet = Set.singleton PrimitiveAuthority,           onJson = Set.singleton ExplicitJsonAuthority,           onOptional = id,           onList = id,@@ -89,6 +91,8 @@       RBool -> primitive candidate       RNatural -> primitive candidate       RTime -> primitive candidate+      RDay -> "encodeCalendarDay (" <> candidate <> ")"+      RTextSet -> "encodeTextSet (" <> candidate <> ")"       RJson -> candidate       ROptional nested ->         "maybe Null (\\" <> item depth <> " -> " <> render (depth + 1) nested (item depth) <> ") (" <> candidate <> ")"@@ -139,6 +143,8 @@       RBool -> "parseJSON"       RNatural -> "parseJSON"       RTime -> "parseJSON"+      RDay -> "parseCalendarDay"+      RTextSet -> "parseTextSet"       RJson -> "pure"       ROptional nested ->         "\\" <> value depth <> " -> case " <> value depth <> " of Null -> pure Nothing; " <> other depth <> " -> Just <$> (" <> render (depth + 1) nested <> ") " <> other depth
src/Keiro/Dsl/MappedConsumer.hs view
@@ -16,7 +16,8 @@ import Data.Map.Strict qualified as Map import Data.Text (Text) import Data.Text qualified as T-import Keiro.Dsl.Grammar (HaskellSource (..), Spec)+import Keiro.Codec.IdDomain (v5OrV7IdDomainVersion)+import Keiro.Dsl.Grammar (HaskellSource (..), IdAdmission (..), Spec) import Keiro.Dsl.NominalType import Keiro.Dsl.SemanticContract (CheckedService, checkedSpec, checkedTypeGraph, legacyCheckedService) import Keiro.Dsl.TypeGraph@@ -236,7 +237,8 @@  nominalRepresentationIdentity :: ResolvedNominalType -> Text nominalRepresentationIdentity nominal = case (.representation) nominal of-  IdRepresentation prefix -> "KindID:" <> prefix+  IdRepresentation prefix TypeIdV7 -> "KindID:" <> prefix+  IdRepresentation prefix TypeIdV5OrV7 -> "KindID:" <> prefix <> ":" <> v5OrV7IdDomainVersion   EnumRepresentation constructors ->     "enum:" <> T.intercalate "," [constructor <> "=" <> wire | (constructor, wire) <- NE.toList constructors]   ScalarRepresentation representation -> case representation of
src/Keiro/Dsl/MappedDiff.hs view
@@ -75,6 +75,8 @@   = RecordView !Name !UnknownFields ![ResolvedWireField]   | EnumView ![WireEnum]   | UnionView !UnionEncoding ![ResolvedWireArm]+  | BareView !ExprView+  | RefinedView !RefinedWirePolicy  data ExprView   = ExprText@@ -83,6 +85,8 @@   | ExprBool   | ExprNatural   | ExprTime+  | ExprDay+  | ExprTextSet   | ExprJson   | ExprOptional !ExprView   | ExprList !ExprView@@ -106,7 +110,9 @@     MappedShapeAlgebra       { onRecord = RecordView,         onEnum = EnumView,-        onUnion = UnionView+        onUnion = UnionView,+        onBare = BareView . exprView,+        onRefined = RefinedView       }  exprView :: ResolvedTypeExpr -> ExprView@@ -119,6 +125,8 @@         onBool = ExprBool,         onNatural = ExprNatural,         onTime = ExprTime,+        onDay = ExprDay,+        onTextSet = ExprTextSet,         onJson = ExprJson,         onOptional = ExprOptional,         onList = ExprList,@@ -263,6 +271,18 @@     | oldEncoding /= newEncoding     ]       ++ diffUnion paths declaration oldArms newArms+  (BareView oldExpression, BareView newExpression) ->+    diffExprViews paths declaration "value" oldExpression newExpression+  (RefinedView oldPolicy, RefinedView newPolicy)+    | oldPolicy == newPolicy -> []+    | otherwise ->+        [ finding+            paths+            declaration+            "value"+            MappedFieldTypeChanged+            "refined wire policy changed; retain the old reader and version every affected persisted surface"+        ]   _ ->     [ finding         paths
src/Keiro/Dsl/NominalType.hs view
@@ -36,13 +36,13 @@ import Data.Text qualified as T import GHC.Generics (Generic) import Keiro.Dsl.Grammar-import Keiro.Dsl.IdDomain (enforcedIdDomainVersion)+import Keiro.Dsl.IdDomain (enforcedIdDomainVersion, v5OrV7IdDomainVersion) import Keiro.Dsl.LanguageVersion (RuntimeCapability (..), runtimeProfileHasCapability) import Keiro.Dsl.SemanticContract (CheckedService, EffectiveLanguageContract (..), checkedLanguageContract, checkedSpec) import Keiro.Dsl.TypeGraph  data NominalRepresentation-  = IdRepresentation !Text+  = IdRepresentation !Text !IdAdmission   | EnumRepresentation !(NonEmpty (Name, Text))   | ScalarRepresentation !NominalScalarRepresentation   deriving stock (Eq, Ord, Show, Generic)@@ -62,7 +62,7 @@ data NominalEqualityDomain   = LegacyUnrestrictedTextDomain   | TypeIdTextDomain !Text-  | EnforcedTypeIdV7TextDomain !Text !Text+  | EnforcedTypeIdTextDomain !Text !Text   | FiniteTextDomain !(NonEmpty Text)   deriving stock (Eq, Ord, Show, Generic) @@ -103,13 +103,13 @@  nominalEqualityContractForService :: EffectiveLanguageContract -> ResolvedNominalType -> Maybe CheckedNominalEquality nominalEqualityContractForService languageContract nominal = case (.representation) nominal of-  IdRepresentation prefix ->+  IdRepresentation prefix admission ->     Just       CheckedNominalEquality         { keyRepresentation = NominalTextEqualityKey,           domain =             if enforcesNominalEqualityV2-              then EnforcedTypeIdV7TextDomain prefix enforcedIdDomainVersion+              then EnforcedTypeIdTextDomain prefix (idAdmissionVersion admission)               else case (.ownership) nominal of                 GeneratedNominal -> LegacyUnrestrictedTextDomain                 ConsumerNominal {} -> TypeIdTextDomain prefix,@@ -148,8 +148,14 @@     renderEqualityKey NominalTextEqualityKey = "Text"     renderEqualityDomain LegacyUnrestrictedTextDomain = "legacy-unrestricted-text"     renderEqualityDomain (TypeIdTextDomain prefix) = "typeid-text:" <> prefix-    renderEqualityDomain (EnforcedTypeIdV7TextDomain prefix contractVersion) =-      "typeid-v7-text:" <> prefix <> ":" <> contractVersion+    renderEqualityDomain (EnforcedTypeIdTextDomain prefix contractVersion) =+      ( if contractVersion == enforcedIdDomainVersion+          then "typeid-v7-text:"+          else "typeid-v5-or-v7-text:"+      )+        <> prefix+        <> ":"+        <> contractVersion     renderEqualityDomain (FiniteTextDomain values) = "finite-text:" <> T.intercalate "," (NE.toList values)     renderOwnership GeneratedNominal = "owner=generated"     renderOwnership (ConsumerNominal binding) =@@ -245,7 +251,7 @@   ResolvedNominalType     { name = (.name) leaf,       representation = case (.kind) leaf of-        NominalIdLeaf prefix -> IdRepresentation prefix+        NominalIdLeaf prefix admission -> IdRepresentation prefix admission         NominalEnumLeaf constructors -> EnumRepresentation constructors         NominalScalarLeaf representation -> ScalarRepresentation representation,       ownership = case (.ownership) leaf of@@ -272,10 +278,12 @@  mappedName :: MappedDecl -> Name mappedName MappedStructural {msName = name} = name+mappedName MappedRefined {mrName = name} = name mappedName MappedOpaque {moName = name} = name  mappedLoc :: MappedDecl -> Loc mappedLoc MappedStructural {msLoc = loc} = loc+mappedLoc MappedRefined {mrLoc = loc} = loc mappedLoc MappedOpaque {moLoc = loc} = loc  nodeIdentityLocal :: Node -> (Text, Name, Loc)@@ -297,3 +305,7 @@   NProjectionOwner value -> ("projection-owner", (.name) value, (.loc) value)   NWorkflow value -> ("workflow", (.id) value, workflowNodeLoc value)   NOperation value -> ("operation", (.name) value, (.loc) value)++idAdmissionVersion :: IdAdmission -> Text+idAdmissionVersion TypeIdV7 = enforcedIdDomainVersion+idAdmissionVersion TypeIdV5OrV7 = v5OrV7IdDomainVersion
src/Keiro/Dsl/Parser/Declaration.hs view
@@ -6,6 +6,7 @@   ) where +import Data.Maybe (fromMaybe) import Keiro.Dsl.Frontend.Internal (FrontendContext) import Keiro.Dsl.Grammar import Keiro.Dsl.LanguageVersion@@ -14,7 +15,7 @@ import Keiro.Dsl.Parser.Mapped (pUsingNominalBinding) import Keiro.Dsl.Source (Located, mapLocated) import Keiro.Dsl.Syntax (SurfaceElement (..))-import Text.Megaparsec (many, sepBy1)+import Text.Megaparsec (choice, many, sepBy1)  pIdDecl :: FrontendContext -> P IdDecl pIdDecl context = do@@ -24,8 +25,20 @@   _ <- symbol "prefix"   _ <- symbol "="   pfx <- wireWord+  admission <-+    fromMaybe TypeIdV7+      <$> optionalLanguageFeature context ExplicitIdAdmissionDomainSyntax "domain" pIdAdmission   binding <- optionalLanguageFeature context NominalBindingSyntax "using" pUsingNominalBinding-  pure IdDecl {name = name, prefix = pfx, binding = binding, loc = loc}+  pure IdDecl {name = name, prefix = pfx, admission = admission, binding = binding, loc = loc}++pIdAdmission :: P IdAdmission+pIdAdmission = do+  keyword "domain"+  _ <- symbol "="+  choice+    [ TypeIdV5OrV7 <$ symbol "typeid-v5-or-v7",+      TypeIdV7 <$ symbol "typeid-v7"+    ]  pEnumDecl :: FrontendContext -> P EnumDecl pEnumDecl context = do
src/Keiro/Dsl/Parser/Mapped.hs view
@@ -18,7 +18,7 @@ -- Consumer-owned mapped and nominal types -------------------------------------------------------------------------------- -data MappedKind = MappedRecord | MappedEnum | MappedUnion+data MappedKind = MappedRecord | MappedEnum | MappedUnion | MappedBare  data MappedClause   = MCHaskell HaskellSource@@ -30,6 +30,7 @@   | MCCodec Text   | MCCodecVersion Text   | MCShape MappedShape+  | MCRefinedPolicy RefinedWirePolicy  pMappedTopItem :: FrontendContext -> P SurfaceTopItem pMappedTopItem context = do@@ -43,6 +44,7 @@           requireLanguageFeatureAt context NominalBindingSyntax (spanOf marker)           fail "unreachable enabled nominal syntax in predecessor grammar",       SurfaceMapped <$> pMappedStructural context loc,+      SurfaceMapped <$> pMappedRefined context loc,       SurfaceMapped <$> pMappedOpaque loc     ] @@ -53,7 +55,8 @@     choice       [ MappedRecord <$ keyword "record",         MappedEnum <$ keyword "enum",-        MappedUnion <$ keyword "union"+        MappedUnion <$ keyword "union",+        MappedBare <$ languageFeatureKeyword context BareStructuralMappingSyntax "value"       ]   name <- ident   clauses <- braces (many (pStructuralClause context kind))@@ -98,6 +101,31 @@         moLoc = loc       } +pMappedRefined :: FrontendContext -> Loc -> P MappedDecl+pMappedRefined context loc = do+  languageFeatureKeyword context RefinedBase16Syntax "refined"+  name <- ident+  clauses <- braces (many pRefinedClause)+  hs <- oneClause "haskell" (\case MCHaskell value -> Just value; _ -> Nothing) clauses+  binding <- oneClause "binding" (\case MCBinding value -> Just value; _ -> Nothing) clauses+  bindingVersion <- oneClause "binding-version" (\case MCBindingVersion value -> Just value; _ -> Nothing) clauses+  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+  policy <- requiredClause "wire" (\case MCRefinedPolicy value -> Just value; _ -> Nothing) clauses+  pure+    MappedRefined+      { mrName = name,+        mrHaskell = hs,+        mrBinding = binding,+        mrBindingVersion = bindingVersion,+        mrCanonical = canonical,+        mrFixtures = fixtures,+        mrInitial = initial,+        mrPolicy = policy,+        mrLoc = loc+      }+ pNominalScalarAfterMapped :: Loc -> P NominalScalarDecl pNominalScalarAfterMapped loc = do   keyword "nominal"@@ -172,6 +200,18 @@       MCInitial <$> pQuotedFact "initial"     ] +pRefinedClause :: P MappedClause+pRefinedClause =+  choice+    [ MCHaskell <$> pHaskellSource,+      MCBindingVersion <$> pQuotedFact "binding-version",+      MCBinding <$> pQuotedFact "binding",+      MCCanonical <$> pQuotedFact "canonical-type",+      MCFixtures <$> pQuotedFact "fixtures",+      MCInitial <$> pQuotedFact "initial",+      MCRefinedPolicy Base16BytesV1 <$ (keyword "wire" *> keyword "base16-bytes")+    ]+ pHaskellSource :: P HaskellSource pHaskellSource = do   keyword "haskell"@@ -215,6 +255,7 @@       unknownFields <- pUnknownFieldsFact       arms <- braces (many (pWireArm context))       pure (ShapeUnion (TaggedObject tagField contentsField unknownFields) arms)+    MappedBare -> ShapeBare <$> pMappedTypeExpr context  pUnknownFieldsFact :: P UnknownFields pUnknownFieldsFact = do@@ -271,6 +312,8 @@       TBool <$ keyword "Bool",       TNatural <$ keyword "Natural",       TTime <$ (keyword "Time" <|> keyword "UTCTime"),+      TDay <$ languageFeatureKeyword context CalendarDaySyntax "Day",+      TTextSet <$ pTextSet,       TJson <$ keyword "Json",       TRef <$> ident     ]@@ -291,9 +334,14 @@           TBool <$ keyword "Bool",           TNatural <$ keyword "Natural",           TTime <$ (keyword "Time" <|> keyword "UTCTime"),+          TDay <$ languageFeatureKeyword context CalendarDaySyntax "Day",+          TTextSet <$ pTextSet,           TJson <$ keyword "Json",           TRef <$> ident         ]+    pTextSet = do+      languageFeatureKeyword context TextSetSyntax "Set"+      keyword "Text"  languageFeatureKeyword :: FrontendContext -> LanguageFeature -> Text -> P () languageFeatureKeyword context feature spelling = do
src/Keiro/Dsl/PrettyPrint.hs view
@@ -109,12 +109,20 @@ docId :: IdDecl -> Doc ann docId d =   case (.binding) d of-    Nothing -> "id" <+> pretty ((.name) d) <+> ("prefix=" <> pretty ((.prefix) d))+    Nothing -> idHeader     Just binding ->       vsep $-        ["id" <+> pretty ((.name) d) <+> ("prefix=" <> pretty ((.prefix) d)) <+> "using" <+> "{"]+        [idHeader <+> "using" <+> "{"]           ++ map (indent 2) (docNominalBindingFacts binding)           ++ ["}"]+  where+    idHeader =+      "id"+        <+> pretty ((.name) d)+        <+> ("prefix=" <> pretty ((.prefix) d))+        <> case (.admission) d of+          TypeIdV7 -> mempty+          TypeIdV5OrV7 -> " domain=typeid-v5-or-v7"  docEnum :: EnumDecl -> Doc ann docEnum d =@@ -149,6 +157,16 @@       ++ maybe [] (pure . indent 2 . docQuotedFact "fixtures") fixtures       ++ maybe [] (pure . indent 2 . docQuotedFact "initial") initial       ++ [indent 2 (docMappedShape shape), "}"]+docMapped MappedRefined {mrName = name, mrHaskell = haskell, mrBinding = binding, mrBindingVersion = bindingVersion, mrCanonical = canonical, mrFixtures = fixtures, mrInitial = initial, mrPolicy = policy} =+  vsep $+    ["mapped refined" <+> pretty name <+> "{"]+      ++ maybe [] (pure . indent 2 . docHaskellSource) haskell+      ++ maybe [] (pure . indent 2 . docQuotedFact "binding") binding+      ++ maybe [] (pure . indent 2 . docQuotedFact "binding-version") bindingVersion+      ++ maybe [] (pure . indent 2 . docQuotedFact "canonical-type") canonical+      ++ 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} =   vsep $     ["mapped opaque" <+> pretty name <+> "{"]@@ -184,6 +202,8 @@ docShapeKind (ShapeRecord _ _ _) = "record" docShapeKind (ShapeEnum _) = "enum" docShapeKind (ShapeUnion _ _) = "union"+docShapeKind (ShapeBare _) = "value"+docShapeKind (ShapeRefined _) = "value"  docHaskellSource :: HaskellSource -> Doc ann docHaskellSource source =@@ -217,7 +237,12 @@     ]       ++ map (indent 2 . docWireArm) arms       ++ ["}"]+docMappedShape (ShapeBare expression) = "wire" <+> docTypeExpr expression+docMappedShape (ShapeRefined policy) = "wire" <+> docRefinedWirePolicy policy +docRefinedWirePolicy :: RefinedWirePolicy -> Doc ann+docRefinedWirePolicy Base16BytesV1 = "base16-bytes"+ docUnknownFields :: UnknownFields -> Doc ann docUnknownFields RejectUnknown = "reject" docUnknownFields IgnoreUnknown = "ignore"@@ -263,6 +288,8 @@ docTypeExpr TBool = "Bool" docTypeExpr TNatural = "Natural" docTypeExpr TTime = "Time"+docTypeExpr TDay = "Day"+docTypeExpr TTextSet = "Set Text" docTypeExpr TJson = "Json" docTypeExpr (TOptional value) = "Optional" <+> docTypeArgument value docTypeExpr (TList value) = "List" <+> docTypeArgument value
src/Keiro/Dsl/ProcessReaction.hs view
@@ -336,6 +336,7 @@       "Bool" -> TBool       "Natural" -> TNatural       "Time" -> TTime+      "Day" -> TDay       name -> TRef name     payloadName (PayloadConstant name _) = name     payloadName (PayloadTyped name _) = name
src/Keiro/Dsl/ReadModelQueryContract.hs view
@@ -135,6 +135,8 @@         onBool = Set.empty,         onNatural = Set.empty,         onTime = Set.empty,+        onDay = Set.empty,+        onTextSet = Set.empty,         onJson = Set.empty,         onOptional = id,         onList = id,
src/Keiro/Dsl/ReplayImpact.hs view
@@ -30,6 +30,7 @@ import Data.Set qualified as Set import Data.Text (Text) import Data.Text qualified as Text+import Keiro.Codec.IdDomain (v5OrV7IdDomainVersion) import Keiro.Dsl.AggregateType import Keiro.Dsl.CanonicalEncoding (canonicalExpr, canonicalTransition) import Keiro.Dsl.FieldIdentity (ResolvedFieldIdentity (..), resolveAggregateFieldIdentity)@@ -336,7 +337,8 @@  nominalRepresentationSurface :: NominalRepresentation -> Text nominalRepresentationSurface representation = case representation of-  IdRepresentation prefix -> "id:" <> prefix+  IdRepresentation prefix TypeIdV7 -> "id:" <> prefix+  IdRepresentation prefix TypeIdV5OrV7 -> "id:" <> prefix <> ";domain=" <> v5OrV7IdDomainVersion   EnumRepresentation constructors -> "enum:" <> Text.intercalate "," [constructor <> "=" <> wire | (constructor, wire) <- NE.toList constructors]   ScalarRepresentation scalar -> case scalar of     NominalText -> "scalar:Text"
src/Keiro/Dsl/RouterSelection.hs view
@@ -39,8 +39,8 @@ import Data.Text (Text) import Data.Text qualified as T import Data.Text.Encoding qualified as Text-import Data.TypeID qualified as TypeID import GHC.Generics (Generic)+import Keiro.Codec.IdDomain (typeIdV5OrV7Domain, typeIdV7Domain, validateIdDomainText) import Keiro.Dsl.AggregateType import Keiro.Dsl.Grammar import Keiro.Dsl.LanguageVersion (LanguageFeature (DeclarativeRouterSelectionSyntax), languageSupportsFeature)@@ -455,14 +455,15 @@       _ -> False      resolveIdLiteral loc typeName value = case Map.lookup typeName ((.nominalLeaves) graph) of-      Just NominalLeaf {kind = NominalIdLeaf prefix} -> case TypeID.parseText value of+      Just NominalLeaf {kind = NominalIdLeaf prefix admission} -> case validateIdDomainText (contract admission prefix) value of         Left parseError -> selectionFailure loc SelectionExpressionTypeMismatch ("invalid " <> typeName <> " literal: " <> T.pack (show parseError))-        Right parsed-          | TypeID.getPrefix parsed /= prefix -> selectionFailure loc SelectionExpressionTypeMismatch ("ID literal prefix must be '" <> prefix <> "'")-          | otherwise -> literal loc (SelectionNominal typeName) (CheckedIdLiteral typeName value)+        Right () -> literal loc (SelectionNominal typeName) (CheckedIdLiteral typeName value)       Just _ -> selectionFailure loc SelectionExpressionTypeMismatch ("selection ID literal type '" <> typeName <> "' is not a declared ID")       Nothing -> selectionFailure loc SelectionExpressionTypeMismatch ("unknown selection ID literal type '" <> typeName <> "'") +    contract TypeIdV7 = typeIdV7Domain+    contract TypeIdV5OrV7 = typeIdV5OrV7Domain+ resolvePath :: TypeGraph -> Loc -> ResolvedTypeExpr -> [Name] -> Either (NonEmpty RouterSelectionDiagnostic) (SelectionScalarType, [CheckedSelectionPathSegment]) resolvePath graph diagnosticLoc = go []   where@@ -519,6 +520,8 @@   RBool -> Just SelectionBool   RNatural -> Just SelectionNatural   RTime -> Just SelectionTime+  RDay -> Nothing+  RTextSet -> Nothing   RJson -> Nothing   ROptional {} -> Nothing   RList {} -> Nothing@@ -619,6 +622,8 @@   RBool -> atom "Bool"   RNatural -> atom "Natural"   RTime -> atom "Time"+  RDay -> atom "Day"+  RTextSet -> atom "Set(Text)"   RJson -> atom "Json"   ROptional value -> tuple [atom "Optional", canonicalResolvedType value]   RList value -> tuple [atom "List", canonicalResolvedType value]
src/Keiro/Dsl/Scaffold.hs view
@@ -52,6 +52,7 @@     obsoleteGeneratedOutputHooks,     obsoleteGeneratedOutputHooksForService,     scaffoldProcess,+    scaffoldProcessForService,     scaffoldRouter,     scaffoldRouterForService,     scaffoldContract,@@ -130,7 +131,7 @@ import Keiro.Dsl.Grammar import Keiro.Dsl.HaskellImport import Keiro.Dsl.HaskellName qualified as HaskellName-import Keiro.Dsl.IdDomain (IdDomainContract, contractIdDomainContractFor, idDomainContractFor, idDomainPrefix, idDomainSampleText)+import Keiro.Dsl.IdDomain (IdDomainContract, contractIdDomainContractFor, idDomainAdmission, idDomainContractFor, idDomainContractForAdmission, idDomainPrefix, idDomainSampleText) import Keiro.Dsl.LanguageVersion (SourceLanguage (LegacyUnversioned), languageVersionText) import Keiro.Dsl.MappedCodecPlan import Keiro.Dsl.NominalType@@ -934,7 +935,9 @@                   BranchUnion                     ((.tagField) encoding)                     ((.contentsField) encoding)-                    [BranchArm ((.tag) arm) (branchExpr graph <$> (.payload) arm) | arm <- arms]+                    [BranchArm ((.tag) arm) (branchExpr graph <$> (.payload) arm) | arm <- arms],+                onBare = branchExpr graph,+                onRefined = const BranchScalar               }             shape,         onOpaqueDecl = const BranchScalar@@ -950,6 +953,8 @@         onBool = BranchScalar,         onNatural = BranchScalar,         onTime = BranchScalar,+        onDay = BranchScalar,+        onTextSet = BranchScalar,         onJson = BranchScalar,         onOptional = BranchOptional,         onList = BranchList,@@ -1153,9 +1158,15 @@         MappedShapeAlgebra           { onRecord = \constructor _ fields -> [recordCase toShapeDirection constructor fields],             onEnum = \entries -> map (enumCase toShapeDirection . (.ctor)) entries,-            onUnion = \_ arms -> map (unionCase toShapeDirection) arms+            onUnion = \_ arms -> map (unionCase toShapeDirection) arms,+            onBare = \_ -> [bareCase toShapeDirection],+            onRefined = const [bareCase toShapeDirection]           }         shape+    bareCase toShapeDirection =+      variable <> " -> " <> holeFor toShapeDirection "value"+      where+        variable = if toShapeDirection then "_domainValue" else "_shapeValue"     recordCase toShapeDirection constructor fields =       sourceCtor         <> arguments variables@@ -1236,7 +1247,9 @@     MappedShapeAlgebra       { onRecord = \constructor _ _ -> [constructor],         onEnum = map (.ctor),-        onUnion = \_ -> map (.ctor)+        onUnion = \_ -> map (.ctor),+        onBare = const [],+        onRefined = const []       }  structuralShapeReferences :: Context -> StructuralDecl -> ResolvedMappedShape -> [HaskellReference]@@ -1255,7 +1268,9 @@     MappedShapeAlgebra       { onRecord = \_ _ -> map (.haskell),         onEnum = const [],-        onUnion = \_ _ -> []+        onUnion = \_ _ -> [],+        onBare = const [],+        onRefined = const []       }  nominalRepresentationEncoderReference :: Context -> ResolvedNominalType -> HaskellReference@@ -1298,7 +1313,7 @@   where     domainType = renderReferenceOrDie importPlan (haskellTypeReference ((.haskell) binding))     representationType = case (.representation) nominal of-      IdRepresentation prefix -> "(KindID " <> tshow prefix <> ")"+      IdRepresentation prefix _ -> "(KindID " <> tshow prefix <> ")"       EnumRepresentation {} ->         renderReferenceOrDie           importPlan@@ -1404,8 +1419,8 @@         [ (nominal, contract)         | owner <- owners,           let nominal = (.declaration) owner,-          IdRepresentation prefix <- [(.representation) nominal],-          Just contract <- [idDomainContractFor languageContract prefix]+          IdRepresentation prefix admission <- [(.representation) nominal],+          Just contract <- [idDomainContractForAdmission languageContract admission prefix]         ]   where     spec = checkedSpec service@@ -1457,6 +1472,8 @@     shapeExpressions (RRecord _ _ fields) = map (.valueType) fields     shapeExpressions (RUnion _ arms) = [payload | arm <- arms, payload <- maybe [] pure ((.payload) arm)]     shapeExpressions REnum {} = []+    shapeExpressions (RBare expression) = [expression]+    shapeExpressions RRefined {} = []  emitStructuralNominalLeaves :: Context -> Set.Set Name -> [NominalLeaf] -> Text emitStructuralNominalLeaves ctx keyedNames leaves =@@ -1495,7 +1512,7 @@         <> ["import Data.KindID qualified as KindID" | any isConsumerId leaves]         <> ["import Data.Text (Text)" | not (Set.null keyedNames)]         <> ["import Data.Text qualified as T" | any isGeneratedId leaves]-        <> ["import Keiro.Codec.IdDomain (parseKindIdV7Text)" | any isConsumerId leaves]+        <> ["import Keiro.Codec.IdDomain (" <> T.intercalate ", " consumerIdImports <> ")" | not (null consumerIdImports)]         <> ["import Keiro.Codec.Nominal (nominalFromRepresentation, nominalToRepresentation)" | any isConsumer leaves]         <> T.lines (renderPlannedImports importPlan)     aesonImports =@@ -1505,7 +1522,7 @@     leafReferences leaf =       nominalLeafTypeReference ctx leaf         : case ((.kind) leaf, (.ownership) leaf) of-          (NominalIdLeaf _, GeneratedLeaf) ->+          (NominalIdLeaf _ _, GeneratedLeaf) ->             [ generatedNominalValueReference ("parse" <> (.name) leaf),               generatedNominalValueReference (lowerFirst ((.name) leaf) <> "Text")             ]@@ -1525,8 +1542,8 @@     generatedNominalConstructorReference occurrence =       HaskellReference (generatedNominalModule ctx) occurrence ConstructorNamespace RequireQualified     emitLeaf leaf = case ((.kind) leaf, (.ownership) leaf) of-      (NominalIdLeaf _, GeneratedLeaf) -> emitGeneratedId leaf-      (NominalIdLeaf prefix, ConsumerLeaf binding) -> emitConsumerId leaf prefix binding+      (NominalIdLeaf _ _, GeneratedLeaf) -> emitGeneratedId leaf+      (NominalIdLeaf prefix admission, ConsumerLeaf binding) -> emitConsumerId leaf prefix admission binding       (NominalEnumLeaf constructors, GeneratedLeaf) -> emitGeneratedEnum leaf constructors       (NominalEnumLeaf constructors, ConsumerLeaf binding) -> emitConsumerEnum leaf constructors binding       (NominalScalarLeaf _, ConsumerLeaf binding) -> emitConsumerScalar leaf binding@@ -1554,7 +1571,7 @@                 ]               else []         )-    emitConsumerId leaf prefix binding =+    emitConsumerId leaf prefix admission binding =       nl         ( [ encodeName leaf <> " :: " <> leafType leaf <> " -> Value",             encodeName leaf <> " = String . KindID.toText . nominalToRepresentation " <> bindingValue binding,@@ -1562,7 +1579,7 @@             "",             parseName leaf <> " :: Value -> Parser " <> leafType leaf,             parseName leaf <> " = withText " <> tshow ((.name) leaf) <> " $ \\input ->",-            "  case parseKindIdV7Text @" <> tshow prefix <> " input of",+            "  case " <> parseKindIdTextCall admission prefix "input" <> " of",             "    Left reason -> fail (show reason)",             "    Right representation -> pure (nominalFromRepresentation " <> bindingValue binding <> " representation)",             "{-# NOINLINE " <> parseName leaf <> " #-}"@@ -1575,7 +1592,7 @@                   "{-# NOINLINE " <> renderKeyName leaf <> " #-}",                   "",                   parseKeyName leaf <> " :: Text -> Parser " <> leafType leaf,-                  parseKeyName leaf <> " input = case parseKindIdV7Text @" <> tshow prefix <> " input of",+                  parseKeyName leaf <> " input = case " <> parseKindIdTextCall admission prefix "input" <> " of",                   "  Left reason -> fail (show reason)",                   "  Right representation -> pure (nominalFromRepresentation " <> bindingValue binding <> " representation)",                   "{-# NOINLINE " <> parseKeyName leaf <> " #-}"@@ -1643,6 +1660,8 @@     isConsumerScalar leaf = case ((.kind) leaf, (.ownership) leaf) of (NominalScalarLeaf {}, ConsumerLeaf {}) -> True; _ -> False     isId leaf = case (.kind) leaf of NominalIdLeaf {} -> True; NominalEnumLeaf {} -> False; NominalScalarLeaf {} -> False     isEnum leaf = case (.kind) leaf of NominalEnumLeaf {} -> True; NominalIdLeaf {} -> False; NominalScalarLeaf {} -> False+    consumerIdAdmissions = [admission | NominalLeaf {kind = NominalIdLeaf _ admission, ownership = ConsumerLeaf {}} <- leaves]+    consumerIdImports = idDomainParserImports consumerIdAdmissions  generatedNominalInternalModule :: Context -> Text generatedNominalInternalModule ctx = generatedNominalModule ctx <> ".Internal"@@ -1671,17 +1690,25 @@       | owner <- owners,         let nominal = (.declaration) owner,         case (.representation) nominal of-          IdRepresentation prefix -> not (isJust (idDomainContractFor languageContract prefix))+          IdRepresentation prefix _ -> not (isJust (idDomainContractFor languageContract prefix))           EnumRepresentation {} -> True           ScalarRepresentation {} -> False       ]     hasExactEnum = any (\owner -> case (.representation) ((.declaration) owner) of EnumRepresentation {} -> True; _ -> False) exactEqualityOwners-    hasExactEnforcedId = any (\owner -> case (.representation) ((.declaration) owner) of IdRepresentation prefix -> isJust (idDomainContractFor languageContract prefix); _ -> False) exactEqualityOwners+    hasExactEnforcedId = any (\owner -> case (.representation) ((.declaration) owner) of IdRepresentation prefix _ -> isJust (idDomainContractFor languageContract prefix); _ -> False) exactEqualityOwners+    equalityIdDomainImports =+      ["idDomainTextPattern"]+        <> idDomainConstructorImports+          [ admission+          | owner <- exactEqualityOwners,+            IdRepresentation prefix admission <- [(.representation) ((.declaration) owner)],+            isJust (idDomainContractFor languageContract prefix)+          ]     enforcingIds =       [ nominal       | owner <- owners,         let nominal = (.declaration) owner,-        IdRepresentation prefix <- [(.representation) nominal],+        IdRepresentation prefix _ <- [(.representation) nominal],         Just _ <- [idDomainContractFor languageContract prefix]       ]     moduleHeader@@ -1698,7 +1725,7 @@         nominal = (.declaration) owner         name = (.name) nominal         baseExports = case (.representation) nominal of-          IdRepresentation prefix+          IdRepresentation prefix _             | Just _ <- idDomainContractFor languageContract prefix ->                 [name, "parse" <> name, "mk" <> name, nominalTextName nominal]           _ -> [name <> " (..)", nominalTextName nominal]@@ -1722,7 +1749,7 @@         <> [ "import Keiki.ProjectionDomain (" <> T.intercalate ", " projectionDomainImports <> ")"            | not (null projectionDomainImports)            ]-        <> ["import Keiro.Codec.IdDomain (idDomainTextPattern, typeIdV7Domain)" | hasExactEnforcedId]+        <> ["import Keiro.Codec.IdDomain (" <> T.intercalate ", " equalityIdDomainImports <> ")" | hasExactEnforcedId]       where         coreImports =           ["FieldProjection (..)", "FieldWitness"]@@ -1745,16 +1772,16 @@     emitOwner owner = emitGeneratedNominal languageContract ((.equalityUsed) owner) ((.declaration) owner)     exactOwner nominal = case (.representation) nominal of       EnumRepresentation {} -> True-      IdRepresentation prefix -> isJust (idDomainContractFor languageContract prefix)+      IdRepresentation prefix _ -> isJust (idDomainContractFor languageContract prefix)       ScalarRepresentation {} -> False     nominalUsesDeriveAnyClass nominal = case (.representation) nominal of-      IdRepresentation prefix -> not (isJust (idDomainContractFor languageContract prefix))+      IdRepresentation prefix _ -> not (isJust (idDomainContractFor languageContract prefix))       EnumRepresentation {} -> True       ScalarRepresentation {} -> False  emitGeneratedNominal :: EffectiveLanguageContract -> Bool -> ResolvedNominalType -> Text emitGeneratedNominal languageContract equalityUsed nominal = case (.representation) nominal of-  IdRepresentation prefix+  IdRepresentation prefix _     | Just _ <- idDomainContractFor languageContract prefix ->         nl equalitySection   IdRepresentation {} ->@@ -1811,12 +1838,12 @@     witnessName = nominalEqualityWitnessName nominal     equalityIdentity = fromMaybe (error "generated nominal equality contract missing") (nominalEqualityIdentityForService languageContract nominal)     (exactInstance, witnessConstructor) = case (.representation) nominal of-      IdRepresentation prefix -> case idDomainContractFor languageContract prefix of+      IdRepresentation prefix admission -> case idDomainContractFor languageContract prefix of         Nothing -> ([], "fieldWitness")         Just _ ->           ( [ "",               patternName <> " :: TextPattern",-              patternName <> " = either (error . show) id (idDomainTextPattern (typeIdV7Domain " <> tshow prefix <> "))",+              patternName <> " = either (error . show) id (idDomainTextPattern (" <> idDomainContractExpression admission prefix <> "))",               "",               "instance ExactFieldProjection " <> tagName <> " where",               "  fieldProjectionDomain _ = textProjectionDomain " <> patternName,@@ -1850,7 +1877,7 @@       "import Data.Text qualified as T",       "import GHC.Generics (Generic)",       "import Keiki.Shape (CanonicalTypeName)",-      "import Keiro.Codec.IdDomain (typeIdV7Domain, validateIdDomainText)",+      "import Keiro.Codec.IdDomain (" <> T.intercalate ", " internalIdDomainImports <> ")",       "",       sectionsOf [map emitInternal nominals]     ]@@ -1876,7 +1903,7 @@           "  parseJSON = withText " <> tshow name <> " (either (fail . T.unpack) pure . parse" <> name <> ")",           "",           "parse" <> name <> " :: Text -> Either Text " <> name,-          "parse" <> name <> " input = case validateIdDomainText (typeIdV7Domain " <> tshow (idDomainPrefix contract) <> ") input of",+          "parse" <> name <> " input = case validateIdDomainText (" <> idDomainContractExpression (idDomainAdmission contract) (idDomainPrefix contract) <> ") input of",           "  Left reason -> Left (T.pack (show reason))",           "  Right () -> Right (" <> name <> " input)",           "",@@ -1892,6 +1919,7 @@       where         name = (.name) nominal         textName = nominalTextName nominal+    internalIdDomainImports = idDomainConstructorImports (map (idDomainAdmission . snd) nominals) <> ["validateIdDomainText"]  nominalEqualityTagName :: ResolvedNominalType -> Text nominalEqualityTagName nominal = (.name) nominal <> "EqualityProjection"@@ -1907,6 +1935,30 @@ nominalTextName :: ResolvedNominalType -> Text nominalTextName = (<> "Text") . lowerFirst . (.name) +idDomainContractExpression :: IdAdmission -> Text -> Text+idDomainContractExpression admission prefix =+  idDomainConstructorName admission <> " " <> tshow prefix++idDomainConstructorName :: IdAdmission -> Text+idDomainConstructorName TypeIdV7 = "typeIdV7Domain"+idDomainConstructorName TypeIdV5OrV7 = "typeIdV5OrV7Domain"++idDomainConstructorImports :: [IdAdmission] -> [Text]+idDomainConstructorImports admissions =+  ["typeIdV7Domain" | TypeIdV7 `elem` admissions]+    <> ["typeIdV5OrV7Domain" | TypeIdV5OrV7 `elem` admissions]++idDomainParserImports :: [IdAdmission] -> [Text]+idDomainParserImports admissions =+  ["parseKindIdV7Text" | TypeIdV7 `elem` admissions]+    <> if TypeIdV5OrV7 `elem` admissions then ["parseKindIdText", "typeIdV5OrV7Domain"] else []++parseKindIdTextCall :: IdAdmission -> Text -> Text -> Text+parseKindIdTextCall TypeIdV7 prefix input =+  "parseKindIdV7Text @" <> tshow prefix <> " " <> input+parseKindIdTextCall TypeIdV5OrV7 prefix input =+  "parseKindIdText @" <> tshow prefix <> " (typeIdV5OrV7Domain " <> tshow prefix <> ") " <> input+ -- | Explicit type/constructor imports for exactly the generated declarations a -- generated aggregate module uses. Keeping an import list avoids making every -- aggregate depend on every service declaration merely because they share the@@ -1943,7 +1995,7 @@   where     parsingNames = map (.name) (stableNominals parsing)     importsFor nominal = case (.representation) nominal of-      IdRepresentation prefix+      IdRepresentation prefix _         | Just _ <- idDomainContractFor (checkedLanguageContract service) prefix ->             [(.name) nominal]               <> ["parse" <> (.name) nominal | (.name) nominal `elem` parsingNames]@@ -1973,13 +2025,13 @@        ]   where     publicImports nominal = case (.representation) nominal of-      IdRepresentation prefix+      IdRepresentation prefix _         | Just _ <- idDomainContractFor (checkedLanguageContract service) prefix -> [nominalTextName nominal]       _ -> [(.name) nominal <> " (..)", nominalTextName nominal]     enforcingIds =       [ nominal       | nominal <- stableNominals nominals,-        IdRepresentation prefix <- [(.representation) nominal],+        IdRepresentation prefix _ <- [(.representation) nominal],         Just _ <- [idDomainContractFor (checkedLanguageContract service) prefix]       ] @@ -2090,7 +2142,7 @@           "Keiro.Codec.Nominal (" <> T.intercalate ", " nominalCodecImports <> ")"         ]           <> ["Data.KindID qualified as KindID" | any hasId nominals]-          <> ["Keiro.Codec.IdDomain (idDomainTextPattern, typeIdV7Domain, validateIdDomainText)" | any hasEnforcedId nominals]+          <> ["Keiro.Codec.IdDomain (" <> T.intercalate ", " enforcedIdDomainImports <> ")" | any hasEnforcedId nominals]           <> ["Data.List.NonEmpty (NonEmpty (..))" | any hasEnum nominals || any hasUnenforcedId nominals]           <> ["Data.Text (Text)" | any usesText nominals]           <> ["Data.Time (UTCTime)" | any (hasScalar NominalTime) nominals]@@ -2123,11 +2175,20 @@     hasId nominal = case (.representation) nominal of IdRepresentation {} -> True; _ -> False     hasEnum nominal = case (.representation) nominal of EnumRepresentation {} -> True; _ -> False     hasEnforcedId nominal = case (.representation) nominal of-      IdRepresentation prefix -> isJust (idDomainContractFor languageContract prefix)+      IdRepresentation prefix _ -> isJust (idDomainContractFor languageContract prefix)       _ -> False     hasUnenforcedId nominal = case (.representation) nominal of-      IdRepresentation prefix -> isNothing (idDomainContractFor languageContract prefix)+      IdRepresentation prefix _ -> isNothing (idDomainContractFor languageContract prefix)       _ -> False+    enforcedIdDomainImports =+      ["idDomainTextPattern"]+        <> idDomainConstructorImports+          [ admission+          | nominal <- nominals,+            IdRepresentation prefix admission <- [(.representation) nominal],+            isJust (idDomainContractFor languageContract prefix)+          ]+        <> ["validateIdDomainText"]     hasExactDomain nominal = case (.representation) nominal of ScalarRepresentation {} -> False; _ -> True     usesText nominal = case (.representation) nominal of ScalarRepresentation NominalText -> True; IdRepresentation {} -> True; EnumRepresentation {} -> True; _ -> False     importPlan =@@ -2165,7 +2226,7 @@       GeneratedNominal -> ""       ConsumerNominal binding -> case (.representation) nominal of         ScalarRepresentation {} -> emitScalarProjection nominal binding-        IdRepresentation prefix -> emitConsumerIdProjection nominal binding prefix+        IdRepresentation prefix admission -> emitConsumerIdProjection nominal binding prefix admission         EnumRepresentation constructors -> emitConsumerEnumProjection nominal binding constructors     emitScalarProjection nominal binding =       nl@@ -2185,7 +2246,7 @@         name = (.name) nominal         tagName = name <> "NominalProjection"         witnessName = lowerFirst name <> "Witness"-    emitConsumerIdProjection nominal binding prefix =+    emitConsumerIdProjection nominal binding prefix admission =       nl         ( patternLines             <> [ "",@@ -2224,7 +2285,7 @@         patternLines           | enforced =               [ patternName <> " :: TextPattern",-                patternName <> " = either (error . show) id (idDomainTextPattern (typeIdV7Domain " <> tshow prefix <> "))"+                patternName <> " = either (error . show) id (idDomainTextPattern (" <> idDomainContractExpression admission prefix <> "))"               ]           | otherwise =               [ patternName <> " :: TextPattern",@@ -2236,7 +2297,7 @@                 "  pure (textConcat (prefix :| [leading, suffix]))"               ]         validationGuard =-          [ "    | Left _ <- validateIdDomainText (typeIdV7Domain " <> tshow prefix <> ") value = Nothing"+          [ "    | Left _ <- validateIdDomainText (" <> idDomainContractExpression admission prefix <> ") value = Nothing"           | enforced           ]     emitConsumerEnumProjection nominal binding constructors =@@ -2289,7 +2350,7 @@   nl $     languagePragmas       <> [ generatedBanner,-           "module " <> moduleName <> " (" <> shapeType <> " (..)) where",+           "module " <> moduleName <> " (" <> shapeExport <> ") where",            ""          ]       <> map ("import " <>) imports@@ -2307,7 +2368,10 @@           <> ["Data.Map.Strict (Map)" | ReqMap `elem` requirements]           <> ["Data.Text (Text)" | ReqText `elem` requirements]           <> ["Data.Time (UTCTime)" | ReqTime `elem` requirements]-          <> ["GHC.Generics (Generic)"]+          <> ["Data.Time.Calendar (Day)" | ReqDay `elem` requirements]+          <> ["Data.Set (Set)" | ReqSet `elem` requirements]+          <> ["Data.ByteString (ByteString)" | ReqByteString `elem` requirements]+          <> ["GHC.Generics (Generic)" | shapeNeedsGeneric]           <> ["Numeric.Natural (Natural)" | ReqNatural `elem` requirements]     shapeDeclaration =       foldMappedShape@@ -2333,9 +2397,19 @@                   firstArm : rest ->                     ["data " <> shapeType <> " = " <> renderArm firstArm]                       <> ["  | " <> renderArm arm | arm <- rest]-                      <> ["  deriving stock (Eq, Generic, Show)"]+                      <> ["  deriving stock (Eq, Generic, Show)"],+            onBare = \expression -> "type " <> shapeType <> " = " <> renderShapeType importPlan ctx graph expression,+            onRefined = const ("type " <> shapeType <> " = ByteString")           }         shape+    shapeNeedsGeneric = case shape of+      RBare {} -> False+      RRefined {} -> False+      _ -> True+    shapeExport = case shape of+      RBare {} -> shapeType+      RRefined {} -> shapeType+      _ -> shapeType <> " (..)"     renderArm arm = (.ctor) arm <> maybe "" ((" !" <>) . renderShapeType importPlan ctx graph) ((.payload) arm)     importPlan =       planImportsOrDie@@ -2348,6 +2422,9 @@   | ReqMap   | ReqText   | ReqTime+  | ReqDay+  | ReqSet+  | ReqByteString   | ReqNatural   | ReqReference !HaskellReference   deriving stock (Eq, Ord, Show)@@ -2358,7 +2435,9 @@     MappedShapeAlgebra       { onRecord = \_ _ fields -> concatMap (exprRequirements ctx graph . (.valueType)) fields,         onEnum = const [],-        onUnion = \_ arms -> concatMap (maybe [] (exprRequirements ctx graph) . (.payload)) arms+        onUnion = \_ arms -> concatMap (maybe [] (exprRequirements ctx graph) . (.payload)) arms,+        onBare = exprRequirements ctx graph,+        onRefined = const [ReqByteString]       }  exprRequirements :: Context -> TypeGraph -> ResolvedTypeExpr -> [ShapeRequirement]@@ -2371,6 +2450,8 @@         onBool = [],         onNatural = [ReqNatural],         onTime = [ReqTime],+        onDay = [ReqDay],+        onTextSet = [ReqSet, ReqText],         onJson = [ReqJson],         onOptional = id,         onList = id,@@ -2402,6 +2483,8 @@           onBool = atomicShapeType "Bool",           onNatural = atomicShapeType "Natural",           onTime = atomicShapeType "UTCTime",+          onDay = atomicShapeType "Day",+          onTextSet = applicationShapeType "Set Text",           onJson = atomicShapeType "Value",           onOptional = applicationShapeType . ("Maybe " <>) . renderStrictOrApplicationArgument,           onList = atomicShapeType . ("[" <>) . (<> "]") . (.text),@@ -2435,7 +2518,7 @@   ResolvedNominalType     { name = (.name) leaf,       representation = case (.kind) leaf of-        NominalIdLeaf prefix -> IdRepresentation prefix+        NominalIdLeaf prefix admission -> IdRepresentation prefix admission         NominalEnumLeaf constructors -> EnumRepresentation constructors         NominalScalarLeaf representation -> ScalarRepresentation representation,       ownership = case (.ownership) leaf of@@ -2497,6 +2580,8 @@   RRecord _ _ fields -> concatMap (walkField [] []) fields   REnum {} -> []   RUnion {} -> []+  RBare {} -> []+  RRefined {} -> []   where     walkField keys selectors field       | (.presence) field /= PRequired = []@@ -2554,6 +2639,8 @@   RInteger -> primitive "Integer"   RBool -> primitive "Bool"   RTime -> primitive "UTCTime"+  RDay -> Nothing+  RTextSet -> Nothing   RNatural -> primitive "Natural"   RJson -> Nothing   ROptional {} -> Nothing@@ -2678,7 +2765,7 @@         <> ["import Data.List.NonEmpty (NonEmpty (..))" | hasExactEnum]         <> ["import Data.List.NonEmpty qualified as NonEmpty" | hasExact]         <> ["import Data.KindID qualified as KindID" | any (maybe False projectionLeafIsConsumerId . (.terminalNominal)) specs]-        <> [ "import Keiro.Codec.IdDomain (idDomainTextPattern, parseKindIdV7Text, typeIdV7Domain)"+        <> [ "import Keiro.Codec.IdDomain (" <> T.intercalate ", " structuralProjectionIdImports <> ")"            | hasExactId            ]         <> [ "import Keiro.Codec.Nominal (" <> T.intercalate ", " nominalCodecImports <> ")"@@ -2704,6 +2791,21 @@     projectionDomainImports =       ["finiteProjectionDomain" | hasExactEnum]         <> if hasExactId then ["TextPattern", "textProjectionDomain"] else []+    structuralProjectionIdImports =+      nub $+        ["idDomainTextPattern"]+          <> idDomainParserImports exactConsumerIdAdmissions+          <> idDomainConstructorImports exactIdAdmissions+    exactIdAdmissions =+      [ admission+      | spec <- exactSpecs,+        Just NominalLeaf {kind = NominalIdLeaf _ admission} <- [(.terminalNominal) spec]+      ]+    exactConsumerIdAdmissions =+      [ admission+      | spec <- exactSpecs,+        Just NominalLeaf {kind = NominalIdLeaf _ admission, ownership = ConsumerLeaf {}} <- [(.terminalNominal) spec]+      ]     fieldScopeImports =       [ "import " <> shapeModuleName <> " (" <> lastSegment shapeModuleName <> "Shape(" <> T.intercalate ", " (Set.toAscList selectors) <> "))"       | (shapeModuleName, selectors) <- Map.toAscList selectorsByModule@@ -2764,9 +2866,9 @@       | otherwise = "fieldWitness"     isExactProjection spec = maybe False projectionLeafHasExactDomain ((.terminalNominal) spec)     renderProjectionDomain spec = case (.terminalNominal) spec of-      Just NominalLeaf {kind = NominalIdLeaf prefix} ->+      Just NominalLeaf {kind = NominalIdLeaf prefix admission} ->         [ projectionPatternName spec <> " :: TextPattern",-          projectionPatternName spec <> " = either (error . show) id (idDomainTextPattern (typeIdV7Domain " <> tshow prefix <> "))",+          projectionPatternName spec <> " = either (error . show) id (idDomainTextPattern (" <> idDomainContractExpression admission prefix <> "))",           ""         ]       _ -> []@@ -2890,8 +2992,8 @@   (NominalIdLeaf {}, GeneratedLeaf) ->     [ "fieldValue <- either (const Nothing) Just (" <> rendered (generatedValueReference ("parse" <> (.name) leaf)) <> " value)"     ]-  (NominalIdLeaf prefix, ConsumerLeaf binding) ->-    [ "representation <- either (const Nothing) Just (parseKindIdV7Text @" <> tshow prefix <> " value)",+  (NominalIdLeaf prefix admission, ConsumerLeaf binding) ->+    [ "representation <- either (const Nothing) Just (" <> parseKindIdTextCall admission prefix "value" <> ")",       "let fieldValue = nominalFromRepresentation " <> rendered (qualifiedValueReference ((.binding) binding)) <> " representation"     ]   (NominalEnumLeaf constructors, GeneratedLeaf) ->@@ -4388,6 +4490,9 @@     usesOptionalValue = any typeUsesOptional allExpressions     usesNatural = any typeUsesNatural rootExpressions     usesTime = any typeUsesTime rootExpressions+    usesDay = any typeUsesDay allExpressions+    usesTextSet = any typeUsesTextSet allExpressions+    usesBase16Bytes = any (\(_, shape) -> shape == RRefined Base16BytesV1) structuralDeclarations     usesParseJson = any (typeUsesParseJson graph) allExpressions     usesToJson = any (typeUsesToJson graph) allExpressions     usesValueConstructors = usesOptionalValue || not (Set.null keyedMapNames) || any isEnumShape (map snd structuralDeclarations)@@ -4406,13 +4511,19 @@         <> ["import Data.Aeson.Key qualified as Key" | usesKeyModule]         <> ["import Data.Aeson.KeyMap qualified as KeyMap" | usesKeyMap]         <> ["import Data.Aeson.Types (" <> T.intercalate ", " aesonTypesImports <> ")"]-        <> (if usesMap then ["import Data.Map.Strict (Map)", "import Data.Map.Strict qualified as Map"] else [])+        <> ["import Data.Map.Strict (Map)" | any typeUsesPlainMap allExpressions]+        <> ["import Data.Map.Strict qualified as Map" | usesMap]+        <> ["import Data.Set (Set)" | any typeUsesTextSet rootExpressions]         <> ["import Numeric.Natural (Natural)" | usesNatural]         <> ["import Data.Time (UTCTime)" | usesTime]+        <> ["import Data.Time.Calendar (Day)" | any typeUsesDay rootExpressions]         <> [ "import Data.Text (Text)",              "import qualified Data.Text as T"            ]         <> ["import Keiro.Codec.Structural (bindingFromShape, bindingToShape)" | hasStructural]+        <> ["import Keiro.Codec.CalendarDay (encodeCalendarDay, parseCalendarDay)" | usesDay]+        <> ["import Keiro.Codec.TextSet (encodeTextSet, parseTextSet)" | usesTextSet]+        <> ["import Keiro.Codec.Base16Bytes (encodeBase16Bytes, parseBase16Bytes)" | usesBase16Bytes]         <> [nominalLeafCodecImport ctx selectedNominals | not (Set.null selectedNominals)]         <> [nominalLeafKeyCodecImport ctx keyedMapNames | not (Set.null keyedMapNames)]         <> map ("import " <>) opaqueInstanceImports@@ -4520,19 +4631,25 @@ queueLead _ keyValue = "    , " <> keyValue  typeUsesNatural :: ResolvedTypeExpr -> Bool-typeUsesNatural = foldTypeExpr (TypeExprAlgebra False False False False True False False id id id (\_ -> id) (const False) (const False))+typeUsesNatural = foldTypeExpr (TypeExprAlgebra False False False False True False False False False id id id (\_ -> id) (const False) (const False))  typeUsesTime :: ResolvedTypeExpr -> Bool-typeUsesTime = foldTypeExpr (TypeExprAlgebra False False False False False True False id id id (\_ -> id) (const False) (const False))+typeUsesTime = foldTypeExpr (TypeExprAlgebra False False False False False True False False False id id id (\_ -> id) (const False) (const False)) +typeUsesDay :: ResolvedTypeExpr -> Bool+typeUsesDay = foldTypeExpr (TypeExprAlgebra False False False False False False True False False id id id (\_ -> id) (const False) (const False))++typeUsesTextSet :: ResolvedTypeExpr -> Bool+typeUsesTextSet = foldTypeExpr (TypeExprAlgebra False False False False False False False True False id id id (\_ -> id) (const False) (const False))+ typeUsesText :: ResolvedTypeExpr -> Bool-typeUsesText = foldTypeExpr (TypeExprAlgebra True False False False False False False id id (const True) (\_ -> id) (const False) (const False))+typeUsesText = foldTypeExpr (TypeExprAlgebra True False False False False False False True False id id (const True) (\_ -> id) (const False) (const False))  typeUsesJson :: ResolvedTypeExpr -> Bool-typeUsesJson = foldTypeExpr (TypeExprAlgebra False False False False False False True id id id (\_ -> id) (const False) (const False))+typeUsesJson = foldTypeExpr (TypeExprAlgebra False False False False False False False False True id id id (\_ -> id) (const False) (const False))  typeUsesParserAnnotation :: ResolvedTypeExpr -> Bool-typeUsesParserAnnotation = foldTypeExpr (TypeExprAlgebra False False False False False False False id (const True) (const True) (\_ _ -> True) (const False) (const False))+typeUsesParserAnnotation = foldTypeExpr (TypeExprAlgebra False False False False False False False False False id (const True) (const True) (\_ _ -> True) (const False) (const False))  typeUsesParseJson :: TypeGraph -> ResolvedTypeExpr -> Bool typeUsesParseJson graph =@@ -4544,6 +4661,8 @@         onBool = True,         onNatural = True,         onTime = True,+        onDay = False,+        onTextSet = False,         onJson = False,         onOptional = id,         onList = const True,@@ -5480,13 +5599,15 @@           | expression <- expressions,             leaf@NominalLeaf {ownership = GeneratedLeaf} <- directNominalLeaves expression           ]-    reservedNames = Set.fromList [queryInputType, queryResultType, "Map", "Natural", "Text", "UTCTime", "Value"]+    reservedNames = Set.fromList [queryInputType, queryResultType, "Day", "Map", "Natural", "Text", "UTCTime", "Value"]     importPlan = planImportsOrDie queryContractModule reservedNames references     imports =       ["import Data.Aeson (Value)" | any typeUsesJson expressions]         <> ["import Data.Map.Strict (Map)" | any typeUsesMap expressions]+        <> ["import Data.Set (Set)" | any typeUsesTextSet expressions]         <> ["import Data.Text (Text)" | any typeUsesText expressions]         <> ["import Data.Time (UTCTime)" | any typeUsesTime expressions]+        <> ["import Data.Time.Calendar (Day)" | any typeUsesDay expressions]         <> ["import Numeric.Natural (Natural)" | any typeUsesNatural expressions]         <> T.lines (renderPlannedImports importPlan)     resolve position location expression =@@ -5510,6 +5631,8 @@             onBool = [],             onNatural = [],             onTime = [],+            onDay = [],+            onTextSet = [],             onJson = [],             onOptional = id,             onList = id,@@ -6160,14 +6283,23 @@ -- dangerous @defaultTimerWorkerOptions@ (@Nothing@) default. scaffoldProcess :: Context -> ProcessNode -> [ScaffoldModule] scaffoldProcess ctx p = case (.body) p of-  ReactionProcessBody reaction -> scaffoldReactionProcess ctx p reaction+  ReactionProcessBody reaction -> scaffoldReactionProcess ctx Nothing p reaction   LegacyProcessBody {} -> scaffoldLegacyProcess ctx p -scaffoldReactionProcess :: Context -> ProcessNode -> ReactionBody -> [ScaffoldModule]-scaffoldReactionProcess ctx process reaction =+scaffoldProcessForService :: Context -> CheckedService -> ProcessNode -> [ScaffoldModule]+scaffoldProcessForService ctx service p = case (.body) p of+  ReactionProcessBody reaction -> scaffoldReactionProcess ctx (Just graph) p reaction+  LegacyProcessBody {} -> scaffoldLegacyProcess ctx p+  where+    graph = case checkedTypeGraph service of+      Left errors -> error ("checked process type graph failed: " <> show errors)+      Right value -> value++scaffoldReactionProcess :: Context -> Maybe TypeGraph -> ProcessNode -> ReactionBody -> [ScaffoldModule]+scaffoldReactionProcess ctx typeGraph process reaction =   [ ScaffoldModule       { path = modulePath inputPrefix "Input",-        text = emitReactionInput ctx inputPrefix process reaction,+        text = emitReactionInput ctx typeGraph inputPrefix process reaction,         kind = Generated,         origin = nodeOrigin "process input" ((.id) process) ((.loc) process)       },@@ -6189,8 +6321,8 @@     holePrefix = holePrefixFor ctx ((.id) process)     modulePath prefix leaf = T.unpack (T.replace "." "/" prefix <> "/" <> leaf <> ".hs") -emitReactionInput :: Context -> Text -> ProcessNode -> ReactionBody -> Text-emitReactionInput ctx genPrefix process reaction =+emitReactionInput :: Context -> Maybe TypeGraph -> Text -> ProcessNode -> ReactionBody -> Text+emitReactionInput ctx maybeGraph genPrefix process reaction =   nl $     renderGeneratedLanguagePragmas [ExtDeriveAnyClass, ExtDuplicateRecordFields]       <> [ generatedBanner,@@ -6204,6 +6336,7 @@          ]       <> ["import Numeric.Natural (Natural)" | usesType [Just "Natural"]]       <> ["import " <> contextGeneratedPrefix ctx <> ".Nominals qualified as N" | usesNominal]+      <> [renderPlannedImports mappedImportPlan | not (Set.null mappedReferences)]       <> [ "",            "data " <> inputType          ]@@ -6213,12 +6346,33 @@     inputType = pascal ((.id) process) <> "Input"     inputFields = concatMap (.fields) (NE.toList ((.inputs) reaction))     usesType candidates = any ((`elem` candidates) . (.valueType)) inputFields-    usesNominal = any (\field -> maybe False (`notElem` ["Text", "Int", "Integer", "Bool", "Natural", "Time"]) ((.valueType) field)) inputFields     renderCtor index input =       [ (if index == 0 then "  = " else "  | ") <> (.name) input,-        "      { " <> T.intercalate "\n      , " [(.name) field <> " :: !" <> renderReactionFieldType field | field <- (.fields) input],+        "      { " <> T.intercalate "\n      , " [(.name) field <> " :: !" <> renderFieldType field | field <- (.fields) input],         "      }"       ]+    mappedDeclaration name = maybe Nothing (Map.lookup (MappedKey name) . (.declarations)) maybeGraph+    mappedSourceReference declaration = case declaration of+      ResolvedStructural value _ -> haskellTypeReference ((.haskell) value)+      ResolvedOpaque value -> haskellTypeReference ((.haskell) value)+    mappedReferences =+      Set.fromList+        [ mappedSourceReference declaration+        | field <- inputFields,+          Just name <- [(.valueType) field],+          Just declaration <- [mappedDeclaration name]+        ]+    mappedImportPlan = planImportsOrDie (genPrefix <> ".Input") (Set.singleton inputType) mappedReferences+    renderFieldType field = case (.valueType) field >>= mappedDeclaration of+      Just declaration -> renderReferenceOrDie mappedImportPlan (mappedSourceReference declaration)+      Nothing -> renderReactionFieldType field+    usesNominal =+      any+        ( \field -> case (.valueType) field of+            Just name -> name `notElem` ["Text", "Int", "Integer", "Bool", "Natural", "Time"] && isNothing (mappedDeclaration name)+            Nothing -> False+        )+        inputFields  renderReactionFieldType :: Field -> Text renderReactionFieldType field = renderReactionTypeName ((.valueType) field)@@ -7030,7 +7184,7 @@   where     nominals = stableNominals ((.generatedNominals) aggregate)     importsFor nominal = case (.representation) nominal of-      IdRepresentation prefix+      IdRepresentation prefix _         | Just _ <- idDomainContractFor ((.languageContract) aggregate) prefix ->             (.name) nominal               : ["parse" <> (.name) nominal | needsParser nominal]@@ -7123,15 +7277,18 @@            "import Data.List.NonEmpty (NonEmpty (..))",            "import Data.List.NonEmpty qualified as NonEmpty"          ]-      ++ ( if codecUsesMap a-             then ["import Data.Map.Strict (Map)", "import Data.Map.Strict qualified as Map"]-             else []-         )+      ++ ["import Data.Map.Strict (Map)" | codecUsesPlainMap a]+      ++ ["import Data.Map.Strict qualified as Map" | codecUsesMap a]       ++ [ "import Data.Text (Text)",            "import qualified Data.Text as T"          ]       ++ ["import Data.KindID qualified as KindID" | hasConsumerNominalIdCodec a]-      ++ ["import Keiro.Codec.IdDomain (typeIdV7Domain, validateIdDomainText)" | hasEnforcedConsumerNominalIdCodec a]+      ++ [ "import Keiro.Codec.IdDomain (" <> T.intercalate ", " (idDomainConstructorImports (codecEnforcedConsumerIdAdmissions a) <> ["validateIdDomainText"]) <> ")"+         | hasEnforcedConsumerNominalIdCodec a+         ]+      ++ ["import Keiro.Codec.CalendarDay (encodeCalendarDay, parseCalendarDay)" | codecUsesDay a]+      ++ ["import Keiro.Codec.TextSet (encodeTextSet, parseTextSet)" | codecUsesTextSet a]+      ++ ["import Keiro.Codec.Base16Bytes (encodeBase16Bytes, parseBase16Bytes)" | codecUsesBase16Bytes a]       ++ codecNominalRuntimeImports a       ++ ["import Keiro.Codec.Structural (bindingFromShape, bindingToShape)" | hasStructuralMappedCodec a]       ++ [ "import Keiro.Codec (Codec (..), EventType (..))",@@ -7241,12 +7398,19 @@  codecUsesExplicitParseField :: Agg -> Bool codecUsesExplicitParseField aggregate =-  codecUsesWithText aggregate || any structuralUsesExplicitParseField (codecMappedDeclarations aggregate)+  codecUsesWithText aggregate+    || any structuralUsesExplicitParseField (codecMappedDeclarations aggregate)+    || any eventFieldUsesExplicitParseField (concatMap (.fields) ((.events) aggregate))   where+    eventFieldUsesExplicitParseField (_, resolvedType) = case fieldCat aggregate resolvedType of+      MappedStructuralCat {} -> True+      _ -> False     structuralUsesExplicitParseField (ResolvedStructural _ shape) = case shape of       RRecord _ _ fields -> not (null fields)       REnum {} -> False       RUnion {} -> True+      RBare {} -> False+      RRefined {} -> False     structuralUsesExplicitParseField ResolvedOpaque {} = False  codecUsesWithText :: Agg -> Bool@@ -7262,6 +7426,8 @@       REnum {} -> True       RUnion {} -> True       RRecord {} -> False+      RBare {} -> False+      RRefined {} -> False     mappedUsesWithText ResolvedOpaque {} = False  codecUsesDotColon :: Agg -> Bool@@ -7301,6 +7467,12 @@     declarationUsesMap (ResolvedStructural _ shape) = any typeUsesMap (shapeTypeExpressions shape)     declarationUsesMap ResolvedOpaque {} = False +codecUsesPlainMap :: Agg -> Bool+codecUsesPlainMap = any declarationUsesPlainMap . codecMappedDeclarations+  where+    declarationUsesPlainMap (ResolvedStructural _ shape) = any typeUsesPlainMap (shapeTypeExpressions shape)+    declarationUsesPlainMap ResolvedOpaque {} = False+ codecUsesLocatedContainers :: Agg -> Bool codecUsesLocatedContainers = any declarationUsesLocatedContainer . codecMappedDeclarations   where@@ -7310,6 +7482,25 @@ codecUsesParseJSON :: Agg -> Bool codecUsesParseJSON aggregate = any (declarationUsesAesonConversion aggregate) (codecMappedDeclarations aggregate) +codecUsesDay :: Agg -> Bool+codecUsesDay = any declarationUsesDay . codecMappedDeclarations+  where+    declarationUsesDay (ResolvedStructural _ shape) = any typeUsesDay (shapeTypeExpressions shape)+    declarationUsesDay ResolvedOpaque {} = False++codecUsesTextSet :: Agg -> Bool+codecUsesTextSet = any declarationUsesTextSet . codecMappedDeclarations+  where+    declarationUsesTextSet (ResolvedStructural _ shape) = any typeUsesTextSet (shapeTypeExpressions shape)+    declarationUsesTextSet ResolvedOpaque {} = False++codecUsesBase16Bytes :: Agg -> Bool+codecUsesBase16Bytes = any declarationUsesBase16Bytes . codecMappedDeclarations+  where+    declarationUsesBase16Bytes (ResolvedStructural _ (RRefined Base16BytesV1)) = True+    declarationUsesBase16Bytes ResolvedStructural {} = False+    declarationUsesBase16Bytes ResolvedOpaque {} = False+ codecUsesToJSON :: Agg -> Bool codecUsesToJSON aggregate =   any directOpaqueField (concatMap (.fields) ((.events) aggregate))@@ -7334,6 +7525,8 @@   RRecord _ _ fields -> map (.valueType) fields   REnum {} -> []   RUnion _ arms -> mapMaybe (.payload) arms+  RBare expression -> [expression]+  RRefined {} -> []  typeUsesMap :: ResolvedTypeExpr -> Bool typeUsesMap =@@ -7345,6 +7538,8 @@         onBool = False,         onNatural = False,         onTime = False,+        onDay = False,+        onTextSet = False,         onJson = False,         onOptional = id,         onList = id,@@ -7354,6 +7549,30 @@         onNominal = const False       } +-- A keyed map is encoded as an Aeson object and only needs qualified Map+-- operations. Plain text-keyed maps additionally mention @Map@ in generated+-- parser annotations.+typeUsesPlainMap :: ResolvedTypeExpr -> Bool+typeUsesPlainMap =+  foldTypeExpr+    TypeExprAlgebra+      { onText = False,+        onInt = False,+        onInteger = False,+        onBool = False,+        onNatural = False,+        onTime = False,+        onDay = False,+        onTextSet = False,+        onJson = False,+        onOptional = id,+        onList = id,+        onMap = const True,+        onKeyedMap = \_ value -> value,+        onRef = const False,+        onNominal = const False+      }+ typeUsesKeyedMap :: ResolvedTypeExpr -> Bool typeUsesKeyedMap = not . Set.null . keyedMapNominalNames @@ -7367,6 +7586,8 @@         onBool = Set.empty,         onNatural = Set.empty,         onTime = Set.empty,+        onDay = Set.empty,+        onTextSet = Set.empty,         onJson = Set.empty,         onOptional = id,         onList = id,@@ -7386,6 +7607,8 @@         onBool = False,         onNatural = False,         onTime = False,+        onDay = False,+        onTextSet = False,         onJson = False,         onOptional = id,         onList = const True,@@ -7405,6 +7628,8 @@         onBool = False,         onNatural = False,         onTime = False,+        onDay = False,+        onTextSet = False,         onJson = False,         onOptional = const True,         onList = id,@@ -7424,6 +7649,8 @@         onBool = True,         onNatural = True,         onTime = True,+        onDay = False,+        onTextSet = False,         onJson = False,         onOptional = id,         onList = const True,@@ -7438,12 +7665,20 @@ codecUsesOptionalFieldHelper :: Agg -> Bool codecUsesOptionalFieldHelper aggregate =   any structuralHasOptionalField (codecMappedDeclarations aggregate)+    || any (mappedEventFieldAcceptsMissing aggregate . snd) (concatMap (.fields) ((.events) aggregate))   where     structuralHasOptionalField (ResolvedStructural _ (RRecord _ _ fields)) =       any ((== POptional) . (.presence)) fields     structuralHasOptionalField (ResolvedStructural _ _) = False     structuralHasOptionalField ResolvedOpaque {} = False +mappedEventFieldAcceptsMissing :: Agg -> ResolvedAggregateType -> Bool+mappedEventFieldAcceptsMissing aggregate = \case+  AggregateMapped key -> case (.typeGraph) aggregate >>= \graph -> Map.lookup key ((.declarations) graph) of+    Just (ResolvedStructural _ (RBare (ROptional _))) -> True+    _ -> False+  _ -> False+ hasConsumerNominalCodec :: Agg -> Bool hasConsumerNominalCodec = not . null . codecConsumerNominals @@ -7476,11 +7711,19 @@ hasEnforcedConsumerNominalIdCodec aggregate =   any     ( \nominal -> case (.representation) nominal of-        IdRepresentation prefix -> isJust (idDomainContractFor ((.languageContract) aggregate) prefix)+        IdRepresentation prefix _ -> isJust (idDomainContractFor ((.languageContract) aggregate) prefix)         _ -> False     )     (codecConsumerNominals aggregate) +codecEnforcedConsumerIdAdmissions :: Agg -> [IdAdmission]+codecEnforcedConsumerIdAdmissions aggregate =+  [ admission+  | nominal <- codecConsumerNominals aggregate,+    IdRepresentation prefix admission <- [(.representation) nominal],+    isJust (idDomainContractFor ((.languageContract) aggregate) prefix)+  ]+ emitEnumParsers :: Agg -> Text emitEnumParsers a =   sectionsOf@@ -7504,11 +7747,11 @@ emitConsumerNominalParsers importPlan aggregate = sectionsOf [map emitParser (codecConsumerNominals aggregate)]   where     emitParser nominal = case ((.representation) nominal, (.ownership) nominal) of-      (IdRepresentation prefix, ConsumerNominal binding) ->+      (IdRepresentation prefix admission, ConsumerNominal binding) ->         nl $           [ parserName nominal <> " :: Text -> Parser " <> renderReferenceOrDie importPlan (haskellTypeReference ((.haskell) binding))           ]-            <> parserBody nominal prefix binding+            <> parserBody nominal prefix admission binding       (EnumRepresentation constructors, ConsumerNominal binding) ->         nl $           [ parserName nominal <> " :: Text -> Parser " <> renderReferenceOrDie importPlan (haskellTypeReference ((.haskell) binding)),@@ -7526,14 +7769,14 @@             <> ["  tag -> " <> renderUnknownFailure ((.name) nominal <> " wire value") "tag" (map snd (NE.toList constructors))]       _ -> ""     parserName nominal = "parse" <> (.name) nominal <> "Nominal"-    parserBody nominal prefix binding = case idDomainContractFor ((.languageContract) aggregate) prefix of+    parserBody nominal prefix admission binding = case idDomainContractFor ((.languageContract) aggregate) prefix of       Nothing ->         [ parserName nominal <> " input = case KindID.parseText @" <> tshow prefix <> " input of",           "  Left reason -> fail (show reason)",           "  Right representation -> pure (nominalFromRepresentation " <> renderReferenceOrDie importPlan (qualifiedValueReference ((.binding) binding)) <> " representation)"         ]       Just _ ->-        [ parserName nominal <> " input = case validateIdDomainText (typeIdV7Domain " <> tshow prefix <> ") input of",+        [ parserName nominal <> " input = case validateIdDomainText (" <> idDomainContractExpression admission prefix <> ") input of",           "  Left reason -> fail (show reason)",           "  Right () -> case KindID.parseText @" <> tshow prefix <> " input of",           "    Left reason -> fail (show reason)",@@ -7707,14 +7950,14 @@     decodeMapped (AggregateMapped mappedKey) key = case (.typeGraph) a of       Nothing -> error "mapped aggregate field has no resolved type graph"       Just graph ->-        "explicitParseField "-          <> renderMappedParse graph ConsumerValueBoundary (mappedCodecPlanOrDie graph (RRef mappedKey))-          <> " o "-          <> tshow key+        let parser = renderMappedParse graph ConsumerValueBoundary (mappedCodecPlanOrDie graph (RRef mappedKey))+         in if mappedEventFieldAcceptsMissing a (AggregateMapped mappedKey)+              then "parseOptionalField (" <> parser <> " Null) " <> parser <> " o " <> tshow key+              else "explicitParseField " <> parser <> " o " <> tshow key     decodeMapped _ _ = error "non-mapped aggregate type reached mapped codec lowering"     decodeNominalField name nominal = case (.ownership) nominal of       GeneratedNominal -> case (.representation) nominal of-        IdRepresentation prefix -> case idDomainContractFor ((.languageContract) a) prefix of+        IdRepresentation prefix _ -> case idDomainContractFor ((.languageContract) a) prefix of           Nothing -> "(" <> (.name) nominal <> " <$> o .: " <> tshow name <> ")"           Just _ -> "(" <> legacyNominalConstructorName nominal <> " <$> o .: " <> tshow name <> ")"         EnumRepresentation {} ->@@ -7792,7 +8035,7 @@     nominalDefaultReferences =       [ reference       | ResolvedStructural _ shape <- codecMappedDeclarations aggregate,-        field <- case shape of RRecord _ _ fields -> fields; REnum {} -> []; RUnion {} -> [],+        field <- case shape of RRecord _ _ fields -> fields; REnum {} -> []; RUnion {} -> []; RBare {} -> []; RRefined {} -> [],         Just (leaf, constructor) <- [nominalConstructorDefault field],         reference <- case (.ownership) leaf of           GeneratedLeaf ->@@ -7877,7 +8120,9 @@     MappedShapeAlgebra       { onRecord = \_ _ fields -> concatMap (exprRefs . (.valueType)) fields,         onEnum = const [],-        onUnion = \_ arms -> concatMap (maybe [] exprRefs . (.payload)) arms+        onUnion = \_ arms -> concatMap (maybe [] exprRefs . (.payload)) arms,+        onBare = exprRefs,+        onRefined = const []       }  exprRefs :: ResolvedTypeExpr -> [MappedKey]@@ -7890,6 +8135,8 @@         onBool = [],         onNatural = [],         onTime = [],+        onDay = [],+        onTextSet = [],         onJson = [],         onOptional = id,         onList = id,@@ -7953,7 +8200,11 @@         onUnion = \encoding arms ->           nl $             ["encode" <> name <> "Shape = \\case"]-              <> concatMap (unionEncodeArm encoding) arms+              <> concatMap (unionEncodeArm encoding) arms,+        onBare = \expression ->+          "encode" <> name <> "Shape value = " <> encodeShapeExpr graph expression "value",+        onRefined = \case+          Base16BytesV1 -> "encode" <> name <> "Shape = encodeBase16Bytes"       }   where     name = (.name) declaration@@ -8003,7 +8254,11 @@                    "validate" <> name <> "Tag tag",                    "  | tag `elem` " <> renderTextList (map (.tag) arms) <> " = pure tag",                    "  | otherwise = " <> renderUnknownFailure (name <> " union tag") "tag" (map (.tag) arms)-                 ]+                 ],+        onBare = \expression ->+          "parse" <> name <> "Shape = " <> decodeShapeExpr graph expression,+        onRefined = \case+          Base16BytesV1 -> "parse" <> name <> "Shape = parseBase16Bytes"       }   where     name = (.name) declaration@@ -8746,7 +9001,7 @@             <> tshow value             <> " of Right parsed -> parsed; Left _ -> error \"validated ID literal failed to parse\")"       ConsumerNominal binding -> case (.representation) nominal of-        IdRepresentation prefix ->+        IdRepresentation prefix _ ->           "K.lit (nominalFromRepresentation "             <> renderReferenceOrDie importPlan (qualifiedValueReference ((.binding) binding))             <> " (case KindID.parseText @"@@ -8758,15 +9013,15 @@     _ -> error "validated ID literal lost its nominal type"   where     idPrefixOf nominal = case (.representation) nominal of-      IdRepresentation prefix -> Just prefix+      IdRepresentation prefix _ -> Just prefix       _ -> Nothing  generatedIdSampleHaskell :: Agg -> ResolvedNominalType -> Maybe Text generatedIdSampleHaskell aggregate nominal = do-  prefix <- case (.representation) nominal of-    IdRepresentation value -> Just value+  (prefix, admission) <- case (.representation) nominal of+    IdRepresentation value selectedAdmission -> Just (value, selectedAdmission)     _ -> Nothing-  contract <- idDomainContractFor ((.languageContract) aggregate) prefix+  contract <- idDomainContractForAdmission ((.languageContract) aggregate) admission prefix   let name = (.name) nominal       sample = idDomainSampleText contract   pure@@ -8802,7 +9057,7 @@       ++ generatedNominalTypeImportsWithParsers         (aggregateCheckedService aggregate)         ((.context) aggregate)-        generatedExpressionNominals+        generatedImportedNominals         generatedLiteralNominals       ++ structuralProjectionImport       ++ generatedNominalProjectionImport@@ -8879,12 +9134,6 @@         )     consumerLiteralNominals = nub [nominal | expression <- resolvedExpressions, nominal <- typedConsumerLiteralNominals expression]     importPlan = transducerImportPlan aggregate expressionImportTypes consumerLiteralNominals-    generatedExpressionNominals =-      stableNominals-        [ nominal-        | expression <- resolvedExpressions,-          nominal <- typedGeneratedNominals expression-        ]     -- Only a literal names `parse<Id>`; see 'generatedNominalTypeImportsWithParsers'.     generatedLiteralNominals =       stableNominals@@ -8893,6 +9142,14 @@           literal <- typedExpressionLiterals expression,           nominal <- typedGeneratedNominals literal         ]+    generatedProjectedNominals =+      stableNominals+        [ nominal+        | ProjectionAlias {target = NominalProjectionAlias nominal _} <- projectionAliases,+          GeneratedNominal <- [(.ownership) nominal]+        ]+    generatedImportedNominals =+      stableNominals (generatedLiteralNominals <> generatedProjectedNominals)     expressionUsesTimeLiteral = any (anyTypedExpression isTimeLiteral) resolvedExpressions     expressionUsesNaturalLiteral = any (anyTypedExpression isNaturalLiteral) resolvedExpressions     expressionUsesConsumerNominalLiteral = not (null consumerLiteralNominals)
src/Keiro/Dsl/ScaffoldRun.hs view
@@ -336,7 +336,7 @@       <> concat         [ case node of             NAggregate agg -> scaffoldAggregateForService ctx service agg <> harnessForServiceWithGoldens goldens ctx service agg-            NProcess process -> scaffoldProcess ctx process <> harnessProcessForService ctx service process+            NProcess process -> scaffoldProcessForService ctx service process <> harnessProcessForService ctx service process             NRouter router -> scaffoldRouterForService ctx service router <> harnessRouterForService ctx service router             NContract contract -> scaffoldContractForService ctx service contract             NIntake intake -> scaffoldIntake ctx intake
src/Keiro/Dsl/SemanticImpact.hs view
@@ -724,6 +724,24 @@       "enum:" <> T.intercalate "," [(.ctor) entry <> "=" <> (.tag) entry | entry <- sortOn (.tag) entries]     structuralPresentation (RUnion _ arms) =       "union:" <> T.intercalate "," [(.tag) arm | arm <- sortOn (.tag) arms]+    structuralPresentation (RBare expression) = "value:" <> expressionPresentation expression+    structuralPresentation (RRefined Base16BytesV1) = "refined:base16-bytes-v1"+    expressionPresentation = \case+      RText -> "Text"+      RInt -> "Int"+      RInteger -> "Integer"+      RBool -> "Bool"+      RNatural -> "Natural"+      RTime -> "Time"+      RDay -> "Day"+      RTextSet -> "Set(Text)"+      RJson -> "Json"+      ROptional value -> "Optional(" <> expressionPresentation value <> ")"+      RList value -> "List(" <> expressionPresentation value <> ")"+      RMap value -> "Map(" <> expressionPresentation value <> ")"+      RKeyedMap key value -> "Map[" <> (.name) key <> "](" <> expressionPresentation value <> ")"+      RRef reference -> "Ref(" <> unMappedKey reference <> ")"+      RNominal nominal -> "Nominal(" <> (.name) nominal <> ")"  mappedConsumerIdentity :: MappedConsumer -> Name mappedConsumerIdentity (AggregateConsumer aggregate) = aggregate
src/Keiro/Dsl/StructuralConformance.hs view
@@ -187,7 +187,7 @@     <> ["import Data.Aeson.Types qualified as AesonTypes" | not (null generatedIdAssertions)]     <> ["import Data.List (nub)" | not (null structural) || not (null opaque)]     <> ["import Data.List.NonEmpty qualified as NonEmpty" | not (null structural) || not (null opaque) || not (null consumerNominals)]-    <> ["import Data.Map.Strict qualified as Map" | any structuralUsesKeyedMap structural]+    <> ["import Data.Map.Strict qualified as Map" | any bareCoverageUsesMap structural || any generatedIdUsesKeyedMap generatedIdAssertions]     <> ["import Data.KindID qualified as KindID" | any (nominalNeedsOrderingLaw rendering) consumerNominals]     <> ["import Data.Maybe (isJust, isNothing)" | any shapeUsesMaybe structural]     <> ["import Data.Proxy (Proxy (..))" | not (null structural) || not (null consumerNominals)]@@ -227,18 +227,29 @@       RRecord _ _ fields -> any (isOptional . (.valueType)) fields       RUnion _ arms -> any (maybe False isOptional . (.payload)) arms       REnum {} -> False+      RBare expression -> isOptional expression+      RRefined {} -> False     isOptional ROptional {} = True     isOptional _ = False-    structuralUsesKeyedMap (_, shape) = any typeUsesKeyedMap (shapeExpressions shape)-    shapeExpressions (RRecord _ _ fields) = map (.valueType) fields-    shapeExpressions (RUnion _ arms) = [payload | arm <- arms, payload <- maybe [] pure ((.payload) arm)]-    shapeExpressions REnum {} = []-    typeUsesKeyedMap = \case-      ROptional item -> typeUsesKeyedMap item-      RList item -> typeUsesKeyedMap item-      RMap item -> typeUsesKeyedMap item-      RKeyedMap {} -> True-      _ -> False+    bareCoverageUsesMap (_, RBare RMap {}) = True+    bareCoverageUsesMap _ = False+    generatedIdUsesKeyedMap (_, shape, target) = shapeUsesTargetKey shape+      where+        shapeUsesTargetKey = \case+          RRecord _ _ fields -> any (exprUsesTargetKey . (.valueType)) fields+          RUnion _ arms -> any (maybe False exprUsesTargetKey . (.payload)) arms+          REnum {} -> False+          RBare expression -> exprUsesTargetKey expression+          RRefined {} -> False+        exprUsesTargetKey = \case+          ROptional item -> exprUsesTargetKey item+          RList item -> exprUsesTargetKey item+          RMap item -> exprUsesTargetKey item+          RKeyedMap key item -> (.name) key == (.name) target || exprUsesTargetKey item+          RRef key -> case Map.lookup key ((.declarations) ((.graph) rendering)) of+            Just (ResolvedStructural _ nestedShape) -> shapeUsesTargetKey nestedShape+            _ -> False+          _ -> False  lastSegment :: Text -> Text lastSegment = last . T.splitOn "."@@ -336,7 +347,9 @@     MappedShapeAlgebra       { onRecord = \_constructor _ _fields -> [],         onEnum = map (constructorRef . (.ctor)),-        onUnion = \_ -> map (constructorRef . (.ctor))+        onUnion = \_ -> map (constructorRef . (.ctor)),+        onBare = const [],+        onRefined = const []       }   where     moduleName = structuralShapeModuleName ctx ((.name) declaration)@@ -452,6 +465,7 @@         | (index, field) <- zip [0 :: Int ..] fields         ]   REnum _ -> "True"+  RRefined {} -> "True"   RUnion _ arms ->     "(case " <> candidate <> " of " <> T.intercalate "; " (map renderArm arms) <> ")"     where@@ -463,6 +477,7 @@               | nominalOccursIn rendering target payload ->                   " payload" <> tshow depth <> " -> " <> generatedIdTypeExpression rendering target payload ("payload" <> tshow depth) (depth + 1)               | otherwise -> " _ -> True"+  RBare expression -> generatedIdTypeExpression rendering target expression candidate depth  generatedIdTypeExpression :: ConformanceRendering -> NominalLeaf -> ResolvedTypeExpr -> Text -> Int -> Text generatedIdTypeExpression rendering target expression candidate depth = case expression of@@ -583,6 +598,14 @@         | entry <- entries         ]       RUnion _ arms -> concatMap (unionArmObligations rendering shapeModule) arms+      RBare expression -> bareObligations expression+      RRefined {} -> []++    bareObligations = \case+      ROptional _ -> ["any isNothing shapes", "any isJust shapes"]+      RList _ -> ["any null shapes", "any (not . null) shapes"]+      RMap _ -> ["any Map.null shapes", "any (not . Map.null) shapes"]+      _ -> []  recordFieldObligation :: ConformanceRendering -> Text -> ResolvedWireField -> [Text] recordFieldObligation _rendering _shapeModule field = case (.valueType) field of
src/Keiro/Dsl/TypeGraph.hs view
@@ -64,6 +64,9 @@     MappedDeclAlgebra (..),     foldMappedDecl,     wireFingerprint,+    wireFingerprintForCalendarDayPolicy,+    wireFingerprintForTextSetPolicy,+    wireFingerprintForBase16BytesPolicy,     nominalWireFingerprint,   ) where@@ -85,6 +88,10 @@ import Data.TypeID qualified as TypeID import Data.Word (Word64) import GHC.Generics (Generic)+import Keiro.Codec.CalendarDay (calendarDayCodecPolicyIdentity)+import Keiro.Codec.IdDomain (enforcedIdDomainVersion, v5OrV7IdDomainVersion)+import Keiro.Codec.Refined (base16BytesCodecPolicyIdentity)+import Keiro.Codec.TextSet (textSetCodecPolicyIdentity) import Keiro.Dsl.Grammar import Keiro.Dsl.HaskellName (haskellKeywords) import Numeric (showHex)@@ -178,7 +185,7 @@   deriving stock (Eq, Ord, Show, Generic)  data NominalLeafKind-  = NominalIdLeaf !Text+  = NominalIdLeaf !Text !IdAdmission   | NominalEnumLeaf !(NonEmpty (Name, Text))   | NominalScalarLeaf !NominalScalarRepresentation   deriving stock (Eq, Ord, Show, Generic)@@ -222,7 +229,7 @@       Right         NominalLeaf           { name = (.name) declaration,-            kind = NominalIdLeaf ((.prefix) declaration),+            kind = NominalIdLeaf ((.prefix) declaration) ((.admission) declaration),             ownership = ownership,             loc = (.loc) declaration           }@@ -366,6 +373,27 @@           }         shape     )+checkMappedDecl MappedRefined {mrName = name, mrHaskell = haskell, mrBinding = binding, mrBindingVersion = bindingVersion, mrCanonical = canonical, mrFixtures = fixtures, mrInitial = initial, mrPolicy = policy, mrLoc = 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+  pure+    ( CheckedStructural+        StructuralDecl+          { name = name,+            haskell = checkedHaskell,+            binding = checkedBinding,+            bindingVersion = checkedBindingVersion,+            canonical = checkedCanonical,+            fixtures = checkedFixtures,+            initial = checkedInitial,+            loc = loc+          }+        (ShapeRefined policy)+    ) checkMappedDecl MappedOpaque {moName = name, moHaskell = haskell, moCodecId = codecIdentity, moCodecVersion = codecVersion, moFixtures = fixtures, moInitial = initial, moLoc = loc} = do   checkedHaskell <- require (MissingHaskellSource name) haskell   checkedCodecIdentity <- require (MissingOpaqueCodecIdentity name) codecIdentity >>= liftOne . mkCodecIdentity@@ -404,6 +432,8 @@   | RBool   | RNatural   | RTime+  | RDay+  | RTextSet   | RJson   | ROptional !ResolvedTypeExpr   | RList !ResolvedTypeExpr@@ -435,6 +465,8 @@   = RRecord !Name !UnknownFields ![ResolvedWireField]   | REnum ![WireEnum]   | RUnion !UnionEncoding ![ResolvedWireArm]+  | RBare !ResolvedTypeExpr+  | RRefined !RefinedWirePolicy   deriving stock (Eq, Show, Generic)  data ResolvedMappedDecl@@ -647,6 +679,7 @@  rawName :: MappedDecl -> Name rawName MappedStructural {msName = name} = name+rawName MappedRefined {mrName = name} = name rawName MappedOpaque {moName = name} = name  checkedName :: CheckedMappedDecl -> Name@@ -699,6 +732,9 @@         ((.tag) arm)         <$> traverse (resolveExpr keyByName nominalByName enumNames owner ((.loc) arm)) ((.payload) arm)         <*> pure ((.loc) arm)+resolveShape keyByName nominalByName enumNames owner (ShapeBare expression) =+  RBare <$> resolveExpr keyByName nominalByName enumNames owner noLoc expression+resolveShape _ _ _ _ (ShapeRefined policy) = Right (RRefined policy)  resolveExpr :: Map Name MappedKey -> Map Name NominalLeaf -> Set Name -> Name -> Loc -> TypeExpr -> Either TypeGraphError ResolvedTypeExpr resolveExpr _ _ _ _ _ TText = Right RText@@ -707,6 +743,8 @@ resolveExpr _ _ _ _ _ TBool = Right RBool resolveExpr _ _ _ _ _ TNatural = Right RNatural resolveExpr _ _ _ _ _ TTime = Right RTime+resolveExpr _ _ _ _ _ TDay = Right RDay+resolveExpr _ _ _ _ _ TTextSet = Right RTextSet resolveExpr _ _ _ _ _ TJson = Right RJson resolveExpr names nominals enums owner loc (TOptional value) = ROptional <$> resolveExpr names nominals enums owner loc value resolveExpr names nominals enums owner loc (TList value) = RList <$> resolveExpr names nominals enums owner loc value@@ -763,7 +801,9 @@     MappedShapeAlgebra       { onRecord = \_ _ fields -> Set.unions (map (refsInExpr . (.valueType)) fields),         onEnum = const Set.empty,-        onUnion = \_ arms -> Set.unions (map (maybe Set.empty refsInExpr . (.payload)) arms)+        onUnion = \_ arms -> Set.unions (map (maybe Set.empty refsInExpr . (.payload)) arms),+        onBare = refsInExpr,+        onRefined = const Set.empty       }  refsInExpr :: ResolvedTypeExpr -> Set MappedKey@@ -776,6 +816,8 @@         onBool = Set.empty,         onNatural = Set.empty,         onTime = Set.empty,+        onDay = Set.empty,+        onTextSet = Set.empty,         onJson = Set.empty,         onOptional = id,         onList = id,@@ -795,6 +837,8 @@         onBool = Set.empty,         onNatural = Set.empty,         onTime = Set.empty,+        onDay = Set.empty,+        onTextSet = Set.empty,         onJson = Set.empty,         onOptional = id,         onList = id,@@ -813,7 +857,9 @@             MappedShapeAlgebra               { onRecord = \_ _ fields -> Set.unions (map (nominalRefsInExpr . (.valueType)) fields),                 onEnum = const Set.empty,-                onUnion = \_ arms -> Set.unions (map (maybe Set.empty nominalRefsInExpr . (.payload)) arms)+                onUnion = \_ arms -> Set.unions (map (maybe Set.empty nominalRefsInExpr . (.payload)) arms),+                onBare = nominalRefsInExpr,+                onRefined = const Set.empty               }             shape,         onOpaqueDecl = const Set.empty@@ -948,6 +994,8 @@       RBool -> Nothing       RNatural -> Nothing       RTime -> Nothing+      RDay -> Nothing+      RTextSet -> Nothing       RJson -> Nothing       ROptional value -> prepend SegOptional (rootReference value)       RList value -> prepend SegElem (rootReference value)@@ -1010,7 +1058,9 @@               concat                 [ map (SegArm ((.ctor) arm) ((.tag) arm) :) (maybe [] (pathsInExpr visited) ((.payload) arm))                 | arm <- arms-                ]+                ],+            onBare = pathsInExpr visited,+            onRefined = const []           }      pathsInExpr visited = \case@@ -1020,6 +1070,8 @@       RBool -> []       RNatural -> []       RTime -> []+      RDay -> []+      RTextSet -> []       RJson -> []       ROptional value -> map (SegOptional :) (pathsInExpr visited value)       RList value -> map (SegElem :) (pathsInExpr visited value)@@ -1076,7 +1128,9 @@               concat                 [ map (SegArm ((.ctor) arm) ((.tag) arm) :) (maybe [] (pathsInExpr visited) ((.payload) arm))                 | arm <- arms-                ]+                ],+            onBare = pathsInExpr visited,+            onRefined = const []           }      pathsInExpr visited = \case@@ -1086,6 +1140,8 @@       RBool -> []       RNatural -> []       RTime -> []+      RDay -> []+      RTextSet -> []       RJson -> []       ROptional value -> map (SegOptional :) (pathsInExpr visited value)       RList value -> map (SegElem :) (pathsInExpr visited value)@@ -1145,6 +1201,8 @@     onBool :: a,     onNatural :: a,     onTime :: a,+    onDay :: a,+    onTextSet :: a,     onJson :: a,     onOptional :: a -> a,     onList :: a -> a,@@ -1162,6 +1220,8 @@   RBool -> (.onBool) algebra   RNatural -> (.onNatural) algebra   RTime -> (.onTime) algebra+  RDay -> (.onDay) algebra+  RTextSet -> (.onTextSet) algebra   RJson -> (.onJson) algebra   ROptional value -> (.onOptional) algebra (foldTypeExpr algebra value)   RList value -> (.onList) algebra (foldTypeExpr algebra value)@@ -1173,7 +1233,9 @@ data MappedShapeAlgebra a = MappedShapeAlgebra   { onRecord :: Name -> UnknownFields -> [ResolvedWireField] -> a,     onEnum :: [WireEnum] -> a,-    onUnion :: UnionEncoding -> [ResolvedWireArm] -> a+    onUnion :: UnionEncoding -> [ResolvedWireArm] -> a,+    onBare :: ResolvedTypeExpr -> a,+    onRefined :: RefinedWirePolicy -> a   }  foldMappedShape :: MappedShapeAlgebra a -> ResolvedMappedShape -> a@@ -1181,6 +1243,8 @@   RRecord constructor unknownFields fields -> (.onRecord) algebra constructor unknownFields fields   REnum entries -> (.onEnum) algebra entries   RUnion encoding arms -> (.onUnion) algebra encoding arms+  RBare expression -> (.onBare) algebra expression+  RRefined policy -> (.onRefined) algebra policy  data MappedDeclAlgebra a = MappedDeclAlgebra   { onStructuralDecl :: StructuralDecl -> ResolvedMappedShape -> a,@@ -1193,7 +1257,30 @@   ResolvedOpaque declaration -> (.onOpaqueDecl) algebra declaration  wireFingerprint :: TypeGraph -> Name -> Text-wireFingerprint graph name = fnv1a64 (wireDecl Set.empty (MappedKey name))+wireFingerprint = wireFingerprintWithPolicies calendarDayCodecPolicyIdentity textSetCodecPolicyIdentity base16BytesCodecPolicyIdentity++-- | Compatibility-analysis seam for proving that a calendar-day policy bump+-- changes persisted wire identity. Production callers use 'wireFingerprint',+-- which always selects the released Keiro policy.+wireFingerprintForCalendarDayPolicy :: Text -> TypeGraph -> Name -> Text+wireFingerprintForCalendarDayPolicy calendarDayPolicy =+  wireFingerprintWithPolicies calendarDayPolicy textSetCodecPolicyIdentity base16BytesCodecPolicyIdentity++-- | Compatibility-analysis seam for proving that a text-set policy bump+-- changes persisted wire identity. Production callers use 'wireFingerprint',+-- which always selects the released Keiro policy.+wireFingerprintForTextSetPolicy :: Text -> TypeGraph -> Name -> Text+wireFingerprintForTextSetPolicy =+  \textSetPolicy -> wireFingerprintWithPolicies calendarDayCodecPolicyIdentity textSetPolicy base16BytesCodecPolicyIdentity++-- | Compatibility-analysis seam for proving that a base16-bytes policy bump+-- changes persisted wire identity. Production callers use 'wireFingerprint'.+wireFingerprintForBase16BytesPolicy :: Text -> TypeGraph -> Name -> Text+wireFingerprintForBase16BytesPolicy =+  wireFingerprintWithPolicies calendarDayCodecPolicyIdentity textSetCodecPolicyIdentity++wireFingerprintWithPolicies :: Text -> Text -> Text -> TypeGraph -> Name -> Text+wireFingerprintWithPolicies calendarDayPolicy textSetPolicy base16BytesPolicy graph name = fnv1a64 (wireDecl Set.empty (MappedKey name))   where     declarations = (.declarations) graph @@ -1226,7 +1313,10 @@                 <> renderUnknown ((.unknownFields) encoding)                 <> ";"                 <> T.intercalate ";" (map (wireArm visited) (sortOn (.tag) arms))-                <> ")"+                <> ")",+            onBare = wireExpr visited,+            onRefined = \case+              Base16BytesV1 -> "base16-bytes(" <> base16BytesPolicy <> ")"           }      wireField visited field =@@ -1247,6 +1337,8 @@       RBool -> "bool"       RNatural -> "natural"       RTime -> "time"+      RDay -> "calendar-day(" <> calendarDayPolicy <> ")"+      RTextSet -> "text-set(" <> textSetPolicy <> ")"       RJson -> "json"       ROptional value -> "optional(" <> wireExpr visited value <> ")"       RList value -> "list(" <> wireExpr visited value <> ")"@@ -1280,7 +1372,7 @@  nominalWireToken :: NominalLeaf -> Text nominalWireToken leaf = case (.kind) leaf of-  NominalIdLeaf prefix -> "nominal-id(" <> prefix <> "," <> nominalIdDomainVersion <> ")"+  NominalIdLeaf prefix admission -> "nominal-id(" <> prefix <> "," <> idAdmissionVersion admission <> ")"   NominalEnumLeaf constructors ->     "nominal-enum(" <> T.intercalate ";" (sort (map snd (NE.toList constructors))) <> ")"   NominalScalarLeaf representation -> "nominal-scalar(" <> scalarToken representation <> ")"@@ -1292,11 +1384,9 @@       NominalBool -> "Bool"       NominalTime -> "Time" --- Kept byte-identical to Keiro.Dsl.IdDomain.enforcedIdDomainVersion.  This--- low-level graph module cannot import IdDomain because that module reads--- CheckedService, whose analysis contains this graph.-nominalIdDomainVersion :: Text-nominalIdDomainVersion = "keiro-dsl/id-domain/typeid-v7/1"+idAdmissionVersion :: IdAdmission -> Text+idAdmissionVersion TypeIdV7 = enforcedIdDomainVersion+idAdmissionVersion TypeIdV5OrV7 = v5OrV7IdDomainVersion  fnv1a64 :: Text -> Text fnv1a64 input =
src/Keiro/Dsl/Validate.hs view
@@ -47,7 +47,7 @@ import Keiro.Dsl.FieldIdentity import Keiro.Dsl.Grammar import Keiro.Dsl.HaskellName qualified as HaskellName-import Keiro.Dsl.IdDomain (contractIdDomainContractFor, idDomainContractFor)+import Keiro.Dsl.IdDomain (contractIdDomainContractFor, idDomainContractForDeclaration) import Keiro.Dsl.LanguageVersion (LanguageVersion, RuntimeCapability (..), SourceLanguage (..), effectiveLanguageVersion, languageVersionText, runtimeProfileHasCapability, sourceFormText) import Keiro.Dsl.NominalType qualified as Nominal import Keiro.Dsl.ProcessReaction qualified as ProcessReaction@@ -873,7 +873,7 @@       [ mkErr (locLine ((.loc) declaration)) NominalInvalidIdPrefix $           "id '" <> (.name) declaration <> "' has invalid TypeID prefix '" <> (.prefix) declaration <> "': " <> T.pack (show reason)       | declaration <- (.ids) spec,-        Just _ <- [idDomainContractFor languageContract ((.prefix) declaration)],+        Just _ <- [idDomainContractForDeclaration languageContract declaration],         Just reason <- [TypeID.checkPrefix ((.prefix) declaration)]       ]     resolutionErrors = case Nominal.resolveNominalTypes spec of@@ -1083,6 +1083,7 @@       "Natural" -> TNatural       "Time" -> TTime       "UTCTime" -> TTime+      "Day" -> TDay       "Json" -> TJson       _ -> TRef name @@ -1126,6 +1127,7 @@       InvalidRegisterInitial resolved detail ->         "invalid " <> aggregateCanonicalName resolved <> " register initial: " <> detail     unsupportedShapeGuidance = \case+      TDay -> "; declare a named `mapped structural value` with `wire Day` and use that mapping as the aggregate field type"       TOptional (TRef name)         | name `Set.member` nominalNames ->             "; declare `mapped structural record "@@ -1263,18 +1265,22 @@  mappedName :: MappedDecl -> Name mappedName MappedStructural {msName = name} = name+mappedName MappedRefined {mrName = name} = name mappedName MappedOpaque {moName = name} = name  mappedLoc :: MappedDecl -> Loc mappedLoc MappedStructural {msLoc = loc} = loc+mappedLoc MappedRefined {mrLoc = loc} = loc mappedLoc MappedOpaque {moLoc = loc} = loc  mappedHaskell :: MappedDecl -> Maybe HaskellSource mappedHaskell MappedStructural {msHaskell = source} = source+mappedHaskell MappedRefined {mrHaskell = source} = source mappedHaskell MappedOpaque {moHaskell = source} = source  mappedCanonical :: MappedDecl -> Maybe Text mappedCanonical MappedStructural {msCanonical = canonical} = canonical+mappedCanonical MappedRefined {mrCanonical = canonical} = canonical mappedCanonical MappedOpaque {} = Nothing  mappedLexicalRules :: Spec -> [Diagnostic]@@ -1299,6 +1305,8 @@      qualifiedFacts MappedStructural {msBinding = binding, msFixtures = fixtures, msInitial = initial, msLoc = loc} =       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)] @@ -1327,6 +1335,9 @@         | arm <- arms,           not (constructorSafe ((.ctor) arm))         ]+      MappedStructural {msShape = ShapeBare {}} -> []+      MappedStructural {msShape = ShapeRefined {}} -> []+      MappedRefined {} -> []       MappedOpaque {} -> []      constructorRule category value declaration =@@ -1347,6 +1358,7 @@   ]   where     identityValues MappedStructural {msBindingVersion = bindingVersion, msCanonical = canonical} = present [bindingVersion, canonical]+    identityValues MappedRefined {mrBindingVersion = bindingVersion, mrCanonical = canonical} = present [bindingVersion, canonical]     identityValues MappedOpaque {moCodecId = codecIdentity, moCodecVersion = codecVersion} = present [codecIdentity, codecVersion]     present = foldr (maybe id (:)) [] @@ -1401,7 +1413,12 @@                       | arm <- arms,                         payload <- maybeToList ((.payload) arm),                         nominal <- Set.toAscList (nominalNamesInExpr payload)-                      ]+                      ],+                    onBare = \expression ->+                      [ languageError ((.loc) declaration) ("mapped declaration '" <> (.name) declaration <> "' bare value") nominal+                      | nominal <- Set.toAscList (nominalNamesInExpr expression)+                      ],+                    onRefined = const []                   }                 shape,             onOpaqueDecl = const []@@ -1439,6 +1456,8 @@         onBool = Set.empty,         onNatural = Set.empty,         onTime = Set.empty,+        onDay = Set.empty,+        onTextSet = Set.empty,         onJson = Set.empty,         onOptional = id,         onList = id,@@ -1553,9 +1572,25 @@                  | arm <- arms,                    T.null ((.tag) arm)                  ]-              ++ concatMap (armRules declaration) arms+              ++ concatMap (armRules declaration) arms,+          onBare = \expression ->+            [ mappedError ((.loc) declaration) MappedUnsupportedEncoding declaration "bare structural values must have Day, Set Text, Optional, List, or text-keyed Map as their outer constructor"+            | not (supportedBareRoot expression)+            ]+              ++ [ mappedError ((.loc) declaration) MappedNonInjectiveNullability declaration "bare value contains Optional around a null-capable Json, Optional, or opaque mapped value"+                 | hasNonInjectiveOptional graph expression+                 ],+          onRefined = const []         } +    supportedBareRoot = \case+      ROptional {} -> True+      RList {} -> True+      RMap {} -> True+      RDay -> True+      RTextSet -> True+      _ -> False+     fieldRules declaration field =       defaultRules declaration field         ++ [ mappedError ((.loc) field) MappedNonInjectiveNullability declaration $@@ -1630,6 +1665,8 @@         onBool = DefaultBool,         onNatural = DefaultNatural,         onTime = DefaultOther,+        onDay = DefaultOther,+        onTextSet = DefaultOther,         onJson = DefaultOther,         onOptional = const DefaultOptional,         onList = const DefaultList,@@ -1653,7 +1690,9 @@               MappedShapeAlgebra                 { onRecord = \_ _ _ -> DefaultOther,                   onEnum = DefaultEnum . Set.fromList . map (.ctor),-                  onUnion = \_ _ -> DefaultOther+                  onUnion = \_ _ -> DefaultOther,+                  onBare = defaultType graph,+                  onRefined = const DefaultOther                 }               shape,           onOpaqueDecl = const DefaultOther@@ -1666,37 +1705,50 @@   }  hasNonInjectiveOptional :: TypeGraph -> ResolvedTypeExpr -> Bool-hasNonInjectiveOptional graph =-  (.badOptional)-    . foldTypeExpr-      TypeExprAlgebra-        { onText = nonNull,-          onInt = nonNull,-          onInteger = nonNull,-          onBool = nonNull,-          onNatural = nonNull,-          onTime = nonNull,-          onJson = nullable,-          onOptional = \child -> NullabilityFacts True ((.topNull) child || (.badOptional) child),-          onList = nestedNonNull,-          onMap = nestedNonNull,-          onKeyedMap = \_ -> nestedNonNull,-          onRef = \key -> if mappedRefIsOpaque graph key then nullable else nonNull,-          onNominal = const nonNull-        }+hasNonInjectiveOptional graph = (.badOptional) . nullabilityFacts graph++nullabilityFacts :: TypeGraph -> ResolvedTypeExpr -> NullabilityFacts+nullabilityFacts graph =+  foldTypeExpr+    TypeExprAlgebra+      { onText = nonNull,+        onInt = nonNull,+        onInteger = nonNull,+        onBool = nonNull,+        onNatural = nonNull,+        onTime = nonNull,+        onDay = nonNull,+        onTextSet = nonNull,+        onJson = nullable,+        onOptional = \child -> NullabilityFacts True ((.topNull) child || (.badOptional) child),+        onList = nestedNonNull,+        onMap = nestedNonNull,+        onKeyedMap = \_ -> nestedNonNull,+        onRef = mappedRefNullability graph,+        onNominal = const nonNull+      }   where     nonNull = NullabilityFacts False False     nullable = NullabilityFacts True False     nestedNonNull child = NullabilityFacts False ((.badOptional) child) -mappedRefIsOpaque :: TypeGraph -> MappedKey -> Bool-mappedRefIsOpaque graph key = case Map.lookup key ((.declarations) graph) of-  Nothing -> False+mappedRefNullability :: TypeGraph -> MappedKey -> NullabilityFacts+mappedRefNullability graph key = case Map.lookup key ((.declarations) graph) of+  Nothing -> NullabilityFacts False False   Just declaration ->     foldMappedDecl       MappedDeclAlgebra-        { onStructuralDecl = \_ _ -> False,-          onOpaqueDecl = const True+        { onStructuralDecl = \_ shape ->+            foldMappedShape+              MappedShapeAlgebra+                { onRecord = \_ _ _ -> NullabilityFacts False False,+                  onEnum = const (NullabilityFacts False False),+                  onUnion = \_ _ -> NullabilityFacts False False,+                  onBare = nullabilityFacts graph,+                  onRefined = const (NullabilityFacts False False)+                }+              shape,+          onOpaqueDecl = const (NullabilityFacts True False)         }       declaration @@ -2030,8 +2082,10 @@             [ ((.name) nominal, nominal)             | (_, AggregateNominal nominal) <- resolvedHarnessFields,               Nominal.GeneratedNominal <- [(.ownership) nominal],-              Nominal.IdRepresentation prefix <- [(.representation) nominal],-              idDomainContractFor languageContract prefix /= Nothing+              Nominal.IdRepresentation {} <- [(.representation) nominal],+              declaration <- (.ids) spec,+              (.name) declaration == (.name) nominal,+              idDomainContractForDeclaration languageContract declaration /= Nothing             ]         timeFields = [field | (field, AggregateTime) <- resolvedHarnessFields]         timeSample = case filter ((== "observedAt") . (.name)) timeFields of@@ -2409,6 +2463,7 @@       | any ((== declaredName) . rawMappedName) ((.mapped) spec) = "is a mapped declaration; contract declared-ID fields must name a declared id"       | otherwise = "is not a declared id"     rawMappedName MappedStructural {msName = name} = name+    rawMappedName MappedRefined {mrName = name} = name     rawMappedName MappedOpaque {moName = name} = name     schemaVersionFloor =       [ mkErr (locLine ((.loc) contract)) ContractSchemaVersionBelowMinimum $
src/Keiro/Dsl/Workspace.hs view
@@ -1255,10 +1255,12 @@  mappedDeclName :: MappedDecl -> Name mappedDeclName MappedStructural {msName = name} = name+mappedDeclName MappedRefined {mrName = name} = name mappedDeclName MappedOpaque {moName = name} = name  mappedDeclLoc :: MappedDecl -> Loc mappedDeclLoc MappedStructural {msLoc = loc} = loc+mappedDeclLoc MappedRefined {mrLoc = loc} = loc mappedDeclLoc MappedOpaque {moLoc = loc} = loc  -- | Build the ownership index from members carrying their original locations.@@ -1453,6 +1455,9 @@  instance HasLocs Hole +instance HasLocs IdAdmission where+  traverseLocs _ = pure+ instance HasLocs IdDecl  instance HasLocs IdExpr@@ -1472,6 +1477,8 @@ instance HasLocs MappedDecl  instance HasLocs MappedShape++instance HasLocs RefinedWirePolicy  instance HasLocs Mapping 
src/Keiro/Dsl/WorkspaceScaffold.hs view
@@ -281,7 +281,7 @@      emittersFor node = case node of       NAggregate aggregate -> scaffoldAggregateForService ctx service aggregate <> harnessForServiceWithGoldens goldens ctx service aggregate-      NProcess process -> scaffoldProcess ctx process <> harnessProcessForService ctx service process+      NProcess process -> scaffoldProcessForService ctx service process <> harnessProcessForService ctx service process       NRouter router -> scaffoldRouterForService ctx service router <> harnessRouterForService ctx service router       NContract contract -> scaffoldContractForService ctx service contract       NIntake intake -> scaffoldIntake ctx intake
test/Keiro/Dsl/FrontendProfiles.hs view
@@ -33,7 +33,7 @@                      [GeneratedIdDomainTypeIdV7, NominalEqualityV2],                      [GeneratedIdDomainTypeIdV7, NominalEqualityV2, ContractIdDomainTypeIdV7, StrictSpecSurfaceValidation],                      [GeneratedIdDomainTypeIdV7, NominalEqualityV2, ContractIdDomainTypeIdV7, StrictSpecSurfaceValidation, ProjectionCatalogRuntime, TypedDomainCommandOutcomes, SeparatedProjectionQueryPolicy],-                     [GeneratedIdDomainTypeIdV7, NominalEqualityV2, ContractIdDomainTypeIdV7, StrictSpecSurfaceValidation, ProjectionCatalogRuntime, TypedDomainCommandOutcomes, SeparatedProjectionQueryPolicy, DelegatedInboxRuntime, StructuralNominalLeaves]+                     [GeneratedIdDomainTypeIdV7, NominalEqualityV2, ContractIdDomainTypeIdV7, StrictSpecSurfaceValidation, ProjectionCatalogRuntime, TypedDomainCommandOutcomes, SeparatedProjectionQueryPolicy, DelegatedInboxRuntime, StructuralNominalLeaves, BareStructuralMappings, CalendarDayMappings, TextSetMappings, RefinedBase16Mappings, ExplicitIdAdmissionDomains]                    ]       map (runtimeProfileFoldSegments . (.runtimeSemanticsProfile)) (NE.toList languageRegistry)         `shouldBe` [ [],@@ -81,6 +81,11 @@               WorkqueueFifoHeadsSyntax -> version 6               ContractDeclaredIdSyntax -> version 6               KeyedMapSyntax -> version 6+              BareStructuralMappingSyntax -> version 6+              CalendarDaySyntax -> version 6+              TextSetSyntax -> version 6+              RefinedBase16Syntax -> version 6+              ExplicitIdAdmissionDomainSyntax -> version 6               FieldAliasSyntax -> version 4               _ -> version 2         languageFeatureMinimumVersion feature `shouldBe` minimumVersion@@ -184,7 +189,8 @@  featureCases :: [FeatureCase] featureCases =-  [ FeatureCase NominalBindingSyntax "using" (featureBody NominalBindingSyntax),+  [ FeatureCase ExplicitIdAdmissionDomainSyntax "domain" (featureBody ExplicitIdAdmissionDomainSyntax),+    FeatureCase NominalBindingSyntax "using" (featureBody NominalBindingSyntax),     FeatureCase IntegerScalarSyntax "Integer" (featureBody IntegerScalarSyntax),     FeatureCase TypedAggregateExpressionSyntax "cmd." (featureBody TypedAggregateExpressionSyntax),     FeatureCase ExplicitTransitionImplementationSyntax "implementation hole" (featureBody ExplicitTransitionImplementationSyntax),@@ -200,11 +206,16 @@     FeatureCase DelegatedInboxSyntax "idempotence" delegatedInboxFeatureBody,     FeatureCase ProcessReactionSyntax "reactions" processReactionFeatureBody,     FeatureCase WorkqueueFifoHeadsSyntax "fifo-heads" (featureBody WorkqueueFifoHeadsSyntax),-    FeatureCase ContractDeclaredIdSyntax "ProfileId" (featureBody ContractDeclaredIdSyntax)+    FeatureCase ContractDeclaredIdSyntax "ProfileId" (featureBody ContractDeclaredIdSyntax),+    FeatureCase BareStructuralMappingSyntax "value" (featureBody BareStructuralMappingSyntax),+    FeatureCase CalendarDaySyntax "Day" (featureBody CalendarDaySyntax),+    FeatureCase TextSetSyntax "Set" (featureBody TextSetSyntax),+    FeatureCase RefinedBase16Syntax "refined" (featureBody RefinedBase16Syntax)   ]  featureBody :: LanguageFeature -> Text featureBody = \case+  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"]   TypedAggregateExpressionSyntax ->@@ -294,6 +305,58 @@         "  event ProfileChanged on events { profileId: ProfileId }",         "}"       ]+  BareStructuralMappingSyntax ->+    T.unlines+      [ "context profile",+        "mapped structural value OptionalLabel {",+        "  haskell package=profile module=Example.Profile type=OptionalLabel",+        "  binding = \"Example.Profile.optionalLabelBinding\"",+        "  binding-version = \"1\"",+        "  canonical-type = \"example.OptionalLabel.v1\"",+        "  fixtures = \"Example.Profile.optionalLabelFixtures\"",+        "  wire Optional Text",+        "}"+      ]+  CalendarDaySyntax ->+    T.unlines+      [ "context profile",+        "mapped structural record ProfileDay {",+        "  haskell package=profile module=Example.Profile type=ProfileDay",+        "  binding = \"Example.Profile.profileDayBinding\"",+        "  binding-version = \"1\"",+        "  canonical-type = \"example.ProfileDay.v1\"",+        "  fixtures = \"Example.Profile.profileDayFixtures\"",+        "  wire object constructor=ProfileDay unknown-fields=reject {",+        "    day as \"day\" : Day required",+        "  }",+        "}"+      ]+  TextSetSyntax ->+    T.unlines+      [ "context profile",+        "mapped structural record ProfileLabels {",+        "  haskell package=profile module=Example.Profile type=ProfileLabels",+        "  binding = \"Example.Profile.profileLabelsBinding\"",+        "  binding-version = \"1\"",+        "  canonical-type = \"example.ProfileLabels.v1\"",+        "  fixtures = \"Example.Profile.profileLabelsFixtures\"",+        "  wire object constructor=ProfileLabels unknown-fields=reject {",+        "    labels as \"labels\" : Set Text required",+        "  }",+        "}"+      ]+  RefinedBase16Syntax ->+    T.unlines+      [ "context profile",+        "mapped refined ProfileHash {",+        "  haskell package=profile module=Example.Profile type=ProfileHash",+        "  binding = \"Example.Profile.profileHashBinding\"",+        "  binding-version = \"1\"",+        "  canonical-type = \"example.ProfileHash.v1\"",+        "  fixtures = \"Example.Profile.profileHashFixtures\"",+        "  wire base16-bytes",+        "}"+      ]   KeyedMapSyntax ->     T.unlines       [ "context profile",@@ -308,7 +371,7 @@       ]  allFeatures :: [LanguageFeature]-allFeatures = [NominalBindingSyntax, IntegerScalarSyntax, TypedAggregateExpressionSyntax, ExplicitTransitionImplementationSyntax, FieldAliasSyntax, ProjectionCatalogSyntax, ExternalReadContractSyntax, MappedConsumerSurfaceSyntax, DomainCommandOutcomeSyntax, DeclarativeRouterSelectionSyntax, SeparatedProjectionQueryPolicySyntax, DelegatedInboxSyntax, ProcessReactionSyntax, WorkqueueFifoHeadsSyntax, ContractDeclaredIdSyntax, KeyedMapSyntax]+allFeatures = [ExplicitIdAdmissionDomainSyntax, NominalBindingSyntax, IntegerScalarSyntax, TypedAggregateExpressionSyntax, ExplicitTransitionImplementationSyntax, FieldAliasSyntax, ProjectionCatalogSyntax, ExternalReadContractSyntax, MappedConsumerSurfaceSyntax, DomainCommandOutcomeSyntax, DeclarativeRouterSelectionSyntax, SeparatedProjectionQueryPolicySyntax, DelegatedInboxSyntax, ProcessReactionSyntax, WorkqueueFifoHeadsSyntax, ContractDeclaredIdSyntax, KeyedMapSyntax, BareStructuralMappingSyntax, CalendarDaySyntax, TextSetSyntax, RefinedBase16Syntax]  processReactionFeatureBody :: Text processReactionFeatureBody =
test/Main.hs view
@@ -1,3 +1,5 @@+{-# LANGUAGE TypeFamilies #-}+ -- | Test driver for keiro-dsl. EP-1 milestone 1 tests: the @parse . pretty@ -- round-trip property over generated specs, and a unit test pinning the shape -- of the canonical Reservation fixture.@@ -25,10 +27,32 @@ import Data.Text.IO qualified as TIO import Data.Text.Lazy qualified as LazyText import Data.Text.Lazy.Encoding qualified as LazyTextEncoding+import Data.Time.Calendar (Day (ModifiedJulianDay), fromGregorian) import Data.Version (showVersion)+import Data.Word (Word8)+import Keiki.Core qualified as Keiki import Keiki.ProjectionDomain (matchesTextPattern)+import Keiki.ProjectionDomain qualified as ProjectionDomain+import Keiki.Symbolic qualified as KeikiSymbolic import Keiro.Codec (Codec (..), EventType (..), decodeRaw)-import Keiro.Codec.IdDomain (IdDomainFailure (..), idDomainSampleText, idDomainTextPattern, parseKindIdV7Text, parseKindIdV7Value, typeIdV7Domain, validateIdDomainText)+import Keiro.Codec.Base16Bytes+  ( Base16BytesError (..),+    base16BytesCodecPolicyIdentity,+    decodeBase16BytesText,+    encodeBase16Bytes,+    parseBase16Bytes,+    renderBase16Bytes,+  )+import Keiro.Codec.CalendarDay+  ( calendarDayCodecPolicyIdentity,+    encodeCalendarDay,+    parseCalendarDay,+    parseCalendarDayText,+    parseCanonicalCalendarDayText,+    renderCalendarDay,+  )+import Keiro.Codec.IdDomain (IdDomainFailure (..), idDomainSampleText, idDomainTextPattern, parseKindIdText, parseKindIdV7Text, parseKindIdV7Value, typeIdV5OrV7Domain, typeIdV7Domain, validateIdDomainText)+import Keiro.Codec.TextSet (encodeTextSet, parseTextSet, textSetCodecPolicyIdentity) import Keiro.Dsl.AggregateType import Keiro.Dsl.BehaviorCoverage qualified as Behavior import Keiro.Dsl.BehaviorSourceMap qualified as BehaviorSource@@ -54,7 +78,6 @@ import Keiro.Dsl.GeneratedHaskellLanguage (RewriteState (..), modernizeGeneratedHaskellSourceWithState) import Keiro.Dsl.Goldens (GoldenEvidence (..), GoldenPayload (..), emitGoldenPayloads, goldenRelativePath, goldensForDiff) import Keiro.Dsl.Grammar-import Keiro.Dsl.Grammar qualified as Grammar import Keiro.Dsl.Harness (harnessFor, harnessForService, harnessForWithGoldens, harnessReadModel, harnessRouter, harnessWorkflow) import Keiro.Dsl.HaskellImport import Keiro.Dsl.HaskellSourceMove@@ -80,7 +103,6 @@ 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.SemanticContract import Keiro.Dsl.SemanticImpact-import Keiro.Dsl.SemanticImpact qualified as SemanticImpact import Keiro.Dsl.ServiceHarness import Keiro.Dsl.SidecarMigration import Keiro.Dsl.SidecarNames@@ -90,7 +112,6 @@ import Keiro.Dsl.TypeGraph import Keiro.Dsl.Validate (Diagnostic (..), DiagnosticCode (..), Severity (..), derivedQueueTrio, diagnosticCodeText, parseDiagnosticCode, renderDiagnostic, validateService, validateSpec) import Keiro.Dsl.Workspace-import Keiro.Dsl.Workspace qualified as Workspace import Keiro.Dsl.WorkspaceAdoption import Keiro.Dsl.WorkspaceDiff hiding (diffWorkspaces) import Keiro.Dsl.WorkspaceDiff qualified as CheckedWorkspaceDiff@@ -107,6 +128,58 @@ import Test.Hspec hiding (Spec) import Test.QuickCheck +newtype AdmissionDomainOwner = AdmissionDomainOwner T.Text+  deriving stock (Eq, Show)++data WideAdmissionDomainText++wideAdmissionDomainPattern :: ProjectionDomain.TextPattern+wideAdmissionDomainPattern =+  either (error . show) id (idDomainTextPattern (typeIdV5OrV7Domain "req"))++instance Keiki.FieldProjection WideAdmissionDomainText where+  type FieldName WideAdmissionDomainText = "id"+  type FieldOwner WideAdmissionDomainText = AdmissionDomainOwner+  type FieldResult WideAdmissionDomainText = T.Text+  fieldShapeId _ = "keiro-dsl.test.id-domain.v5-or-v7"+  projectFieldValue _ (AdmissionDomainOwner value) = value++instance Keiki.ExactFieldProjection WideAdmissionDomainText where+  fieldProjectionDomain _ = ProjectionDomain.textProjectionDomain wideAdmissionDomainPattern+  reconstructFieldOwner _ value+    | matchesTextPattern wideAdmissionDomainPattern value = Just (AdmissionDomainOwner value)+    | otherwise = Nothing++wideAdmissionDomainWitness :: Keiki.FieldWitness WideAdmissionDomainText+wideAdmissionDomainWitness = Keiki.exactFieldWitness @WideAdmissionDomainText++data StaleV7AdmissionDomainText++staleV7AdmissionDomainPattern :: ProjectionDomain.TextPattern+staleV7AdmissionDomainPattern =+  either (error . show) id (idDomainTextPattern (typeIdV7Domain "req"))++instance Keiki.FieldProjection StaleV7AdmissionDomainText where+  type FieldName StaleV7AdmissionDomainText = "id"+  type FieldOwner StaleV7AdmissionDomainText = AdmissionDomainOwner+  type FieldResult StaleV7AdmissionDomainText = T.Text+  fieldShapeId _ = "keiro-dsl.test.id-domain.stale-v7"+  projectFieldValue _ (AdmissionDomainOwner value) = value++instance Keiki.ExactFieldProjection StaleV7AdmissionDomainText where+  fieldProjectionDomain _ = ProjectionDomain.textProjectionDomain staleV7AdmissionDomainPattern+  reconstructFieldOwner _ value+    | matchesTextPattern staleV7AdmissionDomainPattern value = Just (AdmissionDomainOwner value)+    | otherwise = Nothing++staleV7AdmissionDomainWitness :: Keiki.FieldWitness StaleV7AdmissionDomainText+staleV7AdmissionDomainWitness = Keiki.exactFieldWitness @StaleV7AdmissionDomainText++type AdmissionDomainRegisters = '[ '("owner", AdmissionDomainOwner)]++admissionDomainOwnerIndex :: Keiki.Index AdmissionDomainRegisters AdmissionDomainOwner+admissionDomainOwnerIndex = Keiki.ZIdx+ resolvedFold :: Either FoldSurfaceError value -> value resolvedFold = either (error . ("unexpected fold-surface failure in checked fixture: " <>) . show) id @@ -171,6 +244,98 @@   frontendSurfaceSpec   frontendProfilesSpec +  describe "calendar-day codec policy v1" $ do+    it "pins the stable identity and Aeson-compatible full-carrier writer" $ do+      calendarDayCodecPolicyIdentity `shouldBe` "keiro-core/calendar-day/1"+      let vectors =+            [ (fromGregorian 2000 2 29, "2000-02-29"),+              (fromGregorian 0 1 2, "0000-01-02"),+              (fromGregorian (-1) 12 31, "-0001-12-31"),+              (fromGregorian (-1000) 1 1, "-1000-01-01"),+              (fromGregorian 10000 1 1, "10000-01-01"),+              (fromGregorian 1000000000000000 12 31, "1000000000000000-12-31")+            ]+      forM_ vectors $ \(value, expectedText) -> do+        renderCalendarDay value `shouldBe` expectedText+        encodeCalendarDay value `shouldBe` Aeson.toJSON value+        parseCalendarDayText expectedText `shouldBe` Right value++    it "accepts historical Aeson reader spellings and normalizes them" $ do+      parseCalendarDayText "+2026-09-19" `shouldBe` Right (fromGregorian 2026 9 19)+      parseCalendarDayText "02026-09-19" `shouldBe` Right (fromGregorian 2026 9 19)+      parseCanonicalCalendarDayText "+2026-09-19" `shouldSatisfy` isLeft+      parseCanonicalCalendarDayText "02026-09-19" `shouldSatisfy` isLeft+      parseEither parseCalendarDay (Aeson.String "+2026-09-19")+        `shouldBe` Right (fromGregorian 2026 9 19)++    it "rejects invalid dates and non-string JSON" $ do+      parseCalendarDayText "1900-02-29" `shouldSatisfy` isLeft+      parseCalendarDayText "2026-02-30" `shouldSatisfy` isLeft+      parseCalendarDayText "2026-2-03" `shouldSatisfy` isLeft+      parseEither parseCalendarDay Aeson.Null `shouldSatisfy` isLeft++    it "round-trips arbitrary Day values without a four-digit-year limit" $+      property $ \modifiedJulianDay ->+        let value = ModifiedJulianDay modifiedJulianDay+         in parseCalendarDayText (renderCalendarDay value) == Right value++  describe "text-set codec policy v1" $ do+    it "pins the stable identity and Unicode code-point order" $ do+      textSetCodecPolicyIdentity `shouldBe` "keiro-core/text-set/1"+      let values = Set.fromList ["\x10000", "\xE000", "ä", "a\x0308", "a", "A"]+          expected = ["A", "a", "a\x0308", "ä", "\xE000", "\x10000"] :: [T.Text]+      encodeTextSet values `shouldBe` Aeson.toJSON expected+      Aeson.encode (encodeTextSet values)+        `shouldBe` Aeson.encode expected++    it "normalizes permutations and duplicates before exposing the value" $ do+      let nonCanonical = Aeson.toJSON (["b", "a", "a"] :: [T.Text])+          canonical = Aeson.toJSON (["a", "b"] :: [T.Text])+          expected = Set.fromList ["a", "b"]+      parseEither parseTextSet nonCanonical `shouldBe` Right expected+      parseEither parseTextSet canonical `shouldBe` Right expected+      fmap encodeTextSet (parseEither parseTextSet nonCanonical) `shouldBe` Right canonical++    it "rejects non-arrays and reports the index of non-string elements" $ do+      parseEither parseTextSet Aeson.Null `shouldSatisfy` isLeft+      case parseEither parseTextSet (Aeson.toJSON ([Aeson.String "a", Aeson.Number 1] :: [Value])) of+        Left failure -> failure `shouldContain` "[1]"+        Right value -> expectationFailure ("unexpected text set: " <> show value)++    it "round-trips arbitrary text sets" $+      property $ \values ->+        let value = Set.fromList (map T.pack (values :: [String]))+         in parseEither parseTextSet (encodeTextSet value) == Right value++  describe "base16-bytes codec policy v1" $ do+    it "pins the stable identity and canonical lowercase writer" $ do+      base16BytesCodecPolicyIdentity `shouldBe` "keiro-core/base16-bytes/1"+      renderBase16Bytes (BS.pack [0, 175, 255]) `shouldBe` "00afff"+      encodeBase16Bytes (BS.pack [0, 175, 255]) `shouldBe` Aeson.String "00afff"++    it "accepts case-insensitive historical spellings without changing decoded bytes" $ do+      decodeBase16BytesText "00aF" `shouldBe` Right (BS.pack [0, 175])+      decodeBase16BytesText "00af" `shouldBe` Right (BS.pack [0, 175])+      fmap renderBase16Bytes (decodeBase16BytesText "00AF") `shouldBe` Right "00af"+      parseEither parseBase16Bytes (Aeson.String "00aF") `shouldBe` Right (BS.pack [0, 175])++    it "accepts empty, leading-zero, and unrestricted-length byte strings" $ do+      decodeBase16BytesText "" `shouldBe` Right BS.empty+      decodeBase16BytesText "00" `shouldBe` Right (BS.singleton 0)+      decodeBase16BytesText "0011223344" `shouldBe` Right (BS.pack [0, 17, 34, 51, 68])++    it "rejects odd length, prefixes, whitespace, non-hex digits, and non-string JSON" $ do+      decodeBase16BytesText "0" `shouldBe` Left (Base16BytesOddLength 1)+      decodeBase16BytesText "0x00" `shouldBe` Left (Base16BytesInvalidDigit 1 'x')+      decodeBase16BytesText "gg" `shouldBe` Left (Base16BytesInvalidDigit 0 'g')+      decodeBase16BytesText "00 af" `shouldBe` Left (Base16BytesOddLength 5)+      parseEither parseBase16Bytes Aeson.Null `shouldSatisfy` isLeft++    it "round-trips arbitrary bytes" $+      property $ \bytes ->+        let value = BS.pack (bytes :: [Word8])+         in decodeBase16BytesText (renderBase16Bytes value) == Right value+   describe "mapped consumer surface" $ do     it "parses and canonically round-trips Language 5 queue and query expressions as atomic forms" $ do       source <- mappedConsumerSurfaceSource@@ -1759,6 +1924,10 @@         `shouldBe` sort           [ "aggregate-collection-expressions-v2-rejects.keiro",             "aggregate-scalar-expressions-v1-rejects.keiro",+            "bare-containers.keiro",+            "calendar-days.keiro",+            "checked-mapping-replay-workspace/domain/service.keiro",+            "checked-mapping-replay-workspace/domain/values.keiro",             "catalog-readmodel-backing-required.keiro",             "catalog-readmodel-backing-unobserved.keiro",             "catalog-readmodel-physical-override.keiro",@@ -1774,6 +1943,7 @@             "direct-optional-id.keiro",             "domain-command-outcomes.keiro",             "hospital-surge-reactions.keiro",+            "id-admission-domains.keiro",             "id-domain-migration-v3.keiro",             "intake-delegated.keiro",             "language-duplicate.keiro",@@ -1810,6 +1980,7 @@             "projection-catalog-unrelated.keiro",             "projection-catalog.keiro",             "projection-owner-multi-query.keiro",+            "refined-base16.keiro",             "structural-nominal-leaves-enum-spelling.keiro",             "structural-nominal-leaves-binding-change.keiro",             "structural-nominal-leaves-keyed-map-key-change.keiro",@@ -1817,6 +1988,7 @@             "structural-nominal-leaves-prefix-change.keiro",             "structural-nominal-leaves-text-to-nominal.keiro",             "structural-nominal-leaves.keiro",+            "structural-text-sets.keiro",             "process-reactions-accepted-requires-event.keiro",             "process-reactions-accepted-unverified.keiro",             "process-reactions-badmapping.keiro",@@ -2819,6 +2991,24 @@       contractIdDomainContractFor v3Contract "req" `shouldBe` Nothing       contractIdDomainContractFor v4Contract "req" `shouldBe` Just (typeIdV7Domain "req") +    it "gates explicit admission syntax to language 6 and round-trips its checked choice" $ do+      let explicitSource versionNumber =+            T.unlines+              [ "language keiro-dsl " <> T.pack (show versionNumber),+                "context explicit-id-admission",+                "id LegacyId prefix=legacy domain=typeid-v5-or-v7"+              ]+      parsed <- parseRight "explicit-id-admission-v6.keiro" (explicitSource (6 :: Int))+      case (.ids) (checkedSpec (checkedSource parsed)) of+        [declaration] -> (.admission) declaration `shouldBe` TypeIdV5OrV7+        declarations -> expectationFailure ("expected one ID declaration, got " <> show (length declarations))+      parseSource "explicit-id-admission-round-trip.keiro" (renderSource parsed) `shouldBe` Right parsed+      parseSource "explicit-id-admission-v5.keiro" (explicitSource (5 :: Int))+        `shouldSatisfy` \case+          Left (SourceLanguageFailure diagnostic) -> (.errorCode) diagnostic == LanguageFeatureRequiresVersion+          Left _ -> False+          Right _ -> False+     it "constructs typed KindIDs only after the frozen four-way admission policy" $ do       let valid = "req_01h455vb4pex5vsknk084sn02q"           uppercase = "req_01H455VB4PEX5VSKNK084SN02Q"@@ -2839,6 +3029,26 @@           Left problem -> "not canonical lowercase" `T.isInfixOf` T.pack problem           Right _ -> False +    it "admits canonical UUIDv5 and UUIDv7 only through the explicit wider domain" $ do+      let v5 = "req_58kj0y515rbwebzaxwzzknjqnk"+          v7 = "req_01h455vb4pex5vsknk084sn02q"+          wide = typeIdV5OrV7Domain "req"+      validateIdDomainText wide v5 `shouldBe` Right ()+      validateIdDomainText wide v7 `shouldBe` Right ()+      validateIdDomainText (typeIdV7Domain "req") v5 `shouldSatisfy` \case+        Left IdDomainNotUuidV7 {} -> True+        _ -> False+      (KindID.toText @"req" <$> parseKindIdText @"req" wide v5) `shouldBe` Right v5+      parseKindIdText @"other" wide v5 `shouldBe` Left (IdDomainWrongPrefix "other" "req")+      let excludedVersion = T.take 14 v5 <> "c" <> T.drop 15 v5+          excludedVariant = T.take 17 v5 <> "c" <> T.drop 18 v5+      validateIdDomainText wide excludedVersion `shouldSatisfy` \case+        Left IdDomainVersionNotAdmitted {} -> True+        _ -> False+      validateIdDomainText wide excludedVariant `shouldSatisfy` \case+        Left IdDomainVariantNotRfc4122 {} -> True+        _ -> False+     it "validates contract TypeID prefixes only at the language-4 boundary" $ do       let source versionNumber =             T.unlines@@ -2932,6 +3142,106 @@               : [counterexample (T.unpack invalid) (isLeft (validateIdDomainText contract invalid) && not (matchesTextPattern patternValue invalid)) | invalid <- invalidValues]           ) +    it "keeps each runtime validator exactly equal to its symbolic text domain" $ property $ do+      let crockford = "0123456789abcdefghjkmnpqrstvwxyz"+          segment count = vectorOf count (elements crockford)+      leading <- elements "01234567"+      beforeVersion <- segment 9+      version <- elements crockford+      beforeVariant <- segment 2+      variantDigit <- elements crockford+      afterVariant <- segment 12+      let value = T.pack ("req_" <> [leading] <> beforeVersion <> [version] <> beforeVariant <> [variantDigit] <> afterVariant)+          contracts = [typeIdV7Domain "req", typeIdV5OrV7Domain "req"]+          agrees contract =+            let patternValue = either (error . show) id (idDomainTextPattern contract)+             in isRight (validateIdDomainText contract value) == matchesTextPattern patternValue value+      pure (conjoin [counterexample (show contract <> " disagreed on " <> T.unpack value) (agrees contract) | contract <- contracts])++    it "exposes a stale v7-only witness for a UUIDv5-reachable declaration" $ do+      let v5 = "req_58kj0y515rbwebzaxwzzknjqnk"+          widePattern = either (error . show) id (idDomainTextPattern (typeIdV5OrV7Domain "req"))+          stalePattern = either (error . show) id (idDomainTextPattern (typeIdV7Domain "req"))+      validateIdDomainText (typeIdV5OrV7Domain "req") v5 `shouldBe` Right ()+      matchesTextPattern widePattern v5 `shouldBe` True+      matchesTextPattern stalePattern v5 `shouldBe` False++    it "keeps v5-only guard overlap visible and proof-unknown paths conservative" $ do+      let v5 = "req_58kj0y515rbwebzaxwzzknjqnk"+          owner = AdmissionDomainOwner v5+          projected = Keiki.regProj wideAdmissionDomainWitness admissionDomainOwnerIndex+          v5Guard = Keiki.PEq projected (Keiki.TLit v5)+          opaqueV5Guard = Keiki.PEq (Keiki.TApp1 id projected) (Keiki.TLit v5)+      Keiki.checkFieldProjectionOwner wideAdmissionDomainWitness owner `shouldBe` Right ()+      Keiki.checkFieldProjectionKey wideAdmissionDomainWitness v5 `shouldBe` Right owner+      Keiki.checkFieldProjectionOwner staleV7AdmissionDomainWitness owner+        `shouldBe` Left Keiki.ProjectedKeyOutsideDeclaredDomain+      KeikiSymbolic.verifyPredicate (Keiki.PAnd v5Guard v5Guard)+        `shouldReturn` KeikiSymbolic.VerifiedSatisfiable+      KeikiSymbolic.verifyPredicate (Keiki.PAnd v5Guard opaqueV5Guard)+        `shouldReturn` KeikiSymbolic.UnverifiedOpaque++    it "marks direct and nested admission changes replay-affected in both directions" $ do+      let declaration TypeIdV7 = "id EntityId prefix=entity"+          declaration TypeIdV5OrV7 = "id EntityId prefix=entity domain=typeid-v5-or-v7"+          directSource admission =+            T.unlines+              [ "language keiro-dsl 6",+                "context direct-id-admission",+                declaration admission,+                "aggregate EntityLedger",+                "  regs",+                "    current EntityId = placeholder",+                "  states Open",+                "  command Record { entityId:EntityId }",+                "  event Recorded = fields(Record)",+                "  Open -- Record --> write current := cmd.entityId ; emit Recorded ; goto Open"+              ]+          nestedSource admission =+            T.unlines+              [ "language keiro-dsl 6",+                "context nested-id-admission",+                declaration admission,+                "mapped structural record EntityEnvelope {",+                "  haskell package=example module=Example.Entity type=EntityEnvelope",+                "  binding = \"Example.Entity.entityEnvelopeBinding\"",+                "  binding-version = \"1\"",+                "  canonical-type = \"example.EntityEnvelope.v1\"",+                "  fixtures = \"Example.Entity.entityEnvelopeFixtures\"",+                "  wire object constructor=EntityEnvelope unknown-fields=reject {",+                "    entityId as \"entityId\" : EntityId required",+                "  }",+                "}",+                "aggregate EntityLedger",+                "  regs",+                "  states Open",+                "  command Record { envelope:EntityEnvelope }",+                "  event Recorded = fields(Record)",+                "  Open -- Record --> emit Recorded ; goto Open"+              ]+          checked name source = checkedSource <$> parseRight name source+          assertChanged oldService newService expectedDetail = do+            validateService oldService `shouldBe` []+            validateService newService `shouldBe` []+            let oldAggregate = onlyAggregate (checkedSpec oldService)+                newAggregate = onlyAggregate (checkedSpec newService)+                findings = [kindOfChange change | change <- diffServices oldService newService, changeCode change == IdDomainContractChanged]+            aggregateFoldFingerprintForService oldService oldAggregate+              `shouldNotBe` aggregateFoldFingerprintForService newService newAggregate+            resolvedFold (ReplayImpact.replayImpactServices oldService newService) `shouldSatisfy` \case+              ReplayImpact.ReplayAffected impacts -> Map.member "EntityLedger" impacts+              ReplayImpact.ReplayNeutral -> False+            findings `shouldSatisfy` (not . null)+            map (.detail) findings `shouldSatisfy` any (T.isInfixOf expectedDetail)+      directV7 <- checked "direct-id-v7.keiro" (directSource TypeIdV7)+      directWide <- checked "direct-id-wide.keiro" (directSource TypeIdV5OrV7)+      nestedV7 <- checked "nested-id-v7.keiro" (nestedSource TypeIdV7)+      nestedWide <- checked "nested-id-wide.keiro" (nestedSource TypeIdV5OrV7)+      assertChanged directV7 directWide "old-reader/new-writer hazard"+      assertChanged directWide directV7 "retained UUIDv5 history may stop decoding"+      assertChanged nestedV7 nestedWide "old-reader/new-writer hazard"+      assertChanged nestedWide nestedV7 "retained UUIDv5 history may stop decoding"+     it "enforces the same contract before consumer binding conversion and explains its version" $ do       v2Source <- readTestText "test/fixtures/nominal-scalars.keiro"       let v3Text = T.replace "language keiro-dsl 2" "language keiro-dsl 3" v2Source@@ -4419,6 +4729,429 @@           nodes -> expectationFailure ("unexpected node sequence: " <> show (map nodeTag nodes))    describe "mapped types (EP-149)" $ do+    it "preserves missing-key semantics when an event's only checked mapping is a bare optional value" $ do+      service <-+        checkedServiceFromText+          "<bare-optional-event>"+          ( T.unlines+              [ "language keiro-dsl 6",+                "context bare-optional-event",+                "",+                "mapped structural value MaybeText {",+                "  haskell package=consumer module=Consumer.Domain type=MaybeText",+                "  binding = \"Consumer.Bindings.maybeTextBinding\"",+                "  binding-version = \"1\"",+                "  canonical-type = \"consumer.MaybeText.v1\"",+                "  fixtures = \"Consumer.Bindings.maybeTextFixtures\"",+                "  initial = \"Consumer.Bindings.initialMaybeText\"",+                "  wire Optional Text",+                "}",+                "",+                "aggregate Reminder",+                "  regs",+                "    current MaybeText = initial",+                "  states Empty Stored!",+                "",+                "  command Store { actor:MaybeText }",+                "  event StoredValue = fields(Store)",+                "",+                "  Empty -- Store -->",+                "    write current := actor",+                "    emit StoredValue",+                "    goto Stored",+                "",+                "  wire kind=ctorName fields=camelCase schemaVersion=1"+              ]+          )+      let codec =+            generatedTextEndingIn+              "Reminder/Codec.hs"+              (scaffoldServiceModules (defaultContext "bare-optional-event") service)+      codec `shouldSatisfy` T.isInfixOf "import Data.Aeson.Types (Parser, explicitParseField, parseEither)"+      codec `shouldSatisfy` T.isInfixOf "parseOptionalField (parseMaybeTextMapped Null) parseMaybeTextMapped o \"actor\""++    it "admits calendar days only in the candidate profile and freezes their wire policy" $ do+      source <- readTestText "test/fixtures/calendar-days.keiro"+      service <- checkedServiceFromText "test/fixtures/calendar-days.keiro" source+      let spec = checkedSpec service+          bareShapes = [(name, shape) | MappedStructural {msName = name, msShape = shape@ShapeBare {}} <- (.mapped) spec]+      bareShapes `shouldContain` [("LocalDay", ShapeBare TDay), ("MaybeLocalDay", ShapeBare (TOptional TDay))]+      runtimeProfileHasCapability ((.runtimeProfile) (checkedLanguageContract service)) CalendarDayMappings `shouldBe` True+      capabilityFoldSegment CalendarDayMappings `shouldBe` Nothing+      graph <- shouldResolveTypeGraph spec+      wireFingerprintForCalendarDayPolicy calendarDayCodecPolicyIdentity graph "LocalDay"+        `shouldBe` wireFingerprint graph "LocalDay"+      wireFingerprintForCalendarDayPolicy "keiro-core/calendar-day/2" graph "LocalDay"+        `shouldNotBe` wireFingerprint graph "LocalDay"+      case parseSource "<calendar-days-language-5>" (T.replace "language keiro-dsl 6" "language keiro-dsl 5" source) of+        Left (SourceLanguageFailure diagnostic) -> (.errorCode) diagnostic `shouldBe` LanguageFeatureRequiresVersion+        result -> expectationFailure ("expected calendar-day language refusal, got " <> show result)++    it "classifies Text-to-Day and Time-to-Day mapped changes as replay-affected" $ do+      daySpec <- specOf "test/fixtures/calendar-days.keiro"+      let withPrimary replacement =+            specWithMapped+              [ rewrite declaration+              | declaration <- daySpec.mapped+              ]+              daySpec+            where+              rewrite declaration@MappedStructural {msName = "CalendarEnvelope", msShape = ShapeRecord constructor unknown fields} =+                declaration+                  { msShape =+                      ShapeRecord+                        constructor+                        unknown+                        [ if field.haskell == "primary" then field {valueType = replacement} else field+                        | field <- fields+                        ]+                  }+              rewrite declaration = declaration+          assertAffected oldSpec = replayImpactSpecs oldSpec daySpec `shouldSatisfy` (/= ReplayNeutral)+      assertAffected (withPrimary TText)+      assertAffected (withPrimary TTime)++    it "admits refined base16 bytes only in the candidate profile and freezes their distinct wire policy" $ do+      source <- readTestText "test/fixtures/refined-base16.keiro"+      parsed <- parsedSourceOf "test/fixtures/refined-base16.keiro"+      let service = checkedSource parsed+      let spec = checkedSpec service+          refined = [(name, policy) | MappedRefined {mrName = name, mrPolicy = policy} <- (.mapped) spec]+      refined `shouldContain` [("ContentHash", Base16BytesV1)]+      parseSource "<refined-base16-roundtrip>" (renderSource parsed) `shouldBe` Right parsed+      runtimeProfileHasCapability ((.runtimeProfile) (checkedLanguageContract service)) RefinedBase16Mappings `shouldBe` True+      capabilityFoldSegment RefinedBase16Mappings `shouldBe` Nothing+      graph <- shouldResolveTypeGraph spec+      wireFingerprintForBase16BytesPolicy base16BytesCodecPolicyIdentity graph "ContentHash"+        `shouldBe` wireFingerprint graph "ContentHash"+      wireFingerprintForBase16BytesPolicy "keiro-core/base16-bytes/2" graph "ContentHash"+        `shouldNotBe` wireFingerprint graph "ContentHash"+      case parseSource "<refined-base16-language-5>" (T.replace "language keiro-dsl 6" "language keiro-dsl 5" source) of+        Left (SourceLanguageFailure diagnostic) -> (.errorCode) diagnostic `shouldBe` LanguageFeatureRequiresVersion+        result -> expectationFailure ("expected refined base16 language refusal, got " <> show result)++    it "plans refined base16 ByteString codecs across nested aggregate, queue, query, and manifest surfaces" $ do+      service <- checkedServiceOf "test/fixtures/refined-base16.keiro"+      let modules = scaffoldServiceModules (defaultContext "refined-base16") service+          refinedShape = generatedTextEndingIn "Structural/Shape/ContentHash.hs" modules+          envelopeShape = generatedTextEndingIn "Structural/Shape/HashEnvelope.hs" modules+          aggregateCodec = generatedTextEndingIn "HashStore/Codec.hs" modules+          queue = generatedTextEndingIn "HashJobs/Queue.hs" modules+          queryContract = generatedTextEndingIn "HashLookup/QueryContract.hs" modules+      refinedShape `shouldSatisfy` T.isInfixOf "type ContentHashShape = ByteString"+      envelopeShape `shouldSatisfy` T.isInfixOf "primary :: !ContentHash.ContentHashShape"+      aggregateCodec `shouldSatisfy` T.isInfixOf "import Keiro.Codec.Base16Bytes (encodeBase16Bytes, parseBase16Bytes)"+      queue `shouldSatisfy` T.isInfixOf "encodeBase16Bytes"+      queryContract `shouldSatisfy` T.isInfixOf "type HashLookupQueryInput = MaybeContentHash"+      manifestDependenciesForService service+        `shouldBe` ["aeson", "base", "bytestring", "containers", "effectful-core", "hasql-transaction", "keiki", "keiro", "keiro-core", "keiro-dsl", "keiro-pgmq", "kiroku-store", "text"]++    it "classifies nominal-Text-to-refined, opaque-to-refined, and policy changes as replay-affected" $ do+      source <- readTestText "test/fixtures/refined-base16.keiro"+      refinedService <- checkedServiceFromText "refined-base16.keiro" source+      nominalService <-+        checkedServiceFromText+          "refined-base16-nominal.keiro"+          ( T.replace+              "mapped refined ContentHash {"+              "mapped nominal ContentHash : Text {"+              (T.replace "  wire base16-bytes\n" "" source)+          )+      let refinedSpec = checkedSpec refinedService+          nominalSpec = checkedSpec nominalService+          opaque =+            MappedOpaque+              { moName = "ContentHash",+                moHaskell = Just (HaskellSource "keiro-dsl" "Conformance.RefinedBase16.Domain" "ContentHash"),+                moCodecId = Just "conformance.refined-base16.ContentHash.opaque",+                moCodecVersion = Just "1",+                moFixtures = Just "Conformance.RefinedBase16.Bindings.contentHashFixtures",+                moInitial = Just "Conformance.RefinedBase16.Bindings.initialContentHash",+                moLoc = noLoc+              }+          opaqueSpec =+            specWithMapped+              (opaque : [declaration | declaration <- refinedSpec.mapped, mappedDeclarationName declaration /= "ContentHash"])+              refinedSpec+      replayImpactSpecs nominalSpec refinedSpec `shouldSatisfy` (/= ReplayNeutral)+      replayImpactSpecs opaqueSpec refinedSpec `shouldSatisfy` (/= ReplayNeutral)+      graph <- shouldResolveTypeGraph refinedSpec+      wireFingerprintForBase16BytesPolicy "keiro-core/base16-bytes/2" graph "ContentHash"+        `shouldNotBe` wireFingerprint graph "ContentHash"++    it "rejects refined base16 callbacks, length options, map keys, symbolic operations, and public-contract use" $ do+      source <- readTestText "test/fixtures/refined-base16.keiro"+      parseSource "<refined-base16-length>" (T.replace "wire base16-bytes" "wire base16-bytes length=32" source)+        `shouldSatisfy` isLeft+      parseSource "<refined-base16-callback>" (T.replace "wire base16-bytes" "wire custom Example.decodeHash" source)+        `shouldSatisfy` isLeft+      keyed <-+        checkedServiceFromText+          "<refined-base16-keyed-map>"+          (T.replace "Map ContentHash required" "Map[ContentHash] Text required" source)+      case resolveTypeGraph (checkedSpec keyed) of+        Left errors ->+          toList errors+            `shouldSatisfy` any (\case TGUnsupportedNominalLeaf _ "ContentHash" "mapped map key" _ -> True; _ -> False)+        Right _ -> expectationFailure "expected mapped refined map key refusal"+      symbolic <-+        checkedServiceFromText+          "<refined-base16-symbolic>"+          (T.replace "  Empty -- StoreHash -->\n" "  Empty -- StoreHash -->\n    guard cmd.hash == cmd.hash\n" source)+      map (.code) (validateSpec (checkedSpec symbolic)) `shouldContain` [AggregateExpressionOperatorUnsupported]+      publicContract <-+        checkedServiceFromText+          "<refined-base16-contract>"+          ( source+              <> T.unlines+                [ "contract public_hashes {",+                  "  schemaVersion 1",+                  "  discriminator kind",+                  "  topic events \"public.hashes\"",+                  "  event HashPublished on events { hash: ContentHash }",+                  "}"+                ]+          )+      map (.code) (validateSpec (checkedSpec publicContract)) `shouldContain` [ContractIdUnknown]++    it "admits structural text sets only in the candidate profile and freezes their distinct wire policy" $ do+      source <- readTestText "test/fixtures/structural-text-sets.keiro"+      service <- checkedServiceFromText "test/fixtures/structural-text-sets.keiro" source+      let spec = checkedSpec service+          bareShapes = [(name, shape) | MappedStructural {msName = name, msShape = shape@ShapeBare {}} <- (.mapped) spec]+      bareShapes+        `shouldContain` [ ("TextLabels", ShapeBare TTextSet),+                          ("MaybeTextLabels", ShapeBare (TOptional TTextSet))+                        ]+      runtimeProfileHasCapability ((.runtimeProfile) (checkedLanguageContract service)) TextSetMappings `shouldBe` True+      capabilityFoldSegment TextSetMappings `shouldBe` Nothing+      graph <- shouldResolveTypeGraph spec+      wireFingerprintForTextSetPolicy textSetCodecPolicyIdentity graph "TextLabels"+        `shouldBe` wireFingerprint graph "TextLabels"+      wireFingerprintForTextSetPolicy "keiro-core/text-set/2" graph "TextLabels"+        `shouldNotBe` wireFingerprint graph "TextLabels"+      let listSpec =+            specWithMapped+              [ case declaration of+                  value@MappedStructural {msName = "TextLabels"} -> value {msShape = ShapeBare (TList TText)}+                  value -> value+              | declaration <- spec.mapped+              ]+              spec+      listGraph <- shouldResolveTypeGraph listSpec+      wireFingerprint graph "TextLabels" `shouldNotBe` wireFingerprint listGraph "TextLabels"+      case parseSource "<structural-text-sets-language-5>" (T.replace "language keiro-dsl 6" "language keiro-dsl 5" source) of+        Left (SourceLanguageFailure diagnostic) -> (.errorCode) diagnostic `shouldBe` LanguageFeatureRequiresVersion+        result -> expectationFailure ("expected structural text-set language refusal, got " <> show result)++    it "plans Set Text imports and generated codecs across aggregate, queue, query, and manifest surfaces" $ do+      service <- checkedServiceOf "test/fixtures/structural-text-sets.keiro"+      graph <- shouldResolveTypeGraph (checkedSpec service)+      let modules = scaffoldServiceModules (defaultContext "structural-text-sets") service+          shape = generatedTextEndingIn "Structural/Shape/LabelEnvelope.hs" modules+          aggregateCodec = generatedTextEndingIn "LabelStore/Codec.hs" modules+          queue = generatedTextEndingIn "LabelJobs/Queue.hs" modules+          queryContract = generatedTextEndingIn "LabelLookup/QueryContract.hs" modules+      case planConsumerType graph RTextSet of+        Left problem -> expectationFailure (show problem)+        Right planned -> do+          unHaskellTypeOccurrence planned.haskellType `shouldBe` "Set Text"+          planned.imports+            `shouldBe` [ ImportRequirement "containers" "Data.Set" "Set",+                         ImportRequirement "text" "Data.Text" "Text"+                       ]+      shape `shouldSatisfy` T.isInfixOf "import Data.Set (Set)"+      shape `shouldSatisfy` T.isInfixOf "primary :: !(Set Text)"+      aggregateCodec `shouldSatisfy` T.isInfixOf "import Keiro.Codec.TextSet (encodeTextSet, parseTextSet)"+      queue `shouldSatisfy` T.isInfixOf "encodeTextSet"+      queryContract `shouldSatisfy` T.isInfixOf "type LabelLookupQueryInput = MaybeTextLabels"+      manifestDependenciesForService service+        `shouldBe` ["aeson", "base", "containers", "effectful-core", "hasql-transaction", "keiki", "keiro", "keiro-core", "keiro-dsl", "keiro-pgmq", "kiroku-store", "text"]++    it "classifies List-to-Set, Set-to-List, opaque-to-Set, and policy changes as replay-affected" $ do+      setSpec <- specOf "test/fixtures/structural-text-sets.keiro"+      let withTextLabels replacement =+            specWithMapped+              [ case declaration of+                  value@MappedStructural {msName = "TextLabels"} -> value {msShape = ShapeBare replacement}+                  value -> value+              | declaration <- setSpec.mapped+              ]+              setSpec+          listSpec = withTextLabels (TList TText)+          opaque =+            MappedOpaque+              { moName = "TextLabels",+                moHaskell = Just (HaskellSource "keiro-dsl" "Conformance.StructuralTextSets.Domain" "TextLabels"),+                moCodecId = Just "conformance.structural-text-sets.TextLabels.opaque",+                moCodecVersion = Just "1",+                moFixtures = Just "Conformance.StructuralTextSets.Bindings.textLabelsFixtures",+                moInitial = Just "Conformance.StructuralTextSets.Bindings.initialTextLabels",+                moLoc = noLoc+              }+          opaqueSpec =+            specWithMapped+              (opaque : [declaration | declaration <- setSpec.mapped, mappedDeclarationName declaration /= "TextLabels"])+              setSpec+      replayImpactSpecs listSpec setSpec `shouldSatisfy` (/= ReplayNeutral)+      replayImpactSpecs setSpec listSpec `shouldSatisfy` (/= ReplayNeutral)+      replayImpactSpecs opaqueSpec setSpec `shouldSatisfy` (/= ReplayNeutral)+      graph <- shouldResolveTypeGraph setSpec+      wireFingerprintForTextSetPolicy "keiro-core/text-set/2" graph "TextLabels"+        `shouldNotBe` wireFingerprint graph "TextLabels"++    it "rejects direct aggregate Set Text fields with located guidance" $ do+      direct <-+        parseInlineSpec+          "<direct-text-set>"+          ( T.unlines+              [ "language keiro-dsl 6",+                "context direct-text-set",+                "aggregate Labels",+                "  regs",+                "  states Open",+                "  command Record { labels:Set Text }",+                "  event Recorded = fields(Record)",+                "  Open -- Record --> emit Recorded ; goto Open",+                "  wire kind=ctorName fields=camelCase schemaVersion=1"+              ]+          )+      let directErrors = [diagnostic | diagnostic <- validateSpec direct, (.severity) diagnostic == Error]+      map (.code) directErrors `shouldContain` [AggregateTypeUnsupportedAtUse]+      map (.message) directErrors `shouldSatisfy` any (T.isInfixOf "Set(Text)")+      symbolic <-+        parseInlineSpec+          "<symbolic-text-set>"+          ( T.unlines+              [ "language keiro-dsl 6",+                "context symbolic-text-set",+                "mapped structural value TextLabels {",+                "  haskell package=example module=Example.Domain type=TextLabels",+                "  binding = \"Example.Bindings.textLabelsBinding\"",+                "  binding-version = \"1\"",+                "  canonical-type = \"example.TextLabels.v1\"",+                "  fixtures = \"Example.Bindings.textLabelsFixtures\"",+                "  wire Set Text",+                "}",+                "aggregate Labels",+                "  regs",+                "  states Open",+                "  command Record { labels:TextLabels }",+                "  event Recorded = fields(Record)",+                "  Open -- Record --> guard cmd.labels == cmd.labels ; emit Recorded ; goto Open",+                "  wire kind=ctorName fields=camelCase schemaVersion=1"+              ]+          )+      map (.code) (validateSpec symbolic) `shouldContain` [AggregateExpressionOperatorUnsupported]++    it "rejects direct aggregate and nominal Day shapes with located guidance" $ do+      direct <-+        parseInlineSpec+          "<direct-day>"+          ( T.unlines+              [ "language keiro-dsl 6",+                "context direct-day",+                "aggregate Calendar",+                "  regs",+                "  states Open",+                "  command Record { day:Day }",+                "  event Recorded = fields(Record)",+                "  Open -- Record --> emit Recorded ; goto Open",+                "  wire kind=ctorName fields=camelCase schemaVersion=1"+              ]+          )+      let directErrors = [diagnostic | diagnostic <- validateSpec direct, (.severity) diagnostic == Error]+      map (.code) directErrors `shouldContain` [AggregateTypeUnsupportedAtUse]+      map (.message) directErrors `shouldSatisfy` any (T.isInfixOf "wire Day")+      nominal <-+        parseInlineSpec+          "<nominal-day>"+          ( T.unlines+              [ "language keiro-dsl 6",+                "context nominal-day",+                "mapped nominal Birthday : Day {",+                "  haskell package=example module=Example.Domain type=Birthday",+                "  binding = \"Example.Bindings.birthdayBinding\"",+                "  binding-version = \"1\"",+                "  canonical-type = \"example.Birthday.v1\"",+                "  fixtures = \"Example.Bindings.birthdayFixtures\"",+                "}"+              ]+          )+      map (.code) (validateSpec nominal) `shouldContain` [NominalUnsupportedRepresentation]++    it "round-trips candidate bare container mappings and gates their declaration kind" $ do+      source <- readTestText "test/fixtures/bare-containers.keiro"+      parsed <- checkedServiceFromText "test/fixtures/bare-containers.keiro" source+      let spec = checkedSpec parsed+          bareShapes = [shape | MappedStructural {msShape = shape@ShapeBare {}} <- (.mapped) spec]+      bareShapes+        `shouldBe` [ ShapeBare (TOptional TText),+                     ShapeBare (TList TText),+                     ShapeBare (TMap TText),+                     ShapeBare (TList (TOptional (TRef "ItemId")))+                   ]+      case parseSource "<bare-containers-round-trip>" ("language keiro-dsl 6\n" <> renderSpec spec) of+        Left failure -> expectationFailure (T.unpack (renderParseFailure failure))+        Right reparsed -> reparsed.spec `shouldBe` spec+      case parseSource "<bare-containers-language-5>" (T.replace "language keiro-dsl 6" "language keiro-dsl 5" source) of+        Left (SourceLanguageFailure diagnostic) -> (.errorCode) diagnostic `shouldBe` LanguageFeatureRequiresVersion+        result -> expectationFailure ("expected bare-mapping language refusal, got " <> show result)+    it "derives nullability and on-missing defaults through bare aliases" $ do+      let maybeText = completeStructural "MaybeText" (ShapeBare (TOptional TText))+          listText = completeStructural "TextList" (ShapeBare (TList TText))+          mapText = completeStructural "TextMap" (ShapeBare (TMap TText))+          validEnvelope =+            completeStructural+              "Envelope"+              ( ShapeRecord+                  "Envelope"+                  RejectUnknown+                  [ WireField "label" "label" (TRef "MaybeText") POptional (Just OmNull) noLoc,+                    WireField "labels" "labels" (TRef "TextList") POptional (Just OmEmptyList) noLoc,+                    WireField "attributes" "attributes" (TRef "TextMap") POptional (Just OmEmptyMap) noLoc+                  ]+              )+          nullableAlias = completeStructural "NullableAlias" (ShapeBare (TOptional (TRef "MaybeText")))+          nestedNullable = completeStructural "NestedNullable" (ShapeBare (TOptional (TOptional TText)))+          invalidDefault =+            completeStructural+              "InvalidDefault"+              (ShapeRecord "InvalidDefault" RejectUnknown [WireField "labels" "labels" (TRef "TextList") POptional (Just OmNull) noLoc])+      errorCodes (mappedSpec [maybeText, listText, mapText, validEnvelope]) `shouldBe` []+      errorCodes (mappedSpec [maybeText, nullableAlias]) `shouldContain` [MappedNonInjectiveNullability]+      errorCodes (mappedSpec [nestedNullable]) `shouldContain` [MappedNonInjectiveNullability]+      errorCodes (mappedSpec [listText, invalidDefault]) `shouldContain` [MappedDefaultIllTyped]+    it "lowers bare shapes without an object wrapper and preserves wire identity on alias extraction" $ do+      service <- checkedServiceOf "test/fixtures/bare-containers.keiro"+      let spec = checkedSpec service+          modules = scaffoldModules (defaultContext (spec.context)) spec+          maybeShape = generatedTextEndingIn "Structural/Shape/MaybeText.hs" modules+          codec = generatedTextEndingIn "BareStore/Codec.hs" modules+      maybeShape `shouldSatisfy` T.isInfixOf "type MaybeTextShape = (Maybe Text)"+      maybeShape `shouldNotSatisfy` T.isInfixOf "data MaybeTextShape"+      codec `shouldSatisfy` T.isInfixOf "encodeMaybeTextShape value = maybe Null"+      codec `shouldSatisfy` T.isInfixOf "parseMaybeTextShape = \\value0 -> case value0 of Null -> pure Nothing"+      let inlineEnvelope = completeStructural "Envelope" (recordShape [TOptional TText])+          alias = completeStructural "MaybeText" (ShapeBare (TOptional TText))+          aliasedEnvelope = completeStructural "Envelope" (recordShape [TRef "MaybeText"])+          opaqueAlias =+            MappedOpaque+              { moName = "MaybeText",+                moHaskell = Just (HaskellSource "mapped-test" "Example.Mapped" "MaybeText"),+                moCodecId = Just "example.maybe-text",+                moCodecVersion = Just "1",+                moFixtures = Just "Example.Mapped.maybeTextCases",+                moInitial = Nothing,+                moLoc = noLoc+              }+      inlineGraph <- shouldResolveTypeGraph (mappedSpec [inlineEnvelope])+      aliasGraph <- shouldResolveTypeGraph (mappedSpec [alias, aliasedEnvelope])+      opaqueGraph <- shouldResolveTypeGraph (mappedSpec [opaqueAlias])+      wrappedGraph <- shouldResolveTypeGraph (mappedSpec [completeStructural "MaybeText" (recordShape [TOptional TText])])+      wireFingerprint inlineGraph "Envelope" `shouldBe` wireFingerprint aliasGraph "Envelope"+      wireFingerprint aliasGraph "MaybeText" `shouldNotBe` wireFingerprint opaqueGraph "MaybeText"+      wireFingerprint aliasGraph "MaybeText" `shouldNotBe` wireFingerprint wrappedGraph "MaybeText"     it "round-trips the canonical structural and opaque consumer fixture" $ do       source <- TIO.readFile "test/fixtures/consumer-types.keiro"       spec <- parseInlineSpec "test/fixtures/consumer-types.keiro" source@@ -4561,7 +5294,7 @@               AggregateBool,               AggregateTime,               AggregateNatural,-              AggregateNominal (ResolvedNominalType "EntityId" (IdRepresentation "ent") GeneratedNominal noLoc),+              AggregateNominal (ResolvedNominalType "EntityId" (IdRepresentation "ent" TypeIdV7) GeneratedNominal noLoc),               AggregateNominal (ResolvedNominalType "Status" (EnumRepresentation (("Active", "active") :| [])) GeneratedNominal noLoc),               AggregateNominal (ResolvedNominalType "Amount" (ScalarRepresentation NominalInt) (consumerNominalFor "Amount") noLoc),               AggregateNominal (ResolvedNominalType "Label" (ScalarRepresentation NominalText) (consumerNominalFor "Label") noLoc),@@ -4749,7 +5482,7 @@     it "resolves existing ids and enums as nominal leaves" $ do       let withId =             (mappedSpec [completeStructural "A" (recordShape [TRef "ExistingId"])])-              { ids = [IdDecl "ExistingId" "id" Nothing noLoc]+              { ids = [IdDecl "ExistingId" "id" TypeIdV7 Nothing noLoc]               }           withEnum =             (mappedSpec [completeStructural "A" (recordShape [TRef "ExistingEnum"])])@@ -8443,6 +9176,11 @@         forM_ changes $ \change ->           remediationFor ((kindOfChange change).context) ((.code) (kindOfChange change))             `shouldSatisfy` (not . null)+    it "never classifies a mapped mode crossing or opaque codec-version change as replay-neutral" $ do+      modeCrossed <- replayImpactFixtures "test/fixtures/consumer-types.keiro" "test/fixtures/consumer-types-mode-cross.keiro"+      opaqueVersionChanged <- replayImpactFixtures "test/fixtures/consumer-types.keiro" "test/fixtures/consumer-types-opaque-version.keiro"+      modeCrossed `shouldSatisfy` (/= ReplayNeutral)+      opaqueVersionChanged `shouldSatisfy` (/= ReplayNeutral)     it "classifies nested nominal changes at event, snapshot, queue, and query boundaries" $ do       prefixChanges <-         diffFixtures@@ -13225,6 +13963,7 @@     }   where     removeInitial declaration@MappedStructural {} = declaration {msInitial = Nothing}+    removeInitial declaration@MappedRefined {} = declaration {mrInitial = Nothing}     removeInitial declaration@MappedOpaque {} = declaration {moInitial = Nothing}     removeRegisters (NAggregate aggregate) =       NAggregate@@ -14186,6 +14925,8 @@       onBool = ["bool"],       onNatural = ["natural"],       onTime = ["time"],+      onDay = ["day"],+      onTextSet = ["text-set"],       onJson = ["json"],       onOptional = ("optional" :),       onList = ("list" :),@@ -14337,6 +15078,9 @@               (mutateUnionArm declarationIndex armIndex (\value -> wireArmWithTag (value.tag <> "__mutated") value) spec)           | (armIndex, arm) <- zip [0 :: Int ..] arms           ]+        ShapeBare _ -> []+        ShapeRefined _ -> []+      MappedRefined {} -> []       MappedOpaque {moName = declarationName, moCodecVersion = version} ->         [ mutation             graph@@ -14470,6 +15214,7 @@  mappedDeclarationName :: MappedDecl -> Name mappedDeclarationName MappedStructural {msName = name} = name+mappedDeclarationName MappedRefined {mrName = name} = name mappedDeclarationName MappedOpaque {moName = name} = name  statusMapSpec :: T.Text -> T.Text@@ -15345,7 +16090,7 @@       }  genId :: Gen IdDecl-genId = IdDecl <$> genName <*> genWire <*> pure Nothing <*> pure noLoc+genId = IdDecl <$> genName <*> genWire <*> pure TypeIdV7 <*> pure Nothing <*> pure noLoc  genEnum :: Gen EnumDecl genEnum = EnumDecl <$> genName <*> smallList ((,) <$> genName <*> genWire) <*> pure Nothing <*> pure noLoc@@ -15733,7 +16478,7 @@ regDeclWithValueType valueType (RegDecl name _ initial loc) = RegDecl name valueType initial loc  idDeclWithBinding :: Maybe NominalBindingDecl -> IdDecl -> IdDecl-idDeclWithBinding binding (IdDecl name prefix _ loc) = IdDecl name prefix binding loc+idDeclWithBinding binding (IdDecl name prefix admission _ loc) = IdDecl name prefix admission binding loc  nominalBindingWithVersion :: Maybe T.Text -> NominalBindingDecl -> NominalBindingDecl nominalBindingWithVersion bindingVersion (NominalBindingDecl haskell binding _ canonicalType fixtures initial loc) =
+ test/checked-mapping-adoption-test.sh view
@@ -0,0 +1,76 @@+#!/usr/bin/env bash+set -euo pipefail++repository_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"+cd "$repository_root"++workspace="keiro-dsl/test/fixtures/checked-mapping-replay-workspace/service.keiro-workspace"+committed="keiro-dsl/test/conformance-checked-mapping-replay"+scratch_parent="${TMPDIR:-/tmp}"+proof_root="$(mktemp -d "${scratch_parent%/}/keiro-checked-mapping-adoption.XXXXXX")"++cleanup() {+  case "$proof_root" in+    "${scratch_parent%/}"/keiro-checked-mapping-adoption.*) rm -rf -- "$proof_root" ;;+    *) printf 'refusing unsafe cleanup target: %s\n' "$proof_root" >&2 ;;+  esac+}+trap cleanup EXIT++hand_owned=(+  "Conformance/CheckedMappingReplay/Domain.hs"+  "Conformance/CheckedMappingReplay/Bindings.hs"+  "CheckedMappingReplay/ProjectionCatalog/ProjectionCatalogHoles.hs"+  "CheckedMappingReplay/ReplayLedger/BehaviorHoles.hs"+  "CheckedMappingReplay/ReplayLookup/ReadModelHoles.hs"+  "CheckedMappingReplay/ReplayReaction/ProcessHoles.hs"+  "CheckedMappingReplay/ReplayTarget/BehaviorHoles.hs"+)++hand_hashes() {+  local root="$1"+  local relative+  for relative in "${hand_owned[@]}"; do+    test -f "$root/$relative"+    shasum -a 256 "$root/$relative"+  done+}++copy_hand_owned() {+  local target="$1"+  local relative+  for relative in "${hand_owned[@]}"; do+    mkdir -p "$target/$(dirname "$relative")"+    cp "$committed/$relative" "$target/$relative"+  done+}++fresh="$proof_root/fresh"+existing="$proof_root/existing"+mkdir -p "$fresh" "$existing"++echo "checked-mapping adoption: public check"+cabal run -v0 keiro-dsl -- check "$workspace"++echo "checked-mapping adoption: fresh scaffold"+cabal run -v0 keiro-dsl -- scaffold "$workspace" --out "$fresh" >/dev/null+test -f "$fresh/Conformance/CheckedMappingReplay/Bindings.hs"+grep -q "HOLE" "$fresh/Conformance/CheckedMappingReplay/Bindings.hs"+copy_hand_owned "$fresh"+hand_hashes "$fresh" >"$proof_root/fresh.before"+cabal run -v0 keiro-dsl -- scaffold "$workspace" --out "$fresh" >/dev/null+hand_hashes "$fresh" >"$proof_root/fresh.after"+cmp "$proof_root/fresh.before" "$proof_root/fresh.after"+diff -ru "$committed/Generated" "$fresh/Generated"++echo "checked-mapping adoption: existing bindings and create-once files"+cp -R "$committed/." "$existing/"+hand_hashes "$existing" >"$proof_root/existing.before"+cabal run -v0 keiro-dsl -- scaffold "$workspace" --out "$existing" >/dev/null+hand_hashes "$existing" >"$proof_root/existing.after"+cmp "$proof_root/existing.before" "$proof_root/existing.after"+diff -ru "$committed/Generated" "$existing/Generated"++echo "checked-mapping adoption: compiled harness"+cabal test -v0 keiro-dsl:test:keiro-dsl-conformance-checked-mapping-replay --test-show-details=direct+echo "checked-mapping adoption: PASS"
test/conformance-aggregate-scalars/Generated/AggregateScalars/BehaviorSourceMap.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from context aggregate-scalars behavior source map; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from context aggregate-scalars behavior source map; do not edit. module Generated.AggregateScalars.BehaviorSourceMap   ( BehaviorSourceLocation (..)   , behaviorSourceLocation
test/conformance-aggregate-scalars/Generated/AggregateScalars/ReplayAudit.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from context aggregate-scalars replay-audit assembly; do not edit.+-- @generated by keiro-dsl 0.18.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;
test/conformance-aggregate-scalars/Generated/AggregateScalars/ScalarLedger/BehaviorContract.hs view
@@ -1,5 +1,5 @@ {-# LANGUAGE OverloadedLabels #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate ScalarLedger; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate ScalarLedger; do not edit. module Generated.AggregateScalars.ScalarLedger.BehaviorContract   ( BehaviorKey (..)   , unBehaviorKey
test/conformance-aggregate-scalars/Generated/AggregateScalars/ScalarLedger/Codec.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate ScalarLedger; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate ScalarLedger; do not edit. module Generated.AggregateScalars.ScalarLedger.Codec (     scalarLedgerCodec,     parseScalarLedgerEvent,
test/conformance-aggregate-scalars/Generated/AggregateScalars/ScalarLedger/Domain.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE TemplateHaskell #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate ScalarLedger; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate ScalarLedger; do not edit. module Generated.AggregateScalars.ScalarLedger.Domain where  import Data.Aeson (FromJSON, ToJSON)
test/conformance-aggregate-scalars/Generated/AggregateScalars/ScalarLedger/EventStream.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate ScalarLedger; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate ScalarLedger; do not edit. module Generated.AggregateScalars.ScalarLedger.EventStream   ( scalarLedgerCategory   , scalarLedgerCommandCategory
test/conformance-aggregate-scalars/Generated/AggregateScalars/ScalarLedger/Harness.hs view
@@ -1,5 +1,5 @@ {-# LANGUAGE OverloadedLabels #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate ScalarLedger; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate ScalarLedger; do not edit. module Generated.AggregateScalars.ScalarLedger.Harness (harnessAssertions) where  import Generated.AggregateScalars.ScalarLedger.Domain
test/conformance-aggregate-scalars/Generated/AggregateScalars/ScalarLedger/Projection.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate ScalarLedger; do not edit.+-- @generated by keiro-dsl 0.18.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.
test/conformance-aggregate-scalars/Generated/AggregateScalars/ScalarLedger/Transducer.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE BlockArguments #-} {-# LANGUAGE QualifiedDo #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate ScalarLedger; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate ScalarLedger; do not edit. module Generated.AggregateScalars.ScalarLedger.Transducer   ( scalarLedgerTransducer   , scalarLedgerFoldFingerprint
+ test/conformance-bare-containers/BareContainers/BareLookup/ReadModelHoles.hs view
@@ -0,0 +1,14 @@+-- This is a HAND-OWNED hole module. keiro-dsl creates it once and never overwrites it.+module BareContainers.BareLookup.ReadModelHoles+  ( bareLookupQuery+  ) where++import Generated.BareContainers.BareLookup.ReadModelTable (bareLookupQualifiedTable)+import Generated.BareContainers.BareLookup.QueryContract (BareLookupQueryInput, BareLookupQueryResult)+import Hasql.Transaction qualified as Tx++-- HOLE: query "public"."bare_values" via bareLookupQualifiedTable; never rely on search_path.+-- The generated QueryContract owns query input/result type identity.+-- Declared columns:+bareLookupQuery :: BareLookupQueryInput -> Tx.Transaction BareLookupQueryResult+bareLookupQuery _input = bareLookupQualifiedTable `seq` error "HOLE: fill bare_lookup query"
+ test/conformance-bare-containers/BareContainers/BareStore/BehaviorHoles.hs view
@@ -0,0 +1,10 @@+-- Consumer-owned behavioral witnesses. Created once; never overwritten.+module BareContainers.BareStore.BehaviorHoles (behaviorWitnesses) where++import Generated.BareContainers.BareStore.BehaviorContract++behaviorWitnesses :: [BehaviorWitness]+behaviorWitnesses =+  [ Pending (BehaviorKey "behavior-v1-b3fa753a88b62d6d") -- BareStoreEmpty x Store: live transition+  , Pending (BehaviorKey "behavior-v1-b728b85baa41bc71") -- BareStoreStored x Store: required rejection+  ]
+ test/conformance-bare-containers/BareContainers/ProjectionCatalog/ProjectionCatalogHoles.hs view
@@ -0,0 +1,23 @@+-- This is a HAND-OWNED hole module. keiro-dsl creates it once and never overwrites it.+module BareContainers.ProjectionCatalog.ProjectionCatalogHoles+  ( BareWriterEvent (..)+  , applyBareWriterLive+  , bareWriterIdempotencyKey+  , applyBareWriterReplay+  , decodeBareWriterReplay+  ) where++import Hasql.Transaction qualified as Tx+import Keiro.Projection.Catalog qualified as Catalog+import Kiroku.Store.Types (EventId, RecordedEvent)++-- Projection owner bare_writer (order 10).+data BareWriterEvent = BareWriterEvent+applyBareWriterLive :: RecordedEvent -> Tx.Transaction ()+applyBareWriterLive = error "HOLE: fill bare_writer live apply"+bareWriterIdempotencyKey :: RecordedEvent -> EventId+bareWriterIdempotencyKey = error "HOLE: return the durable event id for bare_writer"+decodeBareWriterReplay :: RecordedEvent -> Catalog.ReplayDecodeResult BareWriterEvent+decodeBareWriterReplay = error "HOLE: classify and decode every bare_writer source event"+applyBareWriterReplay :: BareWriterEvent -> RecordedEvent -> Tx.Transaction ()+applyBareWriterReplay = error "HOLE: fill bare_writer replay apply without live-only side effects"
+ test/conformance-bare-containers/Conformance/BareContainers/Bindings.hs view
@@ -0,0 +1,145 @@+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE LambdaCase #-}++-- This is a HAND-OWNED consumer binding skeleton. keiro-dsl creates it once+-- and never overwrites it. Fill each HOLE and run the generated harness.+module Conformance.BareContainers.Bindings (+    textMapFixtures+  , textMapBinding+  , textListFixtures+  , textListBinding+  , nestedIdsFixtures+  , nestedIdsBinding+  , initialMaybeText+  , maybeTextFixtures+  , maybeTextBinding+  , bareEnvelopeFixtures+  , bareEnvelopeBinding+) where++import Conformance.BareContainers.Domain (BareEnvelope, MaybeText, NestedIds, TextList, TextMap)+import Conformance.BareContainers.Domain qualified as Domain+import Data.List.NonEmpty (NonEmpty (..))+import Data.Map.Strict qualified as Map+import Data.Text (Text)+import Generated.BareContainers.Nominals (ItemId, parseItemId)+import Generated.BareContainers.Structural.Shape.BareEnvelope qualified as ShapeBareEnvelope+import Generated.BareContainers.Structural.Shape.MaybeText qualified as ShapeMaybeText+import Generated.BareContainers.Structural.Shape.NestedIds qualified as ShapeNestedIds+import Generated.BareContainers.Structural.Shape.TextList qualified as ShapeTextList+import Generated.BareContainers.Structural.Shape.TextMap qualified as ShapeTextMap+import Keiro.Codec.Structural (FixtureCases (..), StructuralBinding (..))++textMapFixtures :: FixtureCases TextMap+textMapFixtures =+  FixtureCases+    ( ("empty", Domain.TextMap Map.empty)+        :| [("present", Domain.TextMap (Map.fromList [("alpha", "one"), ("beta", "two")]))]+    )++-- HOLE: complete both total directions; wire policy remains in the generated codec.+textMapBinding :: StructuralBinding TextMap ShapeTextMap.TextMapShape+textMapBinding =+  StructuralBinding+    { bindingToShape = \case+        Domain.TextMap value -> value,+      bindingFromShape = Domain.TextMap+    }++-- HOLE: provide deterministic labelled conformance fixtures for TextList+textListFixtures :: FixtureCases TextList+textListFixtures =+  FixtureCases+    ( ("empty", Domain.TextList [])+        :| [("ordered-duplicates", Domain.TextList ["b", "a", "a"])]+    )++-- HOLE: complete both total directions; wire policy remains in the generated codec.+textListBinding :: StructuralBinding TextList ShapeTextList.TextListShape+textListBinding =+  StructuralBinding+    { bindingToShape = \case+        Domain.TextList value -> value,+      bindingFromShape = Domain.TextList+    }++-- HOLE: provide deterministic labelled conformance fixtures for NestedIds+nestedIdsFixtures :: FixtureCases NestedIds+nestedIdsFixtures =+  FixtureCases+    ( ("empty", Domain.NestedIds [])+        :| [("null-and-present", Domain.NestedIds [Nothing, Just itemId])]+    )++-- HOLE: complete both total directions; wire policy remains in the generated codec.+nestedIdsBinding :: StructuralBinding NestedIds ShapeNestedIds.NestedIdsShape+nestedIdsBinding =+  StructuralBinding+    { bindingToShape = \case+        Domain.NestedIds value -> value,+      bindingFromShape = Domain.NestedIds+    }++-- HOLE: provide the initial register value for MaybeText+initialMaybeText :: MaybeText+initialMaybeText = Domain.MaybeText Nothing++-- HOLE: provide deterministic labelled conformance fixtures for MaybeText+maybeTextFixtures :: FixtureCases MaybeText+maybeTextFixtures =+  FixtureCases+    ( ("nothing", Domain.MaybeText Nothing)+        :| [("present", Domain.MaybeText (Just "x"))]+    )++-- HOLE: complete both total directions; wire policy remains in the generated codec.+maybeTextBinding :: StructuralBinding MaybeText ShapeMaybeText.MaybeTextShape+maybeTextBinding =+  StructuralBinding+    { bindingToShape = \case+        Domain.MaybeText value -> value,+      bindingFromShape = Domain.MaybeText+    }++-- HOLE: provide deterministic labelled conformance fixtures for BareEnvelope+bareEnvelopeFixtures :: FixtureCases BareEnvelope+bareEnvelopeFixtures =+  FixtureCases+    ( ("defaults", Domain.BareEnvelope initialMaybeText (Domain.TextList []) (Domain.TextMap Map.empty) (Domain.NestedIds []))+        :| [ ( "present",+               Domain.BareEnvelope+                 (Domain.MaybeText (Just "label"))+                 (Domain.TextList ["b", "a", "a"])+                 (Domain.TextMap (Map.fromList [("alpha", "one")]))+                 (Domain.NestedIds [Nothing, Just itemId])+             )+           ]+    )++-- HOLE: complete both total directions; wire policy remains in the generated codec.+bareEnvelopeBinding :: StructuralBinding BareEnvelope ShapeBareEnvelope.BareEnvelopeShape+bareEnvelopeBinding =+  StructuralBinding+    { bindingToShape = \case+        Domain.BareEnvelope optionalLabel labels attributes nestedIds ->+          ShapeBareEnvelope.BareEnvelope+            (bindingToShape maybeTextBinding optionalLabel)+            (bindingToShape textListBinding labels)+            (bindingToShape textMapBinding attributes)+            (bindingToShape nestedIdsBinding nestedIds),+      bindingFromShape = \case+        ShapeBareEnvelope.BareEnvelope optionalLabel labels attributes nestedIds ->+          Domain.BareEnvelope+            (bindingFromShape maybeTextBinding optionalLabel)+            (bindingFromShape textListBinding labels)+            (bindingFromShape textMapBinding attributes)+            (bindingFromShape nestedIdsBinding nestedIds)+    }++itemIdText :: Text+itemIdText = "item_01h455vb4pex5vsknk084sn02q"++itemId :: ItemId+itemId = case parseItemId itemIdText of+  Left reason -> error ("invalid committed ItemId fixture: " <> show reason)+  Right value -> value
+ test/conformance-bare-containers/Conformance/BareContainers/Domain.hs view
@@ -0,0 +1,58 @@+{-# LANGUAGE DeriveAnyClass #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}++module Conformance.BareContainers.Domain where++import Data.Aeson (FromJSON, ToJSON)+import Data.Map.Strict (Map)+import Data.Proxy (Proxy)+import Data.Text (Text)+import GHC.Generics (Generic)+import Generated.BareContainers.Nominals (ItemId)+import Keiki.Shape (CanonicalTypeName (..))++newtype MaybeText = MaybeText {unMaybeText :: Maybe Text}+  deriving stock (Eq, Generic, Show)+  deriving newtype (FromJSON, ToJSON)++instance CanonicalTypeName MaybeText where+  canonicalTypeName :: Proxy MaybeText -> Text+  canonicalTypeName _ = "conformance.bare-containers.MaybeText.v1"++newtype TextList = TextList {unTextList :: [Text]}+  deriving stock (Eq, Generic, Show)+  deriving newtype (FromJSON, ToJSON)++instance CanonicalTypeName TextList where+  canonicalTypeName :: Proxy TextList -> Text+  canonicalTypeName _ = "conformance.bare-containers.TextList.v1"++newtype TextMap = TextMap {unTextMap :: Map Text Text}+  deriving stock (Eq, Generic, Show)+  deriving newtype (FromJSON, ToJSON)++instance CanonicalTypeName TextMap where+  canonicalTypeName :: Proxy TextMap -> Text+  canonicalTypeName _ = "conformance.bare-containers.TextMap.v1"++newtype NestedIds = NestedIds {unNestedIds :: [Maybe ItemId]}+  deriving stock (Eq, Generic, Show)+  deriving newtype (FromJSON, ToJSON)++instance CanonicalTypeName NestedIds where+  canonicalTypeName :: Proxy NestedIds -> Text+  canonicalTypeName _ = "conformance.bare-containers.NestedIds.v1"++data BareEnvelope = BareEnvelope+  { optionalLabel :: !MaybeText,+    labels :: !TextList,+    attributes :: !TextMap,+    nestedIds :: !NestedIds+  }+  deriving stock (Eq, Generic, Show)+  deriving anyclass (FromJSON, ToJSON)++instance CanonicalTypeName BareEnvelope where+  canonicalTypeName :: Proxy BareEnvelope -> Text+  canonicalTypeName _ = "conformance.bare-containers.BareEnvelope.v1"
+ test/conformance-bare-containers/Conformance/BareContainers/Historical.hs view
@@ -0,0 +1,19 @@+module Conformance.BareContainers.Historical+  ( historicalMaybeTextCodec,+  )+where++import Conformance.BareContainers.Domain (MaybeText (..))+import Data.Aeson (parseJSON, toJSON)+import Data.Aeson.Types (parseEither)+import Data.Text qualified as T+import Keiro.Dsl.CodecCompare (HistoricalCodec (..))++historicalMaybeTextCodec :: HistoricalCodec MaybeText+historicalMaybeTextCodec =+  HistoricalCodec+    { identity = "conformance.bare-containers.MaybeText.opaque-json",+      version = "opaque-v1",+      encode = \(MaybeText value) -> toJSON value,+      decode = either (Left . T.pack) (Right . MaybeText) . parseEither parseJSON+    }
+ test/conformance-bare-containers/Generated/BareContainers/BareJobs/Queue.hs view
@@ -0,0 +1,78 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from workqueue bare_jobs; do not edit.+module Generated.BareContainers.BareJobs.Queue+  ( BareJob (..)+  , encodeBareJob+  , parseBareJob+  , encodeMaybeTextMapped+  , decodeMaybeTextMapped+  , encodeTextListMapped+  , decodeTextListMapped+  , queuePhysical, queueDlq, queueTable++  ) where++import Data.Aeson (Value (..), object, parseJSON, toJSON, withObject, (.=))+import Data.Aeson.Types (Parser, JSONPathElement (..), (<?>), explicitParseField, parseEither)+import Data.Text (Text)+import qualified Data.Text as T+import Keiro.Codec.Structural (bindingFromShape, bindingToShape)+import Conformance.BareContainers.Bindings qualified as Bindings+import Conformance.BareContainers.Domain (MaybeText, TextList)+import Generated.BareContainers.Structural.Shape.MaybeText qualified as ShapeMaybeText+import Generated.BareContainers.Structural.Shape.TextList qualified as ShapeTextList++queuePhysical, queueDlq, queueTable :: Text+queuePhysical = "bare_jobs"+queueDlq = "bare_jobs_dlq"+queueTable = "pgmq.q_bare_jobs"++data BareJob = BareJob+  { optionalLabel :: !MaybeText+  , labels :: !TextList+  }+  deriving stock (Eq, Show)++encodeMaybeTextMapped :: MaybeText -> Value+encodeMaybeTextMapped = encodeMaybeTextShape . bindingToShape Bindings.maybeTextBinding++parseMaybeTextMapped :: Value -> Parser MaybeText+parseMaybeTextMapped value = bindingFromShape Bindings.maybeTextBinding <$> parseMaybeTextShape value++decodeMaybeTextMapped :: Value -> Either Text MaybeText+decodeMaybeTextMapped = mapLeftText . parseEither parseMaybeTextMapped++encodeMaybeTextShape :: ShapeMaybeText.MaybeTextShape -> Value+encodeMaybeTextShape value = maybe Null (\item0 -> toJSON (item0)) (value)++parseMaybeTextShape :: Value -> Parser ShapeMaybeText.MaybeTextShape+parseMaybeTextShape = \value0 -> case value0 of Null -> pure Nothing; other0 -> Just <$> (parseJSON) other0++encodeTextListMapped :: TextList -> Value+encodeTextListMapped = encodeTextListShape . bindingToShape Bindings.textListBinding++parseTextListMapped :: Value -> Parser TextList+parseTextListMapped value = bindingFromShape Bindings.textListBinding <$> parseTextListShape value++decodeTextListMapped :: Value -> Either Text TextList+decodeTextListMapped = mapLeftText . parseEither parseTextListMapped++encodeTextListShape :: ShapeTextList.TextListShape -> Value+encodeTextListShape value = toJSON (map (\item0 -> toJSON (item0)) (value))++parseTextListShape :: Value -> Parser ShapeTextList.TextListShape+parseTextListShape = \value0 -> do items0 <- (parseJSON value0 :: Parser [Value]); traverse (\(index0, item0) -> (parseJSON) item0 <?> Index index0) (zip [0..] items0)++encodeBareJob :: BareJob -> Value+encodeBareJob payload =+  object+    [ "optional_label" .= encodeMaybeTextMapped payload.optionalLabel+    , "labels" .= encodeTextListMapped payload.labels+    ]++parseBareJob :: Value -> Either Text BareJob+parseBareJob = mapLeftText . parseEither (withObject "BareJob" go)+  where+    go objectValue = BareJob <$> explicitParseField (parseMaybeTextMapped) objectValue "optional_label" <*> explicitParseField (parseTextListMapped) objectValue "labels"++mapLeftText :: Either String b -> Either Text b+mapLeftText = either (Left . T.pack) Right
+ test/conformance-bare-containers/Generated/BareContainers/BareJobs/QueueCodec.hs view
@@ -0,0 +1,29 @@+-- @generated by keiro-dsl 0.18.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+-- 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.BareContainers.BareJobs.QueueCodec (bareJobsPayloadCodec, bareJobsJobCodec) where++import Data.List.NonEmpty (NonEmpty (..))+import Keiro.Codec (Codec (..), EventType (..))+import Keiro.PGMQ.Codec (JobCodec, keiroJobCodec)+import Generated.BareContainers.BareJobs.Queue (BareJob, encodeBareJob, parseBareJob)++bareJobsPayloadCodec :: Codec BareJob+bareJobsPayloadCodec =+  Codec+    { eventTypes = EventType "BareJob" :| []+    , eventType = \_ -> EventType "BareJob"+    , schemaVersion = 1+    , encode = encodeBareJob+    , decode = \_ -> parseBareJob+    , upcasters = []+    }++bareJobsJobCodec :: JobCodec BareJob+bareJobsJobCodec = keiroJobCodec bareJobsPayloadCodec
+ test/conformance-bare-containers/Generated/BareContainers/BareJobs/QueuePolicy.hs view
@@ -0,0 +1,43 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from workqueue bare_jobs; do not edit.+module Generated.BareContainers.BareJobs.QueuePolicy+  ( BareJobsOutcome (..)+  , 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 BareJobsOutcome+  = StoreFailure+  | CommandRejected+  | DecodeFailure+  | OnCodecReject+  deriving stock (Eq, Show)++jobOutcomeFor :: BareJobsOutcome -> JobOutcome+jobOutcomeFor o = case o of+  StoreFailure -> Retry (RetryDelay 1)+  CommandRejected -> Dead "dead-lettered"+  DecodeFailure -> Dead "dead-lettered"+  OnCodecReject -> Dead "dead-lettered"
+ test/conformance-bare-containers/Generated/BareContainers/BareLookup/QueryContract.hs view
@@ -0,0 +1,10 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from readmodel bare_lookup; do not edit.+module Generated.BareContainers.BareLookup.QueryContract+  ( BareLookupQueryInput+  , BareLookupQueryResult+  ) where++import Conformance.BareContainers.Domain (MaybeText, TextList)++type BareLookupQueryInput = MaybeText+type BareLookupQueryResult = [TextList]
+ test/conformance-bare-containers/Generated/BareContainers/BareLookup/ReadModel.hs view
@@ -0,0 +1,28 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from readmodel bare_lookup; do not edit.+module Generated.BareContainers.BareLookup.ReadModel+  ( bareLookupReadModel+  , bareLookupQualifiedTable+  ) where++import Generated.BareContainers.BareLookup.ReadModelTable (bareLookupQualifiedTable)+import Generated.BareContainers.BareLookup.QueryContract (BareLookupQueryInput, BareLookupQueryResult)+import BareContainers.BareLookup.ReadModelHoles (bareLookupQuery)+import Keiro.ReadModel (QueryCursorAuthority (..), ReadModel, ReadModelBlueprint (..), HeadScope (..), headWaitingReadModel)++bareLookupReadModel :: ReadModel BareLookupQueryInput BareLookupQueryResult+bareLookupReadModel =+  case headWaitingReadModel EntireVisibleLog bareLookupReadModelBlueprint of+    Left definitionError -> error ("keiro-dsl generated an invalid waiting read model: " <> show definitionError)+    Right model -> model++bareLookupReadModelBlueprint :: ReadModelBlueprint BareLookupQueryInput BareLookupQueryResult+bareLookupReadModelBlueprint =+  ReadModelBlueprint+    { name = "bare-containers-bare-lookup"+    , tableName = "bare_values"+    , schema = "public"+    , version = 1+    , shapeHash = "fnv1a:3c07a19c552c3547"+    , cursorAuthority = DurableQueryCursor "bare-writer"+    , query = bareLookupQuery+    }
+ test/conformance-bare-containers/Generated/BareContainers/BareLookup/ReadModelHarness.hs view
@@ -0,0 +1,57 @@+-- @generated by keiro-dsl 0.18.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)+import Data.Text qualified as T+import Data.List.NonEmpty qualified as NE+import Generated.BareContainers.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", "bare-containers-bare-lookup", T.unpack bareLookupReadModel.name)+  , ("shapeHash", "fnv1a:3c07a19c552c3547", T.unpack bareLookupReadModel.shapeHash)+  , ("freshness", "WaitForHead EntireVisibleLog", show (readModelDefaultFreshness bareLookupReadModel))+  , ("cursorAuthority", "DurableQueryCursor \"bare-writer\"", show (readModelCursorAuthority bareLookupReadModel))+  ]+    <> catalogFactsAgainst ProjectionCatalog.projectionCatalogRegistrations ProjectionCatalog.projectionCatalogAsyncRegistrations ProjectionCatalog.projectionCatalogQuerySupplies++catalogFactsAgainst :: [Catalog.CatalogRegistration] -> [Catalog.AsyncProjectionRegistration] -> [Catalog.ResolvedQuerySupply] -> [(String, String, String)]+catalogFactsAgainst registrations asyncRegistrations supplies =+  [ ("catalogRegistration", "bare-containers-bare-lookup|1|fnv1a:3c07a19c552c3547|bare_rebuild", renderRegistration [entry | entry <- registrations, Catalog.queryModelIdText entry.queryModelId == "bare_lookup"])+  , ("querySupply", "bare_writer|bare_rebuild|bare_table", renderSupply [entry | entry <- supplies, Catalog.queryModelIdText entry.resolvedQueryModelId == "bare_lookup"])+  , ("projectionDelivery", "subscription", renderDelivery [entry | entry <- supplies, Catalog.queryModelIdText entry.resolvedQueryModelId == "bare_lookup"])+  , ("asyncRegistration:bare_writer", "bare-writer|bare-writer-v1", renderAsync [entry | entry <- asyncRegistrations, Catalog.projectionIdText entry.projectionId == "bare_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)
+ test/conformance-bare-containers/Generated/BareContainers/BareLookup/ReadModelTable.hs view
@@ -0,0 +1,9 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from readmodel bare_lookup; do not edit.+module Generated.BareContainers.BareLookup.ReadModelTable (bareLookupQualifiedTable) where++import Data.Text (Text)+import Keiro.Connection (qualifyTable)++-- The fully-qualified, double-quoted data-table reference.+bareLookupQualifiedTable :: Text+bareLookupQualifiedTable = qualifyTable "public" "bare_values"
+ test/conformance-bare-containers/Generated/BareContainers/BareStore/BehaviorContract.hs view
@@ -0,0 +1,350 @@+{-# LANGUAGE OverloadedLabels #-}+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from aggregate BareStore; do not edit.+module Generated.BareContainers.BareStore.BehaviorContract+  ( BehaviorKey (..)+  , unBehaviorKey+  , ObligationKind (..)+  , EvidenceLevel (..)+  , GuardCoverage (..)+  , BehaviorRequirement (..)+  , RejectionClass (..)+  , LiveExpectation (..)+  , BehaviorWitness (..)+  , BehaviorFailure (..)+  , BehaviorConformanceReport (..)+  , behaviorRequirements+  , behaviorCoverageReport+  , behaviorConformancePassed+  , behaviorConformancePassedWith+  , renderBehaviorConformanceText+  ) where++import Generated.BareContainers.BareStore.Codec (encodeBareStoreEvent, parseBareStoreEvent, bareStoreCodec)+import Generated.BareContainers.BareStore.Domain+import Generated.BareContainers.BareStore.Transducer (bareStoreTransducer)+import Generated.BareContainers.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 :: !BareStoreVertex+  , commandName :: !Text+  , expectedEdge :: !(Maybe (K.EdgeRef BareStoreVertex))+  , target :: !(Maybe BareStoreVertex)+  , eventKinds :: ![Text]+  }+  deriving stock (Eq, Show)++data RejectionClass = RejectNoOutgoingEdges | RejectNoMatchingEdge+  deriving stock (Eq, Show)++data LiveExpectation+  = Emits (NonEmpty BareStoreEvent)+  | Rejects RejectionClass+  | NoOp+  deriving stock (Eq, Show)++data BehaviorWitness+  = Pending BehaviorKey+  | LiveWitness+      { key :: BehaviorKey+      , history :: [BareStoreEvent]+      , command :: BareStoreCommand+      , expected :: LiveExpectation+      }+  | ReplayWitness+      { key :: BehaviorKey+      , historyPrefix :: [BareStoreEvent]+      , observedChunk :: [BareStoreEvent]+      }+  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 =+  [ -- BareStoreEmpty x Store: live transition+    BehaviorRequirement+      { key = BehaviorKey "behavior-v1-b3fa753a88b62d6d"+      , kind = LiveTransition+      , evidence = GeneratedAuthoritative+      , guardCoverage = GuardTotal+      , source = BareStoreEmpty+      , commandName = "Store"+      , expectedEdge = (Just (K.EdgeRef BareStoreEmpty 0))+      , target = Just BareStoreStored+      , eventKinds = ["StoredValue"]+      }+  , -- BareStoreStored x Store: required rejection+    BehaviorRequirement+      { key = BehaviorKey "behavior-v1-b728b85baa41bc71"+      , kind = RequiredRejection+      , evidence = GeneratedAuthoritative+      , guardCoverage = GuardNotApplicable+      , source = BareStoreStored+      , commandName = "Store"+      , expectedEdge = Nothing+      , target = Nothing+      , eventKinds = []+      }+  ]++behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport+behaviorCoverageReport 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 <- behaviorRequirements]+  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: BareStore"+  , "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 -> [BareStoreEvent] -> BareStoreCommand -> 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 -> (BareStoreVertex, K.RegFile BareStoreRegs) -> BareStoreCommand -> 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 bareStoreTransducer 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 -> (BareStoreVertex, K.RegFile BareStoreRegs) -> BareStoreCommand -> 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 bareStoreTransducer 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 bareStoreTransducer 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 bareStoreTransducer 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 BareStoreRegs BareStoreVertex BareStoreEvent -> 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 -> [BareStoreEvent] -> [BareStoreEvent] -> 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 bareStoreTransducer (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 BareStoreVertex] -> 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 -> [BareStoreEvent] -> Either BehaviorFailure (K.ReplaySuccess BareStoreRegs BareStoreVertex)+settleHistory requirement label history = do+  decoded <- either (failure requirement (label <> "-codec-decode")) Right (decodeEvents history)+  case K.applyEventsDetailedEither bareStoreTransducer (BareStoreEmpty, initialBareStoreRegs) decoded of+    Left replayFailure -> failure requirement (label <> "-replay-failed") (tshow replayFailure)+    Right replaySuccess -> Right replaySuccess++decodeEvents :: [BareStoreEvent] -> Either Text [BareStoreEvent]+decodeEvents = traverse (\event -> parseBareStoreEvent (Codec.eventType bareStoreCodec event) (encodeBareStoreEvent event))++commandKind :: BareStoreCommand -> Text+commandKind command = case command of+  Store _ -> "Store"++eventKind :: BareStoreEvent -> Text+eventKind event = case Codec.eventType bareStoreCodec event of Codec.EventType tag -> tag++regsEqual :: K.RegFile BareStoreRegs -> K.RegFile BareStoreRegs -> Bool+regsEqual left right = (left K.! #current) == (right K.! #current)++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
+ test/conformance-bare-containers/Generated/BareContainers/BareStore/Codec.hs view
@@ -0,0 +1,193 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from aggregate BareStore; do not edit.+module Generated.BareContainers.BareStore.Codec (+    bareStoreCodec,+    parseBareStoreEvent,+    encodeBareStoreEvent,+    encodeBareEnvelopeMapped,+    decodeBareEnvelopeMapped,+    encodeMaybeTextMapped,+    decodeMaybeTextMapped,+    encodeNestedIdsMapped,+    decodeNestedIdsMapped,+    encodeTextListMapped,+    decodeTextListMapped,+    encodeTextMapMapped,+    decodeTextMapMapped,+) where++import Generated.BareContainers.BareStore.Domain+import Control.Monad (unless)+import Data.Aeson (Value (..), object, parseJSON, toJSON, withObject, (.=))+import Data.Aeson.Key qualified as Key+import Data.Aeson.KeyMap qualified as KeyMap+import Data.Aeson.Types (Parser, JSONPathElement (..), (<?>), explicitParseField, parseEither)+import Data.List.NonEmpty (NonEmpty (..))+import Data.List.NonEmpty qualified as NonEmpty+import Data.Map.Strict (Map)+import Data.Map.Strict qualified as Map+import Data.Text (Text)+import qualified Data.Text as T+import Keiro.Codec.Structural (bindingFromShape, bindingToShape)+import Keiro.Codec (Codec (..), EventType (..))+++import Generated.BareContainers.Structural.NominalLeaves (encodeItemIdLeaf, parseItemIdLeaf)+import Conformance.BareContainers.Bindings qualified as Bindings+import Conformance.BareContainers.Domain (BareEnvelope, MaybeText, NestedIds, TextList, TextMap)+import Generated.BareContainers.Structural.Shape.BareEnvelope qualified as ShapeBareEnvelope+import Generated.BareContainers.Structural.Shape.MaybeText qualified as ShapeMaybeText+import Generated.BareContainers.Structural.Shape.NestedIds qualified as ShapeNestedIds+import Generated.BareContainers.Structural.Shape.TextList qualified as ShapeTextList+import Generated.BareContainers.Structural.Shape.TextMap qualified as ShapeTextMap++++encodeBareEnvelopeMapped :: BareEnvelope -> Value+encodeBareEnvelopeMapped = encodeBareEnvelopeShape . bindingToShape Bindings.bareEnvelopeBinding++parseBareEnvelopeMapped :: Value -> Parser BareEnvelope+parseBareEnvelopeMapped value = bindingFromShape Bindings.bareEnvelopeBinding <$> parseBareEnvelopeShape value++decodeBareEnvelopeMapped :: Value -> Either Text BareEnvelope+decodeBareEnvelopeMapped = mapLeftText . parseEither parseBareEnvelopeMapped++encodeBareEnvelopeShape :: ShapeBareEnvelope.BareEnvelopeShape -> Value+encodeBareEnvelopeShape shape =+  object+      [ "optionalLabel" .= encodeMaybeTextShape (shape.optionalLabel)+      , "labels" .= encodeTextListShape (shape.labels)+      , "attributes" .= encodeTextMapShape (shape.attributes)+      , "nestedIds" .= encodeNestedIdsShape (shape.nestedIds)+      ]++parseBareEnvelopeShape :: Value -> Parser ShapeBareEnvelope.BareEnvelopeShape+parseBareEnvelopeShape = withObject "BareEnvelopeShape" $ \objectValue -> do+  rejectUnknownFields "BareEnvelope" ["optionalLabel", "labels", "attributes", "nestedIds"] objectValue+  ShapeBareEnvelope.BareEnvelope+    <$> parseOptionalField (pure Nothing) (parseMaybeTextShape) objectValue "optionalLabel"+    <*> parseOptionalField (pure []) (parseTextListShape) objectValue "labels"+    <*> parseOptionalField (pure Map.empty) (parseTextMapShape) objectValue "attributes"+    <*> explicitParseField (parseNestedIdsShape) objectValue "nestedIds"++encodeMaybeTextMapped :: MaybeText -> Value+encodeMaybeTextMapped = encodeMaybeTextShape . bindingToShape Bindings.maybeTextBinding++parseMaybeTextMapped :: Value -> Parser MaybeText+parseMaybeTextMapped value = bindingFromShape Bindings.maybeTextBinding <$> parseMaybeTextShape value++decodeMaybeTextMapped :: Value -> Either Text MaybeText+decodeMaybeTextMapped = mapLeftText . parseEither parseMaybeTextMapped++encodeMaybeTextShape :: ShapeMaybeText.MaybeTextShape -> Value+encodeMaybeTextShape value = maybe Null (\item0 -> toJSON (item0)) (value)++parseMaybeTextShape :: Value -> Parser ShapeMaybeText.MaybeTextShape+parseMaybeTextShape = \value0 -> case value0 of Null -> pure Nothing; other0 -> Just <$> (parseJSON) other0++encodeNestedIdsMapped :: NestedIds -> Value+encodeNestedIdsMapped = encodeNestedIdsShape . bindingToShape Bindings.nestedIdsBinding++parseNestedIdsMapped :: Value -> Parser NestedIds+parseNestedIdsMapped value = bindingFromShape Bindings.nestedIdsBinding <$> parseNestedIdsShape value++decodeNestedIdsMapped :: Value -> Either Text NestedIds+decodeNestedIdsMapped = mapLeftText . parseEither parseNestedIdsMapped++encodeNestedIdsShape :: ShapeNestedIds.NestedIdsShape -> Value+encodeNestedIdsShape value = toJSON (map (\item0 -> maybe Null (\item1 -> encodeItemIdLeaf item1) (item0)) (value))++parseNestedIdsShape :: Value -> Parser ShapeNestedIds.NestedIdsShape+parseNestedIdsShape = \value0 -> do items0 <- (parseJSON value0 :: Parser [Value]); traverse (\(index0, item0) -> (\value1 -> case value1 of Null -> pure Nothing; other1 -> Just <$> (parseItemIdLeaf) other1) item0 <?> Index index0) (zip [0..] items0)++encodeTextListMapped :: TextList -> Value+encodeTextListMapped = encodeTextListShape . bindingToShape Bindings.textListBinding++parseTextListMapped :: Value -> Parser TextList+parseTextListMapped value = bindingFromShape Bindings.textListBinding <$> parseTextListShape value++decodeTextListMapped :: Value -> Either Text TextList+decodeTextListMapped = mapLeftText . parseEither parseTextListMapped++encodeTextListShape :: ShapeTextList.TextListShape -> Value+encodeTextListShape value = toJSON (map (\item0 -> toJSON (item0)) (value))++parseTextListShape :: Value -> Parser ShapeTextList.TextListShape+parseTextListShape = \value0 -> do items0 <- (parseJSON value0 :: Parser [Value]); traverse (\(index0, item0) -> (parseJSON) item0 <?> Index index0) (zip [0..] items0)++encodeTextMapMapped :: TextMap -> Value+encodeTextMapMapped = encodeTextMapShape . bindingToShape Bindings.textMapBinding++parseTextMapMapped :: Value -> Parser TextMap+parseTextMapMapped value = bindingFromShape Bindings.textMapBinding <$> parseTextMapShape value++decodeTextMapMapped :: Value -> Either Text TextMap+decodeTextMapMapped = mapLeftText . parseEither parseTextMapMapped++encodeTextMapShape :: ShapeTextMap.TextMapShape -> Value+encodeTextMapShape value = toJSON (Map.map (\item0 -> toJSON (item0)) (value))++parseTextMapShape :: Value -> Parser ShapeTextMap.TextMapShape+parseTextMapShape = \value0 -> do items0 <- (parseJSON value0 :: Parser (Map Text Value)); Map.traverseWithKey (\key0 item0 -> (parseJSON) item0 <?> Key (Key.fromText key0)) items0++bareStoreEventTypes :: NonEmpty EventType+bareStoreEventTypes = EventType "StoredValue" :| []++bareStoreCodec :: Codec BareStoreEvent+bareStoreCodec =+  Codec+    { eventTypes = bareStoreEventTypes+    , eventType = \case+        StoredValue{} -> EventType "StoredValue"+    , schemaVersion = 1+    , encode = encodeBareStoreEvent+    , decode = parseBareStoreEvent+    , upcasters = []+    }++encodeBareStoreEvent :: BareStoreEvent -> Value+encodeBareStoreEvent = \case+  StoredValue payload ->+    object+      [ "kind" .= ("StoredValue" :: Text)+      , "optionalLabel" .= encodeMaybeTextMapped payload.optionalLabel+      , "labels" .= encodeTextListMapped payload.labels+      , "attributes" .= encodeTextMapMapped payload.attributes+      , "envelope" .= encodeBareEnvelopeMapped payload.envelope+      ]++parseBareStoreEvent :: EventType -> Value -> Either Text BareStoreEvent+parseBareStoreEvent (EventType tag) = mapLeftText . parseEither (withObject "BareStoreEvent" go)+  where+    go o = do+      case tag of+        "StoredValue" ->+          StoredValue+            <$> ( StoredValueData+                    <$> parseOptionalField (parseMaybeTextMapped Null) parseMaybeTextMapped o "optionalLabel"+                    <*> explicitParseField parseTextListMapped o "labels"+                    <*> explicitParseField parseTextMapMapped o "attributes"+                    <*> explicitParseField parseBareEnvelopeMapped o "envelope"+                )+        _ -> fail ("unknown event type " <> show tag <> "; expected one of: " <> renderExpectedEventTypes bareStoreEventTypes)++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++parseOptionalField :: Parser fieldValue -> (Value -> Parser fieldValue) -> KeyMap.KeyMap Value -> Key.Key -> Parser fieldValue+parseOptionalField onMissing parseItem objectValue key =+  case KeyMap.lookup key objectValue of+    Nothing -> onMissing+    Just _ -> explicitParseField parseItem objectValue key++rejectUnknownFields :: String -> [Text] -> KeyMap.KeyMap Value -> Parser ()+rejectUnknownFields label allowed objectValue =+  unless (null extras) (fail (label <> " contains unknown fields: " <> show extras))+  where+    extras = filter (`notElem` allowed) (map Key.toText (KeyMap.keys objectValue))
+ test/conformance-bare-containers/Generated/BareContainers/BareStore/Domain.hs view
@@ -0,0 +1,55 @@+{-# LANGUAGE DeriveAnyClass #-}+{-# LANGUAGE TemplateHaskell #-}+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from aggregate BareStore; do not edit.+module Generated.BareContainers.BareStore.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 Conformance.BareContainers.Bindings qualified as Bindings+import Conformance.BareContainers.Domain (BareEnvelope, MaybeText, TextList, TextMap)+import Keiki.Generics.TH (deriveAggregateCtorsAll, deriveWireCtorsAll)++data BareStoreVertex = BareStoreEmpty | BareStoreStored+  deriving stock (Generic, Eq, Ord, Show, Enum, Bounded)+  deriving anyclass (ToJSON, FromJSON)+instance CanonicalStateShape BareStoreVertex+instance CanonicalTypeName BareStoreVertex++data StoreData = StoreData+  { optionalLabel :: !MaybeText+  , labels :: !TextList+  , attributes :: !TextMap+  , envelope :: !BareEnvelope+  }+  deriving stock (Generic, Eq, Show)++data BareStoreCommand = Store !StoreData+  deriving stock (Generic, Eq, Show)++data StoredValueData = StoredValueData+  { optionalLabel :: !MaybeText+  , labels :: !TextList+  , attributes :: !TextMap+  , envelope :: !BareEnvelope+  }+  deriving stock (Generic, Eq, Show)++data BareStoreEvent = StoredValue !StoredValueData+  deriving stock (Generic, Eq, Show)++type BareStoreRegs =+  '[ '("current", MaybeText)+   ]++initialBareStoreRegs :: RegFile BareStoreRegs+initialBareStoreRegs =+  RCons (Proxy @"current") Bindings.initialMaybeText RNil++$(deriveAggregateCtorsAll ''BareStoreCommand ''BareStoreRegs)++++$(deriveWireCtorsAll ''BareStoreEvent)
+ test/conformance-bare-containers/Generated/BareContainers/BareStore/EventStream.hs view
@@ -0,0 +1,63 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from aggregate BareStore; do not edit.+module Generated.BareContainers.BareStore.EventStream+  ( bareStoreCategory+  , bareStoreCommandCategory+  , bareStoreEventStream+  , bareStoreEventStreamDef+  , BareStoreEventStream+  , BareStoreEventStreamDef+  , bareStoreSnapshotFixture+  ) where++import Generated.BareContainers.BareStore.Domain+import Generated.BareContainers.BareStore.Codec (bareStoreCodec)+import Generated.BareContainers.BareStore.Transducer (bareStoreFoldFingerprint, bareStoreTransducer)+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.+bareStoreCategory :: Stream.StreamCategory BareStoreEventStreamDef+bareStoreCategory = Stream.categoryUnsafe "bareStore"++-- The same category text, typed for command envelopes such as PMCommand.+bareStoreCommandCategory :: Stream.StreamCategory BareStoreCommand+bareStoreCommandCategory = Stream.categoryUnsafe "bareStore"++type BareStoreEventStreamDef =+  EventStream (HsPred BareStoreRegs BareStoreCommand) BareStoreRegs BareStoreVertex BareStoreCommand BareStoreEvent++type BareStoreEventStream =+  ValidatedEventStream (HsPred BareStoreRegs BareStoreCommand) BareStoreRegs BareStoreVertex BareStoreCommand BareStoreEvent++bareStoreEventStreamDef :: BareStoreEventStreamDef+bareStoreEventStreamDef =+  EventStream+    { transducer = bareStoreTransducer,+      initialState = BareStoreEmpty,+      initialRegisters = initialBareStoreRegs,+      eventCodec = bareStoreCodec,+      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 bareStoreFoldFingerprint (defaultStateCodec 1))+    }++bareStoreSnapshotFixture :: (Int, Text)+bareStoreSnapshotFixture = (1, "bare-containers-v1")++bareStoreEventStream :: BareStoreEventStream+bareStoreEventStream =+  mkEventStreamOrThrow "BareStore" bareStoreEventStreamDef
+ test/conformance-bare-containers/Generated/BareContainers/BareStore/Harness.hs view
@@ -0,0 +1,118 @@+{-# LANGUAGE OverloadedLabels #-}+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from aggregate BareStore; do not edit.+module Generated.BareContainers.BareStore.Harness (harnessAssertions) where++import Generated.BareContainers.BareStore.Domain+import Generated.BareContainers.BareStore.Codec (encodeBareStoreEvent, parseBareStoreEvent, bareStoreCodec, encodeBareEnvelopeMapped, decodeBareEnvelopeMapped)+import Generated.BareContainers.BareStore.Transducer (bareStoreTransducer)+import Keiki.Core (applyEventsEither, defaultValidationOptions, step, validateTransducer, (!))+import Keiro.Codec (eventType)+import Data.Aeson qualified as Aeson+import Data.Aeson.Key qualified as AesonKey+import Data.Aeson.KeyMap qualified as AesonKeyMap+import Data.Either (isLeft, isRight)+import Data.List.NonEmpty qualified as NonEmpty+import Data.Text qualified as T+import Keiro.Codec.Structural (FixtureCases (..))+import Conformance.BareContainers.Bindings qualified as Bindings++-- | (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 bareStoreTransducer))+  -- clock-free: spec samples no wall clock (verified at scaffold time)+  , ("golden round-trip: StoredValue", roundTrips sampleEventStoredValue)+  , ("accepts Store from BareStoreEmpty", acceptStore)+  ]+  ++ mappedConformanceAssertions+  ++ forwardReplayStore++roundTrips :: BareStoreEvent -> Bool+roundTrips e = parseBareStoreEvent (eventType bareStoreCodec e) (encodeBareStoreEvent e) == Right e++sampleEventStoredValue :: BareStoreEvent+sampleEventStoredValue = StoredValue (StoredValueData (snd (NonEmpty.head (fixtureCases Bindings.maybeTextFixtures))) (snd (NonEmpty.head (fixtureCases Bindings.textListFixtures))) (snd (NonEmpty.head (fixtureCases Bindings.textMapFixtures))) (snd (NonEmpty.head (fixtureCases Bindings.bareEnvelopeFixtures))))++acceptStore :: Bool+acceptStore =+  case step bareStoreTransducer (BareStoreEmpty, initialBareStoreRegs) (Store (StoreData (snd (NonEmpty.head (fixtureCases Bindings.maybeTextFixtures))) (snd (NonEmpty.head (fixtureCases Bindings.textListFixtures))) (snd (NonEmpty.head (fixtureCases Bindings.textMapFixtures))) (snd (NonEmpty.head (fixtureCases Bindings.bareEnvelopeFixtures))))) of+    Just (v, _, _) -> v == BareStoreStored+    Nothing -> False++-- forward/replay equality (plan 147): cross the persisted codec boundary,+-- replay the emitted chain, and compare the final vertex and every register.+forwardReplayStore :: [(String, Bool)]+forwardReplayStore =+  case step bareStoreTransducer (BareStoreEmpty, initialBareStoreRegs) (Store (StoreData (snd (NonEmpty.head (fixtureCases Bindings.maybeTextFixtures))) (snd (NonEmpty.head (fixtureCases Bindings.textListFixtures))) (snd (NonEmpty.head (fixtureCases Bindings.textMapFixtures))) (snd (NonEmpty.head (fixtureCases Bindings.bareEnvelopeFixtures))))) of+    Nothing -> [(prefix <> "forward step accepted", False)]+    Just (forwardVertex, forwardRegs, emitted) ->+      case mapM (\event -> parseBareStoreEvent (eventType bareStoreCodec event) (encodeBareStoreEvent event)) emitted of+        Left _ -> [(prefix <> "emitted chain decodes", False)]+        Right decodedEvents ->+          case applyEventsEither bareStoreTransducer (BareStoreEmpty, initialBareStoreRegs) decodedEvents of+            Left _ -> [(prefix <> "replay succeeds", False)]+            Right (replayVertex, replayRegs) ->+              [ (prefix <> "final vertex", replayVertex == forwardVertex)+              , (prefix <> "register current", (replayRegs ! #current) == (forwardRegs ! #current))+              ]+  where+    prefix = "forward/replay equality: Store from BareStoreEmpty -- "++mappedConformanceAssertions :: [(String, Bool)]+mappedConformanceAssertions =+  concat+    [ storedValueOptionalLabelAssertions+    , storedValueLabelsAssertions+    , storedValueAttributesAssertions+    , storedValueEnvelopeAssertions+    , structuralWirePolicyAssertions+    ]++storedValueOptionalLabelAssertions :: [(String, Bool)]+storedValueOptionalLabelAssertions =+  [ ("mapped codec round-trip: StoredValue/optionalLabel/" <> T.unpack label, roundTrips (StoredValue (StoredValueData mappedValue (snd (NonEmpty.head (fixtureCases Bindings.textListFixtures))) (snd (NonEmpty.head (fixtureCases Bindings.textMapFixtures))) (snd (NonEmpty.head (fixtureCases Bindings.bareEnvelopeFixtures))))))+  | (label, mappedValue) <- NonEmpty.toList (fixtureCases Bindings.maybeTextFixtures)+  ]++storedValueLabelsAssertions :: [(String, Bool)]+storedValueLabelsAssertions =+  [ ("mapped codec round-trip: StoredValue/labels/" <> T.unpack label, roundTrips (StoredValue (StoredValueData (snd (NonEmpty.head (fixtureCases Bindings.maybeTextFixtures))) mappedValue (snd (NonEmpty.head (fixtureCases Bindings.textMapFixtures))) (snd (NonEmpty.head (fixtureCases Bindings.bareEnvelopeFixtures))))))+  | (label, mappedValue) <- NonEmpty.toList (fixtureCases Bindings.textListFixtures)+  ]++storedValueAttributesAssertions :: [(String, Bool)]+storedValueAttributesAssertions =+  [ ("mapped codec round-trip: StoredValue/attributes/" <> T.unpack label, roundTrips (StoredValue (StoredValueData (snd (NonEmpty.head (fixtureCases Bindings.maybeTextFixtures))) (snd (NonEmpty.head (fixtureCases Bindings.textListFixtures))) mappedValue (snd (NonEmpty.head (fixtureCases Bindings.bareEnvelopeFixtures))))))+  | (label, mappedValue) <- NonEmpty.toList (fixtureCases Bindings.textMapFixtures)+  ]++storedValueEnvelopeAssertions :: [(String, Bool)]+storedValueEnvelopeAssertions =+  [ ("mapped codec round-trip: StoredValue/envelope/" <> T.unpack label, roundTrips (StoredValue (StoredValueData (snd (NonEmpty.head (fixtureCases Bindings.maybeTextFixtures))) (snd (NonEmpty.head (fixtureCases Bindings.textListFixtures))) (snd (NonEmpty.head (fixtureCases Bindings.textMapFixtures))) mappedValue)))+  | (label, mappedValue) <- NonEmpty.toList (fixtureCases Bindings.bareEnvelopeFixtures)+  ]++structuralWirePolicyAssertions :: [(String, Bool)]+structuralWirePolicyAssertions =+  [ ("wire policy missing default: conformance.bare-containers.BareEnvelope.v1/optionalLabel", case decodeBareEnvelopeMapped (deleteObjectField "optionalLabel" (encodeBareEnvelopeMapped (snd (NonEmpty.head (fixtureCases Bindings.bareEnvelopeFixtures))))) of Left _ -> False; Right decoded -> objectField "optionalLabel" (encodeBareEnvelopeMapped decoded) == Just (Aeson.Null))+  , ("wire policy explicit null: conformance.bare-containers.BareEnvelope.v1/optionalLabel", isRight (decodeBareEnvelopeMapped (insertObjectField "optionalLabel" Aeson.Null (encodeBareEnvelopeMapped (snd (NonEmpty.head (fixtureCases Bindings.bareEnvelopeFixtures)))))))+  , ("wire policy missing default: conformance.bare-containers.BareEnvelope.v1/labels", case decodeBareEnvelopeMapped (deleteObjectField "labels" (encodeBareEnvelopeMapped (snd (NonEmpty.head (fixtureCases Bindings.bareEnvelopeFixtures))))) of Left _ -> False; Right decoded -> objectField "labels" (encodeBareEnvelopeMapped decoded) == Just (Aeson.toJSON ([] :: [Aeson.Value])))+  , ("wire policy explicit null: conformance.bare-containers.BareEnvelope.v1/labels", isLeft (decodeBareEnvelopeMapped (insertObjectField "labels" Aeson.Null (encodeBareEnvelopeMapped (snd (NonEmpty.head (fixtureCases Bindings.bareEnvelopeFixtures)))))))+  , ("wire policy missing default: conformance.bare-containers.BareEnvelope.v1/attributes", case decodeBareEnvelopeMapped (deleteObjectField "attributes" (encodeBareEnvelopeMapped (snd (NonEmpty.head (fixtureCases Bindings.bareEnvelopeFixtures))))) of Left _ -> False; Right decoded -> objectField "attributes" (encodeBareEnvelopeMapped decoded) == Just (Aeson.Object mempty))+  , ("wire policy explicit null: conformance.bare-containers.BareEnvelope.v1/attributes", isLeft (decodeBareEnvelopeMapped (insertObjectField "attributes" Aeson.Null (encodeBareEnvelopeMapped (snd (NonEmpty.head (fixtureCases Bindings.bareEnvelopeFixtures)))))))+  , ("wire policy unknown fields: conformance.bare-containers.BareEnvelope.v1", all (\(_, value) -> isLeft (decodeBareEnvelopeMapped (insertObjectField "__keiro_unknown" (Aeson.Bool True) (encodeBareEnvelopeMapped value)))) (NonEmpty.toList (fixtureCases Bindings.bareEnvelopeFixtures)))+  ]++deleteObjectField :: T.Text -> Aeson.Value -> Aeson.Value+deleteObjectField key (Aeson.Object objectValue) = Aeson.Object (AesonKeyMap.delete (AesonKey.fromText key) objectValue)+deleteObjectField _ value = value++insertObjectField :: T.Text -> Aeson.Value -> Aeson.Value -> Aeson.Value+insertObjectField key inserted (Aeson.Object objectValue) = Aeson.Object (AesonKeyMap.insert (AesonKey.fromText key) inserted objectValue)+insertObjectField _ _ value = value++objectField :: T.Text -> Aeson.Value -> Maybe Aeson.Value+objectField key (Aeson.Object objectValue) = AesonKeyMap.lookup (AesonKey.fromText key) objectValue+objectField _ _ = Nothing
+ test/conformance-bare-containers/Generated/BareContainers/BareStore/Projection.hs view
@@ -0,0 +1,4 @@+-- @generated by keiro-dsl 0.18.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.
+ test/conformance-bare-containers/Generated/BareContainers/BareStore/Transducer.hs view
@@ -0,0 +1,59 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE QualifiedDo #-}+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from aggregate BareStore; do not edit.+module Generated.BareContainers.BareStore.Transducer+  ( bareStoreTransducer+  , bareStoreFoldFingerprint+  , BehaviorOwnership (..)+  , bareStorePredicateVerifications+  ) where++import Generated.BareContainers.BareStore.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 Keiki.Builder ((=:))++bareStoreTransducer+  :: SymTransducer+       (HsPred BareStoreRegs BareStoreCommand)+       BareStoreRegs+       BareStoreVertex+       BareStoreCommand+       BareStoreEvent+bareStoreTransducer =+  B.buildTransducer BareStoreEmpty initialBareStoreRegs isTerminal do+    B.from BareStoreEmpty do+      B.onCmd inCtorStore $ \d -> B.do+        B.slot @"current" =: d.optionalLabel+        B.emit wireStoredValue (StoredValueTermFields+          { optionalLabel = d.optionalLabel+          , labels = d.labels+          , attributes = d.attributes+          , envelope = d.envelope+          })+        B.goto BareStoreStored+ where+  isTerminal = \case+    BareStoreStored -> True+    _ -> False++bareStoreFoldFingerprint :: Text+bareStoreFoldFingerprint = "d522dcd40ab98fed8f458c7388a4c085"++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.+bareStorePredicateVerifications :: IO [(Text, BehaviorOwnership, S.PredicateVerification)]+bareStorePredicateVerifications = sequence+  [ verifyTransition "transition1EmptyStore" GeneratedOwned BareStoreEmpty 0+  ]+ where+  verifyTransition label owner source edgeIndex =+    case drop edgeIndex (K.edgesOut bareStoreTransducer source) of+      K.Edge predicate _ _ _ _ : _ -> (\result -> (label, owner, result)) <$> S.verifyPredicate predicate+      [] -> pure (label, owner, S.UnverifiedSolverFailure "generated transition edge missing")
+ test/conformance-bare-containers/Generated/BareContainers/BehaviorSourceMap.hs view
@@ -0,0 +1,30 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from context bare-containers behavior source map; do not edit.+module Generated.BareContainers.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-b3fa753a88b62d6d" -> Just (BehaviorSourceLocation "keiro-dsl/test/fixtures/bare-containers.keiro" 65 3)+  "behavior-v1-b728b85baa41bc71" -> Just (BehaviorSourceLocation "keiro-dsl/test/fixtures/bare-containers.keiro" 60 16)+  _ -> 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
+ test/conformance-bare-containers/Generated/BareContainers/Nominals.hs view
@@ -0,0 +1,9 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from context bare-containers generated nominal declarations; do not edit.+module Generated.BareContainers.Nominals+  ( ItemId+  , parseItemId+  , mkItemId+  , itemIdText+  ) where++import Generated.BareContainers.Nominals.Internal (ItemId, mkItemId, parseItemId, itemIdText)
+ test/conformance-bare-containers/Generated/BareContainers/Nominals/Internal.hs view
@@ -0,0 +1,40 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from context bare-containers generated nominal ID internals; do not edit.+module Generated.BareContainers.Nominals.Internal+  ( ItemId+  , parseItemId+  , mkItemId+  , itemIdText+  , unsafeItemIdFromLegacyText+  ) 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 ItemId = ItemId Text+  deriving stock (Generic, Eq, Ord, Show)++instance CanonicalTypeName ItemId++instance ToJSON ItemId where+  toJSON = toJSON . itemIdText++instance FromJSON ItemId where+  parseJSON = withText "ItemId" (either (fail . T.unpack) pure . parseItemId)++parseItemId :: Text -> Either Text ItemId+parseItemId input = case validateIdDomainText (typeIdV7Domain "item") input of+  Left reason -> Left (T.pack (show reason))+  Right () -> Right (ItemId input)++mkItemId :: Text -> Either Text ItemId+mkItemId = parseItemId++itemIdText :: ItemId -> Text+itemIdText (ItemId value) = value++unsafeItemIdFromLegacyText :: Text -> ItemId+unsafeItemIdFromLegacyText = ItemId
+ test/conformance-bare-containers/Generated/BareContainers/ProjectionCatalog.hs view
@@ -0,0 +1,80 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from projection-catalog bare-containers; do not edit.+{-# LANGUAGE OverloadedStrings #-}+module Generated.BareContainers.ProjectionCatalog+  ( projectionCatalog+  , validatedProjectionCatalog+  , projectionCatalogInventory+  , projectionCatalogRegistrations+  , projectionCatalogAsyncRegistrations+  , projectionCatalogQuerySupplies+  , registerProjectionCatalog+  , bareWriterProjectionSet+  , bareRebuildRebuildGroupId+  , startBareRebuildRebuild+  ) 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 BareContainers.ProjectionCatalog.ProjectionCatalogHoles qualified as Holes+import Generated.BareContainers.BareLookup.ReadModel qualified as RMBareLookup++must :: Show error => Either error value -> value+must = either (error . show) id++bareWriterProjectionSet :: Catalog.ProjectionSet Holes.BareWriterEvent+bareWriterProjectionSet =+  Catalog.ProjectionSet+    (must (Catalog.mkSourceId "all"))+    (Catalog.ProjectionDefinition+      (must (Catalog.mkProjectionId "bare_writer"))+      (must (Catalog.mkRebuildGroupId "bare_rebuild"))+      ((must (Catalog.mkTargetId "bare_table")) :| [])+      (Catalog.Replayable (Catalog.ReplayAdapter Holes.decodeBareWriterReplay Holes.applyBareWriterReplay))+      (Catalog.AsyncHandler (AsyncProjection "bare-writer-v1" "bare-containers-bare-lookup" "bare-writer" Holes.applyBareWriterLive Holes.bareWriterIdempotencyKey) (must (Catalog.mkSubscriptionId "bare-writer")) (must (Catalog.mkDedupKeyId "bare-writer-v1")) (must (Catalog.mkClaimSite "projection-owner bare_writer async-handler")) :| [])+      (must (Catalog.mkClaimSite "projection-owner bare_writer"))+      :| [])+    (must (Catalog.mkClaimSite "projection-owner bare_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 "bare_table")) (Catalog.QualifiedTable "public" "bare_values") Catalog.ClearBeforeReplay [] (must (Catalog.mkClaimSite "target bare_table"))]+    [Catalog.RebuildGroupDeclaration (must (Catalog.mkRebuildGroupId "bare_rebuild")) [(must (Catalog.mkTargetId "bare_table"))] [] (must (Catalog.mkClaimSite "rebuild-group bare_rebuild"))]+    []+    []+    [Catalog.SubscriptionDeclaration (must (Catalog.mkSubscriptionId "bare-writer")) "bare-writer" (must (Catalog.mkSourceId "all")) KirokuSubscription.FromBeginning (must (Catalog.mkClaimSite "projection-owner bare_writer subscription"))]+    [Catalog.DedupKeyDeclaration (must (Catalog.mkDedupKeyId "bare-writer-v1")) "bare-writer-v1" (must (Catalog.mkClaimSite "projection-owner bare_writer dedup"))]+    [Catalog.SomeQueryModelBinding (Catalog.QueryModelBinding (must (Catalog.mkQueryModelId "bare_lookup")) RMBareLookup.bareLookupReadModel (must (Catalog.mkRebuildGroupId "bare_rebuild")) [(must (Catalog.mkTargetId "bare_table"))] (must (Catalog.mkClaimSite "readmodel bare_lookup")))]+    [Catalog.SomeProjectionSet bareWriterProjectionSet]++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++bareRebuildRebuildGroupId :: Catalog.RebuildGroupId+bareRebuildRebuildGroupId = (must (Catalog.mkRebuildGroupId "bare_rebuild"))++startBareRebuildRebuild :: (IOE :> es, Store :> es) => Rebuild.RebuildOptions -> Eff es (Either Rebuild.CatalogRebuildError Rebuild.RebuildRunReport)+startBareRebuildRebuild = Rebuild.startCatalogRebuild validatedProjectionCatalog bareRebuildRebuildGroupId
+ test/conformance-bare-containers/Generated/BareContainers/ReplayAudit.hs view
@@ -0,0 +1,23 @@+-- @generated by keiro-dsl 0.18.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;+--   * 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.BareContainers.ReplayAudit (auditTargets) where++import Generated.BareContainers.BareStore.EventStream qualified as BareStore+import Keiro.ReplayAudit (AuditTarget (..), SomeAuditTarget (..), streamInCategory)+import Keiro.Stream qualified as Stream++auditTargets :: [SomeAuditTarget]+auditTargets =+  [ SomeAuditTarget+      AuditTarget+        { eventStream = BareStore.bareStoreEventStream+        , category = Stream.categoryText BareStore.bareStoreCategory+        , mkStream = streamInCategory (Stream.categoryText BareStore.bareStoreCategory)+        }+  ]
+ test/conformance-bare-containers/Generated/BareContainers/Structural/CodecCompare/MaybeText.hs view
@@ -0,0 +1,77 @@++-- @generated by keiro-dsl codec comparison; non-production migration evidence; do not edit.+-- This module compares historical and generated codecs in consumer-owned tests only.+-- It is never a runtime fallback and never changes the generated codec's authority.+module Generated.BareContainers.Structural.CodecCompare.MaybeText (compareWithHistorical) where++import Control.Monad (filterM)+import Data.Aeson (Value)+import Data.Aeson qualified as Aeson+import Data.List (sort)+import Data.List.NonEmpty qualified as NonEmpty+import Data.Text (Text)+import Data.Text qualified+import Generated.BareContainers.BareStore.Codec qualified as GeneratedCodec+import Keiro.Codec.Structural (FixtureCases (..))+import Keiro.Dsl.CodecCompare+import Keiro.Dsl.TypeGraph (BindingVersion (..), CanonicalTypeId (..), QualifiedValueName (..))+import System.Directory (doesFileExist, listDirectory)+import System.FilePath (takeExtension, (</>))+import Conformance.BareContainers.Bindings qualified as Bindings+import Conformance.BareContainers.Domain (MaybeText)++compareWithHistorical :: HistoricalCodec MaybeText -> FilePath -> IO CompareReport+compareWithHistorical historicalCodec goldenDirectory = do+  names <- sort . filter ((== ".json") . takeExtension) <$> listDirectory goldenDirectory+  files <- filterM doesFileExist [goldenDirectory </> name | name <- names]+  loaded <- traverse (loadGolden historicalCodec) files+  let inputIssues = [issue | Left issue <- loaded]+      entries = [entry | Right entry <- loaded]+      typedCases = NonEmpty.toList (fixtureCases Bindings.maybeTextFixtures)+      encodeObservations =+        [ EncodeObservation label (historicalCodec.encode value) (GeneratedCodec.encodeMaybeTextMapped value)+        | (label, value) <- typedCases+        ]+      decodeObservations = [observation | (observation, _) <- entries]+      typedObserved =+        concat+          [ observedBranchesFor FromBinding branchSchema (GeneratedCodec.encodeMaybeTextMapped value)+          | (_, value) <- typedCases+          ]+      historicalObserved =+        concat [observedBranchesFor HistoricalGolden branchSchema value | (_, values) <- entries, value <- values]+      declared = declaredBranchesFor FromBinding branchSchema <> declaredBranchesFor HistoricalGolden branchSchema+      provenance =+        CompareProvenance+          { historicalCodecIdentity = historicalCodec.identity+          , historicalCodecVersion = historicalCodec.version+          , canonicalType = CanonicalTypeId "conformance.bare-containers.MaybeText.v1"+          , bindingSymbol = QualifiedValueName "Conformance.BareContainers.Bindings.maybeTextBinding"+          , bindingVersion = BindingVersion "1"+          , wireFingerprint = "c289b01d5d2741d7"+          }+  pure (compareReport provenance inputIssues (encodeObservations <> decodeObservations) declared (typedObserved <> historicalObserved))++loadGolden :: HistoricalCodec MaybeText -> FilePath -> IO (Either CompareInputIssue (CompareObservation, [Value]))+loadGolden historicalCodec path = do+  decoded <- Aeson.eitherDecodeFileStrict path+  pure $ case decoded of+    Left reason -> Left (HistoricalGoldenUnreadable path (fromString reason))+    Right inputValue ->+      let historicalDecoded = historicalCodec.decode inputValue+          historicalOutcome = normalizeDecode historicalDecoded+          generatedOutcome = normalizeDecode (GeneratedCodec.decodeMaybeTextMapped inputValue)+          observation = DecodeObservation path inputValue historicalOutcome generatedOutcome+          coveredValues = case historicalDecoded of+            Right value -> [inputValue, GeneratedCodec.encodeMaybeTextMapped value]+            Left _ -> []+       in Right (observation, coveredValues)++normalizeDecode :: Either Text MaybeText -> DecodeOutcome+normalizeDecode = either DecodeFailed (DecodedShape . GeneratedCodec.encodeMaybeTextMapped)++fromString :: String -> Text+fromString = Data.Text.pack++branchSchema :: BranchSchema+branchSchema = BranchOptional (BranchScalar)
+ test/conformance-bare-containers/Generated/BareContainers/Structural/NominalLeaves.hs view
@@ -0,0 +1,15 @@+-- @generated by keiro-dsl 0.18.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)+import Data.Aeson.Types (Parser)+import Data.Text qualified as T+import Generated.BareContainers.Nominals qualified as Nominals++encodeItemIdLeaf :: Nominals.ItemId -> Value+encodeItemIdLeaf = String . Nominals.itemIdText+{-# NOINLINE encodeItemIdLeaf #-}++parseItemIdLeaf :: Value -> Parser Nominals.ItemId+parseItemIdLeaf = withText "ItemId" (either (fail . T.unpack) pure . Nominals.parseItemId)+{-# NOINLINE parseItemIdLeaf #-}
+ test/conformance-bare-containers/Generated/BareContainers/Structural/Shape/BareEnvelope.hs view
@@ -0,0 +1,16 @@+-- @generated by keiro-dsl 0.18.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)+import Generated.BareContainers.Structural.Shape.MaybeText qualified as MaybeText+import Generated.BareContainers.Structural.Shape.NestedIds qualified as NestedIds+import Generated.BareContainers.Structural.Shape.TextList qualified as TextList+import Generated.BareContainers.Structural.Shape.TextMap qualified as TextMap++data BareEnvelopeShape = BareEnvelope+  { optionalLabel :: !MaybeText.MaybeTextShape+  , labels :: !TextList.TextListShape+  , attributes :: !TextMap.TextMapShape+  , nestedIds :: !NestedIds.NestedIdsShape+  }+  deriving stock (Eq, Generic, Show)
+ test/conformance-bare-containers/Generated/BareContainers/Structural/Shape/MaybeText.hs view
@@ -0,0 +1,6 @@+-- @generated by keiro-dsl 0.18.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)++type MaybeTextShape = (Maybe Text)
+ test/conformance-bare-containers/Generated/BareContainers/Structural/Shape/NestedIds.hs view
@@ -0,0 +1,6 @@+-- @generated by keiro-dsl 0.18.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++type NestedIdsShape = [Maybe Nominals.ItemId]
+ test/conformance-bare-containers/Generated/BareContainers/Structural/Shape/TextList.hs view
@@ -0,0 +1,6 @@+-- @generated by keiro-dsl 0.18.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)++type TextListShape = [Text]
+ test/conformance-bare-containers/Generated/BareContainers/Structural/Shape/TextMap.hs view
@@ -0,0 +1,7 @@+-- @generated by keiro-dsl 0.18.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)+import Data.Text (Text)++type TextMapShape = (Map Text Text)
+ test/conformance-bare-containers/Generated/BareContainers/StructuralConformance.hs view
@@ -0,0 +1,131 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from context bare-containers structural conformance; do not edit.+module Generated.BareContainers.StructuralConformance+  ( structuralConformanceAssertions+  ) where++import Data.Aeson qualified as Aeson+import Data.Aeson.Types qualified as AesonTypes+import Data.List (nub)+import Data.List.NonEmpty qualified as NonEmpty+import Data.Map.Strict qualified as Map+import Data.Maybe (isJust, isNothing)+import Data.Proxy (Proxy (..))+import Data.Text qualified as T+import Keiki.Shape (CanonicalTypeName (..))+import Keiro.Codec.Structural (FixtureCases (..), bindingDomainRoundTrip, bindingShapeRoundTrip, bindingToShape)+import Conformance.BareContainers.Bindings qualified as Bindings+import Conformance.BareContainers.Domain (BareEnvelope, MaybeText, NestedIds, TextList, TextMap)+import Generated.BareContainers.Nominals qualified as Nominals+import Generated.BareContainers.Structural.NominalLeaves qualified as NominalLeaves+import Generated.BareContainers.Structural.Shape.BareEnvelope qualified as ShapeBareEnvelope++structuralConformanceAssertions :: [(String, Bool)]+structuralConformanceAssertions =+  concat+    [ bareEnvelopeBindingAssertions+    , maybeTextBindingAssertions+    , nestedIdsBindingAssertions+    , textListBindingAssertions+    , textMapBindingAssertions+    , [("generated nominal canonical text: conformance.bare-containers.BareEnvelope.v1/ItemId", all (\(_, value) -> (case bindingToShape Bindings.bareEnvelopeBinding value of ShapeBareEnvelope.BareEnvelope _ _ _ field0_3 -> (all (\item1 -> maybe True (\item2 -> (NominalLeaves.encodeItemIdLeaf (item2) == Aeson.String (Nominals.itemIdText (item2)) && AesonTypes.parseEither NominalLeaves.parseItemIdLeaf (NominalLeaves.encodeItemIdLeaf (item2)) == Right (item2))) (item1)) (field0_3)))) (NonEmpty.toList (fixtureCases Bindings.bareEnvelopeFixtures)))]+    , [("generated nominal canonical text: conformance.bare-containers.NestedIds.v1/ItemId", all (\(_, value) -> all (\item0 -> maybe True (\item1 -> (NominalLeaves.encodeItemIdLeaf (item1) == Aeson.String (Nominals.itemIdText (item1)) && AesonTypes.parseEither NominalLeaves.parseItemIdLeaf (NominalLeaves.encodeItemIdLeaf (item1)) == Right (item1))) (item0)) (bindingToShape Bindings.nestedIdsBinding value)) (NonEmpty.toList (fixtureCases Bindings.nestedIdsFixtures)))]+    , [("fixture coverage: conformance.bare-containers.BareEnvelope.v1", coverageBareEnvelope)]+    , [("fixture coverage: conformance.bare-containers.MaybeText.v1", coverageMaybeText)]+    , [("fixture coverage: conformance.bare-containers.NestedIds.v1", coverageNestedIds)]+    , [("fixture coverage: conformance.bare-containers.TextList.v1", coverageTextList)]+    , [("fixture coverage: conformance.bare-containers.TextMap.v1", coverageTextMap)]+    ]++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)++bareEnvelopeBindingAssertions :: [(String, Bool)]+bareEnvelopeBindingAssertions =+  ("fixture labels: conformance.bare-containers.BareEnvelope.v1", validFixtureLabels cases) :+  ("canonical identity: conformance.bare-containers.BareEnvelope.v1", canonicalTypeName (Proxy @BareEnvelope) == "conformance.bare-containers.BareEnvelope.v1") :+  concat+    [ [ ("binding domain round-trip: conformance.bare-containers.BareEnvelope.v1/" <> T.unpack label, bindingDomainRoundTrip Bindings.bareEnvelopeBinding value)+      , ("binding shape round-trip: conformance.bare-containers.BareEnvelope.v1/" <> T.unpack label, bindingShapeRoundTrip Bindings.bareEnvelopeBinding (bindingToShape Bindings.bareEnvelopeBinding value))+      ]+    | (label, value) <- NonEmpty.toList cases+    ]+  where+    cases = fixtureCases Bindings.bareEnvelopeFixtures++maybeTextBindingAssertions :: [(String, Bool)]+maybeTextBindingAssertions =+  ("fixture labels: conformance.bare-containers.MaybeText.v1", validFixtureLabels cases) :+  ("canonical identity: conformance.bare-containers.MaybeText.v1", canonicalTypeName (Proxy @MaybeText) == "conformance.bare-containers.MaybeText.v1") :+  concat+    [ [ ("binding domain round-trip: conformance.bare-containers.MaybeText.v1/" <> T.unpack label, bindingDomainRoundTrip Bindings.maybeTextBinding value)+      , ("binding shape round-trip: conformance.bare-containers.MaybeText.v1/" <> T.unpack label, bindingShapeRoundTrip Bindings.maybeTextBinding (bindingToShape Bindings.maybeTextBinding value))+      ]+    | (label, value) <- NonEmpty.toList cases+    ]+  where+    cases = fixtureCases Bindings.maybeTextFixtures++nestedIdsBindingAssertions :: [(String, Bool)]+nestedIdsBindingAssertions =+  ("fixture labels: conformance.bare-containers.NestedIds.v1", validFixtureLabels cases) :+  ("canonical identity: conformance.bare-containers.NestedIds.v1", canonicalTypeName (Proxy @NestedIds) == "conformance.bare-containers.NestedIds.v1") :+  concat+    [ [ ("binding domain round-trip: conformance.bare-containers.NestedIds.v1/" <> T.unpack label, bindingDomainRoundTrip Bindings.nestedIdsBinding value)+      , ("binding shape round-trip: conformance.bare-containers.NestedIds.v1/" <> T.unpack label, bindingShapeRoundTrip Bindings.nestedIdsBinding (bindingToShape Bindings.nestedIdsBinding value))+      ]+    | (label, value) <- NonEmpty.toList cases+    ]+  where+    cases = fixtureCases Bindings.nestedIdsFixtures++textListBindingAssertions :: [(String, Bool)]+textListBindingAssertions =+  ("fixture labels: conformance.bare-containers.TextList.v1", validFixtureLabels cases) :+  ("canonical identity: conformance.bare-containers.TextList.v1", canonicalTypeName (Proxy @TextList) == "conformance.bare-containers.TextList.v1") :+  concat+    [ [ ("binding domain round-trip: conformance.bare-containers.TextList.v1/" <> T.unpack label, bindingDomainRoundTrip Bindings.textListBinding value)+      , ("binding shape round-trip: conformance.bare-containers.TextList.v1/" <> T.unpack label, bindingShapeRoundTrip Bindings.textListBinding (bindingToShape Bindings.textListBinding value))+      ]+    | (label, value) <- NonEmpty.toList cases+    ]+  where+    cases = fixtureCases Bindings.textListFixtures++textMapBindingAssertions :: [(String, Bool)]+textMapBindingAssertions =+  ("fixture labels: conformance.bare-containers.TextMap.v1", validFixtureLabels cases) :+  ("canonical identity: conformance.bare-containers.TextMap.v1", canonicalTypeName (Proxy @TextMap) == "conformance.bare-containers.TextMap.v1") :+  concat+    [ [ ("binding domain round-trip: conformance.bare-containers.TextMap.v1/" <> T.unpack label, bindingDomainRoundTrip Bindings.textMapBinding value)+      , ("binding shape round-trip: conformance.bare-containers.TextMap.v1/" <> T.unpack label, bindingShapeRoundTrip Bindings.textMapBinding (bindingToShape Bindings.textMapBinding value))+      ]+    | (label, value) <- NonEmpty.toList cases+    ]+  where+    cases = fixtureCases Bindings.textMapFixtures++coverageBareEnvelope :: Bool+coverageBareEnvelope = True++coverageMaybeText :: Bool+coverageMaybeText = any isNothing shapes && any isJust shapes+  where+    shapes = map (bindingToShape Bindings.maybeTextBinding . snd) (NonEmpty.toList (fixtureCases Bindings.maybeTextFixtures))++coverageNestedIds :: Bool+coverageNestedIds = any null shapes && any (not . null) shapes+  where+    shapes = map (bindingToShape Bindings.nestedIdsBinding . snd) (NonEmpty.toList (fixtureCases Bindings.nestedIdsFixtures))++coverageTextList :: Bool+coverageTextList = any null shapes && any (not . null) shapes+  where+    shapes = map (bindingToShape Bindings.textListBinding . snd) (NonEmpty.toList (fixtureCases Bindings.textListFixtures))++coverageTextMap :: Bool+coverageTextMap = any Map.null shapes && any (not . Map.null) shapes+  where+    shapes = map (bindingToShape Bindings.textMapBinding . snd) (NonEmpty.toList (fixtureCases Bindings.textMapFixtures))
+ test/conformance-bare-containers/Main.hs view
@@ -0,0 +1,136 @@+module Main (main) where++import Conformance.BareContainers.Domain+import Conformance.BareContainers.Historical (historicalMaybeTextCodec)+import Control.Monad (forM_, unless)+import Data.Aeson (Value (..), object, (.=))+import Data.Aeson qualified as Aeson+import Data.Aeson.Key qualified as Key+import Data.Aeson.KeyMap qualified as KeyMap+import Data.Either (isLeft)+import Data.Map.Strict qualified as Map+import Data.Text (Text)+import Generated.BareContainers.BareJobs.Queue (BareJob (..), encodeBareJob, parseBareJob)+import Generated.BareContainers.BareLookup.QueryContract (BareLookupQueryInput, BareLookupQueryResult)+import Generated.BareContainers.BareStore.Codec+import Generated.BareContainers.BareStore.Domain+import Generated.BareContainers.BareStore.Harness (harnessAssertions)+import Generated.BareContainers.Structural.CodecCompare.MaybeText (compareWithHistorical)+import Generated.BareContainers.StructuralConformance (structuralConformanceAssertions)+import Keiro.Codec (eventType)+import Keiro.Dsl.CodecCompare (reportSucceeded)+import System.Exit (exitFailure)++main :: IO ()+main = do+  comparison <-+    compareWithHistorical+      historicalMaybeTextCodec+      "test/conformance-bare-containers/fixtures/codec-compare"+  let assertions =+        [("structural/" <> label, passed) | (label, passed) <- structuralConformanceAssertions]+          <> harnessAssertions+          <> [ ("bare optional encodes null and a present text directly", maybeTextWire),+               ("bare list preserves order and duplicates", textListWire),+               ("bare text map encodes as an object", textMapWire),+               ("missing optional alias fields apply their declared defaults", missingAliasDefaults),+               ("root optional mapped event fields treat omission and null alike", rootOptionalAbsenceEquivalence),+               ("non-optional mapped event fields still reject omission", nonOptionalRootStrict),+               ("queue payloads preserve bare aliases", queueRoundTrip),+               ("query aliases preserve bare domain types", queryAliasAgreement),+               ("historical opaque MaybeText codec has parity with the generated codec", reportSucceeded comparison)+             ]+  forM_ assertions $ \(label, passed) ->+    putStrLn ((if passed then "PASS  " else "FAIL  ") <> label)+  unless (all snd assertions) exitFailure++maybeTextWire :: Bool+maybeTextWire =+  encodeMaybeTextMapped (MaybeText Nothing) == Null+    && encodeMaybeTextMapped (MaybeText (Just "x")) == String "x"+    && decodeMaybeTextMapped Null == Right (MaybeText Nothing)+    && decodeMaybeTextMapped (String "x") == Right (MaybeText (Just "x"))++textListWire :: Bool+textListWire =+  encodeTextListMapped value == Aeson.toJSON (["b", "a", "a"] :: [Text])+    && decodeTextListMapped (encodeTextListMapped value) == Right value+  where+    value = TextList ["b", "a", "a"]++textMapWire :: Bool+textMapWire =+  encodeTextMapMapped value == object ["alpha" .= String "one", "beta" .= String "two"]+    && decodeTextMapMapped (encodeTextMapMapped value) == Right value+  where+    value = TextMap (Map.fromList [("alpha", "one"), ("beta", "two")])++missingAliasDefaults :: Bool+missingAliasDefaults =+  decodeBareEnvelopeMapped withoutDefaults+    == Right (BareEnvelope (MaybeText Nothing) (TextList []) (TextMap Map.empty) (NestedIds []))+  where+    withoutDefaults = object ["nestedIds" .= ([] :: [Value])]++-- | Plan 295 found both spellings of absence in retained history -- 28 omitted+-- keys and 39 explicit nulls -- which historical Aeson decoding had always read+-- as 'Nothing'. A root 'Optional' mapped event field must therefore accept an+-- omitted key and decode it exactly as an explicit null.+rootOptionalAbsenceEquivalence :: Bool+rootOptionalAbsenceEquivalence =+  parseBareStoreEvent kind (deleteObjectField "optionalLabel" encoded) == Right event+    && parseBareStoreEvent kind (insertObjectField "optionalLabel" Null encoded) == Right event+  where+    event =+      StoredValue+        ( StoredValueData+            (MaybeText Nothing)+            (TextList ["b", "a", "a"])+            (TextMap Map.empty)+            (BareEnvelope (MaybeText Nothing) (TextList []) (TextMap Map.empty) (NestedIds []))+        )+    kind = eventType bareStoreCodec event+    encoded = encodeBareStoreEvent event++-- | The equivalence above is scoped to root 'Optional' mapped fields. A+-- non-optional mapped root carries no absent spelling, so omitting it stays a+-- decode failure rather than defaulting.+nonOptionalRootStrict :: Bool+nonOptionalRootStrict =+  isLeft (parseBareStoreEvent kind (deleteObjectField "labels" encoded))+    && isLeft (parseBareStoreEvent kind (deleteObjectField "attributes" encoded))+  where+    event =+      StoredValue+        ( StoredValueData+            (MaybeText Nothing)+            (TextList ["b", "a", "a"])+            (TextMap Map.empty)+            (BareEnvelope (MaybeText Nothing) (TextList []) (TextMap Map.empty) (NestedIds []))+        )+    kind = eventType bareStoreCodec event+    encoded = encodeBareStoreEvent event++queueRoundTrip :: Bool+queueRoundTrip = parseBareJob (encodeBareJob payload) == Right payload+  where+    payload = BareJob (MaybeText Nothing) (TextList ["b", "a", "a"])++queryAliasAgreement :: Bool+queryAliasAgreement =+  queryInputIdentity (MaybeText (Just "query")) == MaybeText (Just "query")+    && queryResultIdentity [TextList ["b", "a", "a"]] == [TextList ["b", "a", "a"]]++queryInputIdentity :: BareLookupQueryInput -> MaybeText+queryInputIdentity = id++queryResultIdentity :: BareLookupQueryResult -> [TextList]+queryResultIdentity = id++deleteObjectField :: Key.Key -> Value -> Value+deleteObjectField key (Object value) = Object (KeyMap.delete key value)+deleteObjectField _ value = value++insertObjectField :: Key.Key -> Value -> Value -> Value+insertObjectField key inserted (Object value) = Object (KeyMap.insert key inserted value)+insertObjectField _ _ value = value
+ test/conformance-bare-containers/fixtures/codec-compare/nothing.json view
@@ -0,0 +1,1 @@+null
+ test/conformance-bare-containers/fixtures/codec-compare/present.json view
@@ -0,0 +1,1 @@+"x"
+ test/conformance-bare-containers/keiro-dsl-cabal-fragment.context.bare-containers.txt view
@@ -0,0 +1,64 @@+-- keiro-dsl build manifest for keiro-dsl/test/fixtures/bare-containers.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:+    BareContainers.BareLookup.ReadModelHoles+    BareContainers.BareStore.BehaviorHoles+    BareContainers.ProjectionCatalog.ProjectionCatalogHoles+    Conformance.BareContainers.Bindings+    Generated.BareContainers.BareJobs.Queue+    Generated.BareContainers.BareJobs.QueueCodec+    Generated.BareContainers.BareJobs.QueuePolicy+    Generated.BareContainers.BareLookup.QueryContract+    Generated.BareContainers.BareLookup.ReadModel+    Generated.BareContainers.BareLookup.ReadModelHarness+    Generated.BareContainers.BareLookup.ReadModelTable+    Generated.BareContainers.BareStore.BehaviorContract+    Generated.BareContainers.BareStore.Codec+    Generated.BareContainers.BareStore.Domain+    Generated.BareContainers.BareStore.EventStream+    Generated.BareContainers.BareStore.Harness+    Generated.BareContainers.BareStore.Projection+    Generated.BareContainers.BareStore.Transducer+    Generated.BareContainers.BehaviorSourceMap+    Generated.BareContainers.Nominals+    Generated.BareContainers.Nominals.Internal+    Generated.BareContainers.ProjectionCatalog+    Generated.BareContainers.ReplayAudit+    Generated.BareContainers.Structural.NominalLeaves+    Generated.BareContainers.Structural.Shape.BareEnvelope+    Generated.BareContainers.Structural.Shape.MaybeText+    Generated.BareContainers.Structural.Shape.NestedIds+    Generated.BareContainers.Structural.Shape.TextList+    Generated.BareContainers.Structural.Shape.TextMap+    Generated.BareContainers.StructuralConformance++build-depends:+    , aeson+    , base+    , containers+    , effectful-core+    , hasql-transaction+    , keiki+    , keiro+    , keiro-core+    , keiro-dsl+    , keiro-pgmq+    , kiroku-store+    , text++consumer-packages:+    keiro-dsl++consumer-modules:+    Conformance.BareContainers.Bindings+    Conformance.BareContainers.Domain
+ test/conformance-bare-containers/keiro-dsl-ledger.context.bare-containers.txt view
@@ -0,0 +1,102 @@+keiro-dsl scaffold record v1+spec: keiro-dsl/test/fixtures/bare-containers.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 bare-containers structural conformance","path":"Generated/BareContainers/StructuralConformance.hs"}+module-role {"family":"BehaviorSourceMap","kind":"generated","ownerKind":"context","ownerName":"context bare-containers behavior source map","path":"Generated/BareContainers/BehaviorSourceMap.hs"}+module-role {"family":"BareEnvelope","kind":"generated","ownerKind":"mapped","ownerName":"mapped structural BareEnvelope (line 43)","path":"Generated/BareContainers/Structural/Shape/BareEnvelope.hs"}+module-role {"family":"MaybeText","kind":"generated","ownerKind":"mapped","ownerName":"mapped structural MaybeText (line 6)","path":"Generated/BareContainers/Structural/Shape/MaybeText.hs"}+module-role {"family":"NestedIds","kind":"generated","ownerKind":"mapped","ownerName":"mapped structural NestedIds (line 34)","path":"Generated/BareContainers/Structural/Shape/NestedIds.hs"}+module-role {"family":"TextList","kind":"generated","ownerKind":"mapped","ownerName":"mapped structural TextList (line 16)","path":"Generated/BareContainers/Structural/Shape/TextList.hs"}+module-role {"family":"TextMap","kind":"generated","ownerKind":"mapped","ownerName":"mapped structural TextMap (line 25)","path":"Generated/BareContainers/Structural/Shape/TextMap.hs"}+module-role {"family":"Nominals","kind":"generated","ownerKind":"context","ownerName":"context bare-containers generated nominal declarations","path":"Generated/BareContainers/Nominals.hs"}+module-role {"family":"Internal","kind":"generated","ownerKind":"context","ownerName":"context bare-containers generated nominal ID internals","path":"Generated/BareContainers/Nominals/Internal.hs"}+module-role {"family":"NominalLeaves","kind":"generated","ownerKind":"context","ownerName":"context bare-containers structural nominal leaves","path":"Generated/BareContainers/Structural/NominalLeaves.hs"}+module-role {"family":"Bindings","kind":"hole","ownerKind":"consumer","ownerName":"consumer binding skeleton Conformance.BareContainers.Bindings","path":"Conformance/BareContainers/Bindings.hs"}+module-role {"family":"ReplayAudit","kind":"generated","ownerKind":"context","ownerName":"context bare-containers replay-audit assembly","path":"Generated/BareContainers/ReplayAudit.hs"}+module-role {"family":"ProjectionCatalog","kind":"generated","ownerKind":"projection-catalog","ownerName":"projection-catalog bare-containers","path":"Generated/BareContainers/ProjectionCatalog.hs"}+module-role {"family":"ProjectionCatalogHoles","kind":"hole","ownerKind":"projection-catalog","ownerName":"projection-catalog bare-containers","path":"BareContainers/ProjectionCatalog/ProjectionCatalogHoles.hs"}+module-role {"family":"Domain","kind":"generated","ownerKind":"aggregate","ownerName":"aggregate BareStore (line 57)","path":"Generated/BareContainers/BareStore/Domain.hs"}+module-role {"family":"Codec","kind":"generated","ownerKind":"aggregate","ownerName":"aggregate BareStore (line 57)","path":"Generated/BareContainers/BareStore/Codec.hs"}+module-role {"family":"Transducer","kind":"generated","ownerKind":"aggregate","ownerName":"aggregate BareStore (line 57)","path":"Generated/BareContainers/BareStore/Transducer.hs"}+module-role {"family":"BehaviorContract","kind":"generated","ownerKind":"aggregate","ownerName":"aggregate BareStore (line 57)","path":"Generated/BareContainers/BareStore/BehaviorContract.hs"}+module-role {"family":"BehaviorHoles","kind":"hole","ownerKind":"aggregate","ownerName":"aggregate behavior witnesses BareStore (line 57)","path":"BareContainers/BareStore/BehaviorHoles.hs"}+module-role {"family":"EventStream","kind":"generated","ownerKind":"aggregate","ownerName":"aggregate BareStore (line 57)","path":"Generated/BareContainers/BareStore/EventStream.hs"}+module-role {"family":"Projection","kind":"generated","ownerKind":"aggregate","ownerName":"aggregate BareStore (line 57)","path":"Generated/BareContainers/BareStore/Projection.hs"}+module-role {"family":"Harness","kind":"generated","ownerKind":"aggregate","ownerName":"aggregate BareStore (line 57)","path":"Generated/BareContainers/BareStore/Harness.hs"}+module-role {"family":"Queue","kind":"generated","ownerKind":"workqueue","ownerName":"workqueue bare_jobs (line 74)","path":"Generated/BareContainers/BareJobs/Queue.hs"}+module-role {"family":"QueuePolicy","kind":"generated","ownerKind":"workqueue","ownerName":"workqueue bare_jobs (line 74)","path":"Generated/BareContainers/BareJobs/QueuePolicy.hs"}+module-role {"family":"QueueCodec","kind":"generated","ownerKind":"workqueue","ownerName":"workqueue bare_jobs (line 74)","path":"Generated/BareContainers/BareJobs/QueueCodec.hs"}+module-role {"family":"ReadModelTable","kind":"generated","ownerKind":"readmodel","ownerName":"readmodel bare_lookup (line 115)","path":"Generated/BareContainers/BareLookup/ReadModelTable.hs"}+module-role {"family":"QueryContract","kind":"generated","ownerKind":"readmodel","ownerName":"readmodel bare_lookup (line 115)","path":"Generated/BareContainers/BareLookup/QueryContract.hs"}+module-role {"family":"ReadModel","kind":"generated","ownerKind":"readmodel","ownerName":"readmodel bare_lookup (line 115)","path":"Generated/BareContainers/BareLookup/ReadModel.hs"}+module-role {"family":"ReadModelHoles","kind":"hole","ownerKind":"readmodel","ownerName":"readmodel bare_lookup (line 115)","path":"BareContainers/BareLookup/ReadModelHoles.hs"}+module-role {"family":"ReadModelHarness","kind":"generated","ownerKind":"readmodel","ownerName":"readmodel bare_lookup (line 115)","path":"Generated/BareContainers/BareLookup/ReadModelHarness.hs"}+generated Generated/BareContainers/StructuralConformance.hs+generated Generated/BareContainers/BehaviorSourceMap.hs+generated Generated/BareContainers/Structural/Shape/BareEnvelope.hs+generated Generated/BareContainers/Structural/Shape/MaybeText.hs+generated Generated/BareContainers/Structural/Shape/NestedIds.hs+generated Generated/BareContainers/Structural/Shape/TextList.hs+generated Generated/BareContainers/Structural/Shape/TextMap.hs+generated Generated/BareContainers/Nominals.hs+generated Generated/BareContainers/Nominals/Internal.hs+generated Generated/BareContainers/Structural/NominalLeaves.hs+hole Conformance/BareContainers/Bindings.hs+generated Generated/BareContainers/ReplayAudit.hs+generated Generated/BareContainers/ProjectionCatalog.hs+hole BareContainers/ProjectionCatalog/ProjectionCatalogHoles.hs+generated Generated/BareContainers/BareStore/Domain.hs+generated Generated/BareContainers/BareStore/Codec.hs+generated Generated/BareContainers/BareStore/Transducer.hs+generated Generated/BareContainers/BareStore/BehaviorContract.hs+hole BareContainers/BareStore/BehaviorHoles.hs+generated Generated/BareContainers/BareStore/EventStream.hs+generated Generated/BareContainers/BareStore/Projection.hs+generated Generated/BareContainers/BareStore/Harness.hs+generated Generated/BareContainers/BareJobs/Queue.hs+generated Generated/BareContainers/BareJobs/QueuePolicy.hs+generated Generated/BareContainers/BareJobs/QueueCodec.hs+generated Generated/BareContainers/BareLookup/ReadModelTable.hs+generated Generated/BareContainers/BareLookup/QueryContract.hs+generated Generated/BareContainers/BareLookup/ReadModel.hs+hole BareContainers/BareLookup/ReadModelHoles.hs+generated Generated/BareContainers/BareLookup/ReadModelHarness.hs+mapping {"bindingSymbol":"Conformance.BareContainers.Bindings.bareEnvelopeBinding","bindingVersion":"1","canonicalType":"conformance.bare-containers.BareEnvelope.v1","mode":"structural","module":"Conformance.BareContainers.Domain","package":"keiro-dsl","schema":1,"specName":"BareEnvelope","type":"BareEnvelope"}+mapping {"bindingSymbol":"Conformance.BareContainers.Bindings.maybeTextBinding","bindingVersion":"1","canonicalType":"conformance.bare-containers.MaybeText.v1","mode":"structural","module":"Conformance.BareContainers.Domain","package":"keiro-dsl","schema":1,"specName":"MaybeText","type":"MaybeText"}+mapping {"bindingSymbol":"Conformance.BareContainers.Bindings.nestedIdsBinding","bindingVersion":"1","canonicalType":"conformance.bare-containers.NestedIds.v1","mode":"structural","module":"Conformance.BareContainers.Domain","package":"keiro-dsl","schema":1,"specName":"NestedIds","type":"NestedIds"}+mapping {"bindingSymbol":"Conformance.BareContainers.Bindings.textListBinding","bindingVersion":"1","canonicalType":"conformance.bare-containers.TextList.v1","mode":"structural","module":"Conformance.BareContainers.Domain","package":"keiro-dsl","schema":1,"specName":"TextList","type":"TextList"}+mapping {"bindingSymbol":"Conformance.BareContainers.Bindings.textMapBinding","bindingVersion":"1","canonicalType":"conformance.bare-containers.TextMap.v1","mode":"structural","module":"Conformance.BareContainers.Domain","package":"keiro-dsl","schema":1,"specName":"TextMap","type":"TextMap"}+id-domain id-domain|name=ItemId|contract=keiro-dsl/id-domain/typeid-v7/1|prefix=item|separator=_|json=canonical-json-text+nominal-equality nominal-equality|name=ItemId|contract=keiro-dsl/nominal-equality/2|key=Text|domain=typeid-v7-text:item:keiro-dsl/id-domain/typeid-v7/1|owner=generated+binding {"kind":"binding","mappedName":"BareEnvelope","module":"Conformance.BareContainers.Bindings","path":"attributes","schema":1,"signature":"bareEnvelopeBinding.attributes :: TextMap","symbol":"bareEnvelopeBinding"}+binding {"kind":"binding","mappedName":"BareEnvelope","module":"Conformance.BareContainers.Bindings","path":"labels","schema":1,"signature":"bareEnvelopeBinding.labels :: TextList","symbol":"bareEnvelopeBinding"}+binding {"kind":"binding","mappedName":"BareEnvelope","module":"Conformance.BareContainers.Bindings","path":"nestedIds","schema":1,"signature":"bareEnvelopeBinding.nestedIds :: NestedIds","symbol":"bareEnvelopeBinding"}+binding {"kind":"binding","mappedName":"BareEnvelope","module":"Conformance.BareContainers.Bindings","path":"optionalLabel","schema":1,"signature":"bareEnvelopeBinding.optionalLabel :: MaybeText","symbol":"bareEnvelopeBinding"}+binding {"kind":"fixtures","mappedName":"BareEnvelope","module":"Conformance.BareContainers.Bindings","path":null,"schema":1,"signature":"bareEnvelopeFixtures :: FixtureCases Conformance.BareContainers.Domain.BareEnvelope","symbol":"bareEnvelopeFixtures"}+binding {"kind":"binding","mappedName":"MaybeText","module":"Conformance.BareContainers.Bindings","path":"value","schema":1,"signature":"maybeTextBinding.value :: Maybe (Text)","symbol":"maybeTextBinding"}+binding {"kind":"fixtures","mappedName":"MaybeText","module":"Conformance.BareContainers.Bindings","path":null,"schema":1,"signature":"maybeTextFixtures :: FixtureCases Conformance.BareContainers.Domain.MaybeText","symbol":"maybeTextFixtures"}+binding {"kind":"initial-value","mappedName":"MaybeText","module":"Conformance.BareContainers.Bindings","path":null,"schema":1,"signature":"initialMaybeText :: Conformance.BareContainers.Domain.MaybeText","symbol":"initialMaybeText"}+binding {"kind":"binding","mappedName":"NestedIds","module":"Conformance.BareContainers.Bindings","path":"value","schema":1,"signature":"nestedIdsBinding.value :: [Maybe (ItemId)]","symbol":"nestedIdsBinding"}+binding {"kind":"fixtures","mappedName":"NestedIds","module":"Conformance.BareContainers.Bindings","path":null,"schema":1,"signature":"nestedIdsFixtures :: FixtureCases Conformance.BareContainers.Domain.NestedIds","symbol":"nestedIdsFixtures"}+binding {"kind":"binding","mappedName":"TextList","module":"Conformance.BareContainers.Bindings","path":"value","schema":1,"signature":"textListBinding.value :: [Text]","symbol":"textListBinding"}+binding {"kind":"fixtures","mappedName":"TextList","module":"Conformance.BareContainers.Bindings","path":null,"schema":1,"signature":"textListFixtures :: FixtureCases Conformance.BareContainers.Domain.TextList","symbol":"textListFixtures"}+binding {"kind":"binding","mappedName":"TextMap","module":"Conformance.BareContainers.Bindings","path":"value","schema":1,"signature":"textMapBinding.value :: Map Text (Text)","symbol":"textMapBinding"}+binding {"kind":"fixtures","mappedName":"TextMap","module":"Conformance.BareContainers.Bindings","path":null,"schema":1,"signature":"textMapFixtures :: FixtureCases Conformance.BareContainers.Domain.TextMap","symbol":"textMapFixtures"}+behavior {"aggregate":"BareStore","command":"Store","evidence":"generated-authoritative","key":"behavior-v1-b3fa753a88b62d6d","kind":"live-transition","outputs":[{"command":"Store","ownership":"generated-command-identity"}],"source":"Empty"}+behavior {"aggregate":"BareStore","command":"Store","evidence":"generated-authoritative","key":"behavior-v1-b728b85baa41bc71","kind":"required-rejection","outputs":[],"source":"Stored"}+projection-catalog-fact cursor|bare_lookup|bare-writer|115+projection-catalog-fact delivery|bare_writer|subscription|103+projection-catalog-fact freshness|bare_lookup|wait-for-head:entire-log|115+projection-catalog-fact group|bare_rebuild|bare_table|bare_table|98+projection-catalog-fact owner|bare_writer|all|bare_rebuild|bare_table|10|bare-writer|bare-writer-v1|from-beginning|explicit|103+projection-catalog-fact query|bare_lookup|bare_rebuild|bare_table|bare_table|115+projection-catalog-fact supply|bare_lookup|bare_writer|bare_rebuild|bare_table|115|103+projection-catalog-fact target|bare_table|public|bare_values|clear||92+query-contract-baseline v1+query-contract {"mappedDependencies":["MaybeText"],"position":"input","readModel":"bare_lookup","typeExpression":"MaybeText"}+query-contract {"mappedDependencies":["TextList"],"position":"result","readModel":"bare_lookup","typeExpression":"List TextList"}+semantic-impact {"declarations":[{"consequences":[{"consumer":"BareStore","kind":"consumer-build"},{"aggregate":"BareStore","kind":"private-event-history"}],"consumerEvidence":[{"consumer":"BareStore","operation":null,"path":"BareStore command Store .envelope : BareEnvelope","surface":"aggregate-command"},{"consumer":"BareStore","operation":null,"path":"BareStore event StoredValue .envelope : BareEnvelope","surface":"private-event-payload"}],"consumers":["BareStore"],"declaration":"BareEnvelope","identity":"structural\u001fkeiro-dsl:Conformance.BareContainers.Domain:BareEnvelope\u001fConformance.BareContainers.Bindings.bareEnvelopeBinding\u001f1\u001fconformance.bare-containers.BareEnvelope.v1\u001fConformance.BareContainers.Bindings.bareEnvelopeFixtures\u001f\u001fb421af79f12c9602\u001frecord:BareEnvelope:attributes=attributes,labels=labels,nestedIds=nestedIds,optionalLabel=optionalLabel"},{"consequences":[{"consumer":"BareStore","kind":"consumer-build"},{"consumer":"workqueue:bare_jobs","kind":"consumer-build"},{"consumer":"read-model-query:bare_lookup:input","kind":"consumer-build"},{"aggregate":"BareStore","kind":"private-event-history"},{"aggregate":"BareStore","kind":"snapshot-hydration"},{"kind":"workqueue-history","workqueue":"bare_jobs"},{"kind":"query-api","position":"input","readModel":"bare_lookup"}],"consumerEvidence":[{"consumer":"BareStore","operation":null,"path":"BareStore command Store .envelope : BareEnvelope .optionalLabel : MaybeText","surface":"aggregate-command"},{"consumer":"BareStore","operation":null,"path":"BareStore command Store .optionalLabel : MaybeText","surface":"aggregate-command"},{"consumer":"BareStore","operation":null,"path":"BareStore event StoredValue .envelope : BareEnvelope .optionalLabel : MaybeText","surface":"private-event-payload"},{"consumer":"BareStore","operation":null,"path":"BareStore event StoredValue .optionalLabel : MaybeText","surface":"private-event-payload"},{"consumer":"BareStore","operation":null,"path":"BareStore register current : MaybeText","surface":"snapshot-register"},{"consumer":"workqueue:bare_jobs","operation":null,"path":"workqueue bare_jobs payload .optionalLabel : MaybeText","surface":"workqueue-payload"},{"consumer":"read-model-query:bare_lookup:input","operation":null,"path":"readmodel bare_lookup query input : MaybeText","surface":"read-model-query-input"}],"consumers":["BareStore","workqueue:bare_jobs","read-model-query:bare_lookup:input"],"declaration":"MaybeText","identity":"structural\u001fkeiro-dsl:Conformance.BareContainers.Domain:MaybeText\u001fConformance.BareContainers.Bindings.maybeTextBinding\u001f1\u001fconformance.bare-containers.MaybeText.v1\u001fConformance.BareContainers.Bindings.maybeTextFixtures\u001fConformance.BareContainers.Bindings.initialMaybeText\u001fc289b01d5d2741d7\u001fvalue:Optional(Text)"},{"consequences":[{"consumer":"BareStore","kind":"consumer-build"},{"aggregate":"BareStore","kind":"private-event-history"}],"consumerEvidence":[{"consumer":"BareStore","operation":null,"path":"BareStore command Store .envelope : BareEnvelope .nestedIds : NestedIds","surface":"aggregate-command"},{"consumer":"BareStore","operation":null,"path":"BareStore event StoredValue .envelope : BareEnvelope .nestedIds : NestedIds","surface":"private-event-payload"}],"consumers":["BareStore"],"declaration":"NestedIds","identity":"structural\u001fkeiro-dsl:Conformance.BareContainers.Domain:NestedIds\u001fConformance.BareContainers.Bindings.nestedIdsBinding\u001f1\u001fconformance.bare-containers.NestedIds.v1\u001fConformance.BareContainers.Bindings.nestedIdsFixtures\u001f\u001fe77f742023c9baac\u001fvalue:List(Optional(Nominal(ItemId)))"},{"consequences":[{"consumer":"BareStore","kind":"consumer-build"},{"consumer":"workqueue:bare_jobs","kind":"consumer-build"},{"consumer":"read-model-query:bare_lookup:result","kind":"consumer-build"},{"aggregate":"BareStore","kind":"private-event-history"},{"kind":"workqueue-history","workqueue":"bare_jobs"},{"kind":"query-api","position":"result","readModel":"bare_lookup"}],"consumerEvidence":[{"consumer":"BareStore","operation":null,"path":"BareStore command Store .envelope : BareEnvelope .labels : TextList","surface":"aggregate-command"},{"consumer":"BareStore","operation":null,"path":"BareStore command Store .labels : TextList","surface":"aggregate-command"},{"consumer":"BareStore","operation":null,"path":"BareStore event StoredValue .envelope : BareEnvelope .labels : TextList","surface":"private-event-payload"},{"consumer":"BareStore","operation":null,"path":"BareStore event StoredValue .labels : TextList","surface":"private-event-payload"},{"consumer":"workqueue:bare_jobs","operation":null,"path":"workqueue bare_jobs payload .labels : TextList","surface":"workqueue-payload"},{"consumer":"read-model-query:bare_lookup:result","operation":null,"path":"readmodel bare_lookup query result : TextList []","surface":"read-model-query-result"}],"consumers":["BareStore","workqueue:bare_jobs","read-model-query:bare_lookup:result"],"declaration":"TextList","identity":"structural\u001fkeiro-dsl:Conformance.BareContainers.Domain:TextList\u001fConformance.BareContainers.Bindings.textListBinding\u001f1\u001fconformance.bare-containers.TextList.v1\u001fConformance.BareContainers.Bindings.textListFixtures\u001f\u001fab685a6d705cec6f\u001fvalue:List(Text)"},{"consequences":[{"consumer":"BareStore","kind":"consumer-build"},{"aggregate":"BareStore","kind":"private-event-history"}],"consumerEvidence":[{"consumer":"BareStore","operation":null,"path":"BareStore command Store .attributes : TextMap","surface":"aggregate-command"},{"consumer":"BareStore","operation":null,"path":"BareStore command Store .envelope : BareEnvelope .attributes : TextMap","surface":"aggregate-command"},{"consumer":"BareStore","operation":null,"path":"BareStore event StoredValue .attributes : TextMap","surface":"private-event-payload"},{"consumer":"BareStore","operation":null,"path":"BareStore event StoredValue .envelope : BareEnvelope .attributes : TextMap","surface":"private-event-payload"}],"consumers":["BareStore"],"declaration":"TextMap","identity":"structural\u001fkeiro-dsl:Conformance.BareContainers.Domain:TextMap\u001fConformance.BareContainers.Bindings.textMapBinding\u001f1\u001fconformance.bare-containers.TextMap.v1\u001fConformance.BareContainers.Bindings.textMapFixtures\u001f\u001fd0faf271bc72da1f\u001fvalue:Map(Text)"}],"mappedSurfaceEvidenceVersion":1,"serviceInventory":["BareEnvelope","MaybeText","NestedIds","TextList","TextMap"]}
test/conformance-baseline.json view
@@ -30,6 +30,12 @@     {"component": "keiro-dsl-conformance-workspace-nominals", "directory": "test/conformance-workspace-nominals", "source": "test/fixtures/workspace-nominals/service.keiro-workspace", "generation": "workspace", "role": "candidate-primary", "languageVersion": 6, "reason": "candidate Language 6 cross-member structural nominal ownership proof"},     {"component": "keiro-dsl-conformance-structural", "directory": "test/conformance-structural", "source": "test/fixtures/structural-conformance.keiro", "generation": "source", "role": "published-compatibility", "languageVersion": 4, "reason": "published Language 4 structural mapping proof"},     {"component": "keiro-dsl-conformance-structural-nominals", "directory": "test/conformance-structural-nominals", "source": "test/fixtures/structural-nominal-leaves.keiro", "generation": "source", "role": "candidate-primary", "languageVersion": 6, "reason": "candidate Language 6 structural nominal admission proof"},+    {"component": "keiro-dsl-conformance-id-admission-domains", "directory": "test/conformance-id-admission-domains", "source": "test/fixtures/id-admission-domains.keiro", "generation": "source", "role": "candidate-primary", "languageVersion": 6, "reason": "candidate Language 6 explicit UUIDv5-or-v7 admission across aggregate, structural, keyed-map, queue, and contract boundaries"},+    {"component": "keiro-dsl-conformance-checked-mapping-replay", "directory": "test/conformance-checked-mapping-replay", "source": "test/fixtures/checked-mapping-replay-workspace/service.keiro-workspace", "generation": "workspace", "role": "candidate-primary", "languageVersion": 6, "reason": "candidate Language 6 integrated retained-history proof for checked dates, text sets, base16 bytes, UUIDv5-or-v7 identities, consumer bindings, aggregate replay, workflow journals, and process recovery observations"},+    {"component": "keiro-dsl-conformance-bare-containers", "directory": "test/conformance-bare-containers", "source": "test/fixtures/bare-containers.keiro", "generation": "source", "role": "candidate-primary", "languageVersion": 6, "reason": "candidate Language 6 direct optional, list, text-map, nested nominal, replay, and historical-codec parity proof"},+    {"component": "keiro-dsl-conformance-calendar-days", "directory": "test/conformance-calendar-days", "source": "test/fixtures/calendar-days.keiro", "generation": "source", "role": "candidate-primary", "languageVersion": 6, "reason": "candidate Language 6 full-carrier calendar-day codec, generated surface, replay, and historical normalization proof"},+    {"component": "keiro-dsl-conformance-refined-base16", "directory": "test/conformance-refined-base16", "source": "test/fixtures/refined-base16.keiro", "generation": "source", "role": "candidate-primary", "languageVersion": 6, "reason": "candidate Language 6 checked base16-byte refinement, generated surface, replay, and historical codec parity proof"},+    {"component": "keiro-dsl-conformance-structural-text-sets", "directory": "test/conformance-structural-text-sets", "source": "test/fixtures/structural-text-sets.keiro", "generation": "source", "role": "candidate-primary", "languageVersion": 6, "reason": "candidate Language 6 structural text-set codec, normalization, generated surface, and strict replay proof"},     {"component": "keiro-dsl-conformance-mapped-queue", "directory": "test/conformance-mapped-queue", "source": "test/fixtures/mapped-workqueue.keiro", "generation": "source", "role": "stable-primary", "languageVersion": 5, "reason": "stable mapped workqueue structural, opaque, required-nullable, and schema-version-1 envelope proof"},     {"component": "keiro-dsl-conformance-mapped-readmodel", "directory": "test/conformance-mapped-readmodel", "source": "test/fixtures/mapped-readmodel.keiro", "generation": "source", "role": "stable-primary", "languageVersion": 5, "reason": "stable mapped read-model query contract, workspace provenance, and projection catalog proof"},     {"component": "keiro-dsl-conformance-codec-compare", "directory": "test/conformance-codec-compare", "source": null, "generation": "none", "role": "version-independent", "reason": "codec comparison helper proof has no source-language fixture"},
test/conformance-behavior-complete/Generated/BehaviorComplete/BehaviorSourceMap.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from context behavior-complete behavior source map; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from context behavior-complete behavior source map; do not edit. module Generated.BehaviorComplete.BehaviorSourceMap   ( BehaviorSourceLocation (..)   , behaviorSourceLocation
test/conformance-behavior-complete/Generated/BehaviorComplete/Journey/BehaviorContract.hs view
@@ -1,5 +1,5 @@ {-# LANGUAGE OverloadedLabels #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate Journey; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate Journey; do not edit. module Generated.BehaviorComplete.Journey.BehaviorContract   ( BehaviorKey (..)   , unBehaviorKey
test/conformance-behavior-complete/Generated/BehaviorComplete/Journey/Codec.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate Journey; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate Journey; do not edit. module Generated.BehaviorComplete.Journey.Codec (     journeyCodec,     parseJourneyEvent,
test/conformance-behavior-complete/Generated/BehaviorComplete/Journey/Domain.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE TemplateHaskell #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate Journey; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate Journey; do not edit. module Generated.BehaviorComplete.Journey.Domain where  import Data.Aeson (FromJSON, ToJSON)
test/conformance-behavior-complete/Generated/BehaviorComplete/Journey/EventStream.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate Journey; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate Journey; do not edit. module Generated.BehaviorComplete.Journey.EventStream   ( journeyCategory   , journeyCommandCategory
test/conformance-behavior-complete/Generated/BehaviorComplete/Journey/Harness.hs view
@@ -1,5 +1,5 @@ {-# LANGUAGE OverloadedLabels #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate Journey; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate Journey; do not edit. module Generated.BehaviorComplete.Journey.Harness (harnessAssertions) where  import Generated.BehaviorComplete.Journey.Domain
test/conformance-behavior-complete/Generated/BehaviorComplete/Journey/Projection.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate Journey; do not edit.+-- @generated by keiro-dsl 0.18.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.
test/conformance-behavior-complete/Generated/BehaviorComplete/Journey/Transducer.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE BlockArguments #-} {-# LANGUAGE QualifiedDo #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate Journey; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate Journey; do not edit. module Generated.BehaviorComplete.Journey.Transducer   ( journeyTransducer   , journeyFoldFingerprint
test/conformance-behavior-complete/Generated/BehaviorComplete/Nominals.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from context behavior-complete generated nominal declarations; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from context behavior-complete generated nominal declarations; do not edit. module Generated.BehaviorComplete.Nominals   ( RequestId   , parseRequestId
test/conformance-behavior-complete/Generated/BehaviorComplete/Nominals/Internal.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from context behavior-complete generated nominal ID internals; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from context behavior-complete generated nominal ID internals; do not edit. module Generated.BehaviorComplete.Nominals.Internal   ( RequestId   , parseRequestId
test/conformance-behavior-complete/Generated/BehaviorComplete/ReplayAudit.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from context behavior-complete replay-audit assembly; do not edit.+-- @generated by keiro-dsl 0.18.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;
test/conformance-behavior-complete/Generated/BehaviorComplete/Structural/Shape/StartPayload.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from mapped structural StartPayload; do not edit.+-- @generated by keiro-dsl 0.18.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)
test/conformance-behavior-complete/Generated/BehaviorComplete/StructuralConformance.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from context behavior-complete structural conformance; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from context behavior-complete structural conformance; do not edit. module Generated.BehaviorComplete.StructuralConformance   ( structuralConformanceAssertions   ) where
test/conformance-behavior-complete/Generated/BehaviorComplete/StructuralProjections.hs view
@@ -1,5 +1,5 @@ {-# LANGUAGE TypeFamilies #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from context behavior-complete mapped structural facade; do not edit.+-- @generated by keiro-dsl 0.18.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.
+ test/conformance-calendar-days/CalendarDays/CalendarLookup/ReadModelHoles.hs view
@@ -0,0 +1,14 @@+-- This is a HAND-OWNED hole module. keiro-dsl creates it once and never overwrites it.+module CalendarDays.CalendarLookup.ReadModelHoles+  ( calendarLookupQuery+  ) where++import Generated.CalendarDays.CalendarLookup.ReadModelTable (calendarLookupQualifiedTable)+import Generated.CalendarDays.CalendarLookup.QueryContract (CalendarLookupQueryInput, CalendarLookupQueryResult)+import Hasql.Transaction qualified as Tx++-- HOLE: query "public"."calendar_values" via calendarLookupQualifiedTable; never rely on search_path.+-- The generated QueryContract owns query input/result type identity.+-- Declared columns:+calendarLookupQuery :: CalendarLookupQueryInput -> Tx.Transaction CalendarLookupQueryResult+calendarLookupQuery _input = calendarLookupQualifiedTable `seq` error "HOLE: fill calendar_lookup query"
+ test/conformance-calendar-days/CalendarDays/CalendarStore/BehaviorHoles.hs view
@@ -0,0 +1,10 @@+-- Consumer-owned behavioral witnesses. Created once; never overwritten.+module CalendarDays.CalendarStore.BehaviorHoles (behaviorWitnesses) where++import Generated.CalendarDays.CalendarStore.BehaviorContract++behaviorWitnesses :: [BehaviorWitness]+behaviorWitnesses =+  [ Pending (BehaviorKey "behavior-v1-81c1074e5cad73be") -- CalendarStoreStored x StoreDate: required rejection+  , Pending (BehaviorKey "behavior-v1-8a6ce5ac60391741") -- CalendarStoreEmpty x StoreDate: live transition+  ]
+ test/conformance-calendar-days/CalendarDays/ProjectionCatalog/ProjectionCatalogHoles.hs view
@@ -0,0 +1,23 @@+-- This is a HAND-OWNED hole module. keiro-dsl creates it once and never overwrites it.+module CalendarDays.ProjectionCatalog.ProjectionCatalogHoles+  ( CalendarWriterEvent (..)+  , applyCalendarWriterLive+  , calendarWriterIdempotencyKey+  , applyCalendarWriterReplay+  , decodeCalendarWriterReplay+  ) where++import Hasql.Transaction qualified as Tx+import Keiro.Projection.Catalog qualified as Catalog+import Kiroku.Store.Types (EventId, RecordedEvent)++-- Projection owner calendar_writer (order 10).+data CalendarWriterEvent = CalendarWriterEvent+applyCalendarWriterLive :: RecordedEvent -> Tx.Transaction ()+applyCalendarWriterLive = error "HOLE: fill calendar_writer live apply"+calendarWriterIdempotencyKey :: RecordedEvent -> EventId+calendarWriterIdempotencyKey = error "HOLE: return the durable event id for calendar_writer"+decodeCalendarWriterReplay :: RecordedEvent -> Catalog.ReplayDecodeResult CalendarWriterEvent+decodeCalendarWriterReplay = error "HOLE: classify and decode every calendar_writer source event"+applyCalendarWriterReplay :: CalendarWriterEvent -> RecordedEvent -> Tx.Transaction ()+applyCalendarWriterReplay = error "HOLE: fill calendar_writer replay apply without live-only side effects"
+ test/conformance-calendar-days/Conformance/CalendarDays/Bindings.hs view
@@ -0,0 +1,115 @@+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE LambdaCase #-}++-- This is a HAND-OWNED consumer binding skeleton. keiro-dsl creates it once+-- and never overwrites it. Fill each HOLE and run the generated harness.+module Conformance.CalendarDays.Bindings (+    maybeLocalDayFixtures+  , maybeLocalDayBinding+  , initialLocalDay+  , localDayFixtures+  , localDayBinding+  , calendarEnvelopeFixtures+  , calendarEnvelopeBinding+) where++import Conformance.CalendarDays.Domain (CalendarEnvelope, LocalDay, MaybeLocalDay)+import Conformance.CalendarDays.Domain qualified as Domain+import Generated.CalendarDays.Structural.Shape.CalendarEnvelope qualified as ShapeCalendarEnvelope+import Generated.CalendarDays.Structural.Shape.LocalDay qualified as ShapeLocalDay+import Generated.CalendarDays.Structural.Shape.MaybeLocalDay qualified as ShapeMaybeLocalDay+import Data.List.NonEmpty (NonEmpty (..))+import Data.Map.Strict qualified as Map+import Data.Time.Calendar (fromGregorian)+import Keiro.Codec.Structural (FixtureCases (..), StructuralBinding (..))++-- HOLE: provide deterministic labelled conformance fixtures for MaybeLocalDay+maybeLocalDayFixtures :: FixtureCases MaybeLocalDay+maybeLocalDayFixtures =+  FixtureCases+    ( ("absent", Domain.MaybeLocalDay Nothing)+        :| [ ("leap-day", Domain.MaybeLocalDay (Just (fromGregorian 2000 2 29))),+             ("year-zero", Domain.MaybeLocalDay (Just (fromGregorian 0 1 1)))+           ]+    )++-- HOLE: complete both total directions; wire policy remains in the generated codec.+maybeLocalDayBinding :: StructuralBinding MaybeLocalDay ShapeMaybeLocalDay.MaybeLocalDayShape+maybeLocalDayBinding =+  StructuralBinding+    { bindingToShape = \case+      Domain.MaybeLocalDay value -> value+    , bindingFromShape = \case+      value -> Domain.MaybeLocalDay value+    }++-- HOLE: provide the initial register value for LocalDay+initialLocalDay :: LocalDay+initialLocalDay = Domain.LocalDay (fromGregorian 1970 1 1)++-- HOLE: provide deterministic labelled conformance fixtures for LocalDay+localDayFixtures :: FixtureCases LocalDay+localDayFixtures =+  FixtureCases+    ( ("epoch", initialLocalDay)+        :| [ ("leap-day", Domain.LocalDay (fromGregorian 2000 2 29)),+             ("year-zero", Domain.LocalDay (fromGregorian 0 12 31)),+             ("negative-year", Domain.LocalDay (fromGregorian (-1) 1 1)),+             ("extended-year", Domain.LocalDay (fromGregorian 12345678901234567890 6 30))+           ]+    )++-- HOLE: complete both total directions; wire policy remains in the generated codec.+localDayBinding :: StructuralBinding LocalDay ShapeLocalDay.LocalDayShape+localDayBinding =+  StructuralBinding+    { bindingToShape = \case+      Domain.LocalDay value -> value+    , bindingFromShape = \case+      value -> Domain.LocalDay value+    }++-- HOLE: provide deterministic labelled conformance fixtures for CalendarEnvelope+calendarEnvelopeFixtures :: FixtureCases CalendarEnvelope+calendarEnvelopeFixtures =+  FixtureCases+    ( ( "absent-optional",+        Domain.CalendarEnvelope+          (fromGregorian 2000 2 29)+          Nothing+          (Domain.MaybeLocalDay Nothing)+          [fromGregorian 1900 2 28, fromGregorian 1900 3 1]+          (Map.fromList [("year-zero", fromGregorian 0 1 1)])+      )+        :| [ ( "complete-carrier",+               Domain.CalendarEnvelope+                 (fromGregorian (-12345) 12 31)+                 (Just (fromGregorian 12345678901234567890 6 30))+                 (Domain.MaybeLocalDay (Just (fromGregorian 2026 1 31)))+                 [fromGregorian 2026 1 31, fromGregorian 2026 2 1]+                 (Map.fromList [("leap", fromGregorian 2000 2 29)])+             )+           ]+    )++-- HOLE: complete both total directions; wire policy remains in the generated codec.+calendarEnvelopeBinding :: StructuralBinding CalendarEnvelope ShapeCalendarEnvelope.CalendarEnvelopeShape+calendarEnvelopeBinding =+  StructuralBinding+    { bindingToShape = \case+      Domain.CalendarEnvelope primaryValue optionalDayValue namedOptionalValue sequenceValue labelledValue ->+        ShapeCalendarEnvelope.CalendarEnvelope+          primaryValue+          optionalDayValue+          (bindingToShape maybeLocalDayBinding namedOptionalValue)+          sequenceValue+          labelledValue+    , bindingFromShape = \case+      ShapeCalendarEnvelope.CalendarEnvelope primaryValue optionalDayValue namedOptionalValue sequenceValue labelledValue ->+        Domain.CalendarEnvelope+          primaryValue+          optionalDayValue+          (bindingFromShape maybeLocalDayBinding namedOptionalValue)+          sequenceValue+          labelledValue+    }
+ test/conformance-calendar-days/Conformance/CalendarDays/Domain.hs view
@@ -0,0 +1,43 @@+{-# LANGUAGE DeriveAnyClass #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}++module Conformance.CalendarDays.Domain where++import Data.Aeson (FromJSON, ToJSON)+import Data.Map.Strict (Map)+import Data.Proxy (Proxy)+import Data.Text (Text)+import Data.Time.Calendar (Day)+import GHC.Generics (Generic)+import Keiki.Shape (CanonicalTypeName (..))++newtype LocalDay = LocalDay {unLocalDay :: Day}+  deriving stock (Eq, Generic, Show)+  deriving newtype (FromJSON, ToJSON)++instance CanonicalTypeName LocalDay where+  canonicalTypeName :: Proxy LocalDay -> Text+  canonicalTypeName _ = "conformance.calendar-days.LocalDay.v1"++newtype MaybeLocalDay = MaybeLocalDay {unMaybeLocalDay :: Maybe Day}+  deriving stock (Eq, Generic, Show)+  deriving newtype (FromJSON, ToJSON)++instance CanonicalTypeName MaybeLocalDay where+  canonicalTypeName :: Proxy MaybeLocalDay -> Text+  canonicalTypeName _ = "conformance.calendar-days.MaybeLocalDay.v1"++data CalendarEnvelope = CalendarEnvelope+  { primary :: !Day,+    optionalDay :: !(Maybe Day),+    namedOptional :: !MaybeLocalDay,+    sequence :: ![Day],+    labelled :: !(Map Text Day)+  }+  deriving stock (Eq, Generic, Show)+  deriving anyclass (FromJSON, ToJSON)++instance CanonicalTypeName CalendarEnvelope where+  canonicalTypeName :: Proxy CalendarEnvelope -> Text+  canonicalTypeName _ = "conformance.calendar-days.CalendarEnvelope.v1"
+ test/conformance-calendar-days/Conformance/CalendarDays/Historical.hs view
@@ -0,0 +1,31 @@+module Conformance.CalendarDays.Historical+  ( historicalLocalDayCodec,+    historicalMaybeLocalDayCodec,+  )+where++import Conformance.CalendarDays.Domain (LocalDay (..), MaybeLocalDay (..))+import Data.Aeson (parseJSON, toJSON)+import Data.Aeson.Types (parseEither)+import Data.Text qualified as T+import Keiro.Dsl.CodecCompare (HistoricalCodec (..))++-- These repository fixtures model the consumer's pre-adoption Aeson-derived+-- codecs. They are migration evidence, never a runtime fallback.+historicalLocalDayCodec :: HistoricalCodec LocalDay+historicalLocalDayCodec =+  HistoricalCodec+    { identity = "conformance.calendar-days.LocalDay.aeson-day",+      version = "aeson-2.2",+      encode = \(LocalDay value) -> toJSON value,+      decode = either (Left . T.pack) (Right . LocalDay) . parseEither parseJSON+    }++historicalMaybeLocalDayCodec :: HistoricalCodec MaybeLocalDay+historicalMaybeLocalDayCodec =+  HistoricalCodec+    { identity = "conformance.calendar-days.MaybeLocalDay.aeson-day",+      version = "aeson-2.2",+      encode = \(MaybeLocalDay value) -> toJSON value,+      decode = either (Left . T.pack) (Right . MaybeLocalDay) . parseEither parseJSON+    }
+ test/conformance-calendar-days/Generated/CalendarDays/BehaviorSourceMap.hs view
@@ -0,0 +1,30 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from context calendar-days behavior source map; do not edit.+module Generated.CalendarDays.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-81c1074e5cad73be" -> Just (BehaviorSourceLocation "keiro-dsl/test/fixtures/calendar-days.keiro" 41 16)+  "behavior-v1-8a6ce5ac60391741" -> Just (BehaviorSourceLocation "keiro-dsl/test/fixtures/calendar-days.keiro" 47 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
+ test/conformance-calendar-days/Generated/CalendarDays/CalendarJobs/Queue.hs view
@@ -0,0 +1,130 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from workqueue calendar_jobs; do not edit.+module Generated.CalendarDays.CalendarJobs.Queue+  ( CalendarJob (..)+  , encodeCalendarJob+  , parseCalendarJob+  , encodeCalendarEnvelopeMapped+  , decodeCalendarEnvelopeMapped+  , encodeLocalDayMapped+  , decodeLocalDayMapped+  , encodeMaybeLocalDayMapped+  , decodeMaybeLocalDayMapped+  , queuePhysical, queueDlq, queueTable++  ) where++import Control.Monad (unless)+import Data.Aeson (Value (..), object, parseJSON, toJSON, withObject, (.=))+import Data.Aeson.Key qualified as Key+import Data.Aeson.KeyMap qualified as KeyMap+import Data.Aeson.Types (Parser, JSONPathElement (..), (<?>), explicitParseField, parseEither)+import Data.Map.Strict (Map)+import Data.Map.Strict qualified as Map+import Data.Text (Text)+import qualified Data.Text as T+import Keiro.Codec.Structural (bindingFromShape, bindingToShape)+import Keiro.Codec.CalendarDay (encodeCalendarDay, parseCalendarDay)+import Conformance.CalendarDays.Bindings qualified as Bindings+import Conformance.CalendarDays.Domain (CalendarEnvelope, LocalDay, MaybeLocalDay)+import Generated.CalendarDays.Structural.Shape.CalendarEnvelope qualified as ShapeCalendarEnvelope+import Generated.CalendarDays.Structural.Shape.LocalDay qualified as ShapeLocalDay+import Generated.CalendarDays.Structural.Shape.MaybeLocalDay qualified as ShapeMaybeLocalDay++queuePhysical, queueDlq, queueTable :: Text+queuePhysical = "calendar_jobs"+queueDlq = "calendar_jobs_dlq"+queueTable = "pgmq.q_calendar_jobs"++data CalendarJob = CalendarJob+  { day :: !LocalDay+  , optionalDay :: !MaybeLocalDay+  , envelope :: !CalendarEnvelope+  }+  deriving stock (Eq, Show)++encodeCalendarEnvelopeMapped :: CalendarEnvelope -> Value+encodeCalendarEnvelopeMapped = encodeCalendarEnvelopeShape . bindingToShape Bindings.calendarEnvelopeBinding++parseCalendarEnvelopeMapped :: Value -> Parser CalendarEnvelope+parseCalendarEnvelopeMapped value = bindingFromShape Bindings.calendarEnvelopeBinding <$> parseCalendarEnvelopeShape value++decodeCalendarEnvelopeMapped :: Value -> Either Text CalendarEnvelope+decodeCalendarEnvelopeMapped = mapLeftText . parseEither parseCalendarEnvelopeMapped++encodeCalendarEnvelopeShape :: ShapeCalendarEnvelope.CalendarEnvelopeShape -> Value+encodeCalendarEnvelopeShape shape =+  object+      [ "primary" .= encodeCalendarDay (shape.primary)+      , "optionalDay" .= maybe Null (\item0 -> encodeCalendarDay (item0)) (shape.optionalDay)+      , "namedOptional" .= encodeMaybeLocalDayShape (shape.namedOptional)+      , "sequence" .= toJSON (map (\item0 -> encodeCalendarDay (item0)) (shape.sequence))+      , "labelled" .= toJSON (Map.map (\item0 -> encodeCalendarDay (item0)) (shape.labelled))+      ]++parseCalendarEnvelopeShape :: Value -> Parser ShapeCalendarEnvelope.CalendarEnvelopeShape+parseCalendarEnvelopeShape = withObject "CalendarEnvelopeShape" $ \objectValue -> do+  rejectUnknownFields "CalendarEnvelope" ["primary", "optionalDay", "namedOptional", "sequence", "labelled"] objectValue+  ShapeCalendarEnvelope.CalendarEnvelope+    <$> explicitParseField (parseCalendarDay) objectValue "primary"+    <*> parseOptionalField (pure Nothing) (\value0 -> case value0 of Null -> pure Nothing; other0 -> Just <$> (parseCalendarDay) other0) objectValue "optionalDay"+    <*> explicitParseField (parseMaybeLocalDayShape) objectValue "namedOptional"+    <*> explicitParseField (\value0 -> do items0 <- (parseJSON value0 :: Parser [Value]); traverse (\(index0, item0) -> (parseCalendarDay) item0 <?> Index index0) (zip [0..] items0)) objectValue "sequence"+    <*> explicitParseField (\value0 -> do items0 <- (parseJSON value0 :: Parser (Map Text Value)); Map.traverseWithKey (\key0 item0 -> (parseCalendarDay) item0 <?> Key (Key.fromText key0)) items0) objectValue "labelled"++encodeLocalDayMapped :: LocalDay -> Value+encodeLocalDayMapped = encodeLocalDayShape . bindingToShape Bindings.localDayBinding++parseLocalDayMapped :: Value -> Parser LocalDay+parseLocalDayMapped value = bindingFromShape Bindings.localDayBinding <$> parseLocalDayShape value++decodeLocalDayMapped :: Value -> Either Text LocalDay+decodeLocalDayMapped = mapLeftText . parseEither parseLocalDayMapped++encodeLocalDayShape :: ShapeLocalDay.LocalDayShape -> Value+encodeLocalDayShape value = encodeCalendarDay (value)++parseLocalDayShape :: Value -> Parser ShapeLocalDay.LocalDayShape+parseLocalDayShape = parseCalendarDay++encodeMaybeLocalDayMapped :: MaybeLocalDay -> Value+encodeMaybeLocalDayMapped = encodeMaybeLocalDayShape . bindingToShape Bindings.maybeLocalDayBinding++parseMaybeLocalDayMapped :: Value -> Parser MaybeLocalDay+parseMaybeLocalDayMapped value = bindingFromShape Bindings.maybeLocalDayBinding <$> parseMaybeLocalDayShape value++decodeMaybeLocalDayMapped :: Value -> Either Text MaybeLocalDay+decodeMaybeLocalDayMapped = mapLeftText . parseEither parseMaybeLocalDayMapped++encodeMaybeLocalDayShape :: ShapeMaybeLocalDay.MaybeLocalDayShape -> Value+encodeMaybeLocalDayShape value = maybe Null (\item0 -> encodeCalendarDay (item0)) (value)++parseMaybeLocalDayShape :: Value -> Parser ShapeMaybeLocalDay.MaybeLocalDayShape+parseMaybeLocalDayShape = \value0 -> case value0 of Null -> pure Nothing; other0 -> Just <$> (parseCalendarDay) other0++encodeCalendarJob :: CalendarJob -> Value+encodeCalendarJob payload =+  object+    [ "day" .= encodeLocalDayMapped payload.day+    , "optional_day" .= encodeMaybeLocalDayMapped payload.optionalDay+    , "envelope" .= encodeCalendarEnvelopeMapped payload.envelope+    ]++parseCalendarJob :: Value -> Either Text CalendarJob+parseCalendarJob = mapLeftText . parseEither (withObject "CalendarJob" go)+  where+    go objectValue = CalendarJob <$> explicitParseField (parseLocalDayMapped) objectValue "day" <*> explicitParseField (parseMaybeLocalDayMapped) objectValue "optional_day" <*> explicitParseField (parseCalendarEnvelopeMapped) objectValue "envelope"++mapLeftText :: Either String b -> Either Text b+mapLeftText = either (Left . T.pack) Right++parseOptionalField :: Parser fieldValue -> (Value -> Parser fieldValue) -> KeyMap.KeyMap Value -> Key.Key -> Parser fieldValue+parseOptionalField onMissing parseItem objectValue key =+  case KeyMap.lookup key objectValue of+    Nothing -> onMissing+    Just _ -> explicitParseField parseItem objectValue key++rejectUnknownFields :: String -> [Text] -> KeyMap.KeyMap Value -> Parser ()+rejectUnknownFields label allowed objectValue =+  unless (null extras) (fail (label <> " contains unknown fields: " <> show extras))+  where+    extras = filter (`notElem` allowed) (map Key.toText (KeyMap.keys objectValue))
+ test/conformance-calendar-days/Generated/CalendarDays/CalendarJobs/QueueCodec.hs view
@@ -0,0 +1,29 @@+-- @generated by keiro-dsl 0.18.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+-- 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.CalendarDays.CalendarJobs.QueueCodec (calendarJobsPayloadCodec, calendarJobsJobCodec) where++import Data.List.NonEmpty (NonEmpty (..))+import Keiro.Codec (Codec (..), EventType (..))+import Keiro.PGMQ.Codec (JobCodec, keiroJobCodec)+import Generated.CalendarDays.CalendarJobs.Queue (CalendarJob, encodeCalendarJob, parseCalendarJob)++calendarJobsPayloadCodec :: Codec CalendarJob+calendarJobsPayloadCodec =+  Codec+    { eventTypes = EventType "CalendarJob" :| []+    , eventType = \_ -> EventType "CalendarJob"+    , schemaVersion = 1+    , encode = encodeCalendarJob+    , decode = \_ -> parseCalendarJob+    , upcasters = []+    }++calendarJobsJobCodec :: JobCodec CalendarJob+calendarJobsJobCodec = keiroJobCodec calendarJobsPayloadCodec
+ test/conformance-calendar-days/Generated/CalendarDays/CalendarJobs/QueuePolicy.hs view
@@ -0,0 +1,43 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from workqueue calendar_jobs; do not edit.+module Generated.CalendarDays.CalendarJobs.QueuePolicy+  ( CalendarJobsOutcome (..)+  , 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 CalendarJobsOutcome+  = StoreFailure+  | CommandRejected+  | DecodeFailure+  | OnCodecReject+  deriving stock (Eq, Show)++jobOutcomeFor :: CalendarJobsOutcome -> JobOutcome+jobOutcomeFor o = case o of+  StoreFailure -> Retry (RetryDelay 1)+  CommandRejected -> Dead "dead-lettered"+  DecodeFailure -> Dead "dead-lettered"+  OnCodecReject -> Dead "dead-lettered"
+ test/conformance-calendar-days/Generated/CalendarDays/CalendarLookup/QueryContract.hs view
@@ -0,0 +1,10 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from readmodel calendar_lookup; do not edit.+module Generated.CalendarDays.CalendarLookup.QueryContract+  ( CalendarLookupQueryInput+  , CalendarLookupQueryResult+  ) where++import Conformance.CalendarDays.Domain (CalendarEnvelope, MaybeLocalDay)++type CalendarLookupQueryInput = MaybeLocalDay+type CalendarLookupQueryResult = CalendarEnvelope
+ test/conformance-calendar-days/Generated/CalendarDays/CalendarLookup/ReadModel.hs view
@@ -0,0 +1,28 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from readmodel calendar_lookup; do not edit.+module Generated.CalendarDays.CalendarLookup.ReadModel+  ( calendarLookupReadModel+  , calendarLookupQualifiedTable+  ) where++import Generated.CalendarDays.CalendarLookup.ReadModelTable (calendarLookupQualifiedTable)+import Generated.CalendarDays.CalendarLookup.QueryContract (CalendarLookupQueryInput, CalendarLookupQueryResult)+import CalendarDays.CalendarLookup.ReadModelHoles (calendarLookupQuery)+import Keiro.ReadModel (QueryCursorAuthority (..), ReadModel, ReadModelBlueprint (..), HeadScope (..), headWaitingReadModel)++calendarLookupReadModel :: ReadModel CalendarLookupQueryInput CalendarLookupQueryResult+calendarLookupReadModel =+  case headWaitingReadModel EntireVisibleLog calendarLookupReadModelBlueprint of+    Left definitionError -> error ("keiro-dsl generated an invalid waiting read model: " <> show definitionError)+    Right model -> model++calendarLookupReadModelBlueprint :: ReadModelBlueprint CalendarLookupQueryInput CalendarLookupQueryResult+calendarLookupReadModelBlueprint =+  ReadModelBlueprint+    { name = "calendar-days-calendar-lookup"+    , tableName = "calendar_values"+    , schema = "public"+    , version = 1+    , shapeHash = "fnv1a:3c07a19c552c3547"+    , cursorAuthority = DurableQueryCursor "calendar-writer"+    , query = calendarLookupQuery+    }
+ test/conformance-calendar-days/Generated/CalendarDays/CalendarLookup/ReadModelHarness.hs view
@@ -0,0 +1,57 @@+-- @generated by keiro-dsl 0.18.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)+import Data.Text qualified as T+import Data.List.NonEmpty qualified as NE+import Generated.CalendarDays.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", "calendar-days-calendar-lookup", T.unpack calendarLookupReadModel.name)+  , ("shapeHash", "fnv1a:3c07a19c552c3547", T.unpack calendarLookupReadModel.shapeHash)+  , ("freshness", "WaitForHead EntireVisibleLog", show (readModelDefaultFreshness calendarLookupReadModel))+  , ("cursorAuthority", "DurableQueryCursor \"calendar-writer\"", show (readModelCursorAuthority calendarLookupReadModel))+  ]+    <> catalogFactsAgainst ProjectionCatalog.projectionCatalogRegistrations ProjectionCatalog.projectionCatalogAsyncRegistrations ProjectionCatalog.projectionCatalogQuerySupplies++catalogFactsAgainst :: [Catalog.CatalogRegistration] -> [Catalog.AsyncProjectionRegistration] -> [Catalog.ResolvedQuerySupply] -> [(String, String, String)]+catalogFactsAgainst registrations asyncRegistrations supplies =+  [ ("catalogRegistration", "calendar-days-calendar-lookup|1|fnv1a:3c07a19c552c3547|calendar_rebuild", renderRegistration [entry | entry <- registrations, Catalog.queryModelIdText entry.queryModelId == "calendar_lookup"])+  , ("querySupply", "calendar_writer|calendar_rebuild|calendar_table", renderSupply [entry | entry <- supplies, Catalog.queryModelIdText entry.resolvedQueryModelId == "calendar_lookup"])+  , ("projectionDelivery", "subscription", renderDelivery [entry | entry <- supplies, Catalog.queryModelIdText entry.resolvedQueryModelId == "calendar_lookup"])+  , ("asyncRegistration:calendar_writer", "calendar-writer|calendar-writer-v1", renderAsync [entry | entry <- asyncRegistrations, Catalog.projectionIdText entry.projectionId == "calendar_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)
+ test/conformance-calendar-days/Generated/CalendarDays/CalendarLookup/ReadModelTable.hs view
@@ -0,0 +1,9 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from readmodel calendar_lookup; do not edit.+module Generated.CalendarDays.CalendarLookup.ReadModelTable (calendarLookupQualifiedTable) where++import Data.Text (Text)+import Keiro.Connection (qualifyTable)++-- The fully-qualified, double-quoted data-table reference.+calendarLookupQualifiedTable :: Text+calendarLookupQualifiedTable = qualifyTable "public" "calendar_values"
+ test/conformance-calendar-days/Generated/CalendarDays/CalendarStore/BehaviorContract.hs view
@@ -0,0 +1,350 @@+{-# LANGUAGE OverloadedLabels #-}+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from aggregate CalendarStore; do not edit.+module Generated.CalendarDays.CalendarStore.BehaviorContract+  ( BehaviorKey (..)+  , unBehaviorKey+  , ObligationKind (..)+  , EvidenceLevel (..)+  , GuardCoverage (..)+  , BehaviorRequirement (..)+  , RejectionClass (..)+  , LiveExpectation (..)+  , BehaviorWitness (..)+  , BehaviorFailure (..)+  , BehaviorConformanceReport (..)+  , behaviorRequirements+  , behaviorCoverageReport+  , behaviorConformancePassed+  , behaviorConformancePassedWith+  , renderBehaviorConformanceText+  ) where++import Generated.CalendarDays.CalendarStore.Codec (encodeCalendarStoreEvent, parseCalendarStoreEvent, calendarStoreCodec)+import Generated.CalendarDays.CalendarStore.Domain+import Generated.CalendarDays.CalendarStore.Transducer (calendarStoreTransducer)+import Generated.CalendarDays.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 :: !CalendarStoreVertex+  , commandName :: !Text+  , expectedEdge :: !(Maybe (K.EdgeRef CalendarStoreVertex))+  , target :: !(Maybe CalendarStoreVertex)+  , eventKinds :: ![Text]+  }+  deriving stock (Eq, Show)++data RejectionClass = RejectNoOutgoingEdges | RejectNoMatchingEdge+  deriving stock (Eq, Show)++data LiveExpectation+  = Emits (NonEmpty CalendarStoreEvent)+  | Rejects RejectionClass+  | NoOp+  deriving stock (Eq, Show)++data BehaviorWitness+  = Pending BehaviorKey+  | LiveWitness+      { key :: BehaviorKey+      , history :: [CalendarStoreEvent]+      , command :: CalendarStoreCommand+      , expected :: LiveExpectation+      }+  | ReplayWitness+      { key :: BehaviorKey+      , historyPrefix :: [CalendarStoreEvent]+      , observedChunk :: [CalendarStoreEvent]+      }+  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 =+  [ -- CalendarStoreStored x StoreDate: required rejection+    BehaviorRequirement+      { key = BehaviorKey "behavior-v1-81c1074e5cad73be"+      , kind = RequiredRejection+      , evidence = GeneratedAuthoritative+      , guardCoverage = GuardNotApplicable+      , source = CalendarStoreStored+      , commandName = "StoreDate"+      , expectedEdge = Nothing+      , target = Nothing+      , eventKinds = []+      }+  , -- CalendarStoreEmpty x StoreDate: live transition+    BehaviorRequirement+      { key = BehaviorKey "behavior-v1-8a6ce5ac60391741"+      , kind = LiveTransition+      , evidence = GeneratedAuthoritative+      , guardCoverage = GuardTotal+      , source = CalendarStoreEmpty+      , commandName = "StoreDate"+      , expectedEdge = (Just (K.EdgeRef CalendarStoreEmpty 0))+      , target = Just CalendarStoreStored+      , eventKinds = ["DateStored", "DateAudited"]+      }+  ]++behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport+behaviorCoverageReport 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 <- behaviorRequirements]+  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: CalendarStore"+  , "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 -> [CalendarStoreEvent] -> CalendarStoreCommand -> 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 -> (CalendarStoreVertex, K.RegFile CalendarStoreRegs) -> CalendarStoreCommand -> 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 calendarStoreTransducer 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 -> (CalendarStoreVertex, K.RegFile CalendarStoreRegs) -> CalendarStoreCommand -> 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 calendarStoreTransducer 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 calendarStoreTransducer 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 calendarStoreTransducer 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 CalendarStoreRegs CalendarStoreVertex CalendarStoreEvent -> 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 -> [CalendarStoreEvent] -> [CalendarStoreEvent] -> 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 calendarStoreTransducer (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 CalendarStoreVertex] -> 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 -> [CalendarStoreEvent] -> Either BehaviorFailure (K.ReplaySuccess CalendarStoreRegs CalendarStoreVertex)+settleHistory requirement label history = do+  decoded <- either (failure requirement (label <> "-codec-decode")) Right (decodeEvents history)+  case K.applyEventsDetailedEither calendarStoreTransducer (CalendarStoreEmpty, initialCalendarStoreRegs) decoded of+    Left replayFailure -> failure requirement (label <> "-replay-failed") (tshow replayFailure)+    Right replaySuccess -> Right replaySuccess++decodeEvents :: [CalendarStoreEvent] -> Either Text [CalendarStoreEvent]+decodeEvents = traverse (\event -> parseCalendarStoreEvent (Codec.eventType calendarStoreCodec event) (encodeCalendarStoreEvent event))++commandKind :: CalendarStoreCommand -> Text+commandKind command = case command of+  StoreDate _ -> "StoreDate"++eventKind :: CalendarStoreEvent -> Text+eventKind event = case Codec.eventType calendarStoreCodec event of Codec.EventType tag -> tag++regsEqual :: K.RegFile CalendarStoreRegs -> K.RegFile CalendarStoreRegs -> Bool+regsEqual left right = (left K.! #current) == (right K.! #current)++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
+ test/conformance-calendar-days/Generated/CalendarDays/CalendarStore/Codec.hs view
@@ -0,0 +1,172 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from aggregate CalendarStore; do not edit.+module Generated.CalendarDays.CalendarStore.Codec (+    calendarStoreCodec,+    parseCalendarStoreEvent,+    encodeCalendarStoreEvent,+    encodeCalendarEnvelopeMapped,+    decodeCalendarEnvelopeMapped,+    encodeLocalDayMapped,+    decodeLocalDayMapped,+    encodeMaybeLocalDayMapped,+    decodeMaybeLocalDayMapped,+) where++import Generated.CalendarDays.CalendarStore.Domain+import Control.Monad (unless)+import Data.Aeson (Value (..), object, parseJSON, toJSON, withObject, (.=))+import Data.Aeson.Key qualified as Key+import Data.Aeson.KeyMap qualified as KeyMap+import Data.Aeson.Types (Parser, JSONPathElement (..), (<?>), explicitParseField, parseEither)+import Data.List.NonEmpty (NonEmpty (..))+import Data.List.NonEmpty qualified as NonEmpty+import Data.Map.Strict (Map)+import Data.Map.Strict qualified as Map+import Data.Text (Text)+import qualified Data.Text as T+import Keiro.Codec.CalendarDay (encodeCalendarDay, parseCalendarDay)+import Keiro.Codec.Structural (bindingFromShape, bindingToShape)+import Keiro.Codec (Codec (..), EventType (..))+++import Conformance.CalendarDays.Bindings qualified as Bindings+import Conformance.CalendarDays.Domain (CalendarEnvelope, LocalDay, MaybeLocalDay)+import Generated.CalendarDays.Structural.Shape.CalendarEnvelope qualified as ShapeCalendarEnvelope+import Generated.CalendarDays.Structural.Shape.LocalDay qualified as ShapeLocalDay+import Generated.CalendarDays.Structural.Shape.MaybeLocalDay qualified as ShapeMaybeLocalDay++++encodeCalendarEnvelopeMapped :: CalendarEnvelope -> Value+encodeCalendarEnvelopeMapped = encodeCalendarEnvelopeShape . bindingToShape Bindings.calendarEnvelopeBinding++parseCalendarEnvelopeMapped :: Value -> Parser CalendarEnvelope+parseCalendarEnvelopeMapped value = bindingFromShape Bindings.calendarEnvelopeBinding <$> parseCalendarEnvelopeShape value++decodeCalendarEnvelopeMapped :: Value -> Either Text CalendarEnvelope+decodeCalendarEnvelopeMapped = mapLeftText . parseEither parseCalendarEnvelopeMapped++encodeCalendarEnvelopeShape :: ShapeCalendarEnvelope.CalendarEnvelopeShape -> Value+encodeCalendarEnvelopeShape shape =+  object+      [ "primary" .= encodeCalendarDay (shape.primary)+      , "optionalDay" .= maybe Null (\item0 -> encodeCalendarDay (item0)) (shape.optionalDay)+      , "namedOptional" .= encodeMaybeLocalDayShape (shape.namedOptional)+      , "sequence" .= toJSON (map (\item0 -> encodeCalendarDay (item0)) (shape.sequence))+      , "labelled" .= toJSON (Map.map (\item0 -> encodeCalendarDay (item0)) (shape.labelled))+      ]++parseCalendarEnvelopeShape :: Value -> Parser ShapeCalendarEnvelope.CalendarEnvelopeShape+parseCalendarEnvelopeShape = withObject "CalendarEnvelopeShape" $ \objectValue -> do+  rejectUnknownFields "CalendarEnvelope" ["primary", "optionalDay", "namedOptional", "sequence", "labelled"] objectValue+  ShapeCalendarEnvelope.CalendarEnvelope+    <$> explicitParseField (parseCalendarDay) objectValue "primary"+    <*> parseOptionalField (pure Nothing) (\value0 -> case value0 of Null -> pure Nothing; other0 -> Just <$> (parseCalendarDay) other0) objectValue "optionalDay"+    <*> explicitParseField (parseMaybeLocalDayShape) objectValue "namedOptional"+    <*> explicitParseField (\value0 -> do items0 <- (parseJSON value0 :: Parser [Value]); traverse (\(index0, item0) -> (parseCalendarDay) item0 <?> Index index0) (zip [0..] items0)) objectValue "sequence"+    <*> explicitParseField (\value0 -> do items0 <- (parseJSON value0 :: Parser (Map Text Value)); Map.traverseWithKey (\key0 item0 -> (parseCalendarDay) item0 <?> Key (Key.fromText key0)) items0) objectValue "labelled"++encodeLocalDayMapped :: LocalDay -> Value+encodeLocalDayMapped = encodeLocalDayShape . bindingToShape Bindings.localDayBinding++parseLocalDayMapped :: Value -> Parser LocalDay+parseLocalDayMapped value = bindingFromShape Bindings.localDayBinding <$> parseLocalDayShape value++decodeLocalDayMapped :: Value -> Either Text LocalDay+decodeLocalDayMapped = mapLeftText . parseEither parseLocalDayMapped++encodeLocalDayShape :: ShapeLocalDay.LocalDayShape -> Value+encodeLocalDayShape value = encodeCalendarDay (value)++parseLocalDayShape :: Value -> Parser ShapeLocalDay.LocalDayShape+parseLocalDayShape = parseCalendarDay++encodeMaybeLocalDayMapped :: MaybeLocalDay -> Value+encodeMaybeLocalDayMapped = encodeMaybeLocalDayShape . bindingToShape Bindings.maybeLocalDayBinding++parseMaybeLocalDayMapped :: Value -> Parser MaybeLocalDay+parseMaybeLocalDayMapped value = bindingFromShape Bindings.maybeLocalDayBinding <$> parseMaybeLocalDayShape value++decodeMaybeLocalDayMapped :: Value -> Either Text MaybeLocalDay+decodeMaybeLocalDayMapped = mapLeftText . parseEither parseMaybeLocalDayMapped++encodeMaybeLocalDayShape :: ShapeMaybeLocalDay.MaybeLocalDayShape -> Value+encodeMaybeLocalDayShape value = maybe Null (\item0 -> encodeCalendarDay (item0)) (value)++parseMaybeLocalDayShape :: Value -> Parser ShapeMaybeLocalDay.MaybeLocalDayShape+parseMaybeLocalDayShape = \value0 -> case value0 of Null -> pure Nothing; other0 -> Just <$> (parseCalendarDay) other0++calendarStoreEventTypes :: NonEmpty EventType+calendarStoreEventTypes = EventType "DateStored" :| [EventType "DateAudited"]++calendarStoreCodec :: Codec CalendarStoreEvent+calendarStoreCodec =+  Codec+    { eventTypes = calendarStoreEventTypes+    , eventType = \case+        DateStored{} -> EventType "DateStored"+        DateAudited{} -> EventType "DateAudited"+    , schemaVersion = 1+    , encode = encodeCalendarStoreEvent+    , decode = parseCalendarStoreEvent+    , upcasters = []+    }++encodeCalendarStoreEvent :: CalendarStoreEvent -> Value+encodeCalendarStoreEvent = \case+  DateStored payload ->+    object+      [ "kind" .= ("DateStored" :: Text)+      , "day" .= encodeLocalDayMapped payload.day+      , "optionalDay" .= encodeMaybeLocalDayMapped payload.optionalDay+      , "envelope" .= encodeCalendarEnvelopeMapped payload.envelope+      ]+  DateAudited payload ->+    object+      [ "kind" .= ("DateAudited" :: Text)+      , "day" .= encodeLocalDayMapped payload.day+      , "optionalDay" .= encodeMaybeLocalDayMapped payload.optionalDay+      , "envelope" .= encodeCalendarEnvelopeMapped payload.envelope+      ]++parseCalendarStoreEvent :: EventType -> Value -> Either Text CalendarStoreEvent+parseCalendarStoreEvent (EventType tag) = mapLeftText . parseEither (withObject "CalendarStoreEvent" go)+  where+    go o = do+      case tag of+        "DateStored" ->+          DateStored+            <$> ( DateStoredData+                    <$> explicitParseField parseLocalDayMapped o "day"+                    <*> parseOptionalField (parseMaybeLocalDayMapped Null) parseMaybeLocalDayMapped o "optionalDay"+                    <*> explicitParseField parseCalendarEnvelopeMapped o "envelope"+                )+        "DateAudited" ->+          DateAudited+            <$> ( DateAuditedData+                    <$> explicitParseField parseLocalDayMapped o "day"+                    <*> parseOptionalField (parseMaybeLocalDayMapped Null) parseMaybeLocalDayMapped o "optionalDay"+                    <*> explicitParseField parseCalendarEnvelopeMapped o "envelope"+                )+        _ -> fail ("unknown event type " <> show tag <> "; expected one of: " <> renderExpectedEventTypes calendarStoreEventTypes)++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++parseOptionalField :: Parser fieldValue -> (Value -> Parser fieldValue) -> KeyMap.KeyMap Value -> Key.Key -> Parser fieldValue+parseOptionalField onMissing parseItem objectValue key =+  case KeyMap.lookup key objectValue of+    Nothing -> onMissing+    Just _ -> explicitParseField parseItem objectValue key++rejectUnknownFields :: String -> [Text] -> KeyMap.KeyMap Value -> Parser ()+rejectUnknownFields label allowed objectValue =+  unless (null extras) (fail (label <> " contains unknown fields: " <> show extras))+  where+    extras = filter (`notElem` allowed) (map Key.toText (KeyMap.keys objectValue))
+ test/conformance-calendar-days/Generated/CalendarDays/CalendarStore/Domain.hs view
@@ -0,0 +1,61 @@+{-# LANGUAGE DeriveAnyClass #-}+{-# LANGUAGE TemplateHaskell #-}+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from aggregate CalendarStore; do not edit.+module Generated.CalendarDays.CalendarStore.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 Conformance.CalendarDays.Bindings qualified as Bindings+import Conformance.CalendarDays.Domain (CalendarEnvelope, LocalDay, MaybeLocalDay)+import Keiki.Generics.TH (deriveAggregateCtorsAll, deriveWireCtorsAll)++data CalendarStoreVertex = CalendarStoreEmpty | CalendarStoreStored+  deriving stock (Generic, Eq, Ord, Show, Enum, Bounded)+  deriving anyclass (ToJSON, FromJSON)+instance CanonicalStateShape CalendarStoreVertex+instance CanonicalTypeName CalendarStoreVertex++data StoreDateData = StoreDateData+  { day :: !LocalDay+  , optionalDay :: !MaybeLocalDay+  , envelope :: !CalendarEnvelope+  }+  deriving stock (Generic, Eq, Show)++data CalendarStoreCommand = StoreDate !StoreDateData+  deriving stock (Generic, Eq, Show)++data DateStoredData = DateStoredData+  { day :: !LocalDay+  , optionalDay :: !MaybeLocalDay+  , envelope :: !CalendarEnvelope+  }+  deriving stock (Generic, Eq, Show)++data DateAuditedData = DateAuditedData+  { day :: !LocalDay+  , optionalDay :: !MaybeLocalDay+  , envelope :: !CalendarEnvelope+  }+  deriving stock (Generic, Eq, Show)++data CalendarStoreEvent = DateStored !DateStoredData+  | DateAudited !DateAuditedData+  deriving stock (Generic, Eq, Show)++type CalendarStoreRegs =+  '[ '("current", LocalDay)+   ]++initialCalendarStoreRegs :: RegFile CalendarStoreRegs+initialCalendarStoreRegs =+  RCons (Proxy @"current") Bindings.initialLocalDay RNil++$(deriveAggregateCtorsAll ''CalendarStoreCommand ''CalendarStoreRegs)++++$(deriveWireCtorsAll ''CalendarStoreEvent)
+ test/conformance-calendar-days/Generated/CalendarDays/CalendarStore/EventStream.hs view
@@ -0,0 +1,63 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from aggregate CalendarStore; do not edit.+module Generated.CalendarDays.CalendarStore.EventStream+  ( calendarStoreCategory+  , calendarStoreCommandCategory+  , calendarStoreEventStream+  , calendarStoreEventStreamDef+  , CalendarStoreEventStream+  , CalendarStoreEventStreamDef+  , calendarStoreSnapshotFixture+  ) where++import Generated.CalendarDays.CalendarStore.Domain+import Generated.CalendarDays.CalendarStore.Codec (calendarStoreCodec)+import Generated.CalendarDays.CalendarStore.Transducer (calendarStoreFoldFingerprint, calendarStoreTransducer)+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.+calendarStoreCategory :: Stream.StreamCategory CalendarStoreEventStreamDef+calendarStoreCategory = Stream.categoryUnsafe "calendarStore"++-- The same category text, typed for command envelopes such as PMCommand.+calendarStoreCommandCategory :: Stream.StreamCategory CalendarStoreCommand+calendarStoreCommandCategory = Stream.categoryUnsafe "calendarStore"++type CalendarStoreEventStreamDef =+  EventStream (HsPred CalendarStoreRegs CalendarStoreCommand) CalendarStoreRegs CalendarStoreVertex CalendarStoreCommand CalendarStoreEvent++type CalendarStoreEventStream =+  ValidatedEventStream (HsPred CalendarStoreRegs CalendarStoreCommand) CalendarStoreRegs CalendarStoreVertex CalendarStoreCommand CalendarStoreEvent++calendarStoreEventStreamDef :: CalendarStoreEventStreamDef+calendarStoreEventStreamDef =+  EventStream+    { transducer = calendarStoreTransducer,+      initialState = CalendarStoreEmpty,+      initialRegisters = initialCalendarStoreRegs,+      eventCodec = calendarStoreCodec,+      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 calendarStoreFoldFingerprint (defaultStateCodec 1))+    }++calendarStoreSnapshotFixture :: (Int, Text)+calendarStoreSnapshotFixture = (1, "calendar-days-v1")++calendarStoreEventStream :: CalendarStoreEventStream+calendarStoreEventStream =+  mkEventStreamOrThrow "CalendarStore" calendarStoreEventStreamDef
+ test/conformance-calendar-days/Generated/CalendarDays/CalendarStore/Harness.hs view
@@ -0,0 +1,132 @@+{-# LANGUAGE OverloadedLabels #-}+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from aggregate CalendarStore; do not edit.+module Generated.CalendarDays.CalendarStore.Harness (harnessAssertions) where++import Generated.CalendarDays.CalendarStore.Domain+import Generated.CalendarDays.CalendarStore.Codec (encodeCalendarStoreEvent, parseCalendarStoreEvent, calendarStoreCodec, encodeCalendarEnvelopeMapped, decodeCalendarEnvelopeMapped)+import Generated.CalendarDays.CalendarStore.Transducer (calendarStoreTransducer)+import Keiki.Core (applyEventsEither, defaultValidationOptions, step, validateTransducer, (!))+import Keiro.Codec (eventType)+import Data.Aeson qualified as Aeson+import Data.Aeson.Key qualified as AesonKey+import Data.Aeson.KeyMap qualified as AesonKeyMap+import Data.Either (isLeft, isRight)+import Data.List.NonEmpty qualified as NonEmpty+import Data.Text qualified as T+import Keiro.Codec.Structural (FixtureCases (..))+import Conformance.CalendarDays.Bindings qualified as Bindings++-- | (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 calendarStoreTransducer))+  -- clock-free: spec samples no wall clock (verified at scaffold time)+  , ("golden round-trip: DateStored", roundTrips sampleEventDateStored)+  , ("golden round-trip: DateAudited", roundTrips sampleEventDateAudited)+  , ("accepts StoreDate from CalendarStoreEmpty", acceptStoreDate)+  ]+  ++ mappedConformanceAssertions+  ++ forwardReplayStoreDate++roundTrips :: CalendarStoreEvent -> Bool+roundTrips e = parseCalendarStoreEvent (eventType calendarStoreCodec e) (encodeCalendarStoreEvent e) == Right e++sampleEventDateStored :: CalendarStoreEvent+sampleEventDateStored = DateStored (DateStoredData (snd (NonEmpty.head (fixtureCases Bindings.localDayFixtures))) (snd (NonEmpty.head (fixtureCases Bindings.maybeLocalDayFixtures))) (snd (NonEmpty.head (fixtureCases Bindings.calendarEnvelopeFixtures))))++sampleEventDateAudited :: CalendarStoreEvent+sampleEventDateAudited = DateAudited (DateAuditedData (snd (NonEmpty.head (fixtureCases Bindings.localDayFixtures))) (snd (NonEmpty.head (fixtureCases Bindings.maybeLocalDayFixtures))) (snd (NonEmpty.head (fixtureCases Bindings.calendarEnvelopeFixtures))))++acceptStoreDate :: Bool+acceptStoreDate =+  case step calendarStoreTransducer (CalendarStoreEmpty, initialCalendarStoreRegs) (StoreDate (StoreDateData (snd (NonEmpty.head (fixtureCases Bindings.localDayFixtures))) (snd (NonEmpty.head (fixtureCases Bindings.maybeLocalDayFixtures))) (snd (NonEmpty.head (fixtureCases Bindings.calendarEnvelopeFixtures))))) of+    Just (v, _, _) -> v == CalendarStoreStored+    Nothing -> False++-- forward/replay equality (plan 147): cross the persisted codec boundary,+-- replay the emitted chain, and compare the final vertex and every register.+forwardReplayStoreDate :: [(String, Bool)]+forwardReplayStoreDate =+  case step calendarStoreTransducer (CalendarStoreEmpty, initialCalendarStoreRegs) (StoreDate (StoreDateData (snd (NonEmpty.head (fixtureCases Bindings.localDayFixtures))) (snd (NonEmpty.head (fixtureCases Bindings.maybeLocalDayFixtures))) (snd (NonEmpty.head (fixtureCases Bindings.calendarEnvelopeFixtures))))) of+    Nothing -> [(prefix <> "forward step accepted", False)]+    Just (forwardVertex, forwardRegs, emitted) ->+      case mapM (\event -> parseCalendarStoreEvent (eventType calendarStoreCodec event) (encodeCalendarStoreEvent event)) emitted of+        Left _ -> [(prefix <> "emitted chain decodes", False)]+        Right decodedEvents ->+          case applyEventsEither calendarStoreTransducer (CalendarStoreEmpty, initialCalendarStoreRegs) decodedEvents of+            Left _ -> [(prefix <> "replay succeeds", False)]+            Right (replayVertex, replayRegs) ->+              [ (prefix <> "final vertex", replayVertex == forwardVertex)+              , (prefix <> "register current", (replayRegs ! #current) == (forwardRegs ! #current))+              ]+  where+    prefix = "forward/replay equality: StoreDate from CalendarStoreEmpty -- "++mappedConformanceAssertions :: [(String, Bool)]+mappedConformanceAssertions =+  concat+    [ dateStoredDayAssertions+    , dateStoredOptionalDayAssertions+    , dateStoredEnvelopeAssertions+    , dateAuditedDayAssertions+    , dateAuditedOptionalDayAssertions+    , dateAuditedEnvelopeAssertions+    , structuralWirePolicyAssertions+    ]++dateStoredDayAssertions :: [(String, Bool)]+dateStoredDayAssertions =+  [ ("mapped codec round-trip: DateStored/day/" <> T.unpack label, roundTrips (DateStored (DateStoredData mappedValue (snd (NonEmpty.head (fixtureCases Bindings.maybeLocalDayFixtures))) (snd (NonEmpty.head (fixtureCases Bindings.calendarEnvelopeFixtures))))))+  | (label, mappedValue) <- NonEmpty.toList (fixtureCases Bindings.localDayFixtures)+  ]++dateStoredOptionalDayAssertions :: [(String, Bool)]+dateStoredOptionalDayAssertions =+  [ ("mapped codec round-trip: DateStored/optionalDay/" <> T.unpack label, roundTrips (DateStored (DateStoredData (snd (NonEmpty.head (fixtureCases Bindings.localDayFixtures))) mappedValue (snd (NonEmpty.head (fixtureCases Bindings.calendarEnvelopeFixtures))))))+  | (label, mappedValue) <- NonEmpty.toList (fixtureCases Bindings.maybeLocalDayFixtures)+  ]++dateStoredEnvelopeAssertions :: [(String, Bool)]+dateStoredEnvelopeAssertions =+  [ ("mapped codec round-trip: DateStored/envelope/" <> T.unpack label, roundTrips (DateStored (DateStoredData (snd (NonEmpty.head (fixtureCases Bindings.localDayFixtures))) (snd (NonEmpty.head (fixtureCases Bindings.maybeLocalDayFixtures))) mappedValue)))+  | (label, mappedValue) <- NonEmpty.toList (fixtureCases Bindings.calendarEnvelopeFixtures)+  ]++dateAuditedDayAssertions :: [(String, Bool)]+dateAuditedDayAssertions =+  [ ("mapped codec round-trip: DateAudited/day/" <> T.unpack label, roundTrips (DateAudited (DateAuditedData mappedValue (snd (NonEmpty.head (fixtureCases Bindings.maybeLocalDayFixtures))) (snd (NonEmpty.head (fixtureCases Bindings.calendarEnvelopeFixtures))))))+  | (label, mappedValue) <- NonEmpty.toList (fixtureCases Bindings.localDayFixtures)+  ]++dateAuditedOptionalDayAssertions :: [(String, Bool)]+dateAuditedOptionalDayAssertions =+  [ ("mapped codec round-trip: DateAudited/optionalDay/" <> T.unpack label, roundTrips (DateAudited (DateAuditedData (snd (NonEmpty.head (fixtureCases Bindings.localDayFixtures))) mappedValue (snd (NonEmpty.head (fixtureCases Bindings.calendarEnvelopeFixtures))))))+  | (label, mappedValue) <- NonEmpty.toList (fixtureCases Bindings.maybeLocalDayFixtures)+  ]++dateAuditedEnvelopeAssertions :: [(String, Bool)]+dateAuditedEnvelopeAssertions =+  [ ("mapped codec round-trip: DateAudited/envelope/" <> T.unpack label, roundTrips (DateAudited (DateAuditedData (snd (NonEmpty.head (fixtureCases Bindings.localDayFixtures))) (snd (NonEmpty.head (fixtureCases Bindings.maybeLocalDayFixtures))) mappedValue)))+  | (label, mappedValue) <- NonEmpty.toList (fixtureCases Bindings.calendarEnvelopeFixtures)+  ]++structuralWirePolicyAssertions :: [(String, Bool)]+structuralWirePolicyAssertions =+  [ ("wire policy missing default: conformance.calendar-days.CalendarEnvelope.v1/optionalDay", case decodeCalendarEnvelopeMapped (deleteObjectField "optionalDay" (encodeCalendarEnvelopeMapped (snd (NonEmpty.head (fixtureCases Bindings.calendarEnvelopeFixtures))))) of Left _ -> False; Right decoded -> objectField "optionalDay" (encodeCalendarEnvelopeMapped decoded) == Just (Aeson.Null))+  , ("wire policy explicit null: conformance.calendar-days.CalendarEnvelope.v1/optionalDay", isRight (decodeCalendarEnvelopeMapped (insertObjectField "optionalDay" Aeson.Null (encodeCalendarEnvelopeMapped (snd (NonEmpty.head (fixtureCases Bindings.calendarEnvelopeFixtures)))))))+  , ("wire policy unknown fields: conformance.calendar-days.CalendarEnvelope.v1", all (\(_, value) -> isLeft (decodeCalendarEnvelopeMapped (insertObjectField "__keiro_unknown" (Aeson.Bool True) (encodeCalendarEnvelopeMapped value)))) (NonEmpty.toList (fixtureCases Bindings.calendarEnvelopeFixtures)))+  ]++deleteObjectField :: T.Text -> Aeson.Value -> Aeson.Value+deleteObjectField key (Aeson.Object objectValue) = Aeson.Object (AesonKeyMap.delete (AesonKey.fromText key) objectValue)+deleteObjectField _ value = value++insertObjectField :: T.Text -> Aeson.Value -> Aeson.Value -> Aeson.Value+insertObjectField key inserted (Aeson.Object objectValue) = Aeson.Object (AesonKeyMap.insert (AesonKey.fromText key) inserted objectValue)+insertObjectField _ _ value = value++objectField :: T.Text -> Aeson.Value -> Maybe Aeson.Value+objectField key (Aeson.Object objectValue) = AesonKeyMap.lookup (AesonKey.fromText key) objectValue+objectField _ _ = Nothing
+ test/conformance-calendar-days/Generated/CalendarDays/CalendarStore/Projection.hs view
@@ -0,0 +1,4 @@+-- @generated by keiro-dsl 0.18.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.
+ test/conformance-calendar-days/Generated/CalendarDays/CalendarStore/Transducer.hs view
@@ -0,0 +1,63 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE QualifiedDo #-}+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from aggregate CalendarStore; do not edit.+module Generated.CalendarDays.CalendarStore.Transducer+  ( calendarStoreTransducer+  , calendarStoreFoldFingerprint+  , BehaviorOwnership (..)+  , calendarStorePredicateVerifications+  ) where++import Generated.CalendarDays.CalendarStore.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 Keiki.Builder ((=:))++calendarStoreTransducer+  :: SymTransducer+       (HsPred CalendarStoreRegs CalendarStoreCommand)+       CalendarStoreRegs+       CalendarStoreVertex+       CalendarStoreCommand+       CalendarStoreEvent+calendarStoreTransducer =+  B.buildTransducer CalendarStoreEmpty initialCalendarStoreRegs isTerminal do+    B.from CalendarStoreEmpty do+      B.onCmd inCtorStoreDate $ \d -> B.do+        B.slot @"current" =: d.day+        B.emit wireDateStored (DateStoredTermFields+          { day = d.day+          , optionalDay = d.optionalDay+          , envelope = d.envelope+          })+        B.emit wireDateAudited (DateAuditedTermFields+          { day = d.day+          , optionalDay = d.optionalDay+          , envelope = d.envelope+          })+        B.goto CalendarStoreStored+ where+  isTerminal = \case+    CalendarStoreStored -> True+    _ -> False++calendarStoreFoldFingerprint :: Text+calendarStoreFoldFingerprint = "0e4a982b146fd9211b6f90608e193156"++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.+calendarStorePredicateVerifications :: IO [(Text, BehaviorOwnership, S.PredicateVerification)]+calendarStorePredicateVerifications = sequence+  [ verifyTransition "transition1EmptyStoreDate" GeneratedOwned CalendarStoreEmpty 0+  ]+ where+  verifyTransition label owner source edgeIndex =+    case drop edgeIndex (K.edgesOut calendarStoreTransducer source) of+      K.Edge predicate _ _ _ _ : _ -> (\result -> (label, owner, result)) <$> S.verifyPredicate predicate+      [] -> pure (label, owner, S.UnverifiedSolverFailure "generated transition edge missing")
+ test/conformance-calendar-days/Generated/CalendarDays/ProjectionCatalog.hs view
@@ -0,0 +1,80 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from projection-catalog calendar-days; do not edit.+{-# LANGUAGE OverloadedStrings #-}+module Generated.CalendarDays.ProjectionCatalog+  ( projectionCatalog+  , validatedProjectionCatalog+  , projectionCatalogInventory+  , projectionCatalogRegistrations+  , projectionCatalogAsyncRegistrations+  , projectionCatalogQuerySupplies+  , registerProjectionCatalog+  , calendarWriterProjectionSet+  , calendarRebuildRebuildGroupId+  , startCalendarRebuildRebuild+  ) 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 CalendarDays.ProjectionCatalog.ProjectionCatalogHoles qualified as Holes+import Generated.CalendarDays.CalendarLookup.ReadModel qualified as RMCalendarLookup++must :: Show error => Either error value -> value+must = either (error . show) id++calendarWriterProjectionSet :: Catalog.ProjectionSet Holes.CalendarWriterEvent+calendarWriterProjectionSet =+  Catalog.ProjectionSet+    (must (Catalog.mkSourceId "all"))+    (Catalog.ProjectionDefinition+      (must (Catalog.mkProjectionId "calendar_writer"))+      (must (Catalog.mkRebuildGroupId "calendar_rebuild"))+      ((must (Catalog.mkTargetId "calendar_table")) :| [])+      (Catalog.Replayable (Catalog.ReplayAdapter Holes.decodeCalendarWriterReplay Holes.applyCalendarWriterReplay))+      (Catalog.AsyncHandler (AsyncProjection "calendar-writer-v1" "calendar-days-calendar-lookup" "calendar-writer" Holes.applyCalendarWriterLive Holes.calendarWriterIdempotencyKey) (must (Catalog.mkSubscriptionId "calendar-writer")) (must (Catalog.mkDedupKeyId "calendar-writer-v1")) (must (Catalog.mkClaimSite "projection-owner calendar_writer async-handler")) :| [])+      (must (Catalog.mkClaimSite "projection-owner calendar_writer"))+      :| [])+    (must (Catalog.mkClaimSite "projection-owner calendar_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 "calendar_table")) (Catalog.QualifiedTable "public" "calendar_values") Catalog.ClearBeforeReplay [] (must (Catalog.mkClaimSite "target calendar_table"))]+    [Catalog.RebuildGroupDeclaration (must (Catalog.mkRebuildGroupId "calendar_rebuild")) [(must (Catalog.mkTargetId "calendar_table"))] [] (must (Catalog.mkClaimSite "rebuild-group calendar_rebuild"))]+    []+    []+    [Catalog.SubscriptionDeclaration (must (Catalog.mkSubscriptionId "calendar-writer")) "calendar-writer" (must (Catalog.mkSourceId "all")) KirokuSubscription.FromBeginning (must (Catalog.mkClaimSite "projection-owner calendar_writer subscription"))]+    [Catalog.DedupKeyDeclaration (must (Catalog.mkDedupKeyId "calendar-writer-v1")) "calendar-writer-v1" (must (Catalog.mkClaimSite "projection-owner calendar_writer dedup"))]+    [Catalog.SomeQueryModelBinding (Catalog.QueryModelBinding (must (Catalog.mkQueryModelId "calendar_lookup")) RMCalendarLookup.calendarLookupReadModel (must (Catalog.mkRebuildGroupId "calendar_rebuild")) [(must (Catalog.mkTargetId "calendar_table"))] (must (Catalog.mkClaimSite "readmodel calendar_lookup")))]+    [Catalog.SomeProjectionSet calendarWriterProjectionSet]++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++calendarRebuildRebuildGroupId :: Catalog.RebuildGroupId+calendarRebuildRebuildGroupId = (must (Catalog.mkRebuildGroupId "calendar_rebuild"))++startCalendarRebuildRebuild :: (IOE :> es, Store :> es) => Rebuild.RebuildOptions -> Eff es (Either Rebuild.CatalogRebuildError Rebuild.RebuildRunReport)+startCalendarRebuildRebuild = Rebuild.startCatalogRebuild validatedProjectionCatalog calendarRebuildRebuildGroupId
+ test/conformance-calendar-days/Generated/CalendarDays/ReplayAudit.hs view
@@ -0,0 +1,23 @@+-- @generated by keiro-dsl 0.18.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;+--   * 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.CalendarDays.ReplayAudit (auditTargets) where++import Generated.CalendarDays.CalendarStore.EventStream qualified as CalendarStore+import Keiro.ReplayAudit (AuditTarget (..), SomeAuditTarget (..), streamInCategory)+import Keiro.Stream qualified as Stream++auditTargets :: [SomeAuditTarget]+auditTargets =+  [ SomeAuditTarget+      AuditTarget+        { eventStream = CalendarStore.calendarStoreEventStream+        , category = Stream.categoryText CalendarStore.calendarStoreCategory+        , mkStream = streamInCategory (Stream.categoryText CalendarStore.calendarStoreCategory)+        }+  ]
+ test/conformance-calendar-days/Generated/CalendarDays/Structural/CodecCompare/MaybeLocalDay.hs view
@@ -0,0 +1,77 @@++-- @generated by keiro-dsl codec comparison; non-production migration evidence; do not edit.+-- This module compares historical and generated codecs in consumer-owned tests only.+-- It is never a runtime fallback and never changes the generated codec's authority.+module Generated.CalendarDays.Structural.CodecCompare.MaybeLocalDay (compareWithHistorical) where++import Control.Monad (filterM)+import Data.Aeson (Value)+import Data.Aeson qualified as Aeson+import Data.List (sort)+import Data.List.NonEmpty qualified as NonEmpty+import Data.Text (Text)+import Data.Text qualified+import Generated.CalendarDays.CalendarStore.Codec qualified as GeneratedCodec+import Keiro.Codec.Structural (FixtureCases (..))+import Keiro.Dsl.CodecCompare+import Keiro.Dsl.TypeGraph (BindingVersion (..), CanonicalTypeId (..), QualifiedValueName (..))+import System.Directory (doesFileExist, listDirectory)+import System.FilePath (takeExtension, (</>))+import Conformance.CalendarDays.Bindings qualified as Bindings+import Conformance.CalendarDays.Domain (MaybeLocalDay)++compareWithHistorical :: HistoricalCodec MaybeLocalDay -> FilePath -> IO CompareReport+compareWithHistorical historicalCodec goldenDirectory = do+  names <- sort . filter ((== ".json") . takeExtension) <$> listDirectory goldenDirectory+  files <- filterM doesFileExist [goldenDirectory </> name | name <- names]+  loaded <- traverse (loadGolden historicalCodec) files+  let inputIssues = [issue | Left issue <- loaded]+      entries = [entry | Right entry <- loaded]+      typedCases = NonEmpty.toList (fixtureCases Bindings.maybeLocalDayFixtures)+      encodeObservations =+        [ EncodeObservation label (historicalCodec.encode value) (GeneratedCodec.encodeMaybeLocalDayMapped value)+        | (label, value) <- typedCases+        ]+      decodeObservations = [observation | (observation, _) <- entries]+      typedObserved =+        concat+          [ observedBranchesFor FromBinding branchSchema (GeneratedCodec.encodeMaybeLocalDayMapped value)+          | (_, value) <- typedCases+          ]+      historicalObserved =+        concat [observedBranchesFor HistoricalGolden branchSchema value | (_, values) <- entries, value <- values]+      declared = declaredBranchesFor FromBinding branchSchema <> declaredBranchesFor HistoricalGolden branchSchema+      provenance =+        CompareProvenance+          { historicalCodecIdentity = historicalCodec.identity+          , historicalCodecVersion = historicalCodec.version+          , canonicalType = CanonicalTypeId "conformance.calendar-days.MaybeLocalDay.v1"+          , bindingSymbol = QualifiedValueName "Conformance.CalendarDays.Bindings.maybeLocalDayBinding"+          , bindingVersion = BindingVersion "1"+          , wireFingerprint = "c28177c9398266fc"+          }+  pure (compareReport provenance inputIssues (encodeObservations <> decodeObservations) declared (typedObserved <> historicalObserved))++loadGolden :: HistoricalCodec MaybeLocalDay -> FilePath -> IO (Either CompareInputIssue (CompareObservation, [Value]))+loadGolden historicalCodec path = do+  decoded <- Aeson.eitherDecodeFileStrict path+  pure $ case decoded of+    Left reason -> Left (HistoricalGoldenUnreadable path (fromString reason))+    Right inputValue ->+      let historicalDecoded = historicalCodec.decode inputValue+          historicalOutcome = normalizeDecode historicalDecoded+          generatedOutcome = normalizeDecode (GeneratedCodec.decodeMaybeLocalDayMapped inputValue)+          observation = DecodeObservation path inputValue historicalOutcome generatedOutcome+          coveredValues = case historicalDecoded of+            Right value -> [inputValue, GeneratedCodec.encodeMaybeLocalDayMapped value]+            Left _ -> []+       in Right (observation, coveredValues)++normalizeDecode :: Either Text MaybeLocalDay -> DecodeOutcome+normalizeDecode = either DecodeFailed (DecodedShape . GeneratedCodec.encodeMaybeLocalDayMapped)++fromString :: String -> Text+fromString = Data.Text.pack++branchSchema :: BranchSchema+branchSchema = BranchOptional (BranchScalar)
+ test/conformance-calendar-days/Generated/CalendarDays/Structural/Shape/CalendarEnvelope.hs view
@@ -0,0 +1,17 @@+-- @generated by keiro-dsl 0.18.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)+import Data.Text (Text)+import Data.Time.Calendar (Day)+import GHC.Generics (Generic)+import Generated.CalendarDays.Structural.Shape.MaybeLocalDay qualified as MaybeLocalDay++data CalendarEnvelopeShape = CalendarEnvelope+  { primary :: !Day+  , optionalDay :: !(Maybe Day)+  , namedOptional :: !MaybeLocalDay.MaybeLocalDayShape+  , sequence :: ![Day]+  , labelled :: !(Map Text Day)+  }+  deriving stock (Eq, Generic, Show)
+ test/conformance-calendar-days/Generated/CalendarDays/Structural/Shape/LocalDay.hs view
@@ -0,0 +1,6 @@+-- @generated by keiro-dsl 0.18.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)++type LocalDayShape = Day
+ test/conformance-calendar-days/Generated/CalendarDays/Structural/Shape/MaybeLocalDay.hs view
@@ -0,0 +1,6 @@+-- @generated by keiro-dsl 0.18.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)++type MaybeLocalDayShape = (Maybe Day)
+ test/conformance-calendar-days/Generated/CalendarDays/StructuralConformance.hs view
@@ -0,0 +1,84 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from context calendar-days structural conformance; do not edit.+module Generated.CalendarDays.StructuralConformance+  ( structuralConformanceAssertions+  ) where++import Data.List (nub)+import Data.List.NonEmpty qualified as NonEmpty+import Data.Maybe (isJust, isNothing)+import Data.Proxy (Proxy (..))+import Data.Text qualified as T+import Keiki.Shape (CanonicalTypeName (..))+import Keiro.Codec.Structural (FixtureCases (..), bindingDomainRoundTrip, bindingShapeRoundTrip, bindingToShape)+import Generated.CalendarDays.Structural.Shape.CalendarEnvelope (CalendarEnvelopeShape(optionalDay))+import Conformance.CalendarDays.Bindings qualified as Bindings+import Conformance.CalendarDays.Domain (CalendarEnvelope, LocalDay, MaybeLocalDay)++structuralConformanceAssertions :: [(String, Bool)]+structuralConformanceAssertions =+  concat+    [ calendarEnvelopeBindingAssertions+    , localDayBindingAssertions+    , maybeLocalDayBindingAssertions+    , [("fixture coverage: conformance.calendar-days.CalendarEnvelope.v1", coverageCalendarEnvelope)]+    , [("fixture coverage: conformance.calendar-days.LocalDay.v1", coverageLocalDay)]+    , [("fixture coverage: conformance.calendar-days.MaybeLocalDay.v1", coverageMaybeLocalDay)]+    ]++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)++calendarEnvelopeBindingAssertions :: [(String, Bool)]+calendarEnvelopeBindingAssertions =+  ("fixture labels: conformance.calendar-days.CalendarEnvelope.v1", validFixtureLabels cases) :+  ("canonical identity: conformance.calendar-days.CalendarEnvelope.v1", canonicalTypeName (Proxy @CalendarEnvelope) == "conformance.calendar-days.CalendarEnvelope.v1") :+  concat+    [ [ ("binding domain round-trip: conformance.calendar-days.CalendarEnvelope.v1/" <> T.unpack label, bindingDomainRoundTrip Bindings.calendarEnvelopeBinding value)+      , ("binding shape round-trip: conformance.calendar-days.CalendarEnvelope.v1/" <> T.unpack label, bindingShapeRoundTrip Bindings.calendarEnvelopeBinding (bindingToShape Bindings.calendarEnvelopeBinding value))+      ]+    | (label, value) <- NonEmpty.toList cases+    ]+  where+    cases = fixtureCases Bindings.calendarEnvelopeFixtures++localDayBindingAssertions :: [(String, Bool)]+localDayBindingAssertions =+  ("fixture labels: conformance.calendar-days.LocalDay.v1", validFixtureLabels cases) :+  ("canonical identity: conformance.calendar-days.LocalDay.v1", canonicalTypeName (Proxy @LocalDay) == "conformance.calendar-days.LocalDay.v1") :+  concat+    [ [ ("binding domain round-trip: conformance.calendar-days.LocalDay.v1/" <> T.unpack label, bindingDomainRoundTrip Bindings.localDayBinding value)+      , ("binding shape round-trip: conformance.calendar-days.LocalDay.v1/" <> T.unpack label, bindingShapeRoundTrip Bindings.localDayBinding (bindingToShape Bindings.localDayBinding value))+      ]+    | (label, value) <- NonEmpty.toList cases+    ]+  where+    cases = fixtureCases Bindings.localDayFixtures++maybeLocalDayBindingAssertions :: [(String, Bool)]+maybeLocalDayBindingAssertions =+  ("fixture labels: conformance.calendar-days.MaybeLocalDay.v1", validFixtureLabels cases) :+  ("canonical identity: conformance.calendar-days.MaybeLocalDay.v1", canonicalTypeName (Proxy @MaybeLocalDay) == "conformance.calendar-days.MaybeLocalDay.v1") :+  concat+    [ [ ("binding domain round-trip: conformance.calendar-days.MaybeLocalDay.v1/" <> T.unpack label, bindingDomainRoundTrip Bindings.maybeLocalDayBinding value)+      , ("binding shape round-trip: conformance.calendar-days.MaybeLocalDay.v1/" <> T.unpack label, bindingShapeRoundTrip Bindings.maybeLocalDayBinding (bindingToShape Bindings.maybeLocalDayBinding value))+      ]+    | (label, value) <- NonEmpty.toList cases+    ]+  where+    cases = fixtureCases Bindings.maybeLocalDayFixtures++coverageCalendarEnvelope :: Bool+coverageCalendarEnvelope = any (isNothing . (.optionalDay)) shapes && any (isJust . (.optionalDay)) shapes+  where+    shapes = map (bindingToShape Bindings.calendarEnvelopeBinding . snd) (NonEmpty.toList (fixtureCases Bindings.calendarEnvelopeFixtures))++coverageLocalDay :: Bool+coverageLocalDay = True++coverageMaybeLocalDay :: Bool+coverageMaybeLocalDay = any isNothing shapes && any isJust shapes+  where+    shapes = map (bindingToShape Bindings.maybeLocalDayBinding . snd) (NonEmpty.toList (fixtureCases Bindings.maybeLocalDayFixtures))
+ test/conformance-calendar-days/Main.hs view
@@ -0,0 +1,171 @@+module Main (main) where++import Conformance.CalendarDays.Bindings (localDayFixtures)+import Conformance.CalendarDays.Domain+import Conformance.CalendarDays.Historical (historicalLocalDayCodec, historicalMaybeLocalDayCodec)+import Control.Monad (forM_, unless)+import Data.Aeson (Value (..))+import Data.Aeson.Key qualified as Key+import Data.Aeson.KeyMap qualified as KeyMap+import Data.Either (isLeft)+import Data.List.NonEmpty qualified as NonEmpty+import Data.Map.Strict qualified as Map+import Data.Time.Calendar (fromGregorian)+import Generated.CalendarDays.CalendarJobs.Queue (CalendarJob (..), encodeCalendarJob, parseCalendarJob)+import Generated.CalendarDays.CalendarLookup.QueryContract (CalendarLookupQueryInput, CalendarLookupQueryResult)+import Generated.CalendarDays.CalendarStore.Codec+import Generated.CalendarDays.CalendarStore.Domain+import Generated.CalendarDays.CalendarStore.Harness (harnessAssertions)+import Generated.CalendarDays.Structural.CodecCompare.MaybeLocalDay (compareWithHistorical)+import Generated.CalendarDays.StructuralConformance (structuralConformanceAssertions)+import Keiro.Codec (eventType)+import Keiro.Codec.Structural qualified+import Keiro.Dsl.CodecCompare (CompareObservation (..), DecodeOutcome (..), FixtureVerdict (..), HistoricalCodec (..), classifyObservation, reportSucceeded)+import System.Exit (exitFailure)++main :: IO ()+main = do+  comparison <-+    compareWithHistorical+      historicalMaybeLocalDayCodec+      "test/conformance-calendar-days/fixtures/codec-compare"+  let assertions =+        [("structural/" <> label, passed) | (label, passed) <- structuralConformanceAssertions]+          <> harnessAssertions+          <> [ ("bare Day uses canonical calendar bytes", localDayWire),+               ("historical Aeson LocalDay writer matches generated bytes", historicalLocalDayParity),+               ("old Aeson readers reject new extended-year writes and require producer-last rollout", oldReaderNewWriterLimitation),+               ("invalid Gregorian dates are rejected", invalidDatesRejected),+               ("historical non-canonical spellings normalize", historicalSpellingsNormalize),+               ("a narrowed date reader is compatibility work", narrowedReaderRefused),+               ("a date-to-midnight conversion is compatibility work", midnightConversionRefused),+               ("root optional date fields treat omission and null alike", rootOptionalAbsenceEquivalence),+               ("non-optional date fields still reject omission", nonOptionalRootStrict),+               ("nested list and map dates round-trip", nestedRoundTrip),+               ("queue payloads preserve calendar-day mappings", queueRoundTrip),+               ("query contracts preserve calendar-day domain types", queryAgreement),+               ("historical MaybeLocalDay codec comparison succeeds", reportSucceeded comparison)+             ]+  forM_ assertions $ \(label, passed) ->+    putStrLn ((if passed then "PASS  " else "FAIL  ") <> label)+  unless (all snd assertions) exitFailure++localDayWire :: Bool+localDayWire =+  encodeLocalDayMapped value == String "2000-02-29"+    && decodeLocalDayMapped (String "2000-02-29") == Right value+    && encodeLocalDayMapped (LocalDay (fromGregorian 0 1 1)) == String "0000-01-01"+    && encodeLocalDayMapped (LocalDay (fromGregorian (-1) 1 1)) == String "-0001-01-01"+    && encodeLocalDayMapped (LocalDay (fromGregorian 12345678901234567890 6 30)) == String "12345678901234567890-06-30"+  where+    value = LocalDay (fromGregorian 2000 2 29)++historicalLocalDayParity :: Bool+historicalLocalDayParity =+  all+    (\(label, value) -> classifyObservation (EncodeObservation label (historicalLocalDayCodec.encode value) (encodeLocalDayMapped value)) == Right JsonParity)+    (NonEmpty.toList (Keiro.Codec.Structural.fixtureCases localDayFixtures))++oldReaderNewWriterLimitation :: Bool+oldReaderNewWriterLimitation =+  isLeft+    ( historicalLocalDayCodec.decode+        (encodeLocalDayMapped (LocalDay (fromGregorian 12345678901234567890 6 30)))+    )++invalidDatesRejected :: Bool+invalidDatesRejected =+  all (isLeft . decodeLocalDayMapped . String) ["1900-02-29", "2026-02-30", "2026-13-01", "2026-01-00"]++historicalSpellingsNormalize :: Bool+historicalSpellingsNormalize =+  decodeLocalDayMapped (String "+002000-02-29") == Right value+    && encodeLocalDayMapped value == String "2000-02-29"+    && decodeLocalDayMapped (String "00000000-01-01") == Right (LocalDay (fromGregorian 0 1 1))+  where+    value = LocalDay (fromGregorian 2000 2 29)++narrowedReaderRefused :: Bool+narrowedReaderRefused =+  case+      classifyObservation+        ( DecodeObservation+            "historical-plus-year.json"+            (String "+002000-02-29")+            (DecodedShape (String "2000-02-29"))+            (DecodeFailed "candidate reader rejected the historical spelling")+        )+    of+    Right (RequiresVersionWork _) -> True+    _ -> False++midnightConversionRefused :: Bool+midnightConversionRefused =+  case classifyObservation (EncodeObservation "midnight-coercion" (String "2000-02-29") (String "2000-02-29T00:00:00Z")) of+    Right (RequiresVersionWork _) -> True+    _ -> False++-- | Plan 295 found both spellings of absence in retained history -- omitted keys+-- and explicit nulls -- which historical Aeson decoding had always read as+-- 'Nothing'. A root 'Optional' mapped date field must therefore accept an+-- omitted key and decode it exactly as an explicit null.+rootOptionalAbsenceEquivalence :: Bool+rootOptionalAbsenceEquivalence =+  parseCalendarStoreEvent kind (deleteObjectField "optionalDay" encoded) == Right event+    && parseCalendarStoreEvent kind (insertObjectField "optionalDay" Null encoded) == Right event+  where+    event = DateStored (DateStoredData day (MaybeLocalDay Nothing) envelope)+    kind = eventType calendarStoreCodec event+    encoded = encodeCalendarStoreEvent event+    day = LocalDay (fromGregorian 2000 2 29)+    envelope = sampleEnvelope++-- | The equivalence above is scoped to root 'Optional' mapped fields. A+-- non-optional mapped root carries no absent spelling, so omitting it stays a+-- decode failure rather than defaulting.+nonOptionalRootStrict :: Bool+nonOptionalRootStrict =+  isLeft (parseCalendarStoreEvent kind (deleteObjectField "day" encoded))+    && isLeft (parseCalendarStoreEvent kind (deleteObjectField "envelope" encoded))+  where+    event = DateStored (DateStoredData day (MaybeLocalDay Nothing) envelope)+    kind = eventType calendarStoreCodec event+    encoded = encodeCalendarStoreEvent event+    day = LocalDay (fromGregorian 2000 2 29)+    envelope = sampleEnvelope++nestedRoundTrip :: Bool+nestedRoundTrip = decodeCalendarEnvelopeMapped (encodeCalendarEnvelopeMapped sampleEnvelope) == Right sampleEnvelope++queueRoundTrip :: Bool+queueRoundTrip = parseCalendarJob (encodeCalendarJob payload) == Right payload+  where+    payload = CalendarJob (LocalDay (fromGregorian 2000 2 29)) (MaybeLocalDay Nothing) sampleEnvelope++queryAgreement :: Bool+queryAgreement =+  queryInputIdentity (MaybeLocalDay (Just (fromGregorian 2000 2 29))) == MaybeLocalDay (Just (fromGregorian 2000 2 29))+    && queryResultIdentity sampleEnvelope == sampleEnvelope++queryInputIdentity :: CalendarLookupQueryInput -> MaybeLocalDay+queryInputIdentity = id++queryResultIdentity :: CalendarLookupQueryResult -> CalendarEnvelope+queryResultIdentity = id++sampleEnvelope :: CalendarEnvelope+sampleEnvelope =+  CalendarEnvelope+    (fromGregorian 2000 2 29)+    Nothing+    (MaybeLocalDay (Just (fromGregorian 0 1 1)))+    [fromGregorian 1900 2 28, fromGregorian 1900 3 1]+    (Map.fromList [("extended", fromGregorian 12345678901234567890 6 30)])++deleteObjectField :: Key.Key -> Value -> Value+deleteObjectField key (Object value) = Object (KeyMap.delete key value)+deleteObjectField _ value = value++insertObjectField :: Key.Key -> Value -> Value -> Value+insertObjectField key inserted (Object value) = Object (KeyMap.insert key inserted value)+insertObjectField _ _ value = value
+ test/conformance-calendar-days/README.md view
@@ -0,0 +1,35 @@+# Calendar-day conformance++This is the compiled public-authoring example for checked calendar-day mappings.+It uses `Data.Time.Calendar.Day` directly in a named bare mapping and inside a+structural record, `Optional`, `List`, and text-keyed `Map`; the same mapped+domain values cross aggregate command/event/register, workqueue, read-model+query, snapshot, event serialization, and strict multi-event replay surfaces.++The smallest consumer contract is a total `StructuralBinding` between each+domain type and its generated shape. Calendar validation and JSON ownership stay+in `Keiro.Codec.CalendarDay`; bindings do not convert through `Text`, `UTCTime`,+locale, timezone, or partial smart constructors.++| Surface | Calendar-day status |+| --- | --- |+| Bare and nested structural mappings | Supported and compiled here |+| Aggregate commands, private events, and registers | Supported through named mappings and strict replay evidence here |+| Workqueue payloads | Supported through named mappings and round-trip evidence here |+| Read-model query input/result types | Supported through named mappings and compiled aliases here |+| Cross-file workspace ownership | Supported by the common mapped-type ownership path; the workspace structural suite proves that path |+| Public contract fields | Application-owned codec boundary; no structural mapping syntax is implied |+| Process/workflow journals and effects | Application-owned codecs; sharing `Day` does not transfer journal ownership |+| Direct aggregate `Day` fields | Unsupported with a located diagnostic; use a named structural mapping |+| Nominal `Day` wrappers | Unsupported in this release |+| Date guards, ordering, and arithmetic | Unsupported in this release |++The JSON files under `fixtures/codec-compare` are repository fixtures modeled on+the consumer's Aeson 2.2 `Day` codec, not evidence from retained consumer+history. Real-history adoption and journal audit remain outside this suite.++Aeson 2.2's historical reader rejects years wider than fifteen digits while the+new full-carrier writer can emit them. The suite retains that failed+old-reader/new-writer direction explicitly. Rollout must therefore keep+extended-year writes disabled until old readers are retired (producer last);+historical-read success does not imply simultaneous-version write compatibility.
+ test/conformance-calendar-days/fixtures/codec-compare/historical-plus-year.json view
@@ -0,0 +1,1 @@+"+002000-02-29"
+ test/conformance-calendar-days/fixtures/codec-compare/leap-day.json view
@@ -0,0 +1,1 @@+"2000-02-29"
+ test/conformance-calendar-days/fixtures/codec-compare/nothing.json view
@@ -0,0 +1,1 @@+null
+ test/conformance-calendar-days/keiro-dsl-cabal-fragment.context.calendar-days.txt view
@@ -0,0 +1,60 @@+-- keiro-dsl build manifest for keiro-dsl/test/fixtures/calendar-days.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:+    CalendarDays.CalendarLookup.ReadModelHoles+    CalendarDays.CalendarStore.BehaviorHoles+    CalendarDays.ProjectionCatalog.ProjectionCatalogHoles+    Conformance.CalendarDays.Bindings+    Generated.CalendarDays.BehaviorSourceMap+    Generated.CalendarDays.CalendarJobs.Queue+    Generated.CalendarDays.CalendarJobs.QueueCodec+    Generated.CalendarDays.CalendarJobs.QueuePolicy+    Generated.CalendarDays.CalendarLookup.QueryContract+    Generated.CalendarDays.CalendarLookup.ReadModel+    Generated.CalendarDays.CalendarLookup.ReadModelHarness+    Generated.CalendarDays.CalendarLookup.ReadModelTable+    Generated.CalendarDays.CalendarStore.BehaviorContract+    Generated.CalendarDays.CalendarStore.Codec+    Generated.CalendarDays.CalendarStore.Domain+    Generated.CalendarDays.CalendarStore.EventStream+    Generated.CalendarDays.CalendarStore.Harness+    Generated.CalendarDays.CalendarStore.Projection+    Generated.CalendarDays.CalendarStore.Transducer+    Generated.CalendarDays.ProjectionCatalog+    Generated.CalendarDays.ReplayAudit+    Generated.CalendarDays.Structural.Shape.CalendarEnvelope+    Generated.CalendarDays.Structural.Shape.LocalDay+    Generated.CalendarDays.Structural.Shape.MaybeLocalDay+    Generated.CalendarDays.StructuralConformance++build-depends:+    , aeson+    , base+    , containers+    , effectful-core+    , hasql-transaction+    , keiki+    , keiro+    , keiro-core+    , keiro-dsl+    , keiro-pgmq+    , kiroku-store+    , text+    , time++consumer-packages:+    keiro-dsl++consumer-modules:+    Conformance.CalendarDays.Bindings+    Conformance.CalendarDays.Domain
+ test/conformance-calendar-days/keiro-dsl-ledger.context.calendar-days.txt view
@@ -0,0 +1,85 @@+keiro-dsl scaffold record v1+spec: keiro-dsl/test/fixtures/calendar-days.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 calendar-days structural conformance","path":"Generated/CalendarDays/StructuralConformance.hs"}+module-role {"family":"BehaviorSourceMap","kind":"generated","ownerKind":"context","ownerName":"context calendar-days behavior source map","path":"Generated/CalendarDays/BehaviorSourceMap.hs"}+module-role {"family":"CalendarEnvelope","kind":"generated","ownerKind":"mapped","ownerName":"mapped structural CalendarEnvelope (line 23)","path":"Generated/CalendarDays/Structural/Shape/CalendarEnvelope.hs"}+module-role {"family":"LocalDay","kind":"generated","ownerKind":"mapped","ownerName":"mapped structural LocalDay (line 4)","path":"Generated/CalendarDays/Structural/Shape/LocalDay.hs"}+module-role {"family":"MaybeLocalDay","kind":"generated","ownerKind":"mapped","ownerName":"mapped structural MaybeLocalDay (line 14)","path":"Generated/CalendarDays/Structural/Shape/MaybeLocalDay.hs"}+module-role {"family":"Bindings","kind":"hole","ownerKind":"consumer","ownerName":"consumer binding skeleton Conformance.CalendarDays.Bindings","path":"Conformance/CalendarDays/Bindings.hs"}+module-role {"family":"ReplayAudit","kind":"generated","ownerKind":"context","ownerName":"context calendar-days replay-audit assembly","path":"Generated/CalendarDays/ReplayAudit.hs"}+module-role {"family":"ProjectionCatalog","kind":"generated","ownerKind":"projection-catalog","ownerName":"projection-catalog calendar-days","path":"Generated/CalendarDays/ProjectionCatalog.hs"}+module-role {"family":"ProjectionCatalogHoles","kind":"hole","ownerKind":"projection-catalog","ownerName":"projection-catalog calendar-days","path":"CalendarDays/ProjectionCatalog/ProjectionCatalogHoles.hs"}+module-role {"family":"Domain","kind":"generated","ownerKind":"aggregate","ownerName":"aggregate CalendarStore (line 38)","path":"Generated/CalendarDays/CalendarStore/Domain.hs"}+module-role {"family":"Codec","kind":"generated","ownerKind":"aggregate","ownerName":"aggregate CalendarStore (line 38)","path":"Generated/CalendarDays/CalendarStore/Codec.hs"}+module-role {"family":"Transducer","kind":"generated","ownerKind":"aggregate","ownerName":"aggregate CalendarStore (line 38)","path":"Generated/CalendarDays/CalendarStore/Transducer.hs"}+module-role {"family":"BehaviorContract","kind":"generated","ownerKind":"aggregate","ownerName":"aggregate CalendarStore (line 38)","path":"Generated/CalendarDays/CalendarStore/BehaviorContract.hs"}+module-role {"family":"BehaviorHoles","kind":"hole","ownerKind":"aggregate","ownerName":"aggregate behavior witnesses CalendarStore (line 38)","path":"CalendarDays/CalendarStore/BehaviorHoles.hs"}+module-role {"family":"EventStream","kind":"generated","ownerKind":"aggregate","ownerName":"aggregate CalendarStore (line 38)","path":"Generated/CalendarDays/CalendarStore/EventStream.hs"}+module-role {"family":"Projection","kind":"generated","ownerKind":"aggregate","ownerName":"aggregate CalendarStore (line 38)","path":"Generated/CalendarDays/CalendarStore/Projection.hs"}+module-role {"family":"Harness","kind":"generated","ownerKind":"aggregate","ownerName":"aggregate CalendarStore (line 38)","path":"Generated/CalendarDays/CalendarStore/Harness.hs"}+module-role {"family":"Queue","kind":"generated","ownerKind":"workqueue","ownerName":"workqueue calendar_jobs (line 57)","path":"Generated/CalendarDays/CalendarJobs/Queue.hs"}+module-role {"family":"QueuePolicy","kind":"generated","ownerKind":"workqueue","ownerName":"workqueue calendar_jobs (line 57)","path":"Generated/CalendarDays/CalendarJobs/QueuePolicy.hs"}+module-role {"family":"QueueCodec","kind":"generated","ownerKind":"workqueue","ownerName":"workqueue calendar_jobs (line 57)","path":"Generated/CalendarDays/CalendarJobs/QueueCodec.hs"}+module-role {"family":"ReadModelTable","kind":"generated","ownerKind":"readmodel","ownerName":"readmodel calendar_lookup (line 99)","path":"Generated/CalendarDays/CalendarLookup/ReadModelTable.hs"}+module-role {"family":"QueryContract","kind":"generated","ownerKind":"readmodel","ownerName":"readmodel calendar_lookup (line 99)","path":"Generated/CalendarDays/CalendarLookup/QueryContract.hs"}+module-role {"family":"ReadModel","kind":"generated","ownerKind":"readmodel","ownerName":"readmodel calendar_lookup (line 99)","path":"Generated/CalendarDays/CalendarLookup/ReadModel.hs"}+module-role {"family":"ReadModelHoles","kind":"hole","ownerKind":"readmodel","ownerName":"readmodel calendar_lookup (line 99)","path":"CalendarDays/CalendarLookup/ReadModelHoles.hs"}+module-role {"family":"ReadModelHarness","kind":"generated","ownerKind":"readmodel","ownerName":"readmodel calendar_lookup (line 99)","path":"Generated/CalendarDays/CalendarLookup/ReadModelHarness.hs"}+generated Generated/CalendarDays/StructuralConformance.hs+generated Generated/CalendarDays/BehaviorSourceMap.hs+generated Generated/CalendarDays/Structural/Shape/CalendarEnvelope.hs+generated Generated/CalendarDays/Structural/Shape/LocalDay.hs+generated Generated/CalendarDays/Structural/Shape/MaybeLocalDay.hs+hole Conformance/CalendarDays/Bindings.hs+generated Generated/CalendarDays/ReplayAudit.hs+generated Generated/CalendarDays/ProjectionCatalog.hs+hole CalendarDays/ProjectionCatalog/ProjectionCatalogHoles.hs+generated Generated/CalendarDays/CalendarStore/Domain.hs+generated Generated/CalendarDays/CalendarStore/Codec.hs+generated Generated/CalendarDays/CalendarStore/Transducer.hs+generated Generated/CalendarDays/CalendarStore/BehaviorContract.hs+hole CalendarDays/CalendarStore/BehaviorHoles.hs+generated Generated/CalendarDays/CalendarStore/EventStream.hs+generated Generated/CalendarDays/CalendarStore/Projection.hs+generated Generated/CalendarDays/CalendarStore/Harness.hs+generated Generated/CalendarDays/CalendarJobs/Queue.hs+generated Generated/CalendarDays/CalendarJobs/QueuePolicy.hs+generated Generated/CalendarDays/CalendarJobs/QueueCodec.hs+generated Generated/CalendarDays/CalendarLookup/ReadModelTable.hs+generated Generated/CalendarDays/CalendarLookup/QueryContract.hs+generated Generated/CalendarDays/CalendarLookup/ReadModel.hs+hole CalendarDays/CalendarLookup/ReadModelHoles.hs+generated Generated/CalendarDays/CalendarLookup/ReadModelHarness.hs+mapping {"bindingSymbol":"Conformance.CalendarDays.Bindings.calendarEnvelopeBinding","bindingVersion":"1","canonicalType":"conformance.calendar-days.CalendarEnvelope.v1","mode":"structural","module":"Conformance.CalendarDays.Domain","package":"keiro-dsl","schema":1,"specName":"CalendarEnvelope","type":"CalendarEnvelope"}+mapping {"bindingSymbol":"Conformance.CalendarDays.Bindings.localDayBinding","bindingVersion":"1","canonicalType":"conformance.calendar-days.LocalDay.v1","mode":"structural","module":"Conformance.CalendarDays.Domain","package":"keiro-dsl","schema":1,"specName":"LocalDay","type":"LocalDay"}+mapping {"bindingSymbol":"Conformance.CalendarDays.Bindings.maybeLocalDayBinding","bindingVersion":"1","canonicalType":"conformance.calendar-days.MaybeLocalDay.v1","mode":"structural","module":"Conformance.CalendarDays.Domain","package":"keiro-dsl","schema":1,"specName":"MaybeLocalDay","type":"MaybeLocalDay"}+binding {"kind":"binding","mappedName":"CalendarEnvelope","module":"Conformance.CalendarDays.Bindings","path":"labelled","schema":1,"signature":"calendarEnvelopeBinding.labelled :: Map Text (Day)","symbol":"calendarEnvelopeBinding"}+binding {"kind":"binding","mappedName":"CalendarEnvelope","module":"Conformance.CalendarDays.Bindings","path":"namedOptional","schema":1,"signature":"calendarEnvelopeBinding.namedOptional :: MaybeLocalDay","symbol":"calendarEnvelopeBinding"}+binding {"kind":"binding","mappedName":"CalendarEnvelope","module":"Conformance.CalendarDays.Bindings","path":"optionalDay","schema":1,"signature":"calendarEnvelopeBinding.optionalDay :: Maybe (Day)","symbol":"calendarEnvelopeBinding"}+binding {"kind":"binding","mappedName":"CalendarEnvelope","module":"Conformance.CalendarDays.Bindings","path":"primary","schema":1,"signature":"calendarEnvelopeBinding.primary :: Day","symbol":"calendarEnvelopeBinding"}+binding {"kind":"binding","mappedName":"CalendarEnvelope","module":"Conformance.CalendarDays.Bindings","path":"sequence","schema":1,"signature":"calendarEnvelopeBinding.sequence :: [Day]","symbol":"calendarEnvelopeBinding"}+binding {"kind":"fixtures","mappedName":"CalendarEnvelope","module":"Conformance.CalendarDays.Bindings","path":null,"schema":1,"signature":"calendarEnvelopeFixtures :: FixtureCases Conformance.CalendarDays.Domain.CalendarEnvelope","symbol":"calendarEnvelopeFixtures"}+binding {"kind":"binding","mappedName":"LocalDay","module":"Conformance.CalendarDays.Bindings","path":"value","schema":1,"signature":"localDayBinding.value :: Day","symbol":"localDayBinding"}+binding {"kind":"fixtures","mappedName":"LocalDay","module":"Conformance.CalendarDays.Bindings","path":null,"schema":1,"signature":"localDayFixtures :: FixtureCases Conformance.CalendarDays.Domain.LocalDay","symbol":"localDayFixtures"}+binding {"kind":"initial-value","mappedName":"LocalDay","module":"Conformance.CalendarDays.Bindings","path":null,"schema":1,"signature":"initialLocalDay :: Conformance.CalendarDays.Domain.LocalDay","symbol":"initialLocalDay"}+binding {"kind":"binding","mappedName":"MaybeLocalDay","module":"Conformance.CalendarDays.Bindings","path":"value","schema":1,"signature":"maybeLocalDayBinding.value :: Maybe (Day)","symbol":"maybeLocalDayBinding"}+binding {"kind":"fixtures","mappedName":"MaybeLocalDay","module":"Conformance.CalendarDays.Bindings","path":null,"schema":1,"signature":"maybeLocalDayFixtures :: FixtureCases Conformance.CalendarDays.Domain.MaybeLocalDay","symbol":"maybeLocalDayFixtures"}+behavior {"aggregate":"CalendarStore","command":"StoreDate","evidence":"generated-authoritative","key":"behavior-v1-81c1074e5cad73be","kind":"required-rejection","outputs":[],"source":"Stored"}+behavior {"aggregate":"CalendarStore","command":"StoreDate","evidence":"generated-authoritative","key":"behavior-v1-8a6ce5ac60391741","kind":"live-transition","outputs":[{"command":"StoreDate","ownership":"generated-command-identity"},{"command":"StoreDate","ownership":"generated-command-identity"}],"source":"Empty"}+projection-catalog-fact cursor|calendar_lookup|calendar-writer|99+projection-catalog-fact delivery|calendar_writer|subscription|87+projection-catalog-fact freshness|calendar_lookup|wait-for-head:entire-log|99+projection-catalog-fact group|calendar_rebuild|calendar_table|calendar_table|82+projection-catalog-fact owner|calendar_writer|all|calendar_rebuild|calendar_table|10|calendar-writer|calendar-writer-v1|from-beginning|explicit|87+projection-catalog-fact query|calendar_lookup|calendar_rebuild|calendar_table|calendar_table|99+projection-catalog-fact supply|calendar_lookup|calendar_writer|calendar_rebuild|calendar_table|99|87+projection-catalog-fact target|calendar_table|public|calendar_values|clear||76+query-contract-baseline v1+query-contract {"mappedDependencies":["MaybeLocalDay"],"position":"input","readModel":"calendar_lookup","typeExpression":"MaybeLocalDay"}+query-contract {"mappedDependencies":["CalendarEnvelope","MaybeLocalDay"],"position":"result","readModel":"calendar_lookup","typeExpression":"CalendarEnvelope"}+semantic-impact {"declarations":[{"consequences":[{"consumer":"CalendarStore","kind":"consumer-build"},{"consumer":"workqueue:calendar_jobs","kind":"consumer-build"},{"consumer":"read-model-query:calendar_lookup:result","kind":"consumer-build"},{"aggregate":"CalendarStore","kind":"private-event-history"},{"kind":"workqueue-history","workqueue":"calendar_jobs"},{"kind":"query-api","position":"result","readModel":"calendar_lookup"}],"consumerEvidence":[{"consumer":"CalendarStore","operation":null,"path":"CalendarStore command StoreDate .envelope : CalendarEnvelope","surface":"aggregate-command"},{"consumer":"CalendarStore","operation":null,"path":"CalendarStore event DateAudited .envelope : CalendarEnvelope","surface":"private-event-payload"},{"consumer":"CalendarStore","operation":null,"path":"CalendarStore event DateStored .envelope : CalendarEnvelope","surface":"private-event-payload"},{"consumer":"workqueue:calendar_jobs","operation":null,"path":"workqueue calendar_jobs payload .envelope : CalendarEnvelope","surface":"workqueue-payload"},{"consumer":"read-model-query:calendar_lookup:result","operation":null,"path":"readmodel calendar_lookup query result : CalendarEnvelope","surface":"read-model-query-result"}],"consumers":["CalendarStore","workqueue:calendar_jobs","read-model-query:calendar_lookup:result"],"declaration":"CalendarEnvelope","identity":"structural\u001fkeiro-dsl:Conformance.CalendarDays.Domain:CalendarEnvelope\u001fConformance.CalendarDays.Bindings.calendarEnvelopeBinding\u001f1\u001fconformance.calendar-days.CalendarEnvelope.v1\u001fConformance.CalendarDays.Bindings.calendarEnvelopeFixtures\u001f\u001fe73efd6bd0ecfd9b\u001frecord:CalendarEnvelope:labelled=labelled,namedOptional=namedOptional,optionalDay=optionalDay,primary=primary,sequence=sequence"},{"consequences":[{"consumer":"CalendarStore","kind":"consumer-build"},{"consumer":"workqueue:calendar_jobs","kind":"consumer-build"},{"aggregate":"CalendarStore","kind":"private-event-history"},{"aggregate":"CalendarStore","kind":"snapshot-hydration"},{"kind":"workqueue-history","workqueue":"calendar_jobs"}],"consumerEvidence":[{"consumer":"CalendarStore","operation":null,"path":"CalendarStore command StoreDate .day : LocalDay","surface":"aggregate-command"},{"consumer":"CalendarStore","operation":null,"path":"CalendarStore event DateAudited .day : LocalDay","surface":"private-event-payload"},{"consumer":"CalendarStore","operation":null,"path":"CalendarStore event DateStored .day : LocalDay","surface":"private-event-payload"},{"consumer":"CalendarStore","operation":null,"path":"CalendarStore register current : LocalDay","surface":"snapshot-register"},{"consumer":"workqueue:calendar_jobs","operation":null,"path":"workqueue calendar_jobs payload .day : LocalDay","surface":"workqueue-payload"}],"consumers":["CalendarStore","workqueue:calendar_jobs"],"declaration":"LocalDay","identity":"structural\u001fkeiro-dsl:Conformance.CalendarDays.Domain:LocalDay\u001fConformance.CalendarDays.Bindings.localDayBinding\u001f1\u001fconformance.calendar-days.LocalDay.v1\u001fConformance.CalendarDays.Bindings.localDayFixtures\u001fConformance.CalendarDays.Bindings.initialLocalDay\u001f4500842d290242c3\u001fvalue:Day"},{"consequences":[{"consumer":"CalendarStore","kind":"consumer-build"},{"consumer":"workqueue:calendar_jobs","kind":"consumer-build"},{"consumer":"read-model-query:calendar_lookup:input","kind":"consumer-build"},{"consumer":"read-model-query:calendar_lookup:result","kind":"consumer-build"},{"aggregate":"CalendarStore","kind":"private-event-history"},{"kind":"workqueue-history","workqueue":"calendar_jobs"},{"kind":"query-api","position":"input","readModel":"calendar_lookup"},{"kind":"query-api","position":"result","readModel":"calendar_lookup"}],"consumerEvidence":[{"consumer":"CalendarStore","operation":null,"path":"CalendarStore command StoreDate .envelope : CalendarEnvelope .namedOptional : MaybeLocalDay","surface":"aggregate-command"},{"consumer":"CalendarStore","operation":null,"path":"CalendarStore command StoreDate .optionalDay : MaybeLocalDay","surface":"aggregate-command"},{"consumer":"CalendarStore","operation":null,"path":"CalendarStore event DateAudited .envelope : CalendarEnvelope .namedOptional : MaybeLocalDay","surface":"private-event-payload"},{"consumer":"CalendarStore","operation":null,"path":"CalendarStore event DateAudited .optionalDay : MaybeLocalDay","surface":"private-event-payload"},{"consumer":"CalendarStore","operation":null,"path":"CalendarStore event DateStored .envelope : CalendarEnvelope .namedOptional : MaybeLocalDay","surface":"private-event-payload"},{"consumer":"CalendarStore","operation":null,"path":"CalendarStore event DateStored .optionalDay : MaybeLocalDay","surface":"private-event-payload"},{"consumer":"workqueue:calendar_jobs","operation":null,"path":"workqueue calendar_jobs payload .envelope : CalendarEnvelope .namedOptional : MaybeLocalDay","surface":"workqueue-payload"},{"consumer":"workqueue:calendar_jobs","operation":null,"path":"workqueue calendar_jobs payload .optionalDay : MaybeLocalDay","surface":"workqueue-payload"},{"consumer":"read-model-query:calendar_lookup:input","operation":null,"path":"readmodel calendar_lookup query input : MaybeLocalDay","surface":"read-model-query-input"},{"consumer":"read-model-query:calendar_lookup:result","operation":null,"path":"readmodel calendar_lookup query result : CalendarEnvelope .namedOptional : MaybeLocalDay","surface":"read-model-query-result"}],"consumers":["CalendarStore","workqueue:calendar_jobs","read-model-query:calendar_lookup:input","read-model-query:calendar_lookup:result"],"declaration":"MaybeLocalDay","identity":"structural\u001fkeiro-dsl:Conformance.CalendarDays.Domain:MaybeLocalDay\u001fConformance.CalendarDays.Bindings.maybeLocalDayBinding\u001f1\u001fconformance.calendar-days.MaybeLocalDay.v1\u001fConformance.CalendarDays.Bindings.maybeLocalDayFixtures\u001f\u001fc28177c9398266fc\u001fvalue:Optional(Day)"}],"mappedSurfaceEvidenceVersion":1,"serviceInventory":["CalendarEnvelope","LocalDay","MaybeLocalDay"]}
+ test/conformance-checked-mapping-replay/CheckedMappingReplay/ProjectionCatalog/ProjectionCatalogHoles.hs view
@@ -0,0 +1,23 @@+-- This is a HAND-OWNED hole module. keiro-dsl creates it once and never overwrites it.+module CheckedMappingReplay.ProjectionCatalog.ProjectionCatalogHoles+  ( ReplayWriterEvent (..)+  , applyReplayWriterLive+  , replayWriterIdempotencyKey+  , applyReplayWriterReplay+  , decodeReplayWriterReplay+  ) where++import Hasql.Transaction qualified as Tx+import Keiro.Projection.Catalog qualified as Catalog+import Kiroku.Store.Types (EventId, RecordedEvent)++-- Projection owner replay_writer (order 10).+data ReplayWriterEvent = ReplayWriterEvent+applyReplayWriterLive :: RecordedEvent -> Tx.Transaction ()+applyReplayWriterLive = error "HOLE: fill replay_writer live apply"+replayWriterIdempotencyKey :: RecordedEvent -> EventId+replayWriterIdempotencyKey = error "HOLE: return the durable event id for replay_writer"+decodeReplayWriterReplay :: RecordedEvent -> Catalog.ReplayDecodeResult ReplayWriterEvent+decodeReplayWriterReplay = error "HOLE: classify and decode every replay_writer source event"+applyReplayWriterReplay :: ReplayWriterEvent -> RecordedEvent -> Tx.Transaction ()+applyReplayWriterReplay = error "HOLE: fill replay_writer replay apply without live-only side effects"
+ test/conformance-checked-mapping-replay/CheckedMappingReplay/ReplayLedger/BehaviorHoles.hs view
@@ -0,0 +1,13 @@+-- Consumer-owned behavioral witnesses. Created once; never overwritten.+module CheckedMappingReplay.ReplayLedger.BehaviorHoles (behaviorWitnesses) where++import Generated.CheckedMappingReplay.ReplayLedger.BehaviorContract++behaviorWitnesses :: [BehaviorWitness]+behaviorWitnesses =+  [ Pending (BehaviorKey "behavior-v1-00d5b6d8d0fc6ef2") -- ReplayLedgerEmpty x ImportLegacy: replay-only transition+  , Pending (BehaviorKey "behavior-v1-9846660db9e83048") -- ReplayLedgerEmpty x ImportLegacy: required rejection+  , Pending (BehaviorKey "behavior-v1-cf9c72cd877a5085") -- ReplayLedgerEmpty x Record: live transition+  , Pending (BehaviorKey "behavior-v1-e88b4f5c37ef8bf2") -- ReplayLedgerRecorded x Record: required rejection+  , Pending (BehaviorKey "behavior-v1-efa5614712549991") -- ReplayLedgerRecorded x ImportLegacy: required rejection+  ]
+ test/conformance-checked-mapping-replay/CheckedMappingReplay/ReplayLookup/ReadModelHoles.hs view
@@ -0,0 +1,14 @@+-- This is a HAND-OWNED hole module. keiro-dsl creates it once and never overwrites it.+module CheckedMappingReplay.ReplayLookup.ReadModelHoles+  ( replayLookupQuery+  ) where++import Generated.CheckedMappingReplay.ReplayLookup.ReadModelTable (replayLookupQualifiedTable)+import Generated.CheckedMappingReplay.ReplayLookup.QueryContract (ReplayLookupQueryInput, ReplayLookupQueryResult)+import Hasql.Transaction qualified as Tx++-- HOLE: query "public"."checked_mapping_replay" via replayLookupQualifiedTable; never rely on search_path.+-- The generated QueryContract owns query input/result type identity.+-- Declared columns:+replayLookupQuery :: ReplayLookupQueryInput -> Tx.Transaction ReplayLookupQueryResult+replayLookupQuery _input = replayLookupQualifiedTable `seq` error "HOLE: fill replay_lookup query"
+ test/conformance-checked-mapping-replay/CheckedMappingReplay/ReplayReaction/ProcessHoles.hs view
@@ -0,0 +1,11 @@+-- keiro-dsl process-hole contract v1+-- HAND-OWNED typed decoder; created once and never overwritten.+module CheckedMappingReplay.ReplayReaction.ProcessHoles (decodeReplayReactionInput) where++import Data.Aeson (parseJSON)+import Data.Aeson.Types (parseMaybe)+import Generated.CheckedMappingReplay.ReplayReaction.Input (ReplayReactionInput)+import Kiroku.Store.Types (RecordedEvent (..))++decodeReplayReactionInput :: RecordedEvent -> Maybe ReplayReactionInput+decodeReplayReactionInput RecordedEvent {payload} = parseMaybe parseJSON payload
+ test/conformance-checked-mapping-replay/CheckedMappingReplay/ReplayTarget/BehaviorHoles.hs view
@@ -0,0 +1,9 @@+-- Consumer-owned behavioral witnesses. Created once; never overwritten.+module CheckedMappingReplay.ReplayTarget.BehaviorHoles (behaviorWitnesses) where++import Generated.CheckedMappingReplay.ReplayTarget.BehaviorContract++behaviorWitnesses :: [BehaviorWitness]+behaviorWitnesses =+  [ Pending (BehaviorKey "behavior-v1-756d75346570c343") -- ReplayTargetReady x Store: live transition+  ]
+ test/conformance-checked-mapping-replay/Conformance/CheckedMappingReplay/Bindings.hs view
@@ -0,0 +1,200 @@+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE LambdaCase #-}++-- This is a HAND-OWNED consumer binding skeleton. keiro-dsl creates it once+-- and never overwrites it. Fill each HOLE and run the generated harness.+module Conformance.CheckedMappingReplay.Bindings (+    textLabelsFixtures+  , textLabelsBinding+  , initialReplayEnvelope+  , replayEnvelopeFixtures+  , replayEnvelopeBinding+  , maybeLabelFixtures+  , maybeLabelBinding+  , maybeContentHashFixtures+  , maybeContentHashBinding+  , importantDaysFixtures+  , importantDaysBinding+  , contentHashFixtures+  , contentHashBinding+) where++import Conformance.CheckedMappingReplay.Domain (ContentHash, ImportantDays, MaybeContentHash, MaybeLabel, ReplayEnvelope, TextLabels)+import Conformance.CheckedMappingReplay.Domain qualified as Domain+import Generated.CheckedMappingReplay.Structural.Shape.ContentHash qualified as ShapeContentHash+import Generated.CheckedMappingReplay.Structural.Shape.ImportantDays qualified as ShapeImportantDays+import Generated.CheckedMappingReplay.Structural.Shape.MaybeContentHash qualified as ShapeMaybeContentHash+import Generated.CheckedMappingReplay.Structural.Shape.MaybeLabel qualified as ShapeMaybeLabel+import Generated.CheckedMappingReplay.Structural.Shape.ReplayEnvelope qualified as ShapeReplayEnvelope+import Generated.CheckedMappingReplay.Structural.Shape.TextLabels qualified as ShapeTextLabels+import Data.ByteString qualified as BS+import Data.List.NonEmpty (NonEmpty (..))+import Data.Map.Strict qualified as Map+import Data.Set qualified as Set+import Data.Text (Text)+import Data.Time.Calendar (fromGregorian)+import Generated.CheckedMappingReplay.Nominals (RetainedId, parseRetainedId)+import Keiro.Codec.Structural (FixtureCases (..), StructuralBinding (..))++-- HOLE: provide deterministic labelled conformance fixtures for TextLabels+textLabelsFixtures :: FixtureCases TextLabels+textLabelsFixtures =+  FixtureCases+    ( ("empty", Domain.TextLabels Set.empty)+        :| [ ("ordinary", Domain.TextLabels (Set.fromList ["a", "b"])),+             ("code-point-order", Domain.TextLabels (Set.fromList ["\x10000", "\xE000", "ä", "a\x0308", "a", "A"]))+           ]+    )++-- HOLE: complete both total directions; wire policy remains in the generated codec.+textLabelsBinding :: StructuralBinding TextLabels ShapeTextLabels.TextLabelsShape+textLabelsBinding =+  StructuralBinding+    { bindingToShape = \case+      Domain.TextLabels value -> value+    , bindingFromShape = \case+      value -> Domain.TextLabels value+    }++-- HOLE: provide the initial register value for ReplayEnvelope+initialReplayEnvelope :: ReplayEnvelope+initialReplayEnvelope =+  Domain.ReplayEnvelope+    (Domain.MaybeLabel Nothing)+    (Domain.ImportantDays [fromGregorian 1970 1 1])+    (Domain.TextLabels Set.empty)+    (Domain.MaybeContentHash Nothing)+    retainedV7+    (Map.singleton retainedV7 "current")+    Nothing++-- HOLE: provide deterministic labelled conformance fixtures for ReplayEnvelope+replayEnvelopeFixtures :: FixtureCases ReplayEnvelope+replayEnvelopeFixtures =+  FixtureCases+    ( ("initial", initialReplayEnvelope)+        :| [+             ( "mixed-history",+               Domain.ReplayEnvelope+                 (Domain.MaybeLabel (Just "retained"))+                 (Domain.ImportantDays [fromGregorian 2000 2 29, fromGregorian 12345678901234567890 6 30])+                 (Domain.TextLabels (Set.fromList ["b", "a"]))+                 (Domain.MaybeContentHash (Just (bytes [0, 175])))+                 retainedV5+                 (Map.fromList [(retainedV5, "historical-v5"), (retainedV7, "current-v7")])+                 (Just (Set.fromList ["optional", "labels"]))+             )+           ]+    )++-- HOLE: complete both total directions; wire policy remains in the generated codec.+replayEnvelopeBinding :: StructuralBinding ReplayEnvelope ShapeReplayEnvelope.ReplayEnvelopeShape+replayEnvelopeBinding =+  StructuralBinding+    { bindingToShape = \case+      Domain.ReplayEnvelope labelValue daysValue labelsValue contentHashValue primaryValue identitiesValue optionalLabelsValue ->+        ShapeReplayEnvelope.ReplayEnvelope+          (bindingToShape maybeLabelBinding labelValue)+          (bindingToShape importantDaysBinding daysValue)+          (bindingToShape textLabelsBinding labelsValue)+          (bindingToShape maybeContentHashBinding contentHashValue)+          primaryValue+          identitiesValue+          optionalLabelsValue+    , bindingFromShape = \case+      ShapeReplayEnvelope.ReplayEnvelope labelValue daysValue labelsValue contentHashValue primaryValue identitiesValue optionalLabelsValue ->+        Domain.ReplayEnvelope+          (bindingFromShape maybeLabelBinding labelValue)+          (bindingFromShape importantDaysBinding daysValue)+          (bindingFromShape textLabelsBinding labelsValue)+          (bindingFromShape maybeContentHashBinding contentHashValue)+          primaryValue+          identitiesValue+          optionalLabelsValue+    }++-- HOLE: provide deterministic labelled conformance fixtures for MaybeLabel+maybeLabelFixtures :: FixtureCases MaybeLabel+maybeLabelFixtures = FixtureCases (("absent", Domain.MaybeLabel Nothing) :| [("present", Domain.MaybeLabel (Just "label"))])++-- HOLE: complete both total directions; wire policy remains in the generated codec.+maybeLabelBinding :: StructuralBinding MaybeLabel ShapeMaybeLabel.MaybeLabelShape+maybeLabelBinding =+  StructuralBinding+    { bindingToShape = \case+      Domain.MaybeLabel value -> value+    , bindingFromShape = \case+      value -> Domain.MaybeLabel value+    }++-- HOLE: provide deterministic labelled conformance fixtures for MaybeContentHash+maybeContentHashFixtures :: FixtureCases MaybeContentHash+maybeContentHashFixtures =+  FixtureCases+    ( ("absent", Domain.MaybeContentHash Nothing)+        :| [("empty", Domain.MaybeContentHash (Just (bytes []))), ("leading-zero", Domain.MaybeContentHash (Just (bytes [0, 175])))]+    )++-- HOLE: complete both total directions; wire policy remains in the generated codec.+maybeContentHashBinding :: StructuralBinding MaybeContentHash ShapeMaybeContentHash.MaybeContentHashShape+maybeContentHashBinding =+  StructuralBinding+    { bindingToShape = \case+      Domain.MaybeContentHash value -> (\(Domain.ContentHash rawBytes) -> rawBytes) <$> value+    , bindingFromShape = \case+      value -> Domain.MaybeContentHash (Domain.ContentHash <$> value)+    }++-- HOLE: provide deterministic labelled conformance fixtures for ImportantDays+importantDaysFixtures :: FixtureCases ImportantDays+importantDaysFixtures =+  FixtureCases+    ( ("empty", Domain.ImportantDays [])+        :| [ ("leap-day", Domain.ImportantDays [fromGregorian 2000 2 29]),+             ("full-carrier", Domain.ImportantDays [fromGregorian (-1) 1 1, fromGregorian 12345678901234567890 6 30])+           ]+    )++-- HOLE: complete both total directions; wire policy remains in the generated codec.+importantDaysBinding :: StructuralBinding ImportantDays ShapeImportantDays.ImportantDaysShape+importantDaysBinding =+  StructuralBinding+    { bindingToShape = \case+      Domain.ImportantDays value -> value+    , bindingFromShape = \case+      value -> Domain.ImportantDays value+    }++-- HOLE: provide deterministic labelled conformance fixtures for ContentHash+contentHashFixtures :: FixtureCases ContentHash+contentHashFixtures =+  FixtureCases+    ( ("empty", bytes [])+        :| [("leading-zero", bytes [0, 175]), ("arbitrary-length", bytes [0, 17, 34, 51, 68])]+    )++-- HOLE: complete both total directions; wire policy remains in the generated codec.+contentHashBinding :: StructuralBinding ContentHash ShapeContentHash.ContentHashShape+contentHashBinding =+  StructuralBinding+    { bindingToShape = \case+      Domain.ContentHash value -> value+    , bindingFromShape = \case+      value -> Domain.ContentHash value+    }++retainedV5Text, retainedV7Text :: Text+retainedV5Text = "retained_58kj0y515rbwebzaxwzzknjqnk"+retainedV7Text = "retained_01h455vb4pex5vsknk084sn02q"++retainedV5, retainedV7 :: RetainedId+retainedV5 = committedId retainedV5Text+retainedV7 = committedId retainedV7Text++bytes :: [Word] -> ContentHash+bytes = Domain.ContentHash . BS.pack . map fromIntegral++committedId :: Text -> RetainedId+committedId value = case parseRetainedId value of+  Right parsed -> parsed+  Left reason -> error ("invalid committed RetainedId fixture: " <> show reason)
+ test/conformance-checked-mapping-replay/Conformance/CheckedMappingReplay/Domain.hs view
@@ -0,0 +1,113 @@+{-# LANGUAGE DeriveAnyClass #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}++module Conformance.CheckedMappingReplay.Domain where++import Data.Aeson (FromJSON (..), ToJSON (..), Value (..), object, withObject, (.:), (.=))+import Data.Aeson.Key qualified as Key+import Data.Aeson.KeyMap qualified as KeyMap+import Data.Aeson.Types (Parser)+import Data.ByteString (ByteString)+import Data.Map.Strict (Map)+import Data.Map.Strict qualified as Map+import Data.Proxy (Proxy)+import Data.Set (Set)+import Data.Text (Text)+import Data.Time.Calendar (Day)+import GHC.Generics (Generic)+import Generated.CheckedMappingReplay.Nominals (RetainedId, parseRetainedId, retainedIdText)+import Keiki.Shape (CanonicalTypeName (..))+import Keiro.Codec.Refined (encodeBase16Bytes, parseBase16Bytes)++newtype MaybeLabel = MaybeLabel {unMaybeLabel :: Maybe Text}+  deriving stock (Eq, Generic, Show)+  deriving newtype (FromJSON, ToJSON)++instance CanonicalTypeName MaybeLabel where+  canonicalTypeName :: Proxy MaybeLabel -> Text+  canonicalTypeName _ = "conformance.checked-mapping-replay.MaybeLabel.v1"++newtype ImportantDays = ImportantDays {unImportantDays :: [Day]}+  deriving stock (Eq, Generic, Show)+  deriving newtype (FromJSON, ToJSON)++instance CanonicalTypeName ImportantDays where+  canonicalTypeName :: Proxy ImportantDays -> Text+  canonicalTypeName _ = "conformance.checked-mapping-replay.ImportantDays.v1"++newtype TextLabels = TextLabels {unTextLabels :: Set Text}+  deriving stock (Eq, Generic, Show)+  deriving newtype (FromJSON, ToJSON)++instance CanonicalTypeName TextLabels where+  canonicalTypeName :: Proxy TextLabels -> Text+  canonicalTypeName _ = "conformance.checked-mapping-replay.TextLabels.v1"++newtype ContentHash = ContentHash {unContentHash :: ByteString}+  deriving stock (Eq, Generic, Show)++instance ToJSON ContentHash where+  toJSON (ContentHash bytes) = encodeBase16Bytes bytes++instance FromJSON ContentHash where+  parseJSON value = ContentHash <$> parseBase16Bytes value++instance CanonicalTypeName ContentHash where+  canonicalTypeName :: Proxy ContentHash -> Text+  canonicalTypeName _ = "conformance.checked-mapping-replay.ContentHash.v1"++newtype MaybeContentHash = MaybeContentHash {unMaybeContentHash :: Maybe ContentHash}+  deriving stock (Eq, Generic, Show)+  deriving anyclass (FromJSON, ToJSON)++instance CanonicalTypeName MaybeContentHash where+  canonicalTypeName :: Proxy MaybeContentHash -> Text+  canonicalTypeName _ = "conformance.checked-mapping-replay.MaybeContentHash.v1"++data ReplayEnvelope = ReplayEnvelope+  { label :: !MaybeLabel,+    days :: !ImportantDays,+    labels :: !TextLabels,+    contentHash :: !MaybeContentHash,+    primary :: !RetainedId,+    identities :: !(Map RetainedId Text),+    optionalLabels :: !(Maybe (Set Text))+  }+  deriving stock (Eq, Generic, Show)++instance ToJSON ReplayEnvelope where+  toJSON (ReplayEnvelope labelValue daysValue labelsValue contentHashValue primaryValue identitiesValue optionalLabelsValue) =+    object+      [ "label" .= labelValue,+        "days" .= daysValue,+        "labels" .= labelsValue,+        "contentHash" .= contentHashValue,+        "primary" .= retainedIdText primaryValue,+        "identities" .= Object (KeyMap.fromList [(Key.fromText (retainedIdText key), toJSON value) | (key, value) <- Map.toList identitiesValue]),+        "optionalLabels" .= optionalLabelsValue+      ]++instance FromJSON ReplayEnvelope where+  parseJSON = withObject "ReplayEnvelope" $ \value ->+    ReplayEnvelope+      <$> value .: "label"+      <*> value .: "days"+      <*> value .: "labels"+      <*> value .: "contentHash"+      <*> (value .: "primary" >>= either (fail . show) pure . parseRetainedId)+      <*> (value .: "identities" >>= parseIdentityMap)+      <*> value .: "optionalLabels"++parseIdentityMap :: Value -> Parser (Map RetainedId Text)+parseIdentityMap = withObject "Map RetainedId Text" $ \value ->+  Map.fromList <$> traverse parseEntry (KeyMap.toList value)+  where+    parseEntry (rawKey, rawValue) = do+      key <- either (fail . show) pure (parseRetainedId (Key.toText rawKey))+      item <- parseJSON rawValue+      pure (key, item)++instance CanonicalTypeName ReplayEnvelope where+  canonicalTypeName :: Proxy ReplayEnvelope -> Text+  canonicalTypeName _ = "conformance.checked-mapping-replay.ReplayEnvelope.v1"
+ test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/BehaviorSourceMap.hs view
@@ -0,0 +1,34 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from context checked-mapping-replay behavior source map; do not edit.+module Generated.CheckedMappingReplay.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-00d5b6d8d0fc6ef2" -> Just (BehaviorSourceLocation "domain/service.keiro" 23 3)+  "behavior-v1-756d75346570c343" -> Just (BehaviorSourceLocation "domain/service.keiro" 39 3)+  "behavior-v1-9846660db9e83048" -> Just (BehaviorSourceLocation "domain/service.keiro" 8 10)+  "behavior-v1-cf9c72cd877a5085" -> Just (BehaviorSourceLocation "domain/service.keiro" 16 3)+  "behavior-v1-e88b4f5c37ef8bf2" -> Just (BehaviorSourceLocation "domain/service.keiro" 8 16)+  "behavior-v1-efa5614712549991" -> Just (BehaviorSourceLocation "domain/service.keiro" 8 16)+  _ -> 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
+ test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Nominals.hs view
@@ -0,0 +1,9 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from context checked-mapping-replay generated nominal declarations; do not edit.+module Generated.CheckedMappingReplay.Nominals+  ( RetainedId+  , parseRetainedId+  , mkRetainedId+  , retainedIdText+  ) where++import Generated.CheckedMappingReplay.Nominals.Internal (RetainedId, mkRetainedId, parseRetainedId, retainedIdText)
+ test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Nominals/Internal.hs view
@@ -0,0 +1,40 @@+-- @generated by keiro-dsl 0.18.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+  , mkRetainedId+  , retainedIdText+  , unsafeRetainedIdFromLegacyText+  ) 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 (typeIdV5OrV7Domain, validateIdDomainText)++newtype RetainedId = RetainedId Text+  deriving stock (Generic, Eq, Ord, Show)++instance CanonicalTypeName RetainedId++instance ToJSON RetainedId where+  toJSON = toJSON . retainedIdText++instance FromJSON RetainedId where+  parseJSON = withText "RetainedId" (either (fail . T.unpack) pure . parseRetainedId)++parseRetainedId :: Text -> Either Text RetainedId+parseRetainedId input = case validateIdDomainText (typeIdV5OrV7Domain "retained") input of+  Left reason -> Left (T.pack (show reason))+  Right () -> Right (RetainedId input)++mkRetainedId :: Text -> Either Text RetainedId+mkRetainedId = parseRetainedId++retainedIdText :: RetainedId -> Text+retainedIdText (RetainedId value) = value++unsafeRetainedIdFromLegacyText :: Text -> RetainedId+unsafeRetainedIdFromLegacyText = RetainedId
+ test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ProjectionCatalog.hs view
@@ -0,0 +1,80 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from projection-catalog checked-mapping-replay; do not edit.+{-# LANGUAGE OverloadedStrings #-}+module Generated.CheckedMappingReplay.ProjectionCatalog+  ( projectionCatalog+  , validatedProjectionCatalog+  , projectionCatalogInventory+  , projectionCatalogRegistrations+  , projectionCatalogAsyncRegistrations+  , projectionCatalogQuerySupplies+  , registerProjectionCatalog+  , replayWriterProjectionSet+  , replayRebuildRebuildGroupId+  , startReplayRebuildRebuild+  ) 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 CheckedMappingReplay.ProjectionCatalog.ProjectionCatalogHoles qualified as Holes+import Generated.CheckedMappingReplay.ReplayLookup.ReadModel qualified as RMReplayLookup++must :: Show error => Either error value -> value+must = either (error . show) id++replayWriterProjectionSet :: Catalog.ProjectionSet Holes.ReplayWriterEvent+replayWriterProjectionSet =+  Catalog.ProjectionSet+    (must (Catalog.mkSourceId "all"))+    (Catalog.ProjectionDefinition+      (must (Catalog.mkProjectionId "replay_writer"))+      (must (Catalog.mkRebuildGroupId "replay_rebuild"))+      ((must (Catalog.mkTargetId "replay_table")) :| [])+      (Catalog.Replayable (Catalog.ReplayAdapter Holes.decodeReplayWriterReplay Holes.applyReplayWriterReplay))+      (Catalog.AsyncHandler (AsyncProjection "checked-mapping-replay-writer-v1" "checked-mapping-replay-replay-lookup" "checked-mapping-replay-writer" Holes.applyReplayWriterLive Holes.replayWriterIdempotencyKey) (must (Catalog.mkSubscriptionId "checked-mapping-replay-writer")) (must (Catalog.mkDedupKeyId "checked-mapping-replay-writer-v1")) (must (Catalog.mkClaimSite "projection-owner replay_writer async-handler")) :| [])+      (must (Catalog.mkClaimSite "projection-owner replay_writer"))+      :| [])+    (must (Catalog.mkClaimSite "projection-owner replay_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 "replay_table")) (Catalog.QualifiedTable "public" "checked_mapping_replay") Catalog.ClearBeforeReplay [] (must (Catalog.mkClaimSite "target replay_table"))]+    [Catalog.RebuildGroupDeclaration (must (Catalog.mkRebuildGroupId "replay_rebuild")) [(must (Catalog.mkTargetId "replay_table"))] [] (must (Catalog.mkClaimSite "rebuild-group replay_rebuild"))]+    []+    []+    [Catalog.SubscriptionDeclaration (must (Catalog.mkSubscriptionId "checked-mapping-replay-writer")) "checked-mapping-replay-writer" (must (Catalog.mkSourceId "all")) KirokuSubscription.FromBeginning (must (Catalog.mkClaimSite "projection-owner replay_writer subscription"))]+    [Catalog.DedupKeyDeclaration (must (Catalog.mkDedupKeyId "checked-mapping-replay-writer-v1")) "checked-mapping-replay-writer-v1" (must (Catalog.mkClaimSite "projection-owner replay_writer dedup"))]+    [Catalog.SomeQueryModelBinding (Catalog.QueryModelBinding (must (Catalog.mkQueryModelId "replay_lookup")) RMReplayLookup.replayLookupReadModel (must (Catalog.mkRebuildGroupId "replay_rebuild")) [(must (Catalog.mkTargetId "replay_table"))] (must (Catalog.mkClaimSite "readmodel replay_lookup")))]+    [Catalog.SomeProjectionSet replayWriterProjectionSet]++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++replayRebuildRebuildGroupId :: Catalog.RebuildGroupId+replayRebuildRebuildGroupId = (must (Catalog.mkRebuildGroupId "replay_rebuild"))++startReplayRebuildRebuild :: (IOE :> es, Store :> es) => Rebuild.RebuildOptions -> Eff es (Either Rebuild.CatalogRebuildError Rebuild.RebuildRunReport)+startReplayRebuildRebuild = Rebuild.startCatalogRebuild validatedProjectionCatalog replayRebuildRebuildGroupId
+ test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayAudit.hs view
@@ -0,0 +1,30 @@+-- @generated by keiro-dsl 0.18.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;+--   * 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.CheckedMappingReplay.ReplayAudit (auditTargets) where++import Generated.CheckedMappingReplay.ReplayLedger.EventStream qualified as ReplayLedger+import Generated.CheckedMappingReplay.ReplayTarget.EventStream qualified as ReplayTarget+import Keiro.ReplayAudit (AuditTarget (..), SomeAuditTarget (..), streamInCategory)+import Keiro.Stream qualified as Stream++auditTargets :: [SomeAuditTarget]+auditTargets =+  [ SomeAuditTarget+      AuditTarget+        { eventStream = ReplayLedger.replayLedgerEventStream+        , category = Stream.categoryText ReplayLedger.replayLedgerCategory+        , mkStream = streamInCategory (Stream.categoryText ReplayLedger.replayLedgerCategory)+        }+  , SomeAuditTarget+      AuditTarget+        { eventStream = ReplayTarget.replayTargetEventStream+        , category = Stream.categoryText ReplayTarget.replayTargetCategory+        , mkStream = streamInCategory (Stream.categoryText ReplayTarget.replayTargetCategory)+        }+  ]
+ test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayEvents/Contract.hs view
@@ -0,0 +1,61 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from contract replay_events; do not edit.+module Generated.CheckedMappingReplay.ReplayEvents.Contract+  ( ReplayEventsPayload (..)+  , ReplayLinkedData (..)+  , replayEventsTopic+  , messageTypeOf+  , encodeReplayEventsPayload+  , parseReplayEventsPayload+  ) where++import Data.Aeson (Value, object, withObject, withText, (.=))+import Data.Aeson.Types (Parser, explicitParseField, parseEither)+import Generated.CheckedMappingReplay.Nominals qualified as Nominals+import Generated.CheckedMappingReplay.Structural.NominalLeaves qualified as NominalLeaves+import Data.Text (Text)+import qualified Data.Text as T++-- topic constants+replayEventsTopic :: Text+replayEventsTopic = "checked.mapping.replay.events"++-- the closed payload set (discriminated by "messageType")+data ReplayLinkedData = ReplayLinkedData {retainedId :: !Nominals.RetainedId}+  deriving stock (Eq, Show)++data ReplayEventsPayload+  = ReplayLinked !ReplayLinkedData+  deriving stock (Eq, Show)++messageTypeOf :: ReplayEventsPayload -> Text+messageTypeOf = \case+  ReplayLinked {} -> "ReplayLinked"++encodeReplayEventsPayload :: ReplayEventsPayload -> Value+encodeReplayEventsPayload = \case+  ReplayLinked payload ->+    object+      [ "messageType" .= ("ReplayLinked" :: Text),+        "retainedId" .= NominalLeaves.encodeRetainedIdLeaf payload.retainedId+      ]++parseReplayEventsPayload :: Value -> Either Text ReplayEventsPayload+parseReplayEventsPayload = mapLeftText . parseEither (withObject "ReplayEventsPayload" go)+  where+    go o = do+      kind <- explicitParseField (withText "messageType" validateMessageType) o "messageType"+      case kind of+        "ReplayLinked" ->+          ReplayLinked+            <$> ( ReplayLinkedData+                    <$> explicitParseField NominalLeaves.parseRetainedIdLeaf o "retainedId"+                )+        _ -> 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` ["ReplayLinked"] = pure kind+  | otherwise = fail ("unknown message type " <> show kind <> "; expected one of: ReplayLinked")
+ test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayJobs/Queue.hs view
@@ -0,0 +1,190 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from workqueue replay_jobs; do not edit.+module Generated.CheckedMappingReplay.ReplayJobs.Queue+  ( ReplayJob (..)+  , encodeReplayJob+  , parseReplayJob+  , encodeContentHashMapped+  , decodeContentHashMapped+  , encodeImportantDaysMapped+  , decodeImportantDaysMapped+  , encodeMaybeContentHashMapped+  , decodeMaybeContentHashMapped+  , encodeMaybeLabelMapped+  , decodeMaybeLabelMapped+  , encodeReplayEnvelopeMapped+  , decodeReplayEnvelopeMapped+  , encodeTextLabelsMapped+  , decodeTextLabelsMapped+  , queuePhysical, queueDlq, queueTable++  ) where++import Control.Monad (unless)+import Data.Aeson (Value (..), object, parseJSON, toJSON, withObject, (.=))+import Data.Aeson.Key qualified as Key+import Data.Aeson.KeyMap qualified as KeyMap+import Data.Aeson.Types (Parser, JSONPathElement (..), (<?>), explicitParseField, parseEither)+import Data.Map.Strict qualified as Map+import Data.Text (Text)+import qualified Data.Text as T+import Keiro.Codec.Structural (bindingFromShape, bindingToShape)+import Keiro.Codec.CalendarDay (encodeCalendarDay, parseCalendarDay)+import Keiro.Codec.TextSet (encodeTextSet, parseTextSet)+import Keiro.Codec.Base16Bytes (encodeBase16Bytes, parseBase16Bytes)+import Generated.CheckedMappingReplay.Structural.NominalLeaves (encodeRetainedIdLeaf, parseRetainedIdLeaf)+import Generated.CheckedMappingReplay.Structural.NominalLeaves (parseRetainedIdLeafKey, renderRetainedIdLeafKey)+import Conformance.CheckedMappingReplay.Bindings qualified as Bindings+import Conformance.CheckedMappingReplay.Domain (ContentHash, ImportantDays, MaybeContentHash, MaybeLabel, ReplayEnvelope, TextLabels)+import Generated.CheckedMappingReplay.Nominals (RetainedId)+import Generated.CheckedMappingReplay.Structural.Shape.ContentHash qualified as ShapeContentHash+import Generated.CheckedMappingReplay.Structural.Shape.ImportantDays qualified as ShapeImportantDays+import Generated.CheckedMappingReplay.Structural.Shape.MaybeContentHash qualified as ShapeMaybeContentHash+import Generated.CheckedMappingReplay.Structural.Shape.MaybeLabel qualified as ShapeMaybeLabel+import Generated.CheckedMappingReplay.Structural.Shape.ReplayEnvelope qualified as ShapeReplayEnvelope+import Generated.CheckedMappingReplay.Structural.Shape.TextLabels qualified as ShapeTextLabels++queuePhysical, queueDlq, queueTable :: Text+queuePhysical = "checked_mapping_replay"+queueDlq = "checked_mapping_replay_dlq"+queueTable = "pgmq.q_checked_mapping_replay"++data ReplayJob = ReplayJob+  { retainedId :: !RetainedId+  , envelope :: !ReplayEnvelope+  }+  deriving stock (Eq, Show)++encodeContentHashMapped :: ContentHash -> Value+encodeContentHashMapped = encodeContentHashShape . bindingToShape Bindings.contentHashBinding++parseContentHashMapped :: Value -> Parser ContentHash+parseContentHashMapped value = bindingFromShape Bindings.contentHashBinding <$> parseContentHashShape value++decodeContentHashMapped :: Value -> Either Text ContentHash+decodeContentHashMapped = mapLeftText . parseEither parseContentHashMapped++encodeContentHashShape :: ShapeContentHash.ContentHashShape -> Value+encodeContentHashShape = encodeBase16Bytes++parseContentHashShape :: Value -> Parser ShapeContentHash.ContentHashShape+parseContentHashShape = parseBase16Bytes++encodeImportantDaysMapped :: ImportantDays -> Value+encodeImportantDaysMapped = encodeImportantDaysShape . bindingToShape Bindings.importantDaysBinding++parseImportantDaysMapped :: Value -> Parser ImportantDays+parseImportantDaysMapped value = bindingFromShape Bindings.importantDaysBinding <$> parseImportantDaysShape value++decodeImportantDaysMapped :: Value -> Either Text ImportantDays+decodeImportantDaysMapped = mapLeftText . parseEither parseImportantDaysMapped++encodeImportantDaysShape :: ShapeImportantDays.ImportantDaysShape -> Value+encodeImportantDaysShape value = toJSON (map (\item0 -> encodeCalendarDay (item0)) (value))++parseImportantDaysShape :: Value -> Parser ShapeImportantDays.ImportantDaysShape+parseImportantDaysShape = \value0 -> do items0 <- (parseJSON value0 :: Parser [Value]); traverse (\(index0, item0) -> (parseCalendarDay) item0 <?> Index index0) (zip [0..] items0)++encodeMaybeContentHashMapped :: MaybeContentHash -> Value+encodeMaybeContentHashMapped = encodeMaybeContentHashShape . bindingToShape Bindings.maybeContentHashBinding++parseMaybeContentHashMapped :: Value -> Parser MaybeContentHash+parseMaybeContentHashMapped value = bindingFromShape Bindings.maybeContentHashBinding <$> parseMaybeContentHashShape value++decodeMaybeContentHashMapped :: Value -> Either Text MaybeContentHash+decodeMaybeContentHashMapped = mapLeftText . parseEither parseMaybeContentHashMapped++encodeMaybeContentHashShape :: ShapeMaybeContentHash.MaybeContentHashShape -> Value+encodeMaybeContentHashShape value = maybe Null (\item0 -> encodeContentHashShape (item0)) (value)++parseMaybeContentHashShape :: Value -> Parser ShapeMaybeContentHash.MaybeContentHashShape+parseMaybeContentHashShape = \value0 -> case value0 of Null -> pure Nothing; other0 -> Just <$> (parseContentHashShape) other0++encodeMaybeLabelMapped :: MaybeLabel -> Value+encodeMaybeLabelMapped = encodeMaybeLabelShape . bindingToShape Bindings.maybeLabelBinding++parseMaybeLabelMapped :: Value -> Parser MaybeLabel+parseMaybeLabelMapped value = bindingFromShape Bindings.maybeLabelBinding <$> parseMaybeLabelShape value++decodeMaybeLabelMapped :: Value -> Either Text MaybeLabel+decodeMaybeLabelMapped = mapLeftText . parseEither parseMaybeLabelMapped++encodeMaybeLabelShape :: ShapeMaybeLabel.MaybeLabelShape -> Value+encodeMaybeLabelShape value = maybe Null (\item0 -> toJSON (item0)) (value)++parseMaybeLabelShape :: Value -> Parser ShapeMaybeLabel.MaybeLabelShape+parseMaybeLabelShape = \value0 -> case value0 of Null -> pure Nothing; other0 -> Just <$> (parseJSON) other0++encodeReplayEnvelopeMapped :: ReplayEnvelope -> Value+encodeReplayEnvelopeMapped = encodeReplayEnvelopeShape . bindingToShape Bindings.replayEnvelopeBinding++parseReplayEnvelopeMapped :: Value -> Parser ReplayEnvelope+parseReplayEnvelopeMapped value = bindingFromShape Bindings.replayEnvelopeBinding <$> parseReplayEnvelopeShape value++decodeReplayEnvelopeMapped :: Value -> Either Text ReplayEnvelope+decodeReplayEnvelopeMapped = mapLeftText . parseEither parseReplayEnvelopeMapped++encodeReplayEnvelopeShape :: ShapeReplayEnvelope.ReplayEnvelopeShape -> Value+encodeReplayEnvelopeShape shape =+  object+      [ "label" .= encodeMaybeLabelShape (shape.label)+      , "days" .= encodeImportantDaysShape (shape.days)+      , "labels" .= encodeTextLabelsShape (shape.labels)+      , "contentHash" .= encodeMaybeContentHashShape (shape.contentHash)+      , "primary" .= encodeRetainedIdLeaf shape.primary+      , "identities" .= Object (KeyMap.fromList [(Key.fromText (renderRetainedIdLeafKey key0), toJSON (item0)) | (key0, item0) <- Map.toList (shape.identities)])+      , "optionalLabels" .= maybe Null (\item0 -> encodeTextSet (item0)) (shape.optionalLabels)+      ]++parseReplayEnvelopeShape :: Value -> Parser ShapeReplayEnvelope.ReplayEnvelopeShape+parseReplayEnvelopeShape = withObject "ReplayEnvelopeShape" $ \objectValue -> do+  rejectUnknownFields "ReplayEnvelope" ["label", "days", "labels", "contentHash", "primary", "identities", "optionalLabels"] objectValue+  ShapeReplayEnvelope.ReplayEnvelope+    <$> explicitParseField (parseMaybeLabelShape) objectValue "label"+    <*> explicitParseField (parseImportantDaysShape) objectValue "days"+    <*> explicitParseField (parseTextLabelsShape) objectValue "labels"+    <*> explicitParseField (parseMaybeContentHashShape) objectValue "contentHash"+    <*> explicitParseField (parseRetainedIdLeaf) objectValue "primary"+    <*> explicitParseField (\value0 -> withObject "Map[RetainedId]" (\object0 -> Map.fromList <$> traverse (\(rawKey0, item0) -> do key0 <- parseRetainedIdLeafKey (Key.toText rawKey0) <?> Key rawKey0; parsedItem0 <- (parseJSON) item0 <?> Key rawKey0; pure (key0, parsedItem0)) (KeyMap.toList object0)) value0) objectValue "identities"+    <*> parseOptionalField (pure Nothing) (\value0 -> case value0 of Null -> pure Nothing; other0 -> Just <$> (parseTextSet) other0) objectValue "optionalLabels"++encodeTextLabelsMapped :: TextLabels -> Value+encodeTextLabelsMapped = encodeTextLabelsShape . bindingToShape Bindings.textLabelsBinding++parseTextLabelsMapped :: Value -> Parser TextLabels+parseTextLabelsMapped value = bindingFromShape Bindings.textLabelsBinding <$> parseTextLabelsShape value++decodeTextLabelsMapped :: Value -> Either Text TextLabels+decodeTextLabelsMapped = mapLeftText . parseEither parseTextLabelsMapped++encodeTextLabelsShape :: ShapeTextLabels.TextLabelsShape -> Value+encodeTextLabelsShape value = encodeTextSet (value)++parseTextLabelsShape :: Value -> Parser ShapeTextLabels.TextLabelsShape+parseTextLabelsShape = parseTextSet++encodeReplayJob :: ReplayJob -> Value+encodeReplayJob payload =+  object+    [ "retained_id" .= encodeRetainedIdLeaf payload.retainedId+    , "envelope" .= encodeReplayEnvelopeMapped payload.envelope+    ]++parseReplayJob :: Value -> Either Text ReplayJob+parseReplayJob = mapLeftText . parseEither (withObject "ReplayJob" go)+  where+    go objectValue = ReplayJob <$> explicitParseField (parseRetainedIdLeaf) objectValue "retained_id" <*> explicitParseField (parseReplayEnvelopeMapped) objectValue "envelope"++mapLeftText :: Either String b -> Either Text b+mapLeftText = either (Left . T.pack) Right++parseOptionalField :: Parser fieldValue -> (Value -> Parser fieldValue) -> KeyMap.KeyMap Value -> Key.Key -> Parser fieldValue+parseOptionalField onMissing parseItem objectValue key =+  case KeyMap.lookup key objectValue of+    Nothing -> onMissing+    Just _ -> explicitParseField parseItem objectValue key++rejectUnknownFields :: String -> [Text] -> KeyMap.KeyMap Value -> Parser ()+rejectUnknownFields label allowed objectValue =+  unless (null extras) (fail (label <> " contains unknown fields: " <> show extras))+  where+    extras = filter (`notElem` allowed) (map Key.toText (KeyMap.keys objectValue))
+ test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayJobs/QueueCodec.hs view
@@ -0,0 +1,29 @@+-- @generated by keiro-dsl 0.18.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+-- 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.CheckedMappingReplay.ReplayJobs.QueueCodec (replayJobsPayloadCodec, replayJobsJobCodec) where++import Data.List.NonEmpty (NonEmpty (..))+import Keiro.Codec (Codec (..), EventType (..))+import Keiro.PGMQ.Codec (JobCodec, keiroJobCodec)+import Generated.CheckedMappingReplay.ReplayJobs.Queue (ReplayJob, encodeReplayJob, parseReplayJob)++replayJobsPayloadCodec :: Codec ReplayJob+replayJobsPayloadCodec =+  Codec+    { eventTypes = EventType "ReplayJob" :| []+    , eventType = \_ -> EventType "ReplayJob"+    , schemaVersion = 1+    , encode = encodeReplayJob+    , decode = \_ -> parseReplayJob+    , upcasters = []+    }++replayJobsJobCodec :: JobCodec ReplayJob+replayJobsJobCodec = keiroJobCodec replayJobsPayloadCodec
+ test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayJobs/QueuePolicy.hs view
@@ -0,0 +1,43 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from workqueue replay_jobs; do not edit.+module Generated.CheckedMappingReplay.ReplayJobs.QueuePolicy+  ( ReplayJobsOutcome (..)+  , 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 ReplayJobsOutcome+  = StoreFailure+  | CommandRejected+  | DecodeFailure+  | OnCodecReject+  deriving stock (Eq, Show)++jobOutcomeFor :: ReplayJobsOutcome -> JobOutcome+jobOutcomeFor o = case o of+  StoreFailure -> Retry (RetryDelay 1)+  CommandRejected -> Dead "dead-lettered"+  DecodeFailure -> Dead "dead-lettered"+  OnCodecReject -> Dead "dead-lettered"
+ test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLedger/BehaviorContract.hs view
@@ -0,0 +1,387 @@+{-# LANGUAGE OverloadedLabels #-}+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from aggregate ReplayLedger; do not edit.+module Generated.CheckedMappingReplay.ReplayLedger.BehaviorContract+  ( BehaviorKey (..)+  , unBehaviorKey+  , ObligationKind (..)+  , EvidenceLevel (..)+  , GuardCoverage (..)+  , BehaviorRequirement (..)+  , RejectionClass (..)+  , LiveExpectation (..)+  , BehaviorWitness (..)+  , BehaviorFailure (..)+  , BehaviorConformanceReport (..)+  , behaviorRequirements+  , behaviorCoverageReport+  , behaviorConformancePassed+  , behaviorConformancePassedWith+  , renderBehaviorConformanceText+  ) where++import Generated.CheckedMappingReplay.ReplayLedger.Codec (encodeReplayLedgerEvent, parseReplayLedgerEvent, replayLedgerCodec)+import Generated.CheckedMappingReplay.ReplayLedger.Domain+import Generated.CheckedMappingReplay.ReplayLedger.Transducer (replayLedgerTransducer)+import Generated.CheckedMappingReplay.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 :: !ReplayLedgerVertex+  , commandName :: !Text+  , expectedEdge :: !(Maybe (K.EdgeRef ReplayLedgerVertex))+  , target :: !(Maybe ReplayLedgerVertex)+  , eventKinds :: ![Text]+  }+  deriving stock (Eq, Show)++data RejectionClass = RejectNoOutgoingEdges | RejectNoMatchingEdge+  deriving stock (Eq, Show)++data LiveExpectation+  = Emits (NonEmpty ReplayLedgerEvent)+  | Rejects RejectionClass+  | NoOp+  deriving stock (Eq, Show)++data BehaviorWitness+  = Pending BehaviorKey+  | LiveWitness+      { key :: BehaviorKey+      , history :: [ReplayLedgerEvent]+      , command :: ReplayLedgerCommand+      , expected :: LiveExpectation+      }+  | ReplayWitness+      { key :: BehaviorKey+      , historyPrefix :: [ReplayLedgerEvent]+      , observedChunk :: [ReplayLedgerEvent]+      }+  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 =+  [ -- ReplayLedgerEmpty x ImportLegacy: replay-only transition+    BehaviorRequirement+      { key = BehaviorKey "behavior-v1-00d5b6d8d0fc6ef2"+      , kind = ReplayTransition+      , evidence = GeneratedAuthoritative+      , guardCoverage = GuardNotApplicable+      , source = ReplayLedgerEmpty+      , commandName = "ImportLegacy"+      , expectedEdge = (Just (K.EdgeRef ReplayLedgerEmpty 1))+      , target = Just ReplayLedgerRecorded+      , eventKinds = ["LegacyMappingImported"]+      }+  , -- ReplayLedgerEmpty x ImportLegacy: required rejection+    BehaviorRequirement+      { key = BehaviorKey "behavior-v1-9846660db9e83048"+      , kind = RequiredRejection+      , evidence = GeneratedAuthoritative+      , guardCoverage = GuardNotApplicable+      , source = ReplayLedgerEmpty+      , commandName = "ImportLegacy"+      , expectedEdge = Nothing+      , target = Nothing+      , eventKinds = []+      }+  , -- ReplayLedgerEmpty x Record: live transition+    BehaviorRequirement+      { key = BehaviorKey "behavior-v1-cf9c72cd877a5085"+      , kind = LiveTransition+      , evidence = GeneratedAuthoritative+      , guardCoverage = GuardTotal+      , source = ReplayLedgerEmpty+      , commandName = "Record"+      , expectedEdge = (Just (K.EdgeRef ReplayLedgerEmpty 0))+      , target = Just ReplayLedgerRecorded+      , eventKinds = ["MappingRecorded", "MappingAudited"]+      }+  , -- ReplayLedgerRecorded x Record: required rejection+    BehaviorRequirement+      { key = BehaviorKey "behavior-v1-e88b4f5c37ef8bf2"+      , kind = RequiredRejection+      , evidence = GeneratedAuthoritative+      , guardCoverage = GuardNotApplicable+      , source = ReplayLedgerRecorded+      , commandName = "Record"+      , expectedEdge = Nothing+      , target = Nothing+      , eventKinds = []+      }+  , -- ReplayLedgerRecorded x ImportLegacy: required rejection+    BehaviorRequirement+      { key = BehaviorKey "behavior-v1-efa5614712549991"+      , kind = RequiredRejection+      , evidence = GeneratedAuthoritative+      , guardCoverage = GuardNotApplicable+      , source = ReplayLedgerRecorded+      , commandName = "ImportLegacy"+      , expectedEdge = Nothing+      , target = Nothing+      , eventKinds = []+      }+  ]++behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport+behaviorCoverageReport 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 <- behaviorRequirements]+  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: ReplayLedger"+  , "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 -> [ReplayLedgerEvent] -> ReplayLedgerCommand -> 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 -> (ReplayLedgerVertex, K.RegFile ReplayLedgerRegs) -> ReplayLedgerCommand -> 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 replayLedgerTransducer 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 -> (ReplayLedgerVertex, K.RegFile ReplayLedgerRegs) -> ReplayLedgerCommand -> 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 replayLedgerTransducer 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 replayLedgerTransducer 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 replayLedgerTransducer 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 ReplayLedgerRegs ReplayLedgerVertex ReplayLedgerEvent -> 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 -> [ReplayLedgerEvent] -> [ReplayLedgerEvent] -> 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 replayLedgerTransducer (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 ReplayLedgerVertex] -> 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 -> [ReplayLedgerEvent] -> Either BehaviorFailure (K.ReplaySuccess ReplayLedgerRegs ReplayLedgerVertex)+settleHistory requirement label history = do+  decoded <- either (failure requirement (label <> "-codec-decode")) Right (decodeEvents history)+  case K.applyEventsDetailedEither replayLedgerTransducer (ReplayLedgerEmpty, initialReplayLedgerRegs) decoded of+    Left replayFailure -> failure requirement (label <> "-replay-failed") (tshow replayFailure)+    Right replaySuccess -> Right replaySuccess++decodeEvents :: [ReplayLedgerEvent] -> Either Text [ReplayLedgerEvent]+decodeEvents = traverse (\event -> parseReplayLedgerEvent (Codec.eventType replayLedgerCodec event) (encodeReplayLedgerEvent event))++commandKind :: ReplayLedgerCommand -> Text+commandKind command = case command of+  Record _ -> "Record"+  ImportLegacy _ -> "ImportLegacy"++eventKind :: ReplayLedgerEvent -> Text+eventKind event = case Codec.eventType replayLedgerCodec event of Codec.EventType tag -> tag++regsEqual :: K.RegFile ReplayLedgerRegs -> K.RegFile ReplayLedgerRegs -> Bool+regsEqual left right = (left K.! #current) == (right K.! #current) && (left K.! #currentId) == (right K.! #currentId)++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
+ test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLedger/Codec.hs view
@@ -0,0 +1,244 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from aggregate ReplayLedger; do not edit.+module Generated.CheckedMappingReplay.ReplayLedger.Codec (+    replayLedgerCodec,+    parseReplayLedgerEvent,+    encodeReplayLedgerEvent,+    encodeContentHashMapped,+    decodeContentHashMapped,+    encodeImportantDaysMapped,+    decodeImportantDaysMapped,+    encodeMaybeContentHashMapped,+    decodeMaybeContentHashMapped,+    encodeMaybeLabelMapped,+    decodeMaybeLabelMapped,+    encodeReplayEnvelopeMapped,+    decodeReplayEnvelopeMapped,+    encodeTextLabelsMapped,+    decodeTextLabelsMapped,+) where++import Generated.CheckedMappingReplay.ReplayLedger.Domain+import Generated.CheckedMappingReplay.Nominals (retainedIdText)+import Generated.CheckedMappingReplay.Nominals.Internal (unsafeRetainedIdFromLegacyText)+import Control.Monad (unless)+import Data.Aeson (Value (..), object, parseJSON, toJSON, withObject, (.:), (.=))+import Data.Aeson.Key qualified as Key+import Data.Aeson.KeyMap qualified as KeyMap+import Data.Aeson.Types (Parser, JSONPathElement (..), (<?>), explicitParseField, parseEither)+import Data.List.NonEmpty (NonEmpty (..))+import Data.List.NonEmpty qualified as NonEmpty+import Data.Map.Strict qualified as Map+import Data.Text (Text)+import qualified Data.Text as T+import Keiro.Codec.CalendarDay (encodeCalendarDay, parseCalendarDay)+import Keiro.Codec.TextSet (encodeTextSet, parseTextSet)+import Keiro.Codec.Base16Bytes (encodeBase16Bytes, parseBase16Bytes)+import Keiro.Codec.Structural (bindingFromShape, bindingToShape)+import Keiro.Codec (Codec (..), EventType (..))+++import Generated.CheckedMappingReplay.Structural.NominalLeaves (encodeRetainedIdLeaf, parseRetainedIdLeaf)+import Generated.CheckedMappingReplay.Structural.NominalLeaves (parseRetainedIdLeafKey, renderRetainedIdLeafKey)+import Conformance.CheckedMappingReplay.Bindings qualified as Bindings+import Conformance.CheckedMappingReplay.Domain (ContentHash, ImportantDays, MaybeContentHash, MaybeLabel, ReplayEnvelope, TextLabels)+import Generated.CheckedMappingReplay.Structural.Shape.ContentHash qualified as ShapeContentHash+import Generated.CheckedMappingReplay.Structural.Shape.ImportantDays qualified as ShapeImportantDays+import Generated.CheckedMappingReplay.Structural.Shape.MaybeContentHash qualified as ShapeMaybeContentHash+import Generated.CheckedMappingReplay.Structural.Shape.MaybeLabel qualified as ShapeMaybeLabel+import Generated.CheckedMappingReplay.Structural.Shape.ReplayEnvelope qualified as ShapeReplayEnvelope+import Generated.CheckedMappingReplay.Structural.Shape.TextLabels qualified as ShapeTextLabels++++encodeContentHashMapped :: ContentHash -> Value+encodeContentHashMapped = encodeContentHashShape . bindingToShape Bindings.contentHashBinding++parseContentHashMapped :: Value -> Parser ContentHash+parseContentHashMapped value = bindingFromShape Bindings.contentHashBinding <$> parseContentHashShape value++decodeContentHashMapped :: Value -> Either Text ContentHash+decodeContentHashMapped = mapLeftText . parseEither parseContentHashMapped++encodeContentHashShape :: ShapeContentHash.ContentHashShape -> Value+encodeContentHashShape = encodeBase16Bytes++parseContentHashShape :: Value -> Parser ShapeContentHash.ContentHashShape+parseContentHashShape = parseBase16Bytes++encodeImportantDaysMapped :: ImportantDays -> Value+encodeImportantDaysMapped = encodeImportantDaysShape . bindingToShape Bindings.importantDaysBinding++parseImportantDaysMapped :: Value -> Parser ImportantDays+parseImportantDaysMapped value = bindingFromShape Bindings.importantDaysBinding <$> parseImportantDaysShape value++decodeImportantDaysMapped :: Value -> Either Text ImportantDays+decodeImportantDaysMapped = mapLeftText . parseEither parseImportantDaysMapped++encodeImportantDaysShape :: ShapeImportantDays.ImportantDaysShape -> Value+encodeImportantDaysShape value = toJSON (map (\item0 -> encodeCalendarDay (item0)) (value))++parseImportantDaysShape :: Value -> Parser ShapeImportantDays.ImportantDaysShape+parseImportantDaysShape = \value0 -> do items0 <- (parseJSON value0 :: Parser [Value]); traverse (\(index0, item0) -> (parseCalendarDay) item0 <?> Index index0) (zip [0..] items0)++encodeMaybeContentHashMapped :: MaybeContentHash -> Value+encodeMaybeContentHashMapped = encodeMaybeContentHashShape . bindingToShape Bindings.maybeContentHashBinding++parseMaybeContentHashMapped :: Value -> Parser MaybeContentHash+parseMaybeContentHashMapped value = bindingFromShape Bindings.maybeContentHashBinding <$> parseMaybeContentHashShape value++decodeMaybeContentHashMapped :: Value -> Either Text MaybeContentHash+decodeMaybeContentHashMapped = mapLeftText . parseEither parseMaybeContentHashMapped++encodeMaybeContentHashShape :: ShapeMaybeContentHash.MaybeContentHashShape -> Value+encodeMaybeContentHashShape value = maybe Null (\item0 -> encodeContentHashShape (item0)) (value)++parseMaybeContentHashShape :: Value -> Parser ShapeMaybeContentHash.MaybeContentHashShape+parseMaybeContentHashShape = \value0 -> case value0 of Null -> pure Nothing; other0 -> Just <$> (parseContentHashShape) other0++encodeMaybeLabelMapped :: MaybeLabel -> Value+encodeMaybeLabelMapped = encodeMaybeLabelShape . bindingToShape Bindings.maybeLabelBinding++parseMaybeLabelMapped :: Value -> Parser MaybeLabel+parseMaybeLabelMapped value = bindingFromShape Bindings.maybeLabelBinding <$> parseMaybeLabelShape value++decodeMaybeLabelMapped :: Value -> Either Text MaybeLabel+decodeMaybeLabelMapped = mapLeftText . parseEither parseMaybeLabelMapped++encodeMaybeLabelShape :: ShapeMaybeLabel.MaybeLabelShape -> Value+encodeMaybeLabelShape value = maybe Null (\item0 -> toJSON (item0)) (value)++parseMaybeLabelShape :: Value -> Parser ShapeMaybeLabel.MaybeLabelShape+parseMaybeLabelShape = \value0 -> case value0 of Null -> pure Nothing; other0 -> Just <$> (parseJSON) other0++encodeReplayEnvelopeMapped :: ReplayEnvelope -> Value+encodeReplayEnvelopeMapped = encodeReplayEnvelopeShape . bindingToShape Bindings.replayEnvelopeBinding++parseReplayEnvelopeMapped :: Value -> Parser ReplayEnvelope+parseReplayEnvelopeMapped value = bindingFromShape Bindings.replayEnvelopeBinding <$> parseReplayEnvelopeShape value++decodeReplayEnvelopeMapped :: Value -> Either Text ReplayEnvelope+decodeReplayEnvelopeMapped = mapLeftText . parseEither parseReplayEnvelopeMapped++encodeReplayEnvelopeShape :: ShapeReplayEnvelope.ReplayEnvelopeShape -> Value+encodeReplayEnvelopeShape shape =+  object+      [ "label" .= encodeMaybeLabelShape (shape.label)+      , "days" .= encodeImportantDaysShape (shape.days)+      , "labels" .= encodeTextLabelsShape (shape.labels)+      , "contentHash" .= encodeMaybeContentHashShape (shape.contentHash)+      , "primary" .= encodeRetainedIdLeaf shape.primary+      , "identities" .= Object (KeyMap.fromList [(Key.fromText (renderRetainedIdLeafKey key0), toJSON (item0)) | (key0, item0) <- Map.toList (shape.identities)])+      , "optionalLabels" .= maybe Null (\item0 -> encodeTextSet (item0)) (shape.optionalLabels)+      ]++parseReplayEnvelopeShape :: Value -> Parser ShapeReplayEnvelope.ReplayEnvelopeShape+parseReplayEnvelopeShape = withObject "ReplayEnvelopeShape" $ \objectValue -> do+  rejectUnknownFields "ReplayEnvelope" ["label", "days", "labels", "contentHash", "primary", "identities", "optionalLabels"] objectValue+  ShapeReplayEnvelope.ReplayEnvelope+    <$> explicitParseField (parseMaybeLabelShape) objectValue "label"+    <*> explicitParseField (parseImportantDaysShape) objectValue "days"+    <*> explicitParseField (parseTextLabelsShape) objectValue "labels"+    <*> explicitParseField (parseMaybeContentHashShape) objectValue "contentHash"+    <*> explicitParseField (parseRetainedIdLeaf) objectValue "primary"+    <*> explicitParseField (\value0 -> withObject "Map[RetainedId]" (\object0 -> Map.fromList <$> traverse (\(rawKey0, item0) -> do key0 <- parseRetainedIdLeafKey (Key.toText rawKey0) <?> Key rawKey0; parsedItem0 <- (parseJSON) item0 <?> Key rawKey0; pure (key0, parsedItem0)) (KeyMap.toList object0)) value0) objectValue "identities"+    <*> parseOptionalField (pure Nothing) (\value0 -> case value0 of Null -> pure Nothing; other0 -> Just <$> (parseTextSet) other0) objectValue "optionalLabels"++encodeTextLabelsMapped :: TextLabels -> Value+encodeTextLabelsMapped = encodeTextLabelsShape . bindingToShape Bindings.textLabelsBinding++parseTextLabelsMapped :: Value -> Parser TextLabels+parseTextLabelsMapped value = bindingFromShape Bindings.textLabelsBinding <$> parseTextLabelsShape value++decodeTextLabelsMapped :: Value -> Either Text TextLabels+decodeTextLabelsMapped = mapLeftText . parseEither parseTextLabelsMapped++encodeTextLabelsShape :: ShapeTextLabels.TextLabelsShape -> Value+encodeTextLabelsShape value = encodeTextSet (value)++parseTextLabelsShape :: Value -> Parser ShapeTextLabels.TextLabelsShape+parseTextLabelsShape = parseTextSet++replayLedgerEventTypes :: NonEmpty EventType+replayLedgerEventTypes = EventType "MappingRecorded" :| [EventType "MappingAudited", EventType "LegacyMappingImported"]++replayLedgerCodec :: Codec ReplayLedgerEvent+replayLedgerCodec =+  Codec+    { eventTypes = replayLedgerEventTypes+    , eventType = \case+        MappingRecorded{} -> EventType "MappingRecorded"+        MappingAudited{} -> EventType "MappingAudited"+        LegacyMappingImported{} -> EventType "LegacyMappingImported"+    , schemaVersion = 1+    , encode = encodeReplayLedgerEvent+    , decode = parseReplayLedgerEvent+    , upcasters = []+    }++encodeReplayLedgerEvent :: ReplayLedgerEvent -> Value+encodeReplayLedgerEvent = \case+  MappingRecorded payload ->+    object+      [ "kind" .= ("MappingRecorded" :: Text)+      , "retainedId" .= retainedIdText payload.retainedId+      , "envelope" .= encodeReplayEnvelopeMapped payload.envelope+      ]+  MappingAudited payload ->+    object+      [ "kind" .= ("MappingAudited" :: Text)+      , "retainedId" .= retainedIdText payload.retainedId+      , "envelope" .= encodeReplayEnvelopeMapped payload.envelope+      ]+  LegacyMappingImported payload ->+    object+      [ "kind" .= ("LegacyMappingImported" :: Text)+      , "retainedId" .= retainedIdText payload.retainedId+      , "envelope" .= encodeReplayEnvelopeMapped payload.envelope+      ]++parseReplayLedgerEvent :: EventType -> Value -> Either Text ReplayLedgerEvent+parseReplayLedgerEvent (EventType tag) = mapLeftText . parseEither (withObject "ReplayLedgerEvent" go)+  where+    go o = do+      case tag of+        "MappingRecorded" ->+          MappingRecorded+            <$> ( MappingRecordedData+                    <$> (unsafeRetainedIdFromLegacyText <$> o .: "retainedId")+                    <*> explicitParseField parseReplayEnvelopeMapped o "envelope"+                )+        "MappingAudited" ->+          MappingAudited+            <$> ( MappingAuditedData+                    <$> (unsafeRetainedIdFromLegacyText <$> o .: "retainedId")+                    <*> explicitParseField parseReplayEnvelopeMapped o "envelope"+                )+        "LegacyMappingImported" ->+          LegacyMappingImported+            <$> ( LegacyMappingImportedData+                    <$> (unsafeRetainedIdFromLegacyText <$> o .: "retainedId")+                    <*> explicitParseField parseReplayEnvelopeMapped o "envelope"+                )+        _ -> fail ("unknown event type " <> show tag <> "; expected one of: " <> renderExpectedEventTypes replayLedgerEventTypes)++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++parseOptionalField :: Parser fieldValue -> (Value -> Parser fieldValue) -> KeyMap.KeyMap Value -> Key.Key -> Parser fieldValue+parseOptionalField onMissing parseItem objectValue key =+  case KeyMap.lookup key objectValue of+    Nothing -> onMissing+    Just _ -> explicitParseField parseItem objectValue key++rejectUnknownFields :: String -> [Text] -> KeyMap.KeyMap Value -> Parser ()+rejectUnknownFields label allowed objectValue =+  unless (null extras) (fail (label <> " contains unknown fields: " <> show extras))+  where+    extras = filter (`notElem` allowed) (map Key.toText (KeyMap.keys objectValue))
+ test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLedger/Domain.hs view
@@ -0,0 +1,75 @@+{-# LANGUAGE DeriveAnyClass #-}+{-# LANGUAGE TemplateHaskell #-}+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from aggregate ReplayLedger; do not edit.+module Generated.CheckedMappingReplay.ReplayLedger.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 Generated.CheckedMappingReplay.Nominals (RetainedId, parseRetainedId)+import Conformance.CheckedMappingReplay.Bindings qualified as Bindings+import Conformance.CheckedMappingReplay.Domain (ReplayEnvelope)+import Keiki.Generics.TH (deriveAggregateCtorsAll, deriveWireCtorsAll)++data ReplayLedgerVertex = ReplayLedgerEmpty | ReplayLedgerRecorded+  deriving stock (Generic, Eq, Ord, Show, Enum, Bounded)+  deriving anyclass (ToJSON, FromJSON)+instance CanonicalStateShape ReplayLedgerVertex+instance CanonicalTypeName ReplayLedgerVertex++data RecordData = RecordData+  { retainedId :: !RetainedId+  , envelope :: !ReplayEnvelope+  }+  deriving stock (Generic, Eq, Show)++data ImportLegacyData = ImportLegacyData+  { retainedId :: !RetainedId+  , envelope :: !ReplayEnvelope+  }+  deriving stock (Generic, Eq, Show)++data ReplayLedgerCommand = Record !RecordData+  | ImportLegacy !ImportLegacyData+  deriving stock (Generic, Eq, Show)++data MappingRecordedData = MappingRecordedData+  { retainedId :: !RetainedId+  , envelope :: !ReplayEnvelope+  }+  deriving stock (Generic, Eq, Show)++data MappingAuditedData = MappingAuditedData+  { retainedId :: !RetainedId+  , envelope :: !ReplayEnvelope+  }+  deriving stock (Generic, Eq, Show)++data LegacyMappingImportedData = LegacyMappingImportedData+  { retainedId :: !RetainedId+  , envelope :: !ReplayEnvelope+  }+  deriving stock (Generic, Eq, Show)++data ReplayLedgerEvent = MappingRecorded !MappingRecordedData+  | MappingAudited !MappingAuditedData+  | LegacyMappingImported !LegacyMappingImportedData+  deriving stock (Generic, Eq, Show)++type ReplayLedgerRegs =+  '[ '("current", ReplayEnvelope)+   , '("currentId", RetainedId)+   ]++initialReplayLedgerRegs :: RegFile ReplayLedgerRegs+initialReplayLedgerRegs =+  RCons (Proxy @"current") Bindings.initialReplayEnvelope $+  RCons (Proxy @"currentId") (case parseRetainedId "retained_01h455vb4pex5vsknk084sn02q" of Right parsed -> parsed; Left _ -> error "generated valid ID sample failed to parse") RNil++$(deriveAggregateCtorsAll ''ReplayLedgerCommand ''ReplayLedgerRegs)++++$(deriveWireCtorsAll ''ReplayLedgerEvent)
+ test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLedger/EventStream.hs view
@@ -0,0 +1,63 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from aggregate ReplayLedger; do not edit.+module Generated.CheckedMappingReplay.ReplayLedger.EventStream+  ( replayLedgerCategory+  , replayLedgerCommandCategory+  , replayLedgerEventStream+  , replayLedgerEventStreamDef+  , ReplayLedgerEventStream+  , ReplayLedgerEventStreamDef+  , replayLedgerSnapshotFixture+  ) where++import Generated.CheckedMappingReplay.ReplayLedger.Domain+import Generated.CheckedMappingReplay.ReplayLedger.Codec (replayLedgerCodec)+import Generated.CheckedMappingReplay.ReplayLedger.Transducer (replayLedgerFoldFingerprint, replayLedgerTransducer)+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.+replayLedgerCategory :: Stream.StreamCategory ReplayLedgerEventStreamDef+replayLedgerCategory = Stream.categoryUnsafe "replayLedger"++-- The same category text, typed for command envelopes such as PMCommand.+replayLedgerCommandCategory :: Stream.StreamCategory ReplayLedgerCommand+replayLedgerCommandCategory = Stream.categoryUnsafe "replayLedger"++type ReplayLedgerEventStreamDef =+  EventStream (HsPred ReplayLedgerRegs ReplayLedgerCommand) ReplayLedgerRegs ReplayLedgerVertex ReplayLedgerCommand ReplayLedgerEvent++type ReplayLedgerEventStream =+  ValidatedEventStream (HsPred ReplayLedgerRegs ReplayLedgerCommand) ReplayLedgerRegs ReplayLedgerVertex ReplayLedgerCommand ReplayLedgerEvent++replayLedgerEventStreamDef :: ReplayLedgerEventStreamDef+replayLedgerEventStreamDef =+  EventStream+    { transducer = replayLedgerTransducer,+      initialState = ReplayLedgerEmpty,+      initialRegisters = initialReplayLedgerRegs,+      eventCodec = replayLedgerCodec,+      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 replayLedgerFoldFingerprint (defaultStateCodec 1))+    }++replayLedgerSnapshotFixture :: (Int, Text)+replayLedgerSnapshotFixture = (1, "checked-mapping-replay-v1")++replayLedgerEventStream :: ReplayLedgerEventStream+replayLedgerEventStream =+  mkEventStreamOrThrow "ReplayLedger" replayLedgerEventStreamDef
+ test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLedger/Harness.hs view
@@ -0,0 +1,123 @@+{-# LANGUAGE OverloadedLabels #-}+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from aggregate ReplayLedger; do not edit.+module Generated.CheckedMappingReplay.ReplayLedger.Harness (harnessAssertions) where++import Generated.CheckedMappingReplay.ReplayLedger.Domain+import Generated.CheckedMappingReplay.ReplayLedger.Codec (encodeReplayLedgerEvent, parseReplayLedgerEvent, replayLedgerCodec, encodeReplayEnvelopeMapped, decodeReplayEnvelopeMapped)+import Generated.CheckedMappingReplay.ReplayLedger.Transducer (replayLedgerTransducer)+import Keiki.Core (applyEventsEither, defaultValidationOptions, step, validateTransducer, (!))+import Keiro.Codec (eventType)+import Generated.CheckedMappingReplay.Nominals (RetainedId, parseRetainedId)+import Data.Aeson qualified as Aeson+import Data.Aeson.Key qualified as AesonKey+import Data.Aeson.KeyMap qualified as AesonKeyMap+import Data.Either (isLeft, isRight)+import Data.List.NonEmpty qualified as NonEmpty+import Data.Text qualified as T+import Keiro.Codec.Structural (FixtureCases (..))+import Conformance.CheckedMappingReplay.Bindings qualified as Bindings++-- | (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 replayLedgerTransducer))+  -- clock-free: spec samples no wall clock (verified at scaffold time)+  , ("golden round-trip: MappingRecorded", roundTrips sampleEventMappingRecorded)+  , ("golden round-trip: MappingAudited", roundTrips sampleEventMappingAudited)+  , ("golden round-trip: LegacyMappingImported", roundTrips sampleEventLegacyMappingImported)+  , ("accepts Record from ReplayLedgerEmpty", acceptRecord)+  ]+  ++ mappedConformanceAssertions+  ++ forwardReplayRecord++roundTrips :: ReplayLedgerEvent -> Bool+roundTrips e = parseReplayLedgerEvent (eventType replayLedgerCodec e) (encodeReplayLedgerEvent e) == Right e++sampleRetainedId :: RetainedId+sampleRetainedId =+  case parseRetainedId "retained_01h455vb4pex5vsknk084sn02q" of+    Right parsed -> parsed+    Left problem -> error (show problem)++sampleEventMappingRecorded :: ReplayLedgerEvent+sampleEventMappingRecorded = MappingRecorded (MappingRecordedData sampleRetainedId (snd (NonEmpty.head (fixtureCases Bindings.replayEnvelopeFixtures))))++sampleEventMappingAudited :: ReplayLedgerEvent+sampleEventMappingAudited = MappingAudited (MappingAuditedData sampleRetainedId (snd (NonEmpty.head (fixtureCases Bindings.replayEnvelopeFixtures))))++sampleEventLegacyMappingImported :: ReplayLedgerEvent+sampleEventLegacyMappingImported = LegacyMappingImported (LegacyMappingImportedData sampleRetainedId (snd (NonEmpty.head (fixtureCases Bindings.replayEnvelopeFixtures))))++acceptRecord :: Bool+acceptRecord =+  case step replayLedgerTransducer (ReplayLedgerEmpty, initialReplayLedgerRegs) (Record (RecordData sampleRetainedId (snd (NonEmpty.head (fixtureCases Bindings.replayEnvelopeFixtures))))) of+    Just (v, _, _) -> v == ReplayLedgerRecorded+    Nothing -> False++-- forward/replay equality (plan 147): cross the persisted codec boundary,+-- replay the emitted chain, and compare the final vertex and every register.+forwardReplayRecord :: [(String, Bool)]+forwardReplayRecord =+  case step replayLedgerTransducer (ReplayLedgerEmpty, initialReplayLedgerRegs) (Record (RecordData sampleRetainedId (snd (NonEmpty.head (fixtureCases Bindings.replayEnvelopeFixtures))))) of+    Nothing -> [(prefix <> "forward step accepted", False)]+    Just (forwardVertex, forwardRegs, emitted) ->+      case mapM (\event -> parseReplayLedgerEvent (eventType replayLedgerCodec event) (encodeReplayLedgerEvent event)) emitted of+        Left _ -> [(prefix <> "emitted chain decodes", False)]+        Right decodedEvents ->+          case applyEventsEither replayLedgerTransducer (ReplayLedgerEmpty, initialReplayLedgerRegs) decodedEvents of+            Left _ -> [(prefix <> "replay succeeds", False)]+            Right (replayVertex, replayRegs) ->+              [ (prefix <> "final vertex", replayVertex == forwardVertex)+              , (prefix <> "register current", (replayRegs ! #current) == (forwardRegs ! #current))+              , (prefix <> "register currentId", (replayRegs ! #currentId) == (forwardRegs ! #currentId))+              ]+  where+    prefix = "forward/replay equality: Record from ReplayLedgerEmpty -- "++mappedConformanceAssertions :: [(String, Bool)]+mappedConformanceAssertions =+  concat+    [ mappingRecordedEnvelopeAssertions+    , mappingAuditedEnvelopeAssertions+    , legacyMappingImportedEnvelopeAssertions+    , structuralWirePolicyAssertions+    ]++mappingRecordedEnvelopeAssertions :: [(String, Bool)]+mappingRecordedEnvelopeAssertions =+  [ ("mapped codec round-trip: MappingRecorded/envelope/" <> T.unpack label, roundTrips (MappingRecorded (MappingRecordedData sampleRetainedId mappedValue)))+  | (label, mappedValue) <- NonEmpty.toList (fixtureCases Bindings.replayEnvelopeFixtures)+  ]++mappingAuditedEnvelopeAssertions :: [(String, Bool)]+mappingAuditedEnvelopeAssertions =+  [ ("mapped codec round-trip: MappingAudited/envelope/" <> T.unpack label, roundTrips (MappingAudited (MappingAuditedData sampleRetainedId mappedValue)))+  | (label, mappedValue) <- NonEmpty.toList (fixtureCases Bindings.replayEnvelopeFixtures)+  ]++legacyMappingImportedEnvelopeAssertions :: [(String, Bool)]+legacyMappingImportedEnvelopeAssertions =+  [ ("mapped codec round-trip: LegacyMappingImported/envelope/" <> T.unpack label, roundTrips (LegacyMappingImported (LegacyMappingImportedData sampleRetainedId mappedValue)))+  | (label, mappedValue) <- NonEmpty.toList (fixtureCases Bindings.replayEnvelopeFixtures)+  ]++structuralWirePolicyAssertions :: [(String, Bool)]+structuralWirePolicyAssertions =+  [ ("wire policy missing default: conformance.checked-mapping-replay.ReplayEnvelope.v1/optionalLabels", case decodeReplayEnvelopeMapped (deleteObjectField "optionalLabels" (encodeReplayEnvelopeMapped (snd (NonEmpty.head (fixtureCases Bindings.replayEnvelopeFixtures))))) of Left _ -> False; Right decoded -> objectField "optionalLabels" (encodeReplayEnvelopeMapped decoded) == Just (Aeson.Null))+  , ("wire policy explicit null: conformance.checked-mapping-replay.ReplayEnvelope.v1/optionalLabels", isRight (decodeReplayEnvelopeMapped (insertObjectField "optionalLabels" Aeson.Null (encodeReplayEnvelopeMapped (snd (NonEmpty.head (fixtureCases Bindings.replayEnvelopeFixtures)))))))+  , ("wire policy unknown fields: conformance.checked-mapping-replay.ReplayEnvelope.v1", all (\(_, value) -> isLeft (decodeReplayEnvelopeMapped (insertObjectField "__keiro_unknown" (Aeson.Bool True) (encodeReplayEnvelopeMapped value)))) (NonEmpty.toList (fixtureCases Bindings.replayEnvelopeFixtures)))+  ]++deleteObjectField :: T.Text -> Aeson.Value -> Aeson.Value+deleteObjectField key (Aeson.Object objectValue) = Aeson.Object (AesonKeyMap.delete (AesonKey.fromText key) objectValue)+deleteObjectField _ value = value++insertObjectField :: T.Text -> Aeson.Value -> Aeson.Value -> Aeson.Value+insertObjectField key inserted (Aeson.Object objectValue) = Aeson.Object (AesonKeyMap.insert (AesonKey.fromText key) inserted objectValue)+insertObjectField _ _ value = value++objectField :: T.Text -> Aeson.Value -> Maybe Aeson.Value+objectField key (Aeson.Object objectValue) = AesonKeyMap.lookup (AesonKey.fromText key) objectValue+objectField _ _ = Nothing
+ test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLedger/Projection.hs view
@@ -0,0 +1,4 @@+-- @generated by keiro-dsl 0.18.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.
+ test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLedger/Transducer.hs view
@@ -0,0 +1,72 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE QualifiedDo #-}+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from aggregate ReplayLedger; do not edit.+module Generated.CheckedMappingReplay.ReplayLedger.Transducer+  ( replayLedgerTransducer+  , replayLedgerFoldFingerprint+  , BehaviorOwnership (..)+  , replayLedgerPredicateVerifications+  ) where++import Generated.CheckedMappingReplay.ReplayLedger.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 Keiki.Builder ((=:))++replayLedgerTransducer+  :: SymTransducer+       (HsPred ReplayLedgerRegs ReplayLedgerCommand)+       ReplayLedgerRegs+       ReplayLedgerVertex+       ReplayLedgerCommand+       ReplayLedgerEvent+replayLedgerTransducer =+  B.buildTransducer ReplayLedgerEmpty initialReplayLedgerRegs isTerminal do+    B.from ReplayLedgerEmpty do+      B.onCmd inCtorRecord $ \d -> B.do+        B.slot @"current" =: d.envelope+        B.slot @"currentId" =: d.retainedId+        B.emit wireMappingRecorded (MappingRecordedTermFields+          { retainedId = d.retainedId+          , envelope = d.envelope+          })+        B.emit wireMappingAudited (MappingAuditedTermFields+          { retainedId = d.retainedId+          , envelope = d.envelope+          })+        B.goto ReplayLedgerRecorded+      B.onCmd inCtorImportLegacy $ \d -> B.do+        B.replayOnly+        B.slot @"current" =: d.envelope+        B.slot @"currentId" =: d.retainedId+        B.emit wireLegacyMappingImported (LegacyMappingImportedTermFields+          { retainedId = d.retainedId+          , envelope = d.envelope+          })+        B.goto ReplayLedgerRecorded+ where+  isTerminal = \case+    ReplayLedgerRecorded -> True+    _ -> False++replayLedgerFoldFingerprint :: Text+replayLedgerFoldFingerprint = "e7747e791715d691f98690d59c480ef4"++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.+replayLedgerPredicateVerifications :: IO [(Text, BehaviorOwnership, S.PredicateVerification)]+replayLedgerPredicateVerifications = sequence+  [ verifyTransition "transition1EmptyRecord" GeneratedOwned ReplayLedgerEmpty 0+  , verifyTransition "transition2EmptyImportLegacy" GeneratedOwned ReplayLedgerEmpty 1+  ]+ where+  verifyTransition label owner source edgeIndex =+    case drop edgeIndex (K.edgesOut replayLedgerTransducer source) of+      K.Edge predicate _ _ _ _ : _ -> (\result -> (label, owner, result)) <$> S.verifyPredicate predicate+      [] -> pure (label, owner, S.UnverifiedSolverFailure "generated transition edge missing")
+ test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLookup/QueryContract.hs view
@@ -0,0 +1,10 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from readmodel replay_lookup; do not edit.+module Generated.CheckedMappingReplay.ReplayLookup.QueryContract+  ( ReplayLookupQueryInput+  , ReplayLookupQueryResult+  ) where++import Conformance.CheckedMappingReplay.Domain (ReplayEnvelope)++type ReplayLookupQueryInput = ReplayEnvelope+type ReplayLookupQueryResult = [ReplayEnvelope]
+ test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLookup/ReadModel.hs view
@@ -0,0 +1,28 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from readmodel replay_lookup; do not edit.+module Generated.CheckedMappingReplay.ReplayLookup.ReadModel+  ( replayLookupReadModel+  , replayLookupQualifiedTable+  ) where++import Generated.CheckedMappingReplay.ReplayLookup.ReadModelTable (replayLookupQualifiedTable)+import Generated.CheckedMappingReplay.ReplayLookup.QueryContract (ReplayLookupQueryInput, ReplayLookupQueryResult)+import CheckedMappingReplay.ReplayLookup.ReadModelHoles (replayLookupQuery)+import Keiro.ReadModel (QueryCursorAuthority (..), ReadModel, ReadModelBlueprint (..), HeadScope (..), headWaitingReadModel)++replayLookupReadModel :: ReadModel ReplayLookupQueryInput ReplayLookupQueryResult+replayLookupReadModel =+  case headWaitingReadModel EntireVisibleLog replayLookupReadModelBlueprint of+    Left definitionError -> error ("keiro-dsl generated an invalid waiting read model: " <> show definitionError)+    Right model -> model++replayLookupReadModelBlueprint :: ReadModelBlueprint ReplayLookupQueryInput ReplayLookupQueryResult+replayLookupReadModelBlueprint =+  ReadModelBlueprint+    { name = "checked-mapping-replay-replay-lookup"+    , tableName = "checked_mapping_replay"+    , schema = "public"+    , version = 1+    , shapeHash = "fnv1a:3c07a19c552c3547"+    , cursorAuthority = DurableQueryCursor "checked-mapping-replay-writer"+    , query = replayLookupQuery+    }
+ test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLookup/ReadModelHarness.hs view
@@ -0,0 +1,57 @@+-- @generated by keiro-dsl 0.18.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)+import Data.Text qualified as T+import Data.List.NonEmpty qualified as NE+import Generated.CheckedMappingReplay.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", "checked-mapping-replay-replay-lookup", T.unpack replayLookupReadModel.name)+  , ("shapeHash", "fnv1a:3c07a19c552c3547", T.unpack replayLookupReadModel.shapeHash)+  , ("freshness", "WaitForHead EntireVisibleLog", show (readModelDefaultFreshness replayLookupReadModel))+  , ("cursorAuthority", "DurableQueryCursor \"checked-mapping-replay-writer\"", show (readModelCursorAuthority replayLookupReadModel))+  ]+    <> catalogFactsAgainst ProjectionCatalog.projectionCatalogRegistrations ProjectionCatalog.projectionCatalogAsyncRegistrations ProjectionCatalog.projectionCatalogQuerySupplies++catalogFactsAgainst :: [Catalog.CatalogRegistration] -> [Catalog.AsyncProjectionRegistration] -> [Catalog.ResolvedQuerySupply] -> [(String, String, String)]+catalogFactsAgainst registrations asyncRegistrations supplies =+  [ ("catalogRegistration", "checked-mapping-replay-replay-lookup|1|fnv1a:3c07a19c552c3547|replay_rebuild", renderRegistration [entry | entry <- registrations, Catalog.queryModelIdText entry.queryModelId == "replay_lookup"])+  , ("querySupply", "replay_writer|replay_rebuild|replay_table", renderSupply [entry | entry <- supplies, Catalog.queryModelIdText entry.resolvedQueryModelId == "replay_lookup"])+  , ("projectionDelivery", "subscription", renderDelivery [entry | entry <- supplies, Catalog.queryModelIdText entry.resolvedQueryModelId == "replay_lookup"])+  , ("asyncRegistration:replay_writer", "checked-mapping-replay-writer|checked-mapping-replay-writer-v1", renderAsync [entry | entry <- asyncRegistrations, Catalog.projectionIdText entry.projectionId == "replay_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)
+ test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayLookup/ReadModelTable.hs view
@@ -0,0 +1,9 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from readmodel replay_lookup; do not edit.+module Generated.CheckedMappingReplay.ReplayLookup.ReadModelTable (replayLookupQualifiedTable) where++import Data.Text (Text)+import Keiro.Connection (qualifyTable)++-- The fully-qualified, double-quoted data-table reference.+replayLookupQualifiedTable :: Text+replayLookupQualifiedTable = qualifyTable "public" "checked_mapping_replay"
+ test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayReaction/Input.hs view
@@ -0,0 +1,16 @@+{-# LANGUAGE DeriveAnyClass #-}+-- @generated by keiro-dsl 0.18.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)+import GHC.Generics (Generic)+import Generated.CheckedMappingReplay.Nominals qualified as N+import Conformance.CheckedMappingReplay.Domain (ReplayEnvelope)++data ReplayReactionInput+  = ReplayRequested+      { retainedId :: !N.RetainedId+      , envelope :: !ReplayEnvelope+      }+  deriving stock (Generic, Eq, Show)+  deriving anyclass (FromJSON, ToJSON)
+ test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayReaction/Process.hs view
@@ -0,0 +1,78 @@+{-# OPTIONS_GHC -Wno-missing-signatures #-}+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from process reaction ReplayReaction; do not edit.+module Generated.CheckedMappingReplay.ReplayReaction.Process+  ( ReplayReactionInput (..)+  , replayReactionProcessName+  , replayReactionCategory+  , replayReactionProcessWorkerOptions+  , replayReactionReactionVersion+  , replayReactionReactionFingerprint+  , replayReactionReact+  , replayReactionProcessManager+  , replayReactionRunProcessWorker+  ) where++import Data.Text (Text)+import Numeric.Natural (Natural)+import Generated.CheckedMappingReplay.ReplayReaction.Input (ReplayReactionInput (..))+import CheckedMappingReplay.ReplayReaction.ProcessHoles (decodeReplayReactionInput)+import Generated.CheckedMappingReplay.ReplayLedger.Domain qualified as Saga+import Generated.CheckedMappingReplay.ReplayLedger.EventStream (replayLedgerEventStream, ReplayLedgerEventStreamDef)+import Generated.CheckedMappingReplay.ReplayTarget.Domain qualified as Target+import Generated.CheckedMappingReplay.ReplayTarget.EventStream (replayTargetCommandCategory, replayTargetEventStream)+import Generated.CheckedMappingReplay.Nominals qualified as N+import Keiro.Command (DomainCommandHandler (..), SilentDomainDecision (..))+import Keiro.ProcessManager (PMCommand (..))+import Keiro.ProcessManager.Reaction qualified as Reaction+import Keiro.Stream qualified as Stream+import Keiro.ProcessManager (PoisonPolicy (..), RejectedCommandPolicy (..), WorkerOptions (..))+import Shibuya.Core.Ack (RetryDelay (..))++replayReactionProcessName :: Text+replayReactionProcessName = "checked-mapping-replay-reaction"++replayReactionCategory :: Stream.StreamCategory ReplayLedgerEventStreamDef+replayReactionCategory = Stream.categoryUnsafe "checkedMappingReplaySaga"++replayReactionProcessWorkerOptions :: WorkerOptions es msg+replayReactionProcessWorkerOptions =+  WorkerOptions+    { poisonPolicy = PoisonHalt,+      rejectedCommandPolicy = RejectedHalt,+      transientRetryDelay = RetryDelay 5, -- matches defaultWorkerOptions; runtime tuning+      metrics = Nothing -- runtime configuration; install at call site+    }++replayReactionReactionVersion :: Natural+replayReactionReactionVersion = 1++replayReactionReactionFingerprint :: Text+replayReactionReactionFingerprint = "cc73d755be55b8a2d237ac02752ad8d425a50c5fb9f7c3bab8b5f5ada239b1c8"++replayReactionCorrelate :: ReplayReactionInput -> Text+replayReactionCorrelate input = case input of+  ReplayRequested { retainedId } -> (N.retainedIdText retainedId)++replayReactionReact :: ReplayReactionInput -> Reaction.ReactionPlan Saga.ReplayLedgerCommand Target.ReplayTargetCommand+replayReactionReact input = case input of+  ReplayRequested { retainedId, envelope }+    -> Reaction.AdvanceReaction { command = Saga.Record (Saga.RecordData { Saga.retainedId = retainedId, Saga.envelope = envelope }), followUps = [Reaction.FollowDispatch (PMCommand (Stream.entityStream replayTargetCommandCategory (N.retainedIdText retainedId)) (Target.Store (Target.StoreData { Target.retainedId = retainedId, Target.envelope = envelope })))], onAccepted = [] }++replayReactionProcessManager =+  Reaction.ReactiveProcessManager+    { name = replayReactionProcessName+    , correlate = replayReactionCorrelate+    , sagaHandler = DomainCommandHandler { eventStream = replayLedgerEventStream, classifySilent = \_ -> SilentNoOp () }+    , streamFor = Stream.entityStream replayReactionCategory+    , targetEventStream = replayTargetEventStream+    , targetProjections = const []+    , react = replayReactionReact+    }++replayReactionRunProcessWorker options adapter =+  Reaction.runReactiveProcessManagerWorkerWith+    replayReactionProcessWorkerOptions+    options+    replayReactionProcessManager+    adapter+    (\event -> case decodeReplayReactionInput event of Nothing -> Nothing; Just input -> Just (event, input))
+ test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayReaction/ProcessHarness.hs view
@@ -0,0 +1,16 @@+-- @generated by keiro-dsl 0.18.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,+-- lowered to plain values so a driver can assert them against a committed+-- expectation. The driver's expectation is hand-written (not generated), so a+-- spec change that alters a decision diverges from it and turns a specific+-- assertion red — the spec->behaviour pin. (Live-runtime behavioural+-- conformance of the filled ProcessManager is the M5 step.)+processHarnessValues :: [(String, String)]+processHarnessValues =+  [ ("reactionOwnership", "generated-declarative")+  , ("reactionVersion", "1")+  , ("reactionFingerprint", "cc73d755be55b8a2d237ac02752ad8d425a50c5fb9f7c3bab8b5f5ada239b1c8")+  , ("reaction.ReplayRequested.0", "guard=always;advance=Record;followUps=dispatch:ReplayTarget.Store;accepted=")+  ]
+ test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayTarget/BehaviorContract.hs view
@@ -0,0 +1,338 @@+{-# LANGUAGE OverloadedLabels #-}+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from aggregate ReplayTarget; do not edit.+module Generated.CheckedMappingReplay.ReplayTarget.BehaviorContract+  ( BehaviorKey (..)+  , unBehaviorKey+  , ObligationKind (..)+  , EvidenceLevel (..)+  , GuardCoverage (..)+  , BehaviorRequirement (..)+  , RejectionClass (..)+  , LiveExpectation (..)+  , BehaviorWitness (..)+  , BehaviorFailure (..)+  , BehaviorConformanceReport (..)+  , behaviorRequirements+  , behaviorCoverageReport+  , behaviorConformancePassed+  , behaviorConformancePassedWith+  , renderBehaviorConformanceText+  ) where++import Generated.CheckedMappingReplay.ReplayTarget.Codec (encodeReplayTargetEvent, parseReplayTargetEvent, replayTargetCodec)+import Generated.CheckedMappingReplay.ReplayTarget.Domain+import Generated.CheckedMappingReplay.ReplayTarget.Transducer (replayTargetTransducer)+import Generated.CheckedMappingReplay.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 :: !ReplayTargetVertex+  , commandName :: !Text+  , expectedEdge :: !(Maybe (K.EdgeRef ReplayTargetVertex))+  , target :: !(Maybe ReplayTargetVertex)+  , eventKinds :: ![Text]+  }+  deriving stock (Eq, Show)++data RejectionClass = RejectNoOutgoingEdges | RejectNoMatchingEdge+  deriving stock (Eq, Show)++data LiveExpectation+  = Emits (NonEmpty ReplayTargetEvent)+  | Rejects RejectionClass+  | NoOp+  deriving stock (Eq, Show)++data BehaviorWitness+  = Pending BehaviorKey+  | LiveWitness+      { key :: BehaviorKey+      , history :: [ReplayTargetEvent]+      , command :: ReplayTargetCommand+      , expected :: LiveExpectation+      }+  | ReplayWitness+      { key :: BehaviorKey+      , historyPrefix :: [ReplayTargetEvent]+      , observedChunk :: [ReplayTargetEvent]+      }+  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 =+  [ -- ReplayTargetReady x Store: live transition+    BehaviorRequirement+      { key = BehaviorKey "behavior-v1-756d75346570c343"+      , kind = LiveTransition+      , evidence = GeneratedAuthoritative+      , guardCoverage = GuardTotal+      , source = ReplayTargetReady+      , commandName = "Store"+      , expectedEdge = (Just (K.EdgeRef ReplayTargetReady 0))+      , target = Just ReplayTargetReady+      , eventKinds = ["Stored"]+      }+  ]++behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport+behaviorCoverageReport 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 <- behaviorRequirements]+  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: ReplayTarget"+  , "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 -> [ReplayTargetEvent] -> ReplayTargetCommand -> 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 -> (ReplayTargetVertex, K.RegFile ReplayTargetRegs) -> ReplayTargetCommand -> 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 replayTargetTransducer 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 -> (ReplayTargetVertex, K.RegFile ReplayTargetRegs) -> ReplayTargetCommand -> 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 replayTargetTransducer 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 replayTargetTransducer 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 replayTargetTransducer 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 ReplayTargetRegs ReplayTargetVertex ReplayTargetEvent -> 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 -> [ReplayTargetEvent] -> [ReplayTargetEvent] -> 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 replayTargetTransducer (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 ReplayTargetVertex] -> 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 -> [ReplayTargetEvent] -> Either BehaviorFailure (K.ReplaySuccess ReplayTargetRegs ReplayTargetVertex)+settleHistory requirement label history = do+  decoded <- either (failure requirement (label <> "-codec-decode")) Right (decodeEvents history)+  case K.applyEventsDetailedEither replayTargetTransducer (ReplayTargetReady, initialReplayTargetRegs) decoded of+    Left replayFailure -> failure requirement (label <> "-replay-failed") (tshow replayFailure)+    Right replaySuccess -> Right replaySuccess++decodeEvents :: [ReplayTargetEvent] -> Either Text [ReplayTargetEvent]+decodeEvents = traverse (\event -> parseReplayTargetEvent (Codec.eventType replayTargetCodec event) (encodeReplayTargetEvent event))++commandKind :: ReplayTargetCommand -> Text+commandKind command = case command of+  Store _ -> "Store"++eventKind :: ReplayTargetEvent -> Text+eventKind event = case Codec.eventType replayTargetCodec event of Codec.EventType tag -> tag++regsEqual :: K.RegFile ReplayTargetRegs -> K.RegFile ReplayTargetRegs -> Bool+regsEqual left right = (left K.! #latest) == (right K.! #latest)++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
+ test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayTarget/Codec.hs view
@@ -0,0 +1,218 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from aggregate ReplayTarget; do not edit.+module Generated.CheckedMappingReplay.ReplayTarget.Codec (+    replayTargetCodec,+    parseReplayTargetEvent,+    encodeReplayTargetEvent,+    encodeContentHashMapped,+    decodeContentHashMapped,+    encodeImportantDaysMapped,+    decodeImportantDaysMapped,+    encodeMaybeContentHashMapped,+    decodeMaybeContentHashMapped,+    encodeMaybeLabelMapped,+    decodeMaybeLabelMapped,+    encodeReplayEnvelopeMapped,+    decodeReplayEnvelopeMapped,+    encodeTextLabelsMapped,+    decodeTextLabelsMapped,+) where++import Generated.CheckedMappingReplay.ReplayTarget.Domain+import Generated.CheckedMappingReplay.Nominals (retainedIdText)+import Generated.CheckedMappingReplay.Nominals.Internal (unsafeRetainedIdFromLegacyText)+import Control.Monad (unless)+import Data.Aeson (Value (..), object, parseJSON, toJSON, withObject, (.:), (.=))+import Data.Aeson.Key qualified as Key+import Data.Aeson.KeyMap qualified as KeyMap+import Data.Aeson.Types (Parser, JSONPathElement (..), (<?>), explicitParseField, parseEither)+import Data.List.NonEmpty (NonEmpty (..))+import Data.List.NonEmpty qualified as NonEmpty+import Data.Map.Strict qualified as Map+import Data.Text (Text)+import qualified Data.Text as T+import Keiro.Codec.CalendarDay (encodeCalendarDay, parseCalendarDay)+import Keiro.Codec.TextSet (encodeTextSet, parseTextSet)+import Keiro.Codec.Base16Bytes (encodeBase16Bytes, parseBase16Bytes)+import Keiro.Codec.Structural (bindingFromShape, bindingToShape)+import Keiro.Codec (Codec (..), EventType (..))+++import Generated.CheckedMappingReplay.Structural.NominalLeaves (encodeRetainedIdLeaf, parseRetainedIdLeaf)+import Generated.CheckedMappingReplay.Structural.NominalLeaves (parseRetainedIdLeafKey, renderRetainedIdLeafKey)+import Conformance.CheckedMappingReplay.Bindings qualified as Bindings+import Conformance.CheckedMappingReplay.Domain (ContentHash, ImportantDays, MaybeContentHash, MaybeLabel, ReplayEnvelope, TextLabels)+import Generated.CheckedMappingReplay.Structural.Shape.ContentHash qualified as ShapeContentHash+import Generated.CheckedMappingReplay.Structural.Shape.ImportantDays qualified as ShapeImportantDays+import Generated.CheckedMappingReplay.Structural.Shape.MaybeContentHash qualified as ShapeMaybeContentHash+import Generated.CheckedMappingReplay.Structural.Shape.MaybeLabel qualified as ShapeMaybeLabel+import Generated.CheckedMappingReplay.Structural.Shape.ReplayEnvelope qualified as ShapeReplayEnvelope+import Generated.CheckedMappingReplay.Structural.Shape.TextLabels qualified as ShapeTextLabels++++encodeContentHashMapped :: ContentHash -> Value+encodeContentHashMapped = encodeContentHashShape . bindingToShape Bindings.contentHashBinding++parseContentHashMapped :: Value -> Parser ContentHash+parseContentHashMapped value = bindingFromShape Bindings.contentHashBinding <$> parseContentHashShape value++decodeContentHashMapped :: Value -> Either Text ContentHash+decodeContentHashMapped = mapLeftText . parseEither parseContentHashMapped++encodeContentHashShape :: ShapeContentHash.ContentHashShape -> Value+encodeContentHashShape = encodeBase16Bytes++parseContentHashShape :: Value -> Parser ShapeContentHash.ContentHashShape+parseContentHashShape = parseBase16Bytes++encodeImportantDaysMapped :: ImportantDays -> Value+encodeImportantDaysMapped = encodeImportantDaysShape . bindingToShape Bindings.importantDaysBinding++parseImportantDaysMapped :: Value -> Parser ImportantDays+parseImportantDaysMapped value = bindingFromShape Bindings.importantDaysBinding <$> parseImportantDaysShape value++decodeImportantDaysMapped :: Value -> Either Text ImportantDays+decodeImportantDaysMapped = mapLeftText . parseEither parseImportantDaysMapped++encodeImportantDaysShape :: ShapeImportantDays.ImportantDaysShape -> Value+encodeImportantDaysShape value = toJSON (map (\item0 -> encodeCalendarDay (item0)) (value))++parseImportantDaysShape :: Value -> Parser ShapeImportantDays.ImportantDaysShape+parseImportantDaysShape = \value0 -> do items0 <- (parseJSON value0 :: Parser [Value]); traverse (\(index0, item0) -> (parseCalendarDay) item0 <?> Index index0) (zip [0..] items0)++encodeMaybeContentHashMapped :: MaybeContentHash -> Value+encodeMaybeContentHashMapped = encodeMaybeContentHashShape . bindingToShape Bindings.maybeContentHashBinding++parseMaybeContentHashMapped :: Value -> Parser MaybeContentHash+parseMaybeContentHashMapped value = bindingFromShape Bindings.maybeContentHashBinding <$> parseMaybeContentHashShape value++decodeMaybeContentHashMapped :: Value -> Either Text MaybeContentHash+decodeMaybeContentHashMapped = mapLeftText . parseEither parseMaybeContentHashMapped++encodeMaybeContentHashShape :: ShapeMaybeContentHash.MaybeContentHashShape -> Value+encodeMaybeContentHashShape value = maybe Null (\item0 -> encodeContentHashShape (item0)) (value)++parseMaybeContentHashShape :: Value -> Parser ShapeMaybeContentHash.MaybeContentHashShape+parseMaybeContentHashShape = \value0 -> case value0 of Null -> pure Nothing; other0 -> Just <$> (parseContentHashShape) other0++encodeMaybeLabelMapped :: MaybeLabel -> Value+encodeMaybeLabelMapped = encodeMaybeLabelShape . bindingToShape Bindings.maybeLabelBinding++parseMaybeLabelMapped :: Value -> Parser MaybeLabel+parseMaybeLabelMapped value = bindingFromShape Bindings.maybeLabelBinding <$> parseMaybeLabelShape value++decodeMaybeLabelMapped :: Value -> Either Text MaybeLabel+decodeMaybeLabelMapped = mapLeftText . parseEither parseMaybeLabelMapped++encodeMaybeLabelShape :: ShapeMaybeLabel.MaybeLabelShape -> Value+encodeMaybeLabelShape value = maybe Null (\item0 -> toJSON (item0)) (value)++parseMaybeLabelShape :: Value -> Parser ShapeMaybeLabel.MaybeLabelShape+parseMaybeLabelShape = \value0 -> case value0 of Null -> pure Nothing; other0 -> Just <$> (parseJSON) other0++encodeReplayEnvelopeMapped :: ReplayEnvelope -> Value+encodeReplayEnvelopeMapped = encodeReplayEnvelopeShape . bindingToShape Bindings.replayEnvelopeBinding++parseReplayEnvelopeMapped :: Value -> Parser ReplayEnvelope+parseReplayEnvelopeMapped value = bindingFromShape Bindings.replayEnvelopeBinding <$> parseReplayEnvelopeShape value++decodeReplayEnvelopeMapped :: Value -> Either Text ReplayEnvelope+decodeReplayEnvelopeMapped = mapLeftText . parseEither parseReplayEnvelopeMapped++encodeReplayEnvelopeShape :: ShapeReplayEnvelope.ReplayEnvelopeShape -> Value+encodeReplayEnvelopeShape shape =+  object+      [ "label" .= encodeMaybeLabelShape (shape.label)+      , "days" .= encodeImportantDaysShape (shape.days)+      , "labels" .= encodeTextLabelsShape (shape.labels)+      , "contentHash" .= encodeMaybeContentHashShape (shape.contentHash)+      , "primary" .= encodeRetainedIdLeaf shape.primary+      , "identities" .= Object (KeyMap.fromList [(Key.fromText (renderRetainedIdLeafKey key0), toJSON (item0)) | (key0, item0) <- Map.toList (shape.identities)])+      , "optionalLabels" .= maybe Null (\item0 -> encodeTextSet (item0)) (shape.optionalLabels)+      ]++parseReplayEnvelopeShape :: Value -> Parser ShapeReplayEnvelope.ReplayEnvelopeShape+parseReplayEnvelopeShape = withObject "ReplayEnvelopeShape" $ \objectValue -> do+  rejectUnknownFields "ReplayEnvelope" ["label", "days", "labels", "contentHash", "primary", "identities", "optionalLabels"] objectValue+  ShapeReplayEnvelope.ReplayEnvelope+    <$> explicitParseField (parseMaybeLabelShape) objectValue "label"+    <*> explicitParseField (parseImportantDaysShape) objectValue "days"+    <*> explicitParseField (parseTextLabelsShape) objectValue "labels"+    <*> explicitParseField (parseMaybeContentHashShape) objectValue "contentHash"+    <*> explicitParseField (parseRetainedIdLeaf) objectValue "primary"+    <*> explicitParseField (\value0 -> withObject "Map[RetainedId]" (\object0 -> Map.fromList <$> traverse (\(rawKey0, item0) -> do key0 <- parseRetainedIdLeafKey (Key.toText rawKey0) <?> Key rawKey0; parsedItem0 <- (parseJSON) item0 <?> Key rawKey0; pure (key0, parsedItem0)) (KeyMap.toList object0)) value0) objectValue "identities"+    <*> parseOptionalField (pure Nothing) (\value0 -> case value0 of Null -> pure Nothing; other0 -> Just <$> (parseTextSet) other0) objectValue "optionalLabels"++encodeTextLabelsMapped :: TextLabels -> Value+encodeTextLabelsMapped = encodeTextLabelsShape . bindingToShape Bindings.textLabelsBinding++parseTextLabelsMapped :: Value -> Parser TextLabels+parseTextLabelsMapped value = bindingFromShape Bindings.textLabelsBinding <$> parseTextLabelsShape value++decodeTextLabelsMapped :: Value -> Either Text TextLabels+decodeTextLabelsMapped = mapLeftText . parseEither parseTextLabelsMapped++encodeTextLabelsShape :: ShapeTextLabels.TextLabelsShape -> Value+encodeTextLabelsShape value = encodeTextSet (value)++parseTextLabelsShape :: Value -> Parser ShapeTextLabels.TextLabelsShape+parseTextLabelsShape = parseTextSet++replayTargetEventTypes :: NonEmpty EventType+replayTargetEventTypes = EventType "Stored" :| []++replayTargetCodec :: Codec ReplayTargetEvent+replayTargetCodec =+  Codec+    { eventTypes = replayTargetEventTypes+    , eventType = \case+        Stored{} -> EventType "Stored"+    , schemaVersion = 1+    , encode = encodeReplayTargetEvent+    , decode = parseReplayTargetEvent+    , upcasters = []+    }++encodeReplayTargetEvent :: ReplayTargetEvent -> Value+encodeReplayTargetEvent = \case+  Stored payload ->+    object+      [ "kind" .= ("Stored" :: Text)+      , "retainedId" .= retainedIdText payload.retainedId+      , "envelope" .= encodeReplayEnvelopeMapped payload.envelope+      ]++parseReplayTargetEvent :: EventType -> Value -> Either Text ReplayTargetEvent+parseReplayTargetEvent (EventType tag) = mapLeftText . parseEither (withObject "ReplayTargetEvent" go)+  where+    go o = do+      case tag of+        "Stored" ->+          Stored+            <$> ( StoredData+                    <$> (unsafeRetainedIdFromLegacyText <$> o .: "retainedId")+                    <*> explicitParseField parseReplayEnvelopeMapped o "envelope"+                )+        _ -> fail ("unknown event type " <> show tag <> "; expected one of: " <> renderExpectedEventTypes replayTargetEventTypes)++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++parseOptionalField :: Parser fieldValue -> (Value -> Parser fieldValue) -> KeyMap.KeyMap Value -> Key.Key -> Parser fieldValue+parseOptionalField onMissing parseItem objectValue key =+  case KeyMap.lookup key objectValue of+    Nothing -> onMissing+    Just _ -> explicitParseField parseItem objectValue key++rejectUnknownFields :: String -> [Text] -> KeyMap.KeyMap Value -> Parser ()+rejectUnknownFields label allowed objectValue =+  unless (null extras) (fail (label <> " contains unknown fields: " <> show extras))+  where+    extras = filter (`notElem` allowed) (map Key.toText (KeyMap.keys objectValue))
+ test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayTarget/Domain.hs view
@@ -0,0 +1,46 @@+{-# LANGUAGE TemplateHaskell #-}+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from aggregate ReplayTarget; do not edit.+module Generated.CheckedMappingReplay.ReplayTarget.Domain where++import Data.Proxy (Proxy (..))+import GHC.Generics (Generic)+import Keiki.Core (RegFile (..))+import Generated.CheckedMappingReplay.Nominals (RetainedId)+import Conformance.CheckedMappingReplay.Bindings qualified as Bindings+import Conformance.CheckedMappingReplay.Domain (ReplayEnvelope)+import Keiki.Generics.TH (deriveAggregateCtorsAll, deriveWireCtorsAll)++data ReplayTargetVertex = ReplayTargetReady+  deriving stock (Generic, Eq, Ord, Show, Enum, Bounded)++data StoreData = StoreData+  { retainedId :: !RetainedId+  , envelope :: !ReplayEnvelope+  }+  deriving stock (Generic, Eq, Show)++data ReplayTargetCommand = Store !StoreData+  deriving stock (Generic, Eq, Show)++data StoredData = StoredData+  { retainedId :: !RetainedId+  , envelope :: !ReplayEnvelope+  }+  deriving stock (Generic, Eq, Show)++data ReplayTargetEvent = Stored !StoredData+  deriving stock (Generic, Eq, Show)++type ReplayTargetRegs =+  '[ '("latest", ReplayEnvelope)+   ]++initialReplayTargetRegs :: RegFile ReplayTargetRegs+initialReplayTargetRegs =+  RCons (Proxy @"latest") Bindings.initialReplayEnvelope RNil++$(deriveAggregateCtorsAll ''ReplayTargetCommand ''ReplayTargetRegs)++++$(deriveWireCtorsAll ''ReplayTargetEvent)
+ test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayTarget/EventStream.hs view
@@ -0,0 +1,49 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from aggregate ReplayTarget; do not edit.+module Generated.CheckedMappingReplay.ReplayTarget.EventStream+  ( replayTargetCategory+  , replayTargetCommandCategory+  , replayTargetEventStream+  , replayTargetEventStreamDef+  , ReplayTargetEventStream+  , ReplayTargetEventStreamDef+  ) where++import Generated.CheckedMappingReplay.ReplayTarget.Domain+import Generated.CheckedMappingReplay.ReplayTarget.Codec (replayTargetCodec)+import Generated.CheckedMappingReplay.ReplayTarget.Transducer (replayTargetTransducer)+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.+replayTargetCategory :: Stream.StreamCategory ReplayTargetEventStreamDef+replayTargetCategory = Stream.categoryUnsafe "replayTarget"++-- The same category text, typed for command envelopes such as PMCommand.+replayTargetCommandCategory :: Stream.StreamCategory ReplayTargetCommand+replayTargetCommandCategory = Stream.categoryUnsafe "replayTarget"++type ReplayTargetEventStreamDef =+  EventStream (HsPred ReplayTargetRegs ReplayTargetCommand) ReplayTargetRegs ReplayTargetVertex ReplayTargetCommand ReplayTargetEvent++type ReplayTargetEventStream =+  ValidatedEventStream (HsPred ReplayTargetRegs ReplayTargetCommand) ReplayTargetRegs ReplayTargetVertex ReplayTargetCommand ReplayTargetEvent++replayTargetEventStreamDef :: ReplayTargetEventStreamDef+replayTargetEventStreamDef =+  EventStream+    { transducer = replayTargetTransducer,+      initialState = ReplayTargetReady,+      initialRegisters = initialReplayTargetRegs,+      eventCodec = replayTargetCodec,+      resolveStreamName = Stream.streamName,+      snapshotPolicy = Never,+      stateCodec = Nothing+    }++replayTargetEventStream :: ReplayTargetEventStream+replayTargetEventStream =+  mkEventStreamOrThrow "ReplayTarget" replayTargetEventStreamDef
+ test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayTarget/Harness.hs view
@@ -0,0 +1,100 @@+{-# LANGUAGE OverloadedLabels #-}+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from aggregate ReplayTarget; do not edit.+module Generated.CheckedMappingReplay.ReplayTarget.Harness (harnessAssertions) where++import Generated.CheckedMappingReplay.ReplayTarget.Domain+import Generated.CheckedMappingReplay.ReplayTarget.Codec (encodeReplayTargetEvent, parseReplayTargetEvent, replayTargetCodec, encodeReplayEnvelopeMapped, decodeReplayEnvelopeMapped)+import Generated.CheckedMappingReplay.ReplayTarget.Transducer (replayTargetTransducer)+import Keiki.Core (applyEventsEither, defaultValidationOptions, step, validateTransducer, (!))+import Keiro.Codec (eventType)+import Generated.CheckedMappingReplay.Nominals (RetainedId, parseRetainedId)+import Data.Aeson qualified as Aeson+import Data.Aeson.Key qualified as AesonKey+import Data.Aeson.KeyMap qualified as AesonKeyMap+import Data.Either (isLeft, isRight)+import Data.List.NonEmpty qualified as NonEmpty+import Data.Text qualified as T+import Keiro.Codec.Structural (FixtureCases (..))+import Conformance.CheckedMappingReplay.Bindings qualified as Bindings++-- | (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 replayTargetTransducer))+  -- clock-free: spec samples no wall clock (verified at scaffold time)+  , ("golden round-trip: Stored", roundTrips sampleEventStored)+  , ("accepts Store from ReplayTargetReady", acceptStore)+  ]+  ++ mappedConformanceAssertions+  ++ forwardReplayStore++roundTrips :: ReplayTargetEvent -> Bool+roundTrips e = parseReplayTargetEvent (eventType replayTargetCodec e) (encodeReplayTargetEvent e) == Right e++sampleRetainedId :: RetainedId+sampleRetainedId =+  case parseRetainedId "retained_01h455vb4pex5vsknk084sn02q" of+    Right parsed -> parsed+    Left problem -> error (show problem)++sampleEventStored :: ReplayTargetEvent+sampleEventStored = Stored (StoredData sampleRetainedId (snd (NonEmpty.head (fixtureCases Bindings.replayEnvelopeFixtures))))++acceptStore :: Bool+acceptStore =+  case step replayTargetTransducer (ReplayTargetReady, initialReplayTargetRegs) (Store (StoreData sampleRetainedId (snd (NonEmpty.head (fixtureCases Bindings.replayEnvelopeFixtures))))) of+    Just (v, _, _) -> v == ReplayTargetReady+    Nothing -> False++-- forward/replay equality (plan 147): cross the persisted codec boundary,+-- replay the emitted chain, and compare the final vertex and every register.+forwardReplayStore :: [(String, Bool)]+forwardReplayStore =+  case step replayTargetTransducer (ReplayTargetReady, initialReplayTargetRegs) (Store (StoreData sampleRetainedId (snd (NonEmpty.head (fixtureCases Bindings.replayEnvelopeFixtures))))) of+    Nothing -> [(prefix <> "forward step accepted", False)]+    Just (forwardVertex, forwardRegs, emitted) ->+      case mapM (\event -> parseReplayTargetEvent (eventType replayTargetCodec event) (encodeReplayTargetEvent event)) emitted of+        Left _ -> [(prefix <> "emitted chain decodes", False)]+        Right decodedEvents ->+          case applyEventsEither replayTargetTransducer (ReplayTargetReady, initialReplayTargetRegs) decodedEvents of+            Left _ -> [(prefix <> "replay succeeds", False)]+            Right (replayVertex, replayRegs) ->+              [ (prefix <> "final vertex", replayVertex == forwardVertex)+              , (prefix <> "register latest", (replayRegs ! #latest) == (forwardRegs ! #latest))+              ]+  where+    prefix = "forward/replay equality: Store from ReplayTargetReady -- "++mappedConformanceAssertions :: [(String, Bool)]+mappedConformanceAssertions =+  concat+    [ storedEnvelopeAssertions+    , structuralWirePolicyAssertions+    ]++storedEnvelopeAssertions :: [(String, Bool)]+storedEnvelopeAssertions =+  [ ("mapped codec round-trip: Stored/envelope/" <> T.unpack label, roundTrips (Stored (StoredData sampleRetainedId mappedValue)))+  | (label, mappedValue) <- NonEmpty.toList (fixtureCases Bindings.replayEnvelopeFixtures)+  ]++structuralWirePolicyAssertions :: [(String, Bool)]+structuralWirePolicyAssertions =+  [ ("wire policy missing default: conformance.checked-mapping-replay.ReplayEnvelope.v1/optionalLabels", case decodeReplayEnvelopeMapped (deleteObjectField "optionalLabels" (encodeReplayEnvelopeMapped (snd (NonEmpty.head (fixtureCases Bindings.replayEnvelopeFixtures))))) of Left _ -> False; Right decoded -> objectField "optionalLabels" (encodeReplayEnvelopeMapped decoded) == Just (Aeson.Null))+  , ("wire policy explicit null: conformance.checked-mapping-replay.ReplayEnvelope.v1/optionalLabels", isRight (decodeReplayEnvelopeMapped (insertObjectField "optionalLabels" Aeson.Null (encodeReplayEnvelopeMapped (snd (NonEmpty.head (fixtureCases Bindings.replayEnvelopeFixtures)))))))+  , ("wire policy unknown fields: conformance.checked-mapping-replay.ReplayEnvelope.v1", all (\(_, value) -> isLeft (decodeReplayEnvelopeMapped (insertObjectField "__keiro_unknown" (Aeson.Bool True) (encodeReplayEnvelopeMapped value)))) (NonEmpty.toList (fixtureCases Bindings.replayEnvelopeFixtures)))+  ]++deleteObjectField :: T.Text -> Aeson.Value -> Aeson.Value+deleteObjectField key (Aeson.Object objectValue) = Aeson.Object (AesonKeyMap.delete (AesonKey.fromText key) objectValue)+deleteObjectField _ value = value++insertObjectField :: T.Text -> Aeson.Value -> Aeson.Value -> Aeson.Value+insertObjectField key inserted (Aeson.Object objectValue) = Aeson.Object (AesonKeyMap.insert (AesonKey.fromText key) inserted objectValue)+insertObjectField _ _ value = value++objectField :: T.Text -> Aeson.Value -> Maybe Aeson.Value+objectField key (Aeson.Object objectValue) = AesonKeyMap.lookup (AesonKey.fromText key) objectValue+objectField _ _ = Nothing
+ test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayTarget/Projection.hs view
@@ -0,0 +1,4 @@+-- @generated by keiro-dsl 0.18.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.
+ test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/ReplayTarget/Transducer.hs view
@@ -0,0 +1,57 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE QualifiedDo #-}+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from aggregate ReplayTarget; do not edit.+module Generated.CheckedMappingReplay.ReplayTarget.Transducer+  ( replayTargetTransducer+  , replayTargetFoldFingerprint+  , BehaviorOwnership (..)+  , replayTargetPredicateVerifications+  ) where++import Generated.CheckedMappingReplay.ReplayTarget.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 Keiki.Builder ((=:))++replayTargetTransducer+  :: SymTransducer+       (HsPred ReplayTargetRegs ReplayTargetCommand)+       ReplayTargetRegs+       ReplayTargetVertex+       ReplayTargetCommand+       ReplayTargetEvent+replayTargetTransducer =+  B.buildTransducer ReplayTargetReady initialReplayTargetRegs isTerminal do+    B.from ReplayTargetReady do+      B.onCmd inCtorStore $ \d -> B.do+        B.slot @"latest" =: d.envelope+        B.emit wireStored (StoredTermFields+          { retainedId = d.retainedId+          , envelope = d.envelope+          })+        B.goto ReplayTargetReady+ where+  isTerminal = \case++    _ -> False++replayTargetFoldFingerprint :: Text+replayTargetFoldFingerprint = "90fa5667a0617a785985587ae2b487db"++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.+replayTargetPredicateVerifications :: IO [(Text, BehaviorOwnership, S.PredicateVerification)]+replayTargetPredicateVerifications = sequence+  [ verifyTransition "transition1ReadyStore" GeneratedOwned ReplayTargetReady 0+  ]+ where+  verifyTransition label owner source edgeIndex =+    case drop edgeIndex (K.edgesOut replayTargetTransducer source) of+      K.Edge predicate _ _ _ _ : _ -> (\result -> (label, owner, result)) <$> S.verifyPredicate predicate+      [] -> pure (label, owner, S.UnverifiedSolverFailure "generated transition edge missing")
+ test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Structural/NominalLeaves.hs view
@@ -0,0 +1,24 @@+-- @generated by keiro-dsl 0.18.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)+import Data.Aeson.Types (Parser)+import Data.Text (Text)+import Data.Text qualified as T+import Generated.CheckedMappingReplay.Nominals qualified as Nominals++encodeRetainedIdLeaf :: Nominals.RetainedId -> Value+encodeRetainedIdLeaf = String . Nominals.retainedIdText+{-# NOINLINE encodeRetainedIdLeaf #-}++parseRetainedIdLeaf :: Value -> Parser Nominals.RetainedId+parseRetainedIdLeaf = withText "RetainedId" (either (fail . T.unpack) pure . Nominals.parseRetainedId)+{-# NOINLINE parseRetainedIdLeaf #-}++renderRetainedIdLeafKey :: Nominals.RetainedId -> Text+renderRetainedIdLeafKey = Nominals.retainedIdText+{-# NOINLINE renderRetainedIdLeafKey #-}++parseRetainedIdLeafKey :: Text -> Parser Nominals.RetainedId+parseRetainedIdLeafKey = either (fail . T.unpack) pure . Nominals.parseRetainedId+{-# NOINLINE parseRetainedIdLeafKey #-}
+ test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Structural/Shape/ContentHash.hs view
@@ -0,0 +1,6 @@+-- @generated by keiro-dsl 0.18.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)++type ContentHashShape = ByteString
+ test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Structural/Shape/ImportantDays.hs view
@@ -0,0 +1,6 @@+-- @generated by keiro-dsl 0.18.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)++type ImportantDaysShape = [Day]
+ test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Structural/Shape/MaybeContentHash.hs view
@@ -0,0 +1,6 @@+-- @generated by keiro-dsl 0.18.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++type MaybeContentHashShape = (Maybe ContentHash.ContentHashShape)
+ test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Structural/Shape/MaybeLabel.hs view
@@ -0,0 +1,6 @@+-- @generated by keiro-dsl 0.18.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)++type MaybeLabelShape = (Maybe Text)
+ test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Structural/Shape/ReplayEnvelope.hs view
@@ -0,0 +1,23 @@+-- @generated by keiro-dsl 0.18.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)+import Data.Set (Set)+import Data.Text (Text)+import GHC.Generics (Generic)+import Generated.CheckedMappingReplay.Nominals qualified as Nominals+import Generated.CheckedMappingReplay.Structural.Shape.ImportantDays qualified as ImportantDays+import Generated.CheckedMappingReplay.Structural.Shape.MaybeContentHash qualified as MaybeContentHash+import Generated.CheckedMappingReplay.Structural.Shape.MaybeLabel qualified as MaybeLabel+import Generated.CheckedMappingReplay.Structural.Shape.TextLabels qualified as TextLabels++data ReplayEnvelopeShape = ReplayEnvelope+  { label :: !MaybeLabel.MaybeLabelShape+  , days :: !ImportantDays.ImportantDaysShape+  , labels :: !TextLabels.TextLabelsShape+  , contentHash :: !MaybeContentHash.MaybeContentHashShape+  , primary :: !Nominals.RetainedId+  , identities :: !(Map Nominals.RetainedId Text)+  , optionalLabels :: !(Maybe (Set Text))+  }+  deriving stock (Eq, Generic, Show)
+ test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/Structural/Shape/TextLabels.hs view
@@ -0,0 +1,7 @@+-- @generated by keiro-dsl 0.18.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)+import Data.Text (Text)++type TextLabelsShape = (Set Text)
+ test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/StructuralConformance.hs view
@@ -0,0 +1,157 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from context checked-mapping-replay structural conformance; do not edit.+module Generated.CheckedMappingReplay.StructuralConformance+  ( structuralConformanceAssertions+  ) where++import Data.Aeson qualified as Aeson+import Data.Aeson.Types qualified as AesonTypes+import Data.List (nub)+import Data.List.NonEmpty qualified as NonEmpty+import Data.Map.Strict qualified as Map+import Data.Maybe (isJust, isNothing)+import Data.Proxy (Proxy (..))+import Data.Text qualified as T+import Keiki.Core (fieldWitnessAgrees)+import Keiki.Shape (CanonicalTypeName (..))+import Keiro.Codec.Structural (FixtureCases (..), bindingDomainRoundTrip, bindingShapeRoundTrip, bindingToShape)+import Generated.CheckedMappingReplay.StructuralProjections qualified as StructuralProjections+import Generated.CheckedMappingReplay.Structural.Shape.ReplayEnvelope (ReplayEnvelopeShape(optionalLabels))+import Conformance.CheckedMappingReplay.Bindings qualified as Bindings+import Conformance.CheckedMappingReplay.Domain (ContentHash, ImportantDays, MaybeContentHash, MaybeLabel, ReplayEnvelope, TextLabels)+import Generated.CheckedMappingReplay.Nominals qualified as Nominals+import Generated.CheckedMappingReplay.Structural.NominalLeaves qualified as NominalLeaves+import Generated.CheckedMappingReplay.Structural.Shape.ReplayEnvelope qualified as ShapeReplayEnvelope++structuralConformanceAssertions :: [(String, Bool)]+structuralConformanceAssertions =+  concat+    [ contentHashBindingAssertions+    , importantDaysBindingAssertions+    , maybeContentHashBindingAssertions+    , maybeLabelBindingAssertions+    , replayEnvelopeBindingAssertions+    , textLabelsBindingAssertions+    , [("generated nominal canonical text: conformance.checked-mapping-replay.ReplayEnvelope.v1/RetainedId", all (\(_, value) -> (case bindingToShape Bindings.replayEnvelopeBinding value of ShapeReplayEnvelope.ReplayEnvelope _ _ _ _ field0_4 field0_5 _ -> ((NominalLeaves.encodeRetainedIdLeaf (field0_4) == Aeson.String (Nominals.retainedIdText (field0_4)) && AesonTypes.parseEither NominalLeaves.parseRetainedIdLeaf (NominalLeaves.encodeRetainedIdLeaf (field0_4)) == Right (field0_4))) && ((all (\key1 -> (NominalLeaves.encodeRetainedIdLeaf (key1) == Aeson.String (Nominals.retainedIdText (key1)) && AesonTypes.parseEither NominalLeaves.parseRetainedIdLeaf (NominalLeaves.encodeRetainedIdLeaf (key1)) == Right (key1))) (Map.keys (field0_5)))))) (NonEmpty.toList (fixtureCases Bindings.replayEnvelopeFixtures)))]+    , [("fixture coverage: conformance.checked-mapping-replay.ContentHash.v1", coverageContentHash)]+    , [("fixture coverage: conformance.checked-mapping-replay.ImportantDays.v1", coverageImportantDays)]+    , [("fixture coverage: conformance.checked-mapping-replay.MaybeContentHash.v1", coverageMaybeContentHash)]+    , [("fixture coverage: conformance.checked-mapping-replay.MaybeLabel.v1", coverageMaybeLabel)]+    , [("fixture coverage: conformance.checked-mapping-replay.ReplayEnvelope.v1", coverageReplayEnvelope)]+    , [("fixture coverage: conformance.checked-mapping-replay.TextLabels.v1", coverageTextLabels)]+    , structuralProjectionAssertions+    ]++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)++contentHashBindingAssertions :: [(String, Bool)]+contentHashBindingAssertions =+  ("fixture labels: conformance.checked-mapping-replay.ContentHash.v1", validFixtureLabels cases) :+  ("canonical identity: conformance.checked-mapping-replay.ContentHash.v1", canonicalTypeName (Proxy @ContentHash) == "conformance.checked-mapping-replay.ContentHash.v1") :+  concat+    [ [ ("binding domain round-trip: conformance.checked-mapping-replay.ContentHash.v1/" <> T.unpack label, bindingDomainRoundTrip Bindings.contentHashBinding value)+      , ("binding shape round-trip: conformance.checked-mapping-replay.ContentHash.v1/" <> T.unpack label, bindingShapeRoundTrip Bindings.contentHashBinding (bindingToShape Bindings.contentHashBinding value))+      ]+    | (label, value) <- NonEmpty.toList cases+    ]+  where+    cases = fixtureCases Bindings.contentHashFixtures++importantDaysBindingAssertions :: [(String, Bool)]+importantDaysBindingAssertions =+  ("fixture labels: conformance.checked-mapping-replay.ImportantDays.v1", validFixtureLabels cases) :+  ("canonical identity: conformance.checked-mapping-replay.ImportantDays.v1", canonicalTypeName (Proxy @ImportantDays) == "conformance.checked-mapping-replay.ImportantDays.v1") :+  concat+    [ [ ("binding domain round-trip: conformance.checked-mapping-replay.ImportantDays.v1/" <> T.unpack label, bindingDomainRoundTrip Bindings.importantDaysBinding value)+      , ("binding shape round-trip: conformance.checked-mapping-replay.ImportantDays.v1/" <> T.unpack label, bindingShapeRoundTrip Bindings.importantDaysBinding (bindingToShape Bindings.importantDaysBinding value))+      ]+    | (label, value) <- NonEmpty.toList cases+    ]+  where+    cases = fixtureCases Bindings.importantDaysFixtures++maybeContentHashBindingAssertions :: [(String, Bool)]+maybeContentHashBindingAssertions =+  ("fixture labels: conformance.checked-mapping-replay.MaybeContentHash.v1", validFixtureLabels cases) :+  ("canonical identity: conformance.checked-mapping-replay.MaybeContentHash.v1", canonicalTypeName (Proxy @MaybeContentHash) == "conformance.checked-mapping-replay.MaybeContentHash.v1") :+  concat+    [ [ ("binding domain round-trip: conformance.checked-mapping-replay.MaybeContentHash.v1/" <> T.unpack label, bindingDomainRoundTrip Bindings.maybeContentHashBinding value)+      , ("binding shape round-trip: conformance.checked-mapping-replay.MaybeContentHash.v1/" <> T.unpack label, bindingShapeRoundTrip Bindings.maybeContentHashBinding (bindingToShape Bindings.maybeContentHashBinding value))+      ]+    | (label, value) <- NonEmpty.toList cases+    ]+  where+    cases = fixtureCases Bindings.maybeContentHashFixtures++maybeLabelBindingAssertions :: [(String, Bool)]+maybeLabelBindingAssertions =+  ("fixture labels: conformance.checked-mapping-replay.MaybeLabel.v1", validFixtureLabels cases) :+  ("canonical identity: conformance.checked-mapping-replay.MaybeLabel.v1", canonicalTypeName (Proxy @MaybeLabel) == "conformance.checked-mapping-replay.MaybeLabel.v1") :+  concat+    [ [ ("binding domain round-trip: conformance.checked-mapping-replay.MaybeLabel.v1/" <> T.unpack label, bindingDomainRoundTrip Bindings.maybeLabelBinding value)+      , ("binding shape round-trip: conformance.checked-mapping-replay.MaybeLabel.v1/" <> T.unpack label, bindingShapeRoundTrip Bindings.maybeLabelBinding (bindingToShape Bindings.maybeLabelBinding value))+      ]+    | (label, value) <- NonEmpty.toList cases+    ]+  where+    cases = fixtureCases Bindings.maybeLabelFixtures++replayEnvelopeBindingAssertions :: [(String, Bool)]+replayEnvelopeBindingAssertions =+  ("fixture labels: conformance.checked-mapping-replay.ReplayEnvelope.v1", validFixtureLabels cases) :+  ("canonical identity: conformance.checked-mapping-replay.ReplayEnvelope.v1", canonicalTypeName (Proxy @ReplayEnvelope) == "conformance.checked-mapping-replay.ReplayEnvelope.v1") :+  concat+    [ [ ("binding domain round-trip: conformance.checked-mapping-replay.ReplayEnvelope.v1/" <> T.unpack label, bindingDomainRoundTrip Bindings.replayEnvelopeBinding value)+      , ("binding shape round-trip: conformance.checked-mapping-replay.ReplayEnvelope.v1/" <> T.unpack label, bindingShapeRoundTrip Bindings.replayEnvelopeBinding (bindingToShape Bindings.replayEnvelopeBinding value))+      ]+    | (label, value) <- NonEmpty.toList cases+    ]+  where+    cases = fixtureCases Bindings.replayEnvelopeFixtures++textLabelsBindingAssertions :: [(String, Bool)]+textLabelsBindingAssertions =+  ("fixture labels: conformance.checked-mapping-replay.TextLabels.v1", validFixtureLabels cases) :+  ("canonical identity: conformance.checked-mapping-replay.TextLabels.v1", canonicalTypeName (Proxy @TextLabels) == "conformance.checked-mapping-replay.TextLabels.v1") :+  concat+    [ [ ("binding domain round-trip: conformance.checked-mapping-replay.TextLabels.v1/" <> T.unpack label, bindingDomainRoundTrip Bindings.textLabelsBinding value)+      , ("binding shape round-trip: conformance.checked-mapping-replay.TextLabels.v1/" <> T.unpack label, bindingShapeRoundTrip Bindings.textLabelsBinding (bindingToShape Bindings.textLabelsBinding value))+      ]+    | (label, value) <- NonEmpty.toList cases+    ]+  where+    cases = fixtureCases Bindings.textLabelsFixtures++coverageContentHash :: Bool+coverageContentHash = True++coverageImportantDays :: Bool+coverageImportantDays = any null shapes && any (not . null) shapes+  where+    shapes = map (bindingToShape Bindings.importantDaysBinding . snd) (NonEmpty.toList (fixtureCases Bindings.importantDaysFixtures))++coverageMaybeContentHash :: Bool+coverageMaybeContentHash = any isNothing shapes && any isJust shapes+  where+    shapes = map (bindingToShape Bindings.maybeContentHashBinding . snd) (NonEmpty.toList (fixtureCases Bindings.maybeContentHashFixtures))++coverageMaybeLabel :: Bool+coverageMaybeLabel = any isNothing shapes && any isJust shapes+  where+    shapes = map (bindingToShape Bindings.maybeLabelBinding . snd) (NonEmpty.toList (fixtureCases Bindings.maybeLabelFixtures))++coverageReplayEnvelope :: Bool+coverageReplayEnvelope = any (isNothing . (.optionalLabels)) shapes && any (isJust . (.optionalLabels)) shapes+  where+    shapes = map (bindingToShape Bindings.replayEnvelopeBinding . snd) (NonEmpty.toList (fixtureCases Bindings.replayEnvelopeFixtures))++coverageTextLabels :: Bool+coverageTextLabels = True++structuralProjectionAssertions :: [(String, Bool)]+structuralProjectionAssertions =+  [ ("projection witness agreement: conformance.checked-mapping-replay.ReplayEnvelope.v1/primary", all (\(_, owner) -> fieldWitnessAgrees StructuralProjections.replayEnvelopePrimaryWitness (\referenceOwner -> StructuralProjections.replayEnvelopePrimaryGet referenceOwner) owner) (NonEmpty.toList (fixtureCases Bindings.replayEnvelopeFixtures)))+  ]
+ test/conformance-checked-mapping-replay/Generated/CheckedMappingReplay/StructuralProjections.hs view
@@ -0,0 +1,50 @@+{-# LANGUAGE TypeFamilies #-}+-- @generated by keiro-dsl 0.18.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.+module Generated.CheckedMappingReplay.StructuralProjections+  ( replayEnvelopePrimaryWitness+  , replayEnvelopePrimaryGet+  , replayEnvelopePrimaryRawGet+  ) where++import Data.Text (Text)+import Data.List.NonEmpty qualified as NonEmpty+import Keiro.Codec.IdDomain (idDomainTextPattern, typeIdV5OrV7Domain)+import Keiro.Codec.Structural (bindingToShape, bindingFromShape, fixtureCases)+import Keiki.Core (FieldProjection (..), FieldWitness, ExactFieldProjection (..), exactFieldWitness)+import Keiki.ProjectionDomain (TextPattern, textProjectionDomain)+import Generated.CheckedMappingReplay.Structural.Shape.ReplayEnvelope (ReplayEnvelopeShape(primary))+import Conformance.CheckedMappingReplay.Bindings qualified as Bindings+import Conformance.CheckedMappingReplay.Domain (ReplayEnvelope)+import Generated.CheckedMappingReplay.Nominals qualified as Nominals+import Generated.CheckedMappingReplay.Structural.Shape.ReplayEnvelope qualified as ShapeReplayEnvelope++replayEnvelopePrimaryProjectionDomainPattern :: TextPattern+replayEnvelopePrimaryProjectionDomainPattern = either (error . show) id (idDomainTextPattern (typeIdV5OrV7Domain "retained"))++data ReplayEnvelopePrimaryProjection++replayEnvelopePrimaryRawGet :: ReplayEnvelope -> Nominals.RetainedId+replayEnvelopePrimaryRawGet owner = (bindingToShape Bindings.replayEnvelopeBinding owner).primary++replayEnvelopePrimaryGet :: ReplayEnvelope -> Text+replayEnvelopePrimaryGet owner = Nominals.retainedIdText (replayEnvelopePrimaryRawGet owner)++instance FieldProjection ReplayEnvelopePrimaryProjection where+  type FieldName ReplayEnvelopePrimaryProjection = "/primary"+  type FieldOwner ReplayEnvelopePrimaryProjection = ReplayEnvelope+  type FieldResult ReplayEnvelopePrimaryProjection = Text+  fieldShapeId _ = "conformance.checked-mapping-replay.ReplayEnvelope.v1"+  projectFieldValue _ = replayEnvelopePrimaryGet++instance ExactFieldProjection ReplayEnvelopePrimaryProjection where+  fieldProjectionDomain _ = textProjectionDomain replayEnvelopePrimaryProjectionDomainPattern+  reconstructFieldOwner _ value = do+    fieldValue <- either (const Nothing) Just (Nominals.parseRetainedId value)+    let baseShape = bindingToShape Bindings.replayEnvelopeBinding (snd (NonEmpty.head (fixtureCases Bindings.replayEnvelopeFixtures)))+    pure (bindingFromShape Bindings.replayEnvelopeBinding (case baseShape of ShapeReplayEnvelope.ReplayEnvelope projectionField0_0 projectionField0_1 projectionField0_2 projectionField0_3 _ projectionField0_5 projectionField0_6 -> ShapeReplayEnvelope.ReplayEnvelope projectionField0_0 projectionField0_1 projectionField0_2 projectionField0_3 fieldValue projectionField0_5 projectionField0_6))++replayEnvelopePrimaryWitness :: FieldWitness ReplayEnvelopePrimaryProjection+replayEnvelopePrimaryWitness = exactFieldWitness @ReplayEnvelopePrimaryProjection
+ test/conformance-checked-mapping-replay/Main.hs view
@@ -0,0 +1,355 @@+module Main (main) where++import Conformance.CheckedMappingReplay.Domain qualified as Domain+import Control.Monad (forM_, unless)+import Data.Aeson (Value (..), object, (.=))+import Data.Aeson qualified as Aeson+import Data.Aeson.Key qualified as Key+import Data.Aeson.KeyMap qualified as KeyMap+import Data.ByteString qualified as BS+import Data.Either (isLeft)+import Data.Map.Strict (Map)+import Data.Map.Strict qualified as Map+import Data.Set qualified as Set+import Data.Text (Text)+import Data.Text qualified as Text+import Data.Time.Calendar (fromGregorian)+import Generated.CheckedMappingReplay.Nominals (RetainedId, parseRetainedId, retainedIdText)+import Generated.CheckedMappingReplay.ReplayEvents.Contract+import Generated.CheckedMappingReplay.ReplayJobs.Queue (ReplayJob (..), encodeReplayJob, parseReplayJob)+import Generated.CheckedMappingReplay.ReplayLedger.Codec+import Generated.CheckedMappingReplay.ReplayLedger.Domain+import Generated.CheckedMappingReplay.ReplayLedger.EventStream (replayLedgerSnapshotFixture)+import Generated.CheckedMappingReplay.ReplayLedger.Harness (harnessAssertions)+import Generated.CheckedMappingReplay.ReplayLedger.Transducer (replayLedgerTransducer)+import Generated.CheckedMappingReplay.ReplayLookup.QueryContract (ReplayLookupQueryInput, ReplayLookupQueryResult)+import Generated.CheckedMappingReplay.ReplayReaction.Input (ReplayReactionInput (ReplayRequested))+import Generated.CheckedMappingReplay.ReplayReaction.ProcessHarness (processHarnessValues)+import Generated.CheckedMappingReplay.ReplayTarget.Harness qualified as ReplayTarget+import Generated.CheckedMappingReplay.StructuralConformance (structuralConformanceAssertions)+import Keiki.Core (applyEventsEither, (!))+import Keiro.Codec (EventType (..))+import Keiro.Test.ReplayCompatibility+import System.Exit (exitFailure)++main :: IO ()+main = do+  retained <- Aeson.eitherDecodeFileStrict' retainedFixturePath+  let retainedReplay = either (const False) retainedHistoryReplays retained+      retainedNormalization = either (const False) retainedHistoryNormalizes retained+      assertions =+        [("structural/" <> label, passed) | (label, passed) <- structuralConformanceAssertions]+          <> harnessAssertions+          <> [("target/" <> label, passed) | (label, passed) <- ReplayTarget.harnessAssertions]+          <> [ ("retained JSON fixture crosses the generated event parser and transducer", retainedReplay),+               ("admitted historical spellings normalize to canonical bytes and identical state", retainedNormalization),+               ("replay-only history preserves UUIDv5 and all checked mappings", replayOnlyHistory),+               ("serialized UUIDv5 and UUIDv7 event history retains exact identities", identifierHistory),+               ("queue, query, and contract surfaces preserve the integrated envelope", generatedSurfaceAgreement),+               ("generated process input carries the integrated envelope", processReactionInputAgreement),+               ("generated process reaction decisions remain pinned", processReactionHarnessAgreement),+               ("application-owned workflow result codec preserves the integrated envelope", workflowCodecAgreement),+               ("snapshot discriminator remains explicit in the integrated evidence", replayLedgerSnapshotFixture == (1, "checked-mapping-replay-v1")),+               ("baseline and candidate replay evidence satisfy the release comparator", releaseReady integratedInventory baselineReport candidateReport),+               ("date semantic mutations are detected", mutationDetected "date" (mutateState "date" (String "2000-03-01"))),+               ("set semantic mutations are detected", mutationDetected "set" (mutateState "labels" (Aeson.toJSON (["a", "c"] :: [Text])))),+               ("base16 semantic mutations are detected", mutationDetected "base16" (mutateState "contentHash" (String "00bf"))),+               ("identifier mutations are detected", mutationDetected "identifier" (mutateIdentity "entity" retainedV7Text)),+               ("consumer binding mutations are detected", mutationDetected "binding" (mutateState "binding" (String "transposed"))),+               ("event-shape mutations are detected", mutationDetected "event-shape" (integratedObservation {continuations = [String "MappingReplaced"]})),+               ("process-manager identity mutations are detected", mutationDetected "process" (mutateIdentity "process" "replay-process-v2")),+               ("workflow journal-key mutations are detected", mutationDetected "workflow" (mutateIdentity "workflow" "workflow/replay/v2")),+               ("unverified consumer evidence prevents release readiness", not (releaseReady integratedInventory baselineReport unverifiedCandidateReport)),+               ("information-losing event changes fail before replay", informationLossRejected)+             ]+  forM_ assertions $ \(label, passed) ->+    putStrLn ((if passed then "PASS  " else "FAIL  ") <> label)+  unless (all snd assertions) exitFailure++retainedFixturePath :: FilePath+retainedFixturePath = "test/conformance-checked-mapping-replay/fixtures/retained/mapping-recorded-v1.json"++retainedHistoryReplays :: Value -> Bool+retainedHistoryReplays wire =+  case replayRawEnvelope wire of+    Right (vertex, current, currentId) ->+      vertex == ReplayLedgerRecorded+        && current == expectedEnvelope+        && retainedIdText currentId == retainedV5Text+    Left _ -> False++retainedHistoryNormalizes :: Value -> Bool+retainedHistoryNormalizes historical =+  decodeReplayEnvelopeMapped historical == Right expectedEnvelope+    && encodeReplayEnvelopeMapped expectedEnvelope == canonicalEnvelope+    && null+      ( checkNormalizationLaw+          decodeReplayEnvelopeMapped+          encodeReplayEnvelopeMapped+          replayRawEnvelopeChain+          []+          historical+          canonicalEnvelope+          []+      )++replayRawEnvelopeChain :: [Value] -> Either Text (ReplayLedgerVertex, Domain.ReplayEnvelope, RetainedId)+replayRawEnvelopeChain [wire] = replayRawEnvelope wire+replayRawEnvelopeChain _ = Left "the terminal integration aggregate expects exactly one retained transition"++replayRawEnvelope :: Value -> Either Text (ReplayLedgerVertex, Domain.ReplayEnvelope, RetainedId)+replayRawEnvelope wire = do+  let recorded = MappingRecorded (MappingRecordedData retainedV5 expectedEnvelope)+      audited = MappingAudited (MappingAuditedData retainedV5 expectedEnvelope)+  recordedEvent <- parseReplayLedgerEvent (EventType "MappingRecorded") (replaceObjectField "envelope" wire (encodeReplayLedgerEvent recorded))+  auditedEvent <- parseReplayLedgerEvent (EventType "MappingAudited") (replaceObjectField "envelope" wire (encodeReplayLedgerEvent audited))+  (vertex, registers) <- firstText (applyEventsEither replayLedgerTransducer (ReplayLedgerEmpty, initialReplayLedgerRegs) [recordedEvent, auditedEvent])+  pure (vertex, registers ! #current, registers ! #currentId)++replayOnlyHistory :: Bool+replayOnlyHistory =+  case parseReplayLedgerEvent (EventType "LegacyMappingImported") rawEvent of+    Left _ -> False+    Right parsed -> case applyEventsEither replayLedgerTransducer (ReplayLedgerEmpty, initialReplayLedgerRegs) [parsed] of+      Left _ -> False+      Right (vertex, registers) ->+        vertex == ReplayLedgerRecorded+          && registers ! #current == expectedEnvelope+          && registers ! #currentId == retainedV5+  where+    event = LegacyMappingImported (LegacyMappingImportedData retainedV5 expectedEnvelope)+    rawEvent = replaceObjectField "envelope" nonCanonicalEnvelope (encodeReplayLedgerEvent event)++identifierHistory :: Bool+identifierHistory =+  decodeReplayEnvelopeMapped nonCanonicalEnvelope == Right expectedEnvelope+    && Map.keys identityMap == [retainedV7, retainedV5]+    && retainedIdText retainedV5 == retainedV5Text+    && retainedIdText retainedV7 == retainedV7Text++generatedSurfaceAgreement :: Bool+generatedSurfaceAgreement =+  parseReplayJob (encodeReplayJob queuePayload) == Right queuePayload+    && queryInputIdentity expectedEnvelope == expectedEnvelope+    && queryResultIdentity [expectedEnvelope] == [expectedEnvelope]+    && parseReplayEventsPayload (encodeReplayEventsPayload contractPayload) == Right contractPayload+  where+    queuePayload = ReplayJob retainedV5 expectedEnvelope+    contractPayload = ReplayLinked (ReplayLinkedData retainedV5)++queryInputIdentity :: ReplayLookupQueryInput -> Domain.ReplayEnvelope+queryInputIdentity = id++queryResultIdentity :: ReplayLookupQueryResult -> [Domain.ReplayEnvelope]+queryResultIdentity = id++workflowCodecAgreement :: Bool+workflowCodecAgreement =+  decodeWorkflowResult (encodeWorkflowResult expectedEnvelope) == Right expectedEnvelope+    && decodeWorkflowResult nonCanonicalEnvelope == Right expectedEnvelope++encodeWorkflowResult :: Domain.ReplayEnvelope -> Value+encodeWorkflowResult = encodeReplayEnvelopeMapped++decodeWorkflowResult :: Value -> Either Text Domain.ReplayEnvelope+decodeWorkflowResult = decodeReplayEnvelopeMapped++processReactionInputAgreement :: Bool+processReactionInputAgreement = processReactionInputDecode == Aeson.Success processReactionInput++processReactionInputDecode :: Aeson.Result ReplayReactionInput+processReactionInputDecode = Aeson.fromJSON (Aeson.toJSON processReactionInput)++processReactionInput :: ReplayReactionInput+processReactionInput = ReplayRequested retainedV5 processEnvelope++-- Process input decoding is application-owned. This value deliberately stays+-- inside the consumer codec's admitted Day range; retained extended-year bytes+-- are exercised through the generated event codec above.+processEnvelope :: Domain.ReplayEnvelope+processEnvelope =+  Domain.ReplayEnvelope+    (Domain.MaybeLabel (Just "process"))+    (Domain.ImportantDays [fromGregorian 2000 2 29])+    (Domain.TextLabels (Set.fromList ["a", "b"]))+    (Domain.MaybeContentHash (Just (Domain.ContentHash (BS.pack [0, 175]))))+    retainedV5+    identityMap+    (Just (Set.fromList ["process", "reaction"]))++processReactionHarnessAgreement :: Bool+processReactionHarnessAgreement =+  processHarnessValues+    == [ ("reactionOwnership", "generated-declarative"),+         ("reactionVersion", "1"),+         ("reactionFingerprint", "cc73d755be55b8a2d237ac02752ad8d425a50c5fb9f7c3bab8b5f5ada239b1c8"),+         ("reaction.ReplayRequested.0", "guard=always;advance=Record;followUps=dispatch:ReplayTarget.Store;accepted=")+       ]++informationLossRejected :: Bool+informationLossRejected =+  isLeft (parseReplayLedgerEvent (EventType "MappingRecorded") (deleteNestedEnvelopeField "contentHash" encoded))+  where+    encoded = encodeReplayLedgerEvent (MappingRecorded (MappingRecordedData retainedV5 expectedEnvelope))++expectedEnvelope :: Domain.ReplayEnvelope+expectedEnvelope =+  Domain.ReplayEnvelope+    (Domain.MaybeLabel (Just "retained"))+    (Domain.ImportantDays [fromGregorian 2000 2 29, fromGregorian 12345678901234567890 6 30])+    (Domain.TextLabels (Set.fromList ["a", "b"]))+    (Domain.MaybeContentHash (Just (Domain.ContentHash (BS.pack [0, 175]))))+    retainedV5+    identityMap+    (Just (Set.fromList ["a", "z"]))++identityMap :: Map RetainedId Text+identityMap = Map.fromList [(retainedV5, "historical-v5"), (retainedV7, "current-v7")]++canonicalEnvelope :: Value+canonicalEnvelope = encodeReplayEnvelopeMapped expectedEnvelope++nonCanonicalEnvelope :: Value+nonCanonicalEnvelope =+  object+    [ "label" .= String "retained",+      "days" .= (["+002000-02-29", "12345678901234567890-06-30"] :: [Text]),+      "labels" .= (["b", "a", "a"] :: [Text]),+      "contentHash" .= String "00AF",+      "primary" .= retainedV5Text,+      "identities" .= object [Key.fromText retainedV5Text .= String "historical-v5", Key.fromText retainedV7Text .= String "current-v7"],+      "optionalLabels" .= (["z", "a", "a"] :: [Text])+    ]++retainedV5Text, retainedV7Text :: Text+retainedV5Text = "retained_58kj0y515rbwebzaxwzzknjqnk"+retainedV7Text = "retained_01h455vb4pex5vsknk084sn02q"++retainedV5, retainedV7 :: RetainedId+retainedV5 = committedId retainedV5Text+retainedV7 = committedId retainedV7Text++committedId :: Text -> RetainedId+committedId value = case parseRetainedId value of+  Right parsed -> parsed+  Left reason -> error ("invalid committed RetainedId fixture: " <> show reason)++replaceObjectField :: Key.Key -> Value -> Value -> Value+replaceObjectField key inserted (Object value) = Object (KeyMap.insert key inserted value)+replaceObjectField _ _ value = value++deleteNestedEnvelopeField :: Key.Key -> Value -> Value+deleteNestedEnvelopeField key (Object outer) =+  case KeyMap.lookup "envelope" outer of+    Just (Object envelope) -> Object (KeyMap.insert "envelope" (Object (KeyMap.delete key envelope)) outer)+    _ -> Object outer+deleteNestedEnvelopeField _ value = value++firstText :: (Show problem) => Either problem value -> Either Text value+firstText = either (Left . Text.pack . show) Right++integratedInventory :: EvidenceInventory+integratedInventory =+  EvidenceInventory+    { inventoryVersion = inventoryVersionV1,+      inventoryId = "checked-mapping-replay/inventory/v1",+      buildPair = integratedBuildPair,+      contributions =+        [ InventoryContribution source Applicable integratedCases+        | source <- inventorySourcesV1+        ]+    }++integratedCases :: [RequiredCase]+integratedCases =+  [ RequiredCase "aggregate-history" HistoricalRead aggregateSurface,+    RequiredCase "semantic-equivalence" SemanticEquivalence aggregateSurface,+    RequiredCase "old-reader-new-writer" OldReaderNewWriter aggregateSurface,+    RequiredCase "snapshot-replay" SnapshotReplay snapshotSurface,+    RequiredCase "process-recovery" ProcessManagerReplay processSurface,+    RequiredCase "workflow-journal" WorkflowReplay workflowSurface+  ]++aggregateSurface, snapshotSurface, processSurface, workflowSurface :: PersistedSurface+aggregateSurface = PersistedSurface "event-stream" "ReplayLedger" "replayLedger/<retained-id>"+snapshotSurface = PersistedSurface "snapshot" "ReplayLedger" "checked-mapping-replay-v1"+processSurface = PersistedSurface "process-manager" "ReplayProjection" "replay-process-v1"+workflowSurface = PersistedSurface "workflow-journal" "ReplayWorkflow" "workflow/replay/v1"++integratedBuildPair :: BuildPair+integratedBuildPair =+  BuildPair+    (BuildIdentity "retained-v1" "keiro-dsl-6" "keiro-runtime-v1" "integrated-plan-v1")+    (BuildIdentity "candidate-v1" "keiro-dsl-6" "keiro-runtime-v1" "integrated-plan-v1")++baselineReport, candidateReport, unverifiedCandidateReport :: CaptureReport+baselineReport = capture BaselineCapture+candidateReport = capture CandidateCapture+unverifiedCandidateReport =+  candidateReport+    { results = case candidateReport.results of+        [] -> []+        row : remaining -> row {verdict = Unverified "consumer history was not captured"} : remaining+    }++capture :: CaptureRole -> CaptureReport+capture captureRole =+  CaptureReport+    { reportVersion = reportVersionV1,+      role = captureRole,+      buildPair = integratedBuildPair,+      inventoryId = "checked-mapping-replay/inventory/v1",+      corpusHash = "checked-mapping-replay-retained-v1",+      observationContractVersion = "checked-mapping-replay/observation/v1",+      highWaterMarks = [HighWaterMark "replayLedger/retained-v5" 2],+      selectedSurfaces = [aggregateSurface, snapshotSurface, processSurface, workflowSurface],+      determinismInputs = DeterminismInputs "frozen" "none" "none" "partial-success-after-first-target",+      results = [CaseResult required Passed (Just (observationFor required.caseKind)) | required <- integratedCases]+    }++observationFor :: CaseKind -> Observation+observationFor kind = case kind of+  ProcessManagerReplay -> processObservation+  WorkflowReplay -> workflowObservation+  _ -> integratedObservation++integratedObservation :: Observation+integratedObservation =+  Observation+    { durableState =+        Map.fromList+          [ ("date", String "2000-02-29"),+            ("labels", Aeson.toJSON (["a", "b"] :: [Text])),+            ("contentHash", String "00af"),+            ("binding", canonicalEnvelope),+            ("state", String "ReplayLedgerRecorded")+          ],+      continuations = [String "MappingRecorded", String "MappingAudited"],+      durableIdentities = Map.fromList [("entity", retainedV5Text), ("snapshot", "checked-mapping-replay-v1")],+      freshAllocations = []+    }++processObservation :: Observation+processObservation =+  integratedObservation+    { durableState = Map.insert "partialFanout" (String "resume-second-target") integratedObservation.durableState,+      continuations = integratedObservation.continuations <> [String "timer/retry-v1"],+      durableIdentities = Map.insert "process" "replay-process-v1" integratedObservation.durableIdentities+    }++workflowObservation :: Observation+workflowObservation =+  integratedObservation+    { durableState = Map.insert "workflowResult" canonicalEnvelope integratedObservation.durableState,+      continuations = integratedObservation.continuations <> [String "resume/checked-mapping"],+      durableIdentities = Map.insert "workflow" "workflow/replay/v1" integratedObservation.durableIdentities+    }++mutationDetected :: Text -> Observation -> Bool+mutationDetected label mutated = not (null (compareObservation label integratedObservation mutated))++mutateState :: Text -> Value -> Observation+mutateState key value = integratedObservation {durableState = Map.insert key value integratedObservation.durableState}++mutateIdentity :: Text -> Text -> Observation+mutateIdentity key value = integratedObservation {durableIdentities = Map.insert key value integratedObservation.durableIdentities}
+ test/conformance-checked-mapping-replay/fixtures/retained/mapping-recorded-v1.json view
@@ -0,0 +1,12 @@+{+  "label": "retained",+  "days": ["+002000-02-29", "12345678901234567890-06-30"],+  "labels": ["b", "a", "a"],+  "contentHash": "00AF",+  "primary": "retained_58kj0y515rbwebzaxwzzknjqnk",+  "identities": {+    "retained_58kj0y515rbwebzaxwzzknjqnk": "historical-v5",+    "retained_01h455vb4pex5vsknk084sn02q": "current-v7"+  },+  "optionalLabels": ["z", "a", "a"]+}
+ test/conformance-checked-mapping-replay/keiro-dsl-cabal-fragment.workspace.checked-mapping-replay.txt view
@@ -0,0 +1,84 @@+-- keiro-dsl build manifest for service.keiro-workspace+-- 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:+    CheckedMappingReplay.ProjectionCatalog.ProjectionCatalogHoles+    CheckedMappingReplay.ReplayLedger.BehaviorHoles+    CheckedMappingReplay.ReplayLookup.ReadModelHoles+    CheckedMappingReplay.ReplayReaction.ProcessHoles+    CheckedMappingReplay.ReplayTarget.BehaviorHoles+    Conformance.CheckedMappingReplay.Bindings+    Generated.CheckedMappingReplay.BehaviorSourceMap+    Generated.CheckedMappingReplay.Nominals+    Generated.CheckedMappingReplay.Nominals.Internal+    Generated.CheckedMappingReplay.ProjectionCatalog+    Generated.CheckedMappingReplay.ReplayAudit+    Generated.CheckedMappingReplay.ReplayEvents.Contract+    Generated.CheckedMappingReplay.ReplayJobs.Queue+    Generated.CheckedMappingReplay.ReplayJobs.QueueCodec+    Generated.CheckedMappingReplay.ReplayJobs.QueuePolicy+    Generated.CheckedMappingReplay.ReplayLedger.BehaviorContract+    Generated.CheckedMappingReplay.ReplayLedger.Codec+    Generated.CheckedMappingReplay.ReplayLedger.Domain+    Generated.CheckedMappingReplay.ReplayLedger.EventStream+    Generated.CheckedMappingReplay.ReplayLedger.Harness+    Generated.CheckedMappingReplay.ReplayLedger.Projection+    Generated.CheckedMappingReplay.ReplayLedger.Transducer+    Generated.CheckedMappingReplay.ReplayLookup.QueryContract+    Generated.CheckedMappingReplay.ReplayLookup.ReadModel+    Generated.CheckedMappingReplay.ReplayLookup.ReadModelHarness+    Generated.CheckedMappingReplay.ReplayLookup.ReadModelTable+    Generated.CheckedMappingReplay.ReplayReaction.Input+    Generated.CheckedMappingReplay.ReplayReaction.Process+    Generated.CheckedMappingReplay.ReplayReaction.ProcessHarness+    Generated.CheckedMappingReplay.ReplayTarget.BehaviorContract+    Generated.CheckedMappingReplay.ReplayTarget.Codec+    Generated.CheckedMappingReplay.ReplayTarget.Domain+    Generated.CheckedMappingReplay.ReplayTarget.EventStream+    Generated.CheckedMappingReplay.ReplayTarget.Harness+    Generated.CheckedMappingReplay.ReplayTarget.Projection+    Generated.CheckedMappingReplay.ReplayTarget.Transducer+    Generated.CheckedMappingReplay.Structural.NominalLeaves+    Generated.CheckedMappingReplay.Structural.Shape.ContentHash+    Generated.CheckedMappingReplay.Structural.Shape.ImportantDays+    Generated.CheckedMappingReplay.Structural.Shape.MaybeContentHash+    Generated.CheckedMappingReplay.Structural.Shape.MaybeLabel+    Generated.CheckedMappingReplay.Structural.Shape.ReplayEnvelope+    Generated.CheckedMappingReplay.Structural.Shape.TextLabels+    Generated.CheckedMappingReplay.StructuralConformance+    Generated.CheckedMappingReplay.StructuralProjections++build-depends:+    , aeson+    , base+    , bytestring+    , containers+    , effectful-core+    , hasql-transaction+    , keiki+    , keiro+    , keiro-core+    , keiro-dsl+    , keiro-pgmq+    , kiroku-store+    , mmzk-typeid+    , shibuya-core+    , text+    , time+    , uuid++consumer-packages:+    keiro-dsl++consumer-modules:+    Conformance.CheckedMappingReplay.Bindings+    Conformance.CheckedMappingReplay.Domain
+ test/conformance-checked-mapping-replay/keiro-dsl-ledger.workspace.checked-mapping-replay.txt view
@@ -0,0 +1,103 @@+keiro-dsl workspace scaffold record v1+service: checked-mapping-replay+manifest: service.keiro-workspace+context: checked-mapping-replay+module-root: (none)+layout: prefixed+naming-edition idiomatic-v2+member domain/service.keiro+member domain/values.keiro+source-language {"declaredLanguageVersion":6,"effectiveLanguageVersion":6,"path":"domain/service.keiro","sourceForm":"declared"}+source-language {"declaredLanguageVersion":6,"effectiveLanguageVersion":6,"path":"domain/values.keiro","sourceForm":"declared"}+semantic-contract {"languageSupport":"candidate","languageVersion":6,"runtimeSemantics":"keiro-dsl/runtime-semantics/5"}+module {"kind":"generated","path":"Generated/CheckedMappingReplay/StructuralConformance.hs","roleFamily":"StructuralConformance","roleOwnerKind":"context","roleOwnerName":"context checked-mapping-replay structural conformance"}+module {"kind":"generated","path":"Generated/CheckedMappingReplay/BehaviorSourceMap.hs","roleFamily":"BehaviorSourceMap","roleOwnerKind":"context","roleOwnerName":"context checked-mapping-replay behavior source map"}+module {"kind":"generated","owner":"domain/values.keiro","path":"Generated/CheckedMappingReplay/Structural/Shape/ContentHash.hs","roleFamily":"ContentHash","roleOwnerKind":"domain/values.keiro:","roleOwnerName":"domain/values.keiro: mapped structural ContentHash (line 149)"}+module {"kind":"generated","owner":"domain/values.keiro","path":"Generated/CheckedMappingReplay/Structural/Shape/ImportantDays.hs","roleFamily":"ImportantDays","roleOwnerKind":"domain/values.keiro:","roleOwnerName":"domain/values.keiro: mapped structural ImportantDays (line 131)"}+module {"kind":"generated","owner":"domain/values.keiro","path":"Generated/CheckedMappingReplay/Structural/Shape/MaybeContentHash.hs","roleFamily":"MaybeContentHash","roleOwnerKind":"domain/values.keiro:","roleOwnerName":"domain/values.keiro: mapped structural MaybeContentHash (line 158)"}+module {"kind":"generated","owner":"domain/values.keiro","path":"Generated/CheckedMappingReplay/Structural/Shape/MaybeLabel.hs","roleFamily":"MaybeLabel","roleOwnerKind":"domain/values.keiro:","roleOwnerName":"domain/values.keiro: mapped structural MaybeLabel (line 122)"}+module {"kind":"generated","owner":"domain/values.keiro","path":"Generated/CheckedMappingReplay/Structural/Shape/ReplayEnvelope.hs","roleFamily":"ReplayEnvelope","roleOwnerKind":"domain/values.keiro:","roleOwnerName":"domain/values.keiro: mapped structural ReplayEnvelope (line 167)"}+module {"kind":"generated","owner":"domain/values.keiro","path":"Generated/CheckedMappingReplay/Structural/Shape/TextLabels.hs","roleFamily":"TextLabels","roleOwnerKind":"domain/values.keiro:","roleOwnerName":"domain/values.keiro: mapped structural TextLabels (line 140)"}+module {"kind":"generated","path":"Generated/CheckedMappingReplay/StructuralProjections.hs","roleFamily":"StructuralProjections","roleOwnerKind":"context","roleOwnerName":"context checked-mapping-replay mapped structural facade"}+module {"kind":"generated","path":"Generated/CheckedMappingReplay/Nominals.hs","roleFamily":"Nominals","roleOwnerKind":"context","roleOwnerName":"context checked-mapping-replay generated nominal declarations"}+module {"kind":"generated","path":"Generated/CheckedMappingReplay/Nominals/Internal.hs","roleFamily":"Internal","roleOwnerKind":"context","roleOwnerName":"context checked-mapping-replay generated nominal ID internals"}+module {"kind":"generated","path":"Generated/CheckedMappingReplay/Structural/NominalLeaves.hs","roleFamily":"NominalLeaves","roleOwnerKind":"context","roleOwnerName":"context checked-mapping-replay structural nominal leaves"}+module {"kind":"hole","owner":"domain/values.keiro","path":"Conformance/CheckedMappingReplay/Bindings.hs","roleFamily":"Bindings","roleOwnerKind":"domain/values.keiro:","roleOwnerName":"domain/values.keiro: consumer binding skeleton Conformance.CheckedMappingReplay.Bindings"}+module {"kind":"generated","path":"Generated/CheckedMappingReplay/ReplayAudit.hs","roleFamily":"ReplayAudit","roleOwnerKind":"context","roleOwnerName":"context checked-mapping-replay replay-audit assembly"}+module {"kind":"generated","path":"Generated/CheckedMappingReplay/ProjectionCatalog.hs","roleFamily":"ProjectionCatalog","roleOwnerKind":"projection-catalog","roleOwnerName":"projection-catalog checked-mapping-replay"}+module {"kind":"hole","path":"CheckedMappingReplay/ProjectionCatalog/ProjectionCatalogHoles.hs","roleFamily":"ProjectionCatalogHoles","roleOwnerKind":"projection-catalog","roleOwnerName":"projection-catalog checked-mapping-replay"}+module {"kind":"generated","owner":"domain/service.keiro","path":"Generated/CheckedMappingReplay/ReplayLedger/Domain.hs","roleFamily":"Domain","roleOwnerKind":"domain/service.keiro:","roleOwnerName":"domain/service.keiro: aggregate ReplayLedger (line 4)"}+module {"kind":"generated","owner":"domain/service.keiro","path":"Generated/CheckedMappingReplay/ReplayLedger/Codec.hs","roleFamily":"Codec","roleOwnerKind":"domain/service.keiro:","roleOwnerName":"domain/service.keiro: aggregate ReplayLedger (line 4)"}+module {"kind":"generated","owner":"domain/service.keiro","path":"Generated/CheckedMappingReplay/ReplayLedger/Transducer.hs","roleFamily":"Transducer","roleOwnerKind":"domain/service.keiro:","roleOwnerName":"domain/service.keiro: aggregate ReplayLedger (line 4)"}+module {"kind":"generated","owner":"domain/service.keiro","path":"Generated/CheckedMappingReplay/ReplayLedger/BehaviorContract.hs","roleFamily":"BehaviorContract","roleOwnerKind":"domain/service.keiro:","roleOwnerName":"domain/service.keiro: aggregate ReplayLedger (line 4)"}+module {"kind":"hole","owner":"domain/service.keiro","path":"CheckedMappingReplay/ReplayLedger/BehaviorHoles.hs","roleFamily":"BehaviorHoles","roleOwnerKind":"domain/service.keiro:","roleOwnerName":"domain/service.keiro: aggregate behavior witnesses ReplayLedger (line 4)"}+module {"kind":"generated","owner":"domain/service.keiro","path":"Generated/CheckedMappingReplay/ReplayLedger/EventStream.hs","roleFamily":"EventStream","roleOwnerKind":"domain/service.keiro:","roleOwnerName":"domain/service.keiro: aggregate ReplayLedger (line 4)"}+module {"kind":"generated","owner":"domain/service.keiro","path":"Generated/CheckedMappingReplay/ReplayLedger/Projection.hs","roleFamily":"Projection","roleOwnerKind":"domain/service.keiro:","roleOwnerName":"domain/service.keiro: aggregate ReplayLedger (line 4)"}+module {"kind":"generated","owner":"domain/service.keiro","path":"Generated/CheckedMappingReplay/ReplayLedger/Harness.hs","roleFamily":"Harness","roleOwnerKind":"domain/service.keiro:","roleOwnerName":"domain/service.keiro: aggregate ReplayLedger (line 4)"}+module {"kind":"generated","owner":"domain/service.keiro","path":"Generated/CheckedMappingReplay/ReplayTarget/Domain.hs","roleFamily":"Domain","roleOwnerKind":"domain/service.keiro:","roleOwnerName":"domain/service.keiro: aggregate ReplayTarget (line 33)"}+module {"kind":"generated","owner":"domain/service.keiro","path":"Generated/CheckedMappingReplay/ReplayTarget/Codec.hs","roleFamily":"Codec","roleOwnerKind":"domain/service.keiro:","roleOwnerName":"domain/service.keiro: aggregate ReplayTarget (line 33)"}+module {"kind":"generated","owner":"domain/service.keiro","path":"Generated/CheckedMappingReplay/ReplayTarget/Transducer.hs","roleFamily":"Transducer","roleOwnerKind":"domain/service.keiro:","roleOwnerName":"domain/service.keiro: aggregate ReplayTarget (line 33)"}+module {"kind":"generated","owner":"domain/service.keiro","path":"Generated/CheckedMappingReplay/ReplayTarget/BehaviorContract.hs","roleFamily":"BehaviorContract","roleOwnerKind":"domain/service.keiro:","roleOwnerName":"domain/service.keiro: aggregate ReplayTarget (line 33)"}+module {"kind":"hole","owner":"domain/service.keiro","path":"CheckedMappingReplay/ReplayTarget/BehaviorHoles.hs","roleFamily":"BehaviorHoles","roleOwnerKind":"domain/service.keiro:","roleOwnerName":"domain/service.keiro: aggregate behavior witnesses ReplayTarget (line 33)"}+module {"kind":"generated","owner":"domain/service.keiro","path":"Generated/CheckedMappingReplay/ReplayTarget/EventStream.hs","roleFamily":"EventStream","roleOwnerKind":"domain/service.keiro:","roleOwnerName":"domain/service.keiro: aggregate ReplayTarget (line 33)"}+module {"kind":"generated","owner":"domain/service.keiro","path":"Generated/CheckedMappingReplay/ReplayTarget/Projection.hs","roleFamily":"Projection","roleOwnerKind":"domain/service.keiro:","roleOwnerName":"domain/service.keiro: aggregate ReplayTarget (line 33)"}+module {"kind":"generated","owner":"domain/service.keiro","path":"Generated/CheckedMappingReplay/ReplayTarget/Harness.hs","roleFamily":"Harness","roleOwnerKind":"domain/service.keiro:","roleOwnerName":"domain/service.keiro: aggregate ReplayTarget (line 33)"}+module {"kind":"generated","owner":"domain/service.keiro","path":"Generated/CheckedMappingReplay/ReplayReaction/Input.hs","roleFamily":"Input","roleOwnerKind":"domain/service.keiro:","roleOwnerName":"domain/service.keiro: process input ReplayReaction (line 41)"}+module {"kind":"generated","owner":"domain/service.keiro","path":"Generated/CheckedMappingReplay/ReplayReaction/Process.hs","roleFamily":"Process","roleOwnerKind":"domain/service.keiro:","roleOwnerName":"domain/service.keiro: process reaction ReplayReaction (line 41)"}+module {"kind":"hole","owner":"domain/service.keiro","path":"CheckedMappingReplay/ReplayReaction/ProcessHoles.hs","roleFamily":"ProcessHoles","roleOwnerKind":"domain/service.keiro:","roleOwnerName":"domain/service.keiro: process decoder ReplayReaction (line 41)"}+module {"kind":"generated","owner":"domain/service.keiro","path":"Generated/CheckedMappingReplay/ReplayReaction/ProcessHarness.hs","roleFamily":"ProcessHarness","roleOwnerKind":"domain/service.keiro:","roleOwnerName":"domain/service.keiro: process ReplayReaction (line 41)"}+module {"kind":"generated","owner":"domain/service.keiro","path":"Generated/CheckedMappingReplay/ReplayJobs/Queue.hs","roleFamily":"Queue","roleOwnerKind":"domain/service.keiro:","roleOwnerName":"domain/service.keiro: workqueue replay_jobs (line 57)"}+module {"kind":"generated","owner":"domain/service.keiro","path":"Generated/CheckedMappingReplay/ReplayJobs/QueuePolicy.hs","roleFamily":"QueuePolicy","roleOwnerKind":"domain/service.keiro:","roleOwnerName":"domain/service.keiro: workqueue replay_jobs (line 57)"}+module {"kind":"generated","owner":"domain/service.keiro","path":"Generated/CheckedMappingReplay/ReplayJobs/QueueCodec.hs","roleFamily":"QueueCodec","roleOwnerKind":"domain/service.keiro:","roleOwnerName":"domain/service.keiro: workqueue replay_jobs (line 57)"}+module {"kind":"generated","owner":"domain/service.keiro","path":"Generated/CheckedMappingReplay/ReplayLookup/ReadModelTable.hs","roleFamily":"ReadModelTable","roleOwnerKind":"domain/service.keiro:","roleOwnerName":"domain/service.keiro: readmodel replay_lookup (line 98)"}+module {"kind":"generated","owner":"domain/service.keiro","path":"Generated/CheckedMappingReplay/ReplayLookup/QueryContract.hs","roleFamily":"QueryContract","roleOwnerKind":"domain/service.keiro:","roleOwnerName":"domain/service.keiro: readmodel replay_lookup (line 98)"}+module {"kind":"generated","owner":"domain/service.keiro","path":"Generated/CheckedMappingReplay/ReplayLookup/ReadModel.hs","roleFamily":"ReadModel","roleOwnerKind":"domain/service.keiro:","roleOwnerName":"domain/service.keiro: readmodel replay_lookup (line 98)"}+module {"kind":"hole","owner":"domain/service.keiro","path":"CheckedMappingReplay/ReplayLookup/ReadModelHoles.hs","roleFamily":"ReadModelHoles","roleOwnerKind":"domain/service.keiro:","roleOwnerName":"domain/service.keiro: readmodel replay_lookup (line 98)"}+module {"kind":"generated","owner":"domain/service.keiro","path":"Generated/CheckedMappingReplay/ReplayLookup/ReadModelHarness.hs","roleFamily":"ReadModelHarness","roleOwnerKind":"domain/service.keiro:","roleOwnerName":"domain/service.keiro: readmodel replay_lookup (line 98)"}+module {"kind":"generated","owner":"domain/service.keiro","path":"Generated/CheckedMappingReplay/ReplayEvents/Contract.hs","roleFamily":"Contract","roleOwnerKind":"domain/service.keiro:","roleOwnerName":"domain/service.keiro: contract replay_events (line 109)"}+mapping {"bindingSymbol":"Conformance.CheckedMappingReplay.Bindings.contentHashBinding","bindingVersion":"1","canonicalType":"conformance.checked-mapping-replay.ContentHash.v1","mode":"structural","module":"Conformance.CheckedMappingReplay.Domain","package":"keiro-dsl","schema":1,"specName":"ContentHash","type":"ContentHash"}+mapping {"bindingSymbol":"Conformance.CheckedMappingReplay.Bindings.importantDaysBinding","bindingVersion":"1","canonicalType":"conformance.checked-mapping-replay.ImportantDays.v1","mode":"structural","module":"Conformance.CheckedMappingReplay.Domain","package":"keiro-dsl","schema":1,"specName":"ImportantDays","type":"ImportantDays"}+mapping {"bindingSymbol":"Conformance.CheckedMappingReplay.Bindings.maybeContentHashBinding","bindingVersion":"1","canonicalType":"conformance.checked-mapping-replay.MaybeContentHash.v1","mode":"structural","module":"Conformance.CheckedMappingReplay.Domain","package":"keiro-dsl","schema":1,"specName":"MaybeContentHash","type":"MaybeContentHash"}+mapping {"bindingSymbol":"Conformance.CheckedMappingReplay.Bindings.maybeLabelBinding","bindingVersion":"1","canonicalType":"conformance.checked-mapping-replay.MaybeLabel.v1","mode":"structural","module":"Conformance.CheckedMappingReplay.Domain","package":"keiro-dsl","schema":1,"specName":"MaybeLabel","type":"MaybeLabel"}+mapping {"bindingSymbol":"Conformance.CheckedMappingReplay.Bindings.replayEnvelopeBinding","bindingVersion":"1","canonicalType":"conformance.checked-mapping-replay.ReplayEnvelope.v1","mode":"structural","module":"Conformance.CheckedMappingReplay.Domain","package":"keiro-dsl","schema":1,"specName":"ReplayEnvelope","type":"ReplayEnvelope"}+mapping {"bindingSymbol":"Conformance.CheckedMappingReplay.Bindings.textLabelsBinding","bindingVersion":"1","canonicalType":"conformance.checked-mapping-replay.TextLabels.v1","mode":"structural","module":"Conformance.CheckedMappingReplay.Domain","package":"keiro-dsl","schema":1,"specName":"TextLabels","type":"TextLabels"}+id-domain id-domain|name=RetainedId|contract=keiro-dsl/id-domain/typeid-v5-or-v7/1|prefix=retained|separator=_|json=canonical-json-text+id-domain id-domain|name=contract:replay_events.ReplayLinked.retainedId|contract=keiro-dsl/id-domain/typeid-v5-or-v7/1|prefix=retained|separator=_|json=canonical-json-text+nominal-equality nominal-equality|name=RetainedId|contract=keiro-dsl/nominal-equality/2|key=Text|domain=typeid-v5-or-v7-text:retained:keiro-dsl/id-domain/typeid-v5-or-v7/1|owner=generated+binding {"kind":"binding","mappedName":"ContentHash","module":"Conformance.CheckedMappingReplay.Bindings","path":"value","schema":1,"signature":"contentHashBinding.value :: ByteString","symbol":"contentHashBinding"}+binding {"kind":"fixtures","mappedName":"ContentHash","module":"Conformance.CheckedMappingReplay.Bindings","path":null,"schema":1,"signature":"contentHashFixtures :: FixtureCases Conformance.CheckedMappingReplay.Domain.ContentHash","symbol":"contentHashFixtures"}+binding {"kind":"binding","mappedName":"ImportantDays","module":"Conformance.CheckedMappingReplay.Bindings","path":"value","schema":1,"signature":"importantDaysBinding.value :: [Day]","symbol":"importantDaysBinding"}+binding {"kind":"fixtures","mappedName":"ImportantDays","module":"Conformance.CheckedMappingReplay.Bindings","path":null,"schema":1,"signature":"importantDaysFixtures :: FixtureCases Conformance.CheckedMappingReplay.Domain.ImportantDays","symbol":"importantDaysFixtures"}+binding {"kind":"binding","mappedName":"MaybeContentHash","module":"Conformance.CheckedMappingReplay.Bindings","path":"value","schema":1,"signature":"maybeContentHashBinding.value :: Maybe (ContentHash)","symbol":"maybeContentHashBinding"}+binding {"kind":"fixtures","mappedName":"MaybeContentHash","module":"Conformance.CheckedMappingReplay.Bindings","path":null,"schema":1,"signature":"maybeContentHashFixtures :: FixtureCases Conformance.CheckedMappingReplay.Domain.MaybeContentHash","symbol":"maybeContentHashFixtures"}+binding {"kind":"binding","mappedName":"MaybeLabel","module":"Conformance.CheckedMappingReplay.Bindings","path":"value","schema":1,"signature":"maybeLabelBinding.value :: Maybe (Text)","symbol":"maybeLabelBinding"}+binding {"kind":"fixtures","mappedName":"MaybeLabel","module":"Conformance.CheckedMappingReplay.Bindings","path":null,"schema":1,"signature":"maybeLabelFixtures :: FixtureCases Conformance.CheckedMappingReplay.Domain.MaybeLabel","symbol":"maybeLabelFixtures"}+binding {"kind":"binding","mappedName":"ReplayEnvelope","module":"Conformance.CheckedMappingReplay.Bindings","path":"contentHash","schema":1,"signature":"replayEnvelopeBinding.contentHash :: MaybeContentHash","symbol":"replayEnvelopeBinding"}+binding {"kind":"binding","mappedName":"ReplayEnvelope","module":"Conformance.CheckedMappingReplay.Bindings","path":"days","schema":1,"signature":"replayEnvelopeBinding.days :: ImportantDays","symbol":"replayEnvelopeBinding"}+binding {"kind":"binding","mappedName":"ReplayEnvelope","module":"Conformance.CheckedMappingReplay.Bindings","path":"identities","schema":1,"signature":"replayEnvelopeBinding.identities :: Map RetainedId (Text)","symbol":"replayEnvelopeBinding"}+binding {"kind":"binding","mappedName":"ReplayEnvelope","module":"Conformance.CheckedMappingReplay.Bindings","path":"label","schema":1,"signature":"replayEnvelopeBinding.label :: MaybeLabel","symbol":"replayEnvelopeBinding"}+binding {"kind":"binding","mappedName":"ReplayEnvelope","module":"Conformance.CheckedMappingReplay.Bindings","path":"labels","schema":1,"signature":"replayEnvelopeBinding.labels :: TextLabels","symbol":"replayEnvelopeBinding"}+binding {"kind":"binding","mappedName":"ReplayEnvelope","module":"Conformance.CheckedMappingReplay.Bindings","path":"optionalLabels","schema":1,"signature":"replayEnvelopeBinding.optionalLabels :: Maybe (Set Text)","symbol":"replayEnvelopeBinding"}+binding {"kind":"binding","mappedName":"ReplayEnvelope","module":"Conformance.CheckedMappingReplay.Bindings","path":"primary","schema":1,"signature":"replayEnvelopeBinding.primary :: RetainedId","symbol":"replayEnvelopeBinding"}+binding {"kind":"fixtures","mappedName":"ReplayEnvelope","module":"Conformance.CheckedMappingReplay.Bindings","path":null,"schema":1,"signature":"replayEnvelopeFixtures :: FixtureCases Conformance.CheckedMappingReplay.Domain.ReplayEnvelope","symbol":"replayEnvelopeFixtures"}+binding {"kind":"initial-value","mappedName":"ReplayEnvelope","module":"Conformance.CheckedMappingReplay.Bindings","path":null,"schema":1,"signature":"initialReplayEnvelope :: Conformance.CheckedMappingReplay.Domain.ReplayEnvelope","symbol":"initialReplayEnvelope"}+binding {"kind":"binding","mappedName":"TextLabels","module":"Conformance.CheckedMappingReplay.Bindings","path":"value","schema":1,"signature":"textLabelsBinding.value :: Set Text","symbol":"textLabelsBinding"}+binding {"kind":"fixtures","mappedName":"TextLabels","module":"Conformance.CheckedMappingReplay.Bindings","path":null,"schema":1,"signature":"textLabelsFixtures :: FixtureCases Conformance.CheckedMappingReplay.Domain.TextLabels","symbol":"textLabelsFixtures"}+behavior {"aggregate":"ReplayLedger","command":"ImportLegacy","evidence":"generated-authoritative","key":"behavior-v1-00d5b6d8d0fc6ef2","kind":"replay-transition","outputs":[{"command":"ImportLegacy","ownership":"generated-command-identity"}],"owner":"domain/service.keiro","source":"Empty"}+behavior {"aggregate":"ReplayTarget","command":"Store","evidence":"generated-authoritative","key":"behavior-v1-756d75346570c343","kind":"live-transition","outputs":[{"command":"Store","ownership":"generated-command-identity"}],"owner":"domain/service.keiro","source":"Ready"}+behavior {"aggregate":"ReplayLedger","command":"ImportLegacy","evidence":"generated-authoritative","key":"behavior-v1-9846660db9e83048","kind":"required-rejection","outputs":[],"owner":"domain/service.keiro","source":"Empty"}+behavior {"aggregate":"ReplayLedger","command":"Record","evidence":"generated-authoritative","key":"behavior-v1-cf9c72cd877a5085","kind":"live-transition","outputs":[{"command":"Record","ownership":"generated-command-identity"},{"command":"Record","ownership":"generated-command-identity"}],"owner":"domain/service.keiro","source":"Empty"}+behavior {"aggregate":"ReplayLedger","command":"Record","evidence":"generated-authoritative","key":"behavior-v1-e88b4f5c37ef8bf2","kind":"required-rejection","outputs":[],"owner":"domain/service.keiro","source":"Recorded"}+behavior {"aggregate":"ReplayLedger","command":"ImportLegacy","evidence":"generated-authoritative","key":"behavior-v1-efa5614712549991","kind":"required-rejection","outputs":[],"owner":"domain/service.keiro","source":"Recorded"}+projection-catalog-fact cursor|replay_lookup|checked-mapping-replay-writer|98+projection-catalog-fact delivery|replay_writer|subscription|86+projection-catalog-fact freshness|replay_lookup|wait-for-head:entire-log|98+projection-catalog-fact group|replay_rebuild|replay_table|replay_table|81+projection-catalog-fact owner|replay_writer|all|replay_rebuild|replay_table|10|checked-mapping-replay-writer|checked-mapping-replay-writer-v1|from-beginning|explicit|86+projection-catalog-fact query|replay_lookup|replay_rebuild|replay_table|replay_table|98+projection-catalog-fact supply|replay_lookup|replay_writer|replay_rebuild|replay_table|98|86+projection-catalog-fact target|replay_table|public|checked_mapping_replay|clear||75+query-contract-baseline v1+query-contract {"mappedDependencies":["ContentHash","ImportantDays","MaybeContentHash","MaybeLabel","ReplayEnvelope","TextLabels"],"position":"input","readModel":"replay_lookup","typeExpression":"ReplayEnvelope"}+query-contract {"mappedDependencies":["ContentHash","ImportantDays","MaybeContentHash","MaybeLabel","ReplayEnvelope","TextLabels"],"position":"result","readModel":"replay_lookup","typeExpression":"List ReplayEnvelope"}+semantic-impact {"declarations":[{"consequences":[{"consumer":"ReplayLedger","kind":"consumer-build"},{"consumer":"ReplayTarget","kind":"consumer-build"},{"consumer":"workqueue:replay_jobs","kind":"consumer-build"},{"consumer":"read-model-query:replay_lookup:input","kind":"consumer-build"},{"consumer":"read-model-query:replay_lookup:result","kind":"consumer-build"},{"aggregate":"ReplayLedger","kind":"private-event-history"},{"aggregate":"ReplayTarget","kind":"private-event-history"},{"aggregate":"ReplayLedger","kind":"snapshot-hydration"},{"aggregate":"ReplayTarget","kind":"snapshot-hydration"},{"kind":"workqueue-history","workqueue":"replay_jobs"},{"kind":"query-api","position":"input","readModel":"replay_lookup"},{"kind":"query-api","position":"result","readModel":"replay_lookup"}],"consumerEvidence":[{"consumer":"ReplayLedger","operation":null,"path":"ReplayLedger command ImportLegacy .envelope : ReplayEnvelope .contentHash : MaybeContentHash optional : ContentHash","surface":"aggregate-command"},{"consumer":"ReplayLedger","operation":null,"path":"ReplayLedger command Record .envelope : ReplayEnvelope .contentHash : MaybeContentHash optional : ContentHash","surface":"aggregate-command"},{"consumer":"ReplayLedger","operation":null,"path":"ReplayLedger event LegacyMappingImported .envelope : ReplayEnvelope .contentHash : MaybeContentHash optional : ContentHash","surface":"private-event-payload"},{"consumer":"ReplayLedger","operation":null,"path":"ReplayLedger event MappingAudited .envelope : ReplayEnvelope .contentHash : MaybeContentHash optional : ContentHash","surface":"private-event-payload"},{"consumer":"ReplayLedger","operation":null,"path":"ReplayLedger event MappingRecorded .envelope : ReplayEnvelope .contentHash : MaybeContentHash optional : ContentHash","surface":"private-event-payload"},{"consumer":"ReplayLedger","operation":null,"path":"ReplayLedger register current : ReplayEnvelope .contentHash : MaybeContentHash optional : ContentHash","surface":"snapshot-register"},{"consumer":"ReplayTarget","operation":null,"path":"ReplayTarget command Store .envelope : ReplayEnvelope .contentHash : MaybeContentHash optional : ContentHash","surface":"aggregate-command"},{"consumer":"ReplayTarget","operation":null,"path":"ReplayTarget event Stored .envelope : ReplayEnvelope .contentHash : MaybeContentHash optional : ContentHash","surface":"private-event-payload"},{"consumer":"ReplayTarget","operation":null,"path":"ReplayTarget register latest : ReplayEnvelope .contentHash : MaybeContentHash optional : ContentHash","surface":"snapshot-register"},{"consumer":"workqueue:replay_jobs","operation":null,"path":"workqueue replay_jobs payload .envelope : ReplayEnvelope .contentHash : MaybeContentHash optional : ContentHash","surface":"workqueue-payload"},{"consumer":"read-model-query:replay_lookup:input","operation":null,"path":"readmodel replay_lookup query input : ReplayEnvelope .contentHash : MaybeContentHash optional : ContentHash","surface":"read-model-query-input"},{"consumer":"read-model-query:replay_lookup:result","operation":null,"path":"readmodel replay_lookup query result : ReplayEnvelope [] .contentHash : MaybeContentHash optional : ContentHash","surface":"read-model-query-result"}],"consumers":["ReplayLedger","ReplayTarget","workqueue:replay_jobs","read-model-query:replay_lookup:input","read-model-query:replay_lookup:result"],"declaration":"ContentHash","identity":"structural\u001fkeiro-dsl:Conformance.CheckedMappingReplay.Domain:ContentHash\u001fConformance.CheckedMappingReplay.Bindings.contentHashBinding\u001f1\u001fconformance.checked-mapping-replay.ContentHash.v1\u001fConformance.CheckedMappingReplay.Bindings.contentHashFixtures\u001f\u001f9a76d13837d002d3\u001frefined:base16-bytes-v1"},{"consequences":[{"consumer":"ReplayLedger","kind":"consumer-build"},{"consumer":"ReplayTarget","kind":"consumer-build"},{"consumer":"workqueue:replay_jobs","kind":"consumer-build"},{"consumer":"read-model-query:replay_lookup:input","kind":"consumer-build"},{"consumer":"read-model-query:replay_lookup:result","kind":"consumer-build"},{"aggregate":"ReplayLedger","kind":"private-event-history"},{"aggregate":"ReplayTarget","kind":"private-event-history"},{"aggregate":"ReplayLedger","kind":"snapshot-hydration"},{"aggregate":"ReplayTarget","kind":"snapshot-hydration"},{"kind":"workqueue-history","workqueue":"replay_jobs"},{"kind":"query-api","position":"input","readModel":"replay_lookup"},{"kind":"query-api","position":"result","readModel":"replay_lookup"}],"consumerEvidence":[{"consumer":"ReplayLedger","operation":null,"path":"ReplayLedger command ImportLegacy .envelope : ReplayEnvelope .days : ImportantDays","surface":"aggregate-command"},{"consumer":"ReplayLedger","operation":null,"path":"ReplayLedger command Record .envelope : ReplayEnvelope .days : ImportantDays","surface":"aggregate-command"},{"consumer":"ReplayLedger","operation":null,"path":"ReplayLedger event LegacyMappingImported .envelope : ReplayEnvelope .days : ImportantDays","surface":"private-event-payload"},{"consumer":"ReplayLedger","operation":null,"path":"ReplayLedger event MappingAudited .envelope : ReplayEnvelope .days : ImportantDays","surface":"private-event-payload"},{"consumer":"ReplayLedger","operation":null,"path":"ReplayLedger event MappingRecorded .envelope : ReplayEnvelope .days : ImportantDays","surface":"private-event-payload"},{"consumer":"ReplayLedger","operation":null,"path":"ReplayLedger register current : ReplayEnvelope .days : ImportantDays","surface":"snapshot-register"},{"consumer":"ReplayTarget","operation":null,"path":"ReplayTarget command Store .envelope : ReplayEnvelope .days : ImportantDays","surface":"aggregate-command"},{"consumer":"ReplayTarget","operation":null,"path":"ReplayTarget event Stored .envelope : ReplayEnvelope .days : ImportantDays","surface":"private-event-payload"},{"consumer":"ReplayTarget","operation":null,"path":"ReplayTarget register latest : ReplayEnvelope .days : ImportantDays","surface":"snapshot-register"},{"consumer":"workqueue:replay_jobs","operation":null,"path":"workqueue replay_jobs payload .envelope : ReplayEnvelope .days : ImportantDays","surface":"workqueue-payload"},{"consumer":"read-model-query:replay_lookup:input","operation":null,"path":"readmodel replay_lookup query input : ReplayEnvelope .days : ImportantDays","surface":"read-model-query-input"},{"consumer":"read-model-query:replay_lookup:result","operation":null,"path":"readmodel replay_lookup query result : ReplayEnvelope [] .days : ImportantDays","surface":"read-model-query-result"}],"consumers":["ReplayLedger","ReplayTarget","workqueue:replay_jobs","read-model-query:replay_lookup:input","read-model-query:replay_lookup:result"],"declaration":"ImportantDays","identity":"structural\u001fkeiro-dsl:Conformance.CheckedMappingReplay.Domain:ImportantDays\u001fConformance.CheckedMappingReplay.Bindings.importantDaysBinding\u001f1\u001fconformance.checked-mapping-replay.ImportantDays.v1\u001fConformance.CheckedMappingReplay.Bindings.importantDaysFixtures\u001f\u001f53109dc5617f1504\u001fvalue:List(Day)"},{"consequences":[{"consumer":"ReplayLedger","kind":"consumer-build"},{"consumer":"ReplayTarget","kind":"consumer-build"},{"consumer":"workqueue:replay_jobs","kind":"consumer-build"},{"consumer":"read-model-query:replay_lookup:input","kind":"consumer-build"},{"consumer":"read-model-query:replay_lookup:result","kind":"consumer-build"},{"aggregate":"ReplayLedger","kind":"private-event-history"},{"aggregate":"ReplayTarget","kind":"private-event-history"},{"aggregate":"ReplayLedger","kind":"snapshot-hydration"},{"aggregate":"ReplayTarget","kind":"snapshot-hydration"},{"kind":"workqueue-history","workqueue":"replay_jobs"},{"kind":"query-api","position":"input","readModel":"replay_lookup"},{"kind":"query-api","position":"result","readModel":"replay_lookup"}],"consumerEvidence":[{"consumer":"ReplayLedger","operation":null,"path":"ReplayLedger command ImportLegacy .envelope : ReplayEnvelope .contentHash : MaybeContentHash","surface":"aggregate-command"},{"consumer":"ReplayLedger","operation":null,"path":"ReplayLedger command Record .envelope : ReplayEnvelope .contentHash : MaybeContentHash","surface":"aggregate-command"},{"consumer":"ReplayLedger","operation":null,"path":"ReplayLedger event LegacyMappingImported .envelope : ReplayEnvelope .contentHash : MaybeContentHash","surface":"private-event-payload"},{"consumer":"ReplayLedger","operation":null,"path":"ReplayLedger event MappingAudited .envelope : ReplayEnvelope .contentHash : MaybeContentHash","surface":"private-event-payload"},{"consumer":"ReplayLedger","operation":null,"path":"ReplayLedger event MappingRecorded .envelope : ReplayEnvelope .contentHash : MaybeContentHash","surface":"private-event-payload"},{"consumer":"ReplayLedger","operation":null,"path":"ReplayLedger register current : ReplayEnvelope .contentHash : MaybeContentHash","surface":"snapshot-register"},{"consumer":"ReplayTarget","operation":null,"path":"ReplayTarget command Store .envelope : ReplayEnvelope .contentHash : MaybeContentHash","surface":"aggregate-command"},{"consumer":"ReplayTarget","operation":null,"path":"ReplayTarget event Stored .envelope : ReplayEnvelope .contentHash : MaybeContentHash","surface":"private-event-payload"},{"consumer":"ReplayTarget","operation":null,"path":"ReplayTarget register latest : ReplayEnvelope .contentHash : MaybeContentHash","surface":"snapshot-register"},{"consumer":"workqueue:replay_jobs","operation":null,"path":"workqueue replay_jobs payload .envelope : ReplayEnvelope .contentHash : MaybeContentHash","surface":"workqueue-payload"},{"consumer":"read-model-query:replay_lookup:input","operation":null,"path":"readmodel replay_lookup query input : ReplayEnvelope .contentHash : MaybeContentHash","surface":"read-model-query-input"},{"consumer":"read-model-query:replay_lookup:result","operation":null,"path":"readmodel replay_lookup query result : ReplayEnvelope [] .contentHash : MaybeContentHash","surface":"read-model-query-result"}],"consumers":["ReplayLedger","ReplayTarget","workqueue:replay_jobs","read-model-query:replay_lookup:input","read-model-query:replay_lookup:result"],"declaration":"MaybeContentHash","identity":"structural\u001fkeiro-dsl:Conformance.CheckedMappingReplay.Domain:MaybeContentHash\u001fConformance.CheckedMappingReplay.Bindings.maybeContentHashBinding\u001f1\u001fconformance.checked-mapping-replay.MaybeContentHash.v1\u001fConformance.CheckedMappingReplay.Bindings.maybeContentHashFixtures\u001f\u001fb30e54ecc09e6b84\u001fvalue:Optional(Ref(ContentHash))"},{"consequences":[{"consumer":"ReplayLedger","kind":"consumer-build"},{"consumer":"ReplayTarget","kind":"consumer-build"},{"consumer":"workqueue:replay_jobs","kind":"consumer-build"},{"consumer":"read-model-query:replay_lookup:input","kind":"consumer-build"},{"consumer":"read-model-query:replay_lookup:result","kind":"consumer-build"},{"aggregate":"ReplayLedger","kind":"private-event-history"},{"aggregate":"ReplayTarget","kind":"private-event-history"},{"aggregate":"ReplayLedger","kind":"snapshot-hydration"},{"aggregate":"ReplayTarget","kind":"snapshot-hydration"},{"kind":"workqueue-history","workqueue":"replay_jobs"},{"kind":"query-api","position":"input","readModel":"replay_lookup"},{"kind":"query-api","position":"result","readModel":"replay_lookup"}],"consumerEvidence":[{"consumer":"ReplayLedger","operation":null,"path":"ReplayLedger command ImportLegacy .envelope : ReplayEnvelope .label : MaybeLabel","surface":"aggregate-command"},{"consumer":"ReplayLedger","operation":null,"path":"ReplayLedger command Record .envelope : ReplayEnvelope .label : MaybeLabel","surface":"aggregate-command"},{"consumer":"ReplayLedger","operation":null,"path":"ReplayLedger event LegacyMappingImported .envelope : ReplayEnvelope .label : MaybeLabel","surface":"private-event-payload"},{"consumer":"ReplayLedger","operation":null,"path":"ReplayLedger event MappingAudited .envelope : ReplayEnvelope .label : MaybeLabel","surface":"private-event-payload"},{"consumer":"ReplayLedger","operation":null,"path":"ReplayLedger event MappingRecorded .envelope : ReplayEnvelope .label : MaybeLabel","surface":"private-event-payload"},{"consumer":"ReplayLedger","operation":null,"path":"ReplayLedger register current : ReplayEnvelope .label : MaybeLabel","surface":"snapshot-register"},{"consumer":"ReplayTarget","operation":null,"path":"ReplayTarget command Store .envelope : ReplayEnvelope .label : MaybeLabel","surface":"aggregate-command"},{"consumer":"ReplayTarget","operation":null,"path":"ReplayTarget event Stored .envelope : ReplayEnvelope .label : MaybeLabel","surface":"private-event-payload"},{"consumer":"ReplayTarget","operation":null,"path":"ReplayTarget register latest : ReplayEnvelope .label : MaybeLabel","surface":"snapshot-register"},{"consumer":"workqueue:replay_jobs","operation":null,"path":"workqueue replay_jobs payload .envelope : ReplayEnvelope .label : MaybeLabel","surface":"workqueue-payload"},{"consumer":"read-model-query:replay_lookup:input","operation":null,"path":"readmodel replay_lookup query input : ReplayEnvelope .label : MaybeLabel","surface":"read-model-query-input"},{"consumer":"read-model-query:replay_lookup:result","operation":null,"path":"readmodel replay_lookup query result : ReplayEnvelope [] .label : MaybeLabel","surface":"read-model-query-result"}],"consumers":["ReplayLedger","ReplayTarget","workqueue:replay_jobs","read-model-query:replay_lookup:input","read-model-query:replay_lookup:result"],"declaration":"MaybeLabel","identity":"structural\u001fkeiro-dsl:Conformance.CheckedMappingReplay.Domain:MaybeLabel\u001fConformance.CheckedMappingReplay.Bindings.maybeLabelBinding\u001f1\u001fconformance.checked-mapping-replay.MaybeLabel.v1\u001fConformance.CheckedMappingReplay.Bindings.maybeLabelFixtures\u001f\u001fc289b01d5d2741d7\u001fvalue:Optional(Text)"},{"consequences":[{"consumer":"ReplayLedger","kind":"consumer-build"},{"consumer":"ReplayTarget","kind":"consumer-build"},{"consumer":"workqueue:replay_jobs","kind":"consumer-build"},{"consumer":"read-model-query:replay_lookup:input","kind":"consumer-build"},{"consumer":"read-model-query:replay_lookup:result","kind":"consumer-build"},{"aggregate":"ReplayLedger","kind":"private-event-history"},{"aggregate":"ReplayTarget","kind":"private-event-history"},{"aggregate":"ReplayLedger","kind":"snapshot-hydration"},{"aggregate":"ReplayTarget","kind":"snapshot-hydration"},{"kind":"workqueue-history","workqueue":"replay_jobs"},{"kind":"query-api","position":"input","readModel":"replay_lookup"},{"kind":"query-api","position":"result","readModel":"replay_lookup"}],"consumerEvidence":[{"consumer":"ReplayLedger","operation":null,"path":"ReplayLedger command ImportLegacy .envelope : ReplayEnvelope","surface":"aggregate-command"},{"consumer":"ReplayLedger","operation":null,"path":"ReplayLedger command Record .envelope : ReplayEnvelope","surface":"aggregate-command"},{"consumer":"ReplayLedger","operation":null,"path":"ReplayLedger event LegacyMappingImported .envelope : ReplayEnvelope","surface":"private-event-payload"},{"consumer":"ReplayLedger","operation":null,"path":"ReplayLedger event MappingAudited .envelope : ReplayEnvelope","surface":"private-event-payload"},{"consumer":"ReplayLedger","operation":null,"path":"ReplayLedger event MappingRecorded .envelope : ReplayEnvelope","surface":"private-event-payload"},{"consumer":"ReplayLedger","operation":null,"path":"ReplayLedger register current : ReplayEnvelope","surface":"snapshot-register"},{"consumer":"ReplayTarget","operation":null,"path":"ReplayTarget command Store .envelope : ReplayEnvelope","surface":"aggregate-command"},{"consumer":"ReplayTarget","operation":null,"path":"ReplayTarget event Stored .envelope : ReplayEnvelope","surface":"private-event-payload"},{"consumer":"ReplayTarget","operation":null,"path":"ReplayTarget register latest : ReplayEnvelope","surface":"snapshot-register"},{"consumer":"workqueue:replay_jobs","operation":null,"path":"workqueue replay_jobs payload .envelope : ReplayEnvelope","surface":"workqueue-payload"},{"consumer":"read-model-query:replay_lookup:input","operation":null,"path":"readmodel replay_lookup query input : ReplayEnvelope","surface":"read-model-query-input"},{"consumer":"read-model-query:replay_lookup:result","operation":null,"path":"readmodel replay_lookup query result : ReplayEnvelope []","surface":"read-model-query-result"}],"consumers":["ReplayLedger","ReplayTarget","workqueue:replay_jobs","read-model-query:replay_lookup:input","read-model-query:replay_lookup:result"],"declaration":"ReplayEnvelope","identity":"structural\u001fkeiro-dsl:Conformance.CheckedMappingReplay.Domain:ReplayEnvelope\u001fConformance.CheckedMappingReplay.Bindings.replayEnvelopeBinding\u001f1\u001fconformance.checked-mapping-replay.ReplayEnvelope.v1\u001fConformance.CheckedMappingReplay.Bindings.replayEnvelopeFixtures\u001fConformance.CheckedMappingReplay.Bindings.initialReplayEnvelope\u001fa4462543d6941d76\u001frecord:ReplayEnvelope:contentHash=contentHash,days=days,identities=identities,label=label,labels=labels,optionalLabels=optionalLabels,primary=primary"},{"consequences":[{"consumer":"ReplayLedger","kind":"consumer-build"},{"consumer":"ReplayTarget","kind":"consumer-build"},{"consumer":"workqueue:replay_jobs","kind":"consumer-build"},{"consumer":"read-model-query:replay_lookup:input","kind":"consumer-build"},{"consumer":"read-model-query:replay_lookup:result","kind":"consumer-build"},{"aggregate":"ReplayLedger","kind":"private-event-history"},{"aggregate":"ReplayTarget","kind":"private-event-history"},{"aggregate":"ReplayLedger","kind":"snapshot-hydration"},{"aggregate":"ReplayTarget","kind":"snapshot-hydration"},{"kind":"workqueue-history","workqueue":"replay_jobs"},{"kind":"query-api","position":"input","readModel":"replay_lookup"},{"kind":"query-api","position":"result","readModel":"replay_lookup"}],"consumerEvidence":[{"consumer":"ReplayLedger","operation":null,"path":"ReplayLedger command ImportLegacy .envelope : ReplayEnvelope .labels : TextLabels","surface":"aggregate-command"},{"consumer":"ReplayLedger","operation":null,"path":"ReplayLedger command Record .envelope : ReplayEnvelope .labels : TextLabels","surface":"aggregate-command"},{"consumer":"ReplayLedger","operation":null,"path":"ReplayLedger event LegacyMappingImported .envelope : ReplayEnvelope .labels : TextLabels","surface":"private-event-payload"},{"consumer":"ReplayLedger","operation":null,"path":"ReplayLedger event MappingAudited .envelope : ReplayEnvelope .labels : TextLabels","surface":"private-event-payload"},{"consumer":"ReplayLedger","operation":null,"path":"ReplayLedger event MappingRecorded .envelope : ReplayEnvelope .labels : TextLabels","surface":"private-event-payload"},{"consumer":"ReplayLedger","operation":null,"path":"ReplayLedger register current : ReplayEnvelope .labels : TextLabels","surface":"snapshot-register"},{"consumer":"ReplayTarget","operation":null,"path":"ReplayTarget command Store .envelope : ReplayEnvelope .labels : TextLabels","surface":"aggregate-command"},{"consumer":"ReplayTarget","operation":null,"path":"ReplayTarget event Stored .envelope : ReplayEnvelope .labels : TextLabels","surface":"private-event-payload"},{"consumer":"ReplayTarget","operation":null,"path":"ReplayTarget register latest : ReplayEnvelope .labels : TextLabels","surface":"snapshot-register"},{"consumer":"workqueue:replay_jobs","operation":null,"path":"workqueue replay_jobs payload .envelope : ReplayEnvelope .labels : TextLabels","surface":"workqueue-payload"},{"consumer":"read-model-query:replay_lookup:input","operation":null,"path":"readmodel replay_lookup query input : ReplayEnvelope .labels : TextLabels","surface":"read-model-query-input"},{"consumer":"read-model-query:replay_lookup:result","operation":null,"path":"readmodel replay_lookup query result : ReplayEnvelope [] .labels : TextLabels","surface":"read-model-query-result"}],"consumers":["ReplayLedger","ReplayTarget","workqueue:replay_jobs","read-model-query:replay_lookup:input","read-model-query:replay_lookup:result"],"declaration":"TextLabels","identity":"structural\u001fkeiro-dsl:Conformance.CheckedMappingReplay.Domain:TextLabels\u001fConformance.CheckedMappingReplay.Bindings.textLabelsBinding\u001f1\u001fconformance.checked-mapping-replay.TextLabels.v1\u001fConformance.CheckedMappingReplay.Bindings.textLabelsFixtures\u001f\u001f68498398eaf249eb\u001fvalue:Set(Text)"}],"mappedSurfaceEvidenceVersion":1,"serviceInventory":["ContentHash","ImportantDays","MaybeContentHash","MaybeLabel","ReplayEnvelope","TextLabels"]}
test/conformance-coldstart/Generated/Billing/BehaviorSourceMap.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from context billing behavior source map; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from context billing behavior source map; do not edit. module Generated.Billing.BehaviorSourceMap   ( BehaviorSourceLocation (..)   , behaviorSourceLocation
test/conformance-coldstart/Generated/Billing/Nominals.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE TypeFamilies #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from context billing generated nominal declarations; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from context billing generated nominal declarations; do not edit. module Generated.Billing.Nominals   ( CustomerId   , parseCustomerId
test/conformance-coldstart/Generated/Billing/Nominals/Internal.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from context billing generated nominal ID internals; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from context billing generated nominal ID internals; do not edit. module Generated.Billing.Nominals.Internal   ( CustomerId   , parseCustomerId
test/conformance-coldstart/Generated/Billing/ReplayAudit.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from context billing replay-audit assembly; do not edit.+-- @generated by keiro-dsl 0.18.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;
test/conformance-coldstart/Generated/Billing/Subscription/BehaviorContract.hs view
@@ -1,5 +1,5 @@ {-# LANGUAGE OverloadedLabels #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate Subscription; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate Subscription; do not edit. module Generated.Billing.Subscription.BehaviorContract   ( BehaviorKey (..)   , unBehaviorKey
test/conformance-coldstart/Generated/Billing/Subscription/Codec.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate Subscription; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate Subscription; do not edit. module Generated.Billing.Subscription.Codec (     subscriptionCodec,     parseSubscriptionEvent,
test/conformance-coldstart/Generated/Billing/Subscription/Domain.hs view
@@ -1,5 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate Subscription; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate Subscription; do not edit. module Generated.Billing.Subscription.Domain where  import Data.Proxy (Proxy (..))
test/conformance-coldstart/Generated/Billing/Subscription/EventStream.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate Subscription; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate Subscription; do not edit. module Generated.Billing.Subscription.EventStream   ( subscriptionCategory   , subscriptionCommandCategory
test/conformance-coldstart/Generated/Billing/Subscription/Harness.hs view
@@ -1,5 +1,5 @@ {-# LANGUAGE OverloadedLabels #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate Subscription; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate Subscription; do not edit. module Generated.Billing.Subscription.Harness (harnessAssertions) where  import Generated.Billing.Subscription.Domain
test/conformance-coldstart/Generated/Billing/Subscription/Projection.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate Subscription; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate Subscription; do not edit. module Generated.Billing.Subscription.Projection   ( subscriptionsProjection   , subscriptionsStatusFor
test/conformance-coldstart/Generated/Billing/Subscription/Transducer.hs view
@@ -1,7 +1,7 @@ {-# LANGUAGE BlockArguments #-} {-# LANGUAGE OverloadedLabels #-} {-# LANGUAGE QualifiedDo #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate Subscription; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate Subscription; do not edit. module Generated.Billing.Subscription.Transducer   ( subscriptionTransducer   , subscriptionFoldFingerprint
test/conformance-contract-declared-id/Generated/ContractDeclaredId/Nominals.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from context contract-declared-id generated nominal declarations; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from context contract-declared-id generated nominal declarations; do not edit. module Generated.ContractDeclaredId.Nominals   ( TemplateId   , parseTemplateId
test/conformance-contract-declared-id/Generated/ContractDeclaredId/Nominals/Internal.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from context contract-declared-id generated nominal ID internals; do not edit.+-- @generated by keiro-dsl 0.18.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
test/conformance-contract-declared-id/Generated/ContractDeclaredId/Structural/NominalLeaves.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from context contract-declared-id structural nominal leaves; do not edit.+-- @generated by keiro-dsl 0.18.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)
test/conformance-contract-declared-id/Generated/ContractDeclaredId/StructuralConformance.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from context contract-declared-id structural conformance; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from context contract-declared-id structural conformance; do not edit. module Generated.ContractDeclaredId.StructuralConformance   ( structuralConformanceAssertions   ) where
test/conformance-contract-declared-id/Generated/ContractDeclaredId/Templates/Contract.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from contract templates; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from contract templates; do not edit. module Generated.ContractDeclaredId.Templates.Contract   ( TemplatesPayload (..)   , TemplateClaimedData (..)
test/conformance-contract-v1-compat/Generated/HospitalCapacity/Emergency/Contract.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 1) from contract emergency; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 1) from contract emergency; do not edit. module Generated.HospitalCapacity.Emergency.Contract   ( EmergencyPayload (..)   , IncidentTransferNeedDeclaredData (..)
test/conformance-contract/Generated/HospitalCapacity/Emergency/Contract.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from contract emergency; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from contract emergency; do not edit. module Generated.HospitalCapacity.Emergency.Contract   ( EmergencyPayload (..)   , IncidentTransferNeedDeclaredData (..)
test/conformance-corpus-manifest.txt view
@@ -9,6 +9,7 @@  workspace keiro-dsl/test/fixtures/workspace-nominals/service.keiro-workspace keiro-dsl/test/conformance-workspace-nominals workspace keiro-dsl/test/conformance-service-package/service.keiro-workspace keiro-dsl/test/conformance-service-package/runtime/src+workspace keiro-dsl/test/fixtures/checked-mapping-replay-workspace/service.keiro-workspace keiro-dsl/test/conformance-checked-mapping-replay  # This published-language-4 fixture proves compatibility and must not be rewritten # when `keiro-dsl new` advances to an unreleased candidate authoring language.@@ -16,6 +17,9 @@  extra-args keiro-dsl/test/conformance-structural --codec-comparison ArtifactInfo --comparison-out keiro-dsl/test/conformance-structural/Generated/StructuralConformance/Structural/CodecCompare/ArtifactInfo.hs extra-args keiro-dsl/test/conformance-structural-nominals --codec-comparison TemplateState --comparison-out keiro-dsl/test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Structural/CodecCompare/TemplateState.hs+extra-args keiro-dsl/test/conformance-bare-containers --codec-comparison MaybeText --comparison-out keiro-dsl/test/conformance-bare-containers/Generated/BareContainers/Structural/CodecCompare/MaybeText.hs+extra-args keiro-dsl/test/conformance-calendar-days --codec-comparison MaybeLocalDay --comparison-out keiro-dsl/test/conformance-calendar-days/Generated/CalendarDays/Structural/CodecCompare/MaybeLocalDay.hs+extra-args keiro-dsl/test/conformance-refined-base16 --codec-comparison ContentHash --comparison-out keiro-dsl/test/conformance-refined-base16/Generated/RefinedBase16/Structural/CodecCompare/ContentHash.hs  # Reviewed legacy suites intentionally compile only the output surface under test. uncompiled-generated keiro-dsl/test/conformance-aggregate-scalars/Generated/AggregateScalars/ScalarLedger/BehaviorContract.hs
test/conformance-declarative-router/Generated/TransferRouting/BehaviorSourceMap.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from context transfer-routing behavior source map; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 5) from context transfer-routing behavior source map; do not edit. module Generated.TransferRouting.BehaviorSourceMap   ( BehaviorSourceLocation (..)   , behaviorSourceLocation
test/conformance-declarative-router/Generated/TransferRouting/Hospital/BehaviorContract.hs view
@@ -1,5 +1,5 @@ {-# LANGUAGE OverloadedLabels #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from aggregate Hospital; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 5) from aggregate Hospital; do not edit. module Generated.TransferRouting.Hospital.BehaviorContract   ( BehaviorKey (..)   , unBehaviorKey
test/conformance-declarative-router/Generated/TransferRouting/Hospital/Codec.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from aggregate Hospital; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 5) from aggregate Hospital; do not edit. module Generated.TransferRouting.Hospital.Codec (     hospitalCodec,     parseHospitalEvent,
test/conformance-declarative-router/Generated/TransferRouting/Hospital/Domain.hs view
@@ -1,5 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from aggregate Hospital; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 5) from aggregate Hospital; do not edit. module Generated.TransferRouting.Hospital.Domain where  import Data.Proxy (Proxy (..))
test/conformance-declarative-router/Generated/TransferRouting/Hospital/EventStream.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from aggregate Hospital; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 5) from aggregate Hospital; do not edit. module Generated.TransferRouting.Hospital.EventStream   ( hospitalCategory   , hospitalCommandCategory
test/conformance-declarative-router/Generated/TransferRouting/Hospital/Harness.hs view
@@ -1,5 +1,5 @@ {-# LANGUAGE OverloadedLabels #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from aggregate Hospital; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 5) from aggregate Hospital; do not edit. module Generated.TransferRouting.Hospital.Harness (harnessAssertions) where  import Generated.TransferRouting.Hospital.Domain
test/conformance-declarative-router/Generated/TransferRouting/Hospital/Projection.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from aggregate Hospital; do not edit.+-- @generated by keiro-dsl 0.18.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.
test/conformance-declarative-router/Generated/TransferRouting/Hospital/Transducer.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE BlockArguments #-} {-# LANGUAGE QualifiedDo #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from aggregate Hospital; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 5) from aggregate Hospital; do not edit. module Generated.TransferRouting.Hospital.Transducer   ( hospitalTransducer   , hospitalFoldFingerprint
test/conformance-declarative-router/Generated/TransferRouting/HospitalLoad/QueryContract.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from readmodel hospital_load; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 5) from readmodel hospital_load; do not edit. module Generated.TransferRouting.HospitalLoad.QueryContract   ( HospitalLoadQueryInput   , HospitalLoadQueryResult
test/conformance-declarative-router/Generated/TransferRouting/HospitalLoad/ReadModel.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from readmodel hospital_load; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 5) from readmodel hospital_load; do not edit. module Generated.TransferRouting.HospitalLoad.ReadModel   ( hospitalLoadReadModel   , hospitalLoadQualifiedTable
test/conformance-declarative-router/Generated/TransferRouting/HospitalLoad/ReadModelHarness.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from readmodel hospital_load; do not edit.+-- @generated by keiro-dsl 0.18.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)
test/conformance-declarative-router/Generated/TransferRouting/HospitalLoad/ReadModelTable.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from readmodel hospital_load; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 5) from readmodel hospital_load; do not edit. module Generated.TransferRouting.HospitalLoad.ReadModelTable (hospitalLoadQualifiedTable) where  import Data.Text (Text)
test/conformance-declarative-router/Generated/TransferRouting/HospitalTransferRouter/Router.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from router HospitalTransferRouter; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 5) from router HospitalTransferRouter; do not edit. module Generated.TransferRouting.HospitalTransferRouter.Router   ( hospitalTransferRouterName   , hospitalTransferRouterWorkerOptions
test/conformance-declarative-router/Generated/TransferRouting/HospitalTransferRouter/RouterHarness.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from router HospitalTransferRouter; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 5) from router HospitalTransferRouter; do not edit. module Generated.TransferRouting.HospitalTransferRouter.RouterHarness (routerHarnessValues) where  routerHarnessValues :: [(String, String)]
test/conformance-declarative-router/Generated/TransferRouting/ProjectionCatalog.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from projection-catalog transfer-routing; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 5) from projection-catalog transfer-routing; do not edit. {-# LANGUAGE OverloadedStrings #-} module Generated.TransferRouting.ProjectionCatalog   ( projectionCatalog
test/conformance-declarative-router/Generated/TransferRouting/ReplayAudit.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from context transfer-routing replay-audit assembly; do not edit.+-- @generated by keiro-dsl 0.18.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;
test/conformance-declarative-router/Generated/TransferRouting/Structural/Shape/HospitalLoadRow.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from mapped structural HospitalLoadRow; do not edit.+-- @generated by keiro-dsl 0.18.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)
test/conformance-declarative-router/Generated/TransferRouting/Structural/Shape/TransferRouteInput.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from mapped structural TransferRouteInput; do not edit.+-- @generated by keiro-dsl 0.18.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)
test/conformance-declarative-router/Generated/TransferRouting/StructuralConformance.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from context transfer-routing structural conformance; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 5) from context transfer-routing structural conformance; do not edit. module Generated.TransferRouting.StructuralConformance   ( structuralConformanceAssertions   ) where
test/conformance-declarative-router/Generated/TransferRouting/StructuralProjections.hs view
@@ -1,5 +1,5 @@ {-# LANGUAGE TypeFamilies #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from context transfer-routing mapped structural facade; do not edit.+-- @generated by keiro-dsl 0.18.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.
test/conformance-dispatch-full/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModel.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from readmodel accepted_transfer_needs; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from readmodel accepted_transfer_needs; do not edit. module Generated.HospitalCapacity.AcceptedTransferNeeds.ReadModel   ( acceptedTransferNeedsReadModel   , acceptedTransferNeedsQualifiedTable
test/conformance-dispatch-full/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModelHarness.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from readmodel accepted_transfer_needs; do not edit.+-- @generated by keiro-dsl 0.18.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)
test/conformance-dispatch-full/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModelTable.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from readmodel accepted_transfer_needs; do not edit.+-- @generated by keiro-dsl 0.18.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)
test/conformance-dispatch-full/Generated/HospitalCapacity/ReservationWork/Queue.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from workqueue reservation_work; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from workqueue reservation_work; do not edit. module Generated.HospitalCapacity.ReservationWork.Queue   ( ReservationWorkItem (..)   , encodeReservationWorkItem
test/conformance-dispatch-full/Generated/HospitalCapacity/ReservationWork/QueueCodec.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from workqueue reservation_work; do not edit.+-- @generated by keiro-dsl 0.18.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
test/conformance-dispatch-full/Generated/HospitalCapacity/ReservationWork/QueuePolicy.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from workqueue reservation_work; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from workqueue reservation_work; do not edit. module Generated.HospitalCapacity.ReservationWork.QueuePolicy   ( ReservationWorkOutcome (..)   , retryPolicy, jobOutcomeFor
test/conformance-dispatch-full/Generated/HospitalCapacity/TransferDecisions/ReadModel.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from readmodel transfer_decisions; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from readmodel transfer_decisions; do not edit. module Generated.HospitalCapacity.TransferDecisions.ReadModel   ( transferDecisionsReadModel   , transferDecisionsQualifiedTable
test/conformance-dispatch-full/Generated/HospitalCapacity/TransferDecisions/ReadModelHarness.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from readmodel transfer_decisions; do not edit.+-- @generated by keiro-dsl 0.18.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)
test/conformance-dispatch-full/Generated/HospitalCapacity/TransferDecisions/ReadModelTable.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from readmodel transfer_decisions; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from readmodel transfer_decisions; do not edit. module Generated.HospitalCapacity.TransferDecisions.ReadModelTable (transferDecisionsQualifiedTable) where  import Data.Text (Text)
test/conformance-domain-outcomes/Generated/DomainOutcomes/BehaviorSourceMap.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from context domain-outcomes behavior source map; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 5) from context domain-outcomes behavior source map; do not edit. module Generated.DomainOutcomes.BehaviorSourceMap   ( BehaviorSourceLocation (..)   , behaviorSourceLocation
test/conformance-domain-outcomes/Generated/DomainOutcomes/Nominals.hs view
@@ -1,5 +1,5 @@ {-# LANGUAGE DeriveAnyClass #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from context domain-outcomes generated nominal declarations; do not edit.+-- @generated by keiro-dsl 0.18.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)
test/conformance-domain-outcomes/Generated/DomainOutcomes/ReplayAudit.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from context domain-outcomes replay-audit assembly; do not edit.+-- @generated by keiro-dsl 0.18.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;
test/conformance-domain-outcomes/Generated/DomainOutcomes/Reservation/BehaviorContract.hs view
@@ -1,5 +1,5 @@ {-# LANGUAGE OverloadedLabels #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from aggregate Reservation; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 5) from aggregate Reservation; do not edit. module Generated.DomainOutcomes.Reservation.BehaviorContract   ( BehaviorKey (..)   , unBehaviorKey
test/conformance-domain-outcomes/Generated/DomainOutcomes/Reservation/Codec.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from aggregate Reservation; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 5) from aggregate Reservation; do not edit. module Generated.DomainOutcomes.Reservation.Codec (     reservationCodec,     parseReservationEvent,
test/conformance-domain-outcomes/Generated/DomainOutcomes/Reservation/Domain.hs view
@@ -1,5 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from aggregate Reservation; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 5) from aggregate Reservation; do not edit. module Generated.DomainOutcomes.Reservation.Domain where  import Data.Proxy (Proxy (..))
test/conformance-domain-outcomes/Generated/DomainOutcomes/Reservation/EventStream.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from aggregate Reservation; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 5) from aggregate Reservation; do not edit. module Generated.DomainOutcomes.Reservation.EventStream   ( reservationCategory   , reservationCommandCategory
test/conformance-domain-outcomes/Generated/DomainOutcomes/Reservation/Harness.hs view
@@ -1,5 +1,5 @@ {-# LANGUAGE OverloadedLabels #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from aggregate Reservation; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 5) from aggregate Reservation; do not edit. module Generated.DomainOutcomes.Reservation.Harness (harnessAssertions) where  import Generated.DomainOutcomes.Reservation.Domain
test/conformance-domain-outcomes/Generated/DomainOutcomes/Reservation/Projection.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from aggregate Reservation; do not edit.+-- @generated by keiro-dsl 0.18.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.
test/conformance-domain-outcomes/Generated/DomainOutcomes/Reservation/Transducer.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE BlockArguments #-} {-# LANGUAGE QualifiedDo #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from aggregate Reservation; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 5) from aggregate Reservation; do not edit. module Generated.DomainOutcomes.Reservation.Transducer   ( reservationTransducer   , reservationFoldFingerprint
+ test/conformance-id-admission-domains/Conformance/IdAdmissionDomains/Bindings.hs view
@@ -0,0 +1,36 @@+module Conformance.IdAdmissionDomains.Bindings where++import Conformance.IdAdmissionDomains.Domain+import Data.List.NonEmpty (NonEmpty (..))+import Data.Map.Strict qualified as Map+import Data.Text (Text)+import Generated.IdAdmissionDomains.Nominals (LegacyId, parseLegacyId)+import Generated.IdAdmissionDomains.Structural.Shape.IdentityEnvelope qualified as Shape+import Keiro.Codec.Structural (FixtureCases (..), StructuralBinding (..))++uuidV5Text, uuidV7Text :: Text+uuidV5Text = "legacy_58kj0y515rbwebzaxwzzknjqnk"+uuidV7Text = "legacy_01h455vb4pex5vsknk084sn02q"++uuidV5, uuidV7 :: LegacyId+uuidV5 = committedId uuidV5Text+uuidV7 = committedId uuidV7Text++v5Envelope, mixedEnvelope :: IdentityEnvelope+v5Envelope = IdentityEnvelope uuidV5 Nothing (Map.singleton uuidV5 "historical-v5")+mixedEnvelope = IdentityEnvelope uuidV7 (Just uuidV5) (Map.fromList [(uuidV5, "historical-v5"), (uuidV7, "current-v7")])++identityEnvelopeBinding :: StructuralBinding IdentityEnvelope Shape.IdentityEnvelopeShape+identityEnvelopeBinding =+  StructuralBinding+    { bindingToShape = \(IdentityEnvelope legacyId previousId labelsById) -> Shape.IdentityEnvelope legacyId previousId labelsById,+      bindingFromShape = \(Shape.IdentityEnvelope legacyId previousId labelsById) -> IdentityEnvelope legacyId previousId labelsById+    }++identityEnvelopeFixtures :: FixtureCases IdentityEnvelope+identityEnvelopeFixtures = FixtureCases (("uuid-v5", v5Envelope) :| [("mixed-v5-v7", mixedEnvelope)])++committedId :: Text -> LegacyId+committedId value = case parseLegacyId value of+  Right parsed -> parsed+  Left reason -> error ("invalid committed LegacyId fixture: " <> show reason)
+ test/conformance-id-admission-domains/Conformance/IdAdmissionDomains/Domain.hs view
@@ -0,0 +1,23 @@+{-# LANGUAGE DeriveAnyClass #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DerivingStrategies #-}++module Conformance.IdAdmissionDomains.Domain where++import Data.Map.Strict (Map)+import Data.Proxy (Proxy)+import Data.Text (Text)+import GHC.Generics (Generic)+import Generated.IdAdmissionDomains.Nominals (LegacyId)+import Keiki.Shape (CanonicalTypeName (..))++data IdentityEnvelope = IdentityEnvelope+  { legacyId :: !LegacyId,+    previousId :: !(Maybe LegacyId),+    labelsById :: !(Map LegacyId Text)+  }+  deriving stock (Eq, Generic, Show)++instance CanonicalTypeName IdentityEnvelope where+  canonicalTypeName :: Proxy IdentityEnvelope -> Text+  canonicalTypeName _ = "conformance.id-admission-domains.IdentityEnvelope.v1"
+ test/conformance-id-admission-domains/Generated/IdAdmissionDomains/BehaviorSourceMap.hs view
@@ -0,0 +1,31 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from context id-admission-domains behavior source map; do not edit.+module Generated.IdAdmissionDomains.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-0bc43a8eaf58f2f2" -> Just (BehaviorSourceLocation "keiro-dsl/test/fixtures/id-admission-domains.keiro" 33 3)+  "behavior-v1-54975b0ac4e921b5" -> Just (BehaviorSourceLocation "keiro-dsl/test/fixtures/id-admission-domains.keiro" 28 3)+  "behavior-v1-5acf27af287654ab" -> Just (BehaviorSourceLocation "keiro-dsl/test/fixtures/id-admission-domains.keiro" 22 10)+  _ -> 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
+ test/conformance-id-admission-domains/Generated/IdAdmissionDomains/Identities/Contract.hs view
@@ -0,0 +1,61 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from contract identities; do not edit.+module Generated.IdAdmissionDomains.Identities.Contract+  ( IdentitiesPayload (..)+  , IdentityLinkedData (..)+  , identityEventsTopic+  , messageTypeOf+  , encodeIdentitiesPayload+  , parseIdentitiesPayload+  ) where++import Data.Aeson (Value, object, withObject, withText, (.=))+import Data.Aeson.Types (Parser, explicitParseField, parseEither)+import Generated.IdAdmissionDomains.Nominals qualified as Nominals+import Generated.IdAdmissionDomains.Structural.NominalLeaves qualified as NominalLeaves+import Data.Text (Text)+import qualified Data.Text as T++-- topic constants+identityEventsTopic :: Text+identityEventsTopic = "identity.events"++-- the closed payload set (discriminated by "messageType")+data IdentityLinkedData = IdentityLinkedData {legacyId :: !Nominals.LegacyId}+  deriving stock (Eq, Show)++data IdentitiesPayload+  = IdentityLinked !IdentityLinkedData+  deriving stock (Eq, Show)++messageTypeOf :: IdentitiesPayload -> Text+messageTypeOf = \case+  IdentityLinked {} -> "IdentityLinked"++encodeIdentitiesPayload :: IdentitiesPayload -> Value+encodeIdentitiesPayload = \case+  IdentityLinked payload ->+    object+      [ "messageType" .= ("IdentityLinked" :: Text),+        "legacyId" .= NominalLeaves.encodeLegacyIdLeaf payload.legacyId+      ]++parseIdentitiesPayload :: Value -> Either Text IdentitiesPayload+parseIdentitiesPayload = mapLeftText . parseEither (withObject "IdentitiesPayload" go)+  where+    go o = do+      kind <- explicitParseField (withText "messageType" validateMessageType) o "messageType"+      case kind of+        "IdentityLinked" ->+          IdentityLinked+            <$> ( IdentityLinkedData+                    <$> explicitParseField NominalLeaves.parseLegacyIdLeaf o "legacyId"+                )+        _ -> 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` ["IdentityLinked"] = pure kind+  | otherwise = fail ("unknown message type " <> show kind <> "; expected one of: IdentityLinked")
+ test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityLedger/BehaviorContract.hs view
@@ -0,0 +1,363 @@+{-# LANGUAGE OverloadedLabels #-}+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from aggregate IdentityLedger; do not edit.+module Generated.IdAdmissionDomains.IdentityLedger.BehaviorContract+  ( BehaviorKey (..)+  , unBehaviorKey+  , ObligationKind (..)+  , EvidenceLevel (..)+  , GuardCoverage (..)+  , BehaviorRequirement (..)+  , RejectionClass (..)+  , LiveExpectation (..)+  , BehaviorWitness (..)+  , BehaviorFailure (..)+  , BehaviorConformanceReport (..)+  , behaviorRequirements+  , behaviorCoverageReport+  , behaviorConformancePassed+  , behaviorConformancePassedWith+  , renderBehaviorConformanceText+  ) where++import Generated.IdAdmissionDomains.IdentityLedger.Codec (encodeIdentityLedgerEvent, parseIdentityLedgerEvent, identityLedgerCodec)+import Generated.IdAdmissionDomains.IdentityLedger.Domain+import Generated.IdAdmissionDomains.IdentityLedger.Transducer (identityLedgerTransducer)+import Generated.IdAdmissionDomains.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 :: !IdentityLedgerVertex+  , commandName :: !Text+  , expectedEdge :: !(Maybe (K.EdgeRef IdentityLedgerVertex))+  , target :: !(Maybe IdentityLedgerVertex)+  , eventKinds :: ![Text]+  }+  deriving stock (Eq, Show)++data RejectionClass = RejectNoOutgoingEdges | RejectNoMatchingEdge+  deriving stock (Eq, Show)++data LiveExpectation+  = Emits (NonEmpty IdentityLedgerEvent)+  | Rejects RejectionClass+  | NoOp+  deriving stock (Eq, Show)++data BehaviorWitness+  = Pending BehaviorKey+  | LiveWitness+      { key :: BehaviorKey+      , history :: [IdentityLedgerEvent]+      , command :: IdentityLedgerCommand+      , expected :: LiveExpectation+      }+  | ReplayWitness+      { key :: BehaviorKey+      , historyPrefix :: [IdentityLedgerEvent]+      , observedChunk :: [IdentityLedgerEvent]+      }+  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 =+  [ -- IdentityLedgerOpen x ImportLegacyIdentity: replay-only transition+    BehaviorRequirement+      { key = BehaviorKey "behavior-v1-0bc43a8eaf58f2f2"+      , kind = ReplayTransition+      , evidence = GeneratedAuthoritative+      , guardCoverage = GuardNotApplicable+      , source = IdentityLedgerOpen+      , commandName = "ImportLegacyIdentity"+      , expectedEdge = (Just (K.EdgeRef IdentityLedgerOpen 1))+      , target = Just IdentityLedgerOpen+      , eventKinds = ["LegacyIdentityImported"]+      }+  , -- IdentityLedgerOpen x RecordIdentity: live transition+    BehaviorRequirement+      { key = BehaviorKey "behavior-v1-54975b0ac4e921b5"+      , kind = LiveTransition+      , evidence = GeneratedAuthoritative+      , guardCoverage = GuardTotal+      , source = IdentityLedgerOpen+      , commandName = "RecordIdentity"+      , expectedEdge = (Just (K.EdgeRef IdentityLedgerOpen 0))+      , target = Just IdentityLedgerOpen+      , eventKinds = ["IdentityRecorded", "IdentityAudited"]+      }+  , -- IdentityLedgerOpen x ImportLegacyIdentity: required rejection+    BehaviorRequirement+      { key = BehaviorKey "behavior-v1-5acf27af287654ab"+      , kind = RequiredRejection+      , evidence = GeneratedAuthoritative+      , guardCoverage = GuardNotApplicable+      , source = IdentityLedgerOpen+      , commandName = "ImportLegacyIdentity"+      , expectedEdge = Nothing+      , target = Nothing+      , eventKinds = []+      }+  ]++behaviorCoverageReport :: [BehaviorWitness] -> BehaviorConformanceReport+behaviorCoverageReport 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 <- behaviorRequirements]+  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: IdentityLedger"+  , "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 -> [IdentityLedgerEvent] -> IdentityLedgerCommand -> 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 -> (IdentityLedgerVertex, K.RegFile IdentityLedgerRegs) -> IdentityLedgerCommand -> 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 identityLedgerTransducer 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 -> (IdentityLedgerVertex, K.RegFile IdentityLedgerRegs) -> IdentityLedgerCommand -> 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 identityLedgerTransducer 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 identityLedgerTransducer 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 identityLedgerTransducer 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 IdentityLedgerRegs IdentityLedgerVertex IdentityLedgerEvent -> 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 -> [IdentityLedgerEvent] -> [IdentityLedgerEvent] -> 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 identityLedgerTransducer (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 IdentityLedgerVertex] -> 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 -> [IdentityLedgerEvent] -> Either BehaviorFailure (K.ReplaySuccess IdentityLedgerRegs IdentityLedgerVertex)+settleHistory requirement label history = do+  decoded <- either (failure requirement (label <> "-codec-decode")) Right (decodeEvents history)+  case K.applyEventsDetailedEither identityLedgerTransducer (IdentityLedgerOpen, initialIdentityLedgerRegs) decoded of+    Left replayFailure -> failure requirement (label <> "-replay-failed") (tshow replayFailure)+    Right replaySuccess -> Right replaySuccess++decodeEvents :: [IdentityLedgerEvent] -> Either Text [IdentityLedgerEvent]+decodeEvents = traverse (\event -> parseIdentityLedgerEvent (Codec.eventType identityLedgerCodec event) (encodeIdentityLedgerEvent event))++commandKind :: IdentityLedgerCommand -> Text+commandKind command = case command of+  RecordIdentity _ -> "RecordIdentity"+  ImportLegacyIdentity _ -> "ImportLegacyIdentity"++eventKind :: IdentityLedgerEvent -> Text+eventKind event = case Codec.eventType identityLedgerCodec event of Codec.EventType tag -> tag++regsEqual :: K.RegFile IdentityLedgerRegs -> K.RegFile IdentityLedgerRegs -> Bool+regsEqual left right = (left K.! #current) == (right K.! #current)++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
+ test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityLedger/Codec.hs view
@@ -0,0 +1,143 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from aggregate IdentityLedger; do not edit.+module Generated.IdAdmissionDomains.IdentityLedger.Codec (+    identityLedgerCodec,+    parseIdentityLedgerEvent,+    encodeIdentityLedgerEvent,+    encodeIdentityEnvelopeMapped,+    decodeIdentityEnvelopeMapped,+) where++import Generated.IdAdmissionDomains.IdentityLedger.Domain+import Generated.IdAdmissionDomains.Nominals (legacyIdText)+import Generated.IdAdmissionDomains.Nominals.Internal (unsafeLegacyIdFromLegacyText)+import Control.Monad (unless)+import Data.Aeson (Value (..), object, parseJSON, toJSON, withObject, (.:), (.=))+import Data.Aeson.Key qualified as Key+import Data.Aeson.KeyMap qualified as KeyMap+import Data.Aeson.Types (Parser, JSONPathElement (..), (<?>), explicitParseField, parseEither)+import Data.List.NonEmpty (NonEmpty (..))+import Data.List.NonEmpty qualified as NonEmpty+import Data.Map.Strict qualified as Map+import Data.Text (Text)+import qualified Data.Text as T+import Keiro.Codec.Structural (bindingFromShape, bindingToShape)+import Keiro.Codec (Codec (..), EventType (..))+++import Generated.IdAdmissionDomains.Structural.NominalLeaves (encodeLegacyIdLeaf, parseLegacyIdLeaf)+import Generated.IdAdmissionDomains.Structural.NominalLeaves (parseLegacyIdLeafKey, renderLegacyIdLeafKey)+import Conformance.IdAdmissionDomains.Bindings qualified as Bindings+import Conformance.IdAdmissionDomains.Domain (IdentityEnvelope)+import Generated.IdAdmissionDomains.Structural.Shape.IdentityEnvelope qualified as ShapeIdentityEnvelope++++encodeIdentityEnvelopeMapped :: IdentityEnvelope -> Value+encodeIdentityEnvelopeMapped = encodeIdentityEnvelopeShape . bindingToShape Bindings.identityEnvelopeBinding++parseIdentityEnvelopeMapped :: Value -> Parser IdentityEnvelope+parseIdentityEnvelopeMapped value = bindingFromShape Bindings.identityEnvelopeBinding <$> parseIdentityEnvelopeShape value++decodeIdentityEnvelopeMapped :: Value -> Either Text IdentityEnvelope+decodeIdentityEnvelopeMapped = mapLeftText . parseEither parseIdentityEnvelopeMapped++encodeIdentityEnvelopeShape :: ShapeIdentityEnvelope.IdentityEnvelopeShape -> Value+encodeIdentityEnvelopeShape shape =+  object+      [ "legacyId" .= encodeLegacyIdLeaf shape.legacyId+      , "previousId" .= maybe Null (\item0 -> encodeLegacyIdLeaf item0) (shape.previousId)+      , "labelsById" .= Object (KeyMap.fromList [(Key.fromText (renderLegacyIdLeafKey key0), toJSON (item0)) | (key0, item0) <- Map.toList (shape.labelsById)])+      ]++parseIdentityEnvelopeShape :: Value -> Parser ShapeIdentityEnvelope.IdentityEnvelopeShape+parseIdentityEnvelopeShape = withObject "IdentityEnvelopeShape" $ \objectValue -> do+  rejectUnknownFields "IdentityEnvelope" ["legacyId", "previousId", "labelsById"] objectValue+  ShapeIdentityEnvelope.IdentityEnvelope+    <$> explicitParseField (parseLegacyIdLeaf) objectValue "legacyId"+    <*> parseOptionalField (pure Nothing) (\value0 -> case value0 of Null -> pure Nothing; other0 -> Just <$> (parseLegacyIdLeaf) other0) objectValue "previousId"+    <*> explicitParseField (\value0 -> withObject "Map[LegacyId]" (\object0 -> Map.fromList <$> traverse (\(rawKey0, item0) -> do key0 <- parseLegacyIdLeafKey (Key.toText rawKey0) <?> Key rawKey0; parsedItem0 <- (parseJSON) item0 <?> Key rawKey0; pure (key0, parsedItem0)) (KeyMap.toList object0)) value0) objectValue "labelsById"++identityLedgerEventTypes :: NonEmpty EventType+identityLedgerEventTypes = EventType "IdentityRecorded" :| [EventType "IdentityAudited", EventType "LegacyIdentityImported"]++identityLedgerCodec :: Codec IdentityLedgerEvent+identityLedgerCodec =+  Codec+    { eventTypes = identityLedgerEventTypes+    , eventType = \case+        IdentityRecorded{} -> EventType "IdentityRecorded"+        IdentityAudited{} -> EventType "IdentityAudited"+        LegacyIdentityImported{} -> EventType "LegacyIdentityImported"+    , schemaVersion = 1+    , encode = encodeIdentityLedgerEvent+    , decode = parseIdentityLedgerEvent+    , upcasters = []+    }++encodeIdentityLedgerEvent :: IdentityLedgerEvent -> Value+encodeIdentityLedgerEvent = \case+  IdentityRecorded payload ->+    object+      [ "kind" .= ("IdentityRecorded" :: Text)+      , "legacyId" .= legacyIdText payload.legacyId+      , "envelope" .= encodeIdentityEnvelopeMapped payload.envelope+      ]+  IdentityAudited payload ->+    object+      [ "kind" .= ("IdentityAudited" :: Text)+      , "legacyId" .= legacyIdText payload.legacyId+      , "envelope" .= encodeIdentityEnvelopeMapped payload.envelope+      ]+  LegacyIdentityImported payload ->+    object+      [ "kind" .= ("LegacyIdentityImported" :: Text)+      , "legacyId" .= legacyIdText payload.legacyId+      , "envelope" .= encodeIdentityEnvelopeMapped payload.envelope+      ]++parseIdentityLedgerEvent :: EventType -> Value -> Either Text IdentityLedgerEvent+parseIdentityLedgerEvent (EventType tag) = mapLeftText . parseEither (withObject "IdentityLedgerEvent" go)+  where+    go o = do+      case tag of+        "IdentityRecorded" ->+          IdentityRecorded+            <$> ( IdentityRecordedData+                    <$> (unsafeLegacyIdFromLegacyText <$> o .: "legacyId")+                    <*> explicitParseField parseIdentityEnvelopeMapped o "envelope"+                )+        "IdentityAudited" ->+          IdentityAudited+            <$> ( IdentityAuditedData+                    <$> (unsafeLegacyIdFromLegacyText <$> o .: "legacyId")+                    <*> explicitParseField parseIdentityEnvelopeMapped o "envelope"+                )+        "LegacyIdentityImported" ->+          LegacyIdentityImported+            <$> ( LegacyIdentityImportedData+                    <$> (unsafeLegacyIdFromLegacyText <$> o .: "legacyId")+                    <*> explicitParseField parseIdentityEnvelopeMapped o "envelope"+                )+        _ -> fail ("unknown event type " <> show tag <> "; expected one of: " <> renderExpectedEventTypes identityLedgerEventTypes)++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++parseOptionalField :: Parser fieldValue -> (Value -> Parser fieldValue) -> KeyMap.KeyMap Value -> Key.Key -> Parser fieldValue+parseOptionalField onMissing parseItem objectValue key =+  case KeyMap.lookup key objectValue of+    Nothing -> onMissing+    Just _ -> explicitParseField parseItem objectValue key++rejectUnknownFields :: String -> [Text] -> KeyMap.KeyMap Value -> Parser ()+rejectUnknownFields label allowed objectValue =+  unless (null extras) (fail (label <> " contains unknown fields: " <> show extras))+  where+    extras = filter (`notElem` allowed) (map Key.toText (KeyMap.keys objectValue))
+ test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityLedger/Domain.hs view
@@ -0,0 +1,66 @@+{-# LANGUAGE TemplateHaskell #-}+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from aggregate IdentityLedger; do not edit.+module Generated.IdAdmissionDomains.IdentityLedger.Domain where++import Data.Proxy (Proxy (..))+import GHC.Generics (Generic)+import Keiki.Core (RegFile (..))+import Generated.IdAdmissionDomains.Nominals (LegacyId, parseLegacyId)+import Conformance.IdAdmissionDomains.Domain (IdentityEnvelope)+import Keiki.Generics.TH (deriveAggregateCtorsAll, deriveWireCtorsAll)++data IdentityLedgerVertex = IdentityLedgerOpen+  deriving stock (Generic, Eq, Ord, Show, Enum, Bounded)++data RecordIdentityData = RecordIdentityData+  { legacyId :: !LegacyId+  , envelope :: !IdentityEnvelope+  }+  deriving stock (Generic, Eq, Show)++data ImportLegacyIdentityData = ImportLegacyIdentityData+  { legacyId :: !LegacyId+  , envelope :: !IdentityEnvelope+  }+  deriving stock (Generic, Eq, Show)++data IdentityLedgerCommand = RecordIdentity !RecordIdentityData+  | ImportLegacyIdentity !ImportLegacyIdentityData+  deriving stock (Generic, Eq, Show)++data IdentityRecordedData = IdentityRecordedData+  { legacyId :: !LegacyId+  , envelope :: !IdentityEnvelope+  }+  deriving stock (Generic, Eq, Show)++data IdentityAuditedData = IdentityAuditedData+  { legacyId :: !LegacyId+  , envelope :: !IdentityEnvelope+  }+  deriving stock (Generic, Eq, Show)++data LegacyIdentityImportedData = LegacyIdentityImportedData+  { legacyId :: !LegacyId+  , envelope :: !IdentityEnvelope+  }+  deriving stock (Generic, Eq, Show)++data IdentityLedgerEvent = IdentityRecorded !IdentityRecordedData+  | IdentityAudited !IdentityAuditedData+  | LegacyIdentityImported !LegacyIdentityImportedData+  deriving stock (Generic, Eq, Show)++type IdentityLedgerRegs =+  '[ '("current", LegacyId)+   ]++initialIdentityLedgerRegs :: RegFile IdentityLedgerRegs+initialIdentityLedgerRegs =+  RCons (Proxy @"current") (case parseLegacyId "legacy_01h455vb4pex5vsknk084sn02q" of Right parsed -> parsed; Left _ -> error "generated valid ID sample failed to parse") RNil++$(deriveAggregateCtorsAll ''IdentityLedgerCommand ''IdentityLedgerRegs)++++$(deriveWireCtorsAll ''IdentityLedgerEvent)
+ test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityLedger/EventStream.hs view
@@ -0,0 +1,49 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from aggregate IdentityLedger; do not edit.+module Generated.IdAdmissionDomains.IdentityLedger.EventStream+  ( identityLedgerCategory+  , identityLedgerCommandCategory+  , identityLedgerEventStream+  , identityLedgerEventStreamDef+  , IdentityLedgerEventStream+  , IdentityLedgerEventStreamDef+  ) where++import Generated.IdAdmissionDomains.IdentityLedger.Domain+import Generated.IdAdmissionDomains.IdentityLedger.Codec (identityLedgerCodec)+import Generated.IdAdmissionDomains.IdentityLedger.Transducer (identityLedgerTransducer)+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.+identityLedgerCategory :: Stream.StreamCategory IdentityLedgerEventStreamDef+identityLedgerCategory = Stream.categoryUnsafe "identityLedger"++-- The same category text, typed for command envelopes such as PMCommand.+identityLedgerCommandCategory :: Stream.StreamCategory IdentityLedgerCommand+identityLedgerCommandCategory = Stream.categoryUnsafe "identityLedger"++type IdentityLedgerEventStreamDef =+  EventStream (HsPred IdentityLedgerRegs IdentityLedgerCommand) IdentityLedgerRegs IdentityLedgerVertex IdentityLedgerCommand IdentityLedgerEvent++type IdentityLedgerEventStream =+  ValidatedEventStream (HsPred IdentityLedgerRegs IdentityLedgerCommand) IdentityLedgerRegs IdentityLedgerVertex IdentityLedgerCommand IdentityLedgerEvent++identityLedgerEventStreamDef :: IdentityLedgerEventStreamDef+identityLedgerEventStreamDef =+  EventStream+    { transducer = identityLedgerTransducer,+      initialState = IdentityLedgerOpen,+      initialRegisters = initialIdentityLedgerRegs,+      eventCodec = identityLedgerCodec,+      resolveStreamName = Stream.streamName,+      snapshotPolicy = Never,+      stateCodec = Nothing+    }++identityLedgerEventStream :: IdentityLedgerEventStream+identityLedgerEventStream =+  mkEventStreamOrThrow "IdentityLedger" identityLedgerEventStreamDef
+ test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityLedger/Harness.hs view
@@ -0,0 +1,122 @@+{-# LANGUAGE OverloadedLabels #-}+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from aggregate IdentityLedger; do not edit.+module Generated.IdAdmissionDomains.IdentityLedger.Harness (harnessAssertions) where++import Generated.IdAdmissionDomains.IdentityLedger.Domain+import Generated.IdAdmissionDomains.IdentityLedger.Codec (encodeIdentityLedgerEvent, parseIdentityLedgerEvent, identityLedgerCodec, encodeIdentityEnvelopeMapped, decodeIdentityEnvelopeMapped)+import Generated.IdAdmissionDomains.IdentityLedger.Transducer (identityLedgerTransducer)+import Keiki.Core (applyEventsEither, defaultValidationOptions, step, validateTransducer, (!))+import Keiro.Codec (eventType)+import Generated.IdAdmissionDomains.Nominals (LegacyId, parseLegacyId)+import Data.Aeson qualified as Aeson+import Data.Aeson.Key qualified as AesonKey+import Data.Aeson.KeyMap qualified as AesonKeyMap+import Data.Either (isLeft, isRight)+import Data.List.NonEmpty qualified as NonEmpty+import Data.Text qualified as T+import Keiro.Codec.Structural (FixtureCases (..))+import Conformance.IdAdmissionDomains.Bindings qualified as Bindings++-- | (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 identityLedgerTransducer))+  -- clock-free: spec samples no wall clock (verified at scaffold time)+  , ("golden round-trip: IdentityRecorded", roundTrips sampleEventIdentityRecorded)+  , ("golden round-trip: IdentityAudited", roundTrips sampleEventIdentityAudited)+  , ("golden round-trip: LegacyIdentityImported", roundTrips sampleEventLegacyIdentityImported)+  , ("accepts RecordIdentity from IdentityLedgerOpen", acceptRecordIdentity)+  ]+  ++ mappedConformanceAssertions+  ++ forwardReplayRecordIdentity++roundTrips :: IdentityLedgerEvent -> Bool+roundTrips e = parseIdentityLedgerEvent (eventType identityLedgerCodec e) (encodeIdentityLedgerEvent e) == Right e++sampleLegacyId :: LegacyId+sampleLegacyId =+  case parseLegacyId "legacy_01h455vb4pex5vsknk084sn02q" of+    Right parsed -> parsed+    Left problem -> error (show problem)++sampleEventIdentityRecorded :: IdentityLedgerEvent+sampleEventIdentityRecorded = IdentityRecorded (IdentityRecordedData sampleLegacyId (snd (NonEmpty.head (fixtureCases Bindings.identityEnvelopeFixtures))))++sampleEventIdentityAudited :: IdentityLedgerEvent+sampleEventIdentityAudited = IdentityAudited (IdentityAuditedData sampleLegacyId (snd (NonEmpty.head (fixtureCases Bindings.identityEnvelopeFixtures))))++sampleEventLegacyIdentityImported :: IdentityLedgerEvent+sampleEventLegacyIdentityImported = LegacyIdentityImported (LegacyIdentityImportedData sampleLegacyId (snd (NonEmpty.head (fixtureCases Bindings.identityEnvelopeFixtures))))++acceptRecordIdentity :: Bool+acceptRecordIdentity =+  case step identityLedgerTransducer (IdentityLedgerOpen, initialIdentityLedgerRegs) (RecordIdentity (RecordIdentityData sampleLegacyId (snd (NonEmpty.head (fixtureCases Bindings.identityEnvelopeFixtures))))) of+    Just (v, _, _) -> v == IdentityLedgerOpen+    Nothing -> False++-- forward/replay equality (plan 147): cross the persisted codec boundary,+-- replay the emitted chain, and compare the final vertex and every register.+forwardReplayRecordIdentity :: [(String, Bool)]+forwardReplayRecordIdentity =+  case step identityLedgerTransducer (IdentityLedgerOpen, initialIdentityLedgerRegs) (RecordIdentity (RecordIdentityData sampleLegacyId (snd (NonEmpty.head (fixtureCases Bindings.identityEnvelopeFixtures))))) of+    Nothing -> [(prefix <> "forward step accepted", False)]+    Just (forwardVertex, forwardRegs, emitted) ->+      case mapM (\event -> parseIdentityLedgerEvent (eventType identityLedgerCodec event) (encodeIdentityLedgerEvent event)) emitted of+        Left _ -> [(prefix <> "emitted chain decodes", False)]+        Right decodedEvents ->+          case applyEventsEither identityLedgerTransducer (IdentityLedgerOpen, initialIdentityLedgerRegs) decodedEvents of+            Left _ -> [(prefix <> "replay succeeds", False)]+            Right (replayVertex, replayRegs) ->+              [ (prefix <> "final vertex", replayVertex == forwardVertex)+              , (prefix <> "register current", (replayRegs ! #current) == (forwardRegs ! #current))+              ]+  where+    prefix = "forward/replay equality: RecordIdentity from IdentityLedgerOpen -- "++mappedConformanceAssertions :: [(String, Bool)]+mappedConformanceAssertions =+  concat+    [ identityRecordedEnvelopeAssertions+    , identityAuditedEnvelopeAssertions+    , legacyIdentityImportedEnvelopeAssertions+    , structuralWirePolicyAssertions+    ]++identityRecordedEnvelopeAssertions :: [(String, Bool)]+identityRecordedEnvelopeAssertions =+  [ ("mapped codec round-trip: IdentityRecorded/envelope/" <> T.unpack label, roundTrips (IdentityRecorded (IdentityRecordedData sampleLegacyId mappedValue)))+  | (label, mappedValue) <- NonEmpty.toList (fixtureCases Bindings.identityEnvelopeFixtures)+  ]++identityAuditedEnvelopeAssertions :: [(String, Bool)]+identityAuditedEnvelopeAssertions =+  [ ("mapped codec round-trip: IdentityAudited/envelope/" <> T.unpack label, roundTrips (IdentityAudited (IdentityAuditedData sampleLegacyId mappedValue)))+  | (label, mappedValue) <- NonEmpty.toList (fixtureCases Bindings.identityEnvelopeFixtures)+  ]++legacyIdentityImportedEnvelopeAssertions :: [(String, Bool)]+legacyIdentityImportedEnvelopeAssertions =+  [ ("mapped codec round-trip: LegacyIdentityImported/envelope/" <> T.unpack label, roundTrips (LegacyIdentityImported (LegacyIdentityImportedData sampleLegacyId mappedValue)))+  | (label, mappedValue) <- NonEmpty.toList (fixtureCases Bindings.identityEnvelopeFixtures)+  ]++structuralWirePolicyAssertions :: [(String, Bool)]+structuralWirePolicyAssertions =+  [ ("wire policy missing default: conformance.id-admission-domains.IdentityEnvelope.v1/previousId", case decodeIdentityEnvelopeMapped (deleteObjectField "previousId" (encodeIdentityEnvelopeMapped (snd (NonEmpty.head (fixtureCases Bindings.identityEnvelopeFixtures))))) of Left _ -> False; Right decoded -> objectField "previousId" (encodeIdentityEnvelopeMapped decoded) == Just (Aeson.Null))+  , ("wire policy explicit null: conformance.id-admission-domains.IdentityEnvelope.v1/previousId", isRight (decodeIdentityEnvelopeMapped (insertObjectField "previousId" Aeson.Null (encodeIdentityEnvelopeMapped (snd (NonEmpty.head (fixtureCases Bindings.identityEnvelopeFixtures)))))))+  , ("wire policy unknown fields: conformance.id-admission-domains.IdentityEnvelope.v1", all (\(_, value) -> isLeft (decodeIdentityEnvelopeMapped (insertObjectField "__keiro_unknown" (Aeson.Bool True) (encodeIdentityEnvelopeMapped value)))) (NonEmpty.toList (fixtureCases Bindings.identityEnvelopeFixtures)))+  ]++deleteObjectField :: T.Text -> Aeson.Value -> Aeson.Value+deleteObjectField key (Aeson.Object objectValue) = Aeson.Object (AesonKeyMap.delete (AesonKey.fromText key) objectValue)+deleteObjectField _ value = value++insertObjectField :: T.Text -> Aeson.Value -> Aeson.Value -> Aeson.Value+insertObjectField key inserted (Aeson.Object objectValue) = Aeson.Object (AesonKeyMap.insert (AesonKey.fromText key) inserted objectValue)+insertObjectField _ _ value = value++objectField :: T.Text -> Aeson.Value -> Maybe Aeson.Value+objectField key (Aeson.Object objectValue) = AesonKeyMap.lookup (AesonKey.fromText key) objectValue+objectField _ _ = Nothing
+ test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityLedger/Projection.hs view
@@ -0,0 +1,4 @@+-- @generated by keiro-dsl 0.18.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.
+ test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityLedger/Transducer.hs view
@@ -0,0 +1,70 @@+{-# LANGUAGE BlockArguments #-}+{-# LANGUAGE QualifiedDo #-}+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from aggregate IdentityLedger; do not edit.+module Generated.IdAdmissionDomains.IdentityLedger.Transducer+  ( identityLedgerTransducer+  , identityLedgerFoldFingerprint+  , BehaviorOwnership (..)+  , identityLedgerPredicateVerifications+  ) where++import Generated.IdAdmissionDomains.IdentityLedger.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 Keiki.Builder ((=:))++identityLedgerTransducer+  :: SymTransducer+       (HsPred IdentityLedgerRegs IdentityLedgerCommand)+       IdentityLedgerRegs+       IdentityLedgerVertex+       IdentityLedgerCommand+       IdentityLedgerEvent+identityLedgerTransducer =+  B.buildTransducer IdentityLedgerOpen initialIdentityLedgerRegs isTerminal do+    B.from IdentityLedgerOpen do+      B.onCmd inCtorRecordIdentity $ \d -> B.do+        B.slot @"current" =: d.legacyId+        B.emit wireIdentityRecorded (IdentityRecordedTermFields+          { legacyId = d.legacyId+          , envelope = d.envelope+          })+        B.emit wireIdentityAudited (IdentityAuditedTermFields+          { legacyId = d.legacyId+          , envelope = d.envelope+          })+        B.goto IdentityLedgerOpen+      B.onCmd inCtorImportLegacyIdentity $ \d -> B.do+        B.replayOnly+        B.slot @"current" =: d.legacyId+        B.emit wireLegacyIdentityImported (LegacyIdentityImportedTermFields+          { legacyId = d.legacyId+          , envelope = d.envelope+          })+        B.goto IdentityLedgerOpen+ where+  isTerminal = \case++    _ -> False++identityLedgerFoldFingerprint :: Text+identityLedgerFoldFingerprint = "ad6ef591515ea2fb83140c5d44bc7576"++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.+identityLedgerPredicateVerifications :: IO [(Text, BehaviorOwnership, S.PredicateVerification)]+identityLedgerPredicateVerifications = sequence+  [ verifyTransition "transition1OpenRecordIdentity" GeneratedOwned IdentityLedgerOpen 0+  , verifyTransition "transition2OpenImportLegacyIdentity" GeneratedOwned IdentityLedgerOpen 1+  ]+ where+  verifyTransition label owner source edgeIndex =+    case drop edgeIndex (K.edgesOut identityLedgerTransducer source) of+      K.Edge predicate _ _ _ _ : _ -> (\result -> (label, owner, result)) <$> S.verifyPredicate predicate+      [] -> pure (label, owner, S.UnverifiedSolverFailure "generated transition edge missing")
+ test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityWork/Queue.hs view
@@ -0,0 +1,89 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from workqueue identity_work; do not edit.+module Generated.IdAdmissionDomains.IdentityWork.Queue+  ( IdentityWork (..)+  , encodeIdentityWork+  , parseIdentityWork+  , encodeIdentityEnvelopeMapped+  , decodeIdentityEnvelopeMapped+  , queuePhysical, queueDlq, queueTable++  ) where++import Control.Monad (unless)+import Data.Aeson (Value (..), object, parseJSON, toJSON, withObject, (.=))+import Data.Aeson.Key qualified as Key+import Data.Aeson.KeyMap qualified as KeyMap+import Data.Aeson.Types (Parser, JSONPathElement (..), (<?>), explicitParseField, parseEither)+import Data.Map.Strict qualified as Map+import Data.Text (Text)+import qualified Data.Text as T+import Keiro.Codec.Structural (bindingFromShape, bindingToShape)+import Generated.IdAdmissionDomains.Structural.NominalLeaves (encodeLegacyIdLeaf, parseLegacyIdLeaf)+import Generated.IdAdmissionDomains.Structural.NominalLeaves (parseLegacyIdLeafKey, renderLegacyIdLeafKey)+import Conformance.IdAdmissionDomains.Bindings qualified as Bindings+import Conformance.IdAdmissionDomains.Domain (IdentityEnvelope)+import Generated.IdAdmissionDomains.Nominals (LegacyId)+import Generated.IdAdmissionDomains.Structural.Shape.IdentityEnvelope qualified as ShapeIdentityEnvelope++queuePhysical, queueDlq, queueTable :: Text+queuePhysical = "identity_work"+queueDlq = "identity_work_dlq"+queueTable = "pgmq.q_identity_work"++data IdentityWork = IdentityWork+  { legacyId :: !LegacyId+  , envelope :: !IdentityEnvelope+  }+  deriving stock (Eq, Show)++encodeIdentityEnvelopeMapped :: IdentityEnvelope -> Value+encodeIdentityEnvelopeMapped = encodeIdentityEnvelopeShape . bindingToShape Bindings.identityEnvelopeBinding++parseIdentityEnvelopeMapped :: Value -> Parser IdentityEnvelope+parseIdentityEnvelopeMapped value = bindingFromShape Bindings.identityEnvelopeBinding <$> parseIdentityEnvelopeShape value++decodeIdentityEnvelopeMapped :: Value -> Either Text IdentityEnvelope+decodeIdentityEnvelopeMapped = mapLeftText . parseEither parseIdentityEnvelopeMapped++encodeIdentityEnvelopeShape :: ShapeIdentityEnvelope.IdentityEnvelopeShape -> Value+encodeIdentityEnvelopeShape shape =+  object+      [ "legacyId" .= encodeLegacyIdLeaf shape.legacyId+      , "previousId" .= maybe Null (\item0 -> encodeLegacyIdLeaf item0) (shape.previousId)+      , "labelsById" .= Object (KeyMap.fromList [(Key.fromText (renderLegacyIdLeafKey key0), toJSON (item0)) | (key0, item0) <- Map.toList (shape.labelsById)])+      ]++parseIdentityEnvelopeShape :: Value -> Parser ShapeIdentityEnvelope.IdentityEnvelopeShape+parseIdentityEnvelopeShape = withObject "IdentityEnvelopeShape" $ \objectValue -> do+  rejectUnknownFields "IdentityEnvelope" ["legacyId", "previousId", "labelsById"] objectValue+  ShapeIdentityEnvelope.IdentityEnvelope+    <$> explicitParseField (parseLegacyIdLeaf) objectValue "legacyId"+    <*> parseOptionalField (pure Nothing) (\value0 -> case value0 of Null -> pure Nothing; other0 -> Just <$> (parseLegacyIdLeaf) other0) objectValue "previousId"+    <*> explicitParseField (\value0 -> withObject "Map[LegacyId]" (\object0 -> Map.fromList <$> traverse (\(rawKey0, item0) -> do key0 <- parseLegacyIdLeafKey (Key.toText rawKey0) <?> Key rawKey0; parsedItem0 <- (parseJSON) item0 <?> Key rawKey0; pure (key0, parsedItem0)) (KeyMap.toList object0)) value0) objectValue "labelsById"++encodeIdentityWork :: IdentityWork -> Value+encodeIdentityWork payload =+  object+    [ "legacy_id" .= encodeLegacyIdLeaf payload.legacyId+    , "envelope" .= encodeIdentityEnvelopeMapped payload.envelope+    ]++parseIdentityWork :: Value -> Either Text IdentityWork+parseIdentityWork = mapLeftText . parseEither (withObject "IdentityWork" go)+  where+    go objectValue = IdentityWork <$> explicitParseField (parseLegacyIdLeaf) objectValue "legacy_id" <*> explicitParseField (parseIdentityEnvelopeMapped) objectValue "envelope"++mapLeftText :: Either String b -> Either Text b+mapLeftText = either (Left . T.pack) Right++parseOptionalField :: Parser fieldValue -> (Value -> Parser fieldValue) -> KeyMap.KeyMap Value -> Key.Key -> Parser fieldValue+parseOptionalField onMissing parseItem objectValue key =+  case KeyMap.lookup key objectValue of+    Nothing -> onMissing+    Just _ -> explicitParseField parseItem objectValue key++rejectUnknownFields :: String -> [Text] -> KeyMap.KeyMap Value -> Parser ()+rejectUnknownFields label allowed objectValue =+  unless (null extras) (fail (label <> " contains unknown fields: " <> show extras))+  where+    extras = filter (`notElem` allowed) (map Key.toText (KeyMap.keys objectValue))
+ test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityWork/QueueCodec.hs view
@@ -0,0 +1,29 @@+-- @generated by keiro-dsl 0.18.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+-- 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.IdAdmissionDomains.IdentityWork.QueueCodec (identityWorkPayloadCodec, identityWorkJobCodec) where++import Data.List.NonEmpty (NonEmpty (..))+import Keiro.Codec (Codec (..), EventType (..))+import Keiro.PGMQ.Codec (JobCodec, keiroJobCodec)+import Generated.IdAdmissionDomains.IdentityWork.Queue (IdentityWork, encodeIdentityWork, parseIdentityWork)++identityWorkPayloadCodec :: Codec IdentityWork+identityWorkPayloadCodec =+  Codec+    { eventTypes = EventType "IdentityWork" :| []+    , eventType = \_ -> EventType "IdentityWork"+    , schemaVersion = 1+    , encode = encodeIdentityWork+    , decode = \_ -> parseIdentityWork+    , upcasters = []+    }++identityWorkJobCodec :: JobCodec IdentityWork+identityWorkJobCodec = keiroJobCodec identityWorkPayloadCodec
+ test/conformance-id-admission-domains/Generated/IdAdmissionDomains/IdentityWork/QueuePolicy.hs view
@@ -0,0 +1,43 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from workqueue identity_work; do not edit.+module Generated.IdAdmissionDomains.IdentityWork.QueuePolicy+  ( IdentityWorkOutcome (..)+  , 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 IdentityWorkOutcome+  = StoreFailure+  | CommandRejected+  | DecodeFailure+  | OnCodecReject+  deriving stock (Eq, Show)++jobOutcomeFor :: IdentityWorkOutcome -> JobOutcome+jobOutcomeFor o = case o of+  StoreFailure -> Retry (RetryDelay 1)+  CommandRejected -> Dead "dead-lettered"+  DecodeFailure -> Dead "dead-lettered"+  OnCodecReject -> Dead "dead-lettered"
+ test/conformance-id-admission-domains/Generated/IdAdmissionDomains/Nominals.hs view
@@ -0,0 +1,9 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from context id-admission-domains generated nominal declarations; do not edit.+module Generated.IdAdmissionDomains.Nominals+  ( LegacyId+  , parseLegacyId+  , mkLegacyId+  , legacyIdText+  ) where++import Generated.IdAdmissionDomains.Nominals.Internal (LegacyId, mkLegacyId, parseLegacyId, legacyIdText)
+ test/conformance-id-admission-domains/Generated/IdAdmissionDomains/Nominals/Internal.hs view
@@ -0,0 +1,40 @@+-- @generated by keiro-dsl 0.18.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+  , mkLegacyId+  , legacyIdText+  , unsafeLegacyIdFromLegacyText+  ) 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 (typeIdV5OrV7Domain, validateIdDomainText)++newtype LegacyId = LegacyId Text+  deriving stock (Generic, Eq, Ord, Show)++instance CanonicalTypeName LegacyId++instance ToJSON LegacyId where+  toJSON = toJSON . legacyIdText++instance FromJSON LegacyId where+  parseJSON = withText "LegacyId" (either (fail . T.unpack) pure . parseLegacyId)++parseLegacyId :: Text -> Either Text LegacyId+parseLegacyId input = case validateIdDomainText (typeIdV5OrV7Domain "legacy") input of+  Left reason -> Left (T.pack (show reason))+  Right () -> Right (LegacyId input)++mkLegacyId :: Text -> Either Text LegacyId+mkLegacyId = parseLegacyId++legacyIdText :: LegacyId -> Text+legacyIdText (LegacyId value) = value++unsafeLegacyIdFromLegacyText :: Text -> LegacyId+unsafeLegacyIdFromLegacyText = LegacyId
+ test/conformance-id-admission-domains/Generated/IdAdmissionDomains/ReplayAudit.hs view
@@ -0,0 +1,23 @@+-- @generated by keiro-dsl 0.18.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;+--   * 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.IdAdmissionDomains.ReplayAudit (auditTargets) where++import Generated.IdAdmissionDomains.IdentityLedger.EventStream qualified as IdentityLedger+import Keiro.ReplayAudit (AuditTarget (..), SomeAuditTarget (..), streamInCategory)+import Keiro.Stream qualified as Stream++auditTargets :: [SomeAuditTarget]+auditTargets =+  [ SomeAuditTarget+      AuditTarget+        { eventStream = IdentityLedger.identityLedgerEventStream+        , category = Stream.categoryText IdentityLedger.identityLedgerCategory+        , mkStream = streamInCategory (Stream.categoryText IdentityLedger.identityLedgerCategory)+        }+  ]
+ test/conformance-id-admission-domains/Generated/IdAdmissionDomains/Structural/NominalLeaves.hs view
@@ -0,0 +1,24 @@+-- @generated by keiro-dsl 0.18.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)+import Data.Aeson.Types (Parser)+import Data.Text (Text)+import Data.Text qualified as T+import Generated.IdAdmissionDomains.Nominals qualified as Nominals++encodeLegacyIdLeaf :: Nominals.LegacyId -> Value+encodeLegacyIdLeaf = String . Nominals.legacyIdText+{-# NOINLINE encodeLegacyIdLeaf #-}++parseLegacyIdLeaf :: Value -> Parser Nominals.LegacyId+parseLegacyIdLeaf = withText "LegacyId" (either (fail . T.unpack) pure . Nominals.parseLegacyId)+{-# NOINLINE parseLegacyIdLeaf #-}++renderLegacyIdLeafKey :: Nominals.LegacyId -> Text+renderLegacyIdLeafKey = Nominals.legacyIdText+{-# NOINLINE renderLegacyIdLeafKey #-}++parseLegacyIdLeafKey :: Text -> Parser Nominals.LegacyId+parseLegacyIdLeafKey = either (fail . T.unpack) pure . Nominals.parseLegacyId+{-# NOINLINE parseLegacyIdLeafKey #-}
+ test/conformance-id-admission-domains/Generated/IdAdmissionDomains/Structural/Shape/IdentityEnvelope.hs view
@@ -0,0 +1,14 @@+-- @generated by keiro-dsl 0.18.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)+import Data.Text (Text)+import GHC.Generics (Generic)+import Generated.IdAdmissionDomains.Nominals qualified as Nominals++data IdentityEnvelopeShape = IdentityEnvelope+  { legacyId :: !Nominals.LegacyId+  , previousId :: !(Maybe Nominals.LegacyId)+  , labelsById :: !(Map Nominals.LegacyId Text)+  }+  deriving stock (Eq, Generic, Show)
+ test/conformance-id-admission-domains/Generated/IdAdmissionDomains/StructuralConformance.hs view
@@ -0,0 +1,61 @@+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from context id-admission-domains structural conformance; do not edit.+module Generated.IdAdmissionDomains.StructuralConformance+  ( structuralConformanceAssertions+  ) where++import Data.Aeson qualified as Aeson+import Data.Aeson.Types qualified as AesonTypes+import Data.List (nub)+import Data.List.NonEmpty qualified as NonEmpty+import Data.Map.Strict qualified as Map+import Data.Maybe (isJust, isNothing)+import Data.Proxy (Proxy (..))+import Data.Text qualified as T+import Keiki.Core (fieldWitnessAgrees)+import Keiki.Shape (CanonicalTypeName (..))+import Keiro.Codec.Structural (FixtureCases (..), bindingDomainRoundTrip, bindingShapeRoundTrip, bindingToShape)+import Generated.IdAdmissionDomains.StructuralProjections qualified as StructuralProjections+import Generated.IdAdmissionDomains.Structural.Shape.IdentityEnvelope (IdentityEnvelopeShape(previousId))+import Conformance.IdAdmissionDomains.Bindings qualified as Bindings+import Conformance.IdAdmissionDomains.Domain (IdentityEnvelope)+import Generated.IdAdmissionDomains.Nominals qualified as Nominals+import Generated.IdAdmissionDomains.Structural.NominalLeaves qualified as NominalLeaves+import Generated.IdAdmissionDomains.Structural.Shape.IdentityEnvelope qualified as ShapeIdentityEnvelope++structuralConformanceAssertions :: [(String, Bool)]+structuralConformanceAssertions =+  concat+    [ identityEnvelopeBindingAssertions+    , [("generated nominal canonical text: conformance.id-admission-domains.IdentityEnvelope.v1/LegacyId", all (\(_, value) -> (case bindingToShape Bindings.identityEnvelopeBinding value of ShapeIdentityEnvelope.IdentityEnvelope field0_0 field0_1 field0_2 -> ((NominalLeaves.encodeLegacyIdLeaf (field0_0) == Aeson.String (Nominals.legacyIdText (field0_0)) && AesonTypes.parseEither NominalLeaves.parseLegacyIdLeaf (NominalLeaves.encodeLegacyIdLeaf (field0_0)) == Right (field0_0))) && (maybe True (\item1 -> (NominalLeaves.encodeLegacyIdLeaf (item1) == Aeson.String (Nominals.legacyIdText (item1)) && AesonTypes.parseEither NominalLeaves.parseLegacyIdLeaf (NominalLeaves.encodeLegacyIdLeaf (item1)) == Right (item1))) (field0_1)) && ((all (\key1 -> (NominalLeaves.encodeLegacyIdLeaf (key1) == Aeson.String (Nominals.legacyIdText (key1)) && AesonTypes.parseEither NominalLeaves.parseLegacyIdLeaf (NominalLeaves.encodeLegacyIdLeaf (key1)) == Right (key1))) (Map.keys (field0_2)))))) (NonEmpty.toList (fixtureCases Bindings.identityEnvelopeFixtures)))]+    , [("fixture coverage: conformance.id-admission-domains.IdentityEnvelope.v1", coverageIdentityEnvelope)]+    , structuralProjectionAssertions+    ]++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)++identityEnvelopeBindingAssertions :: [(String, Bool)]+identityEnvelopeBindingAssertions =+  ("fixture labels: conformance.id-admission-domains.IdentityEnvelope.v1", validFixtureLabels cases) :+  ("canonical identity: conformance.id-admission-domains.IdentityEnvelope.v1", canonicalTypeName (Proxy @IdentityEnvelope) == "conformance.id-admission-domains.IdentityEnvelope.v1") :+  concat+    [ [ ("binding domain round-trip: conformance.id-admission-domains.IdentityEnvelope.v1/" <> T.unpack label, bindingDomainRoundTrip Bindings.identityEnvelopeBinding value)+      , ("binding shape round-trip: conformance.id-admission-domains.IdentityEnvelope.v1/" <> T.unpack label, bindingShapeRoundTrip Bindings.identityEnvelopeBinding (bindingToShape Bindings.identityEnvelopeBinding value))+      ]+    | (label, value) <- NonEmpty.toList cases+    ]+  where+    cases = fixtureCases Bindings.identityEnvelopeFixtures++coverageIdentityEnvelope :: Bool+coverageIdentityEnvelope = any (isNothing . (.previousId)) shapes && any (isJust . (.previousId)) shapes+  where+    shapes = map (bindingToShape Bindings.identityEnvelopeBinding . snd) (NonEmpty.toList (fixtureCases Bindings.identityEnvelopeFixtures))++structuralProjectionAssertions :: [(String, Bool)]+structuralProjectionAssertions =+  [ ("projection witness agreement: conformance.id-admission-domains.IdentityEnvelope.v1/legacyId", all (\(_, owner) -> fieldWitnessAgrees StructuralProjections.identityEnvelopeLegacyIdWitness (\referenceOwner -> StructuralProjections.identityEnvelopeLegacyIdGet referenceOwner) owner) (NonEmpty.toList (fixtureCases Bindings.identityEnvelopeFixtures)))+  ]
+ test/conformance-id-admission-domains/Generated/IdAdmissionDomains/StructuralProjections.hs view
@@ -0,0 +1,50 @@+{-# LANGUAGE TypeFamilies #-}+-- @generated by keiro-dsl 0.18.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.+module Generated.IdAdmissionDomains.StructuralProjections+  ( identityEnvelopeLegacyIdWitness+  , identityEnvelopeLegacyIdGet+  , identityEnvelopeLegacyIdRawGet+  ) where++import Data.Text (Text)+import Data.List.NonEmpty qualified as NonEmpty+import Keiro.Codec.IdDomain (idDomainTextPattern, typeIdV5OrV7Domain)+import Keiro.Codec.Structural (bindingToShape, bindingFromShape, fixtureCases)+import Keiki.Core (FieldProjection (..), FieldWitness, ExactFieldProjection (..), exactFieldWitness)+import Keiki.ProjectionDomain (TextPattern, textProjectionDomain)+import Generated.IdAdmissionDomains.Structural.Shape.IdentityEnvelope (IdentityEnvelopeShape(legacyId))+import Conformance.IdAdmissionDomains.Bindings qualified as Bindings+import Conformance.IdAdmissionDomains.Domain (IdentityEnvelope)+import Generated.IdAdmissionDomains.Nominals qualified as Nominals+import Generated.IdAdmissionDomains.Structural.Shape.IdentityEnvelope qualified as ShapeIdentityEnvelope++identityEnvelopeLegacyIdProjectionDomainPattern :: TextPattern+identityEnvelopeLegacyIdProjectionDomainPattern = either (error . show) id (idDomainTextPattern (typeIdV5OrV7Domain "legacy"))++data IdentityEnvelopeLegacyIdProjection++identityEnvelopeLegacyIdRawGet :: IdentityEnvelope -> Nominals.LegacyId+identityEnvelopeLegacyIdRawGet owner = (bindingToShape Bindings.identityEnvelopeBinding owner).legacyId++identityEnvelopeLegacyIdGet :: IdentityEnvelope -> Text+identityEnvelopeLegacyIdGet owner = Nominals.legacyIdText (identityEnvelopeLegacyIdRawGet owner)++instance FieldProjection IdentityEnvelopeLegacyIdProjection where+  type FieldName IdentityEnvelopeLegacyIdProjection = "/legacyId"+  type FieldOwner IdentityEnvelopeLegacyIdProjection = IdentityEnvelope+  type FieldResult IdentityEnvelopeLegacyIdProjection = Text+  fieldShapeId _ = "conformance.id-admission-domains.IdentityEnvelope.v1"+  projectFieldValue _ = identityEnvelopeLegacyIdGet++instance ExactFieldProjection IdentityEnvelopeLegacyIdProjection where+  fieldProjectionDomain _ = textProjectionDomain identityEnvelopeLegacyIdProjectionDomainPattern+  reconstructFieldOwner _ value = do+    fieldValue <- either (const Nothing) Just (Nominals.parseLegacyId value)+    let baseShape = bindingToShape Bindings.identityEnvelopeBinding (snd (NonEmpty.head (fixtureCases Bindings.identityEnvelopeFixtures)))+    pure (bindingFromShape Bindings.identityEnvelopeBinding (case baseShape of ShapeIdentityEnvelope.IdentityEnvelope _ projectionField0_1 projectionField0_2 -> ShapeIdentityEnvelope.IdentityEnvelope fieldValue projectionField0_1 projectionField0_2))++identityEnvelopeLegacyIdWitness :: FieldWitness IdentityEnvelopeLegacyIdProjection+identityEnvelopeLegacyIdWitness = exactFieldWitness @IdentityEnvelopeLegacyIdProjection
+ test/conformance-id-admission-domains/IdAdmissionDomains/IdentityLedger/BehaviorHoles.hs view
@@ -0,0 +1,9 @@+-- Consumer-owned behavioral witnesses. Created once; never overwritten.+module IdAdmissionDomains.IdentityLedger.BehaviorHoles (behaviorWitnesses) where++import Generated.IdAdmissionDomains.IdentityLedger.BehaviorContract++behaviorWitnesses :: [BehaviorWitness]+behaviorWitnesses =+  [ Pending (BehaviorKey "behavior-v1-723df676736b6f6c") -- IdentityLedgerOpen x RecordIdentity: live transition+  ]
+ test/conformance-id-admission-domains/Main.hs view
@@ -0,0 +1,109 @@+module Main (main) where++import Conformance.IdAdmissionDomains.Bindings qualified as Bindings+import Conformance.IdAdmissionDomains.Domain (IdentityEnvelope (..))+import Control.Monad (forM_, unless)+import Data.Aeson (Value (..))+import Data.Aeson.Key qualified as Key+import Data.Aeson.KeyMap qualified as KeyMap+import Data.Aeson.Types (parseEither)+import Data.Either (isLeft)+import Data.Map.Strict qualified as Map+import Data.Text (Text)+import Data.Text qualified as T+import Generated.IdAdmissionDomains.Identities.Contract+import Generated.IdAdmissionDomains.IdentityLedger.Codec+import Generated.IdAdmissionDomains.IdentityLedger.Domain+import Generated.IdAdmissionDomains.IdentityLedger.Harness (harnessAssertions)+import Generated.IdAdmissionDomains.IdentityLedger.Transducer (identityLedgerTransducer)+import Generated.IdAdmissionDomains.IdentityWork.Queue+import Generated.IdAdmissionDomains.Nominals (LegacyId, legacyIdText, parseLegacyId)+import Generated.IdAdmissionDomains.Structural.NominalLeaves (parseLegacyIdLeafKey, renderLegacyIdLeafKey)+import Generated.IdAdmissionDomains.StructuralConformance (structuralConformanceAssertions)+import Keiki.Core (applyEventsEither, (!))+import Keiro.Codec (EventType (..), eventType)+import System.Exit (exitFailure)++main :: IO ()+main = do+  let event = IdentityRecorded (IdentityRecordedData Bindings.uuidV5 Bindings.mixedEnvelope)+      encodedEvent = encodeIdentityLedgerEvent event+      contractPayload = IdentityLinked (IdentityLinkedData Bindings.uuidV5)+      queuePayload = IdentityWork Bindings.uuidV7 Bindings.mixedEnvelope+      assertions =+        structuralConformanceAssertions+          <> harnessAssertions+          <> [ ("generated admission accepts committed UUIDv5", (legacyIdText <$> parseLegacyId Bindings.uuidV5Text) == Right Bindings.uuidV5Text),+               ("generated admission accepts committed UUIDv7", (legacyIdText <$> parseLegacyId Bindings.uuidV7Text) == Right Bindings.uuidV7Text),+               ("generated aggregate codec preserves mixed UUID history", parseIdentityLedgerEvent (eventType identityLedgerCodec event) encodedEvent == Right event),+               ("serialized UUIDv5 and UUIDv7 multi-event history replays", serializedMultiEventReplay),+               ("replay-only UUIDv5 history preserves the admitted ID", replayOnlyAdmission),+               ("a first event that loses its admitted ID is rejected", headInformationLossRejected),+               ("identifier map keys reconstruct their exact owners", keyRoundTrip),+               ("public contract preserves UUIDv5", parseIdentitiesPayload (encodeIdentitiesPayload contractPayload) == Right contractPayload),+               ("queue payload preserves nested and direct IDs", parseIdentityWork (encodeIdentityWork queuePayload) == Right queuePayload),+               ("implicit wrong versions remain rejected", isRejected (parseLegacyId "legacy_00041061050r3gg28a1c60t3gf")),+               ("wrong prefixes remain rejected", isRejected (parseLegacyId "other_58kj0y515rbwebzaxwzzknjqnk"))+             ]+  forM_ assertions $ \(label, passed) -> putStrLn ((if passed then "PASS  " else "FAIL  ") <> label)+  unless (all snd assertions) exitFailure++keyRoundTrip :: Bool+keyRoundTrip =+  renderLegacyIdLeafKey Bindings.uuidV5 == Bindings.uuidV5Text+    && parseEither (const (parseLegacyIdLeafKey Bindings.uuidV5Text)) () == Right Bindings.uuidV5+    && Map.lookup Bindings.uuidV5 (Bindings.mixedEnvelope.labelsById) == Just "historical-v5"++isRejected :: Either problem value -> Bool+isRejected = either (const True) (const False)++serializedMultiEventReplay :: Bool+serializedMultiEventReplay =+  case replayRawIdentityChain [Bindings.uuidV5Text, Bindings.uuidV7Text] of+    Left _ -> False+    Right (vertex, current) -> vertex == IdentityLedgerOpen && current == Bindings.uuidV7++replayRawIdentityChain :: [Text] -> Either Text (IdentityLedgerVertex, LegacyId)+replayRawIdentityChain wires = do+  events <- concat <$> traverse rawTransition wires+  (vertex, registers) <- firstText (applyEventsEither identityLedgerTransducer (IdentityLedgerOpen, initialIdentityLedgerRegs) events)+  pure (vertex, registers ! #current)+  where+    rawTransition wire = do+      let recorded = IdentityRecorded (IdentityRecordedData Bindings.uuidV5 Bindings.mixedEnvelope)+          audited = IdentityAudited (IdentityAuditedData Bindings.uuidV5 Bindings.mixedEnvelope)+      recordedEvent <- parseIdentityLedgerEvent (EventType "IdentityRecorded") (replaceObjectField "legacyId" (String wire) (encodeIdentityLedgerEvent recorded))+      auditedEvent <- parseIdentityLedgerEvent (EventType "IdentityAudited") (replaceObjectField "legacyId" (String wire) (encodeIdentityLedgerEvent audited))+      pure [recordedEvent, auditedEvent]++replayOnlyAdmission :: Bool+replayOnlyAdmission =+  case parseIdentityLedgerEvent (EventType "LegacyIdentityImported") rawEvent of+    Left _ -> False+    Right parsedEvent ->+      case applyEventsEither identityLedgerTransducer (IdentityLedgerOpen, initialIdentityLedgerRegs) [parsedEvent] of+        Left _ -> False+        Right (vertex, registers) ->+          vertex == IdentityLedgerOpen && registers ! #current == Bindings.uuidV5+  where+    event = LegacyIdentityImported (LegacyIdentityImportedData Bindings.uuidV7 Bindings.mixedEnvelope)+    rawEvent = replaceObjectField "legacyId" (String Bindings.uuidV5Text) (encodeIdentityLedgerEvent event)++headInformationLossRejected :: Bool+headInformationLossRejected =+  isLeft (parseIdentityLedgerEvent kind (deleteObjectField "legacyId" encoded))+  where+    event = IdentityRecorded (IdentityRecordedData Bindings.uuidV5 Bindings.mixedEnvelope)+    kind = eventType identityLedgerCodec event+    encoded = encodeIdentityLedgerEvent event++firstText :: (Show problem) => Either problem value -> Either Text value+firstText = either (Left . T.pack . show) Right++deleteObjectField :: Key.Key -> Value -> Value+deleteObjectField key (Object value) = Object (KeyMap.delete key value)+deleteObjectField _ value = value++replaceObjectField :: Key.Key -> Value -> Value -> Value+replaceObjectField key inserted (Object value) = Object (KeyMap.insert key inserted value)+replaceObjectField _ _ value = value
+ test/conformance-id-admission-domains/keiro-dsl-cabal-fragment.context.id-admission-domains.txt view
@@ -0,0 +1,53 @@+-- keiro-dsl build manifest for keiro-dsl/test/fixtures/id-admission-domains.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.IdAdmissionDomains.Bindings+    Generated.IdAdmissionDomains.BehaviorSourceMap+    Generated.IdAdmissionDomains.Identities.Contract+    Generated.IdAdmissionDomains.IdentityLedger.BehaviorContract+    Generated.IdAdmissionDomains.IdentityLedger.Codec+    Generated.IdAdmissionDomains.IdentityLedger.Domain+    Generated.IdAdmissionDomains.IdentityLedger.EventStream+    Generated.IdAdmissionDomains.IdentityLedger.Harness+    Generated.IdAdmissionDomains.IdentityLedger.Projection+    Generated.IdAdmissionDomains.IdentityLedger.Transducer+    Generated.IdAdmissionDomains.IdentityWork.Queue+    Generated.IdAdmissionDomains.IdentityWork.QueueCodec+    Generated.IdAdmissionDomains.IdentityWork.QueuePolicy+    Generated.IdAdmissionDomains.Nominals+    Generated.IdAdmissionDomains.Nominals.Internal+    Generated.IdAdmissionDomains.ReplayAudit+    Generated.IdAdmissionDomains.Structural.NominalLeaves+    Generated.IdAdmissionDomains.Structural.Shape.IdentityEnvelope+    Generated.IdAdmissionDomains.StructuralConformance+    Generated.IdAdmissionDomains.StructuralProjections+    IdAdmissionDomains.IdentityLedger.BehaviorHoles++build-depends:+    , aeson+    , base+    , containers+    , keiki+    , keiro+    , keiro-core+    , keiro-dsl+    , keiro-pgmq+    , mmzk-typeid+    , text++consumer-packages:+    keiro-dsl++consumer-modules:+    Conformance.IdAdmissionDomains.Bindings+    Conformance.IdAdmissionDomains.Domain
+ test/conformance-id-admission-domains/keiro-dsl-ledger.context.id-admission-domains.txt view
@@ -0,0 +1,61 @@+keiro-dsl scaffold record v1+spec: keiro-dsl/test/fixtures/id-admission-domains.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 id-admission-domains structural conformance","path":"Generated/IdAdmissionDomains/StructuralConformance.hs"}+module-role {"family":"BehaviorSourceMap","kind":"generated","ownerKind":"context","ownerName":"context id-admission-domains behavior source map","path":"Generated/IdAdmissionDomains/BehaviorSourceMap.hs"}+module-role {"family":"IdentityEnvelope","kind":"generated","ownerKind":"mapped","ownerName":"mapped structural IdentityEnvelope (line 6)","path":"Generated/IdAdmissionDomains/Structural/Shape/IdentityEnvelope.hs"}+module-role {"family":"StructuralProjections","kind":"generated","ownerKind":"context","ownerName":"context id-admission-domains mapped structural facade","path":"Generated/IdAdmissionDomains/StructuralProjections.hs"}+module-role {"family":"Nominals","kind":"generated","ownerKind":"context","ownerName":"context id-admission-domains generated nominal declarations","path":"Generated/IdAdmissionDomains/Nominals.hs"}+module-role {"family":"Internal","kind":"generated","ownerKind":"context","ownerName":"context id-admission-domains generated nominal ID internals","path":"Generated/IdAdmissionDomains/Nominals/Internal.hs"}+module-role {"family":"NominalLeaves","kind":"generated","ownerKind":"context","ownerName":"context id-admission-domains structural nominal leaves","path":"Generated/IdAdmissionDomains/Structural/NominalLeaves.hs"}+module-role {"family":"Bindings","kind":"hole","ownerKind":"consumer","ownerName":"consumer binding skeleton Conformance.IdAdmissionDomains.Bindings","path":"Conformance/IdAdmissionDomains/Bindings.hs"}+module-role {"family":"ReplayAudit","kind":"generated","ownerKind":"context","ownerName":"context id-admission-domains replay-audit assembly","path":"Generated/IdAdmissionDomains/ReplayAudit.hs"}+module-role {"family":"Domain","kind":"generated","ownerKind":"aggregate","ownerName":"aggregate IdentityLedger (line 19)","path":"Generated/IdAdmissionDomains/IdentityLedger/Domain.hs"}+module-role {"family":"Codec","kind":"generated","ownerKind":"aggregate","ownerName":"aggregate IdentityLedger (line 19)","path":"Generated/IdAdmissionDomains/IdentityLedger/Codec.hs"}+module-role {"family":"Transducer","kind":"generated","ownerKind":"aggregate","ownerName":"aggregate IdentityLedger (line 19)","path":"Generated/IdAdmissionDomains/IdentityLedger/Transducer.hs"}+module-role {"family":"BehaviorContract","kind":"generated","ownerKind":"aggregate","ownerName":"aggregate IdentityLedger (line 19)","path":"Generated/IdAdmissionDomains/IdentityLedger/BehaviorContract.hs"}+module-role {"family":"BehaviorHoles","kind":"hole","ownerKind":"aggregate","ownerName":"aggregate behavior witnesses IdentityLedger (line 19)","path":"IdAdmissionDomains/IdentityLedger/BehaviorHoles.hs"}+module-role {"family":"EventStream","kind":"generated","ownerKind":"aggregate","ownerName":"aggregate IdentityLedger (line 19)","path":"Generated/IdAdmissionDomains/IdentityLedger/EventStream.hs"}+module-role {"family":"Projection","kind":"generated","ownerKind":"aggregate","ownerName":"aggregate IdentityLedger (line 19)","path":"Generated/IdAdmissionDomains/IdentityLedger/Projection.hs"}+module-role {"family":"Harness","kind":"generated","ownerKind":"aggregate","ownerName":"aggregate IdentityLedger (line 19)","path":"Generated/IdAdmissionDomains/IdentityLedger/Harness.hs"}+module-role {"family":"Queue","kind":"generated","ownerKind":"workqueue","ownerName":"workqueue identity_work (line 38)","path":"Generated/IdAdmissionDomains/IdentityWork/Queue.hs"}+module-role {"family":"QueuePolicy","kind":"generated","ownerKind":"workqueue","ownerName":"workqueue identity_work (line 38)","path":"Generated/IdAdmissionDomains/IdentityWork/QueuePolicy.hs"}+module-role {"family":"QueueCodec","kind":"generated","ownerKind":"workqueue","ownerName":"workqueue identity_work (line 38)","path":"Generated/IdAdmissionDomains/IdentityWork/QueueCodec.hs"}+module-role {"family":"Contract","kind":"generated","ownerKind":"contract","ownerName":"contract identities (line 56)","path":"Generated/IdAdmissionDomains/Identities/Contract.hs"}+generated Generated/IdAdmissionDomains/StructuralConformance.hs+generated Generated/IdAdmissionDomains/BehaviorSourceMap.hs+generated Generated/IdAdmissionDomains/Structural/Shape/IdentityEnvelope.hs+generated Generated/IdAdmissionDomains/StructuralProjections.hs+generated Generated/IdAdmissionDomains/Nominals.hs+generated Generated/IdAdmissionDomains/Nominals/Internal.hs+generated Generated/IdAdmissionDomains/Structural/NominalLeaves.hs+hole Conformance/IdAdmissionDomains/Bindings.hs+generated Generated/IdAdmissionDomains/ReplayAudit.hs+generated Generated/IdAdmissionDomains/IdentityLedger/Domain.hs+generated Generated/IdAdmissionDomains/IdentityLedger/Codec.hs+generated Generated/IdAdmissionDomains/IdentityLedger/Transducer.hs+generated Generated/IdAdmissionDomains/IdentityLedger/BehaviorContract.hs+hole IdAdmissionDomains/IdentityLedger/BehaviorHoles.hs+generated Generated/IdAdmissionDomains/IdentityLedger/EventStream.hs+generated Generated/IdAdmissionDomains/IdentityLedger/Projection.hs+generated Generated/IdAdmissionDomains/IdentityLedger/Harness.hs+generated Generated/IdAdmissionDomains/IdentityWork/Queue.hs+generated Generated/IdAdmissionDomains/IdentityWork/QueuePolicy.hs+generated Generated/IdAdmissionDomains/IdentityWork/QueueCodec.hs+generated Generated/IdAdmissionDomains/Identities/Contract.hs+mapping {"bindingSymbol":"Conformance.IdAdmissionDomains.Bindings.identityEnvelopeBinding","bindingVersion":"1","canonicalType":"conformance.id-admission-domains.IdentityEnvelope.v1","mode":"structural","module":"Conformance.IdAdmissionDomains.Domain","package":"keiro-dsl","schema":1,"specName":"IdentityEnvelope","type":"IdentityEnvelope"}+id-domain id-domain|name=LegacyId|contract=keiro-dsl/id-domain/typeid-v5-or-v7/1|prefix=legacy|separator=_|json=canonical-json-text+id-domain id-domain|name=contract:identities.IdentityLinked.legacyId|contract=keiro-dsl/id-domain/typeid-v5-or-v7/1|prefix=legacy|separator=_|json=canonical-json-text+nominal-equality nominal-equality|name=LegacyId|contract=keiro-dsl/nominal-equality/2|key=Text|domain=typeid-v5-or-v7-text:legacy:keiro-dsl/id-domain/typeid-v5-or-v7/1|owner=generated+binding {"kind":"binding","mappedName":"IdentityEnvelope","module":"Conformance.IdAdmissionDomains.Bindings","path":"labelsById","schema":1,"signature":"identityEnvelopeBinding.labelsById :: Map LegacyId (Text)","symbol":"identityEnvelopeBinding"}+binding {"kind":"binding","mappedName":"IdentityEnvelope","module":"Conformance.IdAdmissionDomains.Bindings","path":"legacyId","schema":1,"signature":"identityEnvelopeBinding.legacyId :: LegacyId","symbol":"identityEnvelopeBinding"}+binding {"kind":"binding","mappedName":"IdentityEnvelope","module":"Conformance.IdAdmissionDomains.Bindings","path":"previousId","schema":1,"signature":"identityEnvelopeBinding.previousId :: Maybe (LegacyId)","symbol":"identityEnvelopeBinding"}+binding {"kind":"fixtures","mappedName":"IdentityEnvelope","module":"Conformance.IdAdmissionDomains.Bindings","path":null,"schema":1,"signature":"identityEnvelopeFixtures :: FixtureCases Conformance.IdAdmissionDomains.Domain.IdentityEnvelope","symbol":"identityEnvelopeFixtures"}+behavior {"aggregate":"IdentityLedger","command":"ImportLegacyIdentity","evidence":"generated-authoritative","key":"behavior-v1-0bc43a8eaf58f2f2","kind":"replay-transition","outputs":[{"command":"ImportLegacyIdentity","ownership":"generated-command-identity"}],"source":"Open"}+behavior {"aggregate":"IdentityLedger","command":"RecordIdentity","evidence":"generated-authoritative","key":"behavior-v1-54975b0ac4e921b5","kind":"live-transition","outputs":[{"command":"RecordIdentity","ownership":"generated-command-identity"},{"command":"RecordIdentity","ownership":"generated-command-identity"}],"source":"Open"}+behavior {"aggregate":"IdentityLedger","command":"ImportLegacyIdentity","evidence":"generated-authoritative","key":"behavior-v1-5acf27af287654ab","kind":"required-rejection","outputs":[],"source":"Open"}+semantic-impact {"declarations":[{"consequences":[{"consumer":"IdentityLedger","kind":"consumer-build"},{"consumer":"workqueue:identity_work","kind":"consumer-build"},{"aggregate":"IdentityLedger","kind":"private-event-history"},{"kind":"workqueue-history","workqueue":"identity_work"}],"consumerEvidence":[{"consumer":"IdentityLedger","operation":null,"path":"IdentityLedger command ImportLegacyIdentity .envelope : IdentityEnvelope","surface":"aggregate-command"},{"consumer":"IdentityLedger","operation":null,"path":"IdentityLedger command RecordIdentity .envelope : IdentityEnvelope","surface":"aggregate-command"},{"consumer":"IdentityLedger","operation":null,"path":"IdentityLedger event IdentityAudited .envelope : IdentityEnvelope","surface":"private-event-payload"},{"consumer":"IdentityLedger","operation":null,"path":"IdentityLedger event IdentityRecorded .envelope : IdentityEnvelope","surface":"private-event-payload"},{"consumer":"IdentityLedger","operation":null,"path":"IdentityLedger event LegacyIdentityImported .envelope : IdentityEnvelope","surface":"private-event-payload"},{"consumer":"workqueue:identity_work","operation":null,"path":"workqueue identity_work payload .envelope : IdentityEnvelope","surface":"workqueue-payload"}],"consumers":["IdentityLedger","workqueue:identity_work"],"declaration":"IdentityEnvelope","identity":"structural\u001fkeiro-dsl:Conformance.IdAdmissionDomains.Domain:IdentityEnvelope\u001fConformance.IdAdmissionDomains.Bindings.identityEnvelopeBinding\u001f1\u001fconformance.id-admission-domains.IdentityEnvelope.v1\u001fConformance.IdAdmissionDomains.Bindings.identityEnvelopeFixtures\u001f\u001f7a6c7d5fd5f6efc4\u001frecord:IdentityEnvelope:labelsById=labelsById,legacyId=legacyId,previousId=previousId"}],"mappedSurfaceEvidenceVersion":1,"serviceInventory":["IdentityEnvelope"]}
test/conformance-id-domain-migration/Generated/IdDomainMigration/BehaviorSourceMap.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 3) from context id-domain-migration behavior source map; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 3) from context id-domain-migration behavior source map; do not edit. module Generated.IdDomainMigration.BehaviorSourceMap   ( BehaviorSourceLocation (..)   , behaviorSourceLocation
test/conformance-id-domain-migration/Generated/IdDomainMigration/Nominals.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 3) from context id-domain-migration generated nominal declarations; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 3) from context id-domain-migration generated nominal declarations; do not edit. module Generated.IdDomainMigration.Nominals   ( OrderId   , parseOrderId
test/conformance-id-domain-migration/Generated/IdDomainMigration/Nominals/Internal.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 3) from context id-domain-migration generated nominal ID internals; do not edit.+-- @generated by keiro-dsl 0.18.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
test/conformance-id-domain-migration/Generated/IdDomainMigration/OrderBook/BehaviorContract.hs view
@@ -1,5 +1,5 @@ {-# LANGUAGE OverloadedLabels #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 3) from aggregate OrderBook; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 3) from aggregate OrderBook; do not edit. module Generated.IdDomainMigration.OrderBook.BehaviorContract   ( BehaviorKey (..)   , unBehaviorKey
test/conformance-id-domain-migration/Generated/IdDomainMigration/OrderBook/Codec.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 3) from aggregate OrderBook; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 3) from aggregate OrderBook; do not edit. module Generated.IdDomainMigration.OrderBook.Codec (     orderBookCodec,     parseOrderBookEvent,
test/conformance-id-domain-migration/Generated/IdDomainMigration/OrderBook/Domain.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE TemplateHaskell #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 3) from aggregate OrderBook; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 3) from aggregate OrderBook; do not edit. module Generated.IdDomainMigration.OrderBook.Domain where  import Data.Aeson (FromJSON, ToJSON)
test/conformance-id-domain-migration/Generated/IdDomainMigration/OrderBook/EventStream.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 3) from aggregate OrderBook; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 3) from aggregate OrderBook; do not edit. module Generated.IdDomainMigration.OrderBook.EventStream   ( orderBookCategory   , orderBookCommandCategory
test/conformance-id-domain-migration/Generated/IdDomainMigration/OrderBook/Harness.hs view
@@ -1,5 +1,5 @@ {-# LANGUAGE OverloadedLabels #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 3) from aggregate OrderBook; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 3) from aggregate OrderBook; do not edit. module Generated.IdDomainMigration.OrderBook.Harness (harnessAssertions) where  import Generated.IdDomainMigration.OrderBook.Domain
test/conformance-id-domain-migration/Generated/IdDomainMigration/OrderBook/Projection.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 3) from aggregate OrderBook; do not edit.+-- @generated by keiro-dsl 0.18.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.
test/conformance-id-domain-migration/Generated/IdDomainMigration/OrderBook/Transducer.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE BlockArguments #-} {-# LANGUAGE QualifiedDo #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 3) from aggregate OrderBook; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 3) from aggregate OrderBook; do not edit. module Generated.IdDomainMigration.OrderBook.Transducer   ( orderBookTransducer   , orderBookFoldFingerprint@@ -10,7 +10,6 @@  import Generated.IdDomainMigration.OrderBook.Domain import Data.Text (Text)-import Generated.IdDomainMigration.Nominals (OrderId) import Keiki.Builder qualified as B import Keiki.Core (HsPred, SymTransducer) import Keiki.Core qualified as K
test/conformance-id-domain-migration/Generated/IdDomainMigration/ReplayAudit.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 3) from context id-domain-migration replay-audit assembly; do not edit.+-- @generated by keiro-dsl 0.18.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;
test/conformance-import-planning/Generated/ImportPlanningCollisions/BehaviorSourceMap.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from context import-planning-collisions behavior source map; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from context import-planning-collisions behavior source map; do not edit. module Generated.ImportPlanningCollisions.BehaviorSourceMap   ( BehaviorSourceLocation (..)   , behaviorSourceLocation
test/conformance-import-planning/Generated/ImportPlanningCollisions/CollisionLedger/BehaviorContract.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate CollisionLedger; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate CollisionLedger; do not edit. module Generated.ImportPlanningCollisions.CollisionLedger.BehaviorContract   ( BehaviorKey (..)   , unBehaviorKey
test/conformance-import-planning/Generated/ImportPlanningCollisions/CollisionLedger/Codec.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate CollisionLedger; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate CollisionLedger; do not edit. module Generated.ImportPlanningCollisions.CollisionLedger.Codec (     collisionLedgerCodec,     parseCollisionLedgerEvent,
test/conformance-import-planning/Generated/ImportPlanningCollisions/CollisionLedger/Domain.hs view
@@ -1,5 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate CollisionLedger; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate CollisionLedger; do not edit. module Generated.ImportPlanningCollisions.CollisionLedger.Domain where  import GHC.Generics (Generic)
test/conformance-import-planning/Generated/ImportPlanningCollisions/CollisionLedger/EventStream.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate CollisionLedger; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate CollisionLedger; do not edit. module Generated.ImportPlanningCollisions.CollisionLedger.EventStream   ( collisionLedgerCategory   , collisionLedgerCommandCategory
test/conformance-import-planning/Generated/ImportPlanningCollisions/CollisionLedger/Harness.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate CollisionLedger; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate CollisionLedger; do not edit. module Generated.ImportPlanningCollisions.CollisionLedger.Harness (harnessAssertions) where  import Generated.ImportPlanningCollisions.CollisionLedger.Domain
test/conformance-import-planning/Generated/ImportPlanningCollisions/CollisionLedger/Projection.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate CollisionLedger; do not edit.+-- @generated by keiro-dsl 0.18.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.
test/conformance-import-planning/Generated/ImportPlanningCollisions/CollisionLedger/Transducer.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE BlockArguments #-} {-# LANGUAGE QualifiedDo #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate CollisionLedger; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate CollisionLedger; do not edit. module Generated.ImportPlanningCollisions.CollisionLedger.Transducer   ( collisionLedgerTransducer   , collisionLedgerFoldFingerprint
test/conformance-import-planning/Generated/ImportPlanningCollisions/NominalProjections.hs view
@@ -1,5 +1,5 @@ {-# LANGUAGE TypeFamilies #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from context import-planning-collisions nominal scalar projection facade; do not edit.+-- @generated by keiro-dsl 0.18.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)
test/conformance-import-planning/Generated/ImportPlanningCollisions/ReplayAudit.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from context import-planning-collisions replay-audit assembly; do not edit.+-- @generated by keiro-dsl 0.18.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;
test/conformance-import-planning/Generated/ImportPlanningCollisions/Structural/Shape/Details.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from mapped structural Details; do not edit.+-- @generated by keiro-dsl 0.18.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)
test/conformance-import-planning/Generated/ImportPlanningCollisions/StructuralConformance.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from context import-planning-collisions structural conformance; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from context import-planning-collisions structural conformance; do not edit. module Generated.ImportPlanningCollisions.StructuralConformance   ( structuralConformanceAssertions   ) where
test/conformance-import-planning/Generated/ImportPlanningCollisions/StructuralProjections.hs view
@@ -1,5 +1,5 @@ {-# LANGUAGE TypeFamilies #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from context import-planning-collisions mapped structural facade; do not edit.+-- @generated by keiro-dsl 0.18.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.
test/conformance-intake-delegated/Generated/HospitalCapacity/Emergency/Contract.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from contract emergency; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from contract emergency; do not edit. module Generated.HospitalCapacity.Emergency.Contract   ( EmergencyPayload (..)   , IncidentTransferNeedDeclaredData (..)
test/conformance-intake-delegated/Generated/HospitalCapacity/IncidentInbox/Inbox.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from intake incidentInbox; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from intake incidentInbox; do not edit. module Generated.HospitalCapacity.IncidentInbox.Inbox   ( InboxFailure (..)   , IncidentInboxOutcome (..)
test/conformance-intake-full/Generated/HospitalCapacity/Emergency/Contract.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from contract emergency; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from contract emergency; do not edit. module Generated.HospitalCapacity.Emergency.Contract   ( EmergencyPayload (..)   , IncidentTransferNeedDeclaredData (..)
test/conformance-intake-full/Generated/HospitalCapacity/IncidentInbox/Inbox.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from intake incidentInbox; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from intake incidentInbox; do not edit. module Generated.HospitalCapacity.IncidentInbox.Inbox   ( InboxFailure (..)   , IncidentInboxOutcome (..)
test/conformance-intake-runtime/Generated/HospitalCapacity/Emergency/Contract.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from contract emergency; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from contract emergency; do not edit. module Generated.HospitalCapacity.Emergency.Contract   ( EmergencyPayload (..)   , IncidentTransferNeedDeclaredData (..)
test/conformance-intake-runtime/Generated/HospitalCapacity/IncidentInbox/Inbox.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from intake incidentInbox; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from intake incidentInbox; do not edit. module Generated.HospitalCapacity.IncidentInbox.Inbox   ( InboxFailure (..)   , IncidentInboxOutcome (..)
test/conformance-mapped-queue/Generated/MappedQueue/MappedJobs/Queue.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from workqueue mapped_jobs; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 5) from workqueue mapped_jobs; do not edit. module Generated.MappedQueue.MappedJobs.Queue   ( MappedJob (..)   , encodeMappedJob
test/conformance-mapped-queue/Generated/MappedQueue/MappedJobs/QueueCodec.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from workqueue mapped_jobs; do not edit.+-- @generated by keiro-dsl 0.18.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
test/conformance-mapped-queue/Generated/MappedQueue/MappedJobs/QueuePolicy.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from workqueue mapped_jobs; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 5) from workqueue mapped_jobs; do not edit. module Generated.MappedQueue.MappedJobs.QueuePolicy   ( MappedJobsOutcome (..)   , retryPolicy, jobOutcomeFor
test/conformance-mapped-queue/Generated/MappedQueue/Structural/Shape/JobMetadata.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from mapped structural JobMetadata; do not edit.+-- @generated by keiro-dsl 0.18.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)
test/conformance-mapped-queue/Generated/MappedQueue/Structural/Shape/JobPayload.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from mapped structural JobPayload; do not edit.+-- @generated by keiro-dsl 0.18.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)
test/conformance-mapped-queue/Generated/MappedQueue/StructuralConformance.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from context mapped-queue structural conformance; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 5) from context mapped-queue structural conformance; do not edit. module Generated.MappedQueue.StructuralConformance   ( structuralConformanceAssertions   ) where
test/conformance-mapped-queue/Generated/MappedQueue/StructuralProjections.hs view
@@ -1,5 +1,5 @@ {-# LANGUAGE TypeFamilies #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from context mapped-queue mapped structural facade; do not edit.+-- @generated by keiro-dsl 0.18.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.
test/conformance-mapped-readmodel/Generated/MappedReadmodel/AccountSummary/QueryContract.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from readmodel account_summary; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 5) from readmodel account_summary; do not edit. module Generated.MappedReadmodel.AccountSummary.QueryContract   ( AccountSummaryQueryInput   , AccountSummaryQueryResult
test/conformance-mapped-readmodel/Generated/MappedReadmodel/AccountSummary/ReadModel.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from readmodel account_summary; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 5) from readmodel account_summary; do not edit. module Generated.MappedReadmodel.AccountSummary.ReadModel   ( accountSummaryReadModel   , accountSummaryQualifiedTable
test/conformance-mapped-readmodel/Generated/MappedReadmodel/AccountSummary/ReadModelHarness.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from readmodel account_summary; do not edit.+-- @generated by keiro-dsl 0.18.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)
test/conformance-mapped-readmodel/Generated/MappedReadmodel/AccountSummary/ReadModelTable.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from readmodel account_summary; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 5) from readmodel account_summary; do not edit. module Generated.MappedReadmodel.AccountSummary.ReadModelTable (accountSummaryQualifiedTable) where  import Data.Text (Text)
test/conformance-mapped-readmodel/Generated/MappedReadmodel/ProjectionCatalog.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from projection-catalog mapped-readmodel; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 5) from projection-catalog mapped-readmodel; do not edit. {-# LANGUAGE OverloadedStrings #-} module Generated.MappedReadmodel.ProjectionCatalog   ( projectionCatalog
test/conformance-mapped-readmodel/Generated/MappedReadmodel/Structural/Shape/AccountLookup.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from mapped structural AccountLookup; do not edit.+-- @generated by keiro-dsl 0.18.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)
test/conformance-mapped-readmodel/Generated/MappedReadmodel/Structural/Shape/AccountProfile.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from mapped structural AccountProfile; do not edit.+-- @generated by keiro-dsl 0.18.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)
test/conformance-mapped-readmodel/Generated/MappedReadmodel/Structural/Shape/AccountSummary.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from mapped structural AccountSummary; do not edit.+-- @generated by keiro-dsl 0.18.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)
test/conformance-mapped-readmodel/Generated/MappedReadmodel/Structural/Shape/TenantKey.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from mapped structural TenantKey; do not edit.+-- @generated by keiro-dsl 0.18.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)
test/conformance-mapped-readmodel/Generated/MappedReadmodel/Structural/Shape/UnusedFilter.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from mapped structural UnusedFilter; do not edit.+-- @generated by keiro-dsl 0.18.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)
test/conformance-mapped-readmodel/Generated/MappedReadmodel/StructuralConformance.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from context mapped-readmodel structural conformance; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 5) from context mapped-readmodel structural conformance; do not edit. module Generated.MappedReadmodel.StructuralConformance   ( structuralConformanceAssertions   ) where
test/conformance-mapped-readmodel/Generated/MappedReadmodel/StructuralProjections.hs view
@@ -1,5 +1,5 @@ {-# LANGUAGE TypeFamilies #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 5) from context mapped-readmodel mapped structural facade; do not edit.+-- @generated by keiro-dsl 0.18.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.
test/conformance-newsurface/Generated/TransferRouting/BehaviorSourceMap.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from context transfer-routing behavior source map; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from context transfer-routing behavior source map; do not edit. module Generated.TransferRouting.BehaviorSourceMap   ( BehaviorSourceLocation (..)   , behaviorSourceLocation
test/conformance-newsurface/Generated/TransferRouting/Hospital/BehaviorContract.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit. module Generated.TransferRouting.Hospital.BehaviorContract   ( BehaviorKey (..)   , unBehaviorKey
test/conformance-newsurface/Generated/TransferRouting/Hospital/Codec.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit. module Generated.TransferRouting.Hospital.Codec (     hospitalCodec,     parseHospitalEvent,
test/conformance-newsurface/Generated/TransferRouting/Hospital/Domain.hs view
@@ -1,5 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit. module Generated.TransferRouting.Hospital.Domain where  import Data.Text (Text)
test/conformance-newsurface/Generated/TransferRouting/Hospital/EventStream.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit. module Generated.TransferRouting.Hospital.EventStream   ( hospitalCategory   , hospitalCommandCategory
test/conformance-newsurface/Generated/TransferRouting/Hospital/Harness.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit. module Generated.TransferRouting.Hospital.Harness (harnessAssertions) where  import Generated.TransferRouting.Hospital.Domain
test/conformance-newsurface/Generated/TransferRouting/Hospital/Projection.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.+-- @generated by keiro-dsl 0.18.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.
test/conformance-newsurface/Generated/TransferRouting/Hospital/Transducer.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE BlockArguments #-} {-# LANGUAGE QualifiedDo #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit. module Generated.TransferRouting.Hospital.Transducer   ( hospitalTransducer   , hospitalFoldFingerprint
test/conformance-newsurface/Generated/TransferRouting/HospitalLoad/ReadModel.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from readmodel hospital_load; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from readmodel hospital_load; do not edit. module Generated.TransferRouting.HospitalLoad.ReadModel   ( hospitalLoadReadModel   , hospitalLoadQualifiedTable
test/conformance-newsurface/Generated/TransferRouting/HospitalLoad/ReadModelHarness.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from readmodel hospital_load; do not edit.+-- @generated by keiro-dsl 0.18.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)
test/conformance-newsurface/Generated/TransferRouting/HospitalLoad/ReadModelTable.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from readmodel hospital_load; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from readmodel hospital_load; do not edit. module Generated.TransferRouting.HospitalLoad.ReadModelTable (hospitalLoadQualifiedTable) where  import Data.Text (Text)
test/conformance-newsurface/Generated/TransferRouting/HospitalTransferRouter/Router.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from router HospitalTransferRouter; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from router HospitalTransferRouter; do not edit. module Generated.TransferRouting.HospitalTransferRouter.Router   ( hospitalTransferRouterName   , hospitalTransferRouterWorkerOptions
test/conformance-newsurface/Generated/TransferRouting/HospitalTransferRouter/RouterHarness.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from router HospitalTransferRouter; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from router HospitalTransferRouter; do not edit. module Generated.TransferRouting.HospitalTransferRouter.RouterHarness (routerHarnessValues) where  routerHarnessValues :: [(String, String)]
test/conformance-newsurface/Generated/TransferRouting/ReplayAudit.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from context transfer-routing replay-audit assembly; do not edit.+-- @generated by keiro-dsl 0.18.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;
test/conformance-nominal-query-only/Generated/MappedNominalQueryOnly/Nominals.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from context mapped-nominal-query-only generated nominal declarations; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from context mapped-nominal-query-only generated nominal declarations; do not edit. module Generated.MappedNominalQueryOnly.Nominals   ( TemplateId   , parseTemplateId
test/conformance-nominal-query-only/Generated/MappedNominalQueryOnly/Nominals/Internal.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from context mapped-nominal-query-only generated nominal ID internals; do not edit.+-- @generated by keiro-dsl 0.18.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
test/conformance-nominal-query-only/Generated/MappedNominalQueryOnly/ProjectionCatalog.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from projection-catalog mapped-nominal-query-only; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from projection-catalog mapped-nominal-query-only; do not edit. {-# LANGUAGE OverloadedStrings #-} module Generated.MappedNominalQueryOnly.ProjectionCatalog   ( projectionCatalog
test/conformance-nominal-query-only/Generated/MappedNominalQueryOnly/StructuralConformance.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from context mapped-nominal-query-only structural conformance; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from context mapped-nominal-query-only structural conformance; do not edit. module Generated.MappedNominalQueryOnly.StructuralConformance   ( structuralConformanceAssertions   ) where
test/conformance-nominal-query-only/Generated/MappedNominalQueryOnly/TemplateLookup/QueryContract.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from readmodel template_lookup; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from readmodel template_lookup; do not edit. module Generated.MappedNominalQueryOnly.TemplateLookup.QueryContract   ( TemplateLookupQueryInput   , TemplateLookupQueryResult
test/conformance-nominal-query-only/Generated/MappedNominalQueryOnly/TemplateLookup/ReadModel.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from readmodel template_lookup; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from readmodel template_lookup; do not edit. module Generated.MappedNominalQueryOnly.TemplateLookup.ReadModel   ( templateLookupReadModel   , templateLookupQualifiedTable
test/conformance-nominal-query-only/Generated/MappedNominalQueryOnly/TemplateLookup/ReadModelHarness.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from readmodel template_lookup; do not edit.+-- @generated by keiro-dsl 0.18.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)
test/conformance-nominal-query-only/Generated/MappedNominalQueryOnly/TemplateLookup/ReadModelTable.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from readmodel template_lookup; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from readmodel template_lookup; do not edit. module Generated.MappedNominalQueryOnly.TemplateLookup.ReadModelTable (templateLookupQualifiedTable) where  import Data.Text (Text)
test/conformance-nominal-queue-only/Generated/MappedNominalQueueOnly/Nominals.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from context mapped-nominal-queue-only generated nominal declarations; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from context mapped-nominal-queue-only generated nominal declarations; do not edit. module Generated.MappedNominalQueueOnly.Nominals   ( TemplateId   , parseTemplateId
test/conformance-nominal-queue-only/Generated/MappedNominalQueueOnly/Nominals/Internal.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from context mapped-nominal-queue-only generated nominal ID internals; do not edit.+-- @generated by keiro-dsl 0.18.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
test/conformance-nominal-queue-only/Generated/MappedNominalQueueOnly/Structural/NominalLeaves.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from context mapped-nominal-queue-only structural nominal leaves; do not edit.+-- @generated by keiro-dsl 0.18.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)
test/conformance-nominal-queue-only/Generated/MappedNominalQueueOnly/StructuralConformance.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from context mapped-nominal-queue-only structural conformance; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from context mapped-nominal-queue-only structural conformance; do not edit. module Generated.MappedNominalQueueOnly.StructuralConformance   ( structuralConformanceAssertions   ) where
test/conformance-nominal-queue-only/Generated/MappedNominalQueueOnly/TemplateWork/Queue.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from workqueue template_work; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from workqueue template_work; do not edit. module Generated.MappedNominalQueueOnly.TemplateWork.Queue   ( TemplateWork (..)   , encodeTemplateWork
test/conformance-nominal-queue-only/Generated/MappedNominalQueueOnly/TemplateWork/QueueCodec.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from workqueue template_work; do not edit.+-- @generated by keiro-dsl 0.18.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
test/conformance-nominal-queue-only/Generated/MappedNominalQueueOnly/TemplateWork/QueuePolicy.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from workqueue template_work; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from workqueue template_work; do not edit. module Generated.MappedNominalQueueOnly.TemplateWork.QueuePolicy   ( TemplateWorkOutcome (..)   , retryPolicy, jobOutcomeFor
test/conformance-nominal-scalars/Generated/NominalScalars/BehaviorSourceMap.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from context nominal-scalars behavior source map; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from context nominal-scalars behavior source map; do not edit. module Generated.NominalScalars.BehaviorSourceMap   ( BehaviorSourceLocation (..)   , behaviorSourceLocation
test/conformance-nominal-scalars/Generated/NominalScalars/Nominal/Shape/OrderStatus.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from bound nominal enum representation OrderStatus; do not edit.+-- @generated by keiro-dsl 0.18.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)
test/conformance-nominal-scalars/Generated/NominalScalars/NominalLedger/BehaviorContract.hs view
@@ -1,5 +1,5 @@ {-# LANGUAGE OverloadedLabels #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate NominalLedger; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate NominalLedger; do not edit. module Generated.NominalScalars.NominalLedger.BehaviorContract   ( BehaviorKey (..)   , unBehaviorKey
test/conformance-nominal-scalars/Generated/NominalScalars/NominalLedger/Codec.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate NominalLedger; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate NominalLedger; do not edit. module Generated.NominalScalars.NominalLedger.Codec (     nominalLedgerCodec,     parseNominalLedgerEvent,
test/conformance-nominal-scalars/Generated/NominalScalars/NominalLedger/Domain.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE TemplateHaskell #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate NominalLedger; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate NominalLedger; do not edit. module Generated.NominalScalars.NominalLedger.Domain where  import Data.Aeson (FromJSON, ToJSON)
test/conformance-nominal-scalars/Generated/NominalScalars/NominalLedger/EventStream.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate NominalLedger; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate NominalLedger; do not edit. module Generated.NominalScalars.NominalLedger.EventStream   ( nominalLedgerCategory   , nominalLedgerCommandCategory
test/conformance-nominal-scalars/Generated/NominalScalars/NominalLedger/Harness.hs view
@@ -1,5 +1,5 @@ {-# LANGUAGE OverloadedLabels #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate NominalLedger; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate NominalLedger; do not edit. module Generated.NominalScalars.NominalLedger.Harness (harnessAssertions) where  import Generated.NominalScalars.NominalLedger.Domain
test/conformance-nominal-scalars/Generated/NominalScalars/NominalLedger/Projection.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate NominalLedger; do not edit.+-- @generated by keiro-dsl 0.18.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.
test/conformance-nominal-scalars/Generated/NominalScalars/NominalLedger/Transducer.hs view
@@ -1,7 +1,7 @@ {-# LANGUAGE BlockArguments #-} {-# LANGUAGE OverloadedLabels #-} {-# LANGUAGE QualifiedDo #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate NominalLedger; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate NominalLedger; do not edit. module Generated.NominalScalars.NominalLedger.Transducer   ( nominalLedgerTransducer   , nominalLedgerFoldFingerprint
test/conformance-nominal-scalars/Generated/NominalScalars/NominalProjections.hs view
@@ -1,5 +1,5 @@ {-# LANGUAGE TypeFamilies #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from context nominal-scalars nominal scalar projection facade; do not edit.+-- @generated by keiro-dsl 0.18.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
test/conformance-nominal-scalars/Generated/NominalScalars/ReplayAudit.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from context nominal-scalars replay-audit assembly; do not edit.+-- @generated by keiro-dsl 0.18.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;
test/conformance-process-full/Generated/SurgeDemo/BehaviorSourceMap.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from context surge-demo behavior source map; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from context surge-demo behavior source map; do not edit. module Generated.SurgeDemo.BehaviorSourceMap   ( BehaviorSourceLocation (..)   , behaviorSourceLocation
test/conformance-process-full/Generated/SurgeDemo/Hospital/BehaviorContract.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit. module Generated.SurgeDemo.Hospital.BehaviorContract   ( BehaviorKey (..)   , unBehaviorKey
test/conformance-process-full/Generated/SurgeDemo/Hospital/Codec.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit. module Generated.SurgeDemo.Hospital.Codec (     hospitalCodec,     parseHospitalEvent,
test/conformance-process-full/Generated/SurgeDemo/Hospital/Domain.hs view
@@ -1,5 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit. module Generated.SurgeDemo.Hospital.Domain where  import GHC.Generics (Generic)
test/conformance-process-full/Generated/SurgeDemo/Hospital/EventStream.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit. module Generated.SurgeDemo.Hospital.EventStream   ( hospitalCategory   , hospitalCommandCategory
test/conformance-process-full/Generated/SurgeDemo/Hospital/Harness.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit. module Generated.SurgeDemo.Hospital.Harness (harnessAssertions) where  import Generated.SurgeDemo.Hospital.Domain
test/conformance-process-full/Generated/SurgeDemo/Hospital/Projection.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit. module Generated.SurgeDemo.Hospital.Projection   ( hospitalProjection   , hospitalStatusFor
test/conformance-process-full/Generated/SurgeDemo/Hospital/Transducer.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE BlockArguments #-} {-# LANGUAGE QualifiedDo #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate Hospital; do not edit. module Generated.SurgeDemo.Hospital.Transducer   ( hospitalTransducer   , hospitalFoldFingerprint
test/conformance-process-full/Generated/SurgeDemo/Nominals.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from context surge-demo generated nominal declarations; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from context surge-demo generated nominal declarations; do not edit. module Generated.SurgeDemo.Nominals   ( HospitalId   , parseHospitalId
test/conformance-process-full/Generated/SurgeDemo/Nominals/Internal.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from context surge-demo generated nominal ID internals; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from context surge-demo generated nominal ID internals; do not edit. module Generated.SurgeDemo.Nominals.Internal   ( HospitalId   , parseHospitalId
test/conformance-process-full/Generated/SurgeDemo/ReplayAudit.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from context surge-demo replay-audit assembly; do not edit.+-- @generated by keiro-dsl 0.18.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;
test/conformance-process-full/Generated/SurgeDemo/Surge/BehaviorContract.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit. module Generated.SurgeDemo.Surge.BehaviorContract   ( BehaviorKey (..)   , unBehaviorKey
test/conformance-process-full/Generated/SurgeDemo/Surge/Codec.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit. module Generated.SurgeDemo.Surge.Codec (     surgeCodec,     parseSurgeEvent,
test/conformance-process-full/Generated/SurgeDemo/Surge/Domain.hs view
@@ -1,5 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit. module Generated.SurgeDemo.Surge.Domain where  import GHC.Generics (Generic)
test/conformance-process-full/Generated/SurgeDemo/Surge/EventStream.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit. module Generated.SurgeDemo.Surge.EventStream   ( surgeCategory   , surgeCommandCategory
test/conformance-process-full/Generated/SurgeDemo/Surge/Harness.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit. module Generated.SurgeDemo.Surge.Harness (harnessAssertions) where  import Generated.SurgeDemo.Surge.Domain
test/conformance-process-full/Generated/SurgeDemo/Surge/Projection.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit. module Generated.SurgeDemo.Surge.Projection   ( surgeProjection   , surgeStatusFor
test/conformance-process-full/Generated/SurgeDemo/Surge/Transducer.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE BlockArguments #-} {-# LANGUAGE QualifiedDo #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from aggregate Surge; do not edit. module Generated.SurgeDemo.Surge.Transducer   ( surgeTransducer   , surgeFoldFingerprint
test/conformance-process-full/Generated/SurgeDemo/SurgeFlow/Process.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from process SurgeFlow; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 4) from process SurgeFlow; do not edit. module Generated.SurgeDemo.SurgeFlow.Process   ( surgeFlowProcessName   , surgeFlowCategory
test/conformance-process-full/Generated/SurgeDemo/SurgeFlow/ProcessHarness.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 4) from process SurgeFlow; do not edit.+-- @generated by keiro-dsl 0.18.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,
test/conformance-process-reactions/Generated/ProcessReactions/AuditOnly/Input.hs view
@@ -1,5 +1,5 @@ {-# LANGUAGE DeriveAnyClass #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from process input AuditOnly; do not edit.+-- @generated by keiro-dsl 0.18.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)
test/conformance-process-reactions/Generated/ProcessReactions/AuditOnly/Process.hs view
@@ -1,5 +1,5 @@ {-# OPTIONS_GHC -Wno-missing-signatures #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from process reaction AuditOnly; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from process reaction AuditOnly; do not edit. module Generated.ProcessReactions.AuditOnly.Process   ( AuditOnlyInput (..)   , auditOnlyProcessName
test/conformance-process-reactions/Generated/ProcessReactions/AuditOnly/ProcessHarness.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from process AuditOnly; do not edit.+-- @generated by keiro-dsl 0.18.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,
test/conformance-process-reactions/Generated/ProcessReactions/BehaviorSourceMap.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from context process-reactions behavior source map; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from context process-reactions behavior source map; do not edit. module Generated.ProcessReactions.BehaviorSourceMap   ( BehaviorSourceLocation (..)   , behaviorSourceLocation
test/conformance-process-reactions/Generated/ProcessReactions/Incident/BehaviorContract.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit. module Generated.ProcessReactions.Incident.BehaviorContract   ( BehaviorKey (..)   , unBehaviorKey
test/conformance-process-reactions/Generated/ProcessReactions/Incident/Codec.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit. module Generated.ProcessReactions.Incident.Codec (     incidentCodec,     parseIncidentEvent,
test/conformance-process-reactions/Generated/ProcessReactions/Incident/Domain.hs view
@@ -1,5 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit. module Generated.ProcessReactions.Incident.Domain where  import GHC.Generics (Generic)
test/conformance-process-reactions/Generated/ProcessReactions/Incident/EventStream.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit. module Generated.ProcessReactions.Incident.EventStream   ( incidentCategory   , incidentCommandCategory
test/conformance-process-reactions/Generated/ProcessReactions/Incident/Harness.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit. module Generated.ProcessReactions.Incident.Harness (harnessAssertions) where  import Generated.ProcessReactions.Incident.Domain
test/conformance-process-reactions/Generated/ProcessReactions/Incident/Projection.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.+-- @generated by keiro-dsl 0.18.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.
test/conformance-process-reactions/Generated/ProcessReactions/Incident/Transducer.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE BlockArguments #-} {-# LANGUAGE QualifiedDo #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from aggregate Incident; do not edit. module Generated.ProcessReactions.Incident.Transducer   ( incidentTransducer   , incidentFoldFingerprint
test/conformance-process-reactions/Generated/ProcessReactions/IncidentReaction/Input.hs view
@@ -1,5 +1,5 @@ {-# LANGUAGE DeriveAnyClass #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from process input IncidentReaction; do not edit.+-- @generated by keiro-dsl 0.18.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)
test/conformance-process-reactions/Generated/ProcessReactions/IncidentReaction/Process.hs view
@@ -1,5 +1,5 @@ {-# OPTIONS_GHC -Wno-missing-signatures #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from process reaction IncidentReaction; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from process reaction IncidentReaction; do not edit. module Generated.ProcessReactions.IncidentReaction.Process   ( IncidentReactionInput (..)   , incidentReactionProcessName
test/conformance-process-reactions/Generated/ProcessReactions/IncidentReaction/ProcessHarness.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from process IncidentReaction; do not edit.+-- @generated by keiro-dsl 0.18.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,
test/conformance-process-reactions/Generated/ProcessReactions/IncidentSaga/BehaviorContract.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from aggregate IncidentSaga; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from aggregate IncidentSaga; do not edit. module Generated.ProcessReactions.IncidentSaga.BehaviorContract   ( BehaviorKey (..)   , unBehaviorKey
test/conformance-process-reactions/Generated/ProcessReactions/IncidentSaga/Codec.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from aggregate IncidentSaga; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from aggregate IncidentSaga; do not edit. module Generated.ProcessReactions.IncidentSaga.Codec (     incidentSagaCodec,     parseIncidentSagaEvent,
test/conformance-process-reactions/Generated/ProcessReactions/IncidentSaga/Domain.hs view
@@ -1,5 +1,5 @@ {-# LANGUAGE TemplateHaskell #-}--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from aggregate IncidentSaga; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from aggregate IncidentSaga; do not edit. module Generated.ProcessReactions.IncidentSaga.Domain where  import GHC.Generics (Generic)
test/conformance-process-reactions/Generated/ProcessReactions/IncidentSaga/EventStream.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from aggregate IncidentSaga; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from aggregate IncidentSaga; do not edit. module Generated.ProcessReactions.IncidentSaga.EventStream   ( incidentSagaCategory   , incidentSagaCommandCategory
test/conformance-process-reactions/Generated/ProcessReactions/IncidentSaga/Harness.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from aggregate IncidentSaga; do not edit.+-- @generated by keiro-dsl 0.18.0.0 (language keiro-dsl 6) from aggregate IncidentSaga; do not edit. module Generated.ProcessReactions.IncidentSaga.Harness (harnessAssertions) where  import Generated.ProcessReactions.IncidentSaga.Domain
test/conformance-process-reactions/Generated/ProcessReactions/IncidentSaga/Projection.hs view
@@ -1,4 +1,4 @@--- @generated by keiro-dsl 0.17.0.0 (language keiro-dsl 6) from aggregate IncidentSaga; do not edit.+-- @generated by keiro-dsl 0.18.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.
test/conformance-process-reactions/Generated/ProcessReactions/IncidentSaga/Transducer.hs view

file too large to diff

test/conformance-process-reactions/Generated/ProcessReactions/Nominals.hs view

file too large to diff

test/conformance-process-reactions/Generated/ProcessReactions/Nominals/Internal.hs view

file too large to diff

test/conformance-process-reactions/Generated/ProcessReactions/ReplayAudit.hs view

file too large to diff

test/conformance-process-reactions/Generated/ProcessReactions/ScalingReaction/Input.hs view

file too large to diff

test/conformance-process-reactions/Generated/ProcessReactions/ScalingReaction/Process.hs view

file too large to diff

test/conformance-process-reactions/Generated/ProcessReactions/ScalingReaction/ProcessHarness.hs view

file too large to diff

test/conformance-process-runtime/Generated/HospitalCapacity/BehaviorSourceMap.hs view

file too large to diff

test/conformance-process-runtime/Generated/HospitalCapacity/Hospital/BehaviorContract.hs view

file too large to diff

test/conformance-process-runtime/Generated/HospitalCapacity/Hospital/Codec.hs view

file too large to diff

test/conformance-process-runtime/Generated/HospitalCapacity/Hospital/Domain.hs view

file too large to diff

test/conformance-process-runtime/Generated/HospitalCapacity/Hospital/EventStream.hs view

file too large to diff

test/conformance-process-runtime/Generated/HospitalCapacity/Hospital/Harness.hs view

file too large to diff

test/conformance-process-runtime/Generated/HospitalCapacity/Hospital/Projection.hs view

file too large to diff

test/conformance-process-runtime/Generated/HospitalCapacity/Hospital/Transducer.hs view

file too large to diff

test/conformance-process-runtime/Generated/HospitalCapacity/HospitalSurge/Process.hs view

file too large to diff

test/conformance-process-runtime/Generated/HospitalCapacity/HospitalSurge/ProcessHarness.hs view

file too large to diff

test/conformance-process-runtime/Generated/HospitalCapacity/Nominals.hs view

file too large to diff

test/conformance-process-runtime/Generated/HospitalCapacity/Nominals/Internal.hs view

file too large to diff

test/conformance-process-runtime/Generated/HospitalCapacity/ReplayAudit.hs view

file too large to diff

test/conformance-process-runtime/Generated/HospitalCapacity/Surge/BehaviorContract.hs view

file too large to diff

test/conformance-process-runtime/Generated/HospitalCapacity/Surge/Codec.hs view

file too large to diff

test/conformance-process-runtime/Generated/HospitalCapacity/Surge/Domain.hs view

file too large to diff

test/conformance-process-runtime/Generated/HospitalCapacity/Surge/EventStream.hs view

file too large to diff

test/conformance-process-runtime/Generated/HospitalCapacity/Surge/Harness.hs view

file too large to diff

test/conformance-process-runtime/Generated/HospitalCapacity/Surge/Projection.hs view

file too large to diff

test/conformance-process-runtime/Generated/HospitalCapacity/Surge/Transducer.hs view

file too large to diff

test/conformance-process-state-authority/Generated/IncidentResponse/BehaviorSourceMap.hs view

file too large to diff

test/conformance-process-state-authority/Generated/IncidentResponse/Escalation/BehaviorContract.hs view

file too large to diff

test/conformance-process-state-authority/Generated/IncidentResponse/Escalation/Codec.hs view

file too large to diff

test/conformance-process-state-authority/Generated/IncidentResponse/Escalation/Domain.hs view

file too large to diff

test/conformance-process-state-authority/Generated/IncidentResponse/Escalation/EventStream.hs view

file too large to diff

test/conformance-process-state-authority/Generated/IncidentResponse/Escalation/Harness.hs view

file too large to diff

test/conformance-process-state-authority/Generated/IncidentResponse/Escalation/Projection.hs view

file too large to diff

test/conformance-process-state-authority/Generated/IncidentResponse/Escalation/Transducer.hs view

file too large to diff

test/conformance-process-state-authority/Generated/IncidentResponse/Incident/BehaviorContract.hs view

file too large to diff

test/conformance-process-state-authority/Generated/IncidentResponse/Incident/Codec.hs view

file too large to diff

test/conformance-process-state-authority/Generated/IncidentResponse/Incident/Domain.hs view

file too large to diff

test/conformance-process-state-authority/Generated/IncidentResponse/Incident/EventStream.hs view

file too large to diff

test/conformance-process-state-authority/Generated/IncidentResponse/Incident/Harness.hs view

file too large to diff

test/conformance-process-state-authority/Generated/IncidentResponse/Incident/Projection.hs view

file too large to diff

test/conformance-process-state-authority/Generated/IncidentResponse/Incident/Transducer.hs view

file too large to diff

test/conformance-process-state-authority/Generated/IncidentResponse/IncidentEscalation/Input.hs view

file too large to diff

test/conformance-process-state-authority/Generated/IncidentResponse/IncidentEscalation/Process.hs view

file too large to diff

test/conformance-process-state-authority/Generated/IncidentResponse/IncidentEscalation/ProcessHarness.hs view

file too large to diff

test/conformance-process-state-authority/Generated/IncidentResponse/Nominals.hs view

file too large to diff

test/conformance-process-state-authority/Generated/IncidentResponse/Nominals/Internal.hs view

file too large to diff

test/conformance-process-state-authority/Generated/IncidentResponse/ReplayAudit.hs view

file too large to diff

test/conformance-process-timers/Generated/ProcessTimers/BehaviorSourceMap.hs view

file too large to diff

test/conformance-process-timers/Generated/ProcessTimers/Incident/BehaviorContract.hs view

file too large to diff

test/conformance-process-timers/Generated/ProcessTimers/Incident/Codec.hs view

file too large to diff

test/conformance-process-timers/Generated/ProcessTimers/Incident/Domain.hs view

file too large to diff

test/conformance-process-timers/Generated/ProcessTimers/Incident/EventStream.hs view

file too large to diff

test/conformance-process-timers/Generated/ProcessTimers/Incident/Harness.hs view

file too large to diff

test/conformance-process-timers/Generated/ProcessTimers/Incident/Projection.hs view

file too large to diff

test/conformance-process-timers/Generated/ProcessTimers/Incident/Transducer.hs view

file too large to diff

test/conformance-process-timers/Generated/ProcessTimers/IncidentSaga/BehaviorContract.hs view

file too large to diff

test/conformance-process-timers/Generated/ProcessTimers/IncidentSaga/Codec.hs view

file too large to diff

test/conformance-process-timers/Generated/ProcessTimers/IncidentSaga/Domain.hs view

file too large to diff

test/conformance-process-timers/Generated/ProcessTimers/IncidentSaga/EventStream.hs view

file too large to diff

test/conformance-process-timers/Generated/ProcessTimers/IncidentSaga/Harness.hs view

file too large to diff

test/conformance-process-timers/Generated/ProcessTimers/IncidentSaga/Projection.hs view

file too large to diff

test/conformance-process-timers/Generated/ProcessTimers/IncidentSaga/Transducer.hs view

file too large to diff

test/conformance-process-timers/Generated/ProcessTimers/IncidentTimers/Input.hs view

file too large to diff

test/conformance-process-timers/Generated/ProcessTimers/IncidentTimers/Process.hs view

file too large to diff

test/conformance-process-timers/Generated/ProcessTimers/IncidentTimers/ProcessHarness.hs view

file too large to diff

test/conformance-process-timers/Generated/ProcessTimers/Nominals.hs view

file too large to diff

test/conformance-process-timers/Generated/ProcessTimers/Nominals/Internal.hs view

file too large to diff

test/conformance-process-timers/Generated/ProcessTimers/ReplayAudit.hs view

file too large to diff

test/conformance-process/Generated/HospitalCapacity/BehaviorSourceMap.hs view

file too large to diff

test/conformance-process/Generated/HospitalCapacity/Hospital/BehaviorContract.hs view

file too large to diff

test/conformance-process/Generated/HospitalCapacity/Hospital/Codec.hs view

file too large to diff

test/conformance-process/Generated/HospitalCapacity/Hospital/Domain.hs view

file too large to diff

test/conformance-process/Generated/HospitalCapacity/Hospital/EventStream.hs view

file too large to diff

test/conformance-process/Generated/HospitalCapacity/Hospital/Harness.hs view

file too large to diff

test/conformance-process/Generated/HospitalCapacity/Hospital/Projection.hs view

file too large to diff

test/conformance-process/Generated/HospitalCapacity/Hospital/Transducer.hs view

file too large to diff

test/conformance-process/Generated/HospitalCapacity/HospitalSurge/Process.hs view

file too large to diff

test/conformance-process/Generated/HospitalCapacity/HospitalSurge/ProcessHarness.hs view

file too large to diff

test/conformance-process/Generated/HospitalCapacity/Nominals.hs view

file too large to diff

test/conformance-process/Generated/HospitalCapacity/Nominals/Internal.hs view

file too large to diff

test/conformance-process/Generated/HospitalCapacity/ReplayAudit.hs view

file too large to diff

test/conformance-process/Generated/HospitalCapacity/Surge/BehaviorContract.hs view

file too large to diff

test/conformance-process/Generated/HospitalCapacity/Surge/Codec.hs view

file too large to diff

test/conformance-process/Generated/HospitalCapacity/Surge/Domain.hs view

file too large to diff

test/conformance-process/Generated/HospitalCapacity/Surge/EventStream.hs view

file too large to diff

test/conformance-process/Generated/HospitalCapacity/Surge/Harness.hs view

file too large to diff

test/conformance-process/Generated/HospitalCapacity/Surge/Projection.hs view

file too large to diff

test/conformance-process/Generated/HospitalCapacity/Surge/Transducer.hs view

file too large to diff

test/conformance-projection-catalog/Generated/CatalogDemo/BehaviorSourceMap.hs view

file too large to diff

test/conformance-projection-catalog/Generated/CatalogDemo/CatalogAudit/ReadModel.hs view

file too large to diff

test/conformance-projection-catalog/Generated/CatalogDemo/CatalogAudit/ReadModelHarness.hs view

file too large to diff

test/conformance-projection-catalog/Generated/CatalogDemo/CatalogAudit/ReadModelTable.hs view

file too large to diff

test/conformance-projection-catalog/Generated/CatalogDemo/OrderInline/QueryContract.hs view

file too large to diff

test/conformance-projection-catalog/Generated/CatalogDemo/OrderInline/ReadModel.hs view

file too large to diff

test/conformance-projection-catalog/Generated/CatalogDemo/OrderInline/ReadModelHarness.hs view

file too large to diff

test/conformance-projection-catalog/Generated/CatalogDemo/OrderInline/ReadModelTable.hs view

file too large to diff

test/conformance-projection-catalog/Generated/CatalogDemo/OrderTotalsLookup/ReadModel.hs view

file too large to diff

test/conformance-projection-catalog/Generated/CatalogDemo/OrderTotalsLookup/ReadModelHarness.hs view

file too large to diff

test/conformance-projection-catalog/Generated/CatalogDemo/OrderTotalsLookup/ReadModelTable.hs view

file too large to diff

test/conformance-projection-catalog/Generated/CatalogDemo/Orders/BehaviorContract.hs view

file too large to diff

test/conformance-projection-catalog/Generated/CatalogDemo/Orders/Codec.hs view

file too large to diff

test/conformance-projection-catalog/Generated/CatalogDemo/Orders/Domain.hs view

file too large to diff

test/conformance-projection-catalog/Generated/CatalogDemo/Orders/EventStream.hs view

file too large to diff

test/conformance-projection-catalog/Generated/CatalogDemo/Orders/Harness.hs view

file too large to diff

test/conformance-projection-catalog/Generated/CatalogDemo/Orders/Projection.hs view

file too large to diff

test/conformance-projection-catalog/Generated/CatalogDemo/Orders/Transducer.hs view

file too large to diff

test/conformance-projection-catalog/Generated/CatalogDemo/ProjectionCatalog.hs view

file too large to diff

test/conformance-projection-catalog/Generated/CatalogDemo/QualificationJobs/Queue.hs view

file too large to diff

test/conformance-projection-catalog/Generated/CatalogDemo/QualificationJobs/QueueCodec.hs view

file too large to diff

test/conformance-projection-catalog/Generated/CatalogDemo/QualificationJobs/QueuePolicy.hs view

file too large to diff

test/conformance-projection-catalog/Generated/CatalogDemo/ReplayAudit.hs view

file too large to diff

test/conformance-projection-catalog/Generated/CatalogDemo/ShipmentLookup/ReadModel.hs view

file too large to diff

test/conformance-projection-catalog/Generated/CatalogDemo/ShipmentLookup/ReadModelHarness.hs view

file too large to diff

test/conformance-projection-catalog/Generated/CatalogDemo/ShipmentLookup/ReadModelTable.hs view

file too large to diff

test/conformance-projection-catalog/Generated/CatalogDemo/Shipments/BehaviorContract.hs view

file too large to diff

test/conformance-projection-catalog/Generated/CatalogDemo/Shipments/Codec.hs view

file too large to diff

test/conformance-projection-catalog/Generated/CatalogDemo/Shipments/Domain.hs view

file too large to diff

test/conformance-projection-catalog/Generated/CatalogDemo/Shipments/EventStream.hs view

file too large to diff

test/conformance-projection-catalog/Generated/CatalogDemo/Shipments/Harness.hs view

file too large to diff

test/conformance-projection-catalog/Generated/CatalogDemo/Shipments/Projection.hs view

file too large to diff

test/conformance-projection-catalog/Generated/CatalogDemo/Shipments/Transducer.hs view

file too large to diff

test/conformance-projection-catalog/Generated/CatalogDemo/Structural/Shape/QualificationPayload.hs view

file too large to diff

test/conformance-projection-catalog/Generated/CatalogDemo/StructuralConformance.hs view

file too large to diff

test/conformance-projection-catalog/Generated/CatalogDemo/StructuralProjections.hs view

file too large to diff

test/conformance-publisher-runtime/Generated/HospitalCapacity/Emergency/Contract.hs view

file too large to diff

test/conformance-publisher-runtime/Generated/HospitalCapacity/HospitalPublisher/Publisher.hs view

file too large to diff

test/conformance-queue-runtime/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModel.hs view

file too large to diff

test/conformance-queue-runtime/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModelHarness.hs view

file too large to diff

test/conformance-queue-runtime/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModelTable.hs view

file too large to diff

test/conformance-queue-runtime/Generated/HospitalCapacity/ReservationWork/Queue.hs view

file too large to diff

test/conformance-queue-runtime/Generated/HospitalCapacity/ReservationWork/QueueCodec.hs view

file too large to diff

test/conformance-queue-runtime/Generated/HospitalCapacity/ReservationWork/QueuePolicy.hs view

file too large to diff

test/conformance-queue-runtime/Generated/HospitalCapacity/TransferDecisions/ReadModel.hs view

file too large to diff

test/conformance-queue-runtime/Generated/HospitalCapacity/TransferDecisions/ReadModelHarness.hs view

file too large to diff

test/conformance-queue-runtime/Generated/HospitalCapacity/TransferDecisions/ReadModelTable.hs view

file too large to diff

test/conformance-queue/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModel.hs view

file too large to diff

test/conformance-queue/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModelHarness.hs view

file too large to diff

test/conformance-queue/Generated/HospitalCapacity/AcceptedTransferNeeds/ReadModelTable.hs view

file too large to diff

test/conformance-queue/Generated/HospitalCapacity/ReservationWork/Queue.hs view

file too large to diff

test/conformance-queue/Generated/HospitalCapacity/ReservationWork/QueueCodec.hs view

file too large to diff

test/conformance-queue/Generated/HospitalCapacity/ReservationWork/QueuePolicy.hs view

file too large to diff

test/conformance-queue/Generated/HospitalCapacity/TransferDecisions/ReadModel.hs view

file too large to diff

test/conformance-queue/Generated/HospitalCapacity/TransferDecisions/ReadModelHarness.hs view

file too large to diff

test/conformance-queue/Generated/HospitalCapacity/TransferDecisions/ReadModelTable.hs view

file too large to diff

test/conformance-readmodel-runtime/Generated/HospitalCapacity/TransferDecisions/ReadModel.hs view

file too large to diff

test/conformance-readmodel-runtime/Generated/HospitalCapacity/TransferDecisions/ReadModelHarness.hs view

file too large to diff

test/conformance-readmodel-runtime/Generated/HospitalCapacity/TransferDecisions/ReadModelTable.hs view

file too large to diff

+ test/conformance-refined-base16/Conformance/RefinedBase16/Bindings.hs view

file too large to diff

+ test/conformance-refined-base16/Conformance/RefinedBase16/Domain.hs view

file too large to diff

+ test/conformance-refined-base16/Conformance/RefinedBase16/Historical.hs view

file too large to diff

+ test/conformance-refined-base16/Generated/RefinedBase16/BehaviorSourceMap.hs view

file too large to diff

+ test/conformance-refined-base16/Generated/RefinedBase16/HashJobs/Queue.hs view

file too large to diff

+ test/conformance-refined-base16/Generated/RefinedBase16/HashJobs/QueueCodec.hs view

file too large to diff

+ test/conformance-refined-base16/Generated/RefinedBase16/HashJobs/QueuePolicy.hs view

file too large to diff

+ test/conformance-refined-base16/Generated/RefinedBase16/HashLookup/QueryContract.hs view

file too large to diff

+ test/conformance-refined-base16/Generated/RefinedBase16/HashLookup/ReadModel.hs view

file too large to diff

+ test/conformance-refined-base16/Generated/RefinedBase16/HashLookup/ReadModelHarness.hs view

file too large to diff

+ test/conformance-refined-base16/Generated/RefinedBase16/HashLookup/ReadModelTable.hs view

file too large to diff

+ test/conformance-refined-base16/Generated/RefinedBase16/HashStore/BehaviorContract.hs view

file too large to diff

+ test/conformance-refined-base16/Generated/RefinedBase16/HashStore/Codec.hs view

file too large to diff

+ test/conformance-refined-base16/Generated/RefinedBase16/HashStore/Domain.hs view

file too large to diff

+ test/conformance-refined-base16/Generated/RefinedBase16/HashStore/EventStream.hs view

file too large to diff

+ test/conformance-refined-base16/Generated/RefinedBase16/HashStore/Harness.hs view

file too large to diff

+ test/conformance-refined-base16/Generated/RefinedBase16/HashStore/Projection.hs view

file too large to diff

+ test/conformance-refined-base16/Generated/RefinedBase16/HashStore/Transducer.hs view

file too large to diff

+ test/conformance-refined-base16/Generated/RefinedBase16/ProjectionCatalog.hs view

file too large to diff

+ test/conformance-refined-base16/Generated/RefinedBase16/ReplayAudit.hs view

file too large to diff

+ test/conformance-refined-base16/Generated/RefinedBase16/Structural/CodecCompare/ContentHash.hs view

file too large to diff

+ test/conformance-refined-base16/Generated/RefinedBase16/Structural/Shape/ContentHash.hs view

file too large to diff

+ test/conformance-refined-base16/Generated/RefinedBase16/Structural/Shape/HashEnvelope.hs view

file too large to diff

+ test/conformance-refined-base16/Generated/RefinedBase16/Structural/Shape/MaybeContentHash.hs view

file too large to diff

+ test/conformance-refined-base16/Generated/RefinedBase16/StructuralConformance.hs view

file too large to diff

+ test/conformance-refined-base16/Main.hs view

file too large to diff

+ test/conformance-refined-base16/README.md view

file too large to diff

+ test/conformance-refined-base16/RefinedBase16/HashLookup/ReadModelHoles.hs view

file too large to diff

+ test/conformance-refined-base16/RefinedBase16/HashStore/BehaviorHoles.hs view

file too large to diff

+ test/conformance-refined-base16/RefinedBase16/ProjectionCatalog/ProjectionCatalogHoles.hs view

file too large to diff

+ test/conformance-refined-base16/fixtures/codec-compare/arbitrary-length.json view

file too large to diff

+ test/conformance-refined-base16/fixtures/codec-compare/empty.json view

file too large to diff

+ test/conformance-refined-base16/fixtures/codec-compare/mixed-case.json view

file too large to diff

+ test/conformance-refined-base16/fixtures/codec-compare/uppercase-leading-zero.json view

file too large to diff

+ test/conformance-refined-base16/keiro-dsl-cabal-fragment.context.refined-base16.txt view

file too large to diff

+ test/conformance-refined-base16/keiro-dsl-ledger.context.refined-base16.txt view

file too large to diff

test/conformance-replay/Generated/ReplayDivergence/BehaviorSourceMap.hs view

file too large to diff

test/conformance-replay/Generated/ReplayDivergence/Note/BehaviorContract.hs view

file too large to diff

test/conformance-replay/Generated/ReplayDivergence/Note/Codec.hs view

file too large to diff

test/conformance-replay/Generated/ReplayDivergence/Note/Domain.hs view

file too large to diff

test/conformance-replay/Generated/ReplayDivergence/Note/EventStream.hs view

file too large to diff

test/conformance-replay/Generated/ReplayDivergence/Note/Harness.hs view

file too large to diff

test/conformance-replay/Generated/ReplayDivergence/Note/Projection.hs view

file too large to diff

test/conformance-replay/Generated/ReplayDivergence/Note/Transducer.hs view

file too large to diff

test/conformance-replay/Generated/ReplayDivergence/ReplayAudit.hs view

file too large to diff

test/conformance-router-full/Generated/IncidentPaging/BehaviorSourceMap.hs view

file too large to diff

test/conformance-router-full/Generated/IncidentPaging/Page/BehaviorContract.hs view

file too large to diff

test/conformance-router-full/Generated/IncidentPaging/Page/Codec.hs view

file too large to diff

test/conformance-router-full/Generated/IncidentPaging/Page/Domain.hs view

file too large to diff

test/conformance-router-full/Generated/IncidentPaging/Page/EventStream.hs view

file too large to diff

test/conformance-router-full/Generated/IncidentPaging/Page/Harness.hs view

file too large to diff

test/conformance-router-full/Generated/IncidentPaging/Page/Projection.hs view

file too large to diff

test/conformance-router-full/Generated/IncidentPaging/Page/Transducer.hs view

file too large to diff

test/conformance-router-full/Generated/IncidentPaging/PagingRouter/Router.hs view

file too large to diff

test/conformance-router-full/Generated/IncidentPaging/PagingRouter/RouterHarness.hs view

file too large to diff

test/conformance-router-full/Generated/IncidentPaging/ReplayAudit.hs view

file too large to diff

test/conformance-router-full/Generated/IncidentPaging/ServiceOncall/ReadModel.hs view

file too large to diff

test/conformance-router-full/Generated/IncidentPaging/ServiceOncall/ReadModelHarness.hs view

file too large to diff

test/conformance-router-full/Generated/IncidentPaging/ServiceOncall/ReadModelTable.hs view

file too large to diff

test/conformance-router-runtime/Generated/IncidentPaging/BehaviorSourceMap.hs view

file too large to diff

test/conformance-router-runtime/Generated/IncidentPaging/Page/BehaviorContract.hs view

file too large to diff

test/conformance-router-runtime/Generated/IncidentPaging/Page/Codec.hs view

file too large to diff

test/conformance-router-runtime/Generated/IncidentPaging/Page/Domain.hs view

file too large to diff

test/conformance-router-runtime/Generated/IncidentPaging/Page/EventStream.hs view

file too large to diff

test/conformance-router-runtime/Generated/IncidentPaging/Page/Harness.hs view

file too large to diff

test/conformance-router-runtime/Generated/IncidentPaging/Page/Projection.hs view

file too large to diff

test/conformance-router-runtime/Generated/IncidentPaging/Page/Transducer.hs view

file too large to diff

test/conformance-router-runtime/Generated/IncidentPaging/PagingRouter/Router.hs view

file too large to diff

test/conformance-router-runtime/Generated/IncidentPaging/PagingRouter/RouterHarness.hs view

file too large to diff

test/conformance-router-runtime/Generated/IncidentPaging/ReplayAudit.hs view

file too large to diff

test/conformance-router-runtime/Generated/IncidentPaging/ServiceOncall/ReadModel.hs view

file too large to diff

test/conformance-router-runtime/Generated/IncidentPaging/ServiceOncall/ReadModelHarness.hs view

file too large to diff

test/conformance-router-runtime/Generated/IncidentPaging/ServiceOncall/ReadModelTable.hs view

file too large to diff

test/conformance-router/Generated/IncidentPaging/BehaviorSourceMap.hs view

file too large to diff

test/conformance-router/Generated/IncidentPaging/Page/BehaviorContract.hs view

file too large to diff

test/conformance-router/Generated/IncidentPaging/Page/Codec.hs view

file too large to diff

test/conformance-router/Generated/IncidentPaging/Page/Domain.hs view

file too large to diff

test/conformance-router/Generated/IncidentPaging/Page/EventStream.hs view

file too large to diff

test/conformance-router/Generated/IncidentPaging/Page/Harness.hs view

file too large to diff

test/conformance-router/Generated/IncidentPaging/Page/Projection.hs view

file too large to diff

test/conformance-router/Generated/IncidentPaging/Page/Transducer.hs view

file too large to diff

test/conformance-router/Generated/IncidentPaging/PagingRouter/Router.hs view

file too large to diff

test/conformance-router/Generated/IncidentPaging/PagingRouter/RouterHarness.hs view

file too large to diff

test/conformance-router/Generated/IncidentPaging/ReplayAudit.hs view

file too large to diff

test/conformance-router/Generated/IncidentPaging/ServiceOncall/ReadModel.hs view

file too large to diff

test/conformance-router/Generated/IncidentPaging/ServiceOncall/ReadModelHarness.hs view

file too large to diff

test/conformance-router/Generated/IncidentPaging/ServiceOncall/ReadModelTable.hs view

file too large to diff

test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/BehaviorSourceMap.hs view

file too large to diff

test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/Nominals.hs view

file too large to diff

test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/Nominals/Internal.hs view

file too large to diff

test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/ReplayAudit.hs view

file too large to diff

test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/ScalarAccount/BehaviorContract.hs view

file too large to diff

test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/ScalarAccount/Codec.hs view

file too large to diff

test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/ScalarAccount/Domain.hs view

file too large to diff

test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/ScalarAccount/EventStream.hs view

file too large to diff

test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/ScalarAccount/Harness.hs view

file too large to diff

test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/ScalarAccount/Projection.hs view

file too large to diff

test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/ScalarAccount/Transducer.hs view

file too large to diff

test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/Structural/Shape/Limits.hs view

file too large to diff

test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/StructuralConformance.hs view

file too large to diff

test/conformance-scalar-expressions/Generated/AggregateScalarExpressions/StructuralProjections.hs view

file too large to diff

test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Alpha/Generated/BehaviorContract.hs view

file too large to diff

test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Alpha/Generated/Codec.hs view

file too large to diff

test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Alpha/Generated/Domain.hs view

file too large to diff

test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Alpha/Generated/EventStream.hs view

file too large to diff

test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Alpha/Generated/Harness.hs view

file too large to diff

test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Alpha/Generated/Projection.hs view

file too large to diff

test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Alpha/Generated/Transducer.hs view

file too large to diff

test/conformance-service-package/runtime/src/Proof/WorkspaceProof/AlphaView/Generated/ReadModel.hs view

file too large to diff

test/conformance-service-package/runtime/src/Proof/WorkspaceProof/AlphaView/Generated/ReadModelHarness.hs view

file too large to diff

test/conformance-service-package/runtime/src/Proof/WorkspaceProof/AlphaView/Generated/ReadModelTable.hs view

file too large to diff

test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Beta/Generated/BehaviorContract.hs view

file too large to diff

test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Beta/Generated/Codec.hs view

file too large to diff

test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Beta/Generated/Domain.hs view

file too large to diff

test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Beta/Generated/EventStream.hs view

file too large to diff

test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Beta/Generated/Harness.hs view

file too large to diff

test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Beta/Generated/Projection.hs view

file too large to diff

test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Beta/Generated/Transducer.hs view

file too large to diff

test/conformance-service-package/runtime/src/Proof/WorkspaceProof/BetaView/Generated/ReadModel.hs view

file too large to diff

test/conformance-service-package/runtime/src/Proof/WorkspaceProof/BetaView/Generated/ReadModelHarness.hs view

file too large to diff

test/conformance-service-package/runtime/src/Proof/WorkspaceProof/BetaView/Generated/ReadModelTable.hs view

file too large to diff

test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Generated/BehaviorSourceMap.hs view

file too large to diff

test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Generated/Conformance.hs view

file too large to diff

test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Generated/Nominals.hs view

file too large to diff

test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Generated/Nominals/Internal.hs view

file too large to diff

test/conformance-service-package/runtime/src/Proof/WorkspaceProof/Generated/ReplayAudit.hs view

file too large to diff

test/conformance-service-package/runtime/src/Proof/WorkspaceProof/WorkspaceProofWorkflow/Generated/WorkflowFacts.hs view

file too large to diff

test/conformance-service-package/runtime/src/Proof/WorkspaceProof/WorkspaceProofWorkflow/Generated/WorkflowRuntime.hs view

file too large to diff

test/conformance-service-package/runtime/src/keiro-dsl-conformance.workspace.workspace-proof/keiro-dsl-conformance-ledger.txt view

file too large to diff

test/conformance-service-package/runtime/src/keiro-dsl-conformance.workspace.workspace-proof/keiro-workspace-proof-conformance.cabal view

file too large to diff

test/conformance-service-package/runtime/src/keiro-dsl-conformance.workspace.workspace-proof/src/Main.hs view

file too large to diff

test/conformance-snapshot/Generated/HospitalCapacity/BehaviorSourceMap.hs view

file too large to diff

test/conformance-snapshot/Generated/HospitalCapacity/Nominals.hs view

file too large to diff

test/conformance-snapshot/Generated/HospitalCapacity/Nominals/Internal.hs view

file too large to diff

test/conformance-snapshot/Generated/HospitalCapacity/ReplayAudit.hs view

file too large to diff

test/conformance-snapshot/Generated/HospitalCapacity/Reservation/BehaviorContract.hs view

file too large to diff

test/conformance-snapshot/Generated/HospitalCapacity/Reservation/Codec.hs view

file too large to diff

test/conformance-snapshot/Generated/HospitalCapacity/Reservation/Domain.hs view

file too large to diff

test/conformance-snapshot/Generated/HospitalCapacity/Reservation/EventStream.hs view

file too large to diff

test/conformance-snapshot/Generated/HospitalCapacity/Reservation/Harness.hs view

file too large to diff

test/conformance-snapshot/Generated/HospitalCapacity/Reservation/Projection.hs view

file too large to diff

test/conformance-snapshot/Generated/HospitalCapacity/Reservation/Transducer.hs view

file too large to diff

test/conformance-structural-nominals/Generated/StructuralNominalLeaves/BehaviorSourceMap.hs view

file too large to diff

test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Nominal/Shape/Channel.hs view

file too large to diff

test/conformance-structural-nominals/Generated/StructuralNominalLeaves/NominalProjections.hs view

file too large to diff

test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Nominals.hs view

file too large to diff

test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Nominals/Internal.hs view

file too large to diff

test/conformance-structural-nominals/Generated/StructuralNominalLeaves/ProjectionCatalog.hs view

file too large to diff

test/conformance-structural-nominals/Generated/StructuralNominalLeaves/ReplayAudit.hs view

file too large to diff

test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Structural/NominalLeaves.hs view

file too large to diff

test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Structural/Shape/TemplateBook.hs view

file too large to diff

test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Structural/Shape/TemplateLookupInput.hs view

file too large to diff

test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Structural/Shape/TemplateLookupRow.hs view

file too large to diff

test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Structural/Shape/TemplateRef.hs view

file too large to diff

test/conformance-structural-nominals/Generated/StructuralNominalLeaves/Structural/Shape/TemplateState.hs view

file too large to diff

test/conformance-structural-nominals/Generated/StructuralNominalLeaves/StructuralConformance.hs view

file too large to diff

test/conformance-structural-nominals/Generated/StructuralNominalLeaves/StructuralProjections.hs view

file too large to diff

test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateCatalog/BehaviorContract.hs view

file too large to diff

test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateCatalog/Codec.hs view

file too large to diff

test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateCatalog/Domain.hs view

file too large to diff

test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateCatalog/EventStream.hs view

file too large to diff

test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateCatalog/Harness.hs view

file too large to diff

test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateCatalog/Projection.hs view

file too large to diff

test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateCatalog/Transducer.hs view

file too large to diff

test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateDeliveryRouter/Router.hs view

file too large to diff

test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateDeliveryRouter/RouterHarness.hs view

file too large to diff

test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateLookup/QueryContract.hs view

file too large to diff

test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateLookup/ReadModel.hs view

file too large to diff

test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateLookup/ReadModelHarness.hs view

file too large to diff

test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateLookup/ReadModelTable.hs view

file too large to diff

test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateWork/Queue.hs view

file too large to diff

test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateWork/QueueCodec.hs view

file too large to diff

test/conformance-structural-nominals/Generated/StructuralNominalLeaves/TemplateWork/QueuePolicy.hs view

file too large to diff

test/conformance-structural-nominals/keiro-dsl-cabal-fragment.context.structural-nominal-leaves.txt view

file too large to diff

+ test/conformance-structural-text-sets/Conformance/StructuralTextSets/Bindings.hs view

file too large to diff

+ test/conformance-structural-text-sets/Conformance/StructuralTextSets/Domain.hs view

file too large to diff

+ test/conformance-structural-text-sets/Conformance/StructuralTextSets/Historical.hs view

file too large to diff

+ test/conformance-structural-text-sets/Generated/StructuralTextSets/BehaviorSourceMap.hs view

file too large to diff

+ test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelJobs/Queue.hs view

file too large to diff

+ test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelJobs/QueueCodec.hs view

file too large to diff

+ test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelJobs/QueuePolicy.hs view

file too large to diff

+ test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelLookup/QueryContract.hs view

file too large to diff

+ test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelLookup/ReadModel.hs view

file too large to diff

+ test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelLookup/ReadModelHarness.hs view

file too large to diff

+ test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelLookup/ReadModelTable.hs view

file too large to diff

+ test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelStore/BehaviorContract.hs view

file too large to diff

+ test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelStore/Codec.hs view

file too large to diff

+ test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelStore/Domain.hs view

file too large to diff

+ test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelStore/EventStream.hs view

file too large to diff

+ test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelStore/Harness.hs view

file too large to diff

+ test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelStore/Projection.hs view

file too large to diff

+ test/conformance-structural-text-sets/Generated/StructuralTextSets/LabelStore/Transducer.hs view

file too large to diff

+ test/conformance-structural-text-sets/Generated/StructuralTextSets/ProjectionCatalog.hs view

file too large to diff

+ test/conformance-structural-text-sets/Generated/StructuralTextSets/ReplayAudit.hs view

file too large to diff

+ test/conformance-structural-text-sets/Generated/StructuralTextSets/Structural/Shape/LabelEnvelope.hs view

file too large to diff

+ test/conformance-structural-text-sets/Generated/StructuralTextSets/Structural/Shape/MaybeTextLabels.hs view

file too large to diff

+ test/conformance-structural-text-sets/Generated/StructuralTextSets/Structural/Shape/TextLabels.hs view

file too large to diff

+ test/conformance-structural-text-sets/Generated/StructuralTextSets/StructuralConformance.hs view

file too large to diff

+ test/conformance-structural-text-sets/Main.hs view

file too large to diff

+ test/conformance-structural-text-sets/README.md view

file too large to diff

+ test/conformance-structural-text-sets/StructuralTextSets/LabelLookup/ReadModelHoles.hs view

file too large to diff

+ test/conformance-structural-text-sets/StructuralTextSets/LabelStore/BehaviorHoles.hs view

file too large to diff

+ test/conformance-structural-text-sets/StructuralTextSets/ProjectionCatalog/ProjectionCatalogHoles.hs view

file too large to diff

+ test/conformance-structural-text-sets/keiro-dsl-cabal-fragment.context.structural-text-sets.txt view

file too large to diff

+ test/conformance-structural-text-sets/keiro-dsl-ledger.context.structural-text-sets.txt view

file too large to diff

test/conformance-structural/Generated/StructuralConformance/ArtifactCatalog/BehaviorContract.hs view

file too large to diff

test/conformance-structural/Generated/StructuralConformance/ArtifactCatalog/Codec.hs view

file too large to diff

test/conformance-structural/Generated/StructuralConformance/ArtifactCatalog/Domain.hs view

file too large to diff

test/conformance-structural/Generated/StructuralConformance/ArtifactCatalog/EventStream.hs view

file too large to diff

test/conformance-structural/Generated/StructuralConformance/ArtifactCatalog/Harness.hs view

file too large to diff

test/conformance-structural/Generated/StructuralConformance/ArtifactCatalog/Projection.hs view

file too large to diff

test/conformance-structural/Generated/StructuralConformance/ArtifactCatalog/Transducer.hs view

file too large to diff

test/conformance-structural/Generated/StructuralConformance/BehaviorSourceMap.hs view

file too large to diff

test/conformance-structural/Generated/StructuralConformance/ReplayAudit.hs view

file too large to diff

test/conformance-structural/Generated/StructuralConformance/Structural/Shape/ArtifactInfo.hs view

file too large to diff

test/conformance-structural/Generated/StructuralConformance/Structural/Shape/ArtifactKind.hs view

file too large to diff

test/conformance-structural/Generated/StructuralConformance/Structural/Shape/ArtifactLocation.hs view

file too large to diff

test/conformance-structural/Generated/StructuralConformance/Structural/Shape/ArtifactMetadata.hs view

file too large to diff

test/conformance-structural/Generated/StructuralConformance/StructuralConformance.hs view

file too large to diff

test/conformance-structural/Generated/StructuralConformance/StructuralProjections.hs view

file too large to diff

test/conformance-v2/Generated/HospitalCapacity/BehaviorSourceMap.hs view

file too large to diff

test/conformance-v2/Generated/HospitalCapacity/Nominals.hs view

file too large to diff

test/conformance-v2/Generated/HospitalCapacity/Nominals/Internal.hs view

file too large to diff

test/conformance-v2/Generated/HospitalCapacity/ReplayAudit.hs view

file too large to diff

test/conformance-v2/Generated/HospitalCapacity/Reservation/BehaviorContract.hs view

file too large to diff

test/conformance-v2/Generated/HospitalCapacity/Reservation/Codec.hs view

file too large to diff

test/conformance-v2/Generated/HospitalCapacity/Reservation/Domain.hs view

file too large to diff

test/conformance-v2/Generated/HospitalCapacity/Reservation/EventStream.hs view

file too large to diff

test/conformance-v2/Generated/HospitalCapacity/Reservation/Harness.hs view

file too large to diff

test/conformance-v2/Generated/HospitalCapacity/Reservation/Projection.hs view

file too large to diff

test/conformance-v2/Generated/HospitalCapacity/Reservation/Transducer.hs view

file too large to diff

test/conformance-workflow-full/Generated/HospitalCapacity/HospitalTransferReservation/WorkflowFacts.hs view

file too large to diff

test/conformance-workflow-full/Generated/HospitalCapacity/HospitalTransferReservation/WorkflowRuntime.hs view

file too large to diff

test/conformance-workflow-runtime/Generated/HospitalCapacity/HospitalTransferReservation/WorkflowFacts.hs view

file too large to diff

test/conformance-workflow-runtime/Generated/HospitalCapacity/HospitalTransferReservation/WorkflowRuntime.hs view

file too large to diff

test/conformance-workflow/Generated/HospitalCapacity/HospitalTransferReservation/WorkflowFacts.hs view

file too large to diff

test/conformance-workflow/Generated/HospitalCapacity/HospitalTransferReservation/WorkflowRuntime.hs view

file too large to diff

test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/BehaviorSourceMap.hs view

file too large to diff

test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Nominals.hs view

file too large to diff

test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Nominals/Internal.hs view

file too large to diff

test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Project/BehaviorContract.hs view

file too large to diff

test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Project/Codec.hs view

file too large to diff

test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Project/Domain.hs view

file too large to diff

test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Project/EventStream.hs view

file too large to diff

test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Project/Harness.hs view

file too large to diff

test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Project/Projection.hs view

file too large to diff

test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Project/Transducer.hs view

file too large to diff

test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/ProjectArtifact/BehaviorContract.hs view

file too large to diff

test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/ProjectArtifact/Codec.hs view

file too large to diff

test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/ProjectArtifact/Domain.hs view

file too large to diff

test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/ProjectArtifact/EventStream.hs view

file too large to diff

test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/ProjectArtifact/Harness.hs view

file too large to diff

test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/ProjectArtifact/Projection.hs view

file too large to diff

test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/ProjectArtifact/Transducer.hs view

file too large to diff

test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/ReplayAudit.hs view

file too large to diff

test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Structural/NominalLeaves.hs view

file too large to diff

test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Structural/Shape/ArtifactClaim.hs view

file too large to diff

test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/Structural/Shape/ProjectClaim.hs view

file too large to diff

test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/StructuralConformance.hs view

file too large to diff

test/conformance-workspace-nominals/Generated/WorkspaceNominalProof/StructuralProjections.hs view

file too large to diff

test/conformance/Generated/HospitalCapacity/BehaviorSourceMap.hs view

file too large to diff

test/conformance/Generated/HospitalCapacity/Nominals.hs view

file too large to diff

test/conformance/Generated/HospitalCapacity/Nominals/Internal.hs view

file too large to diff

test/conformance/Generated/HospitalCapacity/ReplayAudit.hs view

file too large to diff

test/conformance/Generated/HospitalCapacity/Reservation/BehaviorContract.hs view

file too large to diff

test/conformance/Generated/HospitalCapacity/Reservation/Codec.hs view

file too large to diff

test/conformance/Generated/HospitalCapacity/Reservation/Domain.hs view

file too large to diff

test/conformance/Generated/HospitalCapacity/Reservation/EventStream.hs view

file too large to diff

test/conformance/Generated/HospitalCapacity/Reservation/Harness.hs view

file too large to diff

test/conformance/Generated/HospitalCapacity/Reservation/Projection.hs view

file too large to diff

test/conformance/Generated/HospitalCapacity/Reservation/Transducer.hs view

file too large to diff

+ test/fixtures/bare-containers.keiro view

file too large to diff

+ test/fixtures/calendar-days.keiro view

file too large to diff

+ test/fixtures/checked-mapping-replay-workspace/domain/service.keiro view

file too large to diff

+ test/fixtures/checked-mapping-replay-workspace/domain/values.keiro view

file too large to diff

+ test/fixtures/checked-mapping-replay-workspace/release-manifest.json view

file too large to diff

+ test/fixtures/checked-mapping-replay-workspace/service.keiro-workspace view

file too large to diff

+ test/fixtures/id-admission-domains.keiro view

file too large to diff

+ test/fixtures/refined-base16.keiro view

file too large to diff

+ test/fixtures/structural-text-sets.keiro view

file too large to diff