aw-spec-cli 0.1.4 ā 0.1.5
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.
- package/assets/.agents/agent.json +28 -0
- package/assets/.agents/skills/aw-spec-orch/SKILL.md +56 -0
- package/assets/.agents/skills/aw-spec-orch-demo/SKILL.md +59 -0
- package/assets/.aw-spec/DESIGN-FORMAT.md +151 -0
- package/assets/.aw-spec/ORCH-DIALECT.md +156 -0
- package/assets/.aw-spec/RULE-PARTITION.md +126 -0
- package/assets/.aw-spec/extensions/agent-context/extension.yml +12 -9
- package/assets/.aw-spec/extensions.yml +12 -19
- package/assets/.aw-spec/integrations/aw-spec.manifest.json +1 -9
- package/assets/.aw-spec/interpreter/run-skill.py +1158 -0
- package/assets/.aw-spec/orchestrator/AGENT-PROFILE.md +94 -0
- package/assets/.aw-spec/orchestrator/README.md +300 -0
- package/assets/.aw-spec/orchestrator/adapters/claude_agent_sdk.py +74 -0
- package/assets/.aw-spec/orchestrator/adapters/google_antigravity.py +74 -0
- package/assets/.aw-spec/orchestrator/modules/delta-design.orch.yaml +105 -0
- package/assets/.aw-spec/orchestrator/modules/delta-spec.orch.yaml +79 -0
- package/assets/.aw-spec/orchestrator/modules/domain-select.orch.yaml +81 -0
- package/assets/.aw-spec/orchestrator/modules/tech-select.orch.yaml +75 -0
- package/assets/.aw-spec/orchestrator/orchestrator.py +1721 -0
- package/assets/.aw-spec/orchestrator/rev-templates/ai-rules.reference.md +40 -0
- package/assets/.aw-spec/orchestrator/rev-templates/comandrulemap.skeleton.md +59 -0
- package/assets/.aw-spec/orchestrator/rev-templates/commandtechrulemap.skeleton.md +97 -0
- package/assets/.aw-spec/orchestrator/rev-templates/domain-constitution.skeleton.md +61 -0
- package/assets/.aw-spec/orchestrator/rev-templates/domain-requirements.skeleton.md +48 -0
- package/assets/.aw-spec/orchestrator/rev-templates/domain-rule-file.skeleton.md +39 -0
- package/assets/.aw-spec/orchestrator/rev-templates/technical-constitution.skeleton.md +106 -0
- package/assets/.aw-spec/orchestrator/rev-templates/technical-rule-file.skeleton.md +54 -0
- package/assets/.aw-spec/orchestrator/workflows/_smoke.orch.yaml +160 -0
- package/assets/.aw-spec/orchestrator/workflows/aw-spec-add-component.orch.yaml +244 -0
- package/assets/.aw-spec/orchestrator/workflows/aw-spec-adopt.orch.yaml +775 -0
- package/assets/.aw-spec/orchestrator/workflows/aw-spec-analyze-delta-design.orch.yaml +248 -0
- package/assets/.aw-spec/orchestrator/workflows/aw-spec-analyze-design.orch.yaml +261 -0
- package/assets/.aw-spec/orchestrator/workflows/aw-spec-analyze-slice.orch.yaml +425 -0
- package/assets/.aw-spec/orchestrator/workflows/aw-spec-build.orch.yaml +188 -0
- package/assets/.aw-spec/orchestrator/workflows/aw-spec-characterize.orch.yaml +474 -0
- package/assets/.aw-spec/orchestrator/workflows/aw-spec-close-delta.orch.yaml +181 -0
- package/assets/.aw-spec/orchestrator/workflows/aw-spec-constitution.orch.yaml +284 -0
- package/assets/.aw-spec/orchestrator/workflows/aw-spec-demo.orch.yaml +103 -0
- package/assets/.aw-spec/orchestrator/workflows/aw-spec-dependency-tree.orch.yaml +69 -0
- package/assets/.aw-spec/orchestrator/workflows/aw-spec-deploy.orch.yaml +85 -0
- package/assets/.aw-spec/orchestrator/workflows/aw-spec-design.orch.yaml +382 -0
- package/assets/.aw-spec/orchestrator/workflows/aw-spec-finalize-delta.orch.yaml +382 -0
- package/assets/.aw-spec/orchestrator/workflows/aw-spec-foundation.orch.yaml +246 -0
- package/assets/.aw-spec/orchestrator/workflows/aw-spec-implement-delta.orch.yaml +231 -0
- package/assets/.aw-spec/orchestrator/workflows/aw-spec-implement.orch.yaml +258 -0
- package/assets/.aw-spec/orchestrator/workflows/aw-spec-inventory.orch.yaml +236 -0
- package/assets/.aw-spec/orchestrator/workflows/aw-spec-onboard.orch.yaml +949 -0
- package/assets/.aw-spec/orchestrator/workflows/aw-spec-parity.orch.yaml +293 -0
- package/assets/.aw-spec/orchestrator/workflows/aw-spec-run.orch.yaml +177 -0
- package/assets/.aw-spec/orchestrator/workflows/aw-spec-select-domain.orch.yaml +79 -0
- package/assets/.aw-spec/orchestrator/workflows/aw-spec-select-feature.orch.yaml +128 -0
- package/assets/.aw-spec/orchestrator/workflows/aw-spec-specify.orch.yaml +412 -0
- package/assets/.aw-spec/scripts/bash/aw-inventory.sh +14 -0
- package/assets/.aw-spec/scripts/bash/aw-parity.sh +13 -0
- package/assets/.aw-spec/scripts/bash/aw-rev-constitution.sh +13 -0
- package/assets/.aw-spec/scripts/bash/aw-spec-actions.sh +1899 -0
- package/assets/.aw-spec/scripts/bash/aw-xref.sh +15 -0
- package/assets/.aw-spec/scripts/bash/common.sh +11 -60
- package/assets/.aw-spec/scripts/powershell/aw-inventory.ps1 +14 -0
- package/assets/.aw-spec/scripts/powershell/aw-parity.ps1 +13 -0
- package/assets/.aw-spec/scripts/powershell/aw-rev-constitution.ps1 +13 -0
- package/assets/.aw-spec/scripts/powershell/aw-spec-actions.ps1 +1563 -0
- package/assets/.aw-spec/scripts/powershell/aw-xref.ps1 +15 -0
- package/assets/.aw-spec/scripts/python/aw-inventory.py +683 -0
- package/assets/.aw-spec/scripts/python/aw-parity.py +380 -0
- package/assets/.aw-spec/scripts/python/aw-rev-constitution.py +312 -0
- package/assets/.aw-spec/scripts/python/aw-xref.py +1330 -0
- package/assets/.aw-spec/scripts/python/validate_okf.py +349 -0
- package/assets/.aw-spec/templates/constitution-domain-template.md +75 -0
- package/assets/.aw-spec/templates/constitution-technical-template.md +70 -0
- package/assets/.aw-spec/templates/delta-design-template.md +69 -0
- package/assets/.aw-spec/templates/delta-spec-template.md +60 -0
- package/assets/.aw-spec/templates/design-template.md +383 -0
- package/assets/.aw-spec/templates/okf-concept-template.md +103 -0
- package/assets/.aw-spec/templates/parity-manifest-template.json +49 -0
- package/assets/.aw-spec/templates/source-map-template.md +85 -0
- package/assets/.aw-spec/templates/spec-template.md +192 -71
- package/assets/.claude/agent.json +27 -0
- package/assets/.claude/skills/aw-spec-orch/SKILL.md +55 -0
- package/assets/.claude/skills/aw-spec-orch-demo/SKILL.md +59 -0
- package/assets/.kilocode/agent.json +28 -0
- package/assets/.kilocode/workflows/aw-spec-orch-demo.md +59 -0
- package/assets/.kilocode/workflows/aw-spec-orch.md +55 -0
- package/assets/docs/architecture/clean-architecture.md +1 -1
- package/assets/docs/architecture/cqrs.md +1 -1
- package/assets/docs/architecture/eventing.md +1 -1
- package/assets/docs/architecture/folder-structure.md +1 -1
- package/assets/docs/architecture/modular-monolith.md +1 -1
- package/assets/docs/architecture/persistence.md +1 -1
- package/assets/docs/architecture/testing.md +1 -1
- package/assets/docs/architecture/vertical-slices.md +1 -1
- package/assets/docs/components/Email/README.md +1 -1
- package/assets/docs/components/Jobs/README.md +1 -1
- package/assets/docs/components/QrGenerator/README.md +1 -1
- package/assets/docs/components/README.md +1 -1
- package/assets/docs/domain/domain-driven-design.md +1 -1
- package/assets/docs/domainspecs/healthcare/api-versioning.domain.md +1 -1
- package/assets/docs/domainspecs/healthcare/auditing.domain.md +86 -18
- package/assets/docs/domainspecs/healthcare/authorization.domain.md +1 -1
- package/assets/docs/domainspecs/healthcare/clinical-terms.md +1 -1
- package/assets/docs/domainspecs/healthcare/coding-standards.domain.md +1 -1
- package/assets/docs/domainspecs/healthcare/comandrulemap.md +58 -124
- package/assets/docs/domainspecs/healthcare/commandtechrulemap.md +119 -0
- package/assets/docs/domainspecs/healthcare/consent.md +1 -1
- package/assets/docs/domainspecs/healthcare/cqrs.domain.md +1 -1
- package/assets/docs/domainspecs/healthcare/data-classification.domain.md +1 -1
- package/assets/docs/domainspecs/healthcare/dependency-policy.domain.md +1 -1
- package/assets/docs/domainspecs/healthcare/dicom.md +1 -1
- package/assets/docs/domainspecs/healthcare/domain-driven-design.domain.md +1 -1
- package/assets/docs/domainspecs/healthcare/eventing.domain.md +1 -1
- package/assets/docs/domainspecs/healthcare/fhir.md +1 -1
- package/assets/docs/domainspecs/healthcare/folder-structure.domain.md +1 -1
- package/assets/docs/domainspecs/healthcare/hipaa.md +1 -1
- package/assets/docs/domainspecs/healthcare/hl7.md +1 -1
- package/assets/docs/domainspecs/healthcare/integration-terms.md +1 -1
- package/assets/docs/domainspecs/healthcare/persistence.domain.md +1 -1
- package/assets/docs/domainspecs/healthcare/terminology.md +1 -1
- package/assets/docs/domainspecs/healthcare/testing.domain.md +1 -1
- package/assets/docs/domainspecs/healthcare/vertical-slices.domain.md +1 -1
- package/assets/docs/domainspecs/healthcare/zero-trust.domain.md +1 -1
- package/assets/docs/domainspecs/pharma/api-versioning.domain.md +1 -1
- package/assets/docs/domainspecs/pharma/atc.md +1 -1
- package/assets/docs/domainspecs/pharma/auditing.domain.md +80 -16
- package/assets/docs/domainspecs/pharma/authorization.domain.md +1 -1
- package/assets/docs/domainspecs/pharma/coding-standards.domain.md +1 -1
- package/assets/docs/domainspecs/pharma/comandrulemap.md +64 -142
- package/assets/docs/domainspecs/pharma/commandtechrulemap.md +119 -0
- package/assets/docs/domainspecs/pharma/cqrs.domain.md +1 -1
- package/assets/docs/domainspecs/pharma/data-classification.domain.md +1 -1
- package/assets/docs/domainspecs/pharma/data-provenance.md +1 -1
- package/assets/docs/domainspecs/pharma/dependency-policy.domain.md +1 -1
- package/assets/docs/domainspecs/pharma/domain-driven-design.domain.md +1 -1
- package/assets/docs/domainspecs/pharma/eventing.domain.md +1 -1
- package/assets/docs/domainspecs/pharma/fhir.md +1 -1
- package/assets/docs/domainspecs/pharma/folder-structure.domain.md +1 -1
- package/assets/docs/domainspecs/pharma/hl7.md +1 -1
- package/assets/docs/domainspecs/pharma/idmp.md +1 -1
- package/assets/docs/domainspecs/pharma/integration-terms.md +1 -1
- package/assets/docs/domainspecs/pharma/ndc.md +1 -1
- package/assets/docs/domainspecs/pharma/persistence.domain.md +1 -1
- package/assets/docs/domainspecs/pharma/pharma-terms.md +1 -1
- package/assets/docs/domainspecs/pharma/product-lifecycle.domain.md +1 -1
- package/assets/docs/domainspecs/pharma/regulatory-compliance.md +1 -1
- package/assets/docs/domainspecs/pharma/terminology.md +1 -1
- package/assets/docs/domainspecs/pharma/testing.domain.md +1 -1
- package/assets/docs/domainspecs/pharma/vertical-slices.domain.md +1 -1
- package/assets/docs/domainspecs/pharma/zero-trust.domain.md +1 -1
- package/assets/docs/governance/api-versioning.md +1 -1
- package/assets/docs/governance/coding-standards.md +1 -1
- package/assets/docs/governance/dependency-policy.md +1 -1
- package/assets/docs/requirement-spec.txt +27 -0
- package/assets/docs/security/auditing.md +54 -11
- package/assets/docs/security/authorization.md +1 -1
- package/assets/docs/security/data-classification.md +1 -1
- package/assets/docs/security/zero-trust.md +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +7 -54
- package/dist/commands/init.js.map +1 -1
- package/dist/index.js +0 -2
- package/dist/index.js.map +1 -1
- package/dist/utils/paths.js +2 -2
- package/dist/utils/paths.js.map +1 -1
- package/package.json +1 -1
- package/assets/.agents/skills/aw-spec-addcomponent/SKILL.md +0 -129
- package/assets/.agents/skills/aw-spec-agent-context-update/SKILL.md +0 -31
- package/assets/.agents/skills/aw-spec-analyze/SKILL.md +0 -296
- package/assets/.agents/skills/aw-spec-checklist/SKILL.md +0 -374
- package/assets/.agents/skills/aw-spec-clarify/SKILL.md +0 -320
- package/assets/.agents/skills/aw-spec-constitution/SKILL.md +0 -194
- package/assets/.agents/skills/aw-spec-fast-implement/SKILL.md +0 -268
- package/assets/.agents/skills/aw-spec-foundation/SKILL.md +0 -358
- package/assets/.agents/skills/aw-spec-implement/SKILL.md +0 -279
- package/assets/.agents/skills/aw-spec-minimal-implementation/SKILL.md +0 -209
- package/assets/.agents/skills/aw-spec-plan/SKILL.md +0 -221
- package/assets/.agents/skills/aw-spec-select-domain/SKILL.md +0 -73
- package/assets/.agents/skills/aw-spec-specify/SKILL.md +0 -382
- package/assets/.agents/skills/aw-spec-tasks/SKILL.md +0 -259
- package/assets/.agents/skills/aw-spec-taskstoissues/SKILL.md +0 -107
- package/assets/.aw-spec/integrations/claude.manifest.json +0 -17
- package/assets/.aw-spec/scripts/bash/check-prerequisites.sh +0 -189
- package/assets/.aw-spec/scripts/bash/create-new-feature.sh +0 -299
- package/assets/.aw-spec/scripts/bash/setup-plan.sh +0 -84
- package/assets/.aw-spec/scripts/bash/setup-tasks.sh +0 -91
- package/assets/.aw-spec/templates/checklist-template.md +0 -40
- package/assets/.aw-spec/templates/constitution-template.md +0 -57
- package/assets/.aw-spec/templates/plan-template.md +0 -113
- package/assets/.aw-spec/templates/tasks-template.md +0 -252
- package/assets/.aw-spec/workflows/aw-spec/workflow.yml +0 -77
- package/assets/.aw-spec/workflows/workflow-registry.json +0 -13
- package/assets/.claude/skills/aw-spec-addcomponent/SKILL.md +0 -129
- package/assets/.claude/skills/aw-spec-agent-context-update/SKILL.md +0 -31
- package/assets/.claude/skills/aw-spec-analyze/SKILL.md +0 -296
- package/assets/.claude/skills/aw-spec-checklist/SKILL.md +0 -374
- package/assets/.claude/skills/aw-spec-clarify/SKILL.md +0 -320
- package/assets/.claude/skills/aw-spec-constitution/SKILL.md +0 -194
- package/assets/.claude/skills/aw-spec-fast-implement/SKILL.md +0 -268
- package/assets/.claude/skills/aw-spec-foundation/SKILL.md +0 -358
- package/assets/.claude/skills/aw-spec-implement/SKILL.md +0 -279
- package/assets/.claude/skills/aw-spec-minimal-implementation/SKILL.md +0 -209
- package/assets/.claude/skills/aw-spec-plan/SKILL.md +0 -221
- package/assets/.claude/skills/aw-spec-select-domain/SKILL.md +0 -73
- package/assets/.claude/skills/aw-spec-specify/SKILL.md +0 -382
- package/assets/.claude/skills/aw-spec-tasks/SKILL.md +0 -259
- package/assets/.claude/skills/aw-spec-taskstoissues/SKILL.md +0 -107
- package/assets/.kilocode/rules/specify-rules.md +0 -4
- package/assets/.kilocode/workflows/aw-spec-addcomponent.md +0 -129
- package/assets/.kilocode/workflows/aw-spec-agent-context.update.md +0 -31
- package/assets/.kilocode/workflows/aw-spec-analyze.md +0 -296
- package/assets/.kilocode/workflows/aw-spec-checklist.md +0 -374
- package/assets/.kilocode/workflows/aw-spec-clarify.md +0 -320
- package/assets/.kilocode/workflows/aw-spec-constitution.md +0 -194
- package/assets/.kilocode/workflows/aw-spec-fast-implement.md +0 -263
- package/assets/.kilocode/workflows/aw-spec-foundation.md +0 -358
- package/assets/.kilocode/workflows/aw-spec-implement.md +0 -279
- package/assets/.kilocode/workflows/aw-spec-minimal-implementation.md +0 -204
- package/assets/.kilocode/workflows/aw-spec-plan.md +0 -221
- package/assets/.kilocode/workflows/aw-spec-select-domain.md +0 -73
- package/assets/.kilocode/workflows/aw-spec-specify.md +0 -382
- package/assets/.kilocode/workflows/aw-spec-tasks.md +0 -259
- package/assets/.kilocode/workflows/aw-spec-taskstoissues.md +0 -107
- package/assets/docs/UI.Visualization/PACKAGING.md +0 -191
- package/assets/docs/UI.Visualization/UI.Visualization.Reference.pack.txt +0 -11768
- package/assets/docs/UI.Visualization/UI.Visualization.pack.txt +0 -11214
- package/assets/docs/UI.Visualization/pack-foundation.ps1 +0 -165
- package/assets/docs/UI.Visualization/pack-foundation.sh +0 -206
- package/assets/docs/UI.Visualization/pack-reference-foundation.ps1 +0 -159
- package/assets/docs/UI.Visualization/pack-reference-foundation.sh +0 -205
- package/assets/docs/UI.Visualization/unpack-foundation.ps1 +0 -126
- package/assets/docs/UI.Visualization/unpack-foundation.sh +0 -217
- package/assets/docs/UI.Visualization/unpack-reference-foundation.ps1 +0 -129
- package/assets/docs/UI.Visualization/unpack-reference-foundation.sh +0 -218
- package/assets/docs/command.txt +0 -295
- package/assets/docs/domainspecs/UIVisualization/chart-bubble.md +0 -70
- package/assets/docs/domainspecs/UIVisualization/chart-dimred.md +0 -58
- package/assets/docs/domainspecs/UIVisualization/chart-heatmap.md +0 -62
- package/assets/docs/domainspecs/UIVisualization/chart-network.md +0 -69
- package/assets/docs/domainspecs/UIVisualization/chart-parallel.md +0 -75
- package/assets/docs/domainspecs/UIVisualization/chart-scurve.md +0 -66
- package/assets/docs/domainspecs/UIVisualization/chart-survival.md +0 -69
- package/assets/docs/domainspecs/UIVisualization/chart-trellis.md +0 -68
- package/assets/docs/domainspecs/UIVisualization/chart-violin.md +0 -61
- package/assets/docs/domainspecs/UIVisualization/chart-volcano.md +0 -63
- package/assets/docs/domainspecs/UIVisualization/charting-standards.domain.md +0 -80
- package/assets/docs/domainspecs/UIVisualization/clean-architecture.domain.md +0 -87
- package/assets/docs/domainspecs/UIVisualization/coding-standards.domain.md +0 -47
- package/assets/docs/domainspecs/UIVisualization/comandrulemap.md +0 -130
- package/assets/docs/domainspecs/UIVisualization/component-contracts.domain.md +0 -67
- package/assets/docs/domainspecs/UIVisualization/data-source.domain.md +0 -68
- package/assets/docs/domainspecs/UIVisualization/domain-requirements.md +0 -110
- package/assets/docs/domainspecs/UIVisualization/folder-structure.domain.md +0 -55
- package/assets/docs/domainspecs/UIVisualization/state-management.domain.md +0 -67
- package/assets/docs/domainspecs/UIVisualization/testing.domain.md +0 -52
- package/assets/docs/domainspecs/UIVisualization/ui-viz-terms.md +0 -39
- package/assets/docs/pharma-constitution.my-ref.md +0 -86
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
# Pharma Domain ā Command ā Technical-Rule-File Map
|
|
2
|
+
|
|
3
|
+
Per-command list of the **technical** rule files loaded (via `resolve-tech` + the
|
|
4
|
+
`tech-select` module, into the sticky standards set) for the spec-anchored
|
|
5
|
+
orchestrator pipeline. This is the technical counterpart of `comandrulemap.md`
|
|
6
|
+
(which maps the DOMAIN rule files).
|
|
7
|
+
|
|
8
|
+
**The model:** the technical rule files (the `docs/architecture` Ā· `docs/security` Ā·
|
|
9
|
+
`docs/interop` Ā· `docs/governance` set that used to be HARDCODED in each workflow's
|
|
10
|
+
`standards:` block) are now CONFIGURATION ā tune this map, not the workflows. The
|
|
11
|
+
technology base itself (`constitution.technical.md`) is NOT listed here ā every
|
|
12
|
+
consumer still refers to it directly, as-is.
|
|
13
|
+
|
|
14
|
+
- All paths are workspace-relative technical rule files (domain-agnostic docs/ā¦).
|
|
15
|
+
- `resolve-tech --command <name>` collects the `- ` bullets under `## /<name>`.
|
|
16
|
+
- This file is the **canonical technical mapping** for the pharma domain; it is
|
|
17
|
+
selected whenever pharma is the active domain (`.aw-spec/domain.json`).
|
|
18
|
+
- A command with no heading here loads no mapped technical file (only the workflow's
|
|
19
|
+
universal `ai-rules.md` seed + `constitution.technical.md`, referred to directly).
|
|
20
|
+
- `## /aw-spec-specify` is the one **modelling-methodology** slot (see the rule partition):
|
|
21
|
+
a domain-agnostic way of *modelling*, never a technology choice. Everything below it is a
|
|
22
|
+
HOW-phase technical set.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## /aw-spec-specify
|
|
27
|
+
<!-- MODELLING METHODOLOGY ONLY. Specify is the domain phase: the single technical input it
|
|
28
|
+
may take is a domain-agnostic way of MODELLING (DDD tactical patterns), never a
|
|
29
|
+
technology choice. Do NOT add an architecture / persistence / codegen file here ā that
|
|
30
|
+
would break specify's domain purity (design/implement own those). The domain's own DDD
|
|
31
|
+
overlay (domain-driven-design.domain.md) arrives separately via comandrulemap. -->
|
|
32
|
+
- docs/domain/domain-driven-design.md
|
|
33
|
+
|
|
34
|
+
## /aw-spec-design
|
|
35
|
+
<!-- The technical/architecture rule files the design author works from (alongside the
|
|
36
|
+
spec and constitution.technical.md). NO domain file here ā domain reaches design
|
|
37
|
+
only as spec ids (BR-/CN-/DC-/IC-). -->
|
|
38
|
+
- docs/architecture/clean-architecture.md
|
|
39
|
+
- docs/architecture/cqrs.md
|
|
40
|
+
- docs/architecture/eventing.md
|
|
41
|
+
- docs/architecture/modular-monolith.md
|
|
42
|
+
- docs/architecture/vertical-slices.md
|
|
43
|
+
- docs/architecture/persistence.md
|
|
44
|
+
- docs/architecture/folder-structure.md
|
|
45
|
+
- docs/architecture/testing.md
|
|
46
|
+
- docs/governance/api-versioning.md
|
|
47
|
+
- docs/security/zero-trust.md
|
|
48
|
+
- docs/security/authorization.md
|
|
49
|
+
- docs/security/authorization-matrix.md
|
|
50
|
+
- docs/security/auditing.md
|
|
51
|
+
- docs/security/data-classification.md
|
|
52
|
+
- docs/interop/ihe-conformance.md
|
|
53
|
+
|
|
54
|
+
## /aw-spec-implement
|
|
55
|
+
<!-- The FRAMEWORK / code-generation rule files the code generator builds against
|
|
56
|
+
(alongside design.md and constitution.technical.md). NO domain file ā domain
|
|
57
|
+
reaches implement only through design.md. clean-architecture/cqrs are design
|
|
58
|
+
concerns; component wiring is a separate /aw-spec-orch add-component step. -->
|
|
59
|
+
- docs/governance/coding-standards.md
|
|
60
|
+
- docs/governance/dependency-policy.md
|
|
61
|
+
- docs/architecture/folder-structure.md
|
|
62
|
+
- docs/architecture/testing.md
|
|
63
|
+
- docs/VerticalSlice/PACKAGING.md
|
|
64
|
+
|
|
65
|
+
## /aw-spec-implement-delta
|
|
66
|
+
<!-- The CR analog of implement ā same FRAMEWORK / code-generation set (HOW to build).
|
|
67
|
+
The delta's code is generated against the master design.md + delta-design.md; no
|
|
68
|
+
domain file (domain reached the delta via delta-spec ā delta-design). -->
|
|
69
|
+
- docs/governance/coding-standards.md
|
|
70
|
+
- docs/governance/dependency-policy.md
|
|
71
|
+
- docs/architecture/folder-structure.md
|
|
72
|
+
- docs/architecture/testing.md
|
|
73
|
+
- docs/VerticalSlice/PACKAGING.md
|
|
74
|
+
|
|
75
|
+
## /aw-spec-build
|
|
76
|
+
<!-- The compile/fix reference set: the layering + coding rules the fixer respects when
|
|
77
|
+
repairing compile errors against the design intent. NO domain file (build loads
|
|
78
|
+
domain rules separately via domain-select) and no constitution.technical here. -->
|
|
79
|
+
- docs/architecture/clean-architecture.md
|
|
80
|
+
- docs/governance/coding-standards.md
|
|
81
|
+
|
|
82
|
+
## /aw-spec-analyze-slice
|
|
83
|
+
<!-- The designācode conformance gate's TECHNICAL checklist: the code + tests are
|
|
84
|
+
validated against these (alongside the DOMAIN gate overlays, loaded separately via
|
|
85
|
+
resolve-domain `## /aw-spec-gate`). Validation input only ā never authoring. -->
|
|
86
|
+
- docs/architecture/testing.md
|
|
87
|
+
- docs/governance/coding-standards.md
|
|
88
|
+
|
|
89
|
+
## /aw-spec-constitution
|
|
90
|
+
<!-- The technology-constitution base the TECHNICAL half of the split constitution
|
|
91
|
+
ratifies into constitution.technical.md. Loaded BEFORE the technical half and before
|
|
92
|
+
domain-select, so the technical author stays domain-free (the seam). NO domain file
|
|
93
|
+
here ā the domain half's sources are the domain map's ## /aw-spec-constitution. -->
|
|
94
|
+
- docs/technology-constitution.md
|
|
95
|
+
|
|
96
|
+
## /aw-spec-run
|
|
97
|
+
<!-- Execution / data migration: the persistence rules the migration step generates against.
|
|
98
|
+
NO domain file; run does not reference constitution.technical.md. -->
|
|
99
|
+
- docs/architecture/persistence.md
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Quick reference (command ā technical file count)
|
|
104
|
+
|
|
105
|
+
| Command | Technical rule files | Role |
|
|
106
|
+
|---|---|---|
|
|
107
|
+
| /aw-spec-specify | 1 | the modelling methodology (DDD) the domain model is expressed in ā no technology |
|
|
108
|
+
| /aw-spec-design | 15 | architecture/security/interop the design author mediates the spec against |
|
|
109
|
+
| /aw-spec-implement | 5 | governance/architecture the code generator builds against (from design.md) |
|
|
110
|
+
| /aw-spec-implement-delta | 5 | same code-generation set, scoped to the open change's delta-design |
|
|
111
|
+
| /aw-spec-build | 2 | layering + coding rules the compile-fixer respects |
|
|
112
|
+
| /aw-spec-analyze-slice | 2 | testing + coding rules the designācode gate validates against |
|
|
113
|
+
| /aw-spec-constitution | 1 | the technology-constitution base the technical half ratifies |
|
|
114
|
+
| /aw-spec-run | 1 | persistence rules the execution / data-migration step generates against |
|
|
115
|
+
|
|
116
|
+
> All migrated workflows are on this map. The conformance-gate workflows **analyze-design**
|
|
117
|
+
> and **analyze-delta-design** are intentionally NOT here ā they validate design/delta
|
|
118
|
+
> against the spec + DOMAIN gate overlays only (comandrulemap `## /aw-spec-gate`), with no
|
|
119
|
+
> technical gate checklist.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# CQRS ā Pharma Domain Addenda
|
|
2
2
|
|
|
3
|
-
> Technology base: [[cqrs]]. Commands: `/aw-spec-
|
|
3
|
+
> Technology base: [[cqrs]]. Commands: `/aw-spec-specify`, `/aw-spec-gate`.
|
|
4
4
|
|
|
5
5
|
## Pipeline
|
|
6
6
|
- Append a **product-audit behavior** to the mediator pipeline: every create/modify/retire/re-identify/reclassify command on `MedicinalProduct` MUST emit an immutable audit record (User, Timestamp, Action, Previous Value, New Value). See [[auditing.domain]], [[regulatory-compliance]].
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Data Classification ā Pharma Domain Addenda
|
|
2
2
|
|
|
3
|
-
> Technology base: [[data-classification]]. Commands: `/aw-spec-
|
|
3
|
+
> Technology base: [[data-classification]]. Commands: `/aw-spec-constitution`, `/aw-spec-specify`, `/aw-spec-gate`.
|
|
4
4
|
|
|
5
5
|
> No PHI ā the model is commercial confidentiality, regulatory integrity, and source trust.
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Data Provenance Standards ā Pharma
|
|
2
2
|
|
|
3
|
-
> NON-NEGOTIABLE. Commands: `/aw-spec-
|
|
3
|
+
> NON-NEGOTIABLE. Commands: `/aw-spec-constitution`, `/aw-spec-specify`.
|
|
4
4
|
|
|
5
5
|
## First-class concern
|
|
6
6
|
- Any product attribute imported from an external source (FDA NDC directory, RxNorm, WHO ATC, an MAH submission, a partner feed) SHALL carry a **`ProvenanceRecord`** (Provenance module).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Dependency Policy ā Pharma Domain Addenda
|
|
2
2
|
|
|
3
|
-
> Technology base: [[dependency-policy]]. Commands: `/aw-spec-
|
|
3
|
+
> Technology base: [[dependency-policy]]. Commands: `/aw-spec-gate`.
|
|
4
4
|
|
|
5
5
|
## Reviews & libraries
|
|
6
6
|
- Every new dependency gets a **regulatory-suitability** review beyond the generic license/supply-chain check ā reject packages that phone home or ship analytics by default (leak risk for commercially-sensitive pre-market data) (see [[data-classification.domain]]).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Domain-Driven Design ā Medicinal Product Domain Model
|
|
2
2
|
|
|
3
|
-
> Technology base: [[domain-driven-design]]. NON-NEGOTIABLE. Commands: `/aw-spec-specify
|
|
3
|
+
> Technology base: [[domain-driven-design]]. NON-NEGOTIABLE. Commands: `/aw-spec-specify`.
|
|
4
4
|
|
|
5
5
|
## Modeling
|
|
6
6
|
- Use the pharma/regulatory ubiquitous language (see [[pharma-terms]]), aligned to ISO IDMP concepts (see [[idmp]]).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Eventing ā Pharma Domain Addenda
|
|
2
2
|
|
|
3
|
-
> Technology base: [[eventing]]. Commands: `/aw-spec-
|
|
3
|
+
> Technology base: [[eventing]]. Commands: `/aw-spec-specify`, `/aw-spec-gate`.
|
|
4
4
|
|
|
5
5
|
## Domain events
|
|
6
6
|
- `MedicinalProduct` raises domain events on every significant state change ā the integration seam to downstream consumers (prescribing, dispensing, manufacturing, pharmacovigilance, clinical).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# FHIR Standards ā Pharma
|
|
2
2
|
|
|
3
|
-
> NON-NEGOTIABLE. Commands: `/aw-spec-
|
|
3
|
+
> NON-NEGOTIABLE. Commands: `/aw-spec-constitution`, `/aw-spec-specify`.
|
|
4
4
|
|
|
5
5
|
## Architecture & projectors
|
|
6
6
|
- **R4 default**; R5 **additive** under `/fhir/R5/...`. FHIR is the canonical interop contract; it + any internal REST serve from the **same authoritative aggregates** ā no duplicate write paths.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Folder Structure ā Pharma Domain Addenda
|
|
2
2
|
|
|
3
|
-
> Technology base: [[folder-structure]]. Commands: `/aw-spec-
|
|
3
|
+
> Technology base: [[folder-structure]]. Commands: `/aw-spec-gate`. Replace `<SampleProjectName>`.
|
|
4
4
|
|
|
5
5
|
## Additions to the base layout
|
|
6
6
|
```
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# HL7 Integration Readiness ā Pharma
|
|
2
2
|
|
|
3
|
-
> Commands: `/aw-spec-
|
|
3
|
+
> Commands: `/aw-spec-constitution`, `/aw-spec-specify`.
|
|
4
4
|
|
|
5
5
|
## Principle
|
|
6
6
|
- The solution SHALL support **future integration with HL7-based systems**. The registry is the authoritative product source; HL7 surfaces are **adapters, not a parallel model**. FHIR is the primary contract (see [[fhir]]); HL7 v2 adapters are added where a downstream system (prescribing/dispensing/manufacturing/pharmacovigilance) needs them.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# ISO IDMP ā Identification of Medicinal Products
|
|
2
2
|
|
|
3
|
-
> NON-NEGOTIABLE. Commands: `/aw-spec-
|
|
3
|
+
> NON-NEGOTIABLE. Commands: `/aw-spec-constitution`, `/aw-spec-specify`.
|
|
4
4
|
|
|
5
5
|
## Alignment principle
|
|
6
6
|
- The model SHALL align with the ISO IDMP suite (**ISO 11615/11616/11238/11239/11240**) **where applicable** ā IDMP shapes the ubiquitous language + aggregate boundaries; it is **not** a wire format and does not replace the internal model (see [[domain-driven-design.domain]]).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Glossary ā Integration Terms (Pharma)
|
|
2
2
|
|
|
3
|
-
> Ubiquitous language for pharma interoperability standards + identifiers. Commands: `/aw-spec-specify
|
|
3
|
+
> Ubiquitous language for pharma interoperability standards + identifiers. Commands: `/aw-spec-specify`. See [[pharma-terms]] (aggregates) + [[terminology]] (coding).
|
|
4
4
|
|
|
5
5
|
| Term | Definition |
|
|
6
6
|
|---|---|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# NDC ā National Drug Code Standards
|
|
2
2
|
|
|
3
|
-
> NON-NEGOTIABLE. Commands: `/aw-spec-
|
|
3
|
+
> NON-NEGOTIABLE. Commands: `/aw-spec-constitution`, `/aw-spec-specify`.
|
|
4
4
|
|
|
5
5
|
## Value Object
|
|
6
6
|
- **NDC SHALL be a Value Object** (`NdcCode`) ā immutable, equality by value (see [[domain-driven-design.domain]]).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Persistence ā Pharma Domain Addenda
|
|
2
2
|
|
|
3
|
-
> Technology base: [[persistence]]. NON-NEGOTIABLE. Commands: `/aw-spec-
|
|
3
|
+
> Technology base: [[persistence]]. NON-NEGOTIABLE. Commands: `/aw-spec-specify`, `/aw-spec-gate`.
|
|
4
4
|
|
|
5
5
|
## Version history
|
|
6
6
|
- Maintain a **version history** of product information: each approved change produces a new, immutable **`ProductVersion`** snapshot.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Glossary ā Pharmaceutical Terms
|
|
2
2
|
|
|
3
|
-
> Ubiquitous language for the medicinal product registry. Commands: `/aw-spec-
|
|
3
|
+
> Ubiquitous language for the medicinal product registry. Commands: `/aw-spec-constitution`, `/aw-spec-specify`. See [[domain-driven-design.domain]] (modeling), [[terminology]] (coding), [[integration-terms]] (interop).
|
|
4
4
|
|
|
5
5
|
| Term | Definition |
|
|
6
6
|
|---|---|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Product Lifecycle ā Medicinal Product State Machine
|
|
2
2
|
|
|
3
|
-
> Technology base: [[domain-driven-design]]. NON-NEGOTIABLE. Commands: `/aw-spec-
|
|
3
|
+
> Technology base: [[domain-driven-design]]. NON-NEGOTIABLE. Commands: `/aw-spec-constitution`, `/aw-spec-specify`.
|
|
4
4
|
|
|
5
5
|
## States
|
|
6
6
|
`Draft` ā `Under Review` ā `Approved` ā `Active` ā `Discontinued` / `Withdrawn`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Regulatory & Compliance Standards ā Pharma
|
|
2
2
|
|
|
3
|
-
> NON-NEGOTIABLE. Commands: `/aw-spec-
|
|
3
|
+
> NON-NEGOTIABLE. Commands: `/aw-spec-constitution`, `/aw-spec-specify`.
|
|
4
4
|
|
|
5
5
|
> Umbrella for the compliance requirements ā mechanisms live in the linked files.
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Terminology Standards ā Pharma
|
|
2
2
|
|
|
3
|
-
> NON-NEGOTIABLE. Commands: `/aw-spec-
|
|
3
|
+
> NON-NEGOTIABLE. Commands: `/aw-spec-constitution`, `/aw-spec-specify`.
|
|
4
4
|
|
|
5
5
|
## Coded value objects
|
|
6
6
|
- **Coded data MUST use industry terminologies ā free-text strings for coded concepts are FORBIDDEN.**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Testing ā Pharma Domain Addenda
|
|
2
2
|
|
|
3
|
-
> Technology base: [[testing]]. Commands: `/aw-spec-
|
|
3
|
+
> Technology base: [[testing]]. Commands: `/aw-spec-gate`.
|
|
4
4
|
|
|
5
5
|
## What MUST be tested
|
|
6
6
|
- **Aggregate invariants** ā required attributes; >= 1 ActiveIngredient; >= 1 PackagingConfiguration; NDC uniqueness + format; invalid dosage forms/routes rejected (see [[domain-driven-design.domain]], [[ndc]], [[terminology]]).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Vertical Slices ā Pharma Domain Addenda
|
|
2
2
|
|
|
3
|
-
> Technology base: [[vertical-slices]]. Commands: `/aw-spec-
|
|
3
|
+
> Technology base: [[vertical-slices]]. Commands: `/aw-spec-specify`, `/aw-spec-gate`.
|
|
4
4
|
|
|
5
5
|
## Interop adapters in the slice
|
|
6
6
|
`{Module}/Interop/` carries the pharma external-protocol adapters:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Zero-Trust ā Pharma Domain Addenda
|
|
2
2
|
|
|
3
|
-
> Technology base: [[zero-trust]]. Commands: `/aw-spec-
|
|
3
|
+
> Technology base: [[zero-trust]]. Commands: `/aw-spec-constitution`, `/aw-spec-specify`, `/aw-spec-gate`.
|
|
4
4
|
|
|
5
5
|
## Rules
|
|
6
6
|
- All registry traffic MUST be TLS-encrypted; commercially-sensitive pre-market data in transit MUST be TLS-protected; at-rest: see [[data-classification.domain]], [[persistence.domain]].
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# API Versioning Policy
|
|
2
2
|
|
|
3
|
-
> Pure technology (domain-agnostic) ā domain (e.g. FHIR) versioning in [[api-versioning.domain]]. Commands: `/aw-spec-
|
|
3
|
+
> Pure technology (domain-agnostic) ā domain (e.g. FHIR) versioning in [[api-versioning.domain]]. Commands: `/aw-spec-design`.
|
|
4
4
|
|
|
5
5
|
## REST versioning
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Coding Standards
|
|
2
2
|
|
|
3
|
-
> Pure technology (domain-agnostic) ā domain forbidden patterns & CI gates in [[coding-standards.domain]]. Commands: `/aw-spec-
|
|
3
|
+
> Pure technology (domain-agnostic) ā domain forbidden patterns & CI gates in [[coding-standards.domain]]. Commands: `/aw-spec-implement`, `/aw-spec-implement-delta`, `/aw-spec-build`, `/aw-spec-analyze-slice`.
|
|
4
4
|
|
|
5
5
|
## Naming conventions
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Dependency Policy
|
|
2
2
|
|
|
3
|
-
> Pure technology (domain-agnostic) ā domain package rules in [[dependency-policy.domain]]. Commands: `/aw-spec-
|
|
3
|
+
> Pure technology (domain-agnostic) ā domain package rules in [[dependency-policy.domain]]. Commands: `/aw-spec-implement`, `/aw-spec-implement-delta`.
|
|
4
4
|
|
|
5
5
|
## Package governance
|
|
6
6
|
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
MedicinalProduct/
|
|
2
|
+
|
|
3
|
+
/aw-spec-orch constitution @docs/pharma-constitution.md
|
|
4
|
+
|
|
5
|
+
/aw-spec-orch specify RegisterMedicinalProduct
|
|
6
|
+
|
|
7
|
+
Allow an authorized user to register a new medicinal product in the registry.
|
|
8
|
+
|
|
9
|
+
On registration the user provides: product name, generic name, NDC, dosage form, strength, route of administration, manufacturer, one or more active ingredients with details, one or more packaging configurations and one or more ATC classification codes.
|
|
10
|
+
|
|
11
|
+
The system validates the submission (required attributes, duplicate NDC, valid dosage form and route of administration) and creates the product in the Draft state. A successful registration is auditable and emits a registration event.
|
|
12
|
+
|
|
13
|
+
Acceptance:
|
|
14
|
+
- A valid submission creates a Draft MedicinalProduct and returns its identifier.
|
|
15
|
+
- A malformed or duplicate NDC is rejected with a clear validation error.
|
|
16
|
+
- A product missing a required attribute, an active ingredient, or a packaging configuration is rejected.
|
|
17
|
+
- The creation is recorded in the audit trail.
|
|
18
|
+
|
|
19
|
+
/aw-spec-orch design
|
|
20
|
+
|
|
21
|
+
/aw-spec-orch analyze-design
|
|
22
|
+
|
|
23
|
+
/aw-spec-orch implement
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
==============================================================================================
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Auditing & Observability Standards
|
|
2
2
|
|
|
3
|
-
> Pure technology (domain-agnostic) ā domain audit additions in [[auditing.domain]]. NON-NEGOTIABLE. Commands: `/aw-spec-
|
|
3
|
+
> Pure technology (domain-agnostic) ā domain audit additions in [[auditing.domain]]. NON-NEGOTIABLE. Commands: `/aw-spec-design`.
|
|
4
4
|
|
|
5
5
|
## Observability baseline
|
|
6
6
|
|
|
@@ -39,14 +39,37 @@
|
|
|
39
39
|
- Audit records are retained per the applicable retention policy (see [[persistence]];
|
|
40
40
|
regulatory retention in [[auditing.domain]]).
|
|
41
41
|
|
|
42
|
-
##
|
|
42
|
+
## Two auditing levels
|
|
43
|
+
|
|
44
|
+
Auditing has exactly **two levels**, chosen **per aggregate** by the marker interfaces the root
|
|
45
|
+
implements. The interceptor populates every audit field automatically (no manual
|
|
46
|
+
`CreatedOn`/`ModifiedBy` assignment in handlers):
|
|
47
|
+
|
|
48
|
+
| Level | Aggregate root implements | Captured | Depth |
|
|
49
|
+
|-------|---------------------------|----------|-------|
|
|
50
|
+
| **Basic** | `IAuditedObject` (creation+modification) or `IFullAuditedObject` (+soft-delete) | `CreatedBy/On`, `ModifiedBy/On`, `DeletedBy/On`; one `AuditLog` per root per SaveChanges | entity-level (Created/Updated/Deleted) ā no before/after |
|
|
51
|
+
| **Advanced** | Basic markers **+ `IFieldAudited`** | Basic + field-level before/after (`PropertyChange`: original ā new) | entity + property-level previous/new |
|
|
43
52
|
|
|
44
|
-
|
|
45
|
-
|
|
53
|
+
Field-level before/after values exist **only** at the Advanced tier. Children marked
|
|
54
|
+
`IAggregateChild` fold into the root's `AuditLog`.
|
|
55
|
+
|
|
56
|
+
## Canonical example (agent reference ā `<SampleProjectName>` sample)
|
|
46
57
|
|
|
47
58
|
```csharp
|
|
48
|
-
|
|
49
|
-
|
|
59
|
+
// Basic ā lifecycle stamps only
|
|
60
|
+
public sealed class Category :
|
|
61
|
+
AggregateRootBase<CategoryId>, IAggregateRoot,
|
|
62
|
+
IAuditedObject // creation + modification
|
|
63
|
+
{
|
|
64
|
+
public DateTimeOffset CreatedOn { get; set; }
|
|
65
|
+
public string CreatedBy { get; set; } = default!;
|
|
66
|
+
public DateTimeOffset? ModifiedOn { get; set; }
|
|
67
|
+
public string? ModifiedBy { get; set; }
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Advanced ā full lifecycle + field-level (before/after) tracking
|
|
71
|
+
public sealed class Project :
|
|
72
|
+
AggregateRootBase<ProjectId>, IAggregateRoot,
|
|
50
73
|
IFullAuditedObject, // ICreationAudited + IModificationAudited + IDeletionAudited
|
|
51
74
|
IFieldAudited, // opt-in to field-level (before/after) auditing
|
|
52
75
|
ISoftDeletable, IConcurrencyTracked, IHasDomainEvents
|
|
@@ -69,15 +92,17 @@ The DbContext applies audit (plus soft-delete/tenant) behaviors centrally:
|
|
|
69
92
|
modelBuilder.ApplyCrossCuttingBehaviors(this); // wires audit interceptors + filters
|
|
70
93
|
```
|
|
71
94
|
|
|
72
|
-
Composition ā enable auditing on the repository stack
|
|
73
|
-
|
|
95
|
+
Composition ā enable auditing on the repository stack (one `EnableAdvancedAuditing()` registers
|
|
96
|
+
the interceptor that serves **both** levels; per-aggregate level is decided by the interfaces
|
|
97
|
+
above) and route audit records to a separate, append-only store (schema `Auditing`, prefix
|
|
98
|
+
`Audit_`):
|
|
74
99
|
|
|
75
100
|
```csharp
|
|
76
101
|
// <SampleProjectName>.Service/Extensions/InfrastructureServiceRegistration.cs
|
|
77
102
|
services.AddRepositories(builder => builder
|
|
78
103
|
.UseSingleDbContextEFRepositories<ApplicationDbContext>(/* ... */)
|
|
79
|
-
.
|
|
80
|
-
.EnableAdvancedAuditing()
|
|
104
|
+
.EnableSoftDelete()
|
|
105
|
+
.EnableAdvancedAuditing() // AdvancedAuditingSaveChangesInterceptor
|
|
81
106
|
.Done(), o => o.Provider = "EfCore");
|
|
82
107
|
|
|
83
108
|
services.AddDataStore(b => b.UseEfCoreDataStore(/* ... */), o =>
|
|
@@ -95,9 +120,27 @@ services.AddAuditing(b => b
|
|
|
95
120
|
o.ExcludeShadowProperties = true;
|
|
96
121
|
})
|
|
97
122
|
.UseAppWeaverDataStore(),
|
|
98
|
-
o => { o.IsEnabled = true; o.EnableFieldLevelAuditing = true; });
|
|
123
|
+
o => { o.IsEnabled = true; o.EnableFieldLevelAuditing = true; }); // field-level = Advanced
|
|
99
124
|
```
|
|
100
125
|
|
|
126
|
+
## Querying the audit trail (framework-provided)
|
|
127
|
+
|
|
128
|
+
The audit store is queryable out of the box via `IAuditEntity` ā no bespoke read model required:
|
|
129
|
+
|
|
130
|
+
```csharp
|
|
131
|
+
// by resource identity
|
|
132
|
+
var logs = await auditEntity.GetAuditLogsAsync(typeof(Project).FullName!, projectId.ToString());
|
|
133
|
+
// by user / action / time, with paging
|
|
134
|
+
var page = await auditEntity.GetAuditLogsAsync(new AuditLogFilter { UserId = "u1", Action = AuditAction.Updated, Take = 10 });
|
|
135
|
+
// by user / tenant
|
|
136
|
+
await auditEntity.GetAuditLogsByUserAsync("u1");
|
|
137
|
+
await auditEntity.GetAuditLogsByTenantAsync("tenant-alpha");
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Each `AuditLog` carries `{ UserId, UserName, Timestamp, Action, EntityType, EntityId, Metadata
|
|
141
|
+
(correlationId, ā¦) }`; its `EntityChanges` hold entity-level `ChangeType`, and ā for `IFieldAudited`
|
|
142
|
+
roots ā nested `PropertyChanges` with `OriginalValue ā NewValue`.
|
|
143
|
+
|
|
101
144
|
Observability baseline ā `ServiceDefaults` (OTel + Serilog + health) wired once in `Program.cs`:
|
|
102
145
|
|
|
103
146
|
```csharp
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Authorization Standards
|
|
2
2
|
|
|
3
|
-
> Pure technology (domain-agnostic) ā domain roles & matrix in [[authorization.domain]]. NON-NEGOTIABLE. Commands: `/aw-spec-
|
|
3
|
+
> Pure technology (domain-agnostic) ā domain roles & matrix in [[authorization.domain]]. NON-NEGOTIABLE. Commands: `/aw-spec-design`.
|
|
4
4
|
|
|
5
5
|
## Authorization model
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Data Classification Standards
|
|
2
2
|
|
|
3
|
-
> Pure technology (domain-agnostic) ā domain data categories in [[data-classification.domain]]. NON-NEGOTIABLE. Commands: `/aw-spec-
|
|
3
|
+
> Pure technology (domain-agnostic) ā domain data categories in [[data-classification.domain]]. NON-NEGOTIABLE. Commands: `/aw-spec-design`.
|
|
4
4
|
|
|
5
5
|
## Classification framework
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Zero-Trust Standards
|
|
2
2
|
|
|
3
|
-
> Pure technology (domain-agnostic) ā domain additions in [[zero-trust.domain]]. NON-NEGOTIABLE where marked. Commands: `/aw-spec-
|
|
3
|
+
> Pure technology (domain-agnostic) ā domain additions in [[zero-trust.domain]]. NON-NEGOTIABLE where marked. Commands: `/aw-spec-design`.
|
|
4
4
|
|
|
5
5
|
## Transport security (mTLS / TLS)
|
|
6
6
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,WAAW,SA2DpB,CAAC"}
|
package/dist/commands/init.js
CHANGED
|
@@ -1,13 +1,7 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
2
|
import inquirer from 'inquirer';
|
|
3
|
-
import chalk from 'chalk';
|
|
4
|
-
import fs from 'fs-extra';
|
|
5
|
-
import path from 'path';
|
|
6
|
-
import { fileURLToPath } from 'url';
|
|
7
3
|
import { copyAssets } from '../utils/copy-assets.js';
|
|
8
4
|
import { resolveAssetsPath } from '../utils/paths.js';
|
|
9
|
-
import { createManifest } from '../utils/manifest.js';
|
|
10
|
-
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
11
5
|
export const initCommand = new Command('init')
|
|
12
6
|
.description('Initialize a new AppWeaver Spec project in the current directory')
|
|
13
7
|
.argument('[directory]', 'Target directory (default: current directory)', '.')
|
|
@@ -16,41 +10,7 @@ export const initCommand = new Command('init')
|
|
|
16
10
|
.option('--dry-run', 'Show what would be done without making changes')
|
|
17
11
|
.action(async (directory, options) => {
|
|
18
12
|
const targetDir = directory === '.' ? process.cwd() : directory;
|
|
19
|
-
|
|
20
|
-
// Check for existing project
|
|
21
|
-
const existingManifest = await fs.pathExists(manifestPath);
|
|
22
|
-
if (existingManifest && !options.dryRun) {
|
|
23
|
-
console.log(chalk.yellow('\n\u26A0\uFE0F Existing AppWeaver Spec project detected.'));
|
|
24
|
-
console.log(chalk.gray(` Manifest found at: ${manifestPath}`));
|
|
25
|
-
if (options.yes) {
|
|
26
|
-
console.log(chalk.yellow(' Use `aw-spec update` to update this project.'));
|
|
27
|
-
process.exit(0);
|
|
28
|
-
}
|
|
29
|
-
const { action } = await inquirer.prompt([
|
|
30
|
-
{
|
|
31
|
-
type: 'list',
|
|
32
|
-
name: 'action',
|
|
33
|
-
message: 'What would you like to do?',
|
|
34
|
-
choices: [
|
|
35
|
-
{ name: 'Update existing project (recommended)', value: 'update' },
|
|
36
|
-
{ name: 'Re-initialize (overwrite with fresh copy)', value: 'reinit' },
|
|
37
|
-
{ name: 'Cancel', value: 'cancel' },
|
|
38
|
-
],
|
|
39
|
-
default: 'update',
|
|
40
|
-
},
|
|
41
|
-
]);
|
|
42
|
-
if (action === 'update') {
|
|
43
|
-
console.log(chalk.gray(' Run `aw-spec update` to update this project.'));
|
|
44
|
-
process.exit(0);
|
|
45
|
-
}
|
|
46
|
-
else if (action === 'cancel') {
|
|
47
|
-
console.log(chalk.gray('\nInitialization cancelled.'));
|
|
48
|
-
process.exit(0);
|
|
49
|
-
}
|
|
50
|
-
// action === 'reinit' continues below
|
|
51
|
-
console.log(chalk.yellow('\n Re-initializing (will overwrite existing files)...\n'));
|
|
52
|
-
}
|
|
53
|
-
console.log(`\n\uD83D\uDD27 Initializing AppWeaver Spec project in: ${targetDir}\n`);
|
|
13
|
+
console.log(`\nš§ Initializing AppWeaver Spec project in: ${targetDir}\n`);
|
|
54
14
|
// Determine agent
|
|
55
15
|
let agent = options.agent;
|
|
56
16
|
// If --yes flag and no explicit agent, use default (claude) without prompting
|
|
@@ -78,11 +38,11 @@ export const initCommand = new Command('init')
|
|
|
78
38
|
const assetsPath = await resolveAssetsPath();
|
|
79
39
|
const agentFolder = agent === 'claude' ? '.claude' : agent === 'kilocode' ? '.kilocode' : '.agents';
|
|
80
40
|
if (options.dryRun) {
|
|
81
|
-
console.log('
|
|
82
|
-
console.log(`
|
|
83
|
-
console.log(`
|
|
84
|
-
console.log(`
|
|
85
|
-
console.log(`
|
|
41
|
+
console.log('š Dry run - would copy the following:');
|
|
42
|
+
console.log(` ā ${assetsPath}/.aw-spec -> ${targetDir}/.aw-spec`);
|
|
43
|
+
console.log(` ā ${assetsPath}/docs -> ${targetDir}/docs`);
|
|
44
|
+
console.log(` ā ${assetsPath}/${agentFolder} -> ${targetDir}/${agentFolder}`);
|
|
45
|
+
console.log(` ā ${assetsPath}/docs/VerticalSlice -> ${targetDir}/docs/VerticalSlice`);
|
|
86
46
|
return;
|
|
87
47
|
}
|
|
88
48
|
// Copy assets
|
|
@@ -92,14 +52,7 @@ export const initCommand = new Command('init')
|
|
|
92
52
|
agent: agent,
|
|
93
53
|
overwrite: options.yes,
|
|
94
54
|
});
|
|
95
|
-
|
|
96
|
-
console.log('\n\uD83D\uDD0D Creating manifest...');
|
|
97
|
-
const packageJson = await fs.readJSON(path.resolve(__dirname, '../../package.json'));
|
|
98
|
-
const manifest = await createManifest(assetsPath, targetDir, packageJson.version);
|
|
99
|
-
await fs.ensureDir(path.dirname(manifestPath));
|
|
100
|
-
await fs.writeJSON(manifestPath, manifest, { spaces: 2 });
|
|
101
|
-
console.log(chalk.green(` \u2713 Manifest created (${Object.keys(manifest.files).length} files tracked)`));
|
|
102
|
-
console.log('\n\u2705 Project initialized successfully!');
|
|
55
|
+
console.log('\nā
Project initialized successfully!');
|
|
103
56
|
console.log('\nNext steps:');
|
|
104
57
|
console.log(' aw-spec doctor # Verify the installation');
|
|
105
58
|
console.log(' aw-spec specify "Your feature description" # Start spec-driven development');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAItD,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,kEAAkE,CAAC;KAC/E,QAAQ,CAAC,aAAa,EAAE,+CAA+C,EAAE,GAAG,CAAC;KAC7E,MAAM,CAAC,qBAAqB,EAAE,6CAA6C,EAAE,QAAQ,CAAC;KACtF,MAAM,CAAC,WAAW,EAAE,+BAA+B,CAAC;KACpD,MAAM,CAAC,WAAW,EAAE,gDAAgD,CAAC;KACrE,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,OAAyD,EAAE,EAAE;IAC7F,MAAM,SAAS,GAAG,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAEhE,OAAO,CAAC,GAAG,CAAC,gDAAgD,SAAS,IAAI,CAAC,CAAC;IAE3E,kBAAkB;IAClB,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC1B,8EAA8E;IAC9E,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvB,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,KAAK,GAAG,QAAQ,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;gBAC9C;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,eAAe;oBACrB,OAAO,EAAE,+CAA+C;oBACxD,OAAO,EAAE;wBACP,EAAE,IAAI,EAAE,8BAA8B,EAAE,KAAK,EAAE,QAAQ,EAAE;wBACzD,EAAE,IAAI,EAAE,8BAA8B,EAAE,KAAK,EAAE,aAAa,EAAE;wBAC9D,EAAE,IAAI,EAAE,6BAA6B,EAAE,KAAK,EAAE,UAAU,EAAE;qBAC3D;oBACD,OAAO,EAAE,QAAQ;iBAClB;aACF,CAAC,CAAC;YACH,KAAK,GAAG,aAAa,CAAC;QACxB,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAC7C,MAAM,WAAW,GAAG,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;IAEpG,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,QAAQ,UAAU,gBAAgB,SAAS,WAAW,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,QAAQ,UAAU,YAAY,SAAS,OAAO,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,QAAQ,UAAU,IAAI,WAAW,OAAO,SAAS,IAAI,WAAW,EAAE,CAAC,CAAC;QAChF,OAAO,CAAC,GAAG,CAAC,QAAQ,UAAU,0BAA0B,SAAS,qBAAqB,CAAC,CAAC;QACxF,OAAO;IACT,CAAC;IAED,cAAc;IACd,MAAM,UAAU,CAAC;QACf,UAAU,EAAE,UAAU;QACtB,UAAU,EAAE,SAAS;QACrB,KAAK,EAAE,KAAc;QACrB,SAAS,EAAE,OAAO,CAAC,GAAG;KACvB,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,+EAA+E,CAAC,CAAC;AAC/F,CAAC,CAAC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
import { program } from 'commander';
|
|
3
3
|
import { initCommand } from './commands/init.js';
|
|
4
4
|
import { doctorCommand } from './commands/doctor.js';
|
|
5
|
-
import { updateCommand } from './commands/update.js';
|
|
6
5
|
import fs from 'fs-extra';
|
|
7
6
|
import path from 'path';
|
|
8
7
|
import { fileURLToPath } from 'url';
|
|
@@ -13,7 +12,6 @@ program
|
|
|
13
12
|
.description('AppWeaver Spec-Driven Development CLI')
|
|
14
13
|
.version(packageJson.version)
|
|
15
14
|
.addCommand(initCommand)
|
|
16
|
-
.addCommand(updateCommand)
|
|
17
15
|
.addCommand(doctorCommand);
|
|
18
16
|
program.parse();
|
|
19
17
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC,CAAC;AAElF,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,uCAAuC,CAAC;KACpD,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC;KAC5B,UAAU,CAAC,WAAW,CAAC;KACvB,UAAU,CAAC,aAAa,CAAC,CAAC;AAE7B,OAAO,CAAC,KAAK,EAAE,CAAC"}
|