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
@@ -7,9 +7,9 @@
7
7
  placeholder for a service/ file the author actually generated from THIS
8
8
  project's CODE.
9
9
 
10
- Wire ONLY files you generated (all under guardrails/projects/[project]/service/).
10
+ Wire ONLY files you generated (all under guardrails/[project]/service/).
11
11
  Never list a file you did not write. Never list a path belonging to another
12
- project (guardrails/projects/<other>/**) — that one is another project's
12
+ project (any other project folder under guardrails/, e.g. guardrails/project-specific/**) — that one is another project's
13
13
  rules, not this one's.
14
14
  -->
15
15
  # [PROJECT_NAME] — Command → Technical-Rule-File Map (as-built)
@@ -21,12 +21,16 @@ files), and the CODE-DERIVED replacement for the greenfield technical map.
21
21
 
22
22
  **The model:** the technical rule files (this project's own architecture / persistence /
23
23
  concurrency / testing / security-posture set, reverse-engineered from the code into
24
- `guardrails/projects/[project]/service/`) are CONFIGURATION — tune this map, not the workflows. The
24
+ `guardrails/[project]/service/`) are CONFIGURATION — tune this map, not the workflows. The
25
25
  technology base itself (`constitution.technical.md`) is NOT listed here — every consumer still
26
26
  refers to it directly, as-is.
27
27
 
28
- - All paths are workspace-relative and live in `guardrails/projects/[project]/service/`.
28
+ - All paths are workspace-relative and live in `guardrails/[project]/service/`.
29
29
  - `resolve-tech --command <name>` collects the `- ` bullets under `## /<name>`.
30
+ - `plan`, `implement` and `adopt` are keyed per lane, not per command: the service lane's set
31
+ sits under `## /aw-spec-<command>-backend`, the frontend lane's under
32
+ `## /aw-spec-<command>-frontend` (adopt reverses a frontend plan under
33
+ `## /aw-spec-plan-frontend`, so it has no frontend heading of its own).
30
34
  - **`## /aw-spec-specify` is the MODELLING-METHODOLOGY slot** — exactly one file,
31
35
  `service/domain-modelling.md`: HOW this code expresses a domain model. Never an architecture /
32
36
  persistence / codegen / security file; those would break specify's domain purity. Every other
@@ -41,39 +45,33 @@ refers to it directly, as-is.
41
45
  (what marks an aggregate root, entity vs value object, where invariants live, the context
42
46
  boundary), NOT what the model is (that is the domain set's domain-model.domain.md, wired
43
47
  via domain-rule-bindings). No technology rule may appear under this heading. -->
44
- - guardrails/projects/[project]/service/domain-modelling.md
48
+ - guardrails/[project]/service/domain-modelling.md
45
49
 
46
- ## /aw-spec-plan
50
+ ## /aw-spec-plan-backend
47
51
  <!-- The as-built architecture / cross-cutting technical rules the SERVICE lane's plan author
48
52
  mediates the spec against. NO domain file here — domain reaches plan only as spec ids and
49
53
  the context's domain-model.md. -->
50
- - guardrails/projects/[project]/service/[as-built-architecture].md
51
- - guardrails/projects/[project]/service/[each generated architecture/cross-cutting rule].md
54
+ - guardrails/[project]/service/[as-built-architecture].md
55
+ - guardrails/[project]/service/[each generated architecture/cross-cutting rule].md
52
56
 
53
- ## /aw-spec-implement
57
+ ## /aw-spec-implement-backend
54
58
  <!-- The framework / code-generation rule set the SERVICE lane's generator builds against
55
- (from backend-plan.md). -->
56
- - guardrails/projects/[project]/service/[each generated codegen/convention rule].md
57
-
58
- ## /aw-spec-implement-delta
59
- <!-- The same set for the service lane on the DELTA path. `implement` is one command: it keys
60
- this heading when it is generating a change's delta plan and the one above when it is
61
- generating the master, so repeat the bullets here to keep both paths identical. -->
62
- - guardrails/projects/[project]/service/[each generated codegen/convention rule].md
59
+ (from backend-plan.md), on both the master and the delta path. -->
60
+ - guardrails/[project]/service/[each generated codegen/convention rule].md
63
61
 
64
62
  ## /aw-spec-build
65
63
  <!-- The layering + convention rules the compile-fixer respects. -->
66
- - guardrails/projects/[project]/service/[as-built-architecture].md
64
+ - guardrails/[project]/service/[as-built-architecture].md
67
65
 
68
66
  ## /aw-spec-analyze-slice
69
67
  <!-- The plan↔code conformance gate's TECHNICAL checklist (validate, don't author). -->
70
- - guardrails/projects/[project]/service/[testing/convention rule to validate against].md
68
+ - guardrails/[project]/service/[testing/convention rule to validate against].md
71
69
 
72
- ## /aw-spec-adopt
70
+ ## /aw-spec-adopt-backend
73
71
  <!-- Brownfield reverse-engineering: the technical REFERENCE set the reversed BACKEND plan
74
72
  mediates the reversed spec ↔ existing code against — the CODE wins, these are reference
75
- only. A slice's reversed frontend-plan.md is authored under `## /aw-spec-plan-ui`. -->
76
- - guardrails/projects/[project]/service/[architecture/cross-cutting reference rule].md
73
+ only. A slice's reversed frontend-plan.md is authored under `## /aw-spec-plan-frontend`. -->
74
+ - guardrails/[project]/service/[architecture/cross-cutting reference rule].md
77
75
 
78
76
  ## /aw-spec-constitution
79
77
  <!-- The set the TECHNICAL half of the split constitution is RE-ratified from when /appweaver
@@ -84,25 +82,25 @@ refers to it directly, as-is.
84
82
  service/ files that carry a ratifiable standard, NOT every generated file, and NO worked examples/
85
83
  sample (the ratified half is one declarative line per principle). NO domain file — the domain
86
84
  half's sources are the DOMAIN map's ## /aw-spec-constitution. -->
87
- - guardrails/projects/[project]/service/[ratifiable technical standard].md
85
+ - guardrails/[project]/service/[ratifiable technical standard].md
88
86
 
89
87
  ## /aw-spec-run
90
88
  <!-- The runtime / execution conventions the app-run step honors — add ONLY if the code evidences
91
89
  a runtime/hosting concern file. NOT data-migration (migration is the deferred later phase). -->
92
- - guardrails/projects/[project]/service/[runtime/hosting rule].md
90
+ - guardrails/[project]/service/[runtime/hosting rule].md
93
91
 
94
92
  <!-- THE FRONTEND LANE'S THREE HEADINGS. They are NOT written by the step that authors this
95
93
  map; onboard's frontend rule-set step APPENDS them here, after the technical headings and
96
94
  before the quick-reference table, and only where a UI lane is declared. A backend-only
97
95
  repo never gets them.
98
- ## /aw-spec-ui-constitution — the ratifiable lane standards (frontend/ui-constitution.md
96
+ ## /aw-spec-ui-constitution — the ratifiable lane standards (frontend/ui-constitution.md
99
97
  first). Also the authoritative signal that this project HAS a frontend lane: a later
100
98
  /appweaver constitution reads it to decide whether to author constitution.ui.md.
101
- ## /aw-spec-plan-ui — the lane rules the FRONTEND lane of `plan` authors
99
+ ## /aw-spec-plan-frontend — the lane rules the FRONTEND lane of `plan` authors
102
100
  frontend-plan.md against: composition, navigation, client state, interaction states,
103
101
  forms, accessibility, the published-surface binding. `adopt` reverses a slice's
104
102
  frontend-plan.md under the same set.
105
- ## /aw-spec-implement-ui — the lane rules the FRONTEND lane of `implement` generates
103
+ ## /aw-spec-implement-frontend — the lane rules the FRONTEND lane of `implement` generates
106
104
  code against, on both the master and the delta path: component conventions, state and
107
105
  data fetching, styling, forms, testing.
108
106
  A file carrying both a planning half and a generating half is listed under both; the lane
@@ -120,11 +118,10 @@ refers to it directly, as-is.
120
118
  | Command | Technical rule files | Role |
121
119
  |---|---|---|
122
120
  | /aw-spec-specify | 1 | the as-built modelling methodology the domain model is expressed in — no technology |
123
- | /aw-spec-plan | [n] | as-built architecture the service lane's plan author mediates the spec against |
124
- | /aw-spec-implement | [n] | code-generation set the service lane builds against (from backend-plan.md) |
125
- | /aw-spec-implement-delta | [n] | the same set for the service lane when implement is generating a change's delta plan |
121
+ | /aw-spec-plan-backend | [n] | as-built architecture the service lane's plan author mediates the spec against |
122
+ | /aw-spec-implement-backend | [n] | code-generation set the service lane builds against (from backend-plan.md), both paths |
126
123
  | /aw-spec-build | [n] | layering + convention rules the compile-fixer respects |
127
124
  | /aw-spec-analyze-slice | [n] | conformance rules the plan↔code gate validates against |
128
- | /aw-spec-adopt | [n] | technical reference set for the reversed backend plan (brownfield) |
125
+ | /aw-spec-adopt-backend | [n] | technical reference set for the reversed backend plan (brownfield) |
129
126
  | /aw-spec-constitution | [n] | the standards the technical constitution half is re-ratified from |
130
127
  | /aw-spec-run | [n] | runtime/execution conventions the app-run step honors (only if evidenced) |
@@ -46,8 +46,8 @@ Sync Impact Report
46
46
  - …
47
47
  - Dependent artifacts:
48
48
  - constitution.domain.md — ⚠ authored next; continues at [N+1]
49
- - guardrails/projects/[project]/domain/domain-constitution.md — [✅/⚠] domain charter source
50
- - guardrails/projects/[project]/service/ — [✅/⚠] technical rule set
49
+ - guardrails/[project]/domain/domain-constitution.md — [✅/⚠] domain charter source
50
+ - guardrails/[project]/service/ — [✅/⚠] technical rule set
51
51
  - TODOs: [none mechanical | …]
52
52
  -->
53
53
  # [PROJECT_NAME] Constitution — Technical Base
@@ -6,7 +6,7 @@ concern: "[concern-slug]"
6
6
  <!--
7
7
  rev-templates/technical-rule-file.skeleton.md — SHAPE-ONLY reference for ONE
8
8
  generated technical rule file in the project's service/ folder
9
- (guardrails/projects/[project]/service/<concern>.md). It is the TECHNICAL twin of
9
+ (guardrails/[project]/service/<concern>.md). It is the TECHNICAL twin of
10
10
  domain-rule-file.skeleton.md. Write one such file per TECHNOLOGY concern the
11
11
  CODE ACTUALLY exhibits (evidenced-only, lean) — e.g. as-built-architecture,
12
12
  persistence, concurrency, testing, security-posture, api-surface, eventing,
@@ -59,8 +59,8 @@ Sync Impact Report
59
59
  - Experience concerns DELIBERATELY OMITTED (lack of as-built evidence):
60
60
  - [CONCERN] — [what the code shows instead, or that it shows nothing]
61
61
  - Dependent artifacts:
62
- - guardrails/projects/[project]/frontend/ — [✅/⚠] generated lane rule set
63
- - guardrails/projects/[project]/tech-rule-bindings.md — [✅/⚠] `## /aw-spec-ui-constitution`
62
+ - guardrails/[project]/frontend/ — [✅/⚠] generated lane rule set
63
+ - guardrails/[project]/tech-rule-bindings.md — [✅/⚠] `## /aw-spec-ui-constitution`
64
64
  - TODOs: [none mechanical | …]
65
65
  -->
66
66
  # [PROJECT_NAME] Constitution — User Experience Base
@@ -103,7 +103,7 @@ Sync Impact Report
103
103
  <!-- Form: the lane's AS-BUILT layout under its own root — where components, screens/pages,
104
104
  routing, client state, styling and assets actually live, named as THIS code names them.
105
105
  Do not impose a folder taxonomy the code does not use. This layout sits entirely under
106
- the lane's root and never adds to the service lane's structure. -->
106
+ the lane root folder and never adds to the service lane's structure. -->
107
107
 
108
108
  ## [UI_CONVENTIONS_SECTION_NAME]
109
109
 
@@ -80,11 +80,14 @@ it serves.]
80
80
 
81
81
  <!-- New screens, components, state, interactions or contract bindings.
82
82
  "Section" names a section of THIS project's master frontend plan — the same
83
- section titles the generated frontend plan template carries. -->
83
+ section titles the generated frontend plan template carries. A binding row's
84
+ element LEADS with the operation id the service names the endpoint by — implement
85
+ checks it against the exported API document. -->
84
86
 
85
87
  | Section (§ in frontend-plan.md) | Element | Kind | Serves |
86
88
  |---|---|---|---|
87
89
  | [§ of the master's own structure] | `[element]` | [screen / component / state / binding] | US-[n] · FR-[nnn] |
90
+ | Contract Binding (§5) | `[OperationId]` · `[VERB] [/route]` | binding | IC-[nnn] |
88
91
 
89
92
  ## MODIFIED — existing UI elements
90
93
 
@@ -222,11 +222,13 @@ does none.]
222
222
  the API contracts backend-plan.md states — never its internals: no table,
223
223
  handler or persistence assumption crosses this line. Where the surface does
224
224
  not name an operation yet, bind against the spec's own IC-/FR- surface and
225
- record that as a §8 assumption. -->
225
+ record that as a §8 assumption. The OPERATION ID is the endpoint's name in the
226
+ service's published API document (as backend-plan.md records it) — implement
227
+ finds the endpoint by it; `—` where none is named yet. -->
226
228
 
227
- | Screen / component | Operation (from the contract) | Sends (field shape) | Receives (field shape) | Failure handling | Serves |
228
- |---|---|---|---|---|---|
229
- | `[Screen]` | `[operation]` | [field: type, …] | [field: type, …] | [§4 state] | FR-00X · IC-00X |
229
+ | Screen / component | Operation id | Operation (from the contract) | Sends (field shape) | Receives (field shape) | Failure handling | Serves |
230
+ |---|---|---|---|---|---|---|
231
+ | `[Screen]` | `[OperationId]` | `[operation]` | [field: type, …] | [field: type, …] | [§4 state] | FR-00X · IC-00X |
230
232
 
231
233
  **Contract deltas needed**: [anything the experience requires that the contract
232
234
  does not offer — raised back to the service lane, never worked around in the
@@ -5,13 +5,15 @@
5
5
  # Exercises every extended construct in one run: inputs, set (raw object),
6
6
  # execute_script (read-only subcommand), verify_context gates, ask
7
7
  # (non-interactive default), foreach + while loops + break, agent_query
8
- # (mock:), agent_author (mock content), build_context, include
9
- # (domain-select module), dispatch_hooks (empty).
8
+ # (mock:), agent_author (mock content), build_context, agent_generate (the
9
+ # mock writes SmokeGenerated.cs), agent_review (mock: pass when the files
10
+ # exist), include (domain-select module), dispatch_hooks (empty).
10
11
  #
11
12
  # Run:
12
13
  # python3 .appweaver/orchestrator/orchestrator.py \
13
14
  # .appweaver/orchestrator/workflows/_smoke.orch.yaml --non-interactive --json
14
- # Expected: status ok, echo=hello, sum of foreach passes, smoke.md written.
15
+ # Expected: status ok, echo=hello, sum of foreach passes, smoke.md and
16
+ # SmokeGenerated.cs written, review_pass=true.
15
17
  # =============================================================================
16
18
 
17
19
  name: orch-smoke
@@ -138,6 +140,40 @@ workflow:
138
140
  action: verify_context
139
141
  required_files: ["{{out_dir}}/smoke.md"]
140
142
 
143
+ # agent_generate — the edit step: the agent writes the file itself and reports
144
+ # files[]. The mock names the file after the task's first `backtick` word and
145
+ # writes it under out_dir; a reported path not on disk is dropped before binding,
146
+ # so the non-empty gate proves the file was written.
147
+ - id: gen_file
148
+ action: agent_generate
149
+ tools: "Read,Write,Edit"
150
+ permission_mode: acceptEdits
151
+ task: |
152
+ Write exactly one file, {{out_dir}}/SmokeGenerated.cs, holding the single
153
+ line `SmokeGenerated` and nothing else. Write nothing outside {{out_dir}}.
154
+ outputs:
155
+ - { name: gen_files, from: "$.files" }
156
+ - id: gate_gen
157
+ action: verify_context
158
+ require_non_empty: gen_files
159
+ on_empty: stop
160
+ on_empty_message: "agent_generate wrote nothing, or files[] binding is broken"
161
+
162
+ # agent_review — read-only review of the files the generation reported; the
163
+ # mock passes when every reviewed file exists
164
+ - id: review_file
165
+ action: agent_review
166
+ review_of_var: gen_files
167
+ task: Check that the file holds the single line SmokeGenerated. Decide pass/fail.
168
+ outputs:
169
+ - { name: review_pass, from: "$.pass" }
170
+ - { name: review_issues, from: "$.issues" }
171
+ - id: gate_review
172
+ action: verify_context
173
+ require_true: review_pass
174
+ on_false: stop
175
+ on_false_message: "agent_review result binding is broken"
176
+
141
177
  # F9: include — the shared domain-select module (read-only script + asks;
142
178
  # non-interactive: gate→continue, mode→all)
143
179
  - id: domain
@@ -156,5 +192,7 @@ outputs:
156
192
  mode: "{{mode}}"
157
193
  seen: "{{seen}}"
158
194
  q_items: "{{q_items}}"
195
+ generated: "{{gen_files}}"
196
+ review_pass: "{{review_pass}}"
159
197
  domain: "{{domain}}"
160
198
  note: "all engine constructs exercised"
@@ -141,7 +141,7 @@ workflow:
141
141
  on_false: stop
142
142
  on_false_message: >
143
143
  No .NET host/startup project found — nothing named Program.cs under `{{host_search}}`,
144
- the source path the backend lane declares, nor elsewhere in this repository. Wiring a
144
+ the lane root folder the backend lane declares, nor elsewhere in this repository. Wiring a
145
145
  component means editing a host project's startup registration, so there has to be one
146
146
  to edit. If this is a .NET repository, scaffold it first with /appweaver foundation.
147
147
  If it is not — this lane's ecosystem is `{{host_eco}}` — then this catalogue's runbooks
@@ -37,7 +37,7 @@
37
37
  # active_version.json (v1.0) so the CR loop works immediately after.
38
38
  #
39
39
  # GOVERNANCE RECONCILE (the JIT contract, gap-fix #1) — ⏸ HELD, OFF BY DEFAULT.
40
- # onboard established the PROJECT constitution + guardrails/projects/<project>/ rule set
40
+ # onboard established the PROJECT constitution + guardrails/<project>/ rule set
41
41
  # from the whole-repo SCAN, with per-feature specifics marked PROVISIONAL. The reconcile
42
42
  # block below carries this feature's real evidence (BR-/CN-/DC-/IC- ids, code coordinates)
43
43
  # INTO that scaffold — upgrading provisional → evidenced. It RECONCILES, never re-authors:
@@ -55,7 +55,7 @@
55
55
  #
56
56
  # Adopt does NOT generate code and does NOT modify source — writes land under
57
57
  # specs/<Context>/<Feature>/, in the context's specs/<Context>/domain-model.md, and in the
58
- # aggregate's OKF concept; the constitution halves and guardrails/projects/<project>/ are
58
+ # aggregate's OKF concept; the constitution halves and guardrails/<project>/ are
59
59
  # written only when the reconcile block below is enabled.
60
60
  # Fidelity checks spec/design ↔ CODE; the Adopt review is REPORTED for out-of-band
61
61
  # closure — it blocks only on structural failures (unmapped code / fabricated spec/design).
@@ -111,7 +111,7 @@ scripts:
111
111
  # Sticky standards seed = the UNIVERSAL always-on rule only (ai-rules). The TECHNICAL/
112
112
  # architecture set for the reversed DESIGN step (mirrors aw-spec-design) is no longer
113
113
  # hardcoded here — it is now CONFIGURATION, loaded per-command from
114
- # guardrails/projects/<project>/tech-rule-bindings.md under "## /aw-spec-adopt" by the
114
+ # guardrails/<project>/tech-rule-bindings.md under "## /aw-spec-adopt-backend" by the
115
115
  # tech-select module (see the tech_select step below). The reversed SPEC step runs
116
116
  # include_standards:false and takes its domain frame from constitution.domain.md via
117
117
  # build_context — so design never sees a domain rule file (rule partition preserved); the
@@ -335,7 +335,7 @@ workflow:
335
335
  on_false_message: "No concept for the aggregate '{{aggregate_primary}}' — the one feature '{{feature_name}}' acts on — in the onboard bundle under {{bundle_dir}}. If its bounded context has not been onboarded, run /appweaver onboard <Context> first; {{bundle_dir}}/aggregates/index.md lists each aggregate with the features that act on it. If '{{feature_name}}' is a NEW feature (no existing code), do NOT adopt it — author it through the forward pipeline (/appweaver specify → plan → implement), which onboard already made brownfield-ready."
336
336
 
337
337
  # Governance prerequisite: the reverse steps below are authored AGAINST the project
338
- # onboard established (the constitution halves + guardrails/projects/<project>/ rule set).
338
+ # onboard established (the constitution halves + guardrails/<project>/ rule set).
339
339
  # Resolve the active domain now and require its rule map to exist — without it there is
340
340
  # no code-derived rule set for tech_select to load, no domain frame for the reversed
341
341
  # spec, and nothing for the reconcile block to upgrade when it is enabled. Reconciling
@@ -363,10 +363,10 @@ workflow:
363
363
  action: verify_context
364
364
  require_true: rulemap_exists
365
365
  on_false: stop
366
- on_false_message: "No active governance for adopt to work against — run /appweaver onboard first. onboard establishes the PROJECT constitution + guardrails/projects/<project>/ rule set (provisional-from-scan) and activates it. Reversing '{{feature_name}}' without that scaffold would author the spec and design against no code-derived rules at all, and leave them with no governance home."
366
+ on_false_message: "No active governance for adopt to work against — run /appweaver onboard first. onboard establishes the PROJECT constitution + guardrails/<project>/ rule set (provisional-from-scan) and activates it. Reversing '{{feature_name}}' without that scaffold would author the spec and design against no code-derived rules at all, and leave them with no governance home."
367
367
 
368
368
  # TECHNICAL rule files → sticky standards (configuration, not hardcoded). tech-select
369
- # reads guardrails/projects/<project>/tech-rule-bindings.md under "## /aw-spec-adopt" and
369
+ # reads guardrails/<project>/tech-rule-bindings.md under "## /aw-spec-adopt-backend" and
370
370
  # loads that reference set into the sticky standards for reverse_plan
371
371
  # (include_standards:true) — the reversed SPEC and MODEL steps turn it off
372
372
  # (include_standards:false), keeping them free of architecture (rule partition). No domain
@@ -377,7 +377,7 @@ workflow:
377
377
  - id: tech_select
378
378
  action: include
379
379
  module: .appweaver/orchestrator/modules/tech-select.orch.yaml
380
- with: { command: aw-spec-adopt }
380
+ with: { command: aw-spec-adopt-backend }
381
381
 
382
382
  # 2. Scaffold the living docs. The SPEC reuses the forward spec-template (it is
383
383
  # tech-agnostic WHAT/WHY — no architectural bias). The BACKEND PLAN scaffolds from the
@@ -821,13 +821,13 @@ workflow:
821
821
  # THE FRONTEND'S RULES REPLACE THE BACKEND'S before the lane's plan is authored — the
822
822
  # swap the forward `plan` makes at the same boundary. Sticky standards only accumulate,
823
823
  # so without it the UI plan was authored under the service rule set and none of the
824
- # lane's own. `## /aw-spec-plan-ui` is the set the forward plan authors this same
824
+ # lane's own. `## /aw-spec-plan-frontend` is the set the forward plan authors this same
825
825
  # document under, so a reversed frontend plan and a planned one answer to one rule set.
826
826
  - id: tech_select_ui
827
827
  condition: "{{ui_lane}} == true"
828
828
  action: include
829
829
  module: .appweaver/orchestrator/modules/tech-select.orch.yaml
830
- with: { command: aw-spec-plan-ui, replace: "true" }
830
+ with: { command: aw-spec-plan-frontend, replace: "true" }
831
831
 
832
832
  - id: ctx_reverse_ui_plan
833
833
  condition: "{{ui_lane}} == true"
@@ -1058,6 +1058,7 @@ workflow:
1058
1058
  action: agent_generate
1059
1059
  tools: "Read,Write,Edit"
1060
1060
  permission_mode: acceptEdits
1061
+ include_standards: false # the lane rule sets are for the plans; the concept is the aggregate's, in neither lane
1061
1062
  task: |
1062
1063
  COMPLETE the OKF concept of the aggregate '{{aggregate_primary}}' at {{concept_path}} —
1063
1064
  the aggregate this run adopted the feature '{{feature_name}}' over. onboard wrote it
@@ -1119,7 +1120,7 @@ workflow:
1119
1120
  # ═══════════ GOVERNANCE RECONCILE — upgrade onboard's PROVISIONAL scaffold ═══
1120
1121
  # ⏸ HELD 2026-07-29: every step in this block is gated on `reconcile_governance`
1121
1122
  # (default "false"), so adopt currently does NOT touch the constitution halves
1122
- # or the guardrails/projects/<project>/ rule set — onboard's provisional scaffold
1123
+ # or the guardrails/<project>/ rule set — onboard's provisional scaffold
1123
1124
  # is left as-is. Flip the var to "true" (workflow vars) to restore the behaviour.
1124
1125
  # Now that this feature is reversed to a TRUSTWORTHY spec (real BR-/CN-/DC-/IC- ids)
1125
1126
  # + design (real code coordinates), reconcile that evidence INTO the governance
@@ -1145,7 +1146,7 @@ workflow:
1145
1146
  - { path: "{{spec_file}}" } # the feature's real BR-/CN-/DC-/IC-
1146
1147
  - { path: "{{backend_plan}}" }
1147
1148
  - { path: "{{feature_dir}}/source-map.md" }
1148
- - { path: "guardrails/projects/{{gov_domain}}/domain-rule-bindings.md", optional: true }
1149
+ - { path: "guardrails/{{gov_domain}}/domain-rule-bindings.md", optional: true }
1149
1150
  - { path: .appweaver/RULE-PARTITION.md } # the rule-partition authority (which command reads what)
1150
1151
  - id: reconcile_pack
1151
1152
  condition: "{{reconcile_governance}} == true" # HELD — governance reconcile paused (see vars)
@@ -1153,12 +1154,12 @@ workflow:
1153
1154
  tools: "Read,Write,Edit"
1154
1155
  permission_mode: acceptEdits
1155
1156
  task: |
1156
- RECONCILE the domain rule-file set in guardrails/projects/{{gov_domain}}/domain/ with the
1157
+ RECONCILE the domain rule-file set in guardrails/{{gov_domain}}/domain/ with the
1157
1158
  newly-adopted feature '{{feature_name}}'. onboard authored these rule files from the
1158
1159
  whole-repo scan with per-feature specifics marked `PROVISIONAL — reconciled at
1159
1160
  adopt`. READ this feature's reversed spec.md + backend-plan.md + source-map.md (in
1160
1161
  context — the real evidence) and the EXISTING rule files under
1161
- guardrails/projects/{{gov_domain}}/.
1162
+ guardrails/{{gov_domain}}/.
1162
1163
 
1163
1164
  RECONCILE, do NOT re-author:
1164
1165
  - UPGRADE the provisional entries this feature now evidences: replace a
@@ -1174,7 +1175,7 @@ workflow:
1174
1175
  - Preserve the RULE PARTITION in domain-rule-bindings.md (constitution / specify / gate get
1175
1176
  the domain files; design / implement get None). Keep each file's frontmatter and
1176
1177
  note in `generated_by` that adopt reconciled '{{feature_name}}'.
1177
- Write ONLY inside guardrails/projects/{{gov_domain}}/. Report the files changed/added.
1178
+ Write ONLY inside guardrails/{{gov_domain}}/. Report the files changed/added.
1178
1179
  outputs:
1179
1180
  - { name: pack_reconciled, from: "$.files" }
1180
1181
 
@@ -1250,7 +1251,7 @@ workflow:
1250
1251
  - { path: "{{constitution_domain_file}}" }
1251
1252
  - { path: "{{constitution_technical_file}}" }
1252
1253
  - { path: "{{spec_file}}" }
1253
- - { path: "guardrails/projects/{{gov_domain}}/domain-rule-bindings.md", optional: true }
1254
+ - { path: "guardrails/{{gov_domain}}/domain-rule-bindings.md", optional: true }
1254
1255
  - id: reconcile_domain
1255
1256
  condition: "{{reconcile_governance}} == true" # HELD — governance reconcile paused (see vars)
1256
1257
  action: agent_author
@@ -1351,4 +1352,4 @@ outputs:
1351
1352
  composed_file: "{{composed_file}}"
1352
1353
  technical_reconcile_ok: "{{technical_ok}}"
1353
1354
  domain_reconcile_ok: "{{domain_ok}}"
1354
- next: "Adopted {{feature_name}} (spec.md + backend-plan.md + source-map.md, v1.0) and wrote {{aggregate_sections}} — the model section(s) for the aggregate(s) it acts on, resolved from the {{aggregate_source}} — in the bounded context `{{context}}`'s shared {{domain_model}}. The spec cites BR-nnn by id, the model carries their text, so this slice is checkable by the same gates as a greenfield one and analyze-plan's check 4 now has a model to check against. A section another feature over the same aggregate wrote first was EXTENDED, never duplicated; every other section is untouched. COMPLETED the OKF concept of {{aggregate_primary}} (deepened + linked the deep artifacts; {{xref_edge_count}} cross-slice edge(s) recorded). UI HALF: ui_lane={{ui_lane}} — where it is true this slice also has frontend-plan.md, reversed from the {{ui_count}} UI file(s) the feature map attributes to it; where it is false the repo declared no frontend lane, or this aggregate owns no part of its surface, and a service-only adoption is the correct outcome rather than a gap. In the second case, where a frontend lane IS declared, the feature records lanes=[backend] in its active_version.json (feature_lanes shows it), so plan and the analyze gates treat the frontend lane as absent for THIS feature; run `aw-spec-actions feature-lanes --clear` if it later gains a UI. The SHARED UI surface (app shell, layout, design system) belongs to no slice and stays in {{bundle_dir}}/architecture/frontend.md. NOTE — governance reconcile is currently HELD (reconcile_governance=false): this run did NOT modify the constitution halves or the guardrails/projects/{{gov_domain}}/ rule set, so they keep onboard's provisional scaffold. Close any items in {{feature_dir}}/adopt-review-report.md out of band. The slice is now a NORMAL feature: refine via /appweaver analyze-plan, then drive every change through the CR delta loop (/appweaver specify → plan → analyze-plan-delta → implement → build → analyze-slice-delta → finalize-delta → analyze-slice → close-delta). If a change edits untested legacy behaviour with blast radius, characterize just that surface first (optional on-touch fence). To restore governance reconcile, set reconcile_governance to \"true\" in the workflow vars."
1355
+ next: "Adopted {{feature_name}} (spec.md + backend-plan.md + source-map.md, v1.0) and wrote {{aggregate_sections}} — the model section(s) for the aggregate(s) it acts on, resolved from the {{aggregate_source}} — in the bounded context `{{context}}`'s shared {{domain_model}}. The spec cites BR-nnn by id, the model carries their text, so this slice is checkable by the same gates as a greenfield one and analyze-plan's check 4 now has a model to check against. A section another feature over the same aggregate wrote first was EXTENDED, never duplicated; every other section is untouched. COMPLETED the OKF concept of {{aggregate_primary}} (deepened + linked the deep artifacts; {{xref_edge_count}} cross-slice edge(s) recorded). UI HALF: ui_lane={{ui_lane}} — where it is true this slice also has frontend-plan.md, reversed from the {{ui_count}} UI file(s) the feature map attributes to it; where it is false the repo declared no frontend lane, or this aggregate owns no part of its surface, and a service-only adoption is the correct outcome rather than a gap. In the second case, where a frontend lane IS declared, the feature records lanes=[backend] in its active_version.json (feature_lanes shows it), so plan and the analyze gates treat the frontend lane as absent for THIS feature; run `aw-spec-actions feature-lanes --clear` if it later gains a UI. The SHARED UI surface (app shell, layout, design system) belongs to no slice and stays in {{bundle_dir}}/architecture/frontend.md. NOTE — governance reconcile is currently HELD (reconcile_governance=false): this run did NOT modify the constitution halves or the guardrails/{{gov_domain}}/ rule set, so they keep onboard's provisional scaffold. Close any items in {{feature_dir}}/adopt-review-report.md out of band. The slice is now a NORMAL feature: refine via /appweaver analyze-plan, then drive every change through the CR delta loop (/appweaver specify → plan → analyze-plan-delta → implement → build → analyze-slice-delta → finalize-delta → analyze-slice → close-delta). If a change edits untested legacy behaviour with blast radius, characterize just that surface first (optional on-touch fence). To restore governance reconcile, set reconcile_governance to 'true' in the workflow vars."
@@ -458,7 +458,13 @@ workflow:
458
458
  UNRESOLVED by definition: report it so it is closed here rather than at
459
459
  integration;
460
460
  (d) a contract the service delta REMOVES or narrows that the master frontend plan
461
- still uses is a HIGH gap — the experience delta has to carry the matching change.
461
+ still uses is a HIGH gap — the experience delta has to carry the matching change;
462
+ (e) OPERATION IDS MATCH. Every binding row the experience delta adds or changes
463
+ leads with an operation id, and that id is the one the service delta's table or
464
+ the master backend plan gives the endpoint, spelled exactly. A binding with no id,
465
+ or with an id neither names, is a HIGH `contract` gap on lane `frontend`; a
466
+ service-delta row with no operation id is one on lane `backend`. Implement finds
467
+ each endpoint by this id in the service's exported API document.
462
468
 
463
469
  CHECK 4 — THE EFFECTIVE MODEL. It is domain-model.md PLUS this change's model
464
470
  delta PLUS the model deltas of every LOWER-WAVE change in context (its
@@ -470,7 +470,13 @@ workflow:
470
470
  discovered at integration;
471
471
  (d) the frontend plan cites the service's published surface and does NOT restate,
472
472
  re-derive or contradict it, and states no server-side behaviour or persistence
473
- assumption.
473
+ assumption;
474
+ (e) OPERATION IDS MATCH. Every §5 row's Operation id is the one the backend plan's
475
+ §3 gives that endpoint, spelled exactly, and every §3 endpoint has one, unique
476
+ across the plan. A §5 row with no id (`—` without a DA-n) or with an id §3 does not
477
+ name is a HIGH `contract` gap on lane `frontend`; a §3 endpoint with no id, or two
478
+ endpoints sharing one, is one on lane `backend`. Implement finds each endpoint by
479
+ this id in the service's exported API document.
474
480
 
475
481
  CHECK 4 — the plans → domain-model.md (when the model is in context; skip if it
476
482
  is not):
@@ -158,7 +158,7 @@ workflow:
158
158
  with: { command: aw-spec-analyze-slice }
159
159
 
160
160
  # 1. WHICH LANES EXIST. Declaration only — this gate reads code, it does not write it, so
161
- # it has no reason to require a source path on disk.
161
+ # it has no reason to require a lane root folder on disk.
162
162
  - id: lane_resolve
163
163
  action: execute_script
164
164
  on_error: continue
@@ -448,7 +448,7 @@ workflow:
448
448
  the pre-existing slice.
449
449
 
450
450
  CHECK 7 — PLACEMENT. Every file this change added or edited sits under the lane that
451
- owns it: this lane's production code under its source path `{{be_source_path}}`, its
451
+ owns it: this lane's production code under its lane root folder `{{be_source_path}}`, its
452
452
  tests under its test path `{{be_test_path}}`. A service-lane element written into the
453
453
  frontend lane's subtree — or outside every lane's paths — is a HIGH `placement` gap.
454
454
  One edit outside them is allowed: registering a test project this change created in
@@ -542,7 +542,7 @@ workflow:
542
542
  gap. Judge it only over what this change touched.
543
543
 
544
544
  CHECK 7 — PLACEMENT. Every file this change added or edited sits under this lane's
545
- source path, `{{fe_source_path}}`, or — for a test — its test path, `{{fe_test_path}}`.
545
+ lane root folder, `{{fe_source_path}}`, or — for a test — its test path, `{{fe_test_path}}`.
546
546
  A file written into the service lane's subtree is a HIGH `placement` gap — a gap in the
547
547
  service surface is a contract delta raised back to that lane, never a client-side edit
548
548
  to it. The one edit allowed outside them is the test setup this change had to create,
@@ -85,7 +85,7 @@ scripts:
85
85
 
86
86
  # No hardcoded technical standards seed. The technical rule files the code/conformance
87
87
  # passes check against (testing + coding-standards) are now CONFIGURATION, loaded per-
88
- # command from guardrails/projects/<project>/tech-rule-bindings.md under "## /aw-spec-analyze-slice"
88
+ # command from guardrails/<project>/tech-rule-bindings.md under "## /aw-spec-analyze-slice"
89
89
  # by the tech-select module (see the tech_select step below). The DOMAIN gate overlays are
90
90
  # still loaded separately, as before (resolve_gate_overlays → load_gate_overlays). This gate
91
91
  # does not reference constitution.technical.md. The seed below is behaviour-only — the kit's
@@ -149,7 +149,7 @@ vars:
149
149
  workflow:
150
150
 
151
151
  # 0. TECHNICAL rule files → sticky standards (configuration, not hardcoded).
152
- # tech-select reads guardrails/projects/<project>/tech-rule-bindings.md under
152
+ # tech-select reads guardrails/<project>/tech-rule-bindings.md under
153
153
  # "## /aw-spec-analyze-slice" and loads that set (testing + coding-standards) into
154
154
  # the sticky standards the conformance query reads (include_standards: true). The
155
155
  # DOMAIN gate overlays are loaded separately below. No blocking gate: an unconfigured
@@ -559,7 +559,7 @@ workflow:
559
559
  mock: { ok: true, unbound: [], notes: [] }
560
560
  task: |
561
561
  WOULD THIS SLICE RUN? Check the service lane's composition against its code.
562
- The lane is `{{be_lane_id}}` and its source path is `{{be_source_path}}`; the
562
+ The lane is `{{be_lane_id}}` and its lane root folder is `{{be_source_path}}`; the
563
563
  backend plan is in context, and its §2.1 Ports, §4.1 Persistence and §4.3 Wiring
564
564
  say what has to be bound.
565
565
 
@@ -26,7 +26,7 @@
26
26
  # compiled by its own build command, so what this stage needs is a declaration to compile
27
27
  # from, not a particular kind of one; requiring the service lane blocked a frontend-only
28
28
  # project that `plan` and `implement` both accept. The rest of the gate is unchanged: no
29
- # lane declared, a lane with no source path, a source path that is not on disk, and two
29
+ # lane declared, a lane with no lane root folder, a lane root folder that is not on disk, and two
30
30
  # lanes claiming overlapping subtrees all still stop the run.
31
31
  #
32
32
  # Launch: /appweaver build [strategy]
@@ -48,7 +48,7 @@ scripts:
48
48
 
49
49
  # Sticky standards seed = the UNIVERSAL always-on rule only (ai-rules). The technical
50
50
  # rule files (the compile/fix reference set) are CONFIGURATION, loaded per-command from
51
- # guardrails/projects/<project>/tech-rule-bindings.md by the tech-select module (see the
51
+ # guardrails/<project>/tech-rule-bindings.md by the tech-select module (see the
52
52
  # tech_select step below). Technical rules ONLY — build loads no domain rules and does
53
53
  # not reference constitution.technical.md. A required file that is missing is reported
54
54
  # at assembly time (`[system] MISSING (required)`), an `optional:` one is skipped.
@@ -61,7 +61,7 @@ vars:
61
61
  workflow:
62
62
 
63
63
  # Rule files → sticky standards: TECHNICAL only, via tech-select, read from
64
- # guardrails/projects/<project>/tech-rule-bindings.md under "## /aw-spec-build".
64
+ # guardrails/<project>/tech-rule-bindings.md under "## /aw-spec-build".
65
65
  # NO domain-select here — see the header: build repairs compile errors, a purely
66
66
  # technical job, and the domain never reaches this stage anyway (specify is its sole
67
67
  # carrier; build reads code and design intent, not spec).
@@ -90,7 +90,7 @@ workflow:
90
90
  # project compiles the one it has, whichever kind that is. A frontend-only project is a
91
91
  # legal project: `plan` and `implement` both accept one, so refusing it here stopped it
92
92
  # at the first stage that had no reason to care. Passing no required kind leaves every
93
- # other check armed — no lane declared at all, a lane with no source path, a source path
93
+ # other check armed — no lane declared at all, a lane with no lane root folder, a lane root folder
94
94
  # that is not on disk, and two lanes claiming overlapping subtrees.
95
95
  - id: lane_gate
96
96
  action: include
@@ -58,7 +58,7 @@ scripts:
58
58
  # Sticky standards seed = the UNIVERSAL always-on rule only (ai-rules). The FRAMEWORK /
59
59
  # test-generation set (same as implement/analyze-slice — HOW to write + place tests) is no
60
60
  # longer hardcoded here — it is now CONFIGURATION, loaded per-command from
61
- # guardrails/projects/<project>/tech-rule-bindings.md under "## /aw-spec-characterize" by the
61
+ # guardrails/<project>/tech-rule-bindings.md under "## /aw-spec-characterize" by the
62
62
  # tech-select module (see the tech_select step below). No domain files: the behaviour to
63
63
  # fence comes from the CODE + the adopted spec/design/source-map (constitution.technical.md
64
64
  # is referred to directly as context), not from domain rules — the tech map lists only
@@ -79,7 +79,7 @@ vars:
79
79
  workflow:
80
80
 
81
81
  # 0. TECHNICAL rule files → sticky standards (configuration, not hardcoded). tech-select
82
- # reads guardrails/projects/<project>/tech-rule-bindings.md under "## /aw-spec-characterize"
82
+ # reads guardrails/<project>/tech-rule-bindings.md under "## /aw-spec-characterize"
83
83
  # and loads that test-generation set into the sticky standards the agent_generate steps
84
84
  # ALWAYS prepend. No domain rule file is loaded here — the tech map lists only technical
85
85
  # files. No blocking gate: an unconfigured project soft-continues (the golden-master is