aw-spec-cli 0.1.5 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/assets/.agents/agent.json +1 -1
  2. package/assets/.agents/skills/{aw-spec-orch → appweaver}/SKILL.md +10 -10
  3. package/assets/.agents/skills/{aw-spec-orch-demo → appweaver-demo}/SKILL.md +9 -9
  4. package/assets/.claude/agent.json +1 -1
  5. package/assets/.claude/skills/{aw-spec-orch → appweaver}/SKILL.md +10 -10
  6. package/assets/.claude/skills/{aw-spec-orch-demo → appweaver-demo}/SKILL.md +9 -9
  7. package/assets/.kilocode/agent.json +1 -1
  8. package/assets/.kilocode/workflows/{aw-spec-orch-demo.md → appweaver-demo.md} +9 -9
  9. package/assets/.kilocode/workflows/{aw-spec-orch.md → appweaver.md} +10 -10
  10. package/assets/docs/pharma-constitution.my-ref.md +86 -0
  11. package/dist/utils/paths.js +1 -1
  12. package/dist/utils/paths.js.map +1 -1
  13. package/package.json +1 -1
  14. package/assets/.aw-spec/DESIGN-FORMAT.md +0 -151
  15. package/assets/.aw-spec/ORCH-DIALECT.md +0 -156
  16. package/assets/.aw-spec/RULE-PARTITION.md +0 -126
  17. package/assets/.aw-spec/domain.json +0 -3
  18. package/assets/.aw-spec/extensions/.registry +0 -19
  19. package/assets/.aw-spec/extensions/agent-context/README.md +0 -57
  20. package/assets/.aw-spec/extensions/agent-context/agent-context-config.yml +0 -4
  21. package/assets/.aw-spec/extensions/agent-context/commands/aw-spec.agent-context.update.md +0 -26
  22. package/assets/.aw-spec/extensions/agent-context/extension.yml +0 -37
  23. package/assets/.aw-spec/extensions/agent-context/scripts/bash/update-agent-context.sh +0 -201
  24. package/assets/.aw-spec/extensions/agent-context/scripts/powershell/update-agent-context.ps1 +0 -237
  25. package/assets/.aw-spec/extensions.yml +0 -16
  26. package/assets/.aw-spec/feature.json +0 -3
  27. package/assets/.aw-spec/init-options.json +0 -9
  28. package/assets/.aw-spec/integration.json +0 -15
  29. package/assets/.aw-spec/integrations/aw-spec.manifest.json +0 -9
  30. package/assets/.aw-spec/interpreter/run-skill.py +0 -1158
  31. package/assets/.aw-spec/memory/constitution.md +0 -50
  32. package/assets/.aw-spec/orchestrator/AGENT-PROFILE.md +0 -94
  33. package/assets/.aw-spec/orchestrator/README.md +0 -300
  34. package/assets/.aw-spec/orchestrator/adapters/claude_agent_sdk.py +0 -74
  35. package/assets/.aw-spec/orchestrator/adapters/google_antigravity.py +0 -74
  36. package/assets/.aw-spec/orchestrator/modules/delta-design.orch.yaml +0 -105
  37. package/assets/.aw-spec/orchestrator/modules/delta-spec.orch.yaml +0 -79
  38. package/assets/.aw-spec/orchestrator/modules/domain-select.orch.yaml +0 -81
  39. package/assets/.aw-spec/orchestrator/modules/tech-select.orch.yaml +0 -75
  40. package/assets/.aw-spec/orchestrator/orchestrator.py +0 -1721
  41. package/assets/.aw-spec/orchestrator/rev-templates/ai-rules.reference.md +0 -40
  42. package/assets/.aw-spec/orchestrator/rev-templates/comandrulemap.skeleton.md +0 -59
  43. package/assets/.aw-spec/orchestrator/rev-templates/commandtechrulemap.skeleton.md +0 -97
  44. package/assets/.aw-spec/orchestrator/rev-templates/domain-constitution.skeleton.md +0 -61
  45. package/assets/.aw-spec/orchestrator/rev-templates/domain-requirements.skeleton.md +0 -48
  46. package/assets/.aw-spec/orchestrator/rev-templates/domain-rule-file.skeleton.md +0 -39
  47. package/assets/.aw-spec/orchestrator/rev-templates/technical-constitution.skeleton.md +0 -106
  48. package/assets/.aw-spec/orchestrator/rev-templates/technical-rule-file.skeleton.md +0 -54
  49. package/assets/.aw-spec/orchestrator/workflows/_smoke.orch.yaml +0 -160
  50. package/assets/.aw-spec/orchestrator/workflows/aw-spec-add-component.orch.yaml +0 -244
  51. package/assets/.aw-spec/orchestrator/workflows/aw-spec-adopt.orch.yaml +0 -775
  52. package/assets/.aw-spec/orchestrator/workflows/aw-spec-analyze-delta-design.orch.yaml +0 -248
  53. package/assets/.aw-spec/orchestrator/workflows/aw-spec-analyze-design.orch.yaml +0 -261
  54. package/assets/.aw-spec/orchestrator/workflows/aw-spec-analyze-slice.orch.yaml +0 -425
  55. package/assets/.aw-spec/orchestrator/workflows/aw-spec-build.orch.yaml +0 -188
  56. package/assets/.aw-spec/orchestrator/workflows/aw-spec-characterize.orch.yaml +0 -474
  57. package/assets/.aw-spec/orchestrator/workflows/aw-spec-close-delta.orch.yaml +0 -181
  58. package/assets/.aw-spec/orchestrator/workflows/aw-spec-constitution.orch.yaml +0 -284
  59. package/assets/.aw-spec/orchestrator/workflows/aw-spec-demo.orch.yaml +0 -103
  60. package/assets/.aw-spec/orchestrator/workflows/aw-spec-dependency-tree.orch.yaml +0 -69
  61. package/assets/.aw-spec/orchestrator/workflows/aw-spec-deploy.orch.yaml +0 -85
  62. package/assets/.aw-spec/orchestrator/workflows/aw-spec-design.orch.yaml +0 -382
  63. package/assets/.aw-spec/orchestrator/workflows/aw-spec-finalize-delta.orch.yaml +0 -382
  64. package/assets/.aw-spec/orchestrator/workflows/aw-spec-foundation.orch.yaml +0 -246
  65. package/assets/.aw-spec/orchestrator/workflows/aw-spec-implement-delta.orch.yaml +0 -231
  66. package/assets/.aw-spec/orchestrator/workflows/aw-spec-implement.orch.yaml +0 -258
  67. package/assets/.aw-spec/orchestrator/workflows/aw-spec-inventory.orch.yaml +0 -236
  68. package/assets/.aw-spec/orchestrator/workflows/aw-spec-onboard.orch.yaml +0 -949
  69. package/assets/.aw-spec/orchestrator/workflows/aw-spec-parity.orch.yaml +0 -293
  70. package/assets/.aw-spec/orchestrator/workflows/aw-spec-run.orch.yaml +0 -177
  71. package/assets/.aw-spec/orchestrator/workflows/aw-spec-select-domain.orch.yaml +0 -79
  72. package/assets/.aw-spec/orchestrator/workflows/aw-spec-select-feature.orch.yaml +0 -128
  73. package/assets/.aw-spec/orchestrator/workflows/aw-spec-specify.orch.yaml +0 -412
  74. package/assets/.aw-spec/scripts/bash/aw-inventory.sh +0 -14
  75. package/assets/.aw-spec/scripts/bash/aw-parity.sh +0 -13
  76. package/assets/.aw-spec/scripts/bash/aw-rev-constitution.sh +0 -13
  77. package/assets/.aw-spec/scripts/bash/aw-spec-actions.sh +0 -1899
  78. package/assets/.aw-spec/scripts/bash/aw-xref.sh +0 -15
  79. package/assets/.aw-spec/scripts/bash/common.sh +0 -533
  80. package/assets/.aw-spec/scripts/powershell/aw-inventory.ps1 +0 -14
  81. package/assets/.aw-spec/scripts/powershell/aw-parity.ps1 +0 -13
  82. package/assets/.aw-spec/scripts/powershell/aw-rev-constitution.ps1 +0 -13
  83. package/assets/.aw-spec/scripts/powershell/aw-spec-actions.ps1 +0 -1563
  84. package/assets/.aw-spec/scripts/powershell/aw-xref.ps1 +0 -15
  85. package/assets/.aw-spec/scripts/python/aw-inventory.py +0 -683
  86. package/assets/.aw-spec/scripts/python/aw-parity.py +0 -380
  87. package/assets/.aw-spec/scripts/python/aw-rev-constitution.py +0 -312
  88. package/assets/.aw-spec/scripts/python/aw-xref.py +0 -1330
  89. package/assets/.aw-spec/scripts/python/validate_okf.py +0 -349
  90. package/assets/.aw-spec/templates/constitution-domain-template.md +0 -75
  91. package/assets/.aw-spec/templates/constitution-technical-template.md +0 -70
  92. package/assets/.aw-spec/templates/delta-design-template.md +0 -69
  93. package/assets/.aw-spec/templates/delta-spec-template.md +0 -60
  94. package/assets/.aw-spec/templates/design-template.md +0 -383
  95. package/assets/.aw-spec/templates/okf-concept-template.md +0 -103
  96. package/assets/.aw-spec/templates/parity-manifest-template.json +0 -49
  97. package/assets/.aw-spec/templates/source-map-template.md +0 -85
  98. package/assets/.aw-spec/templates/spec-template.md +0 -252
  99. package/assets/docs/ModularMonolith/ModularMonolith.Reference.pack.txt +0 -25248
  100. package/assets/docs/ModularMonolith/ModularMonolith.pack.txt +0 -5726
  101. package/assets/docs/ModularMonolith/pack-foundation.ps1 +0 -145
  102. package/assets/docs/ModularMonolith/pack-foundation.sh +0 -196
  103. package/assets/docs/ModularMonolith/pack-reference-foundation.ps1 +0 -157
  104. package/assets/docs/ModularMonolith/pack-reference-foundation.sh +0 -209
  105. package/assets/docs/ModularMonolith/unpack-foundation.ps1 +0 -126
  106. package/assets/docs/ModularMonolith/unpack-foundation.sh +0 -217
  107. package/assets/docs/ModularMonolith/unpack-reference-foundation.ps1 +0 -129
  108. package/assets/docs/ModularMonolith/unpack-reference-foundation.sh +0 -218
  109. package/assets/docs/README.md +0 -106
  110. package/assets/docs/VerticalSlice/PACKAGING.md +0 -185
  111. package/assets/docs/VerticalSlice/VerticalSlice.Reference.pack.txt +0 -19318
  112. package/assets/docs/VerticalSlice/VerticalSlice.pack.txt +0 -2833
  113. package/assets/docs/VerticalSlice/pack-foundation.ps1 +0 -145
  114. package/assets/docs/VerticalSlice/pack-foundation.sh +0 -196
  115. package/assets/docs/VerticalSlice/pack-reference-foundation.ps1 +0 -157
  116. package/assets/docs/VerticalSlice/pack-reference-foundation.sh +0 -209
  117. package/assets/docs/VerticalSlice/unpack-foundation.ps1 +0 -126
  118. package/assets/docs/VerticalSlice/unpack-foundation.sh +0 -217
  119. package/assets/docs/VerticalSlice/unpack-reference-foundation.ps1 +0 -129
  120. package/assets/docs/VerticalSlice/unpack-reference-foundation.sh +0 -218
  121. package/assets/docs/architecture/clean-architecture.md +0 -71
  122. package/assets/docs/architecture/cqrs.md +0 -141
  123. package/assets/docs/architecture/eventing.md +0 -83
  124. package/assets/docs/architecture/folder-structure.md +0 -61
  125. package/assets/docs/architecture/modular-monolith.md +0 -47
  126. package/assets/docs/architecture/persistence.md +0 -269
  127. package/assets/docs/architecture/testing.md +0 -55
  128. package/assets/docs/architecture/vertical-slices.md +0 -201
  129. package/assets/docs/components/Email/README.md +0 -119
  130. package/assets/docs/components/Email/ReferenceEndpoints/SendEmailEndpoint.cs +0 -84
  131. package/assets/docs/components/Email/integration.md +0 -300
  132. package/assets/docs/components/Jobs/README.md +0 -113
  133. package/assets/docs/components/Jobs/integration.md +0 -259
  134. package/assets/docs/components/QrGenerator/README.md +0 -85
  135. package/assets/docs/components/QrGenerator/ReferenceEndpoints/GenerateQrEndpoint.cs +0 -57
  136. package/assets/docs/components/QrGenerator/integration.md +0 -230
  137. package/assets/docs/components/README.md +0 -74
  138. package/assets/docs/domain/domain-driven-design.md +0 -212
  139. package/assets/docs/domainspecs/healthcare/ai-rules.domain.md +0 -34
  140. package/assets/docs/domainspecs/healthcare/api-versioning.domain.md +0 -17
  141. package/assets/docs/domainspecs/healthcare/auditing.domain.md +0 -97
  142. package/assets/docs/domainspecs/healthcare/authorization.domain.md +0 -26
  143. package/assets/docs/domainspecs/healthcare/clinical-terms.md +0 -20
  144. package/assets/docs/domainspecs/healthcare/coding-standards.domain.md +0 -26
  145. package/assets/docs/domainspecs/healthcare/comandrulemap.md +0 -100
  146. package/assets/docs/domainspecs/healthcare/commandtechrulemap.md +0 -119
  147. package/assets/docs/domainspecs/healthcare/consent.md +0 -19
  148. package/assets/docs/domainspecs/healthcare/cqrs.domain.md +0 -12
  149. package/assets/docs/domainspecs/healthcare/data-classification.domain.md +0 -28
  150. package/assets/docs/domainspecs/healthcare/dependency-policy.domain.md +0 -11
  151. package/assets/docs/domainspecs/healthcare/dicom.md +0 -15
  152. package/assets/docs/domainspecs/healthcare/domain-driven-design.domain.md +0 -28
  153. package/assets/docs/domainspecs/healthcare/domain-requirements.md +0 -55
  154. package/assets/docs/domainspecs/healthcare/eventing.domain.md +0 -18
  155. package/assets/docs/domainspecs/healthcare/fhir.md +0 -36
  156. package/assets/docs/domainspecs/healthcare/folder-structure.domain.md +0 -23
  157. package/assets/docs/domainspecs/healthcare/hipaa.md +0 -34
  158. package/assets/docs/domainspecs/healthcare/hl7.md +0 -15
  159. package/assets/docs/domainspecs/healthcare/integration-terms.md +0 -21
  160. package/assets/docs/domainspecs/healthcare/persistence.domain.md +0 -20
  161. package/assets/docs/domainspecs/healthcare/terminology.md +0 -30
  162. package/assets/docs/domainspecs/healthcare/testing.domain.md +0 -15
  163. package/assets/docs/domainspecs/healthcare/vertical-slices.domain.md +0 -18
  164. package/assets/docs/domainspecs/healthcare/zero-trust.domain.md +0 -12
  165. package/assets/docs/domainspecs/pharma/ai-rules.domain.md +0 -32
  166. package/assets/docs/domainspecs/pharma/api-versioning.domain.md +0 -20
  167. package/assets/docs/domainspecs/pharma/atc.md +0 -22
  168. package/assets/docs/domainspecs/pharma/auditing.domain.md +0 -90
  169. package/assets/docs/domainspecs/pharma/authorization.domain.md +0 -25
  170. package/assets/docs/domainspecs/pharma/coding-standards.domain.md +0 -28
  171. package/assets/docs/domainspecs/pharma/comandrulemap.md +0 -108
  172. package/assets/docs/domainspecs/pharma/commandtechrulemap.md +0 -119
  173. package/assets/docs/domainspecs/pharma/cqrs.domain.md +0 -16
  174. package/assets/docs/domainspecs/pharma/data-classification.domain.md +0 -24
  175. package/assets/docs/domainspecs/pharma/data-provenance.md +0 -21
  176. package/assets/docs/domainspecs/pharma/dependency-policy.domain.md +0 -11
  177. package/assets/docs/domainspecs/pharma/domain-driven-design.domain.md +0 -36
  178. package/assets/docs/domainspecs/pharma/domain-requirements.md +0 -99
  179. package/assets/docs/domainspecs/pharma/eventing.domain.md +0 -18
  180. package/assets/docs/domainspecs/pharma/fhir.md +0 -31
  181. package/assets/docs/domainspecs/pharma/folder-structure.domain.md +0 -24
  182. package/assets/docs/domainspecs/pharma/hl7.md +0 -17
  183. package/assets/docs/domainspecs/pharma/idmp.md +0 -26
  184. package/assets/docs/domainspecs/pharma/integration-terms.md +0 -21
  185. package/assets/docs/domainspecs/pharma/ndc.md +0 -28
  186. package/assets/docs/domainspecs/pharma/persistence.domain.md +0 -23
  187. package/assets/docs/domainspecs/pharma/pharma-terms.md +0 -27
  188. package/assets/docs/domainspecs/pharma/product-lifecycle.domain.md +0 -30
  189. package/assets/docs/domainspecs/pharma/regulatory-compliance.md +0 -19
  190. package/assets/docs/domainspecs/pharma/terminology.md +0 -32
  191. package/assets/docs/domainspecs/pharma/testing.domain.md +0 -19
  192. package/assets/docs/domainspecs/pharma/vertical-slices.domain.md +0 -17
  193. package/assets/docs/domainspecs/pharma/zero-trust.domain.md +0 -12
  194. package/assets/docs/glossary/ai-rules.md +0 -59
  195. package/assets/docs/governance/api-versioning.md +0 -99
  196. package/assets/docs/governance/coding-standards.md +0 -87
  197. package/assets/docs/governance/dependency-policy.md +0 -40
  198. package/assets/docs/interop/ihe-conformance.md +0 -31
  199. package/assets/docs/requirement-spec.txt +0 -27
  200. package/assets/docs/security/auditing.md +0 -160
  201. package/assets/docs/security/authorization-matrix.md +0 -14
  202. package/assets/docs/security/authorization.md +0 -87
  203. package/assets/docs/security/data-classification.md +0 -38
  204. package/assets/docs/security/zero-trust.md +0 -76
  205. package/assets/docs/technology-constitution.md +0 -172
@@ -1,74 +0,0 @@
1
- # Framework Components — Integration Catalog
2
-
3
- > Pure technology (domain-agnostic). These docs are the authoritative integration contracts for
4
- > opt-in AppWeaver framework components. An AI coding agent (or a human) MUST read the relevant
5
- > component folder **before** wiring the component into a project.
6
- > Commands: `/aw-spec-add-component`.
7
-
8
- Each component is an optional NuGet-distributed building block that plugs into the standard
9
- AppWeaver layout (see [[folder-structure]]) via the same **provider/registry** registration
10
- pattern: `AddXxx(builder => builder.UseProvider(...), options => options.Provider = "Key")`.
11
- Your application code depends only on the component's **abstraction interface** — the concrete
12
- provider is a single registration decision and is swappable with zero changes to feature code.
13
-
14
- ## Available components
15
-
16
- | Component | Abstraction | Folder | Use when… |
17
- |---|---|---|---|
18
- | **Email** | `IEmailService` | [Email](./Email/README.md) | Sending transactional/notification email (MsGraph, SMTP, SendGrid, OAuth2, File). |
19
- | **QrGenerator** | `IQRGenerator` | [QrGenerator](./QrGenerator/README.md) | Generating QR-code PNG images from text. |
20
- | **Jobs** | `IJobScheduler` | [Jobs](./Jobs/README.md) | Background jobs — fire-and-forget, delayed, recurring, with progress + status polling. |
21
-
22
- ## How each component folder is organized
23
-
24
- Every folder contains two independent, agent-readable files:
25
-
26
- | File | Purpose | Read it to… |
27
- |---|---|---|
28
- | `README.md` | Reference — what the component is, its contract, packages, implementations, file map. | Understand the API surface and the available implementations. |
29
- | `integration.md` | **Agent runbook** — an ordered workflow that asks the user which implementation(s) to use, then adds the matching code. | Drive the integration interactively, end to end. |
30
-
31
- ## Integration workflow (every component's `integration.md` follows this shape)
32
-
33
- 1. The agent reads `README.md` + `integration.md` and locates the target projects.
34
- 2. The agent presents the component's **implementation catalog** as a selection list and **asks the
35
- user** which implementation(s) to wire — via a multi-select prompt (`AskUserQuestion`,
36
- `multiSelect: true`). The user may pick more than one (e.g. a production transport + a local-dev one).
37
- 3. The agent applies the **common steps** once, then the **per-implementation block** for each
38
- selected implementation, and sets the default provider.
39
- 4. The agent runs the **verification** checklist and reports what was added.
40
-
41
- ## Cross-cutting rules (apply to every component)
42
-
43
- - **R0.1** — NuGet versions live in `Directory.Packages.props` only (`<PackageVersion>`); project
44
- files reference the package **without** a `Version=` attribute (see [[dependency-policy]]).
45
- - **R0.2** — Register the component in the **startup/host project** — the one project that owns
46
- `Program.cs` + the ASP.NET Core web SDK. Its name is template-dependent: `<App>.Service` (Vertical
47
- Slice foundation), `<App>.API` (Modular Monolith foundation), and possibly other names as templates
48
- are added — so **resolve it by locating `Program.cs`, never by assuming a fixed project name**.
49
- These foundations have **no** separate `…Application` / `…Infrastructure` project. Put the
50
- `AddXxx(...)` registration in that project's `Extensions/InfrastructureServiceRegistration.cs`
51
- (`AddInfrastructure`) when that extension exists, otherwise directly in `Program.cs` before
52
- `builder.Build()`. Never register in a feature slice or domain code (see [[clean-architecture]]).
53
- - **R0.2a** — *(dual local/Aspire startup)* Some foundations split infrastructure registration across
54
- **two** methods that `Program.cs` selects at runtime — `if (isAspire) AddAspireInfrastructure(...)`
55
- (the Aspire path: `Extensions/AspireInfrastructureExtensions.cs`, typically PostgreSQL + Redis)
56
- `else AddInfrastructure(...)` (the local/dev path:
57
- `Extensions/InfrastructureServiceRegistration.cs`, typically SQLite + in-memory cache). When
58
- **both** methods exist, add the component registration to **both**, or the abstraction is
59
- unresolvable in whichever run mode you skipped (e.g. `IEmailService` throws at runtime under
60
- Aspire). The registration block is **identical** in both — copy it verbatim — *except*
61
- provider-specific calls (connection strings, `UseSqlite(...)` vs `UseNpgsql(...)`, cache provider),
62
- which must match each method's existing provider. If only `AddInfrastructure` (or only `Program.cs`)
63
- exists, register once as in R0.2.
64
- - **R0.3** — Inject the **abstraction** (`IEmailService`, `IQRGenerator`, `IJobScheduler`) into
65
- handlers — never the concrete provider type (see [[cqrs]]).
66
- - **R0.4** — Always set `options.Provider = "<Key>"` explicitly. Do not rely on the implicit
67
- "first registered" fallback — it is order-dependent and, for Email, hardcoded.
68
- - **R0.5** — Secrets (client secrets, API keys, SMTP passwords, connection strings) MUST NOT be
69
- committed. Use user-secrets / environment variables / key vault (see [[ai-rules]]).
70
-
71
- ## Related
72
-
73
- - [[folder-structure]] · [[clean-architecture]] · [[cqrs]] · [[vertical-slices]] ·
74
- [[dependency-policy]] · [[persistence]]
@@ -1,212 +0,0 @@
1
- # Domain-Driven Design Standards (Tactical Patterns)
2
-
3
- > Pure technology (domain-agnostic) — generic DDD tactical patterns; the business model, canonical aggregates + invariants are in [[domain-driven-design.domain]]. NON-NEGOTIABLE. Commands: `/aw-spec-specify`.
4
-
5
- > Note: this file lives under `domain/` because DDD is a domain-modeling methodology, but the
6
- > rules here are domain-agnostic and reusable. The business-specific model is in the companion
7
- > `.domain.md`.
8
-
9
- ## Ubiquitous language & bounded contexts
10
-
11
- - Use a consistent ubiquitous language across each bounded context.
12
- - Each bounded context = one module with `Domain / Features / Persistence / Shared`
13
- (see [[modular-monolith]]).
14
-
15
- ## Aggregate design
16
-
17
- - Every entity exposed to the Application layer is reached through an **Aggregate Root**.
18
- - Aggregate roots implement `IAggregateRoot`, `EntityBase<TId>`, and the
19
- audit/soft-delete/concurrency/domain-event interfaces they need:
20
- `IFullAuditedObject` or `IAuditableEntityBase`, `ISoftDeletable`, `IConcurrencyTracked`,
21
- `IHasDomainEvents`, `INamedEntity<TId>` when listable.
22
-
23
- ### Aggregate root responsibilities
24
-
25
- - Enforce all invariants for the aggregate.
26
- - Own the lifecycle of its child entities.
27
- - Raise domain events for state transitions.
28
-
29
- ### Child entity ownership
30
-
31
- - Child entities implement `IAggregateChild` and expose `GetAggregateRoot()`.
32
- - They are mutated **only** through methods on the aggregate root.
33
-
34
- ## Transactional / consistency boundaries
35
-
36
- - **Transaction boundary equals aggregate boundary**: a single command mutates a single
37
- aggregate per transaction.
38
- - Cross-aggregate effects flow through **domain events** or **follow-up commands**
39
- (see [[eventing]], [[cqrs]]).
40
-
41
- ## Strongly typed IDs
42
-
43
- - IDs are **strongly-typed Vogen value objects** (`<Aggregate>Id` as
44
- `[ValueObject<Guid>] partial struct`).
45
- - Raw `Guid` parameters at the Application boundary **MUST be wrapped** at the handler edge.
46
-
47
- ## Value objects
48
-
49
- - Value Objects are **sealed**, have **private constructors**, **validate in the constructor**,
50
- throw `DomainException` on invariant violations, and expose a `From(...)` factory.
51
-
52
- ## Domain events
53
-
54
- - Derive from `DomainEventBase`, are immutable, added inside aggregate methods via
55
- `AddDomainEvent(...)`, published explicitly by command handlers. See [[eventing]].
56
-
57
- ## Domain services, repositories, specifications
58
-
59
- - Invariants are enforced **inside the aggregate**; validators check request shape only.
60
- - Repository usage is limited to `IRepository<T>` / `IReadRepository<T>` + `Specification<T>`.
61
- - Specification pattern: query composition lives in the Domain. See [[persistence]].
62
-
63
- ## Domain exception handling
64
-
65
- - Exceptions are thrown by the Domain only (`DomainException`, `InvariantViolationException`).
66
- Application code returns `Result<T>` (see [[cqrs]]).
67
-
68
- ## Encapsulation, immutability, audit-awareness
69
-
70
- - **Rich domain model** — no public setters on aggregates, no business logic in handlers.
71
- - Soft-delete and audit behavior are first-class on protected aggregates
72
- (see [[persistence]], [[auditing]]).
73
-
74
- ## Anti-patterns (FORBIDDEN)
75
-
76
- - **Anemic domain models** — no public setters, no "manager/service" classes mutating
77
- aggregate state from outside, no primitive-typed IDs, no business logic in handlers.
78
- - Cross-aggregate EF navigation properties — reference by strongly-typed ID only.
79
- - Cross-bounded-context interaction except via Shared DTOs / `IMediator` / anti-corruption
80
- adapters.
81
-
82
- ## Canonical example (agent reference — `<SampleProjectName>` sample)
83
-
84
- Aggregate root with a strongly-typed Vogen ID, owned child collection, concurrency token,
85
- domain events, and an invariant enforced **inside** the aggregate:
86
-
87
- ```csharp
88
- // <SampleProjectName>.Service/Projects/Domain/Project.cs
89
- [ValueObject<Guid>]
90
- public partial struct ProjectId { }
91
-
92
- public class Project :
93
- EntityBase<ProjectId>, IAggregateRoot, IFullAuditedObject, IFieldAudited,
94
- ISoftDeletable, IConcurrencyTracked, IHasDomainEvents, INamedEntity<ProjectId>
95
- {
96
- private readonly List<ProjectTask> _tasks = new();
97
-
98
- public string Name { get; set; } = default!; // INamedEntity
99
- public ProjectCode Code { get; private set; } = default!; // value object
100
- public ProjectStatus Status { get; private set; }
101
- public TaskUserId? OwnerId { get; private set; } // cross-aggregate ref by ID only
102
- public IReadOnlyCollection<ProjectTask> Tasks => _tasks.AsReadOnly();
103
-
104
- public byte[] RowVersion { get; set; } = Array.Empty<byte>(); // IConcurrencyTracked
105
-
106
- private readonly List<DomainEventBase> _domainEvents = new();
107
- [NotMapped] public IEnumerable<DomainEventBase> DomainEvents => _domainEvents.AsReadOnly();
108
- public void ClearDomainEvents() => _domainEvents.Clear();
109
-
110
- private Project() { } // EF Core ctor
111
-
112
- public Project(string code, string name, DateOnly startDate, TaskUserId? ownerId)
113
- {
114
- Id = ProjectId.From(Guid.NewGuid());
115
- Code = ProjectCode.From(code); // VO validates in its ctor
116
- Name = ProjectTitle.From(name).Value;
117
- Status = ProjectStatus.Planning;
118
- OwnerId = ownerId;
119
- AddDomainEvent(new ProjectCreatedEvent(Id.Value, Code.Value, Name));
120
- }
121
-
122
- // Invariant lives in the aggregate — never in the handler/validator.
123
- public ProjectTask AddTask(string title, TaskPriority priority)
124
- {
125
- if (Status is ProjectStatus.Cancelled or ProjectStatus.Archived)
126
- throw new DomainException("Cannot add tasks to a Cancelled or Archived project.");
127
- var task = new ProjectTask(Id, title, priority);
128
- _tasks.Add(task);
129
- AddDomainEvent(new TaskCreatedEvent(Id.Value, task.Id.Value, task.Title.Value));
130
- return task;
131
- }
132
-
133
- private void AddDomainEvent(DomainEventBase e) => _domainEvents.Add(e);
134
- }
135
- ```
136
-
137
- Value object — sealed, private ctor, validates in the ctor, `From(...)` factory,
138
- throws `DomainException`:
139
-
140
- ```csharp
141
- // <SampleProjectName>.Service/Projects/Domain/ProjectCode.cs
142
- public sealed class ProjectCode : IEquatable<ProjectCode>
143
- {
144
- private static readonly Regex _valid = new(@"^[A-Z0-9][A-Z0-9\-]{1,14}$", RegexOptions.Compiled);
145
- public string Value { get; private set; } = default!;
146
-
147
- private ProjectCode() { }
148
- private ProjectCode(string value)
149
- {
150
- if (string.IsNullOrWhiteSpace(value))
151
- throw new DomainException("Project code cannot be empty.");
152
- var trimmed = value.Trim().ToUpperInvariant();
153
- if (!_valid.IsMatch(trimmed))
154
- throw new DomainException("Project code must be uppercase alphanumeric with hyphens.");
155
- Value = trimmed;
156
- }
157
-
158
- public static ProjectCode From(string value) => new(value);
159
- public bool Equals(ProjectCode? o) => o is not null && Value == o.Value;
160
- public override bool Equals(object? obj) => Equals(obj as ProjectCode);
161
- public override int GetHashCode() => HashCode.Combine(Value);
162
- }
163
- ```
164
-
165
- Child entity — implements `IAggregateChild`, exposes `GetAggregateRoot()`, has only `private`
166
- setters, and is mutated **only** through methods the parent aggregate calls:
167
-
168
- ```csharp
169
- // <SampleProjectName>.Service/Projects/Domain/ProjectTask.cs
170
- [ValueObject<Guid>]
171
- public partial struct ProjectTaskId { }
172
-
173
- public class ProjectTask : EntityBase<ProjectTaskId>, IAggregateChild
174
- {
175
- public ProjectId ProjectId { get; private set; } // FK back to the root
176
- public TaskTitle Title { get; private set; } = default!; // value object
177
- public ProjectTaskStatus Status { get; private set; }
178
- public TaskUserId? AssigneeId { get; private set; } // cross-aggregate ref by ID
179
-
180
- public Project Project { get; private set; } = default!; // EF-only nav, private setter
181
- public object GetAggregateRoot() => Project; // IAggregateChild
182
-
183
- private ProjectTask() { } // EF Core ctor
184
- public ProjectTask(ProjectId projectId, string title, TaskPriority priority)
185
- {
186
- Id = ProjectTaskId.From(Guid.NewGuid());
187
- ProjectId = projectId;
188
- Title = TaskTitle.From(title);
189
- Status = ProjectTaskStatus.Open;
190
- Priority = priority;
191
- }
192
-
193
- // State-machine invariant lives on the child; the parent calls it (project.ChangeTaskStatus).
194
- public void ChangeStatus(ProjectTaskStatus newStatus)
195
- {
196
- if (Status == ProjectTaskStatus.Cancelled)
197
- throw new DomainException("A cancelled task cannot be re-opened.");
198
- Status = newStatus;
199
- }
200
-
201
- public void AssignTo(TaskUserId assigneeId) => AssigneeId = assigneeId;
202
- }
203
- ```
204
-
205
- > The aggregate root mutates children only through its own methods (e.g. `Project.AssignTask`
206
- > calls `task.AssignTo(...)` and raises the domain event) — callers never touch `ProjectTask`
207
- > directly. EF mapping for the owned collection is in [[persistence]].
208
-
209
- ## Related
210
-
211
- - [[modular-monolith]] · [[clean-architecture]] · [[cqrs]] · [[persistence]] ·
212
- [[eventing]] · [[domain-driven-design.domain]]
@@ -1,34 +0,0 @@
1
- # AI Operational Rules — Healthcare Domain Addenda
2
-
3
- > Technology base: [[ai-rules]]. Commands: **ALL**.
4
-
5
- ## Context & codes
6
- - FHIR types: use the **official FHIR .NET SDK**, version-matched (R4/R5) to the endpoint (see [[fhir]]).
7
- - Confirm coded values against the Terminology module's value sets; never invent ICD/SNOMED/LOINC/CPT codes (see [[terminology]]).
8
-
9
- ## Generation
10
- - A complete slice adds a FHIR projector + FHIR-validator test when applicable (see [[fhir]], [[testing.domain]]).
11
- - Generated FHIR resources MUST honor declared IG profiles and pass the FHIR validator (see [[fhir]]).
12
- - Comments are reserved for clinical intent (generic rule in [[ai-rules]]).
13
-
14
- ## PHI masking
15
- - MUST NOT log, echo, or commit any field of `Patient`/`Encounter`/`Observation`/`MedicationRequest`/`ClinicalNote`/`DiagnosticReport`/`Claim`/`Coverage` other than the strongly-typed ID.
16
- - Apply field-level redaction in every generated example payload (see [[data-classification.domain]], [[hipaa]]).
17
-
18
- ## Tests
19
- - MUST use the synthetic-PHI fixture library (`<SampleProjectName>.TestFixtures`); never inline fabricated PHI.
20
- - Never invent ICD/SNOMED/LOINC/CPT/HCPCS/RxNorm/CVX codes — use a sentinel constant (see [[testing.domain]], [[terminology]]).
21
-
22
- ## Security-touching code
23
- - MUST NOT modify authorization handlers, scope evaluators, consent checks, audit emitters, or encryption code without an explicit security-reviewer-attached prompt (see [[authorization.domain]], [[auditing.domain]], [[consent]]).
24
- - FHIR profile changes: regenerate the IG artifacts + CapabilityStatement in the **same commit** (see [[fhir]], [[api-versioning.domain]]).
25
-
26
- ## Refusal conditions — extend [[ai-rules]]; refuse to:
27
- - Embed any PHI test fixture in code/config.
28
- - Disable a consent check globally.
29
- - Bypass Interop adapters by writing aggregates directly from an external feed (see [[hl7]], [[eventing.domain]]).
30
- - Generate de-identification logic without a documented method (Safe Harbor / Expert Determination) (see [[hipaa]]).
31
- - Return PHI in error messages, logs, or trace attributes (see [[data-classification.domain]]).
32
-
33
- ## Related
34
- - [[ai-rules]] · [[fhir]] · [[terminology]] · [[hipaa]] · [[consent]] · [[data-classification.domain]] · [[auditing.domain]] · [[authorization.domain]] · [[testing.domain]]
@@ -1,17 +0,0 @@
1
- # API Versioning — Healthcare Domain Addenda (FHIR)
2
-
3
- > Technology base: [[api-versioning]]. Commands: `/aw-spec-specify`, `/aw-spec-gate`.
4
-
5
- ## FHIR versioning
6
- - R4 default; R5 is **additive** under a versioned path (`/fhir/R5/...`).
7
- - Breaking FHIR changes require a **new version path** + a published CapabilityStatement diff (see [[fhir]]).
8
- - FHIR list endpoints use Bundle/searchset semantics (`_count`, `_offset`/`_page`, `_total`).
9
-
10
- ## Concurrency at the edge
11
- - FHIR resources honor `If-Match` via the aggregate's concurrency token → FHIR **weak** ETag at the projection boundary (see [[persistence.domain]]).
12
-
13
- ## CapabilityStatement
14
- - Published for FHIR (beyond generic OpenAPI/AsyncAPI); regenerates cleanly in CI; diff reviewed for breaking changes (see [[fhir]], [[coding-standards.domain]]).
15
-
16
- ## Related
17
- - [[api-versioning]] · [[fhir]] · [[persistence.domain]] · [[coding-standards.domain]]
@@ -1,97 +0,0 @@
1
- # Auditing — Healthcare Domain Addenda (ATNA)
2
-
3
- > Technology base: [[auditing]]. NON-NEGOTIABLE. Consumed by `/aw-spec-specify` (LIFTS the
4
- > auditing requirement into the spec) and `/aw-spec-gate` (VALIDATES the spec/design realise it).
5
- > `/aw-spec-design` and `/aw-spec-implement` never load this file — auditing reaches them through
6
- > the spec's **declared audit level per aggregate**, and the enablement mechanics live in the
7
- > technical base [[auditing]]. Keep this file technology-agnostic (levels + rules, **no code**).
8
-
9
- ## Two auditing levels (framework-supported)
10
-
11
- AppWeaver auditing has exactly **two levels** for entity state-change auditing; the framework's
12
- audit interceptor populates every audit field automatically (handlers NEVER assign audit fields):
13
-
14
- | Level | Captures | Depth |
15
- |---|---|---|
16
- | **Basic** | who/when lifecycle — created / modified / (soft-)deleted, by whom and when; one audit entry per aggregate root per save (who · action · resource type · resource id · timestamp · correlation) | entity-level (Created/Updated/Deleted) — **no** before/after values |
17
- | **Advanced** | everything Basic captures **plus field-level before/after** — each changed property's previous → new value | entity-level **+ property-level previous/new value** |
18
-
19
- - **Advanced is REQUIRED whenever the spec asks for "previous value / new value"** — before/after
20
- values exist ONLY at the Advanced tier.
21
- - Child entities fold their changes into the owning aggregate root's audit entry.
22
- - Beyond state-change auditing, healthcare additionally requires **PHI access (read) auditing** —
23
- a separate mandatory concern (see below), not one of the two write-levels.
24
-
25
- > Code realisation — marker interfaces (Basic = `IAuditedObject` / `IFullAuditedObject`; Advanced =
26
- > `+ IFieldAudited`), the one-time composition, and the audit query API — lives in the technical
27
- > base. See [[auditing]]; `/aw-spec-design` and `/aw-spec-implement` get the HOW from there.
28
-
29
- ## Aggregate assignment rule (how specify decides the level)
30
-
31
- `/aw-spec-specify` MUST assign an audit level to every aggregate it models and LIFT it into the
32
- spec as an explicit, developer-editable declaration:
33
-
34
- - Every **PHI-bearing main aggregate** of the requirement → **Advanced** (regulated PHI change
35
- history requires field-level before/after).
36
- - **Supporting aggregates** (collaborating/referenced roots, no PHI) → **Basic** by default.
37
- - A developer MAY raise or lower a level afterwards by editing the spec declaration — the level is
38
- a **spec** decision, never a design or implementation one. `/aw-spec-design` then follows the
39
- declared level.
40
-
41
- Lift it as one line the gate can check, e.g. under Constraints:
42
-
43
- > **CN-0xx**: Auditing level — `<PHIAggregate>` uses **Advanced** (field-level before/after)
44
- > auditing; `<SupportingAggregate…>` use **Basic** (lifecycle) auditing; all PHI access and change
45
- > is audit-mandatory and append-only. — lifted from auditing.domain.
46
-
47
- Declare the **level** — do NOT enumerate the audit record's field shape in the spec (next section).
48
-
49
- ## PHI access auditing (ATNA — mandatory)
50
-
51
- Distinct from state-change auditing: every PHI **read/access**, authentication, consent change,
52
- export, and break-the-glass MUST emit an audit event (a PHI-access-audit pipeline behavior runs on
53
- every mediator request). Audit-mandatory triggers:
54
-
55
- - Every PHI **read** and **write**; every authentication; every consent change; every export
56
- (`$export`, bulk / report download); every **break-the-glass**; every privileged admin action;
57
- every IdP / role change. See [[authorization.domain]].
58
-
59
- ## Spec-required vs framework-emitted (what the gate checks)
60
-
61
- The audit record's field shape is **framework-emitted** — the interceptor populates it; it is NOT
62
- spec-authored content. Fields the platform always supplies:
63
-
64
- - `timestamp`, acting `subjectId` (user), `action`, `resourceType`, `resourceId`, `sourceIp`,
65
- `correlationId`, `tenantId`, and the physical record layout.
66
-
67
- Split for the gate:
68
-
69
- - **Spec-required** (specify lifts it; the gate checks the spec + design carry it): the **audit
70
- level per aggregate**; that PHI access/change is **audit-mandatory** and **append-only**; and the
71
- ATNA business capture — **patientId** (whose PHI), **subjectRole**, **outcome** (grant/deny),
72
- **reason** (break-the-glass justification), and **Previous Value / New Value** (Advanced).
73
- - **Framework-emitted** (NEVER a spec/design gap — always populated by the platform): the fields
74
- listed above. The gate MUST NOT raise a LIFT-FAILURE for them; they are guaranteed by the
75
- framework, not authored in the spec.
76
-
77
- ## Queryable audit (framework-provided)
78
-
79
- The audit store is queryable out of the box (by resource identity, by user/subject, by tenant, and
80
- by action/time with paging — see [[auditing]]). A spec "queryable audit trail for compliance /
81
- ATNA review" success criterion is therefore satisfied by the framework's audit query API; design
82
- references it and does **NOT** need a bespoke audit read port/model.
83
-
84
- ## Retention & format
85
-
86
- - **Append-only**; retained **>= 6 years**; exportable as FHIR `AuditEvent` (see
87
- [[domain-driven-design.domain]], [[persistence.domain]]).
88
-
89
- ## Telemetry & breach
90
-
91
- - **PHI, full SSN, payment-card numbers, government IDs MUST NEVER** appear in logs, metric labels,
92
- exception messages, or traces (see [[data-classification.domain]]).
93
- - Anomalous PHI access (volume spikes, off-hours mass reads, repeated denials) emits **Critical**
94
- alerts (see [[hipaa]]).
95
-
96
- ## Related
97
- - [[auditing]] · [[hipaa]] · [[data-classification.domain]] · [[authorization.domain]] · [[consent]] · [[fhir]] · [[cqrs.domain]] · [[persistence.domain]] · [[domain-driven-design.domain]]
@@ -1,26 +0,0 @@
1
- # Authorization — Healthcare Domain Addenda
2
-
3
- > Technology base: [[authorization]]. Commands: `/aw-spec-constitution`, `/aw-spec-specify`, `/aw-spec-gate`.
4
-
5
- ## Roles
6
- `SystemAdmin`, `ComplianceOfficer`, `Physician`, `Nurse`, `LabTechnician`, `Radiologist`, `Pharmacist`, `BillingClerk`, `FrontDesk`, `Patient`, `ExternalSystem`, `ResearchAnalyst` (de-identified scope only). Per-route matrix: `docs/security/authorization-matrix.md`.
7
-
8
- ## SMART-on-FHIR scopes
9
- - Scopes (`patient/*.read`, `user/Observation.read`, `system/*.write`, `launch/patient`) MUST be enforced on **every FHIR endpoint**.
10
- - App launch (EHR + standalone): **PKCE mandatory; implicit flow FORBIDDEN** (see [[fhir]]).
11
-
12
- ## PHI minimum-necessary
13
- - The PHI-access pipeline returns only fields the caller's role + scopes authorize; field-level redaction lives in projection extensions (see [[hipaa]], [[data-classification.domain]]).
14
-
15
- ## Consent & break-the-glass
16
- - Pipeline checks **consent state** before releasing PHI outside the treating-provider context (see [[consent]]).
17
- - Break-the-glass = explicit emergency-access command: documented reason + high-priority audit + real-time alert (see [[consent]], [[auditing.domain]]).
18
-
19
- ## Audit-mandatory
20
- Every PHI read/write, authentication, consent change, export, break-the-glass, privileged admin action, IdP/role change (see [[auditing.domain]]).
21
-
22
- ## Anonymous allowlist
23
- - Adds `/metadata` (FHIR CapabilityStatement) to the generic allowlist (see [[fhir]]).
24
-
25
- ## Related
26
- - [[authorization]] · [[hipaa]] · [[consent]] · [[auditing.domain]] · [[data-classification.domain]] · [[fhir]]
@@ -1,20 +0,0 @@
1
- # Glossary — Clinical Terms
2
-
3
- > Ubiquitous language for clinical aggregates. Commands: `/aw-spec-constitution`, `/aw-spec-specify`. See [[domain-driven-design.domain]] (modeling) + [[terminology]] (coding).
4
-
5
- | Term | Definition |
6
- |---|---|
7
- | **MRN** | Patient identifier, **unique per tenant** on `Patient` (Patients); cross-referenced via PIX/PDQ (see [[integration-terms]]). |
8
- | **Encounter** | Clinical interaction (inpatient/outpatient/emergency); owns Admission/Transfer/Discharge; not Closeable with open Orders/Results/ChargeItems/unsigned ClinicalNotes (Encounters). |
9
- | **Observation** | A discrete measurement/finding — vitals/social history (EMR) or lab result (Lab); coded LOINC/SNOMED (see [[terminology]]). |
10
- | **Coverage** | Patient insurance record (Insurance); required (or documented self-pay) before admission. |
11
- | **PractitionerRole** | A Practitioner's role within an Organization/Location (Identity) — drives role-based auth (see [[authorization.domain]]). |
12
- | **CarePlan** | A planned set of clinical activities (EMR). |
13
- | **DiagnosticReport** | A finalized result set with interpretation — radiology (Radiology) or lab (Lab). |
14
- | **ClinicalNote** | Documentation entry; once **Signed** immutable; corrections are addenda; deletion forbidden (supersede via Amend). |
15
- | **ProblemList / AllergyIntolerance / MedicationStatement / Immunization / Procedure / ServiceRequest** | EMR aggregates; coded SNOMED/ICD/RxNorm/CVX as applicable. |
16
- | **MedicationRequest / MedicationDispense / MedicationAdministration** | Pharmacy aggregates; dispense blocked on allergy/interaction/contraindication without documented override. |
17
- | **Consent** | First-class aggregate governing PHI disclosure; withdrawal blocks disclosure immediately (see [[consent]]). |
18
-
19
- ## Related
20
- - [[integration-terms]] · [[domain-driven-design.domain]] · [[terminology]] · [[fhir]]
@@ -1,26 +0,0 @@
1
- # Coding Standards — Healthcare Domain Addenda
2
-
3
- > Technology base: [[coding-standards]]. Commands: `/aw-spec-gate`.
4
-
5
- ## Coded value objects
6
- - Follow the FHIR pattern: `Codeable`, `Coding`, `Quantity`, `Period`, `Range`, `Ratio`, `Identifier`, `HumanName`, `Address`, `ContactPoint` (see [[terminology]]).
7
- - The Domain may additionally throw `ConsentDeniedException` (see [[consent]]).
8
-
9
- ## Forbidden patterns — extend [[coding-standards]]
10
- - **H1.** Hard delete of any clinical/financial/audit/PHI-bearing aggregate (see [[persistence.domain]]).
11
- - **H2.** Hard-coded IdP issuer / FHIR server / HL7 endpoint URLs, or PHI test fixtures, in source.
12
- - **H3.** Logging/emitting any PHI element, full SSN/government ID (see [[data-classification.domain]]).
13
- - **H4.** Storing patient data (names, MRNs, DOBs, diagnoses, meds, labs, imaging) as free text when a coded vocabulary applies (see [[terminology]]).
14
- - **H5.** A second FHIR write path bypassing the canonical aggregate (see [[fhir]]).
15
- - **H6.** Storing/transmitting PHI to any non-production environment (see [[hipaa]]).
16
- - **H7.** FHIR errors not using `OperationOutcome` with HTTP 422 (see [[fhir]]).
17
-
18
- ## Quality gates — extend [[coding-standards]]
19
- - **HG1.** FHIR CapabilityStatement regenerates cleanly; diff reviewed (see [[fhir]]).
20
- - **HG2.** FHIR validator passes for every modified resource/profile/example.
21
- - **HG3.** Grep: no PHI string literals in tests outside sanctioned fixtures; no MediatR/AutoMapper.
22
- - **HG4.** PHI-logging analyzer passes — no Patient/Encounter/Observation/MedicationRequest field logged except the ID (see [[data-classification.domain]]).
23
- - **HG5.** Security-reviewer sign-off for any PHI-access change.
24
-
25
- ## Related
26
- - [[coding-standards]] · [[terminology]] · [[fhir]] · [[hipaa]] · [[consent]] · [[data-classification.domain]] · [[persistence.domain]]
@@ -1,100 +0,0 @@
1
- # Healthcare Domain — Command → Rule-File Map
2
-
3
- Per-command list of the **healthcare domain** rule files loaded (via `resolve-domain`
4
- + the `domain-select` module, into the sticky standards set) for the spec-anchored
5
- orchestrator pipeline.
6
-
7
- **The model (see `.aw-spec/RULE-PARTITION.md`):** domain files feed
8
- only three consumers — **specify** (authors them into the spec as FR/BR/CN-/DC-/IC-),
9
- **constitution** (the domain principles), and the **gates** (conformance checklist).
10
- **design** and **implement** load **NO** domain file — the domain reaches them solely
11
- through the spec/design (as CN-/DC-/IC- ids).
12
-
13
- - All paths are workspace-relative and live in `docs/domainspecs/healthcare/`.
14
- - `resolve-domain --command <name>` collects the `- ` bullets under `## /<name>`.
15
- - This file is the **canonical source** for the healthcare domain mapping; `/aw-spec-orch
16
- select-domain` selects this folder as active.
17
-
18
- ---
19
-
20
- ## /aw-spec-constitution
21
- <!-- Domain identity/regulatory/interop sources that become domain principles XVI+ in
22
- constitution.domain.md (authored from docs/healthcare-constitution.my-ref.md + these). -->
23
- - docs/domainspecs/healthcare/domain-requirements.md
24
- - docs/domainspecs/healthcare/clinical-terms.md
25
- - docs/domainspecs/healthcare/terminology.md
26
- - docs/domainspecs/healthcare/consent.md
27
- - docs/domainspecs/healthcare/hipaa.md
28
- - docs/domainspecs/healthcare/fhir.md
29
- - docs/domainspecs/healthcare/hl7.md
30
- - docs/domainspecs/healthcare/dicom.md
31
- - docs/domainspecs/healthcare/data-classification.domain.md
32
- - docs/domainspecs/healthcare/auditing.domain.md
33
- - docs/domainspecs/healthcare/authorization.domain.md
34
- - docs/domainspecs/healthcare/zero-trust.domain.md
35
- - docs/domainspecs/healthcare/ai-rules.domain.md
36
-
37
- ## /aw-spec-specify
38
- <!-- The FULL domain set. Specify models the domain COMPLETELY and LIFTS the constraint
39
- overlays into the spec's CN-/DC-/IC- sections (design/implement never see these files). -->
40
- - docs/domainspecs/healthcare/domain-requirements.md
41
- - docs/domainspecs/healthcare/domain-driven-design.domain.md
42
- - docs/domainspecs/healthcare/clinical-terms.md
43
- - docs/domainspecs/healthcare/terminology.md
44
- - docs/domainspecs/healthcare/integration-terms.md
45
- - docs/domainspecs/healthcare/consent.md
46
- - docs/domainspecs/healthcare/hipaa.md
47
- - docs/domainspecs/healthcare/fhir.md
48
- - docs/domainspecs/healthcare/hl7.md
49
- - docs/domainspecs/healthcare/dicom.md
50
- - docs/domainspecs/healthcare/data-classification.domain.md
51
- - docs/domainspecs/healthcare/persistence.domain.md
52
- - docs/domainspecs/healthcare/cqrs.domain.md
53
- - docs/domainspecs/healthcare/eventing.domain.md
54
- - docs/domainspecs/healthcare/auditing.domain.md
55
- - docs/domainspecs/healthcare/authorization.domain.md
56
- - docs/domainspecs/healthcare/zero-trust.domain.md
57
- - docs/domainspecs/healthcare/api-versioning.domain.md
58
- - docs/domainspecs/healthcare/vertical-slices.domain.md
59
-
60
- ## /aw-spec-design
61
- _None — design loads no domain file. Domain reaches design only through the spec (BR-/CN-/DC-/IC-)._
62
-
63
- ## /aw-spec-implement
64
- _None — implement loads no domain file. Domain reaches implement only through design.md. Framework
65
- components are added separately via `/aw-spec-orch add-component`._
66
-
67
- ## /aw-spec-gate
68
- <!-- Conformance checklist for the gates (analyze-design · analyze-slice): the domain-derived
69
- constraints design/implement were NOT given as authoring input, VALIDATED against the
70
- output. Domain re-enters here as a check, never as authoring input. -->
71
- - docs/domainspecs/healthcare/persistence.domain.md
72
- - docs/domainspecs/healthcare/cqrs.domain.md
73
- - docs/domainspecs/healthcare/eventing.domain.md
74
- - docs/domainspecs/healthcare/auditing.domain.md
75
- - docs/domainspecs/healthcare/authorization.domain.md
76
- - docs/domainspecs/healthcare/zero-trust.domain.md
77
- - docs/domainspecs/healthcare/data-classification.domain.md
78
- - docs/domainspecs/healthcare/api-versioning.domain.md
79
- - docs/domainspecs/healthcare/vertical-slices.domain.md
80
- - docs/domainspecs/healthcare/folder-structure.domain.md
81
- - docs/domainspecs/healthcare/coding-standards.domain.md
82
- - docs/domainspecs/healthcare/dependency-policy.domain.md
83
- - docs/domainspecs/healthcare/testing.domain.md
84
- - docs/domainspecs/healthcare/ai-rules.domain.md
85
-
86
- ---
87
-
88
- ## Quick reference (command → domain file count)
89
-
90
- | Command | Domain rule files | Role |
91
- |---|---|---|
92
- | /aw-spec-constitution | 13 | domain principles (XVI+) |
93
- | /aw-spec-specify | 19 | author into spec (lift → CN-/DC-/IC-) |
94
- | /aw-spec-design | 0 | none — spec is the only domain input |
95
- | /aw-spec-implement | 0 | none — design is the only domain input |
96
- | /aw-spec-gate | 14 | conformance checklist (validate, don't author) |
97
-
98
- > Retired in the orchestrator pipeline: `/aw-spec-plan`, `/aw-spec-tasks`, `/aw-spec-taskplan`,
99
- > `/aw-spec-clarify`, `/aw-spec-analyze` (clarify folds into specify; plan/tasks into design). The
100
- > collapsed tiers `/aw-spec-fast-implement` and `/aw-spec-minimal-implementation` are pending a ruling.