aw-spec-cli 0.1.13 → 0.1.15

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 (30) hide show
  1. package/assets/.appweaver/STACK-PROFILES.md +1 -1
  2. package/assets/.appweaver/orchestrator/orchestrator.py +5 -0
  3. package/assets/.appweaver/orchestrator/rev-templates/domain-rule-bindings.skeleton.md +10 -3
  4. package/assets/.appweaver/orchestrator/rev-templates/tech-rule-bindings.skeleton.md +38 -11
  5. package/assets/.appweaver/orchestrator/workflows/aw-spec-adopt.orch.yaml +2 -1
  6. package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-design.orch.yaml +607 -123
  7. package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-slice.orch.yaml +625 -66
  8. package/assets/.appweaver/orchestrator/workflows/aw-spec-implement-ui.orch.yaml +407 -134
  9. package/assets/.appweaver/orchestrator/workflows/aw-spec-implement.orch.yaml +452 -143
  10. package/assets/.appweaver/orchestrator/workflows/aw-spec-onboard.orch.yaml +78 -14
  11. package/assets/.appweaver/orchestrator/workflows/aw-spec-plan-ui.orch.yaml +597 -0
  12. package/assets/.appweaver/orchestrator/workflows/aw-spec-plan.orch.yaml +688 -0
  13. package/assets/.appweaver/orchestrator/workflows/aw-spec-select-feature.orch.yaml +3 -3
  14. package/assets/.appweaver/orchestrator/workflows/aw-spec-specify.orch.yaml +23 -23
  15. package/assets/.appweaver/orchestrator/workflows/aw-spec-story-plan.orch.yaml +945 -0
  16. package/assets/.appweaver/orchestrator/workflows/aw-spec-sync-stories.orch.yaml +1040 -0
  17. package/assets/.appweaver/scripts/bash/aw-spec-actions.sh +2069 -28
  18. package/assets/.appweaver/scripts/bash/aw-xref.sh +2 -1
  19. package/assets/.appweaver/scripts/powershell/aw-spec-actions.ps1 +1973 -13
  20. package/assets/.appweaver/scripts/powershell/aw-xref.ps1 +2 -1
  21. package/assets/.appweaver/scripts/python/aw-xref.py +246 -20
  22. package/assets/.appweaver/templates/design-template.md +88 -54
  23. package/assets/.appweaver/templates/spec-template.md +12 -10
  24. package/assets/.appweaver/templates/story-template.md +48 -8
  25. package/assets/.appweaver/templates/ui-design-template.md +71 -39
  26. package/assets/guardrails/projects/dotnet-default-project/domain-rule-bindings.md +19 -7
  27. package/assets/guardrails/projects/dotnet-default-project/tech-rule-bindings.md +35 -26
  28. package/package.json +1 -1
  29. package/assets/.appweaver/orchestrator/workflows/aw-spec-design-ui.orch.yaml +0 -386
  30. package/assets/.appweaver/orchestrator/workflows/aw-spec-design.orch.yaml +0 -382
@@ -647,7 +647,7 @@ workflow:
647
647
  charter; a later step in this same run authors it, so wire the bullet now), then the
648
648
  domain identity/regulatory/interop files → domain principles.
649
649
  - `## /aw-spec-specify` — the FULL domain set (specify models the domain, lifts CN-/DC-/IC-).
650
- - `## /aw-spec-design` — `_None — design loads no domain file. Domain reaches design only through the spec._`
650
+ - `## /aw-spec-plan` — `_None — design loads no domain file. Domain reaches design only through the spec._`
651
651
  - `## /aw-spec-implement` — `_None — implement loads no domain file. Domain reaches implement only through design.md._`
652
652
  - `## /aw-spec-gate` — the conformance-checklist set (the *.domain.md files).
653
653
  Each bullet is a workspace-relative path `- guardrails/projects/{{domain_slug}}/domain/<file>`.
@@ -1190,11 +1190,11 @@ workflow:
1190
1190
  ONLY a heading you have a generated file for (an absent heading soft-continues → loads
1191
1191
  nothing):
1192
1192
  - `## /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
- - `## /aw-spec-design` — the as-built architecture / cross-cutting rules the design author mediates the spec against.
1193
+ - `## /aw-spec-plan` — the as-built architecture / cross-cutting rules the design author mediates the spec against.
1194
1194
  - `## /aw-spec-implement` — the code-generation / convention set the generator builds against (from design.md).
1195
1195
  - `## /aw-spec-implement-delta` — the same code-generation set, scoped to a change's delta-design.
1196
1196
  - `## /aw-spec-build` — the layering + convention rules the compile-fixer respects.
1197
- - `## /aw-spec-analyze-slice` — the conformance rules the design↔code gate validates against.
1197
+ - `## /aw-spec-analyze-slice` — the conformance rules the spec↔code gate validates against.
1198
1198
  - `## /aw-spec-adopt` — the technical reference set the reversed design mediates against (a subset of design's).
1199
1199
  - `## /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
1200
  - `## /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,18 +1316,33 @@ workflow:
1316
1316
 
1317
1317
  WIRE THE MAP — EDIT guardrails/projects/{{domain_slug}}/tech-rule-bindings.md IN PLACE.
1318
1318
  It already exists and carries the technical headings you wrote; PRESERVE all of them
1319
- byte-for-byte. Make exactly two additions:
1320
- 1. A `## /aw-spec-ui-constitution` section, placed after the last technical heading
1321
- and BEFORE the closing quick-reference table. Bullet ONLY the frontend files you
1322
- just generated, `frontend/ui-constitution.md` first, each as a workspace-relative
1323
- path `- guardrails/projects/{{domain_slug}}/frontend/<file>`. Ratifiable lane
1324
- standards only — no domain file, no technical file, no example. Precede them with
1325
- a short HTML comment saying what this half ratifies and that the heading is also
1319
+ byte-for-byte. Add THREE headings, in this order, after the last technical heading and
1320
+ BEFORE the closing quick-reference table, then their three rows in that table (same
1321
+ format as the existing rows). Every bullet is a workspace-relative path
1322
+ `- guardrails/projects/{{domain_slug}}/frontend/<file>` naming a file you JUST
1323
+ GENERATED — never a greenfield rule, never a service-lane file, never an example.
1324
+ Precede each heading with a short HTML comment saying what that phase loads and why.
1325
+ 1. `## /aw-spec-ui-constitution` — the RATIFIABLE lane standards,
1326
+ `frontend/ui-constitution.md` FIRST. Say in its comment that the heading is also
1326
1327
  the authoritative signal that the project has a frontend lane.
1327
- 2. Its row in the quick-reference table, in the same format as the existing rows.
1328
- Do NOT add `## /aw-spec-ui-design` or `## /aw-spec-ui-implement`: those commands do not
1329
- exist yet, and a heading mapping files for a command nobody runs is a claim the kit
1330
- cannot honour. They arrive with the UI lane's own phases.
1328
+ 2. `## /aw-spec-plan-ui` — the DESIGN set /appweaver plan-ui works from when it
1329
+ authors or conforms frontend-plan.md: the generated files covering composition,
1330
+ routing/navigation, client state, interaction states, forms, accessibility,
1331
+ internationalization and performance — whichever of those you actually wrote.
1332
+ 3. `## /aw-spec-implement-ui` — the CODE-GENERATION set /appweaver implement-ui
1333
+ builds against: conventions, the client/service pairing, styling/design system,
1334
+ forms, accessibility, internationalization, performance and UI testing — again,
1335
+ whichever you actually wrote.
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.
1331
1346
 
1332
1347
  Write ONLY inside guardrails/projects/{{domain_slug}}/ (frontend/ + the map edit); modify
1333
1348
  no source. Report the files written, the concerns you found present with the code paths
@@ -1369,6 +1384,55 @@ workflow:
1369
1384
  project as backend-only. Add the heading after the last technical one, bulleting
1370
1385
  frontend/ui-constitution.md first, then the rest of the frontend/ set.
1371
1386
 
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
+
1372
1436
  # ═══════════ LANE DECLARATION — read back, never written ═══════════════════════
1373
1437
  # onboard does not declare lanes. It used to: before select-stack was the first
1374
1438
  # command of this sequence, a repo could arrive here with no declaration at all, so