aw-spec-cli 0.1.26 → 0.1.28

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 (137) hide show
  1. package/assets/.agents/skills/appweaver/SKILL.md +7 -47
  2. package/assets/.appweaver/ORCH-DIALECT.md +13 -9
  3. package/assets/.appweaver/RULE-PARTITION.md +11 -12
  4. package/assets/.appweaver/STACK-PROFILES.md +260 -108
  5. package/assets/.appweaver/domain.json +1 -1
  6. package/assets/.appweaver/interpreter/run-skill.py +28 -7
  7. package/assets/.appweaver/orchestrator/AGENT-PROFILE.md +38 -10
  8. package/assets/.appweaver/orchestrator/LAUNCHER.md +88 -0
  9. package/assets/.appweaver/orchestrator/README.md +120 -53
  10. package/assets/.appweaver/orchestrator/adapters/claude_agent_sdk.py +1 -1
  11. package/assets/.appweaver/orchestrator/modules/delta-plan.orch.yaml +17 -7
  12. package/assets/.appweaver/orchestrator/modules/domain-select.orch.yaml +6 -4
  13. package/assets/.appweaver/orchestrator/modules/foundation-lane.orch.yaml +237 -0
  14. package/assets/.appweaver/orchestrator/modules/foundation-pack.orch.yaml +392 -0
  15. package/assets/.appweaver/orchestrator/modules/foundation-spec.orch.yaml +548 -0
  16. package/assets/.appweaver/orchestrator/modules/lane-gate.orch.yaml +4 -4
  17. package/assets/.appweaver/orchestrator/modules/tech-select.orch.yaml +3 -3
  18. package/assets/.appweaver/orchestrator/orchestrator.py +162 -63
  19. package/assets/.appweaver/orchestrator/rev-templates/delta-design-template.skeleton.md +5 -4
  20. package/assets/.appweaver/orchestrator/rev-templates/design-template.skeleton.md +3 -1
  21. package/assets/.appweaver/orchestrator/rev-templates/domain-constitution.skeleton.md +2 -2
  22. package/assets/.appweaver/orchestrator/rev-templates/domain-requirements.skeleton.md +2 -2
  23. package/assets/.appweaver/orchestrator/rev-templates/domain-rule-bindings.skeleton.md +21 -13
  24. package/assets/.appweaver/orchestrator/rev-templates/frontend-rule-file.skeleton.md +1 -1
  25. package/assets/.appweaver/orchestrator/rev-templates/tech-rule-bindings.skeleton.md +28 -31
  26. package/assets/.appweaver/orchestrator/rev-templates/technical-constitution.skeleton.md +2 -2
  27. package/assets/.appweaver/orchestrator/rev-templates/technical-rule-file.skeleton.md +1 -1
  28. package/assets/.appweaver/orchestrator/rev-templates/ui-constitution.skeleton.md +3 -3
  29. package/assets/.appweaver/orchestrator/rev-templates/ui-delta-design-template.skeleton.md +4 -1
  30. package/assets/.appweaver/orchestrator/rev-templates/ui-design-template.skeleton.md +6 -4
  31. package/assets/.appweaver/orchestrator/workflows/_smoke.orch.yaml +41 -3
  32. package/assets/.appweaver/orchestrator/workflows/aw-spec-add-component.orch.yaml +1 -1
  33. package/assets/.appweaver/orchestrator/workflows/aw-spec-adopt.orch.yaml +17 -16
  34. package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-plan-delta.orch.yaml +7 -1
  35. package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-plan.orch.yaml +7 -1
  36. package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-slice-delta.orch.yaml +3 -3
  37. package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-slice.orch.yaml +3 -3
  38. package/assets/.appweaver/orchestrator/workflows/aw-spec-build.orch.yaml +4 -4
  39. package/assets/.appweaver/orchestrator/workflows/aw-spec-characterize.orch.yaml +2 -2
  40. package/assets/.appweaver/orchestrator/workflows/aw-spec-constitution.orch.yaml +61 -12
  41. package/assets/.appweaver/orchestrator/workflows/aw-spec-deploy.orch.yaml +1 -1
  42. package/assets/.appweaver/orchestrator/workflows/aw-spec-foundation.orch.yaml +172 -293
  43. package/assets/.appweaver/orchestrator/workflows/aw-spec-implement.orch.yaml +253 -44
  44. package/assets/.appweaver/orchestrator/workflows/aw-spec-onboard.orch.yaml +72 -71
  45. package/assets/.appweaver/orchestrator/workflows/aw-spec-parity.orch.yaml +2 -2
  46. package/assets/.appweaver/orchestrator/workflows/aw-spec-plan.orch.yaml +38 -14
  47. package/assets/.appweaver/orchestrator/workflows/aw-spec-run.orch.yaml +4 -4
  48. package/assets/.appweaver/orchestrator/workflows/aw-spec-select-bounded-context.orch.yaml +26 -2
  49. package/assets/.appweaver/orchestrator/workflows/aw-spec-select-domain.orch.yaml +21 -15
  50. package/assets/.appweaver/orchestrator/workflows/aw-spec-select-stack.orch.yaml +14 -14
  51. package/assets/.appweaver/orchestrator/workflows/aw-spec-specify.orch.yaml +3 -3
  52. package/assets/.appweaver/orchestrator/workflows/aw-spec-ui-model.orch.yaml +3 -3
  53. package/assets/.appweaver/orchestrator/workflows/aw-spec-ui-prototype.orch.yaml +6 -6
  54. package/assets/.appweaver/scripts/bash/aw-spec-actions.sh +371 -131
  55. package/assets/.appweaver/scripts/powershell/aw-spec-actions.ps1 +293 -76
  56. package/assets/.appweaver/scripts/python/aw-foundation.py +885 -20
  57. package/assets/.appweaver/scripts/python/aw-inventory.py +28 -21
  58. package/assets/.appweaver/scripts/python/aw-plan-coverage.py +2 -2
  59. package/assets/.appweaver/scripts/python/aw-rev-constitution.py +6 -6
  60. package/assets/.appweaver/scripts/python/aw-stack.py +676 -99
  61. package/assets/.appweaver/stack-profiles/angular.json +2 -1
  62. package/assets/.appweaver/stack-profiles/blazor-wasm.json +2 -1
  63. package/assets/.appweaver/stack-profiles/dotnet-webapi.json +18 -3
  64. package/assets/.appweaver/stack-profiles/go-chi.json +6 -1
  65. package/assets/.appweaver/stack-profiles/java-spring.json +14 -5
  66. package/assets/.appweaver/stack-profiles/nextjs.json +2 -1
  67. package/assets/.appweaver/stack-profiles/node-express.json +8 -2
  68. package/assets/.appweaver/stack-profiles/python-fastapi.json +9 -2
  69. package/assets/.appweaver/stack-profiles/react-vite.json +2 -1
  70. package/assets/.appweaver/stack-profiles/sveltekit.json +2 -1
  71. package/assets/.appweaver/stack-profiles/vue-vite.json +2 -1
  72. package/assets/.appweaver/stacks.json +40 -1
  73. package/assets/.appweaver/templates/constitution-ui-template.md +2 -2
  74. package/assets/.appweaver/templates/delta-design-template.md +7 -5
  75. package/assets/.appweaver/templates/design-template.md +3 -0
  76. package/assets/.appweaver/templates/ui-delta-design-template.md +1 -1
  77. package/assets/.appweaver/templates/ui-design-template.md +6 -4
  78. package/assets/.claude/skills/appweaver/SKILL.md +7 -46
  79. package/assets/foundations/dotnet/ModularMonolith/ModularMonolith.Reference.rules.json +31 -0
  80. package/assets/foundations/dotnet/ModularMonolith/ModularMonolith.lane.json +6 -0
  81. package/assets/foundations/dotnet/VerticalSlice/VerticalSlice.Reference.rules.json +16 -0
  82. package/assets/foundations/dotnet/VerticalSlice/VerticalSlice.lane.json +6 -0
  83. package/assets/foundations/foundation.spec.template.txt +98 -0
  84. package/assets/foundations/java/Hexagonal/Hexagonal.lane.json +6 -0
  85. package/assets/foundations/java/Hexagonal/Hexagonal.pack.txt +8 -1
  86. package/assets/foundations/java/Hexagonal/unpack-foundation.sh +4 -5
  87. package/assets/foundations/node/NextAppRouter/NextAppRouter.spec.txt +68 -0
  88. package/assets/guardrails/README.md +31 -17
  89. package/assets/guardrails/{projects/dotnet-default-project → project-specific}/domain-rule-bindings.md +25 -13
  90. package/assets/guardrails/project-specific/tech-rule-bindings.md +296 -0
  91. package/assets/guardrails/technology/dotnet-webapi/PACKAGING.md +58 -4
  92. package/assets/guardrails/technology/dotnet-webapi/api-versioning.md +1 -1
  93. package/assets/guardrails/technology/dotnet-webapi/auditing.md +1 -1
  94. package/assets/guardrails/technology/dotnet-webapi/authorization.md +1 -1
  95. package/assets/guardrails/technology/dotnet-webapi/clean-architecture.md +1 -1
  96. package/assets/guardrails/technology/dotnet-webapi/coding-standards.md +1 -1
  97. package/assets/guardrails/technology/dotnet-webapi/cqrs.md +1 -1
  98. package/assets/guardrails/technology/dotnet-webapi/data-classification.md +1 -1
  99. package/assets/guardrails/technology/dotnet-webapi/dependency-policy.md +1 -1
  100. package/assets/guardrails/technology/dotnet-webapi/eventing.md +1 -1
  101. package/assets/guardrails/technology/dotnet-webapi/folder-structure.md +1 -1
  102. package/assets/guardrails/technology/dotnet-webapi/framework-api-map.md +1 -1
  103. package/assets/guardrails/technology/dotnet-webapi/modular-monolith.md +1 -1
  104. package/assets/guardrails/technology/dotnet-webapi/persistence.md +1 -1
  105. package/assets/guardrails/technology/dotnet-webapi/testing.md +1 -1
  106. package/assets/guardrails/technology/dotnet-webapi/vertical-slices.md +1 -1
  107. package/assets/guardrails/technology/dotnet-webapi/zero-trust.md +1 -1
  108. package/assets/guardrails/technology/nextjs/accessibility-implementation.md +1 -1
  109. package/assets/guardrails/technology/nextjs/api-client.md +1 -1
  110. package/assets/guardrails/technology/nextjs/api-integration.dotnet-webapi.md +1 -1
  111. package/assets/guardrails/technology/nextjs/api-integration.java-spring.md +1 -1
  112. package/assets/guardrails/technology/nextjs/auth-session.md +1 -1
  113. package/assets/guardrails/technology/nextjs/client-security.md +1 -1
  114. package/assets/guardrails/technology/nextjs/component-architecture.md +1 -1
  115. package/assets/guardrails/technology/nextjs/component-conventions.md +2 -2
  116. package/assets/guardrails/technology/nextjs/design-system.md +1 -1
  117. package/assets/guardrails/technology/nextjs/error-handling.md +1 -1
  118. package/assets/guardrails/technology/nextjs/forms-and-validation.md +1 -1
  119. package/assets/guardrails/technology/nextjs/frontend-testing.md +1 -1
  120. package/assets/guardrails/technology/nextjs/i18n.md +1 -1
  121. package/assets/guardrails/technology/nextjs/observability.md +1 -1
  122. package/assets/guardrails/technology/nextjs/performance-budgets.md +1 -1
  123. package/assets/guardrails/technology/nextjs/routing-navigation.md +1 -1
  124. package/assets/guardrails/technology/nextjs/state-management.md +1 -1
  125. package/assets/guardrails/technology/nextjs/ui-constitution.md +3 -3
  126. package/package.json +1 -1
  127. package/assets/.agents/skills/appweaver-demo/SKILL.md +0 -59
  128. package/assets/.appweaver/orchestrator/.smoke-out/smoke.md +0 -6
  129. package/assets/.appweaver/orchestrator/workflows/aw-spec-demo.orch.yaml +0 -100
  130. package/assets/.claude/skills/appweaver-demo/SKILL.md +0 -59
  131. package/assets/.kilocode/agent.json +0 -28
  132. package/assets/.kilocode/workflows/appweaver-demo.md +0 -59
  133. package/assets/.kilocode/workflows/appweaver.md +0 -55
  134. package/assets/guardrails/projects/dotnet-default-project/tech-rule-bindings.md +0 -271
  135. /package/assets/guardrails/{projects/dotnet-default-project → project-specific}/domain/domain-requirements.md +0 -0
  136. /package/assets/guardrails/{projects/dotnet-default-project → project-specific}/frontend/ui-requirements.md +0 -0
  137. /package/assets/guardrails/{projects/dotnet-default-project → project-specific}/service/technical-requirements.md +0 -0
@@ -1,59 +0,0 @@
1
- ---
2
- name: "appweaver-demo"
3
- description: "Prototype launcher (Kilo Code): run the aw-orchestrator using the specified strategy (spawn, agent, sdk, sdk-apply)."
4
- argument-hint: "Optional strategy ('agent', 'spawn', 'sdk', 'sdk-apply') and/or k=value vars (e.g. 'agent out_dir=...')"
5
- compatibility: "Requires .appweaver/orchestrator/ and the claude CLI on PATH"
6
- user-invocable: true
7
- disable-model-invocation: false
8
- ---
9
-
10
- # Orchestrator Launcher
11
-
12
- All orchestration lives in the workflow YAML and is executed by `.appweaver/orchestrator/orchestrator.py` (the general, agent-agnostic engine). The interpreter assembles the COMPLETE payload (system + user) for every request; you never author generation context yourself.
13
-
14
- - **Engine + workflow (general):** `.appweaver/orchestrator/orchestrator.py`, `*.orch.yaml`
15
- - **This agent's transport profile:** `.kilocode/agent.json`
16
-
17
- > Kilo Code has no native headless CLI, so it reuses `claude -p` for `spawn`
18
- > (native `--system-prompt`, `--tools`, `--bare` isolation). Its `sdk` block
19
- > declares the SDK the `sdk`/`sdk-apply` strategies import (`claude-agent-sdk`)
20
- > and the adapter (`.appweaver/orchestrator/adapters/claude_agent_sdk.py`,
21
- > shared per-SDK) that owns its calling convention.
22
-
23
- ## Execution Steps
24
-
25
- 1. **Parse Arguments**:
26
- - Identify the requested strategy (one of: `agent`, `spawn`, `sdk`, `sdk-apply`). If the user specifies a strategy as the first argument, use it. Otherwise, default to `spawn`.
27
- - Always pass the strategy explicitly: `--strategy <strategy>`.
28
- - `--agent-profile .kilocode/agent.json` is required for `spawn`, `sdk`, and `sdk-apply`:
29
- `spawn` reads the CLI to launch from it; `sdk`/`sdk-apply` read the SDK
30
- package/module (and its `adapter` file) to import from its `sdk` block.
31
- If the SDK package isn't installed, add `--sdk-install` so the engine
32
- pip-installs the declared package first. (`agent` needs no profile.)
33
- - `--checkpoint .appweaver/orchestrator/.demo-out/demo.state.json` is required for
34
- `sdk-apply` and `agent` (suspend/resume — follow the loop in step 3).
35
- - `spawn` may also add `--isolation bare|fresh` and `--model <name>` (bare is
36
- strongest; use it when `ANTHROPIC_API_KEY` is set). `sdk`/`sdk-apply` accept
37
- `--model <name>`; isolation is intrinsic (fresh SDK session, no settings).
38
-
39
- 2. **Run the Interpreter**:
40
- Run the command (include only the bracketed flags that apply to the chosen strategy):
41
- ```bash
42
- python3 .appweaver/orchestrator/orchestrator.py \
43
- .appweaver/orchestrator/workflows/aw-spec-demo.orch.yaml \
44
- --strategy <strategy> \
45
- [--agent-profile .kilocode/agent.json] # spawn, sdk, sdk-apply \
46
- [--checkpoint .appweaver/orchestrator/.demo-out/demo.state.json] # sdk-apply, agent \
47
- --json
48
- ```
49
-
50
- 3. **Handle Suspend/Resume Loop (for `agent` or `sdk-apply` strategies)**:
51
- - If the command exits with code `2` (suspend):
52
- - Read the prompt from the sidecar file `<checkpoint-path>.user.md` (and system instructions from `<checkpoint-path>.system.md`).
53
- - Fulfill the request directly using your own tools (e.g., implementing the handler or reviewing files in the workspace).
54
- - Write the final generation or review output to `<checkpoint-path>.response.md`.
55
- - Re-run the exact same command.
56
- - Repeat until the orchestrator exits with code `0`.
57
-
58
- 4. **Report**:
59
- Report the final JSON outputs (`status`, `outputs`, `review_pass`, generated file paths, etc.) to the user.
@@ -1,55 +0,0 @@
1
- ---
2
- name: "appweaver"
3
- description: "Parametric launcher (Kilo Code): run ANY converted aw-spec skill on the aw-orchestrator under one of the 4 strategies (agent [default], spawn, sdk, sdk-apply)."
4
- argument-hint: "<skill> [strategy] [input…] — e.g. 'select-domain', 'specify spawn Build an order API', 'analyze-slice'"
5
- compatibility: "Requires .appweaver/orchestrator/ and the claude CLI on PATH"
6
- user-invocable: true
7
- disable-model-invocation: false
8
- ---
9
-
10
- # Orchestrator Skill Launcher
11
-
12
- Runs one converted `aw-spec-*` workflow on the shared, agent-agnostic engine. All orchestration and **all context management live in the workflow YAML + engine** (`.appweaver/orchestrator/orchestrator.py`): the interpreter assembles the COMPLETE payload (system + user) for every request; you never author generation context yourself. Execution follows the chosen strategy; the checkpoint channel carries every human-facing interaction regardless of strategy.
13
-
14
- - **Engine + workflows (common, shared by all agents):** `.appweaver/orchestrator/orchestrator.py`, `.appweaver/orchestrator/workflows/aw-spec-<skill>.orch.yaml`, shared modules in `.appweaver/orchestrator/modules/`, shared scripts in `.appweaver/scripts/`
15
- - **This agent's transport profile:** `.kilocode/agent.json`
16
-
17
- > Kilo Code has no native headless CLI, so it reuses `claude -p` for `spawn`
18
- > (native `--system-prompt`, `--tools`, `--bare` isolation). Its `sdk` block
19
- > declares the SDK the `sdk`/`sdk-apply` strategies import (`claude-agent-sdk`)
20
- > and the adapter (`.appweaver/orchestrator/adapters/claude_agent_sdk.py`,
21
- > shared per-SDK) that owns its calling convention.
22
-
23
- ## Execution Steps
24
-
25
- 1. **Parse Arguments** (`<skill> [strategy] [input…]`):
26
- - `skill` (required): the aw-spec skill name, e.g. `demo`, `select-domain`, `foundation`, `specify`, `design`, `implement`, `build`. Resolve the workflow file `.appweaver/orchestrator/workflows/aw-spec-<skill>.orch.yaml`. If it does not exist, list the available `aw-spec-*.orch.yaml` files in that folder and stop.
27
- - `strategy` (optional, one of `agent`, `spawn`, `sdk`, `sdk-apply`; default `agent` — YOU fulfill each generation through the checkpoint channel, no profile needed): who executes each generation. Always pass `--strategy <strategy>`.
28
- - Everything after the strategy is the user input: pass it as `--input "<text>"` (omit when empty).
29
- - `--agent-profile .kilocode/agent.json` is required for `spawn`, `sdk`, and `sdk-apply` (`agent` needs no profile). If the SDK package isn't installed, add `--sdk-install`.
30
- - **Always** pass `--checkpoint .appweaver/orchestrator/.state/<skill>.state.json` — for EVERY strategy. Converted skills contain interactive steps (questions, selections, hooks); the checkpoint is how they reach you and the user. Strategies only govern who generates.
31
- - `spawn` may also add `--isolation bare|fresh` and `--model <name>`; `sdk`/`sdk-apply` accept `--model <name>`.
32
-
33
- 2. **Run the Interpreter**:
34
- ```bash
35
- python3 .appweaver/orchestrator/orchestrator.py \
36
- .appweaver/orchestrator/workflows/aw-spec-<skill>.orch.yaml \
37
- --strategy <strategy> \
38
- --checkpoint .appweaver/orchestrator/.state/<skill>.state.json \
39
- [--agent-profile .kilocode/agent.json] # spawn, sdk, sdk-apply \
40
- [--input "<user input>"] \
41
- --json
42
- ```
43
-
44
- 3. **Handle the Suspend/Resume Loop** — whenever the command exits with code `2`, read the printed `pending` JSON and dispatch on `pending.kind`; fulfill it, write the response to `pending.response_path`, then re-run the SAME command. Repeat until exit `0` (done) or `1` (stopped by a gate).
45
- - **`ask`** — ask the USER the `prompt` with the listed `options` (use your question tool). Write the chosen answer as PLAIN TEXT to `response_path` (comma-separated values when `multi` is true).
46
- - **`select`** — ask the USER to pick ONE of `options`; write the chosen value as plain text to `response_path`.
47
- - **`hook`** — run each MANDATORY hook in `hooks` (each is a slash command of THIS agent) in this conversation; optional hooks at your discretion. Then write `done` to `response_path`.
48
- - **`author`** — read `system_path` + `user_path` and treat them as your ONLY standards and context. Author the COMPLETE content of the file named in `target` and write it — content ONLY, no commentary, no code fence — to `response_path`. Do NOT write the target file yourself; the interpreter does that.
49
- - **`agent_generate`** — read `system_path` + `user_path`; perform the task YOURSELF with the listed `tools` within `permission_mode`; write your full final reply — ending with the required ```json fence — to `response_path`.
50
- - **`agent_query` / `agent_review`** — same as above but READ-ONLY (do not modify files); the reply must end with the required ```json fence.
51
- - **`apply`** — an isolated generation already decided the changes: read `artifact_path` and write its file contents EXACTLY to the paths it names, then write the confirmation ```json fence to `response_path`.
52
- - If `pending.note` is present, your previous response was rejected — follow the note and rewrite `response_path`.
53
-
54
- 4. **Report**:
55
- Report the final JSON (`status`, `outputs`, and any `reason`) to the user. On `stopped`, relay the gate message verbatim — it tells the user what to fix or run first.
@@ -1,271 +0,0 @@
1
- # dotnet-default-project — Command → Technical-Rule-File Map
2
-
3
- Per-command list of the **technical** rule files this project loads (via `resolve-tech` +
4
- the `tech-select` module, into the sticky standards set) for the spec-anchored
5
- orchestrator pipeline. This is the technical counterpart of `domain-rule-bindings.md`
6
- (which maps the DOMAIN rule files).
7
-
8
- **The model:** the technical rule files are CONFIGURATION — tune this map, not the
9
- workflows. They live in the **shared technology corpora**, one folder per stack, and this
10
- map is what binds a project to them. The ratified output (`constitution.technical.md`) is
11
- NOT listed here — every consumer refers to it directly, as-is.
12
-
13
- - All paths are workspace-relative. This project maps two stacks:
14
- `guardrails/technology/dotnet-webapi/` (the service) and
15
- `guardrails/technology/nextjs/` (the frontend lane). Both are **standard rules shared by
16
- every project that maps them**, and neither is domain-specific. The frontend corpus is
17
- read by three headings — `## /aw-spec-ui-constitution` ratifies the lane's base, and
18
- `## /aw-spec-plan-ui` / `## /aw-spec-implement-ui` carry the detail rules under it.
19
- - The two files this project authors — `service/technical-requirements.md` and
20
- `frontend/ui-requirements.md` — live beside this map. They are the only mapped technical
21
- files expected to differ between two projects on the same stacks.
22
- - `technology/dotnet-webapi/examples/` holds the worked `<SampleProjectName>` sample for the
23
- rule file beside it, split out so a phase can load the rules without the sample code. The
24
- code-generating phases map both; `## /aw-spec-constitution` maps the rules alone, because a
25
- thin authority document has no use for sample code.
26
- - `resolve-tech --command <name>` collects the `- ` bullets under `## /<name>`.
27
- - Adding a stack is adding a corpus and mapping it — `guardrails/technology/java-spring/`
28
- ships unmapped for exactly that. No workflow, script or engine change is involved.
29
- - **This map is pinned to .NET on purpose** — it is the *default .NET project*, and the stack
30
- directories below are spelled out. Read from a repo whose lanes declare another stack,
31
- `resolve-tech` returns `stack_mismatch` and `tech-select` asks before loading, because these
32
- files become sticky standards the code generator follows. A project on another stack should
33
- copy this folder and repoint the bullets, not adopt it as-is.
34
- - A bullet may name its stack with a **placeholder** instead — `{{stack}}`,
35
- `{{backend_stack}}`, `{{frontend_stack}}`, `{{backend_ecosystem}}`, `{{frontend_ecosystem}}`
36
- — resolved from `.appweaver/stacks.json`. `guardrails/technology/{{stack}}/persistence.md`
37
- reads as `java-spring/` in a Spring repo and `dotnet-webapi/` here, so ONE map serves every
38
- stack a project declares. A placeholder for an undeclared lane skips that bullet; a resolved
39
- path with no file on disk is reported, not silently dropped. See STACK-PROFILES.md §7a.
40
- - This file is the **canonical technical mapping** for this project; it is selected whenever
41
- `dotnet-default-project` is the active project (`.appweaver/domain.json`).
42
- - A command with no heading here loads no mapped technical file (only the workflow's
43
- universal `ai-rules.md` seed + `constitution.technical.md`, referred to directly).
44
- - `## /aw-spec-specify` is the one **modelling-methodology** slot (see the rule partition):
45
- a domain-agnostic way of *modelling*, never a technology choice. Everything below it is a
46
- HOW-phase technical set.
47
-
48
- ---
49
-
50
- ## /aw-spec-specify
51
- <!-- MODELLING METHODOLOGY ONLY, in two halves. Specify is the domain phase: the single kind
52
- of technical input it may take is a domain-agnostic way of MODELLING, never a technology
53
- choice. Do NOT add an architecture / persistence / codegen file here — that would break
54
- specify's domain purity (design/implement own those). The domain's own DDD overlay
55
- (domain-driven-design.domain.md) arrives separately via domain-rule-bindings.
56
-
57
- 1. THE DOMAIN MODEL — DDD tactical patterns, plus the same methodology worked through
58
- in code as the example beside it.
59
- 2. THE EXPERIENCE MODEL — the ux/ rules that govern how specify states the experience:
60
- Experience Scope, and the project-wide Experience Standards it lifts as UX- ids for
61
- prototype / design-ui / implement-ui to author and verify against. These are
62
- methodology, not visual design; each file's own "What must NOT appear" section is
63
- what keeps screens out of the spec.
64
-
65
- ⚠ The ux/ files sit in a DOMAIN corpus folder but are TECHNICAL-tier inputs: a file's
66
- tier is the map that lists it, not the folder it lives in. guardrails/domain/healthcare/
67
- ihe-conformance.md under ## /aw-spec-plan is the same pattern. Unmapping them does not
68
- make the spec's Experience Standards section disappear — the section is unconditional and
69
- resolves to "None" — it removes the methodology specify fills it from. -->
70
- - guardrails/technology/dotnet-webapi/domain-driven-design.md
71
- - guardrails/technology/dotnet-webapi/examples/domain-driven-design.md
72
- - guardrails/domain/healthcare/ux/journey-mapping.md
73
- - guardrails/domain/healthcare/ux/interaction-states.md
74
- - guardrails/domain/healthcare/ux/accessibility-standards.md
75
- - guardrails/domain/healthcare/ux/content-design.md
76
-
77
- ## /aw-spec-plan
78
- <!-- The technical/architecture rule files the design author works from (alongside the
79
- spec and constitution.technical.md), each followed by its worked example. NO domain file
80
- here — domain reaches design only as spec ids (BR-/CN-/DC-/IC-). -->
81
- - guardrails/technology/dotnet-webapi/clean-architecture.md
82
- - guardrails/technology/dotnet-webapi/cqrs.md
83
- - guardrails/technology/dotnet-webapi/eventing.md
84
- - guardrails/technology/dotnet-webapi/modular-monolith.md
85
- - guardrails/technology/dotnet-webapi/vertical-slices.md
86
- - guardrails/technology/dotnet-webapi/persistence.md
87
- - guardrails/technology/dotnet-webapi/folder-structure.md
88
- - guardrails/technology/dotnet-webapi/testing.md
89
- - guardrails/technology/dotnet-webapi/api-versioning.md
90
- - guardrails/technology/dotnet-webapi/zero-trust.md
91
- - guardrails/technology/dotnet-webapi/authorization.md
92
- - guardrails/technology/dotnet-webapi/authorization-matrix.md
93
- - guardrails/technology/dotnet-webapi/auditing.md
94
- - guardrails/technology/dotnet-webapi/data-classification.md
95
- - guardrails/domain/healthcare/ihe-conformance.md
96
- - guardrails/technology/dotnet-webapi/examples/clean-architecture.md
97
- - guardrails/technology/dotnet-webapi/examples/cqrs.md
98
- - guardrails/technology/dotnet-webapi/examples/eventing.md
99
- - guardrails/technology/dotnet-webapi/examples/vertical-slices.md
100
- - guardrails/technology/dotnet-webapi/examples/persistence.md
101
- - guardrails/technology/dotnet-webapi/examples/api-versioning.md
102
- - guardrails/technology/dotnet-webapi/examples/zero-trust.md
103
- - guardrails/technology/dotnet-webapi/examples/authorization.md
104
- - guardrails/technology/dotnet-webapi/examples/auditing.md
105
-
106
- ## /aw-spec-plan-ui
107
- <!-- The FRONTEND LANE's design phase. Its own heading, not a branch of ## /aw-spec-plan:
108
- the two lanes are governed by different constitution halves and own disjoint source
109
- paths, so keying the map on this command name gives the lane its own rule set for zero
110
- mechanism change. NO domain file here — the domain reaches design.ui.md as spec ids,
111
- exactly as it reaches design.md. The lane's ratified base (constitution.ui.md) is
112
- referred to directly and is NOT mapped.
113
-
114
- THE SERVICE LANE ENTERS THROUGH ONE FILE. api-integration.{{backend_stack}}.md is the
115
- CROSS-LANE pairing rule set — what the service guarantees (paging shape, concurrency
116
- token, error codes, redaction, caching, CORS) and what the client therefore must do.
117
- It is named for the service stack and mapped through the placeholder, so ONE bullet
118
- serves every backend: it resolves to api-integration.dotnet-webapi.md here and to
119
- api-integration.java-spring.md in a Spring repo — both authored — and to a REPORTED
120
- missing file for a backend whose pairing nobody has written yet, rather than silently
121
- loading one stack's assumptions into another. A repo with no backend lane skips the
122
- bullet entirely. No other service-lane file is mapped here: design.ui.md consumes the
123
- published surface, never the service's internals. -->
124
- - guardrails/technology/nextjs/component-architecture.md
125
- - guardrails/technology/nextjs/routing-navigation.md
126
- - guardrails/technology/nextjs/state-management.md
127
- - guardrails/technology/nextjs/error-handling.md
128
- - guardrails/technology/nextjs/forms-and-validation.md
129
- - guardrails/technology/nextjs/auth-session.md
130
- - guardrails/technology/nextjs/design-system.md
131
- - guardrails/technology/nextjs/accessibility-implementation.md
132
- - guardrails/technology/nextjs/i18n.md
133
- - guardrails/technology/nextjs/performance-budgets.md
134
- - guardrails/technology/nextjs/api-integration.{{backend_stack}}.md
135
-
136
- ## /aw-spec-implement
137
- <!-- The FRAMEWORK / code-generation rule files the SERVICE lane's generator builds against
138
- (alongside backend-plan.md and constitution.technical.md), on the BOOTSTRAP path.
139
- NO domain file — domain reaches implement only through the plan. clean-architecture/cqrs
140
- are planning concerns; component wiring is a separate /appweaver add-component step. -->
141
- - guardrails/technology/dotnet-webapi/coding-standards.md
142
- - guardrails/technology/dotnet-webapi/dependency-policy.md
143
- - guardrails/technology/dotnet-webapi/folder-structure.md
144
- - guardrails/technology/dotnet-webapi/framework-api-map.md
145
- - guardrails/technology/dotnet-webapi/testing.md
146
- - guardrails/technology/dotnet-webapi/PACKAGING.md
147
-
148
- ## /aw-spec-implement-ui
149
- <!-- The FRONTEND LANE's code-generation set — the HOW that lane of `implement` builds
150
- against, alongside frontend-plan.md and constitution.ui.md. It is loaded on BOTH paths,
151
- master and delta, because the lane never had a separate delta heading. NO domain file
152
- (domain reached the lane through spec -> frontend-plan.md), and NO service-lane file
153
- beyond the pairing rules below — this lane never writes outside its declared source path.
154
-
155
- EIGHT FILES ARE MAPPED FOR BOTH LANE PHASES on purpose. error-handling,
156
- forms-and-validation, auth-session, design-system, accessibility-implementation, i18n,
157
- performance-budgets and the api-integration pairing each carry a DESIGN half and an
158
- IMPLEMENT half of one rule: the design decides the states, the affordances and the
159
- targets; this phase realises them. A rule read by only one of the two loses the
160
- pairing, and the half that goes unread is always the one that then goes unbuilt. -->
161
- - guardrails/technology/nextjs/component-conventions.md
162
- - guardrails/technology/nextjs/api-client.md
163
- - guardrails/technology/nextjs/api-integration.{{backend_stack}}.md
164
- - guardrails/technology/nextjs/auth-session.md
165
- - guardrails/technology/nextjs/client-security.md
166
- - guardrails/technology/nextjs/error-handling.md
167
- - guardrails/technology/nextjs/forms-and-validation.md
168
- - guardrails/technology/nextjs/design-system.md
169
- - guardrails/technology/nextjs/accessibility-implementation.md
170
- - guardrails/technology/nextjs/i18n.md
171
- - guardrails/technology/nextjs/performance-budgets.md
172
- - guardrails/technology/nextjs/observability.md
173
- - guardrails/technology/nextjs/frontend-testing.md
174
-
175
- ## /aw-spec-implement-delta
176
- <!-- The SERVICE lane's set on the DELTA path — same FRAMEWORK / code-generation rules (HOW
177
- to build). `implement` is one command for both paths and both lanes: it keys this
178
- heading while generating a change's delta-backend-plan.md and `## /aw-spec-implement`
179
- while generating the master, so keep the two identical unless a change deliberately
180
- needs different rules. The delta's code is generated against the master backend-plan.md
181
- + the delta plan; no domain file (domain reached the delta via delta-spec → delta plan). -->
182
- - guardrails/technology/dotnet-webapi/coding-standards.md
183
- - guardrails/technology/dotnet-webapi/dependency-policy.md
184
- - guardrails/technology/dotnet-webapi/folder-structure.md
185
- - guardrails/technology/dotnet-webapi/framework-api-map.md
186
- - guardrails/technology/dotnet-webapi/testing.md
187
- - guardrails/technology/dotnet-webapi/PACKAGING.md
188
-
189
- ## /aw-spec-build
190
- <!-- The compile/fix reference set: the layering + coding rules the fixer respects when
191
- repairing compile errors against the design intent, plus the layering example it repairs
192
- towards. NO domain file (build loads domain rules separately via domain-select) and no
193
- constitution.technical here. -->
194
- - guardrails/technology/dotnet-webapi/clean-architecture.md
195
- - guardrails/technology/dotnet-webapi/coding-standards.md
196
- - guardrails/technology/dotnet-webapi/examples/clean-architecture.md
197
-
198
- ## /aw-spec-analyze-slice
199
- <!-- The design↔code conformance gate's TECHNICAL checklist: the code + tests are
200
- validated against these (alongside the DOMAIN gate overlays, loaded separately via
201
- resolve-domain `## /aw-spec-gate`). Validation input only — never authoring. -->
202
- - guardrails/technology/dotnet-webapi/testing.md
203
- - guardrails/technology/dotnet-webapi/coding-standards.md
204
- - guardrails/technology/dotnet-webapi/framework-api-map.md
205
-
206
- ## /aw-spec-constitution
207
- <!-- What the TECHNICAL half of the split constitution ratifies into
208
- constitution.technical.md: the technology base, then the STANDARD technical rules for
209
- this industry — the same corpus design and implement build against, so a ratified
210
- principle can cite the rule it governs — and last the PROJECT-SUPPLIED file the project
211
- team authors. Loaded BEFORE the technical half and before domain-select, so the
212
- technical author stays domain-free (the seam). NO domain file here: the domain half's
213
- sources are the domain map's ## /aw-spec-constitution. NO examples/ file either — the
214
- ratified half is one declarative line and a `→` pointer per principle, so sample code is
215
- weight without a reader. -->
216
- - guardrails/technology/dotnet-webapi/technology-constitution.md
217
- - guardrails/technology/dotnet-webapi/clean-architecture.md
218
- - guardrails/technology/dotnet-webapi/modular-monolith.md
219
- - guardrails/technology/dotnet-webapi/vertical-slices.md
220
- - guardrails/technology/dotnet-webapi/domain-driven-design.md
221
- - guardrails/technology/dotnet-webapi/cqrs.md
222
- - guardrails/technology/dotnet-webapi/persistence.md
223
- - guardrails/technology/dotnet-webapi/eventing.md
224
- - guardrails/technology/dotnet-webapi/folder-structure.md
225
- - guardrails/technology/dotnet-webapi/testing.md
226
- - guardrails/technology/dotnet-webapi/zero-trust.md
227
- - guardrails/technology/dotnet-webapi/authorization.md
228
- - guardrails/technology/dotnet-webapi/auditing.md
229
- - guardrails/technology/dotnet-webapi/data-classification.md
230
- - guardrails/technology/dotnet-webapi/api-versioning.md
231
- - guardrails/technology/dotnet-webapi/coding-standards.md
232
- - guardrails/technology/dotnet-webapi/dependency-policy.md
233
- - guardrails/projects/dotnet-default-project/service/technical-requirements.md
234
-
235
- ## /aw-spec-ui-constitution
236
- <!-- What the UI half ratifies into constitution.ui.md as a UX-* principle series: the
237
- standard frontend rules for this industry, then the PROJECT-SUPPLIED file. This heading
238
- is also the AUTHORITATIVE signal that the project HAS a frontend lane — with no heading
239
- here the constitution command skips the UI half and creates no file at all. Domain-free,
240
- and loaded before domain-select for the same reason as the set above. -->
241
- - guardrails/technology/nextjs/ui-constitution.md
242
- - guardrails/projects/dotnet-default-project/frontend/ui-requirements.md
243
-
244
- ## /aw-spec-run
245
- <!-- Execution / data migration: the persistence rules the migration step generates against,
246
- plus their worked example. NO domain file; run does not reference constitution.technical.md. -->
247
- - guardrails/technology/dotnet-webapi/persistence.md
248
- - guardrails/technology/dotnet-webapi/examples/persistence.md
249
-
250
- ---
251
-
252
- ## Quick reference (command → technical file count)
253
-
254
- | Command | Technical rule files | Role |
255
- |---|---|---|
256
- | /aw-spec-specify | 6 | the modelling methodology the spec is expressed in: DDD for the domain model (+ its example), and the four ux/ rules for the experience model it lifts as UX- ids — no technology |
257
- | /aw-spec-plan | 24 | architecture/security/interop the design author mediates the spec against, each with its example |
258
- | /aw-spec-plan-ui | 11 | the frontend lane's design set — composition, routing, client state, interaction states, forms, auth surface, design system, accessibility, i18n, performance, and the cross-lane API pairing the UI design author works from (from spec.md) |
259
- | /aw-spec-implement | 5 | governance/architecture the SERVICE lane builds against (from backend-plan.md), master path |
260
- | /aw-spec-implement-ui | 13 | the FRONTEND lane's code-generation set (from frontend-plan.md), both paths — conventions, the generated client + its service pairing, auth, client security, states, forms, design system, accessibility, i18n, performance, observability and testing |
261
- | /aw-spec-implement-delta | 5 | the same set as /aw-spec-implement, for the service lane when implement is generating a change's delta plan |
262
- | /aw-spec-build | 3 | layering + coding rules the compile-fixer respects, + the layering example |
263
- | /aw-spec-analyze-slice | 2 | testing + coding rules the design↔code gate validates against |
264
- | /aw-spec-constitution | 17 | what the technical half ratifies — the technology base, the standard technical rules, and the project team's technical-requirements.md |
265
- | /aw-spec-ui-constitution | 2 | what the frontend lane's half ratifies — the UI base + the project team's ui-requirements.md — and the signal that the lane exists |
266
- | /aw-spec-run | 2 | persistence rules the execution / data-migration step generates against, + its example |
267
-
268
- > All migrated workflows are on this map. The conformance-gate workflows **analyze-plan**
269
- > and **analyze-plan-delta** are intentionally NOT here — they validate the plans / the delta
270
- > against the spec + DOMAIN gate overlays only (domain-rule-bindings `## /aw-spec-gate`), with no
271
- > technical gate checklist.