aw-spec-cli 0.1.16 → 0.1.17

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 (70) hide show
  1. package/assets/.appweaver/DESIGN-FORMAT.md +18 -18
  2. package/assets/.appweaver/ORCH-DIALECT.md +1 -3
  3. package/assets/.appweaver/RULE-PARTITION.md +29 -13
  4. package/assets/.appweaver/STACK-PROFILES.md +10 -9
  5. package/assets/.appweaver/orchestrator/.state/smoke.state.json +32 -0
  6. package/assets/.appweaver/orchestrator/AGENT-PROFILE.md +4 -1
  7. package/assets/.appweaver/orchestrator/modules/delta-plan.orch.yaml +251 -0
  8. package/assets/.appweaver/orchestrator/modules/delta-spec.orch.yaml +104 -35
  9. package/assets/.appweaver/orchestrator/orchestrator.py +5 -4
  10. package/assets/.appweaver/orchestrator/rev-templates/delta-design-template.skeleton.md +94 -36
  11. package/assets/.appweaver/orchestrator/rev-templates/design-template.skeleton.md +1 -1
  12. package/assets/.appweaver/orchestrator/rev-templates/domain-model-template.skeleton.md +115 -0
  13. package/assets/.appweaver/orchestrator/rev-templates/domain-rule-bindings.skeleton.md +2 -9
  14. package/assets/.appweaver/orchestrator/rev-templates/tech-rule-bindings.skeleton.md +16 -40
  15. package/assets/.appweaver/orchestrator/rev-templates/ui-delta-design-template.skeleton.md +38 -17
  16. package/assets/.appweaver/orchestrator/rev-templates/ui-design-template.skeleton.md +8 -8
  17. package/assets/.appweaver/orchestrator/workflows/aw-spec-adopt.orch.yaml +10 -11
  18. package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-plan-delta.orch.yaml +673 -0
  19. package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-plan.orch.yaml +535 -0
  20. package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-slice-delta.orch.yaml +643 -0
  21. package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-slice.orch.yaml +84 -701
  22. package/assets/.appweaver/orchestrator/workflows/aw-spec-build.orch.yaml +4 -4
  23. package/assets/.appweaver/orchestrator/workflows/aw-spec-characterize.orch.yaml +7 -7
  24. package/assets/.appweaver/orchestrator/workflows/aw-spec-close-delta.orch.yaml +16 -14
  25. package/assets/.appweaver/orchestrator/workflows/aw-spec-constitution.orch.yaml +2 -2
  26. package/assets/.appweaver/orchestrator/workflows/aw-spec-finalize-delta.orch.yaml +243 -144
  27. package/assets/.appweaver/orchestrator/workflows/aw-spec-implement.orch.yaml +877 -578
  28. package/assets/.appweaver/orchestrator/workflows/aw-spec-inventory.orch.yaml +4 -4
  29. package/assets/.appweaver/orchestrator/workflows/aw-spec-onboard.orch.yaml +32 -91
  30. package/assets/.appweaver/orchestrator/workflows/aw-spec-parity.orch.yaml +2 -2
  31. package/assets/.appweaver/orchestrator/workflows/aw-spec-plan.orch.yaml +836 -514
  32. package/assets/.appweaver/orchestrator/workflows/aw-spec-run.orch.yaml +2 -2
  33. package/assets/.appweaver/orchestrator/workflows/aw-spec-select-bounded-context.orch.yaml +132 -0
  34. package/assets/.appweaver/orchestrator/workflows/aw-spec-select-feature.orch.yaml +38 -5
  35. package/assets/.appweaver/orchestrator/workflows/aw-spec-select-stack.orch.yaml +3 -3
  36. package/assets/.appweaver/orchestrator/workflows/aw-spec-specify.orch.yaml +271 -979
  37. package/assets/.appweaver/scripts/bash/aw-spec-actions.sh +1085 -3385
  38. package/assets/.appweaver/scripts/bash/aw-xref.sh +1 -2
  39. package/assets/.appweaver/scripts/bash/common.sh +47 -0
  40. package/assets/.appweaver/scripts/powershell/aw-spec-actions.ps1 +914 -3220
  41. package/assets/.appweaver/scripts/powershell/aw-xref.ps1 +1 -2
  42. package/assets/.appweaver/scripts/python/aw-payload-parity.py +19 -3
  43. package/assets/.appweaver/scripts/python/aw-stack.py +6 -2
  44. package/assets/.appweaver/scripts/python/aw-xref.py +86 -350
  45. package/assets/.appweaver/templates/constitution-ui-template.md +1 -1
  46. package/assets/.appweaver/templates/delta-design-template.md +120 -30
  47. package/assets/.appweaver/templates/delta-domain-model-template.md +81 -0
  48. package/assets/.appweaver/templates/delta-spec-template.md +43 -17
  49. package/assets/.appweaver/templates/design-template.md +68 -98
  50. package/assets/.appweaver/templates/domain-model-template.md +130 -0
  51. package/assets/.appweaver/templates/okf-concept-template.md +2 -2
  52. package/assets/.appweaver/templates/source-map-template.md +3 -3
  53. package/assets/.appweaver/templates/spec-template.md +100 -122
  54. package/assets/.appweaver/templates/ui-delta-design-template.md +159 -0
  55. package/assets/.appweaver/templates/ui-design-template.md +46 -75
  56. package/assets/guardrails/projects/dotnet-default-project/domain-rule-bindings.md +7 -18
  57. package/assets/guardrails/projects/dotnet-default-project/tech-rule-bindings.md +34 -39
  58. package/assets/guardrails/requirement-spec.txt +2 -2
  59. package/assets/guardrails/technology/dotnet-webapi/testing.md +1 -1
  60. package/package.json +1 -1
  61. package/assets/.appweaver/orchestrator/modules/delta-design.orch.yaml +0 -105
  62. package/assets/.appweaver/orchestrator/modules/spec-state-gate.orch.yaml +0 -87
  63. package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-delta-design.orch.yaml +0 -251
  64. package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-design.orch.yaml +0 -813
  65. package/assets/.appweaver/orchestrator/workflows/aw-spec-implement-delta.orch.yaml +0 -253
  66. package/assets/.appweaver/orchestrator/workflows/aw-spec-implement-ui.orch.yaml +0 -663
  67. package/assets/.appweaver/orchestrator/workflows/aw-spec-plan-ui.orch.yaml +0 -600
  68. package/assets/.appweaver/orchestrator/workflows/aw-spec-story-plan.orch.yaml +0 -1147
  69. package/assets/.appweaver/orchestrator/workflows/aw-spec-sync-stories.orch.yaml +0 -1121
  70. package/assets/.appweaver/templates/story-template.md +0 -178
@@ -50,11 +50,14 @@ refers to it directly, as-is.
50
50
  - guardrails/projects/[project]/service/[each generated architecture/cross-cutting rule].md
51
51
 
52
52
  ## /aw-spec-implement
53
- <!-- The framework / code-generation rule set the generator builds against (from design.md). -->
53
+ <!-- The framework / code-generation rule set the SERVICE lane's generator builds against
54
+ (from backend-plan.md). -->
54
55
  - guardrails/projects/[project]/service/[each generated codegen/convention rule].md
55
56
 
56
57
  ## /aw-spec-implement-delta
57
- <!-- The CR analog of implement — same code-generation set, scoped to the delta-design. -->
58
+ <!-- The same set for the service lane on the DELTA path. `implement` is one command: it keys
59
+ this heading when it is generating a change's delta plan and the one above when it is
60
+ generating the master, so repeat the bullets here to keep both paths identical. -->
58
61
  - guardrails/projects/[project]/service/[each generated codegen/convention rule].md
59
62
 
60
63
  ## /aw-spec-build
@@ -62,7 +65,7 @@ refers to it directly, as-is.
62
65
  - guardrails/projects/[project]/service/[as-built-architecture].md
63
66
 
64
67
  ## /aw-spec-analyze-slice
65
- <!-- The spec↔code conformance gate's TECHNICAL checklist (validate, don't author). -->
68
+ <!-- The design↔code conformance gate's TECHNICAL checklist (validate, don't author). -->
66
69
  - guardrails/projects/[project]/service/[testing/convention rule to validate against].md
67
70
 
68
71
  ## /aw-spec-adopt
@@ -86,34 +89,13 @@ refers to it directly, as-is.
86
89
  a runtime/hosting concern file. NOT data-migration (migration is the deferred later phase). -->
87
90
  - guardrails/projects/[project]/service/[runtime/hosting rule].md
88
91
 
89
- <!-- THE FRONTEND LANE'S THREE HEADINGS. None of them is written by the step that authors
90
- this map; onboard's frontend rule-set step APPENDS all three here, after the technical
91
- headings and before the quick-reference table, and ONLY where the scan found a UI in the
92
- code. A backend-only repo never gets any of them, which is correct and not an omission.
93
-
94
- ## /aw-spec-ui-constitution — the ratifiable lane standards, frontend/ui-constitution.md
95
- first. It is also the authoritative signal that this project HAS a frontend lane: a
96
- later /appweaver constitution reads it to decide whether to author constitution.ui.md
97
- at all.
98
- ## /aw-spec-plan-ui — the DESIGN set /appweaver plan-ui works from when it authors
99
- or conforms frontend-plan.md: composition, routing, client state, interaction states,
100
- forms, accessibility, i18n, performance — whichever of those the generated set holds.
101
- ## /aw-spec-implement-ui — the CODE-GENERATION set /appweaver implement-ui builds
102
- against: conventions, the client/service pairing, styling, forms, accessibility, i18n,
103
- performance, testing — again, whichever exist.
104
-
105
- THE TWO PHASE SETS OVERLAP ON PURPOSE. A concern like forms, accessibility, i18n or
106
- performance carries a DESIGN half and an IMPLEMENT half of one rule — the design decides
107
- the states, affordances and targets; implement realises them. A rule mapped under only
108
- one heading loses the pairing, and the half that goes unread is the half that goes
109
- unbuilt. Map such a file under BOTH.
110
-
111
- WHY ALL THREE AND NOT JUST THE FIRST. `## /aw-spec-ui-constitution` alone wires the lane
112
- for re-ratification and NOTHING else: with no `## /aw-spec-plan-ui`, plan-ui loads zero
113
- mapped frontend rules and designs the experience from constitution.ui.md alone, while the
114
- files it needed sit on disk unreferenced — and because an absent heading soft-continues,
115
- nobody is told. Both phases ship (/appweaver plan-ui, /appweaver implement-ui), so both
116
- headings are claims the kit CAN honour.
92
+ <!-- ## /aw-spec-ui-constitution — the FRONTEND LANE's heading. It is NOT written by the step
93
+ that authors this map; onboard's frontend rule-set step APPENDS it here, after the technical
94
+ headings and before the quick-reference table, but only where the scan found a UI in the
95
+ code. It maps the generated frontend/ lane rules (frontend/ui-constitution.md first), and
96
+ it is also the authoritative signal that this project HAS a frontend lane — a later
97
+ /appweaver constitution reads it to decide whether to author constitution.ui.md at all.
98
+ A backend-only repo simply never gets the heading.
117
99
 
118
100
  Do NOT add /aw-spec-characterize or /aw-spec-parity in the DEV flow — characterize is
119
101
  opt-on-touch and parity is deferred to the migration phase. Add any other heading later
@@ -128,16 +110,10 @@ refers to it directly, as-is.
128
110
  |---|---|---|
129
111
  | /aw-spec-specify | 1 | the as-built modelling methodology the domain model is expressed in — no technology |
130
112
  | /aw-spec-plan | [n] | as-built architecture the design author mediates the spec against |
131
- | /aw-spec-implement | [n] | code-generation set the generator builds against (from design.md) |
132
- | /aw-spec-implement-delta | [n] | same code-generation set, scoped to the open change's delta-design |
113
+ | /aw-spec-implement | [n] | code-generation set the service lane builds against (from backend-plan.md) |
114
+ | /aw-spec-implement-delta | [n] | the same set for the service lane when implement is generating a change's delta plan |
133
115
  | /aw-spec-build | [n] | layering + convention rules the compile-fixer respects |
134
- | /aw-spec-analyze-slice | [n] | conformance rules the spec↔code gate validates against |
116
+ | /aw-spec-analyze-slice | [n] | conformance rules the design↔code gate validates against |
135
117
  | /aw-spec-adopt | [n] | technical reference set for the reversed design (brownfield) |
136
118
  | /aw-spec-constitution | [n] | the standards the technical constitution half is re-ratified from |
137
119
  | /aw-spec-run | [n] | runtime/execution conventions the app-run step honors (only if evidenced) |
138
-
139
- <!-- The frontend lane's rows are appended by the same step that appends its headings, and
140
- only where the lane exists:
141
- | /aw-spec-ui-constitution | [n] | the ratifiable lane standards the UI constitution half is re-ratified from |
142
- | /aw-spec-plan-ui | [n] | the as-built experience rules plan-ui authors frontend-plan.md against |
143
- | /aw-spec-implement-ui | [n] | the as-built code-generation set implement-ui builds the UI against | -->
@@ -2,7 +2,7 @@
2
2
  ═══════════════════════════════════════════════════════════════════════════
3
3
  rev-templates/ui-delta-design-template.skeleton.md — SHAPE-ONLY reference.
4
4
 
5
- This file is the FORMAT reference for the reverse-engineered UI DELTA-design
5
+ This file is the FORMAT reference for the reverse-engineered UI DELTA PLAN
6
6
  TEMPLATE that onboard installs at
7
7
  .appweaver/templates/overrides/ui-delta-design-template.md — the frontend lane's
8
8
  twin of delta-design-template.skeleton.md, written only where the CODE has a
@@ -10,14 +10,14 @@
10
10
  sections, the two ledgers and the close contract, and NOTHING ELSE.
11
11
 
12
12
  IT NAMES NO FRAMEWORK AND NO FIXED UI TAXONOMY. The "Section" column is a
13
- SLOT, filled with the ACTUAL sections of the UI design template generated
13
+ SLOT, filled with the ACTUAL sections of the frontend plan template generated
14
14
  alongside this one — including whatever composition axes §3 turned out to
15
15
  carry. A change is classified against the document it amends.
16
16
 
17
17
  ONE CHANGE, TWO LANES, ONE VERSION. A change request that touches both lanes
18
18
  produces a service delta AND this one; `finalize-delta` merges the three
19
- masters (spec.md, design.md, design.ui.md) and the change closes on ONE
20
- version bump. This record never opens a second UI design document, and it
19
+ masters (spec.md, backend-plan.md, frontend-plan.md) and the change closes on ONE
20
+ version bump. This record never opens a second plan document, and it
21
21
  never restates the service delta — where the change starts in the service
22
22
  contract, this document records only what the EXPERIENCE does with it.
23
23
 
@@ -30,24 +30,31 @@
30
30
  • STATES ARE PART OF THE CHANGE — a new interaction that ships without its
31
31
  loading, empty, error and permission-denied states is an incomplete delta,
32
32
  not a later refinement.
33
+ • WAVE ORDERS THE OPEN CHANGES — a lower wave may be built on, a same wave
34
+ is visible but never assumed.
33
35
  • TECHNOLOGY-AGNOSTIC — responsibilities, field shapes and events, no code.
34
36
  ═══════════════════════════════════════════════════════════════════════════
35
37
  -->
36
- # UI Delta Design — [CR-ID]: [TITLE]
38
+ # Delta Frontend Plan — [CR-ID]: [TITLE]
37
39
 
38
- **Feature (aggregate)**: [Aggregate]
40
+ **Feature (aggregate slice)**: [Feature]
39
41
 
40
42
  **Base version**: [vX.Y]
41
43
 
42
- **Service delta**: [the companion delta-design for this CR, or `None — experience-only change`]
44
+ **Wave**: [N] <!-- script-stamped; same wave = developable in parallel, higher wave = after -->
45
+
46
+ **Delta spec**: `changes/[CR-ID]/delta-spec.md`
47
+
48
+ **Service delta**: [`changes/[CR-ID]/delta-backend-plan.md`, or `None — experience-only change`]
43
49
 
44
50
  <!--
45
- This delta applies to the SINGLE master UI design at
46
- specs/[Aggregate]/design.ui.md — never a new document. Classify every change
51
+ This delta applies to the SINGLE master plan at
52
+ specs/[Context]/[Feature]/frontend-plan.md — never a new document, and never the
53
+ master itself: finalize-delta merges it later in the chain. Classify every change
47
54
  ADDED / MODIFIED / REMOVED against the current master, per the MASTER'S OWN
48
55
  SECTIONS, in the same technology-agnostic form: responsibilities, inputs as
49
- field shapes, events and states — no code. After this delta is applied,
50
- ⌛ `ui-implement-delta` regenerates the touched UI and regression re-verifies
56
+ field shapes, events and states — no code. `implement`'s frontend lane
57
+ generates the touched UI from this document and regression re-verifies
51
58
  every screen that shares a changed component or state.
52
59
  -->
53
60
 
@@ -56,13 +63,20 @@
56
63
  [One paragraph: what the experience change is and which user story / spec delta
57
64
  it serves.]
58
65
 
66
+ ## Depends on
67
+
68
+ <!-- Other OPEN changes this plan builds on. Every entry MUST be in a LOWER wave.
69
+ "None — stands alone" is the common and preferred answer. -->
70
+
71
+ - `[CR-ID]` (wave [N-1]) — [what this plan assumes from it]
72
+
59
73
  ## ADDED — new UI elements
60
74
 
61
75
  <!-- New screens, components, state, interactions or contract bindings.
62
76
  "Section" names a section of THIS project's master UI design — the same
63
77
  section titles the generated UI design template carries. -->
64
78
 
65
- | Section (§ in design.ui.md) | Element | Kind | Serves |
79
+ | Section (§ in frontend-plan.md) | Element | Kind | Serves |
66
80
  |---|---|---|---|
67
81
  | [§ of the master's own structure] | `[element]` | [screen / component / state / binding] | US-[n] · FR-[nnn] |
68
82
 
@@ -71,7 +85,7 @@ it serves.]
71
85
  <!-- Edits to elements the master already defines. A shared component or a
72
86
  shared state container is modified here, in place — never copied. -->
73
87
 
74
- | Section (§ in design.ui.md) | Element | What changes | Why |
88
+ | Section (§ in frontend-plan.md) | Element | What changes | Why |
75
89
  |---|---|---|---|
76
90
  | [§ of the master's own structure] | `[element]` | [the edit] | US-[n] |
77
91
 
@@ -102,6 +116,13 @@ never worked around in the client. Or `None`.]
102
116
  touched; navigation edges added or removed; any screen in ANOTHER feature that
103
117
  depends on a changed shared element.]
104
118
 
119
+ ## Other open deltas
120
+
121
+ <!-- Which OTHER open changes touch the same screens, shared components or state
122
+ containers. `None` when this change stands clear of everything in flight. -->
123
+
124
+ - `[CR-ID]` (wave [N]) — [what overlaps, and how this plan stays clear of it]
125
+
105
126
  ## Regression targets
106
127
 
107
128
  [Existing user stories / screens to re-verify because a shared component, a
@@ -117,7 +138,7 @@ shared state container or a navigation edge changed.]
117
138
 
118
139
  ## On close
119
140
 
120
- `finalize-delta` merges this record into the master design.ui.md alongside the
121
- spec and service-design merges, and appends the Change History row;
122
- `close-delta` bumps the ONE version both lanes share and archives the change
123
- under `changes/archive/`.
141
+ `finalize-delta` merges this record into the master frontend-plan.md alongside the
142
+ spec, service-plan and domain-model merges and leaves the change OPEN;
143
+ `close-delta` bumps the ONE version both lanes share, writes the Change History
144
+ rows and archives the change under `changes/archive/`.
@@ -12,8 +12,8 @@
12
12
  IT NAMES NO FRAMEWORK, ROUTER, STATE LIBRARY, COMPONENT LIBRARY, DESIGN
13
13
  SYSTEM OR STYLING APPROACH. "Component", "screen", "route" and "state
14
14
  container" are CONCEPTUAL here — the same way the service design says
15
- "repository" without naming an ORM. The framework binds later, at
16
- ⌛ `ui-implement`, from constitution.ui.md plus that command's rule set. A
15
+ "repository" without naming an ORM. The framework binds later, in the
16
+ FRONTEND LANE of `implement`, from constitution.ui.md plus that lane's rule set. A
17
17
  named example in a skeleton becomes law in a lane it does not fit, and the
18
18
  frontend is where that risk is highest. Every [BRACKET] is filled FROM THE
19
19
  LANE'S OWN CODE.
@@ -21,10 +21,10 @@
21
21
  THIS IS A TEMPLATE OF A TEMPLATE. What onboard generates from it is the
22
22
  project's UI design TEMPLATE — [PLACEHOLDER] tokens and authoring comments
23
23
  intact — which ⌛ `ui-design` then fills once per feature into
24
- specs/<Feature>/design.ui.md. Onboard replaces the STRUCTURE, not the content.
24
+ specs/<Context>/<Feature>/frontend-plan.md. Onboard replaces the STRUCTURE, not the content.
25
25
 
26
26
  THE SECTION LIST IS RATIFIED, NOT INVENTED. §1–§9 below are the sections
27
- aw-spec specifies for design.ui.md (Navigation & screen structure · Client
27
+ aw-spec specifies for frontend-plan.md (Navigation & screen structure · Client
28
28
  state · Component structure · Interaction & flow · Contract binding ·
29
29
  Cross-cutting · Traceability · DA-n · WA-n), keeping the neutral bones the
30
30
  service design earned. What the CODE supplies is what goes IN them — the
@@ -61,7 +61,7 @@
61
61
 
62
62
  **Aggregate (feature)**: `[Aggregate]`
63
63
 
64
- **Design home**: `specs/[Aggregate]/design.ui.md`
64
+ **Plan home**: `specs/[Context]/[Feature]/frontend-plan.md`
65
65
 
66
66
  **Source spec**: `specs/[Aggregate]/spec.md`
67
67
 
@@ -75,8 +75,8 @@
75
75
  WHAT THIS DOCUMENT IS
76
76
  =====================
77
77
  The single, living high-level UI design for ONE feature's experience — the
78
- MEDIATOR between spec.md (WHAT/WHY) and the frontend code ⌛ `ui-implement`
79
- generates. It carries screens, navigation, state, composition, interaction
78
+ MEDIATOR between spec.md (WHAT/WHY) and the frontend code `implement`
79
+ generates in this lane. It carries screens, navigation, state, composition, interaction
80
80
  and the service binding; it is not code and it is not a visual comp.
81
81
 
82
82
  ANCHORING RULES
@@ -285,7 +285,7 @@ client. Or `None`.]
285
285
 
286
286
  ## Change History
287
287
 
288
- <!-- In lockstep with spec.md and design.md — a change that touches both lanes
288
+ <!-- In lockstep with spec.md and backend-plan.md — a change that touches both lanes
289
289
  closes on ONE version bump. finalize-delta appends the row; close-delta
290
290
  bumps the version and stamps it into the header. Newest last. -->
291
291
 
@@ -13,7 +13,7 @@
13
13
  # Adopt is JUST-IN-TIME and per-feature: reverse ONLY the feature you are about to
14
14
  # develop, never the whole codebase (that scale is what onboard's shallow feature map
15
15
  # avoids). A NEW feature (no existing code) is NOT adopted — it is authored straight
16
- # through the forward pipeline (/appweaver specify → design → implement), which
16
+ # through the forward pipeline (/appweaver specify → plan → implement), which
17
17
  # onboard already made brownfield-ready (the code-derived design template is the
18
18
  # project default). So adopt = reverse an EXISTING feature; the forward pipeline = a
19
19
  # new one. Both then evolve through the CR delta loop.
@@ -189,7 +189,7 @@ workflow:
189
189
  action: verify_context
190
190
  require_non_empty: guard_sentinel
191
191
  on_empty: stop
192
- on_empty_message: "specs/ already has a spec.md for {{feature_name}} — adopt is a one-time baseline. For a change to an adopted slice use the CR delta loop (/appweaver specify → design → analyze-delta-design → implement-delta → build → finalize-delta → analyze-slice → close-delta); to re-adopt from scratch, remove the feature dir first."
192
+ on_empty_message: "specs/ already has a spec.md for {{feature_name}} — adopt is a one-time baseline. For a change to an adopted slice use the CR delta loop (/appweaver specify → plan → analyze-plan-delta → implement → build → analyze-slice-delta → finalize-delta → analyze-slice → close-delta); to re-adopt from scratch, remove the feature dir first."
193
193
 
194
194
  # 1b. Resolve this aggregate's OKF bundle concept → its source_files (the code
195
195
  # that IS the slice) + module dir. The INDEX adopt reverse-engineers FROM;
@@ -218,7 +218,7 @@ workflow:
218
218
  action: verify_context
219
219
  require_true: concept_exists
220
220
  on_false: stop
221
- on_false_message: "No feature '{{feature_name}}' in the onboard feature map under {{bundle_dir}}. If you have not onboarded, run /appweaver onboard first, then use the exact feature name from {{bundle_dir}}/aggregates/index.md. If '{{feature_name}}' is a NEW feature (no existing code), do NOT adopt it — author it through the forward pipeline (/appweaver specify → design → implement), which onboard already made brownfield-ready."
221
+ on_false_message: "No feature '{{feature_name}}' in the onboard feature map under {{bundle_dir}}. If you have not onboarded, run /appweaver onboard first, then use the exact feature name from {{bundle_dir}}/aggregates/index.md. 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."
222
222
 
223
223
  # Governance prerequisite: the reverse steps below are authored AGAINST the project
224
224
  # onboard established (the constitution halves + guardrails/projects/<project>/ rule set).
@@ -360,8 +360,8 @@ workflow:
360
360
  - { path: .appweaver/memory/constitution.ui.md, optional: true } # the frontend lane's UX-* base — absent on a backend-only repo, which onboard leaves unwritten by design
361
361
  - id: reverse_spec
362
362
  action: agent_author
363
- tools: Read # the code arrives as a PATH LIST, not inlined — a legacy tree does not fit a payload
364
363
  include_standards: false # the technical/arch sticky set is for design, never the spec
364
+ tools: Read # the code arrives as a PATH LIST, not inlined — a legacy tree does not fit a payload
365
365
  output_target: { type: file, path: "{{spec_file}}" }
366
366
  task: |
367
367
  Reverse-engineer the MASTER specification (the target spec.md in context)
@@ -436,8 +436,8 @@ workflow:
436
436
  - { path: .appweaver/memory/constitution.technical.md, optional: true } # technology base ONLY — no domain
437
437
  - id: reverse_design
438
438
  action: agent_author
439
- tools: Read # grounded in the CODE, which arrives as {{source_files}} paths
440
439
  include_standards: true # the technical/architecture sticky set (reference only — the CODE wins)
440
+ tools: Read # grounded in the CODE, which arrives as {{source_files}} paths
441
441
  output_target: { type: file, path: "{{design_doc}}" }
442
442
  task: |
443
443
  Reverse-engineer the MASTER high-level design (the target design.md in
@@ -501,8 +501,8 @@ workflow:
501
501
  - id: reverse_ui_design
502
502
  condition: "{{ui_lane}} == true"
503
503
  action: agent_author
504
- tools: Read # same, for the lane's surface ({{ui_source_files}})
505
504
  include_standards: true # the lane's sticky technical set (reference only — the CODE wins)
505
+ tools: Read # same, for the lane's surface ({{ui_source_files}})
506
506
  output_target: { type: file, path: "{{ui_design_doc}}" }
507
507
  task: |
508
508
  Reverse-engineer the FRONTEND LANE's high-level design (the target design.ui.md
@@ -548,8 +548,8 @@ workflow:
548
548
  - { path: "{{concept_path}}" } # both file lists to map
549
549
  - id: source_map
550
550
  action: agent_author
551
- tools: Read # one row per legacy artefact; the artefacts are paths in the concept
552
551
  include_standards: false
552
+ tools: Read # one row per legacy artefact; the artefacts are paths in the concept
553
553
  output_target: { type: file, path: "{{feature_dir}}/source-map.md" }
554
554
  task: |
555
555
  Author the source-map sidecar (the target in context) from the template,
@@ -580,7 +580,6 @@ workflow:
580
580
  # → written to an Adopt Review report and closed OUT OF BAND (Brownfield B1·R).
581
581
  - id: fidelity
582
582
  action: agent_query
583
- tools: Read # the check is spec/design vs CODE; with no code it degrades to spec vs design and certifies fabrication as ok
584
583
  context:
585
584
  - "{{spec_file}}"
586
585
  - "{{design_doc}}"
@@ -588,6 +587,7 @@ workflow:
588
587
  - "{{feature_dir}}/source-map.md"
589
588
  - "{{concept_path}}"
590
589
  include_standards: false
590
+ tools: Read # the check is spec/design vs CODE; with no code it degrades to spec vs design and certifies fabrication as ok
591
591
  schema: { ok: true, report_needed: false, blocking_gaps: [ { severity: "high", artefact: "<source file / spec id / design element>", kind: "unmapped-code | fabricated-spec | fabricated-design", detail: "<why>" } ], review_items: [ { kind: "inferred | as-built-quirk | missing-invariant | confidence", where: "<spec/design/source-map location>", note: "<what to confirm out of band>" } ] }
592
592
  mock: { ok: true, report_needed: false, blocking_gaps: [], review_items: [] }
593
593
  task: |
@@ -637,8 +637,7 @@ workflow:
637
637
  spec.md (a resolved [NEEDS CLARIFICATION] / Assumption) or log a deviation.
638
638
  Review items: {{review_items}}
639
639
  - "## How to proceed": resolve blocking gaps first; then the slice is a normal
640
- feature — run /appweaver plan (which renames this design.md to backend-plan.md and
641
- conforms it) and then /appweaver analyze-design (the spec↔plan gate), then
640
+ feature — run /appweaver analyze-plan (spec↔design gate) if desired, then
642
641
  drive every change through the CR delta loop. If a change edits untested legacy
643
642
  behaviour with blast radius, characterize just that surface first (optional
644
643
  on-touch fence) — it is not a required phase.
@@ -937,4 +936,4 @@ outputs:
937
936
  composed_file: "{{composed_file}}"
938
937
  technical_reconcile_ok: "{{technical_ok}}"
939
938
  domain_reconcile_ok: "{{domain_ok}}"
940
- next: "Adopted {{feature_name}} (spec.md + design.md + source-map.md, v1.0) and COMPLETED its OKF concept (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 design.ui.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. 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 specs/{{feature_name}}/adopt-review-report.md out of band. The slice is now a NORMAL feature: refine via /appweaver analyze-design, then drive every change through the CR delta loop (/appweaver specify → design → analyze-delta-design → implement-delta → build → 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."
939
+ next: "Adopted {{feature_name}} (spec.md + design.md + source-map.md, v1.0) and COMPLETED its OKF concept (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 design.ui.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. 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 specs/{{feature_name}}/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."