specweave 0.28.34 → 0.28.42

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 (181) hide show
  1. package/CLAUDE.md +21 -0
  2. package/README.md +47 -33
  3. package/bin/specweave.js +2 -1
  4. package/dist/plugins/specweave-github/lib/user-story-issue-builder.js +6 -6
  5. package/dist/plugins/specweave-github/lib/user-story-issue-builder.js.map +1 -1
  6. package/dist/src/cli/commands/archive.d.ts.map +1 -1
  7. package/dist/src/cli/commands/archive.js +2 -1
  8. package/dist/src/cli/commands/archive.js.map +1 -1
  9. package/dist/src/cli/commands/delete-feature.d.ts.map +1 -1
  10. package/dist/src/cli/commands/delete-feature.js +5 -4
  11. package/dist/src/cli/commands/delete-feature.js.map +1 -1
  12. package/dist/src/cli/commands/init.d.ts.map +1 -1
  13. package/dist/src/cli/commands/init.js +33 -0
  14. package/dist/src/cli/commands/init.js.map +1 -1
  15. package/dist/src/cli/helpers/ado-area-selector.d.ts +49 -0
  16. package/dist/src/cli/helpers/ado-area-selector.d.ts.map +1 -0
  17. package/dist/src/cli/helpers/ado-area-selector.js +161 -0
  18. package/dist/src/cli/helpers/ado-area-selector.js.map +1 -0
  19. package/dist/src/cli/helpers/init/config-detection.d.ts +5 -1
  20. package/dist/src/cli/helpers/init/config-detection.d.ts.map +1 -1
  21. package/dist/src/cli/helpers/init/config-detection.js +50 -17
  22. package/dist/src/cli/helpers/init/config-detection.js.map +1 -1
  23. package/dist/src/cli/helpers/init/external-import.d.ts.map +1 -1
  24. package/dist/src/cli/helpers/init/external-import.js +32 -3
  25. package/dist/src/cli/helpers/init/external-import.js.map +1 -1
  26. package/dist/src/cli/helpers/init/repository-setup.d.ts +2 -0
  27. package/dist/src/cli/helpers/init/repository-setup.d.ts.map +1 -1
  28. package/dist/src/cli/helpers/init/repository-setup.js +34 -2
  29. package/dist/src/cli/helpers/init/repository-setup.js.map +1 -1
  30. package/dist/src/cli/helpers/init/types.d.ts +3 -0
  31. package/dist/src/cli/helpers/init/types.d.ts.map +1 -1
  32. package/dist/src/cli/helpers/issue-tracker/ado.d.ts +10 -0
  33. package/dist/src/cli/helpers/issue-tracker/ado.d.ts.map +1 -1
  34. package/dist/src/cli/helpers/issue-tracker/ado.js +107 -22
  35. package/dist/src/cli/helpers/issue-tracker/ado.js.map +1 -1
  36. package/dist/src/cli/helpers/issue-tracker/index.d.ts.map +1 -1
  37. package/dist/src/cli/helpers/issue-tracker/index.js +30 -10
  38. package/dist/src/cli/helpers/issue-tracker/index.js.map +1 -1
  39. package/dist/src/cli/helpers/issue-tracker/types.d.ts +1 -0
  40. package/dist/src/cli/helpers/issue-tracker/types.d.ts.map +1 -1
  41. package/dist/src/cli/helpers/issue-tracker/types.js.map +1 -1
  42. package/dist/src/core/feature-deleter/github-service.js +2 -2
  43. package/dist/src/core/feature-deleter/github-service.js.map +1 -1
  44. package/dist/src/core/increment/discipline-checker.js +1 -1
  45. package/dist/src/core/increment/increment-archiver.d.ts +56 -6
  46. package/dist/src/core/increment/increment-archiver.d.ts.map +1 -1
  47. package/dist/src/core/increment/increment-archiver.js +228 -77
  48. package/dist/src/core/increment/increment-archiver.js.map +1 -1
  49. package/dist/src/core/living-docs/feature-archiver.d.ts.map +1 -1
  50. package/dist/src/core/living-docs/feature-archiver.js +75 -37
  51. package/dist/src/core/living-docs/feature-archiver.js.map +1 -1
  52. package/dist/src/core/living-docs/feature-id-manager.d.ts +6 -0
  53. package/dist/src/core/living-docs/feature-id-manager.d.ts.map +1 -1
  54. package/dist/src/core/living-docs/feature-id-manager.js +54 -8
  55. package/dist/src/core/living-docs/feature-id-manager.js.map +1 -1
  56. package/dist/src/core/living-docs/hierarchy-mapper.d.ts.map +1 -1
  57. package/dist/src/core/living-docs/hierarchy-mapper.js +28 -17
  58. package/dist/src/core/living-docs/hierarchy-mapper.js.map +1 -1
  59. package/dist/src/core/living-docs/living-docs-sync.d.ts +2 -111
  60. package/dist/src/core/living-docs/living-docs-sync.d.ts.map +1 -1
  61. package/dist/src/core/living-docs/living-docs-sync.js +31 -389
  62. package/dist/src/core/living-docs/living-docs-sync.js.map +1 -1
  63. package/dist/src/core/living-docs/sync-helpers/file-utils.d.ts +30 -0
  64. package/dist/src/core/living-docs/sync-helpers/file-utils.d.ts.map +1 -0
  65. package/dist/src/core/living-docs/sync-helpers/file-utils.js +107 -0
  66. package/dist/src/core/living-docs/sync-helpers/file-utils.js.map +1 -0
  67. package/dist/src/core/living-docs/sync-helpers/generators.d.ts +19 -0
  68. package/dist/src/core/living-docs/sync-helpers/generators.d.ts.map +1 -0
  69. package/dist/src/core/living-docs/sync-helpers/generators.js +146 -0
  70. package/dist/src/core/living-docs/sync-helpers/generators.js.map +1 -0
  71. package/dist/src/core/living-docs/sync-helpers/index.d.ts +8 -0
  72. package/dist/src/core/living-docs/sync-helpers/index.d.ts.map +1 -0
  73. package/dist/src/core/living-docs/sync-helpers/index.js +11 -0
  74. package/dist/src/core/living-docs/sync-helpers/index.js.map +1 -0
  75. package/dist/src/core/living-docs/sync-helpers/parsers.d.ts +19 -0
  76. package/dist/src/core/living-docs/sync-helpers/parsers.d.ts.map +1 -0
  77. package/dist/src/core/living-docs/sync-helpers/parsers.js +94 -0
  78. package/dist/src/core/living-docs/sync-helpers/parsers.js.map +1 -0
  79. package/dist/src/core/living-docs/types.d.ts +45 -0
  80. package/dist/src/core/living-docs/types.d.ts.map +1 -1
  81. package/dist/src/core/types/config.d.ts +1 -1
  82. package/dist/src/core/types/config.js +2 -2
  83. package/dist/src/core/types/config.js.map +1 -1
  84. package/dist/src/core/validation/three-file-validator.js +8 -8
  85. package/dist/src/core/validation/three-file-validator.js.map +1 -1
  86. package/dist/src/generators/spec/spec-parser.d.ts.map +1 -1
  87. package/dist/src/generators/spec/spec-parser.js +4 -3
  88. package/dist/src/generators/spec/spec-parser.js.map +1 -1
  89. package/dist/src/generators/spec/task-parser.d.ts.map +1 -1
  90. package/dist/src/generators/spec/task-parser.js +11 -10
  91. package/dist/src/generators/spec/task-parser.js.map +1 -1
  92. package/dist/src/importers/ado-importer.d.ts.map +1 -1
  93. package/dist/src/importers/ado-importer.js +2 -0
  94. package/dist/src/importers/ado-importer.js.map +1 -1
  95. package/dist/src/importers/duplicate-detector.d.ts +5 -2
  96. package/dist/src/importers/duplicate-detector.d.ts.map +1 -1
  97. package/dist/src/importers/duplicate-detector.js +8 -2
  98. package/dist/src/importers/duplicate-detector.js.map +1 -1
  99. package/dist/src/importers/github-importer.d.ts.map +1 -1
  100. package/dist/src/importers/github-importer.js +24 -1
  101. package/dist/src/importers/github-importer.js.map +1 -1
  102. package/dist/src/importers/item-converter.d.ts.map +1 -1
  103. package/dist/src/importers/item-converter.js +27 -3
  104. package/dist/src/importers/item-converter.js.map +1 -1
  105. package/dist/src/living-docs/fs-id-allocator.d.ts +5 -0
  106. package/dist/src/living-docs/fs-id-allocator.d.ts.map +1 -1
  107. package/dist/src/living-docs/fs-id-allocator.js +35 -6
  108. package/dist/src/living-docs/fs-id-allocator.js.map +1 -1
  109. package/dist/src/utils/external-resource-validator.d.ts +5 -192
  110. package/dist/src/utils/external-resource-validator.d.ts.map +1 -1
  111. package/dist/src/utils/external-resource-validator.js +10 -1162
  112. package/dist/src/utils/external-resource-validator.js.map +1 -1
  113. package/dist/src/utils/feature-id-collision.d.ts +70 -0
  114. package/dist/src/utils/feature-id-collision.d.ts.map +1 -0
  115. package/dist/src/utils/feature-id-collision.js +142 -0
  116. package/dist/src/utils/feature-id-collision.js.map +1 -0
  117. package/dist/src/utils/validators/ado-validator.d.ts +86 -0
  118. package/dist/src/utils/validators/ado-validator.d.ts.map +1 -0
  119. package/dist/src/utils/validators/ado-validator.js +528 -0
  120. package/dist/src/utils/validators/ado-validator.js.map +1 -0
  121. package/dist/src/utils/validators/index.d.ts +11 -0
  122. package/dist/src/utils/validators/index.d.ts.map +1 -0
  123. package/dist/src/utils/validators/index.js +12 -0
  124. package/dist/src/utils/validators/index.js.map +1 -0
  125. package/dist/src/utils/validators/jira-validator.d.ts +70 -0
  126. package/dist/src/utils/validators/jira-validator.d.ts.map +1 -0
  127. package/dist/src/utils/validators/jira-validator.js +606 -0
  128. package/dist/src/utils/validators/jira-validator.js.map +1 -0
  129. package/dist/src/utils/validators/types.d.ts +82 -0
  130. package/dist/src/utils/validators/types.d.ts.map +1 -0
  131. package/dist/src/utils/validators/types.js +6 -0
  132. package/dist/src/utils/validators/types.js.map +1 -0
  133. package/package.json +3 -3
  134. package/plugins/specweave/.claude-plugin/plugin.json +7 -62
  135. package/plugins/specweave/commands/specweave-archive.md +3 -3
  136. package/plugins/specweave/commands/specweave-increment.md +18 -19
  137. package/plugins/specweave/hooks/hooks.json +3 -49
  138. package/plugins/specweave/hooks/hooks.json.bak +72 -0
  139. package/plugins/specweave/hooks/hooks.json.v1-backup +16 -0
  140. package/plugins/specweave/hooks/lib/update-status-line.sh +39 -15
  141. package/plugins/specweave/hooks/post-task-edit.sh +10 -0
  142. package/plugins/specweave/hooks/user-prompt-submit.sh +27 -8
  143. package/plugins/specweave/hooks/v2/dispatchers/post-tool-use.sh +44 -0
  144. package/plugins/specweave/hooks/v2/dispatchers/session-start.sh +24 -0
  145. package/plugins/specweave/hooks/v2/handlers/ac-validation-handler.sh +46 -0
  146. package/plugins/specweave/hooks/v2/handlers/github-sync-handler.sh +54 -0
  147. package/plugins/specweave/hooks/v2/handlers/living-docs-handler.sh +46 -0
  148. package/plugins/specweave/hooks/v2/handlers/status-update.sh +50 -0
  149. package/plugins/specweave/hooks/v2/hooks.json +16 -0
  150. package/plugins/specweave/hooks/v2/queue/dequeue.sh +30 -0
  151. package/plugins/specweave/hooks/v2/queue/enqueue.sh +41 -0
  152. package/plugins/specweave/hooks/v2/queue/processor.sh +72 -0
  153. package/plugins/specweave/lib/vendor/generators/spec/task-parser.js +11 -10
  154. package/plugins/specweave/lib/vendor/generators/spec/task-parser.js.map +1 -1
  155. package/plugins/specweave-ado/lib/ado-multi-project-sync.js +0 -1
  156. package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +20 -1262
  157. package/plugins/specweave-github/lib/user-story-issue-builder.js +4 -4
  158. package/plugins/specweave-github/lib/user-story-issue-builder.ts +6 -6
  159. package/plugins/specweave-jira/lib/enhanced-jira-sync.js +3 -3
  160. package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +30 -1254
  161. package/src/templates/tasks.md.template +2 -0
  162. package/plugins/specweave/hooks/docs-changed.sh.backup +0 -79
  163. package/plugins/specweave/hooks/human-input-required.sh.backup +0 -75
  164. package/plugins/specweave/hooks/post-first-increment.sh.backup +0 -61
  165. package/plugins/specweave/hooks/post-increment-change.sh.backup +0 -98
  166. package/plugins/specweave/hooks/post-increment-completion.sh.backup +0 -231
  167. package/plugins/specweave/hooks/post-increment-planning.sh.backup +0 -1048
  168. package/plugins/specweave/hooks/post-increment-status-change.sh.backup +0 -147
  169. package/plugins/specweave/hooks/post-spec-update.sh.backup +0 -158
  170. package/plugins/specweave/hooks/post-user-story-complete.sh.backup +0 -179
  171. package/plugins/specweave/hooks/pre-command-deduplication.sh.backup +0 -83
  172. package/plugins/specweave/hooks/pre-implementation.sh.backup +0 -67
  173. package/plugins/specweave/hooks/pre-task-completion.sh.backup +0 -194
  174. package/plugins/specweave/hooks/pre-tool-use.sh.backup +0 -133
  175. package/plugins/specweave/hooks/user-prompt-submit.sh.backup +0 -386
  176. package/plugins/specweave-ado/hooks/post-living-docs-update.sh.backup +0 -353
  177. package/plugins/specweave-ado/hooks/post-task-completion.sh.backup +0 -172
  178. package/plugins/specweave-ado/lib/enhanced-ado-sync.js +0 -170
  179. package/plugins/specweave-github/hooks/post-task-completion.sh.backup +0 -258
  180. package/plugins/specweave-jira/hooks/post-task-completion.sh.backup +0 -172
  181. package/plugins/specweave-release/hooks/post-task-completion.sh.backup +0 -110
@@ -0,0 +1,44 @@
1
+ #!/bin/bash
2
+ # post-tool-use.sh - Single dispatcher for ALL PostToolUse events
3
+ # Replaces: post-task-edit, post-metadata-change, post-increment-planning, etc.
4
+ # Goal: <10ms execution, queue heavy work for async processing
5
+ set +e
6
+
7
+ [[ "${SPECWEAVE_DISABLE_HOOKS:-0}" == "1" ]] && exit 0
8
+
9
+ # Find project root
10
+ PROJECT_ROOT="$PWD"
11
+ while [[ "$PROJECT_ROOT" != "/" ]] && [[ ! -d "$PROJECT_ROOT/.specweave" ]]; do
12
+ PROJECT_ROOT=$(dirname "$PROJECT_ROOT")
13
+ done
14
+ [[ ! -d "$PROJECT_ROOT/.specweave" ]] && exit 0
15
+
16
+ # Read stdin (tool result JSON)
17
+ INPUT=$(cat)
18
+
19
+ # Extract file path (fast grep, no jq)
20
+ FILE_PATH=$(echo "$INPUT" | grep -o '"file_path"[[:space:]]*:[[:space:]]*"[^"]*"' | head -1 | sed 's/.*"\([^"]*\)".*/\1/')
21
+ [[ -z "$FILE_PATH" ]] && exit 0
22
+
23
+ # Detect event type based on file
24
+ EVENT_TYPE=""
25
+ case "$FILE_PATH" in
26
+ */.specweave/increments/*/tasks.md) EVENT_TYPE="task.updated" ;;
27
+ */.specweave/increments/*/spec.md) EVENT_TYPE="spec.updated" ;;
28
+ */.specweave/increments/*/metadata.json) EVENT_TYPE="metadata.changed" ;;
29
+ */.specweave/increments/*/plan.md) EVENT_TYPE="plan.updated" ;;
30
+ *) exit 0 ;; # Not a specweave file, ignore
31
+ esac
32
+
33
+ # Extract increment ID
34
+ INC_ID=$(echo "$FILE_PATH" | grep -o '[0-9][0-9][0-9][0-9]-[^/]*' | head -1)
35
+
36
+ HOOK_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
37
+
38
+ # SYNCHRONOUS: Status update only (fast, always needed)
39
+ bash "$HOOK_DIR/handlers/status-update.sh" "$INC_ID" 2>/dev/null &
40
+
41
+ # ASYNC: Queue heavy operations for background processing
42
+ bash "$HOOK_DIR/queue/enqueue.sh" "$EVENT_TYPE" "$INC_ID" 2>/dev/null
43
+
44
+ exit 0
@@ -0,0 +1,24 @@
1
+ #!/bin/bash
2
+ # session-start.sh - Launch background processor on session start
3
+ # Ultra-fast, non-blocking
4
+ set +e
5
+
6
+ [[ "${SPECWEAVE_DISABLE_HOOKS:-0}" == "1" ]] && exit 0
7
+
8
+ # Find project root
9
+ PROJECT_ROOT="$PWD"
10
+ while [[ "$PROJECT_ROOT" != "/" ]] && [[ ! -d "$PROJECT_ROOT/.specweave" ]]; do
11
+ PROJECT_ROOT=$(dirname "$PROJECT_ROOT")
12
+ done
13
+ [[ ! -d "$PROJECT_ROOT/.specweave" ]] && exit 0
14
+
15
+ # Consume stdin
16
+ cat > /dev/null
17
+
18
+ PROCESSOR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../queue" && pwd)/processor.sh"
19
+ [[ ! -f "$PROCESSOR" ]] && exit 0
20
+
21
+ # Launch processor in background (daemon mode)
22
+ nohup bash "$PROCESSOR" --daemon > /dev/null 2>&1 &
23
+ disown 2>/dev/null
24
+ exit 0
@@ -0,0 +1,46 @@
1
+ #!/bin/bash
2
+ # ac-validation-handler.sh - Validate AC completion status
3
+ # Checks that completed tasks have their ACs checked in spec.md
4
+ # Non-blocking, logs warnings only
5
+ set +e
6
+
7
+ INC_ID="${1:-}"
8
+ [[ -z "$INC_ID" ]] && exit 0
9
+
10
+ # Find project root
11
+ PROJECT_ROOT="$PWD"
12
+ while [[ "$PROJECT_ROOT" != "/" ]] && [[ ! -d "$PROJECT_ROOT/.specweave" ]]; do
13
+ PROJECT_ROOT=$(dirname "$PROJECT_ROOT")
14
+ done
15
+ [[ ! -d "$PROJECT_ROOT/.specweave" ]] && exit 0
16
+
17
+ INC_DIR="$PROJECT_ROOT/.specweave/increments/$INC_ID"
18
+ TASKS_FILE="$INC_DIR/tasks.md"
19
+ SPEC_FILE="$INC_DIR/spec.md"
20
+ LOG_FILE="$PROJECT_ROOT/.specweave/logs/ac-validation.log"
21
+
22
+ [[ ! -f "$TASKS_FILE" ]] || [[ ! -f "$SPEC_FILE" ]] && exit 0
23
+
24
+ mkdir -p "$(dirname "$LOG_FILE")" 2>/dev/null
25
+
26
+ # Find completed tasks and their ACs
27
+ WARNINGS=""
28
+ while IFS= read -r line; do
29
+ if [[ "$line" =~ ^\*\*Satisfies\ ACs\*\*:\ (.+)$ ]]; then
30
+ ACS="${BASH_REMATCH[1]}"
31
+ # Check each AC
32
+ for ac in $(echo "$ACS" | tr ',' ' '); do
33
+ ac=$(echo "$ac" | tr -d ' ')
34
+ [[ -z "$ac" ]] && continue
35
+ # Check if AC is checked in spec.md
36
+ if ! grep -qE "^\s*-\s*\[x\]\s*\*\*${ac}\*\*" "$SPEC_FILE" 2>/dev/null; then
37
+ WARNINGS="$WARNINGS\n - $ac not checked in spec.md"
38
+ fi
39
+ done
40
+ fi
41
+ done < <(grep -A5 "\[x\] completed" "$TASKS_FILE" 2>/dev/null | grep "Satisfies ACs")
42
+
43
+ if [[ -n "$WARNINGS" ]]; then
44
+ echo "[$(date)] $INC_ID: AC validation warnings:$WARNINGS" >> "$LOG_FILE"
45
+ fi
46
+ exit 0
@@ -0,0 +1,54 @@
1
+ #!/bin/bash
2
+ # github-sync-handler.sh - Sync increment status to GitHub issue
3
+ # Called async by processor, non-blocking, error-tolerant
4
+ set +e
5
+
6
+ INC_ID="${1:-}"
7
+ [[ -z "$INC_ID" ]] && exit 0
8
+
9
+ # Find project root
10
+ PROJECT_ROOT="$PWD"
11
+ while [[ "$PROJECT_ROOT" != "/" ]] && [[ ! -d "$PROJECT_ROOT/.specweave" ]]; do
12
+ PROJECT_ROOT=$(dirname "$PROJECT_ROOT")
13
+ done
14
+ [[ ! -d "$PROJECT_ROOT/.specweave" ]] && exit 0
15
+
16
+ CONFIG_FILE="$PROJECT_ROOT/.specweave/config.json"
17
+ [[ ! -f "$CONFIG_FILE" ]] && exit 0
18
+
19
+ # Check if GitHub sync is enabled
20
+ GITHUB_ENABLED=$(grep -o '"enabled"[[:space:]]*:[[:space:]]*true' "$CONFIG_FILE" | head -1)
21
+ [[ -z "$GITHUB_ENABLED" ]] && exit 0
22
+
23
+ # Throttle: max once per 5 minutes per increment
24
+ THROTTLE_FILE="$PROJECT_ROOT/.specweave/state/.github-sync-$INC_ID"
25
+ if [[ -f "$THROTTLE_FILE" ]]; then
26
+ AGE=$(($(date +%s) - $(stat -f %m "$THROTTLE_FILE" 2>/dev/null || echo 0)))
27
+ [[ $AGE -lt 300 ]] && exit 0
28
+ fi
29
+ touch "$THROTTLE_FILE"
30
+
31
+ # Load GitHub token
32
+ GITHUB_TOKEN=""
33
+ [[ -f "$PROJECT_ROOT/.env" ]] && GITHUB_TOKEN=$(grep -E "^GITHUB_TOKEN=" "$PROJECT_ROOT/.env" | cut -d'=' -f2- | tr -d '"'"'")
34
+ [[ -z "$GITHUB_TOKEN" ]] && exit 0
35
+
36
+ # Find sync script
37
+ SYNC_SCRIPT=""
38
+ for path in \
39
+ "$PROJECT_ROOT/dist/plugins/specweave-github/lib/github-feature-sync-cli.js" \
40
+ "${CLAUDE_PLUGIN_ROOT:-/specweave-github}/lib/github-feature-sync-cli.js"; do
41
+ [[ -f "$path" ]] && { SYNC_SCRIPT="$path"; break; }
42
+ done
43
+ [[ -z "$SYNC_SCRIPT" ]] && exit 0
44
+
45
+ # Extract feature ID
46
+ SPEC_FILE="$PROJECT_ROOT/.specweave/increments/$INC_ID/spec.md"
47
+ FEATURE_ID=""
48
+ [[ -f "$SPEC_FILE" ]] && FEATURE_ID=$(grep -E "^(epic|feature_id):" "$SPEC_FILE" | head -1 | sed 's/.*:[[:space:]]*//' | tr -d '"'"'")
49
+ [[ -z "$FEATURE_ID" ]] && exit 0
50
+
51
+ # Run sync (timeout 60s)
52
+ cd "$PROJECT_ROOT" || exit 0
53
+ GITHUB_TOKEN="$GITHUB_TOKEN" timeout 60 node "$SYNC_SCRIPT" "$FEATURE_ID" >/dev/null 2>&1
54
+ exit 0
@@ -0,0 +1,46 @@
1
+ #!/bin/bash
2
+ # living-docs-handler.sh - Sync increment to living docs
3
+ # Called async by processor, non-blocking, error-tolerant
4
+ set +e
5
+
6
+ INC_ID="${1:-}"
7
+ [[ -z "$INC_ID" ]] && exit 0
8
+
9
+ # Find project root
10
+ PROJECT_ROOT="$PWD"
11
+ while [[ "$PROJECT_ROOT" != "/" ]] && [[ ! -d "$PROJECT_ROOT/.specweave" ]]; do
12
+ PROJECT_ROOT=$(dirname "$PROJECT_ROOT")
13
+ done
14
+ [[ ! -d "$PROJECT_ROOT/.specweave" ]] && exit 0
15
+
16
+ # Throttle: max once per minute per increment
17
+ THROTTLE_FILE="$PROJECT_ROOT/.specweave/state/.living-docs-$INC_ID"
18
+ if [[ -f "$THROTTLE_FILE" ]]; then
19
+ AGE=$(($(date +%s) - $(stat -f %m "$THROTTLE_FILE" 2>/dev/null || echo 0)))
20
+ [[ $AGE -lt 60 ]] && exit 0
21
+ fi
22
+ touch "$THROTTLE_FILE"
23
+
24
+ # Find sync script
25
+ SYNC_SCRIPT=""
26
+ for path in \
27
+ "$PROJECT_ROOT/plugins/specweave/lib/hooks/sync-living-docs.js" \
28
+ "$PROJECT_ROOT/dist/plugins/specweave/lib/hooks/sync-living-docs.js" \
29
+ "${CLAUDE_PLUGIN_ROOT:-}/lib/hooks/sync-living-docs.js"; do
30
+ [[ -f "$path" ]] && { SYNC_SCRIPT="$path"; break; }
31
+ done
32
+ [[ -z "$SYNC_SCRIPT" ]] && exit 0
33
+
34
+ # Extract feature ID from spec.md
35
+ SPEC_FILE="$PROJECT_ROOT/.specweave/increments/$INC_ID/spec.md"
36
+ FEATURE_ID=""
37
+ [[ -f "$SPEC_FILE" ]] && FEATURE_ID=$(grep -E "^(epic|feature_id):" "$SPEC_FILE" | head -1 | sed 's/.*:[[:space:]]*//' | tr -d '"'"'")
38
+
39
+ # Run sync (timeout 30s)
40
+ cd "$PROJECT_ROOT" || exit 0
41
+ if [[ -n "$FEATURE_ID" ]]; then
42
+ FEATURE_ID="$FEATURE_ID" timeout 30 node "$SYNC_SCRIPT" "$INC_ID" >/dev/null 2>&1
43
+ else
44
+ timeout 30 node "$SYNC_SCRIPT" "$INC_ID" >/dev/null 2>&1
45
+ fi
46
+ exit 0
@@ -0,0 +1,50 @@
1
+ #!/bin/bash
2
+ # status-update.sh - Fast status line update (synchronous)
3
+ # Goal: <20ms execution, pure bash, no external processes
4
+ set +e
5
+
6
+ INC_ID="${1:-}"
7
+
8
+ # Find project root
9
+ PROJECT_ROOT="$PWD"
10
+ while [[ "$PROJECT_ROOT" != "/" ]] && [[ ! -d "$PROJECT_ROOT/.specweave" ]]; do
11
+ PROJECT_ROOT=$(dirname "$PROJECT_ROOT")
12
+ done
13
+ [[ ! -d "$PROJECT_ROOT/.specweave" ]] && exit 0
14
+
15
+ STATE_DIR="$PROJECT_ROOT/.specweave/state"
16
+ CACHE_FILE="$STATE_DIR/status-line.json"
17
+ mkdir -p "$STATE_DIR" 2>/dev/null
18
+
19
+ # TTL check (10 seconds)
20
+ if [[ -f "$CACHE_FILE" ]]; then
21
+ CACHE_AGE=$(($(date +%s) - $(stat -f %m "$CACHE_FILE" 2>/dev/null || echo 0)))
22
+ [[ $CACHE_AGE -lt 10 ]] && exit 0
23
+ fi
24
+
25
+ # Find active increment if not provided
26
+ if [[ -z "$INC_ID" ]]; then
27
+ for meta in "$PROJECT_ROOT/.specweave/increments"/[0-9]*/metadata.json; do
28
+ [[ -f "$meta" ]] || continue
29
+ STATUS=$(grep -o '"status"[[:space:]]*:[[:space:]]*"[^"]*"' "$meta" | grep -o '"[^"]*"$' | tr -d '"')
30
+ [[ "$STATUS" == "active" || "$STATUS" == "planning" ]] && {
31
+ INC_ID=$(basename "$(dirname "$meta")")
32
+ break
33
+ }
34
+ done
35
+ fi
36
+ [[ -z "$INC_ID" ]] && { echo '{"current":null}' > "$CACHE_FILE"; exit 0; }
37
+
38
+ TASKS_FILE="$PROJECT_ROOT/.specweave/increments/$INC_ID/tasks.md"
39
+ [[ ! -f "$TASKS_FILE" ]] && exit 0
40
+
41
+ # Count tasks (pure bash, fast)
42
+ TOTAL=$(grep -c "^###\? T-" "$TASKS_FILE" 2>/dev/null || echo 0)
43
+ DONE=$(grep -c "\[x\]" "$TASKS_FILE" 2>/dev/null || echo 0)
44
+ PCT=0; [[ $TOTAL -gt 0 ]] && PCT=$((DONE * 100 / TOTAL))
45
+
46
+ # Write cache (atomic)
47
+ cat > "$CACHE_FILE" << EOF
48
+ {"current":{"id":"$INC_ID","completed":$DONE,"total":$TOTAL,"percentage":$PCT},"ts":"$(date +%s)"}
49
+ EOF
50
+ exit 0
@@ -0,0 +1,16 @@
1
+ {
2
+ "hooks": {
3
+ "PostToolUse": [
4
+ {
5
+ "matcher": "Edit|Write",
6
+ "matcher_content": "\\.specweave/increments/",
7
+ "hooks": [
8
+ {
9
+ "type": "command",
10
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/v2/dispatchers/post-tool-use.sh"
11
+ }
12
+ ]
13
+ }
14
+ ]
15
+ }
16
+ }
@@ -0,0 +1,30 @@
1
+ #!/bin/bash
2
+ # dequeue.sh - Get and remove next event from queue
3
+ # Usage: dequeue.sh [--peek]
4
+ # Returns JSON event or empty if queue is empty
5
+ set +e
6
+
7
+ PEEK=false
8
+ [[ "$1" == "--peek" ]] && PEEK=true
9
+
10
+ # Find project root
11
+ PROJECT_ROOT="$PWD"
12
+ while [[ "$PROJECT_ROOT" != "/" ]] && [[ ! -d "$PROJECT_ROOT/.specweave" ]]; do
13
+ PROJECT_ROOT=$(dirname "$PROJECT_ROOT")
14
+ done
15
+ [[ ! -d "$PROJECT_ROOT/.specweave" ]] && exit 0
16
+
17
+ QUEUE_DIR="$PROJECT_ROOT/.specweave/state/event-queue"
18
+ [[ ! -d "$QUEUE_DIR" ]] && exit 0
19
+
20
+ # Get oldest event file (FIFO)
21
+ OLDEST=$(ls -1 "$QUEUE_DIR"/*.event 2>/dev/null | head -1)
22
+ [[ -z "$OLDEST" ]] && exit 0
23
+
24
+ # Output event content
25
+ cat "$OLDEST" 2>/dev/null
26
+
27
+ # Remove if not peeking
28
+ [[ "$PEEK" == "false" ]] && rm -f "$OLDEST" 2>/dev/null
29
+
30
+ exit 0
@@ -0,0 +1,41 @@
1
+ #!/bin/bash
2
+ # enqueue.sh - Add event to queue with deduplication
3
+ # Usage: enqueue.sh <event_type> <event_data>
4
+ # Events are deduplicated by type+data hash within 5 second window
5
+ set +e
6
+
7
+ EVENT_TYPE="${1:-unknown}"
8
+ EVENT_DATA="${2:-}"
9
+
10
+ # Find project root
11
+ PROJECT_ROOT="$PWD"
12
+ while [[ "$PROJECT_ROOT" != "/" ]] && [[ ! -d "$PROJECT_ROOT/.specweave" ]]; do
13
+ PROJECT_ROOT=$(dirname "$PROJECT_ROOT")
14
+ done
15
+ [[ ! -d "$PROJECT_ROOT/.specweave" ]] && exit 0
16
+
17
+ QUEUE_DIR="$PROJECT_ROOT/.specweave/state/event-queue"
18
+ mkdir -p "$QUEUE_DIR" 2>/dev/null || exit 0
19
+
20
+ # Deduplication: hash event type + data
21
+ HASH=$(echo "${EVENT_TYPE}:${EVENT_DATA}" | md5 | cut -c1-8)
22
+ DEDUP_FILE="$QUEUE_DIR/.dedup-$HASH"
23
+ DEDUP_TTL=5
24
+
25
+ # Check if duplicate (within TTL)
26
+ if [[ -f "$DEDUP_FILE" ]]; then
27
+ AGE=$(($(date +%s) - $(stat -f %m "$DEDUP_FILE" 2>/dev/null || echo 0)))
28
+ [[ $AGE -lt $DEDUP_TTL ]] && exit 0
29
+ fi
30
+ touch "$DEDUP_FILE"
31
+
32
+ # Enqueue event (atomic write)
33
+ TIMESTAMP=$(date +%s%N)
34
+ EVENT_FILE="$QUEUE_DIR/${TIMESTAMP}-${EVENT_TYPE}.event"
35
+ cat > "$EVENT_FILE" << EOF
36
+ {"type":"$EVENT_TYPE","data":"$EVENT_DATA","ts":"$(date -u +%Y-%m-%dT%H:%M:%SZ)"}
37
+ EOF
38
+
39
+ # Cleanup old dedup files (>30s)
40
+ find "$QUEUE_DIR" -name ".dedup-*" -mmin +1 -delete 2>/dev/null &
41
+ exit 0
@@ -0,0 +1,72 @@
1
+ #!/bin/bash
2
+ # processor.sh - Background event processor
3
+ # Processes queued events asynchronously, routes to handlers
4
+ # Usage: processor.sh [--daemon]
5
+ # Self-terminates after 30s of idle
6
+ set +e
7
+
8
+ DAEMON_MODE=false
9
+ [[ "$1" == "--daemon" ]] && DAEMON_MODE=true
10
+
11
+ # Find project root
12
+ PROJECT_ROOT="$PWD"
13
+ while [[ "$PROJECT_ROOT" != "/" ]] && [[ ! -d "$PROJECT_ROOT/.specweave" ]]; do
14
+ PROJECT_ROOT=$(dirname "$PROJECT_ROOT")
15
+ done
16
+ [[ ! -d "$PROJECT_ROOT/.specweave" ]] && exit 0
17
+
18
+ QUEUE_DIR="$PROJECT_ROOT/.specweave/state/event-queue"
19
+ HANDLER_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../handlers" && pwd)"
20
+ LOG_FILE="$PROJECT_ROOT/.specweave/logs/processor.log"
21
+ PID_FILE="$PROJECT_ROOT/.specweave/state/.processor.pid"
22
+ IDLE_TIMEOUT=30
23
+ IDLE_COUNT=0
24
+
25
+ mkdir -p "$(dirname "$LOG_FILE")" 2>/dev/null
26
+
27
+ # Check if already running
28
+ if [[ -f "$PID_FILE" ]]; then
29
+ OLD_PID=$(cat "$PID_FILE" 2>/dev/null)
30
+ if kill -0 "$OLD_PID" 2>/dev/null; then
31
+ exit 0 # Already running
32
+ fi
33
+ fi
34
+ echo $$ > "$PID_FILE"
35
+ trap 'rm -f "$PID_FILE"' EXIT
36
+
37
+ log() { echo "[$(date +%H:%M:%S)] $1" >> "$LOG_FILE" 2>/dev/null; }
38
+ log "Processor started (PID: $$)"
39
+
40
+ process_event() {
41
+ local EVENT_JSON="$1"
42
+ local EVENT_TYPE=$(echo "$EVENT_JSON" | grep -o '"type":"[^"]*"' | cut -d'"' -f4)
43
+ local EVENT_DATA=$(echo "$EVENT_JSON" | grep -o '"data":"[^"]*"' | cut -d'"' -f4)
44
+
45
+ log "Processing: $EVENT_TYPE ($EVENT_DATA)"
46
+
47
+ case "$EVENT_TYPE" in
48
+ task.updated|spec.updated)
49
+ bash "$HANDLER_DIR/living-docs-handler.sh" "$EVENT_DATA" 2>/dev/null
50
+ bash "$HANDLER_DIR/ac-validation-handler.sh" "$EVENT_DATA" 2>/dev/null
51
+ ;;
52
+ metadata.changed)
53
+ bash "$HANDLER_DIR/github-sync-handler.sh" "$EVENT_DATA" 2>/dev/null
54
+ ;;
55
+ esac
56
+ }
57
+
58
+ # Main loop
59
+ while true; do
60
+ EVENT=$(bash "$(dirname "${BASH_SOURCE[0]}")/dequeue.sh" 2>/dev/null)
61
+
62
+ if [[ -n "$EVENT" ]]; then
63
+ IDLE_COUNT=0
64
+ process_event "$EVENT"
65
+ else
66
+ IDLE_COUNT=$((IDLE_COUNT + 1))
67
+ [[ $IDLE_COUNT -ge $IDLE_TIMEOUT ]] && { log "Idle timeout, exiting"; exit 0; }
68
+ sleep 1
69
+ fi
70
+
71
+ [[ "$DAEMON_MODE" == "false" ]] && [[ $IDLE_COUNT -ge 3 ]] && exit 0
72
+ done
@@ -22,8 +22,9 @@ export function parseTasksWithUSLinks(tasksPath) {
22
22
  // Split content into lines for line number tracking
23
23
  const lines = content.split('\n');
24
24
  // Regex patterns for task parsing (T-029: Support E suffix for external IDs)
25
- const taskHeaderRegex = /^###\s+(T-\d{3}E?):\s*(.+)$/;
26
- const userStoryRegex = /^\*\*User Story\*\*:\s*(US-\d{3}E?)/;
25
+ // Updated: Support 3+ digits for T-XXX and US-XXX (Y2K fix)
26
+ const taskHeaderRegex = /^###\s+(T-\d{3,}E?):\s*(.+)$/;
27
+ const userStoryRegex = /^\*\*User Story\*\*:\s*(US-\d{3,}E?)/;
27
28
  const satisfiesACsRegex = /^\*\*Satisfies ACs\*\*:\s*(AC-US\d+E?-\d{2}(?:,\s*AC-US\d+E?-\d{2})*)/;
28
29
  const statusRegex = /^\*\*Status\*\*:\s*\[([x ])\]\s*(\w+)/;
29
30
  const priorityRegex = /^\*\*Priority\*\*:\s*(.+)/;
@@ -104,11 +105,11 @@ export function parseTasksWithUSLinks(tasksPath) {
104
105
  }
105
106
  const dependenciesMatch = line.match(dependenciesRegex);
106
107
  if (dependenciesMatch) {
107
- // Parse dependencies (T-001, T-002, etc.)
108
+ // Parse dependencies (T-001, T-002, T-1000, etc.)
108
109
  currentTask.dependencies = dependenciesMatch[1]
109
110
  .split(',')
110
111
  .map(dep => dep.trim())
111
- .filter(dep => dep.match(/^T-\d{3}$/));
112
+ .filter(dep => dep.match(/^T-\d{3,}$/));
112
113
  continue;
113
114
  }
114
115
  // Track sections for description parsing
@@ -178,14 +179,14 @@ export function validateTaskLinkage(task, validUSIds, validACIds) {
178
179
  const errors = [];
179
180
  // Validate userStory field
180
181
  if (task.userStory) {
181
- // Check format (US-XXX)
182
- if (!task.userStory.match(/^US-\d{3}$/)) {
182
+ // Check format (US-XXX, 3+ digits)
183
+ if (!task.userStory.match(/^US-\d{3,}$/)) {
183
184
  errors.push({
184
185
  taskId: task.id,
185
186
  field: 'userStory',
186
187
  value: task.userStory,
187
- message: `Invalid US-ID format: "${task.userStory}" (expected format: US-001)`,
188
- suggestedFix: 'Use format: US-XXX where XXX is a 3-digit number'
188
+ message: `Invalid US-ID format: "${task.userStory}" (expected format: US-001 or US-1000)`,
189
+ suggestedFix: 'Use format: US-XXX where XXX is 3 or more digits'
189
190
  });
190
191
  }
191
192
  // Check if US exists in spec.md
@@ -250,10 +251,10 @@ function extractUSNumberFromACId(acId) {
250
251
  return match ? parseInt(match[1], 10) : -1;
251
252
  }
252
253
  /**
253
- * Extract US number from US-ID (US-001 → 1)
254
+ * Extract US number from US-ID (US-001 → 1, US-1000 → 1000)
254
255
  */
255
256
  function extractUSNumber(usId) {
256
- const match = usId.match(/^US-(\d{3})$/);
257
+ const match = usId.match(/^US-(\d{3,})$/);
257
258
  return match ? parseInt(match[1], 10) : -1;
258
259
  }
259
260
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"task-parser.js","sourceRoot":"","sources":["../../../../src/generators/spec/task-parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"task-parser.js","sourceRoot":"","sources":["../../../../src/generators/spec/task-parser.ts"],"names":[],"mappings":"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"}
@@ -373,7 +373,6 @@ ${userStory.technicalContext}
373
373
  return mapping.task || "Task";
374
374
  case "Subtask":
375
375
  return mapping.task || "Task";
376
- // ADO doesn't have subtasks, use Task
377
376
  default:
378
377
  return "User Story";
379
378
  }