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.
Files changed (69) 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 +78 -626
  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 +882 -464
  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 +832 -477
  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 -892
  37. package/assets/.appweaver/scripts/bash/aw-spec-actions.sh +1096 -2911
  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 +936 -2766
  41. package/assets/.appweaver/scripts/powershell/aw-xref.ps1 +1 -2
  42. package/assets/.appweaver/scripts/python/aw-payload-parity.py +174 -0
  43. package/assets/.appweaver/scripts/python/aw-stack.py +6 -2
  44. package/assets/.appweaver/scripts/python/aw-xref.py +185 -292
  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/workflows/aw-spec-analyze-delta-design.orch.yaml +0 -251
  63. package/assets/.appweaver/orchestrator/workflows/aw-spec-analyze-design.orch.yaml +0 -749
  64. package/assets/.appweaver/orchestrator/workflows/aw-spec-implement-delta.orch.yaml +0 -253
  65. package/assets/.appweaver/orchestrator/workflows/aw-spec-implement-ui.orch.yaml +0 -540
  66. package/assets/.appweaver/orchestrator/workflows/aw-spec-plan-ui.orch.yaml +0 -597
  67. package/assets/.appweaver/orchestrator/workflows/aw-spec-story-plan.orch.yaml +0 -945
  68. package/assets/.appweaver/orchestrator/workflows/aw-spec-sync-stories.orch.yaml +0 -1040
  69. package/assets/.appweaver/templates/story-template.md +0 -147
@@ -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