aw-spec-cli 0.1.15 → 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.
- package/assets/.appweaver/DESIGN-FORMAT.md +18 -18
- package/assets/.appweaver/ORCH-DIALECT.md +1 -3
- package/assets/.appweaver/RULE-PARTITION.md +29 -13
- package/assets/.appweaver/STACK-PROFILES.md +10 -9
- package/assets/.appweaver/orchestrator/.state/smoke.state.json +32 -0
- package/assets/.appweaver/orchestrator/AGENT-PROFILE.md +4 -1
- package/assets/.appweaver/orchestrator/modules/delta-plan.orch.yaml +251 -0
- package/assets/.appweaver/orchestrator/modules/delta-spec.orch.yaml +104 -35
- package/assets/.appweaver/orchestrator/orchestrator.py +5 -4
- package/assets/.appweaver/orchestrator/rev-templates/delta-design-template.skeleton.md +94 -36
- package/assets/.appweaver/orchestrator/rev-templates/design-template.skeleton.md +1 -1
- package/assets/.appweaver/orchestrator/rev-templates/domain-model-template.skeleton.md +115 -0
- package/assets/.appweaver/orchestrator/rev-templates/domain-rule-bindings.skeleton.md +2 -9
- package/assets/.appweaver/orchestrator/rev-templates/tech-rule-bindings.skeleton.md +16 -40
- package/assets/.appweaver/orchestrator/rev-templates/ui-delta-design-template.skeleton.md +38 -17
- package/assets/.appweaver/orchestrator/rev-templates/ui-design-template.skeleton.md +8 -8
- package/assets/.appweaver/orchestrator/workflows/aw-spec-adopt.orch.yaml +10 -11
- package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-plan-delta.orch.yaml +673 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-plan.orch.yaml +535 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-slice-delta.orch.yaml +643 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-slice.orch.yaml +78 -626
- package/assets/.appweaver/orchestrator/workflows/aw-spec-build.orch.yaml +4 -4
- package/assets/.appweaver/orchestrator/workflows/aw-spec-characterize.orch.yaml +7 -7
- package/assets/.appweaver/orchestrator/workflows/aw-spec-close-delta.orch.yaml +16 -14
- package/assets/.appweaver/orchestrator/workflows/aw-spec-constitution.orch.yaml +2 -2
- package/assets/.appweaver/orchestrator/workflows/aw-spec-finalize-delta.orch.yaml +243 -144
- package/assets/.appweaver/orchestrator/workflows/aw-spec-implement.orch.yaml +882 -464
- package/assets/.appweaver/orchestrator/workflows/aw-spec-inventory.orch.yaml +4 -4
- package/assets/.appweaver/orchestrator/workflows/aw-spec-onboard.orch.yaml +32 -91
- package/assets/.appweaver/orchestrator/workflows/aw-spec-parity.orch.yaml +2 -2
- package/assets/.appweaver/orchestrator/workflows/aw-spec-plan.orch.yaml +832 -477
- package/assets/.appweaver/orchestrator/workflows/aw-spec-run.orch.yaml +2 -2
- package/assets/.appweaver/orchestrator/workflows/aw-spec-select-bounded-context.orch.yaml +132 -0
- package/assets/.appweaver/orchestrator/workflows/aw-spec-select-feature.orch.yaml +38 -5
- package/assets/.appweaver/orchestrator/workflows/aw-spec-select-stack.orch.yaml +3 -3
- package/assets/.appweaver/orchestrator/workflows/aw-spec-specify.orch.yaml +271 -892
- package/assets/.appweaver/scripts/bash/aw-spec-actions.sh +1096 -2911
- package/assets/.appweaver/scripts/bash/aw-xref.sh +1 -2
- package/assets/.appweaver/scripts/bash/common.sh +47 -0
- package/assets/.appweaver/scripts/powershell/aw-spec-actions.ps1 +936 -2766
- package/assets/.appweaver/scripts/powershell/aw-xref.ps1 +1 -2
- package/assets/.appweaver/scripts/python/aw-payload-parity.py +174 -0
- package/assets/.appweaver/scripts/python/aw-stack.py +6 -2
- package/assets/.appweaver/scripts/python/aw-xref.py +185 -292
- package/assets/.appweaver/templates/constitution-ui-template.md +1 -1
- package/assets/.appweaver/templates/delta-design-template.md +120 -30
- package/assets/.appweaver/templates/delta-domain-model-template.md +81 -0
- package/assets/.appweaver/templates/delta-spec-template.md +43 -17
- package/assets/.appweaver/templates/design-template.md +68 -98
- package/assets/.appweaver/templates/domain-model-template.md +130 -0
- package/assets/.appweaver/templates/okf-concept-template.md +2 -2
- package/assets/.appweaver/templates/source-map-template.md +3 -3
- package/assets/.appweaver/templates/spec-template.md +100 -122
- package/assets/.appweaver/templates/ui-delta-design-template.md +159 -0
- package/assets/.appweaver/templates/ui-design-template.md +46 -75
- package/assets/guardrails/projects/dotnet-default-project/domain-rule-bindings.md +7 -18
- package/assets/guardrails/projects/dotnet-default-project/tech-rule-bindings.md +34 -39
- package/assets/guardrails/requirement-spec.txt +2 -2
- package/assets/guardrails/technology/dotnet-webapi/testing.md +1 -1
- package/package.json +1 -1
- package/assets/.appweaver/orchestrator/modules/delta-design.orch.yaml +0 -105
- package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-delta-design.orch.yaml +0 -251
- package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-design.orch.yaml +0 -749
- package/assets/.appweaver/orchestrator/workflows/aw-spec-implement-delta.orch.yaml +0 -253
- package/assets/.appweaver/orchestrator/workflows/aw-spec-implement-ui.orch.yaml +0 -540
- package/assets/.appweaver/orchestrator/workflows/aw-spec-plan-ui.orch.yaml +0 -597
- package/assets/.appweaver/orchestrator/workflows/aw-spec-story-plan.orch.yaml +0 -945
- package/assets/.appweaver/orchestrator/workflows/aw-spec-sync-stories.orch.yaml +0 -1040
- package/assets/.appweaver/templates/story-template.md +0 -147
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
# and emit an aggregate-organized OKF v0.1 knowledge bundle + a migration
|
|
7
7
|
# backlog. Each candidate aggregate is a future specs/<Feature>/ vertical slice —
|
|
8
8
|
# this bundle is the BASE the forward brownfield steps read to reverse-engineer
|
|
9
|
-
# spec.md +
|
|
9
|
+
# spec.md + backend-plan.md per slice.
|
|
10
10
|
#
|
|
11
11
|
# INVENTORY → adopt → (fidelity) → characterize → [ forward pipeline ] ← you are here
|
|
12
12
|
#
|
|
@@ -17,14 +17,14 @@
|
|
|
17
17
|
# 2. an ENRICHMENT agent that turns that substrate into the OKF bundle,
|
|
18
18
|
# organized BY AGGREGATE ROOT, then a conformance gate (validate_okf.py).
|
|
19
19
|
#
|
|
20
|
-
# It does NOT author spec.md /
|
|
20
|
+
# It does NOT author spec.md / backend-plan.md (that is /appweaver adopt per slice)
|
|
21
21
|
# and does NOT touch source code — all writes stay inside the bundle dir.
|
|
22
22
|
#
|
|
23
23
|
# Launch: /appweaver inventory [strategy] [focus/scope hints]
|
|
24
24
|
# =============================================================================
|
|
25
25
|
|
|
26
26
|
name: aw-spec-inventory
|
|
27
|
-
description: Scan a brownfield codebase and produce an aggregate-organized OKF v0.1 knowledge bundle plus a migration backlog — the base for reverse-engineering spec.md +
|
|
27
|
+
description: Scan a brownfield codebase and produce an aggregate-organized OKF v0.1 knowledge bundle plus a migration backlog — the base for reverse-engineering spec.md + backend-plan.md per aggregate/vertical slice. Deterministic scan + enrichment agent + conformance gate; never modifies source.
|
|
28
28
|
version: 1.1.0
|
|
29
29
|
agent_agnostic: true
|
|
30
30
|
dialect: aw-spec.orchestrator/v1
|
|
@@ -235,4 +235,4 @@ outputs:
|
|
|
235
235
|
aggregate_count: "{{aggregate_count}}"
|
|
236
236
|
concepts: "{{concepts}}"
|
|
237
237
|
warnings: "{{okf_warnings}}"
|
|
238
|
-
next: "Review {{bundle_dir}} (start with architecture/overview.md and migration-backlog.md). Then adopt a slice: /appweaver adopt <Aggregate> reverse-engineers its spec.md +
|
|
238
|
+
next: "Review {{bundle_dir}} (start with architecture/overview.md and migration-backlog.md). Then adopt a slice: /appweaver adopt <Aggregate> reverse-engineers its spec.md + backend-plan.md from the bundle, and the forward pipeline carries it from there."
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
# each with the slice's own evidence (BR-/CN-/DC-/IC- ids) when that feature is
|
|
23
23
|
# developed — the "created here, updated when taking each slice" contract.
|
|
24
24
|
#
|
|
25
|
-
# ONBOARD → adopt <Feature> (JIT) → specify →
|
|
25
|
+
# ONBOARD → adopt <Feature> (JIT) → specify → plan → analyze-plan-delta → implement → build → analyze-slice-delta → finalize-delta → analyze-slice → close-delta ← you are here
|
|
26
26
|
#
|
|
27
27
|
# Establishing the PROJECT-scoped constitution here (whole-repo vantage) — not from a
|
|
28
28
|
# single adopted slice — is deliberate: it keeps governance project-scoped from day
|
|
@@ -76,9 +76,10 @@
|
|
|
76
76
|
# service pair is reverse-engineered from the service code. The lane is governed by a
|
|
77
77
|
# different constitution half and implemented by different commands, so it gets its own
|
|
78
78
|
# design document rather than a section inside the service design; the only thing that
|
|
79
|
-
# crosses between them is the design contract. Their consumers
|
|
80
|
-
#
|
|
81
|
-
# whole-repo evidence for them exists exactly once, at
|
|
79
|
+
# crosses between them is the design contract. Their consumers are the FRONTEND LANES
|
|
80
|
+
# of `plan` and `implement` — one command each, covering both lanes — and the templates
|
|
81
|
+
# are written here because the whole-repo evidence for them exists exactly once, at
|
|
82
|
+
# onboard.
|
|
82
83
|
# RUN /appweaver select-stack FIRST. It is the first command of the brownfield
|
|
83
84
|
# sequence and this workflow REFUSES to run without it, because it needs to be told three
|
|
84
85
|
# things before it can start: which lanes this project has, where each lane's source is,
|
|
@@ -844,9 +845,9 @@ workflow:
|
|
|
844
845
|
- { path: "{{bundle_dir}}/architecture/frontend.md", optional: true } # SECONDARY (shallow): the OKF as-built frontend note — corroborate, don't rely on alone
|
|
845
846
|
- id: author_ui
|
|
846
847
|
action: agent_author
|
|
847
|
-
tools: Read # EVIDENCE = THE UI CODE ITSELF; the inventory inlines the file LISTS, not the files
|
|
848
848
|
condition: "{{ui_lane}} == true"
|
|
849
849
|
include_standards: false
|
|
850
|
+
tools: Read # EVIDENCE = THE UI CODE ITSELF; the inventory inlines the file LISTS, not the files
|
|
850
851
|
output_target: { type: file, path: "{{constitution_ui_file}}" }
|
|
851
852
|
task: |
|
|
852
853
|
Scaffold the USER EXPERIENCE constitution — the FRONTEND LANE's half (the target
|
|
@@ -1191,10 +1192,10 @@ workflow:
|
|
|
1191
1192
|
nothing):
|
|
1192
1193
|
- `## /aw-spec-specify` — EXACTLY ONE bullet: `service/domain-modelling.md`, the modelling methodology. NEVER an architecture / persistence / codegen / security file here — specify is the domain phase and any technology rule under this heading breaks its domain purity. Omit the heading only if you did not write domain-modelling.md.
|
|
1193
1194
|
- `## /aw-spec-plan` — the as-built architecture / cross-cutting rules the design author mediates the spec against.
|
|
1194
|
-
- `## /aw-spec-implement` — the code-generation / convention set the generator builds against (from
|
|
1195
|
-
- `## /aw-spec-implement-delta` — the same
|
|
1195
|
+
- `## /aw-spec-implement` — the code-generation / convention set the SERVICE lane's generator builds against (from backend-plan.md).
|
|
1196
|
+
- `## /aw-spec-implement-delta` — the same set for the service lane on the DELTA path. `implement` is one command that keys this heading when it is generating a change's delta plan and the one above when it is generating the master, so a project that wants the same rules on both paths repeats them here.
|
|
1196
1197
|
- `## /aw-spec-build` — the layering + convention rules the compile-fixer respects.
|
|
1197
|
-
- `## /aw-spec-analyze-slice` — the conformance rules the
|
|
1198
|
+
- `## /aw-spec-analyze-slice` — the conformance rules the design↔code gate validates against.
|
|
1198
1199
|
- `## /aw-spec-adopt` — the technical reference set the reversed design mediates against (a subset of design's).
|
|
1199
1200
|
- `## /aw-spec-constitution` — the standards a later `/appweaver constitution` re-ratifies the TECHNICAL half from. You authored that half from code evidence before these files existed; this heading is what makes a re-run author from THIS project's rules rather than from an empty set. Ratifiable standards only, no worked `examples/` sample, no domain file.
|
|
1200
1201
|
- `## /aw-spec-run` — the runtime / execution conventions the app-run step honors (add ONLY if the code evidences a runtime/hosting concern file; NOT data-migration — migration is the deferred later phase).
|
|
@@ -1316,33 +1317,22 @@ workflow:
|
|
|
1316
1317
|
|
|
1317
1318
|
WIRE THE MAP — EDIT guardrails/projects/{{domain_slug}}/tech-rule-bindings.md IN PLACE.
|
|
1318
1319
|
It already exists and carries the technical headings you wrote; PRESERVE all of them
|
|
1319
|
-
byte-for-byte.
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
`frontend/ui-constitution.md` FIRST. Say in its comment that the heading is also
|
|
1320
|
+
byte-for-byte. Make exactly two additions:
|
|
1321
|
+
1. A `## /aw-spec-ui-constitution` section, placed after the last technical heading
|
|
1322
|
+
and BEFORE the closing quick-reference table. Bullet ONLY the frontend files you
|
|
1323
|
+
just generated, `frontend/ui-constitution.md` first, each as a workspace-relative
|
|
1324
|
+
path `- guardrails/projects/{{domain_slug}}/frontend/<file>`. Ratifiable lane
|
|
1325
|
+
standards only — no domain file, no technical file, no example. Precede them with
|
|
1326
|
+
a short HTML comment saying what this half ratifies and that the heading is also
|
|
1327
1327
|
the authoritative signal that the project has a frontend lane.
|
|
1328
|
-
2.
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
THE TWO PHASE SETS OVERLAP ON PURPOSE. A concern like forms, accessibility, i18n or
|
|
1337
|
-
performance carries a DESIGN half and an IMPLEMENT half of one rule — the design decides
|
|
1338
|
-
the states, affordances and targets; implement realises them. Map such a file under BOTH
|
|
1339
|
-
headings. A rule read by only one phase loses the pairing, and the half that goes unread
|
|
1340
|
-
is the half that goes unbuilt.
|
|
1341
|
-
MAP ONLY WHAT YOU GENERATED. A heading with no matching generated file is omitted
|
|
1342
|
-
entirely rather than bulleted with a path that does not exist — an absent heading
|
|
1343
|
-
soft-continues, a broken bullet is reported as missing on every later run.
|
|
1344
|
-
Do NOT add `## /aw-spec-characterize` or `## /aw-spec-parity`: characterize is
|
|
1345
|
-
opt-on-touch and parity belongs to the deferred migration phase.
|
|
1328
|
+
2. Its row in the quick-reference table, in the same format as the existing rows.
|
|
1329
|
+
Do NOT add `## /aw-spec-plan-ui` or `## /aw-spec-implement-ui` — the frontend lane's
|
|
1330
|
+
headings in `plan` and `implement`. ⌛ Both phases DO exist now, but those two headings
|
|
1331
|
+
are a different TIER from the one you just wrote: `## /aw-spec-ui-constitution` maps the
|
|
1332
|
+
lane's RATIFIABLE standards, and those two map its per-phase authoring and
|
|
1333
|
+
code-generation sets. The files above have not been separated into those tiers, and
|
|
1334
|
+
mapping one file under a heading of the wrong tier is what makes a generator obey a
|
|
1335
|
+
standard nobody ratified. Splitting them is the UI lane's own follow-up.
|
|
1346
1336
|
|
|
1347
1337
|
Write ONLY inside guardrails/projects/{{domain_slug}}/ (frontend/ + the map edit); modify
|
|
1348
1338
|
no source. Report the files written, the concerns you found present with the code paths
|
|
@@ -1384,55 +1374,6 @@ workflow:
|
|
|
1384
1374
|
project as backend-only. Add the heading after the last technical one, bulleting
|
|
1385
1375
|
frontend/ui-constitution.md first, then the rest of the frontend/ set.
|
|
1386
1376
|
|
|
1387
|
-
# The lane's two PHASE headings, probed the same way and for the same reason. Ratifying
|
|
1388
|
-
# the lane is not the same as governing it: with `## /aw-spec-ui-constitution` alone the
|
|
1389
|
-
# generated frontend/ rules reach /appweaver constitution and NOTHING else, so plan-ui
|
|
1390
|
-
# designs the experience from constitution.ui.md alone and implement-ui generates against
|
|
1391
|
-
# nothing — while the rules sit on disk unreferenced. An absent heading soft-continues, so
|
|
1392
|
-
# without these probes that gap is invisible on every run. Announce, don't stop: the files
|
|
1393
|
-
# are written and each heading is one edit away.
|
|
1394
|
-
- id: probe_ui_plan_wiring
|
|
1395
|
-
action: execute_script
|
|
1396
|
-
condition: "{{ui_lane}} == true"
|
|
1397
|
-
on_error: continue
|
|
1398
|
-
script: { ref: actions }
|
|
1399
|
-
subcommand: resolve-tech
|
|
1400
|
-
args: ["--command", "aw-spec-plan-ui"]
|
|
1401
|
-
outputs:
|
|
1402
|
-
- { name: ui_plan_rules, from: "$.candidates" }
|
|
1403
|
-
- id: warn_ui_plan_wiring
|
|
1404
|
-
action: verify_context
|
|
1405
|
-
condition: "{{ui_lane}} == true"
|
|
1406
|
-
require_non_empty: ui_plan_rules
|
|
1407
|
-
on_empty: continue
|
|
1408
|
-
on_empty_message: >
|
|
1409
|
-
guardrails/projects/{{domain_slug}}/tech-rule-bindings.md maps nothing under
|
|
1410
|
-
`## /aw-spec-plan-ui`, so /appweaver plan-ui will author frontend-plan.md with NO
|
|
1411
|
-
code-derived experience rules — only constitution.ui.md — while the files this run
|
|
1412
|
-
generated at guardrails/projects/{{domain_slug}}/frontend/ go unread. Add the heading
|
|
1413
|
-
after `## /aw-spec-ui-constitution`, bulleting the generated composition, routing,
|
|
1414
|
-
client-state, interaction-state, forms, accessibility, i18n and performance rules.
|
|
1415
|
-
- id: probe_ui_impl_wiring
|
|
1416
|
-
action: execute_script
|
|
1417
|
-
condition: "{{ui_lane}} == true"
|
|
1418
|
-
on_error: continue
|
|
1419
|
-
script: { ref: actions }
|
|
1420
|
-
subcommand: resolve-tech
|
|
1421
|
-
args: ["--command", "aw-spec-implement-ui"]
|
|
1422
|
-
outputs:
|
|
1423
|
-
- { name: ui_impl_rules, from: "$.candidates" }
|
|
1424
|
-
- id: warn_ui_impl_wiring
|
|
1425
|
-
action: verify_context
|
|
1426
|
-
condition: "{{ui_lane}} == true"
|
|
1427
|
-
require_non_empty: ui_impl_rules
|
|
1428
|
-
on_empty: continue
|
|
1429
|
-
on_empty_message: >
|
|
1430
|
-
guardrails/projects/{{domain_slug}}/tech-rule-bindings.md maps nothing under
|
|
1431
|
-
`## /aw-spec-implement-ui`, so /appweaver implement-ui will generate UI code against no
|
|
1432
|
-
code-derived conventions. Add the heading bulleting the generated conventions, service
|
|
1433
|
-
pairing, styling, forms, accessibility, i18n, performance and UI-testing rules — the
|
|
1434
|
-
ones that also serve the design phase belong under BOTH headings.
|
|
1435
|
-
|
|
1436
1377
|
# ═══════════ LANE DECLARATION — read back, never written ═══════════════════════
|
|
1437
1378
|
# onboard does not declare lanes. It used to: before select-stack was the first
|
|
1438
1379
|
# command of this sequence, a repo could arrive here with no declaration at all, so
|
|
@@ -1677,11 +1618,11 @@ workflow:
|
|
|
1677
1618
|
# derives from the lane's source is what goes IN those sections — the real composition
|
|
1678
1619
|
# axes, the state and styling conventions, the screen vocabulary.
|
|
1679
1620
|
#
|
|
1680
|
-
# THE CONSUMERS ARE
|
|
1681
|
-
#
|
|
1682
|
-
#
|
|
1683
|
-
#
|
|
1684
|
-
#
|
|
1621
|
+
# THE CONSUMERS ARE BUILT: the frontend lane of `plan` scaffolds from this override when
|
|
1622
|
+
# onboard installed one (plan-scaffold reports override_active), and the frontend lane of
|
|
1623
|
+
# `implement` generates from the plan it produced. The templates are written HERE because
|
|
1624
|
+
# the evidence for them is the whole-repo vantage that exists exactly once, at onboard, and
|
|
1625
|
+
# nothing breaks for their absence in a repo that never onboarded.
|
|
1685
1626
|
- id: ctx_ui_design_template
|
|
1686
1627
|
action: build_context
|
|
1687
1628
|
condition: "{{ui_lane}} == true"
|
|
@@ -1724,8 +1665,8 @@ workflow:
|
|
|
1724
1665
|
names NO framework, router, state library, component library, design system or styling
|
|
1725
1666
|
approach. That omission is deliberate and you MUST preserve it: the generated template
|
|
1726
1667
|
stays technology-agnostic even though you derived it from a real stack, because the
|
|
1727
|
-
framework binds later
|
|
1728
|
-
rule set. Describe a component by its RESPONSIBILITY, its INPUTS as field shapes, the
|
|
1668
|
+
framework binds later in the FRONTEND LANE of `implement`, from constitution.ui.md plus
|
|
1669
|
+
that lane's rule set. Describe a component by its RESPONSIBILITY, its INPUTS as field shapes, the
|
|
1729
1670
|
EVENTS it raises and the STATES it can be in — never by a framework's own vocabulary.
|
|
1730
1671
|
|
|
1731
1672
|
Identify the RECURRING composition convention across the lane's screens (how screens
|
|
@@ -1884,4 +1825,4 @@ outputs:
|
|
|
1884
1825
|
ui_delta_design_template_files: "{{ui_delta_design_template_files}}"
|
|
1885
1826
|
technical_validation_ok: "{{technical_ok}}"
|
|
1886
1827
|
domain_validation_ok: "{{domain_ok}}"
|
|
1887
|
-
next: "Onboarded {{project_name}}: a high-level feature map at {{bundle_dir}} + a PROVISIONAL project governance scaffold, domain {{active_domain}} ACTIVATED, and — reverse-engineered from THIS code alone — the rule tiers wired per-workflow: the DOMAIN set (guardrails/projects/{{domain_slug}}/domain/*.domain.md + domain-rule-bindings.md) always, and each LANE's set where that lane is declared. ONE HALF AND ONE RULE SET PER LANE: service_lane / ui_lane report which lanes .appweaver/stacks.json declared, and the declaration is what decided. A declared service lane gets constitution.technical.md, guardrails/projects/{{domain_slug}}/service/*.md + tech-rule-bindings.md, and the service design/delta-design template overrides; a declared UI lane gets constitution.ui.md, guardrails/projects/{{domain_slug}}/frontend/*.md mapped under ## /aw-spec-ui-constitution, and its own template pair. A lane declared (none) in select-stack gets none of it, which is the correct outcome and not an omission. LANE DECLARATION: read, never written — select-stack is its sole writer, and this run scanned the source paths it named (scanned_service_root / scanned_ui_root). The scan was SCOPED by them, so the backend substrate excludes the UI subtree and the frontend substrate is that subtree: scanned_backend_files / scanned_ui_files report each. ui_source_evidence_found false means the UI lane's declared path held nothing a scan recognises as UI, so its governance is thin — move the source path with /appweaver select-stack and re-run. The build/test/run commands on each lane are that PROFILE's defaults and may not match a legacy layout — review them, and re-run /appweaver select-stack to correct any lane. Because the domain is activated, resolve-domain + resolve-tech now route the WHOLE forward pipeline AND adopt to these code-derived rules — never another project's rules as a fallback. Code-derived design + delta-design templates are installed as the project template overrides (.appweaver/templates/overrides/) so a NEW feature is developed against the as-built architecture with NO adopt — every section derived from a NEUTRAL skeleton plus this repo's own structure, with no greenfield template in context. Where the lane exists, the SAME pair is generated for it (ui-design-template.md + ui-delta-design-template.md) from the UI source; ui-design-template.md is consumed by /appweaver adopt, which reverses a slice's design.ui.md from it wherever that slice owns part of the lane's surface; ui-delta-design-template.md
|
|
1828
|
+
next: "Onboarded {{project_name}}: a high-level feature map at {{bundle_dir}} + a PROVISIONAL project governance scaffold, domain {{active_domain}} ACTIVATED, and — reverse-engineered from THIS code alone — the rule tiers wired per-workflow: the DOMAIN set (guardrails/projects/{{domain_slug}}/domain/*.domain.md + domain-rule-bindings.md) always, and each LANE's set where that lane is declared. ONE HALF AND ONE RULE SET PER LANE: service_lane / ui_lane report which lanes .appweaver/stacks.json declared, and the declaration is what decided. A declared service lane gets constitution.technical.md, guardrails/projects/{{domain_slug}}/service/*.md + tech-rule-bindings.md, and the service design/delta-design template overrides; a declared UI lane gets constitution.ui.md, guardrails/projects/{{domain_slug}}/frontend/*.md mapped under ## /aw-spec-ui-constitution, and its own template pair. A lane declared (none) in select-stack gets none of it, which is the correct outcome and not an omission. LANE DECLARATION: read, never written — select-stack is its sole writer, and this run scanned the source paths it named (scanned_service_root / scanned_ui_root). The scan was SCOPED by them, so the backend substrate excludes the UI subtree and the frontend substrate is that subtree: scanned_backend_files / scanned_ui_files report each. ui_source_evidence_found false means the UI lane's declared path held nothing a scan recognises as UI, so its governance is thin — move the source path with /appweaver select-stack and re-run. The build/test/run commands on each lane are that PROFILE's defaults and may not match a legacy layout — review them, and re-run /appweaver select-stack to correct any lane. Because the domain is activated, resolve-domain + resolve-tech now route the WHOLE forward pipeline AND adopt to these code-derived rules — never another project's rules as a fallback. Code-derived design + delta-design templates are installed as the project template overrides (.appweaver/templates/overrides/) so a NEW feature is developed against the as-built architecture with NO adopt — every section derived from a NEUTRAL skeleton plus this repo's own structure, with no greenfield template in context. Where the lane exists, the SAME pair is generated for it (ui-design-template.md + ui-delta-design-template.md) from the UI source; ui-design-template.md is consumed by /appweaver adopt, which reverses a slice's design.ui.md from it wherever that slice owns part of the lane's surface; ui-delta-design-template.md is consumed by the frontend lane of /appweaver plan on its DELTA path, and the plan it produces is generated by the frontend lane of /appweaver implement. Develop an EXISTING feature just-in-time: /appweaver adopt <Feature> reverse-engineers its spec.md + design.md + source-map.md and completes that feature's OKF concept; its governance reconcile is currently HELD, so the scaffold this run wrote stays as it is. Develop a NEW feature straight through the forward pipeline (/appweaver specify → plan → implement). 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 validation_ok is false, its constitution half needs a manual touch (see its Sync Impact Report)."
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
# never forces a match by breaking the candidate.
|
|
28
28
|
#
|
|
29
29
|
# Launch: /appweaver parity [strategy] [focus/guidance]
|
|
30
|
-
# Prereq: /appweaver adopt (spec.md +
|
|
30
|
+
# Prereq: /appweaver adopt (spec.md + backend-plan.md + source-map.md) + a running
|
|
31
31
|
# candidate, and the legacy system reachable.
|
|
32
32
|
# =============================================================================
|
|
33
33
|
|
|
@@ -107,7 +107,7 @@ workflow:
|
|
|
107
107
|
action: verify_context
|
|
108
108
|
require_true: design_exists
|
|
109
109
|
on_false: stop
|
|
110
|
-
on_false_message: "No
|
|
110
|
+
on_false_message: "No backend-plan.md for the current feature. Run /appweaver adopt <Aggregate> (or /appweaver plan) first."
|
|
111
111
|
|
|
112
112
|
- id: set_source_map
|
|
113
113
|
action: set
|