aw-spec-cli 0.1.0 → 0.1.2
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/skills/aw-spec-addcomponent/SKILL.md +129 -0
- package/assets/.agents/skills/aw-spec-agent-context-update/SKILL.md +31 -0
- package/assets/.agents/skills/aw-spec-analyze/SKILL.md +296 -0
- package/assets/.agents/skills/aw-spec-checklist/SKILL.md +374 -0
- package/assets/.agents/skills/aw-spec-clarify/SKILL.md +320 -0
- package/assets/.agents/skills/aw-spec-constitution/SKILL.md +194 -0
- package/assets/.agents/skills/aw-spec-fast-implement/SKILL.md +268 -0
- package/assets/.agents/skills/aw-spec-foundation/SKILL.md +358 -0
- package/assets/.agents/skills/aw-spec-implement/SKILL.md +279 -0
- package/assets/.agents/skills/aw-spec-minimal-implementation/SKILL.md +209 -0
- package/assets/.agents/skills/aw-spec-plan/SKILL.md +221 -0
- package/assets/.agents/skills/aw-spec-select-domain/SKILL.md +73 -0
- package/assets/.agents/skills/aw-spec-specify/SKILL.md +382 -0
- package/assets/.agents/skills/aw-spec-tasks/SKILL.md +259 -0
- package/assets/.agents/skills/aw-spec-taskstoissues/SKILL.md +107 -0
- package/assets/.aw-spec/domain.json +3 -0
- package/assets/.aw-spec/extensions/.registry +19 -0
- package/assets/.aw-spec/extensions/agent-context/README.md +57 -0
- package/assets/.aw-spec/extensions/agent-context/agent-context-config.yml +4 -0
- package/assets/.aw-spec/extensions/agent-context/commands/aw-spec.agent-context.update.md +26 -0
- package/assets/.aw-spec/extensions/agent-context/extension.yml +34 -0
- package/assets/.aw-spec/extensions/agent-context/scripts/bash/update-agent-context.sh +201 -0
- package/assets/.aw-spec/extensions/agent-context/scripts/powershell/update-agent-context.ps1 +237 -0
- package/assets/.aw-spec/extensions.yml +23 -0
- package/assets/.aw-spec/feature.json +3 -0
- package/assets/.aw-spec/init-options.json +9 -0
- package/assets/.aw-spec/integration.json +15 -0
- package/assets/.aw-spec/integrations/aw-spec.manifest.json +17 -0
- package/assets/.aw-spec/integrations/claude.manifest.json +17 -0
- package/assets/.aw-spec/memory/constitution.md +50 -0
- package/assets/.aw-spec/scripts/bash/check-prerequisites.sh +189 -0
- package/assets/.aw-spec/scripts/bash/common.sh +582 -0
- package/assets/.aw-spec/scripts/bash/create-new-feature.sh +299 -0
- package/assets/.aw-spec/scripts/bash/setup-plan.sh +84 -0
- package/assets/.aw-spec/scripts/bash/setup-tasks.sh +91 -0
- package/assets/.aw-spec/templates/checklist-template.md +40 -0
- package/assets/.aw-spec/templates/constitution-template.md +57 -0
- package/assets/.aw-spec/templates/plan-template.md +113 -0
- package/assets/.aw-spec/templates/spec-template.md +131 -0
- package/assets/.aw-spec/templates/tasks-template.md +252 -0
- package/assets/.aw-spec/workflows/aw-spec/workflow.yml +77 -0
- package/assets/.aw-spec/workflows/workflow-registry.json +13 -0
- package/assets/.claude/skills/aw-spec-addcomponent/SKILL.md +129 -0
- package/assets/.claude/skills/aw-spec-agent-context-update/SKILL.md +31 -0
- package/assets/.claude/skills/aw-spec-analyze/SKILL.md +296 -0
- package/assets/.claude/skills/aw-spec-checklist/SKILL.md +374 -0
- package/assets/.claude/skills/aw-spec-clarify/SKILL.md +320 -0
- package/assets/.claude/skills/aw-spec-constitution/SKILL.md +194 -0
- package/assets/.claude/skills/aw-spec-fast-implement/SKILL.md +268 -0
- package/assets/.claude/skills/aw-spec-foundation/SKILL.md +358 -0
- package/assets/.claude/skills/aw-spec-implement/SKILL.md +279 -0
- package/assets/.claude/skills/aw-spec-minimal-implementation/SKILL.md +209 -0
- package/assets/.claude/skills/aw-spec-plan/SKILL.md +221 -0
- package/assets/.claude/skills/aw-spec-select-domain/SKILL.md +73 -0
- package/assets/.claude/skills/aw-spec-specify/SKILL.md +382 -0
- package/assets/.claude/skills/aw-spec-tasks/SKILL.md +259 -0
- package/assets/.claude/skills/aw-spec-taskstoissues/SKILL.md +107 -0
- package/assets/.kilocode/rules/specify-rules.md +4 -0
- package/assets/.kilocode/workflows/aw-spec-addcomponent.md +129 -0
- package/assets/.kilocode/workflows/aw-spec-agent-context.update.md +31 -0
- package/assets/.kilocode/workflows/aw-spec-analyze.md +296 -0
- package/assets/.kilocode/workflows/aw-spec-checklist.md +374 -0
- package/assets/.kilocode/workflows/aw-spec-clarify.md +320 -0
- package/assets/.kilocode/workflows/aw-spec-constitution.md +194 -0
- package/assets/.kilocode/workflows/aw-spec-fast-implement.md +263 -0
- package/assets/.kilocode/workflows/aw-spec-foundation.md +358 -0
- package/assets/.kilocode/workflows/aw-spec-implement.md +279 -0
- package/assets/.kilocode/workflows/aw-spec-minimal-implementation.md +204 -0
- package/assets/.kilocode/workflows/aw-spec-plan.md +221 -0
- package/assets/.kilocode/workflows/aw-spec-select-domain.md +73 -0
- package/assets/.kilocode/workflows/aw-spec-specify.md +382 -0
- package/assets/.kilocode/workflows/aw-spec-tasks.md +259 -0
- package/assets/.kilocode/workflows/aw-spec-taskstoissues.md +107 -0
- package/assets/docs/README.md +106 -0
- package/assets/docs/VerticalSlice/PACKAGING.md +185 -0
- package/assets/docs/VerticalSlice/VerticalSlice.pack.txt +2833 -0
- package/assets/docs/VerticalSlice/pack-foundation.ps1 +145 -0
- package/assets/docs/VerticalSlice/pack-foundation.sh +196 -0
- package/assets/docs/VerticalSlice/unpack-foundation.ps1 +126 -0
- package/assets/docs/VerticalSlice/unpack-foundation.sh +217 -0
- package/assets/docs/architecture/clean-architecture.md +71 -0
- package/assets/docs/architecture/cqrs.md +141 -0
- package/assets/docs/architecture/eventing.md +83 -0
- package/assets/docs/architecture/folder-structure.md +61 -0
- package/assets/docs/architecture/modular-monolith.md +47 -0
- package/assets/docs/architecture/persistence.md +269 -0
- package/assets/docs/architecture/testing.md +55 -0
- package/assets/docs/architecture/vertical-slices.md +201 -0
- package/assets/docs/command.txt +295 -0
- package/assets/docs/components/Email/README.md +112 -0
- package/assets/docs/components/Email/integration.md +260 -0
- package/assets/docs/components/Jobs/README.md +113 -0
- package/assets/docs/components/Jobs/integration.md +245 -0
- package/assets/docs/components/QrGenerator/README.md +78 -0
- package/assets/docs/components/QrGenerator/integration.md +185 -0
- package/assets/docs/components/README.md +57 -0
- package/assets/docs/domain/domain-driven-design.md +212 -0
- package/assets/docs/domainspecs/healthcare/ai-rules.domain.md +34 -0
- package/assets/docs/domainspecs/healthcare/api-versioning.domain.md +17 -0
- package/assets/docs/domainspecs/healthcare/auditing.domain.md +29 -0
- package/assets/docs/domainspecs/healthcare/authorization.domain.md +26 -0
- package/assets/docs/domainspecs/healthcare/clinical-terms.md +20 -0
- package/assets/docs/domainspecs/healthcare/coding-standards.domain.md +26 -0
- package/assets/docs/domainspecs/healthcare/comandrulemap.md +119 -0
- package/assets/docs/domainspecs/healthcare/consent.md +19 -0
- package/assets/docs/domainspecs/healthcare/cqrs.domain.md +12 -0
- package/assets/docs/domainspecs/healthcare/data-classification.domain.md +28 -0
- package/assets/docs/domainspecs/healthcare/dependency-policy.domain.md +11 -0
- package/assets/docs/domainspecs/healthcare/dicom.md +15 -0
- package/assets/docs/domainspecs/healthcare/domain-driven-design.domain.md +28 -0
- package/assets/docs/domainspecs/healthcare/domain-requirements.md +55 -0
- package/assets/docs/domainspecs/healthcare/eventing.domain.md +18 -0
- package/assets/docs/domainspecs/healthcare/fhir.md +36 -0
- package/assets/docs/domainspecs/healthcare/folder-structure.domain.md +23 -0
- package/assets/docs/domainspecs/healthcare/hipaa.md +34 -0
- package/assets/docs/domainspecs/healthcare/hl7.md +15 -0
- package/assets/docs/domainspecs/healthcare/integration-terms.md +21 -0
- package/assets/docs/domainspecs/healthcare/persistence.domain.md +20 -0
- package/assets/docs/domainspecs/healthcare/terminology.md +30 -0
- package/assets/docs/domainspecs/healthcare/testing.domain.md +15 -0
- package/assets/docs/domainspecs/healthcare/vertical-slices.domain.md +18 -0
- package/assets/docs/domainspecs/healthcare/zero-trust.domain.md +12 -0
- package/assets/docs/domainspecs/pharma/ai-rules.domain.md +32 -0
- package/assets/docs/domainspecs/pharma/api-versioning.domain.md +20 -0
- package/assets/docs/domainspecs/pharma/atc.md +22 -0
- package/assets/docs/domainspecs/pharma/auditing.domain.md +26 -0
- package/assets/docs/domainspecs/pharma/authorization.domain.md +25 -0
- package/assets/docs/domainspecs/pharma/coding-standards.domain.md +28 -0
- package/assets/docs/domainspecs/pharma/comandrulemap.md +136 -0
- package/assets/docs/domainspecs/pharma/cqrs.domain.md +16 -0
- package/assets/docs/domainspecs/pharma/data-classification.domain.md +24 -0
- package/assets/docs/domainspecs/pharma/data-provenance.md +21 -0
- package/assets/docs/domainspecs/pharma/dependency-policy.domain.md +11 -0
- package/assets/docs/domainspecs/pharma/domain-driven-design.domain.md +36 -0
- package/assets/docs/domainspecs/pharma/domain-requirements.md +99 -0
- package/assets/docs/domainspecs/pharma/eventing.domain.md +18 -0
- package/assets/docs/domainspecs/pharma/fhir.md +31 -0
- package/assets/docs/domainspecs/pharma/folder-structure.domain.md +24 -0
- package/assets/docs/domainspecs/pharma/hl7.md +17 -0
- package/assets/docs/domainspecs/pharma/idmp.md +26 -0
- package/assets/docs/domainspecs/pharma/integration-terms.md +21 -0
- package/assets/docs/domainspecs/pharma/ndc.md +28 -0
- package/assets/docs/domainspecs/pharma/persistence.domain.md +23 -0
- package/assets/docs/domainspecs/pharma/pharma-terms.md +27 -0
- package/assets/docs/domainspecs/pharma/product-lifecycle.domain.md +30 -0
- package/assets/docs/domainspecs/pharma/regulatory-compliance.md +19 -0
- package/assets/docs/domainspecs/pharma/terminology.md +32 -0
- package/assets/docs/domainspecs/pharma/testing.domain.md +19 -0
- package/assets/docs/domainspecs/pharma/vertical-slices.domain.md +17 -0
- package/assets/docs/domainspecs/pharma/zero-trust.domain.md +12 -0
- package/assets/docs/glossary/ai-rules.md +59 -0
- package/assets/docs/governance/api-versioning.md +99 -0
- package/assets/docs/governance/coding-standards.md +87 -0
- package/assets/docs/governance/dependency-policy.md +40 -0
- package/assets/docs/interop/ihe-conformance.md +31 -0
- package/assets/docs/pharma-constitution.my-ref.md +86 -0
- package/assets/docs/requirement-spec.txt +15 -0
- package/assets/docs/security/auditing.md +117 -0
- package/assets/docs/security/authorization-matrix.md +14 -0
- package/assets/docs/security/authorization.md +87 -0
- package/assets/docs/security/data-classification.md +38 -0
- package/assets/docs/security/zero-trust.md +76 -0
- package/assets/docs/technology-constitution.md +172 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +3 -2
- package/dist/commands/init.js.map +1 -1
- package/dist/utils/copy-assets.d.ts +8 -1
- package/dist/utils/copy-assets.d.ts.map +1 -1
- package/dist/utils/copy-assets.js +1 -0
- package/dist/utils/copy-assets.js.map +1 -1
- package/dist/utils/paths.js +1 -1
- package/dist/utils/paths.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "aw-spec-taskstoissues"
|
|
3
|
+
description: "Convert existing tasks into actionable, dependency-ordered GitHub issues for the feature based on available design artifacts."
|
|
4
|
+
argument-hint: "Optional filter or label for GitHub issues"
|
|
5
|
+
compatibility: "Requires aw-spec project structure with .aw-spec/ directory"
|
|
6
|
+
metadata:
|
|
7
|
+
author: "github-aw-spec"
|
|
8
|
+
source: "templates/commands/taskstoissues.md"
|
|
9
|
+
user-invocable: true
|
|
10
|
+
disable-model-invocation: false
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
## User Input
|
|
15
|
+
|
|
16
|
+
```text
|
|
17
|
+
$ARGUMENTS
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
You **MUST** consider the user input before proceeding (if not empty).
|
|
21
|
+
|
|
22
|
+
## Pre-Execution Checks
|
|
23
|
+
|
|
24
|
+
**Check for extension hooks (before tasks-to-issues conversion)**:
|
|
25
|
+
- Check if `.aw-spec/extensions.yml` exists in the project root.
|
|
26
|
+
- If it exists, read it and look for entries under the `hooks.before_taskstoissues` key
|
|
27
|
+
- If the YAML cannot be parsed or is invalid, skip hook checking silently and continue normally
|
|
28
|
+
- Filter out hooks where `enabled` is explicitly `false`. Treat hooks without an `enabled` field as enabled by default.
|
|
29
|
+
- For each remaining hook, do **not** attempt to interpret or evaluate hook `condition` expressions:
|
|
30
|
+
- If the hook has no `condition` field, or it is null/empty, treat the hook as executable
|
|
31
|
+
- If the hook defines a non-empty `condition`, skip the hook and leave condition evaluation to the HookExecutor implementation
|
|
32
|
+
- When constructing slash commands from hook command names, replace dots (`.`) with hyphens (`-`). For example, `aw-spec.git.commit` → `/aw-spec-git-commit`.
|
|
33
|
+
- For each executable hook, output the following based on its `optional` flag:
|
|
34
|
+
- **Optional hook** (`optional: true`):
|
|
35
|
+
```
|
|
36
|
+
## Extension Hooks
|
|
37
|
+
|
|
38
|
+
**Optional Pre-Hook**: {extension}
|
|
39
|
+
Command: `/{command}`
|
|
40
|
+
Description: {description}
|
|
41
|
+
|
|
42
|
+
Prompt: {prompt}
|
|
43
|
+
To execute: `/{command}`
|
|
44
|
+
```
|
|
45
|
+
- **Mandatory hook** (`optional: false`):
|
|
46
|
+
```
|
|
47
|
+
## Extension Hooks
|
|
48
|
+
|
|
49
|
+
**Automatic Pre-Hook**: {extension}
|
|
50
|
+
Executing: `/{command}`
|
|
51
|
+
EXECUTE_COMMAND: {command}
|
|
52
|
+
|
|
53
|
+
Wait for the result of the hook command before proceeding to the Outline.
|
|
54
|
+
```
|
|
55
|
+
- If no hooks are registered or `.aw-spec/extensions.yml` does not exist, skip silently
|
|
56
|
+
|
|
57
|
+
## Outline
|
|
58
|
+
|
|
59
|
+
1. Run `.aw-spec/scripts/bash/check-prerequisites.sh --json --require-tasks --include-tasks` from repo root and parse FEATURE_DIR and AVAILABLE_DOCS list. All paths must be absolute. For single quotes in args like "I'm Groot", use escape syntax: e.g 'I'\''m Groot' (or double-quote if possible: "I'm Groot").
|
|
60
|
+
1. **IF EXISTS**: Load `.aw-spec/memory/constitution.md` for project principles and governance constraints.
|
|
61
|
+
1. From the executed script, extract the path to **tasks**.
|
|
62
|
+
1. Get the Git remote by running:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
git config --get remote.origin.url
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
> [!CAUTION]
|
|
69
|
+
> ONLY PROCEED TO NEXT STEPS IF THE REMOTE IS A GITHUB URL
|
|
70
|
+
|
|
71
|
+
1. For each task in the list, use the GitHub MCP server to create a new issue in the repository that is representative of the Git remote.
|
|
72
|
+
|
|
73
|
+
> [!CAUTION]
|
|
74
|
+
> UNDER NO CIRCUMSTANCES EVER CREATE ISSUES IN REPOSITORIES THAT DO NOT MATCH THE REMOTE URL
|
|
75
|
+
|
|
76
|
+
## Post-Execution Checks
|
|
77
|
+
|
|
78
|
+
**Check for extension hooks (after tasks-to-issues conversion)**:
|
|
79
|
+
Check if `.aw-spec/extensions.yml` exists in the project root.
|
|
80
|
+
- If it exists, read it and look for entries under the `hooks.after_taskstoissues` key
|
|
81
|
+
- If the YAML cannot be parsed or is invalid, skip hook checking silently and continue normally
|
|
82
|
+
- Filter out hooks where `enabled` is explicitly `false`. Treat hooks without an `enabled` field as enabled by default.
|
|
83
|
+
- For each remaining hook, do **not** attempt to interpret or evaluate hook `condition` expressions:
|
|
84
|
+
- If the hook has no `condition` field, or it is null/empty, treat the hook as executable
|
|
85
|
+
- If the hook defines a non-empty `condition`, skip the hook and leave condition evaluation to the HookExecutor implementation
|
|
86
|
+
- When constructing slash commands from hook command names, replace dots (`.`) with hyphens (`-`). For example, `aw-spec.git.commit` → `/aw-spec-git-commit`.
|
|
87
|
+
- For each executable hook, output the following based on its `optional` flag:
|
|
88
|
+
- **Optional hook** (`optional: true`):
|
|
89
|
+
```
|
|
90
|
+
## Extension Hooks
|
|
91
|
+
|
|
92
|
+
**Optional Hook**: {extension}
|
|
93
|
+
Command: `/{command}`
|
|
94
|
+
Description: {description}
|
|
95
|
+
|
|
96
|
+
Prompt: {prompt}
|
|
97
|
+
To execute: `/{command}`
|
|
98
|
+
```
|
|
99
|
+
- **Mandatory hook** (`optional: false`):
|
|
100
|
+
```
|
|
101
|
+
## Extension Hooks
|
|
102
|
+
|
|
103
|
+
**Automatic Hook**: {extension}
|
|
104
|
+
Executing: `/{command}`
|
|
105
|
+
EXECUTE_COMMAND: {command}
|
|
106
|
+
```
|
|
107
|
+
- If no hooks are registered or `.aw-spec/extensions.yml` does not exist, skip silently
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# Engineering Standards — Index & Context-Loading Map
|
|
2
|
+
|
|
3
|
+
These docs are the detailed engineering standards expanded from the slim constitution inputs
|
|
4
|
+
(`docs/technology-constitution.md` composed with a domain addenda such as
|
|
5
|
+
`docs/healthcare-constitution.md` or `docs/pharma-constitution.md`, ratified into
|
|
6
|
+
`.aw-spec/memory/constitution.md`). The constitution remains supreme; these files expand each
|
|
7
|
+
principle into a focused, includable reference.
|
|
8
|
+
|
|
9
|
+
The **technology** standards are loaded **automatically** by each AW-Spec command (see each
|
|
10
|
+
`.claude/skills/aw-spec-*/SKILL.md`). The **domain** standards live under
|
|
11
|
+
`domainspecs/<domain>/` and are added per project; a `healthcare` set is provided.
|
|
12
|
+
|
|
13
|
+
## Naming convention: technology vs. domain
|
|
14
|
+
|
|
15
|
+
- **`<area>/<name>.md`** — **pure technology**, domain-agnostic. Reusable across all projects.
|
|
16
|
+
Auto-loaded by the commands.
|
|
17
|
+
- **`domainspecs/healthcare/<name>.md` and `<name>.domain.md`** — **healthcare domain-specific**
|
|
18
|
+
rules, all collected under one folder. A `.domain.md` extends the matching technology file
|
|
19
|
+
(FHIR, HL7, DICOM, PHI/HIPAA, ATNA, ICD/SNOMED/LOINC, consent, clinical aggregates, etc.);
|
|
20
|
+
the plain `.md` files there (fhir, hl7, dicom, terminology, consent, hipaa, clinical-terms,
|
|
21
|
+
integration-terms, domain-requirements) are inherently healthcare.
|
|
22
|
+
|
|
23
|
+
> **To reuse on a non-healthcare project:** keep every technology `*.md` as-is and create a
|
|
24
|
+
> sibling `domainspecs/<your-domain>/` folder with your own domain rule files. Select the active
|
|
25
|
+
> domain with `/aw-spec-select-domain` (stored in `.aw-spec/domain.json`); commands resolve
|
|
26
|
+
> `domainspecs/<active-domain>/comandrulemap.md` from it.
|
|
27
|
+
|
|
28
|
+
Note: `domain/domain-driven-design.md` is generic DDD tactical guidance and is treated as
|
|
29
|
+
pure technology (auto-loaded); its healthcare companion lives at
|
|
30
|
+
`domainspecs/healthcare/domain-driven-design.domain.md`.
|
|
31
|
+
|
|
32
|
+
## Files — technology (auto-loaded)
|
|
33
|
+
|
|
34
|
+
### `architecture/`
|
|
35
|
+
- [clean-architecture.md](architecture/clean-architecture.md) — dependency rule, layers, infra boundaries
|
|
36
|
+
- [modular-monolith.md](architecture/modular-monolith.md) — module boundaries, cross-module rules, extraction
|
|
37
|
+
- [folder-structure.md](architecture/folder-structure.md) — mandatory `src/tests/helm/docs` tree (templated with `<SampleProjectName>`)
|
|
38
|
+
- [cqrs.md](architecture/cqrs.md) — mediator, Result pattern, transactions
|
|
39
|
+
- [vertical-slices.md](architecture/vertical-slices.md) — feature & folder structure
|
|
40
|
+
- [persistence.md](architecture/persistence.md) — EF Core, specs, concurrency, tenancy
|
|
41
|
+
- [testing.md](architecture/testing.md) — unit/integration/Testcontainers/coverage
|
|
42
|
+
- [eventing.md](architecture/eventing.md) — CloudEvents, versioning, broker
|
|
43
|
+
|
|
44
|
+
### `security/`
|
|
45
|
+
- [zero-trust.md](security/zero-trust.md) — TLS, identity, secrets
|
|
46
|
+
- [authorization.md](security/authorization.md) — role+scope model, cache policy
|
|
47
|
+
- [authorization-matrix.md](security/authorization-matrix.md) — role/scope matrix
|
|
48
|
+
- [auditing.md](security/auditing.md) — observability, structured logging, immutable audit
|
|
49
|
+
- [data-classification.md](security/data-classification.md) — classification framework, encryption
|
|
50
|
+
|
|
51
|
+
### `governance/`
|
|
52
|
+
- [coding-standards.md](governance/coding-standards.md) — naming, forbidden patterns, CI gates
|
|
53
|
+
- [dependency-policy.md](governance/dependency-policy.md) — package governance, banned packages
|
|
54
|
+
- [api-versioning.md](governance/api-versioning.md) — REST versioning, ETag, OpenAPI/AsyncAPI
|
|
55
|
+
|
|
56
|
+
### `domain/`
|
|
57
|
+
- [domain-driven-design.md](domain/domain-driven-design.md) — generic DDD tactical patterns *(reusable tech, lives here by topic)*
|
|
58
|
+
|
|
59
|
+
### `glossary/`
|
|
60
|
+
- [ai-rules.md](glossary/ai-rules.md) — generic AI agent rules
|
|
61
|
+
|
|
62
|
+
## Files — healthcare domain (`domainspecs/healthcare/`, add per project)
|
|
63
|
+
|
|
64
|
+
**Architecture overlays**
|
|
65
|
+
- [folder-structure.domain.md](domainspecs/healthcare/folder-structure.domain.md) — healthcare Interop, conformance tests, PHI fixtures
|
|
66
|
+
- [cqrs.domain.md](domainspecs/healthcare/cqrs.domain.md) — PHI-audit behavior
|
|
67
|
+
- [vertical-slices.domain.md](domainspecs/healthcare/vertical-slices.domain.md) — FHIR-HL7-DICOM Interop slice
|
|
68
|
+
- [persistence.domain.md](domainspecs/healthcare/persistence.domain.md) — PHI retention & encryption-at-rest
|
|
69
|
+
- [testing.domain.md](domainspecs/healthcare/testing.domain.md) — FHIR validation & synthetic PHI
|
|
70
|
+
- [eventing.domain.md](domainspecs/healthcare/eventing.domain.md) — healthcare feeds & protocol tracing
|
|
71
|
+
|
|
72
|
+
**Domain (clinical)**
|
|
73
|
+
- [domain-driven-design.domain.md](domainspecs/healthcare/domain-driven-design.domain.md) — healthcare canonical aggregates & invariants
|
|
74
|
+
- [domain-requirements.md](domainspecs/healthcare/domain-requirements.md) — project bounded contexts / aggregates *(project-specific)*
|
|
75
|
+
- [fhir.md](domainspecs/healthcare/fhir.md) — projectors, CapabilityStatement, profiles, Bundle/search, SMART, Bulk Data
|
|
76
|
+
- [terminology.md](domainspecs/healthcare/terminology.md) — ICD/LOINC/SNOMED/RxNorm, coded value objects, terminology service
|
|
77
|
+
- [hl7.md](domainspecs/healthcare/hl7.md) — HL7 v2 ingestion/egress, adapters, MLLP
|
|
78
|
+
- [dicom.md](domainspecs/healthcare/dicom.md) — DICOMweb, PACS/VNA boundary, metadata-only persistence
|
|
79
|
+
- [consent.md](domainspecs/healthcare/consent.md) — consent enforcement, break-the-glass, restriction-of-processing, FHIR Consent
|
|
80
|
+
- [hipaa.md](domainspecs/healthcare/hipaa.md) — PHI handling, audit, retention, minimum-necessary, breach handling
|
|
81
|
+
|
|
82
|
+
**Security overlays**
|
|
83
|
+
- [zero-trust.domain.md](domainspecs/healthcare/zero-trust.domain.md) — PHI transport, SMART tokens, ATNA node auth
|
|
84
|
+
- [authorization.domain.md](domainspecs/healthcare/authorization.domain.md) — clinical roles, SMART scopes, consent, break-the-glass
|
|
85
|
+
- [auditing.domain.md](domainspecs/healthcare/auditing.domain.md) — ATNA, FHIR AuditEvent, PHI audit
|
|
86
|
+
- [data-classification.domain.md](domainspecs/healthcare/data-classification.domain.md) — PHI/PII/PCI taxonomy, de-identification
|
|
87
|
+
|
|
88
|
+
**Governance overlays**
|
|
89
|
+
- [coding-standards.domain.md](domainspecs/healthcare/coding-standards.domain.md) — FHIR & PHI patterns and gates
|
|
90
|
+
- [dependency-policy.domain.md](domainspecs/healthcare/dependency-policy.domain.md) — HIPAA suitability, healthcare libs
|
|
91
|
+
- [api-versioning.domain.md](domainspecs/healthcare/api-versioning.domain.md) — FHIR versioning, CapabilityStatement
|
|
92
|
+
|
|
93
|
+
**Glossary**
|
|
94
|
+
- [clinical-terms.md](domainspecs/healthcare/clinical-terms.md) — MRN, Encounter, Observation, Coverage, etc.
|
|
95
|
+
- [integration-terms.md](domainspecs/healthcare/integration-terms.md) — HL7, FHIR, DICOM, PIX/PDQ, ATNA, MHD, XDS
|
|
96
|
+
- [ai-rules.domain.md](domainspecs/healthcare/ai-rules.domain.md) — PHI masking, codes, FHIR, security-edit limits
|
|
97
|
+
|
|
98
|
+
## Context-loading map (which docs to include per AW-Spec command)
|
|
99
|
+
|
|
100
|
+
Technology standards auto-load per command. The per-command mappings are single-sourced:
|
|
101
|
+
|
|
102
|
+
- **Technical defaults** (auto-loaded) — the `Auto-Loaded Engineering Standards` section
|
|
103
|
+
inside each `.claude/skills/aw-spec-<command>/SKILL.md`.
|
|
104
|
+
- **Domain rule files** (selectable) — the active domain's `comandrulemap.md` (e.g.
|
|
105
|
+
[domainspecs/healthcare/comandrulemap.md](domainspecs/healthcare/comandrulemap.md)),
|
|
106
|
+
resolved at runtime from `.aw-spec/domain.json`.
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
# VerticalSlice — Foundation Packaging Rules
|
|
2
|
+
|
|
3
|
+
> **Why this exists.** The old `/aw-spec-foundation` skill *reconstructed* every project
|
|
4
|
+
> file from prose rule docs. Any omission or namespace drift produced a broken,
|
|
5
|
+
> non-compiling skeleton. This packaging model replaces reconstruction with a
|
|
6
|
+
> **byte-for-byte bundle of a real, verified solution**.
|
|
7
|
+
>
|
|
8
|
+
> You build the foundation **once** (a solution that actually compiles and runs),
|
|
9
|
+
> pack it into a single text file, and the scaffolder just **unpacks + renames** it.
|
|
10
|
+
> No regeneration, no drift.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## The single artifact
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
docs/VerticalSlice/
|
|
18
|
+
├── VerticalSlice.pack.txt ← THE BUNDLE: every source file, in one text file
|
|
19
|
+
├── PACKAGING.md ← this file (how to build the bundle)
|
|
20
|
+
├── pack-foundation.ps1 ← produces VerticalSlice.pack.txt from a solution
|
|
21
|
+
└── unpack-foundation.ps1 ← extracts + renames into a target app (used by the skill)
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
The bundle is the single source of truth for scaffolding. The engineering standards
|
|
25
|
+
the foundation solution must satisfy (vertical slices, DDD, CQRS, persistence, etc.)
|
|
26
|
+
live in the project constitution and the domain-specs rule files, not in this folder.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## The sentinel convention
|
|
31
|
+
|
|
32
|
+
You author the foundation solution under one fixed **sentinel app name**:
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
AppWeaver.Foundation
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
This is the placeholder that the scaffolder rewrites into the caller's app name.
|
|
39
|
+
It must be a **distinctive two-segment token** that is **not a prefix of any
|
|
40
|
+
`AppWeaver.*` NuGet package** (it isn't — there is no `AppWeaver.Foundation` package),
|
|
41
|
+
so a full-token replacement can never clobber a framework reference.
|
|
42
|
+
|
|
43
|
+
The scaffolder rewrites the sentinel in **four case forms** (ordinal, case-sensitive),
|
|
44
|
+
applied to **file contents and to file/folder paths**:
|
|
45
|
+
|
|
46
|
+
| Form | Sentinel | Example target (`AppWeaver.Health`) | Where it appears |
|
|
47
|
+
|-------------|------------------------|-------------------------------------|---------------------------------------------------|
|
|
48
|
+
| dotted | `AppWeaver.Foundation` | `AppWeaver.Health` | namespaces, `.csproj`/`.sln` names, project refs |
|
|
49
|
+
| underscored | `AppWeaver_Foundation` | `AppWeaver_Health` | Aspire project class names (`Projects.X_Service`) |
|
|
50
|
+
| lower-hyphen| `appweaver-foundation` | `appweaver-health` | `UserSecretsId`, db/container names |
|
|
51
|
+
| lower-dot | `appweaver.foundation` | `appweaver.health` | any lowercased identifiers |
|
|
52
|
+
|
|
53
|
+
**Never** rename the bare `AppWeaver` company segment on its own — only the full
|
|
54
|
+
sentinel token in the forms above. The framework packages (`AppWeaver.Mediator`,
|
|
55
|
+
`AppWeaver.Repository`, …) stay exactly as written.
|
|
56
|
+
|
|
57
|
+
### What does NOT get renamed
|
|
58
|
+
|
|
59
|
+
- `AppWeaver.*` framework package references (`Directory.Packages.props`, every `.csproj`).
|
|
60
|
+
- The sample domain folder **`Projects`** (aggregate `Project`, `CreateProject`, etc.).
|
|
61
|
+
This is intentional sample content the caller renames to their own bounded context later.
|
|
62
|
+
- `<Company>` / `<Authors>` metadata in `Directory.Build.props` (display-only; edit manually if desired).
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## How to author the foundation solution (do this once)
|
|
67
|
+
|
|
68
|
+
1. **Pick a scratch folder** outside `docs/`, e.g.
|
|
69
|
+
`E:\Work\Bytestrone\AppWeaver\Testing\AppWeaver.Spec\.foundation-build\`.
|
|
70
|
+
2. **Create the solution under the sentinel name** `AppWeaver.Foundation`, following the
|
|
71
|
+
engineering standards in the project constitution and domain-specs rule files:
|
|
72
|
+
```
|
|
73
|
+
AppWeaver.Foundation.sln
|
|
74
|
+
global.json
|
|
75
|
+
Directory.Build.props
|
|
76
|
+
Directory.Packages.props
|
|
77
|
+
src/
|
|
78
|
+
AppWeaver.Foundation.AppHost/
|
|
79
|
+
AppWeaver.Foundation.ServiceDefaults/
|
|
80
|
+
AppWeaver.Foundation.Service/ (includes the sample 'Projects' domain)
|
|
81
|
+
AppWeaver.Foundation.Web/
|
|
82
|
+
```
|
|
83
|
+
3. **Make it actually work.** This is the whole point — the bundle is only as good as
|
|
84
|
+
the solution you pack. Verify before packing:
|
|
85
|
+
```powershell
|
|
86
|
+
dotnet restore .foundation-build/AppWeaver.Foundation.sln
|
|
87
|
+
dotnet build .foundation-build/AppWeaver.Foundation.sln -c Debug
|
|
88
|
+
# optional end-to-end:
|
|
89
|
+
dotnet run --project .foundation-build/src/AppWeaver.Foundation.AppHost
|
|
90
|
+
```
|
|
91
|
+
Fix every error and warning-as-error here, in the real project, where the compiler
|
|
92
|
+
tells you exactly what's wrong. The packed bundle inherits this correctness.
|
|
93
|
+
4. **Use the sentinel everywhere** the app name belongs: namespaces, project/folder
|
|
94
|
+
names, `UserSecretsId`, the Aspire db resource name, container names. Use the correct
|
|
95
|
+
case form for each (see table above).
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## How to build the bundle
|
|
100
|
+
|
|
101
|
+
From `docs/VerticalSlice/`:
|
|
102
|
+
|
|
103
|
+
```powershell
|
|
104
|
+
# This foundation intentionally ships the org-internal Azure Artifacts PAT in NuGet.config,
|
|
105
|
+
# so the secret guard must be overridden with -AllowSecrets (org-internal use only — rotate periodically).
|
|
106
|
+
./pack-foundation.ps1 -SourceDir ../../.foundation-build -OutFile ./VerticalSlice.pack.txt -AllowSecrets
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
The packer:
|
|
110
|
+
|
|
111
|
+
- walks the solution, **excluding** build/IDE artifacts and secret-bearing files:
|
|
112
|
+
- dirs: `bin obj .vs .git .idea .vscode TestResults node_modules packages App_Data artifacts .next logs`
|
|
113
|
+
- files: `*.user *.suo *.DotSettings.user *.db *.db-shm *.db-wal *.sqlite *.log`
|
|
114
|
+
and **secrets**: `.env.* *.pfx *.pem *.key *.snk id_rsa id_rsa.pub secrets.json`;
|
|
115
|
+
> The root **`.env` is bundled on purpose** (required sample config); only per-environment
|
|
116
|
+
> overrides (`.env.local`, `.env.production`, …) are excluded. Keep the bundle org-internal
|
|
117
|
+
> and rotate any real values — the content scan still blocks PATs/keys regardless of filename.
|
|
118
|
+
- **fails closed on detected secrets** — it scans file *contents* for credential markers
|
|
119
|
+
(`ClearTextPassword`, private-key blocks, AWS keys, Azure DevOps PAT patterns) and
|
|
120
|
+
**refuses to pack** if any are found, unless you pass `-AllowSecrets`. This is what stops
|
|
121
|
+
a `NuGet.config` PAT from being baked into the committed bundle. **Fix the source** (rotate
|
|
122
|
+
the secret, switch the feed to env/CLI auth) rather than overriding the guard;
|
|
123
|
+
- stores text files **verbatim** and binary files (e.g. a `.png`) **base64-encoded**;
|
|
124
|
+
- writes a header (foundation, sentinel, file count, format version, replacement contract);
|
|
125
|
+
- **warns** if the sentinel token appears in zero files (a sign you used the wrong name).
|
|
126
|
+
|
|
127
|
+
> **Credentials in a scaffold.** The bundled `NuGet.config` should contain only feed
|
|
128
|
+
> *definitions* and `packageSourceMapping` — never `<packageSourceCredentials>`. Developers
|
|
129
|
+
> authenticate to private feeds with `dotnet nuget` / the Azure Artifacts credential provider
|
|
130
|
+
> / environment variables, not a checked-in PAT.
|
|
131
|
+
|
|
132
|
+
Re-run it whenever the foundation changes; commit the regenerated `VerticalSlice.pack.txt`.
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## Pack file format (`aw-spec-pack/v1`)
|
|
137
|
+
|
|
138
|
+
```
|
|
139
|
+
# AW-SPEC FOUNDATION PACK
|
|
140
|
+
# foundation: VerticalSlice
|
|
141
|
+
# sentinel: AppWeaver.Foundation
|
|
142
|
+
# generated: 2026-06-14T10:00:00.0000000Z
|
|
143
|
+
# files: 47
|
|
144
|
+
# format: aw-spec-pack/v1
|
|
145
|
+
# --- replacement contract ... ---
|
|
146
|
+
# ============================================================
|
|
147
|
+
|
|
148
|
+
<<<FILE path="Directory.Build.props">>>
|
|
149
|
+
...verbatim file content...
|
|
150
|
+
<<<ENDFILE>>>
|
|
151
|
+
<<<FILE path="src/AppWeaver.Foundation.AppHost/Program.cs">>>
|
|
152
|
+
...verbatim file content...
|
|
153
|
+
<<<ENDFILE>>>
|
|
154
|
+
<<<FILE path="src/AppWeaver.Foundation.Web/wwwroot/favicon.ico" encoding="base64">>>
|
|
155
|
+
AAABAAE...
|
|
156
|
+
<<<ENDFILE>>>
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
- Paths are repo-root-relative with `/` separators.
|
|
160
|
+
- The marker lines `<<<FILE …>>>` and `<<<ENDFILE>>>` are **reserved** — they must never
|
|
161
|
+
occur as a literal line inside a source file (they can't in C#/XML/JSON/Razor).
|
|
162
|
+
- `encoding="base64"` marks a binary file; everything else is UTF-8 text.
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## How scaffolding consumes the bundle
|
|
167
|
+
|
|
168
|
+
`/aw-spec-foundation VerticalSlice <AppName> [OutputDir]` runs `unpack-foundation.ps1`,
|
|
169
|
+
which reads the sentinel from the pack header, derives the four target case forms, and
|
|
170
|
+
writes the renamed files to the output directory (**repo root by default**). See
|
|
171
|
+
`.claude/skills/aw-spec-foundation/SKILL.md`.
|
|
172
|
+
|
|
173
|
+
```powershell
|
|
174
|
+
./unpack-foundation.ps1 -PackFile ./VerticalSlice.pack.txt -TargetAppName AppWeaver.Health -OutDir ../../
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## Maintenance checklist
|
|
180
|
+
|
|
181
|
+
- [ ] Foundation solution builds clean (`dotnet build`, warnings-as-errors satisfied).
|
|
182
|
+
- [ ] Sentinel `AppWeaver.Foundation` used consistently in all four case forms.
|
|
183
|
+
- [ ] No `bin/obj/.vs` or local `.db` files committed into the pack.
|
|
184
|
+
- [ ] `pack-foundation.ps1` reported a non-zero sentinel hit count.
|
|
185
|
+
- [ ] `VerticalSlice.pack.txt` regenerated and committed after any change.
|