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
@@ -7,10 +7,9 @@
7
7
  #
8
8
  # aw-xref.sh record --using X --design <design.md> [--origin ...] [--date YYYY-MM-DD] [--root DIR]
9
9
  # aw-xref.sh list --aggregate Y [--root DIR] [--bundle knowledge]
10
- # aw-xref.sh concept-upsert --aggregate X [--source-files a,b,c] [--lane backend|frontend] [--merge] [--description D] [--origin ...] [--root DIR]
10
+ # aw-xref.sh concept-upsert --aggregate X [--source-files a,b,c] [--description D] [--origin ...] [--root DIR]
11
11
  # aw-xref.sh concept-overview --aggregate X (--text PROSE | --text-file F) [--root DIR]
12
12
  # aw-xref.sh concept-paths --aggregate X | --feature-dir <dir> [--root DIR] [--bundle knowledge]
13
- # aw-xref.sh concept-coverage --aggregate X | --feature-dir <dir> [--ids "FR-001,BR-002"] [--max-list N] [--root DIR] [--bundle knowledge]
14
13
  set -euo pipefail
15
14
  DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
16
15
  exec python3 "$DIR/../python/aw-xref.py" "$@"
@@ -50,6 +50,53 @@ get_repo_root() {
50
50
  # reads. Callers that need to act on a specific feature take an explicit `--feature-dir`
51
51
  # argument, which wins over feature.json at the call site.
52
52
 
53
+ # CONTEXT RESOLUTION IS THE SAME SINGLE CHANNEL, one level up:
54
+ # `.appweaver/context.json`, written by select-bounded-context. A bounded context is
55
+ # the container a feature lives in — specs/<Context>/<Feature>/ — and it owns the one
56
+ # domain-model.md every spec inside it references.
57
+ #
58
+ # ABSENCE IS A VALID STATE, not a failure. A repo that predates bounded contexts has
59
+ # features directly under specs/, and every caller keeps that flat layout when no
60
+ # context is active. That is what lets the context be adopted per repo instead of
61
+ # forcing a migration on every tree at once.
62
+ read_context_json_context_directory() {
63
+ local repo_root="$1"
64
+ local cj="$repo_root/.appweaver/context.json"
65
+ [[ -f "$cj" ]] || { printf '%s' ''; return 0; }
66
+
67
+ local _cd=''
68
+ if command -v jq >/dev/null 2>&1; then
69
+ if ! _cd=$(jq -r '.context_directory // empty' "$cj" 2>/dev/null); then
70
+ _cd=''
71
+ fi
72
+ elif command -v python3 >/dev/null 2>&1; then
73
+ if ! _cd=$(python3 -c "import json,sys; d=json.load(open(sys.argv[1])); v=d.get('context_directory'); print(v if v else '')" "$cj" 2>/dev/null); then
74
+ _cd=''
75
+ fi
76
+ else
77
+ _cd=$( { grep -E '"context_directory"[[:space:]]*:' "$cj" 2>/dev/null || true; } \
78
+ | head -n 1 \
79
+ | sed -E 's/^[^:]*:[[:space:]]*"([^"]*)".*$/\1/' )
80
+ fi
81
+
82
+ printf '%s' "$_cd"
83
+ return 0
84
+ }
85
+
86
+ # The specs/ subtree the active context owns, as a repo-relative path: the context
87
+ # directory when one is active, plain "specs" when none is. Every caller that
88
+ # enumerates or creates a feature goes through this, so the flat and nested layouts
89
+ # differ in exactly one place.
90
+ feature_base_rel() {
91
+ local repo_root="$1"
92
+ local cd_rel; cd_rel=$(read_context_json_context_directory "$repo_root")
93
+ if [[ -n "$cd_rel" ]] && [[ -d "$repo_root/$cd_rel" ]]; then
94
+ printf '%s' "$cd_rel"
95
+ else
96
+ printf '%s' 'specs'
97
+ fi
98
+ }
99
+
53
100
  # Safely read .appweaver/feature.json's "feature_directory" value.
54
101
  # Prints the raw value (possibly relative) to stdout, or empty string if the file
55
102
  # is missing, unparseable, or does not contain the key. Always returns 0 so callers