wogiflow 1.0.0

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 (221) hide show
  1. package/.workflow/agents/reviewer.md +81 -0
  2. package/.workflow/agents/security.md +94 -0
  3. package/.workflow/agents/story-writer.md +58 -0
  4. package/.workflow/bridges/base-bridge.js +395 -0
  5. package/.workflow/bridges/claude-bridge.js +434 -0
  6. package/.workflow/bridges/index.js +130 -0
  7. package/.workflow/lib/assumption-detector.js +481 -0
  8. package/.workflow/lib/config-substitution.js +371 -0
  9. package/.workflow/lib/failure-categories.js +478 -0
  10. package/.workflow/state/app-map.md.template +15 -0
  11. package/.workflow/state/architecture.md.template +24 -0
  12. package/.workflow/state/component-index.json.template +5 -0
  13. package/.workflow/state/decisions.md.template +15 -0
  14. package/.workflow/state/feedback-patterns.md.template +9 -0
  15. package/.workflow/state/knowledge-sync.json.template +6 -0
  16. package/.workflow/state/progress.md.template +14 -0
  17. package/.workflow/state/ready.json.template +7 -0
  18. package/.workflow/state/request-log.md.template +14 -0
  19. package/.workflow/state/session-state.json.template +11 -0
  20. package/.workflow/state/stack.md.template +33 -0
  21. package/.workflow/state/testing.md.template +36 -0
  22. package/.workflow/templates/claude-md.hbs +257 -0
  23. package/.workflow/templates/correction-report.md +67 -0
  24. package/.workflow/templates/gemini-md.hbs +52 -0
  25. package/README.md +1802 -0
  26. package/bin/flow +205 -0
  27. package/lib/index.js +33 -0
  28. package/lib/installer.js +467 -0
  29. package/lib/release-channel.js +269 -0
  30. package/lib/skill-registry.js +526 -0
  31. package/lib/upgrader.js +401 -0
  32. package/lib/utils.js +305 -0
  33. package/package.json +64 -0
  34. package/scripts/flow +985 -0
  35. package/scripts/flow-adaptive-learning.js +1259 -0
  36. package/scripts/flow-aggregate.js +488 -0
  37. package/scripts/flow-archive +133 -0
  38. package/scripts/flow-auto-context.js +1015 -0
  39. package/scripts/flow-auto-learn.js +615 -0
  40. package/scripts/flow-bridge.js +223 -0
  41. package/scripts/flow-browser-suggest.js +316 -0
  42. package/scripts/flow-bug.js +247 -0
  43. package/scripts/flow-cascade.js +711 -0
  44. package/scripts/flow-changelog +85 -0
  45. package/scripts/flow-checkpoint.js +483 -0
  46. package/scripts/flow-cli.js +403 -0
  47. package/scripts/flow-code-intelligence.js +760 -0
  48. package/scripts/flow-complexity.js +502 -0
  49. package/scripts/flow-config-set.js +152 -0
  50. package/scripts/flow-constants.js +157 -0
  51. package/scripts/flow-context +152 -0
  52. package/scripts/flow-context-init.js +482 -0
  53. package/scripts/flow-context-monitor.js +384 -0
  54. package/scripts/flow-context-scoring.js +886 -0
  55. package/scripts/flow-correct.js +458 -0
  56. package/scripts/flow-damage-control.js +985 -0
  57. package/scripts/flow-deps +101 -0
  58. package/scripts/flow-diff.js +700 -0
  59. package/scripts/flow-done +151 -0
  60. package/scripts/flow-done.js +489 -0
  61. package/scripts/flow-durable-session.js +1541 -0
  62. package/scripts/flow-entropy-monitor.js +345 -0
  63. package/scripts/flow-export-profile +349 -0
  64. package/scripts/flow-export-scanner.js +1046 -0
  65. package/scripts/flow-figma-confirm.js +400 -0
  66. package/scripts/flow-figma-extract.js +496 -0
  67. package/scripts/flow-figma-generate.js +683 -0
  68. package/scripts/flow-figma-index.js +909 -0
  69. package/scripts/flow-figma-match.js +617 -0
  70. package/scripts/flow-figma-mcp-server.js +518 -0
  71. package/scripts/flow-figma-pipeline.js +414 -0
  72. package/scripts/flow-file-ops.js +301 -0
  73. package/scripts/flow-gate-confidence.js +825 -0
  74. package/scripts/flow-guided-edit.js +659 -0
  75. package/scripts/flow-health +185 -0
  76. package/scripts/flow-health.js +413 -0
  77. package/scripts/flow-hooks.js +556 -0
  78. package/scripts/flow-http-client.js +249 -0
  79. package/scripts/flow-hybrid-detect.js +167 -0
  80. package/scripts/flow-hybrid-interactive.js +591 -0
  81. package/scripts/flow-hybrid-test.js +152 -0
  82. package/scripts/flow-import-profile +439 -0
  83. package/scripts/flow-init +253 -0
  84. package/scripts/flow-instruction-richness.js +827 -0
  85. package/scripts/flow-jira-integration.js +579 -0
  86. package/scripts/flow-knowledge-router.js +522 -0
  87. package/scripts/flow-knowledge-sync.js +589 -0
  88. package/scripts/flow-linear-integration.js +631 -0
  89. package/scripts/flow-links.js +774 -0
  90. package/scripts/flow-log-manager.js +559 -0
  91. package/scripts/flow-loop-enforcer.js +1246 -0
  92. package/scripts/flow-loop-retry-learning.js +630 -0
  93. package/scripts/flow-lsp.js +923 -0
  94. package/scripts/flow-map-index +348 -0
  95. package/scripts/flow-map-sync +201 -0
  96. package/scripts/flow-memory-blocks.js +668 -0
  97. package/scripts/flow-memory-compactor.js +350 -0
  98. package/scripts/flow-memory-db.js +1110 -0
  99. package/scripts/flow-memory-sync.js +484 -0
  100. package/scripts/flow-metrics.js +353 -0
  101. package/scripts/flow-migrate-ids.js +370 -0
  102. package/scripts/flow-model-adapter.js +802 -0
  103. package/scripts/flow-model-router.js +884 -0
  104. package/scripts/flow-models.js +1231 -0
  105. package/scripts/flow-morning.js +517 -0
  106. package/scripts/flow-multi-approach.js +660 -0
  107. package/scripts/flow-new-feature +86 -0
  108. package/scripts/flow-onboard +1042 -0
  109. package/scripts/flow-orchestrate-llm.js +459 -0
  110. package/scripts/flow-orchestrate.js +3592 -0
  111. package/scripts/flow-output.js +123 -0
  112. package/scripts/flow-parallel-detector.js +399 -0
  113. package/scripts/flow-parallel-dispatch.js +987 -0
  114. package/scripts/flow-parallel.js +428 -0
  115. package/scripts/flow-pattern-enforcer.js +600 -0
  116. package/scripts/flow-prd-manager.js +282 -0
  117. package/scripts/flow-progress.js +323 -0
  118. package/scripts/flow-project-analyzer.js +975 -0
  119. package/scripts/flow-prompt-composer.js +487 -0
  120. package/scripts/flow-providers.js +1381 -0
  121. package/scripts/flow-queue.js +308 -0
  122. package/scripts/flow-ready +82 -0
  123. package/scripts/flow-ready.js +189 -0
  124. package/scripts/flow-regression.js +396 -0
  125. package/scripts/flow-response-parser.js +450 -0
  126. package/scripts/flow-resume.js +284 -0
  127. package/scripts/flow-rules-sync.js +439 -0
  128. package/scripts/flow-run-trace.js +718 -0
  129. package/scripts/flow-safety.js +587 -0
  130. package/scripts/flow-search +104 -0
  131. package/scripts/flow-security.js +481 -0
  132. package/scripts/flow-session-end +106 -0
  133. package/scripts/flow-session-end.js +437 -0
  134. package/scripts/flow-session-state.js +671 -0
  135. package/scripts/flow-setup-hooks +216 -0
  136. package/scripts/flow-setup-hooks.js +377 -0
  137. package/scripts/flow-skill-create.js +329 -0
  138. package/scripts/flow-skill-creator.js +572 -0
  139. package/scripts/flow-skill-generator.js +1046 -0
  140. package/scripts/flow-skill-learn.js +880 -0
  141. package/scripts/flow-skill-matcher.js +578 -0
  142. package/scripts/flow-spec-generator.js +820 -0
  143. package/scripts/flow-stack-wizard.js +895 -0
  144. package/scripts/flow-standup +162 -0
  145. package/scripts/flow-start +74 -0
  146. package/scripts/flow-start.js +235 -0
  147. package/scripts/flow-status +110 -0
  148. package/scripts/flow-status.js +301 -0
  149. package/scripts/flow-step-browser.js +83 -0
  150. package/scripts/flow-step-changelog.js +217 -0
  151. package/scripts/flow-step-comments.js +306 -0
  152. package/scripts/flow-step-complexity.js +234 -0
  153. package/scripts/flow-step-coverage.js +218 -0
  154. package/scripts/flow-step-knowledge.js +193 -0
  155. package/scripts/flow-step-pr-tests.js +364 -0
  156. package/scripts/flow-step-regression.js +89 -0
  157. package/scripts/flow-step-review.js +516 -0
  158. package/scripts/flow-step-security.js +162 -0
  159. package/scripts/flow-step-silent-failures.js +290 -0
  160. package/scripts/flow-step-simplifier.js +346 -0
  161. package/scripts/flow-story +105 -0
  162. package/scripts/flow-story.js +500 -0
  163. package/scripts/flow-suspend.js +252 -0
  164. package/scripts/flow-sync-daemon.js +654 -0
  165. package/scripts/flow-task-analyzer.js +606 -0
  166. package/scripts/flow-team-dashboard.js +748 -0
  167. package/scripts/flow-team-sync.js +752 -0
  168. package/scripts/flow-team.js +977 -0
  169. package/scripts/flow-tech-options.js +528 -0
  170. package/scripts/flow-templates.js +812 -0
  171. package/scripts/flow-tiered-learning.js +728 -0
  172. package/scripts/flow-trace +204 -0
  173. package/scripts/flow-transcript-chunking.js +1106 -0
  174. package/scripts/flow-transcript-digest.js +7918 -0
  175. package/scripts/flow-transcript-language.js +465 -0
  176. package/scripts/flow-transcript-parsing.js +1085 -0
  177. package/scripts/flow-transcript-stories.js +2194 -0
  178. package/scripts/flow-update-map +224 -0
  179. package/scripts/flow-utils.js +2242 -0
  180. package/scripts/flow-verification.js +644 -0
  181. package/scripts/flow-verify.js +1177 -0
  182. package/scripts/flow-voice-input.js +638 -0
  183. package/scripts/flow-watch +168 -0
  184. package/scripts/flow-workflow-steps.js +521 -0
  185. package/scripts/flow-workflow.js +1029 -0
  186. package/scripts/flow-worktree.js +489 -0
  187. package/scripts/hooks/adapters/base-adapter.js +102 -0
  188. package/scripts/hooks/adapters/claude-code.js +359 -0
  189. package/scripts/hooks/adapters/index.js +79 -0
  190. package/scripts/hooks/core/component-check.js +341 -0
  191. package/scripts/hooks/core/index.js +35 -0
  192. package/scripts/hooks/core/loop-check.js +241 -0
  193. package/scripts/hooks/core/session-context.js +294 -0
  194. package/scripts/hooks/core/task-gate.js +177 -0
  195. package/scripts/hooks/core/validation.js +230 -0
  196. package/scripts/hooks/entry/claude-code/post-tool-use.js +65 -0
  197. package/scripts/hooks/entry/claude-code/pre-tool-use.js +89 -0
  198. package/scripts/hooks/entry/claude-code/session-end.js +87 -0
  199. package/scripts/hooks/entry/claude-code/session-start.js +46 -0
  200. package/scripts/hooks/entry/claude-code/stop.js +43 -0
  201. package/scripts/postinstall.js +139 -0
  202. package/templates/browser-test-flow.json +56 -0
  203. package/templates/bug-report.md +43 -0
  204. package/templates/component-detail.md +42 -0
  205. package/templates/component.stories.tsx +49 -0
  206. package/templates/context/constraints.md +83 -0
  207. package/templates/context/conventions.md +177 -0
  208. package/templates/context/stack.md +60 -0
  209. package/templates/correction-report.md +90 -0
  210. package/templates/feature-proposal.md +35 -0
  211. package/templates/hybrid/_base.md +254 -0
  212. package/templates/hybrid/_patterns.md +45 -0
  213. package/templates/hybrid/create-component.md +127 -0
  214. package/templates/hybrid/create-file.md +56 -0
  215. package/templates/hybrid/create-hook.md +145 -0
  216. package/templates/hybrid/create-service.md +70 -0
  217. package/templates/hybrid/fix-bug.md +33 -0
  218. package/templates/hybrid/modify-file.md +55 -0
  219. package/templates/story.md +68 -0
  220. package/templates/task.json +56 -0
  221. package/templates/trace.md +69 -0
@@ -0,0 +1,157 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Wogi Flow - Constants
5
+ *
6
+ * Centralized magic numbers and configuration constants.
7
+ * Extracted from various files to improve maintainability.
8
+ *
9
+ * Usage:
10
+ * const { TIMEOUTS, LIMITS, THRESHOLDS } = require('./flow-constants');
11
+ */
12
+
13
+ // ============================================================
14
+ // Timeout Constants (milliseconds)
15
+ // ============================================================
16
+
17
+ const TIMEOUTS = {
18
+ // Command execution
19
+ DEFAULT_COMMAND: 120000, // 2 minutes - default shell command timeout
20
+ QUICK_COMMAND: 30000, // 30 seconds - quick operations
21
+ LONG_COMMAND: 300000, // 5 minutes - build/test operations
22
+
23
+ // HTTP requests
24
+ HTTP_DEFAULT: 30000, // 30 seconds - general HTTP requests
25
+ HTTP_QUICK: 5000, // 5 seconds - health checks
26
+ HTTP_LONG: 60000, // 1 minute - large requests
27
+ HTTP_PROVIDER: 120000, // 2 minutes - LLM provider requests
28
+
29
+ // File locking
30
+ LOCK_STALE: 60000, // 1 minute - lock considered stale
31
+ LOCK_CLEANUP_STALE: 30000, // 30 seconds - cleanup threshold
32
+ LOCK_RETRY_DELAY: 100, // 100ms - delay between lock retries
33
+
34
+ // LSP/Language Server
35
+ LSP_DEFAULT: 5000, // 5 seconds - LSP operations
36
+ LSP_ENRICH: 2000, // 2 seconds - LSP enrichment
37
+
38
+ // Polling
39
+ POLL_INTERVAL: 1000, // 1 second - default polling interval
40
+ ENDPOINT_CHECK: 3000, // 3 seconds - endpoint availability check
41
+
42
+ // Caching
43
+ CACHE_TTL: 300000, // 5 minutes - default cache TTL for integrations
44
+ };
45
+
46
+ // ============================================================
47
+ // Limit Constants
48
+ // ============================================================
49
+
50
+ const LIMITS = {
51
+ // Retries
52
+ LOCK_MAX_RETRIES: 5,
53
+ HTTP_MAX_RETRIES: 3,
54
+ TASK_MAX_RETRIES: 5,
55
+
56
+ // History/Storage
57
+ MAX_SESSION_HISTORY: 50,
58
+ MAX_RECENT_FILES: 20,
59
+ MAX_RECENT_DECISIONS: 10,
60
+ MAX_REQUEST_LOG_ENTRIES: 100,
61
+ MAX_WORKFLOW_ITERATIONS: 100,
62
+
63
+ // Content
64
+ MAX_REGEX_LENGTH: 100, // Prevent ReDoS
65
+ MAX_INPUT_LENGTH: 10000, // Max string for regex testing
66
+ MAX_OUTPUT_SIZE: 1024 * 1024, // 1MB output limit
67
+
68
+ // File operations
69
+ MAX_FILE_WALK_DEPTH: 10,
70
+ MAX_CONCURRENT_TASKS: 5,
71
+ };
72
+
73
+ // ============================================================
74
+ // Threshold Constants
75
+ // ============================================================
76
+
77
+ const THRESHOLDS = {
78
+ // Success rates (percentages)
79
+ SUCCESS_RATE_HIGH: 90,
80
+ SUCCESS_RATE_MEDIUM: 70,
81
+ SUCCESS_RATE_LOW: 50,
82
+
83
+ // Confidence scores
84
+ CONFIDENCE_HIGH: 0.8,
85
+ CONFIDENCE_MEDIUM: 0.5,
86
+ CONFIDENCE_LOW: 0.3,
87
+
88
+ // Context management
89
+ CONTEXT_WARN_PERCENT: 70,
90
+ CONTEXT_CRITICAL_PERCENT: 85,
91
+
92
+ // Small fix threshold (files)
93
+ SMALL_FIX_FILES: 3,
94
+ };
95
+
96
+ // ============================================================
97
+ // Retry Backoff Constants
98
+ // ============================================================
99
+
100
+ const BACKOFF = {
101
+ BASE_DELAY: 1000, // 1 second base
102
+ MAX_DELAY: 30000, // 30 seconds max
103
+ MULTIPLIER: 2, // Exponential multiplier
104
+ JITTER: 0.1, // 10% jitter
105
+ };
106
+
107
+ // ============================================================
108
+ // Known Config Keys (for validation)
109
+ // ============================================================
110
+
111
+ const KNOWN_CONFIG_KEYS = [
112
+ 'hybrid',
113
+ 'parallel',
114
+ 'worktree',
115
+ 'qualityGates',
116
+ 'testing',
117
+ 'componentRules',
118
+ 'mandatorySteps',
119
+ 'phases',
120
+ 'corrections',
121
+ 'skills',
122
+ 'autoContext',
123
+ 'metrics',
124
+ 'figmaAnalyzer',
125
+ 'learning',
126
+ 'hooks',
127
+ 'project',
128
+ 'projectType',
129
+ 'contextMonitor',
130
+ 'requestLog',
131
+ 'sessionState',
132
+ 'priorities',
133
+ 'morningBriefing',
134
+ 'commits',
135
+ 'enforcement',
136
+ 'damageControl',
137
+ 'storyDecomposition',
138
+ 'specificationMode',
139
+ ];
140
+
141
+ module.exports = {
142
+ TIMEOUTS,
143
+ LIMITS,
144
+ THRESHOLDS,
145
+ BACKOFF,
146
+ KNOWN_CONFIG_KEYS,
147
+
148
+ // Legacy exports for backwards compatibility
149
+ DEFAULT_COMMAND_TIMEOUT_MS: TIMEOUTS.DEFAULT_COMMAND,
150
+ QUICK_COMMAND_TIMEOUT_MS: TIMEOUTS.QUICK_COMMAND,
151
+ LOCK_STALE_THRESHOLD_MS: TIMEOUTS.LOCK_STALE,
152
+ CLEANUP_LOCK_STALE_MS: TIMEOUTS.LOCK_CLEANUP_STALE,
153
+ LOCK_RETRY_DELAY_MS: TIMEOUTS.LOCK_RETRY_DELAY,
154
+ LOCK_MAX_RETRIES: LIMITS.LOCK_MAX_RETRIES,
155
+ MAX_SESSION_HISTORY: LIMITS.MAX_SESSION_HISTORY,
156
+ MAX_WORKFLOW_ITERATIONS: LIMITS.MAX_WORKFLOW_ITERATIONS,
157
+ };
@@ -0,0 +1,152 @@
1
+ #!/bin/bash
2
+
3
+ # Wogi Flow - Load Task Context
4
+ # Gather all context needed to implement a task
5
+
6
+ set -e
7
+
8
+ WORKFLOW_DIR=".workflow"
9
+
10
+ # Colors
11
+ GREEN='\033[0;32m'
12
+ YELLOW='\033[1;33m'
13
+ CYAN='\033[0;36m'
14
+ RED='\033[0;31m'
15
+ NC='\033[0m'
16
+
17
+ if [ -z "$1" ]; then
18
+ echo "Usage: flow context <task-id>"
19
+ echo ""
20
+ echo "Loads all context for implementing a task:"
21
+ echo " - Task story and acceptance criteria"
22
+ echo " - Related request-log entries"
23
+ echo " - Referenced component docs"
24
+ echo " - Relevant decisions"
25
+ exit 1
26
+ fi
27
+
28
+ TASK_ID="$1"
29
+
30
+ echo -e "${CYAN}═══════════════════════════════════════${NC}"
31
+ echo -e "${CYAN} Context for: $TASK_ID${NC}"
32
+ echo -e "${CYAN}═══════════════════════════════════════${NC}"
33
+ echo ""
34
+
35
+ # Find the task story file
36
+ STORY_FILE=""
37
+ for file in "$WORKFLOW_DIR/changes"/*/"$TASK_ID.md" "$WORKFLOW_DIR/changes"/*/*.md; do
38
+ if [ -f "$file" ] && grep -q "$TASK_ID" "$file" 2>/dev/null; then
39
+ STORY_FILE="$file"
40
+ break
41
+ fi
42
+ done
43
+
44
+ # 1. Task Story
45
+ echo -e "${GREEN}📋 STORY${NC}"
46
+ echo "─────────────────────────────────────"
47
+ if [ -n "$STORY_FILE" ] && [ -f "$STORY_FILE" ]; then
48
+ cat "$STORY_FILE"
49
+ else
50
+ # Try to find in tasks.json
51
+ for tasks_file in "$WORKFLOW_DIR/changes"/*/tasks.json; do
52
+ if [ -f "$tasks_file" ]; then
53
+ task_info=$(python3 -c "
54
+ import json
55
+ with open('$tasks_file') as f:
56
+ data = json.load(f)
57
+ for task in data.get('tasks', []):
58
+ if task.get('id') == '$TASK_ID':
59
+ print(f\"Title: {task.get('title', 'N/A')}\")
60
+ print(f\"Status: {task.get('status', 'N/A')}\")
61
+ print(f\"Priority: {task.get('priority', 'N/A')}\")
62
+ us = task.get('userStory', {})
63
+ if us:
64
+ print(f\"\\nUser Story:\")
65
+ print(f\" As a {us.get('asA', '?')}\")
66
+ print(f\" I want {us.get('iWant', '?')}\")
67
+ print(f\" So that {us.get('soThat', '?')}\")
68
+ print(f\"\\nDescription: {task.get('description', 'N/A')}\")
69
+ ac = task.get('acceptanceCriteria', [])
70
+ if ac:
71
+ print(f\"\\nAcceptance Criteria:\")
72
+ for c in ac:
73
+ if isinstance(c, dict):
74
+ print(f\" {c.get('scenario', 'Scenario')}:\")
75
+ print(f\" Given {c.get('given', '?')}\")
76
+ print(f\" When {c.get('when', '?')}\")
77
+ print(f\" Then {c.get('then', '?')}\")
78
+ else:
79
+ print(f\" - {c}\")
80
+ break
81
+ " 2>/dev/null || true)
82
+ if [ -n "$task_info" ]; then
83
+ echo "$task_info"
84
+ break
85
+ fi
86
+ fi
87
+ done
88
+ fi
89
+ echo ""
90
+
91
+ # 2. Related Request Log Entries
92
+ echo -e "${GREEN}📜 RELATED HISTORY${NC}"
93
+ echo "─────────────────────────────────────"
94
+ if [ -f "$WORKFLOW_DIR/state/request-log.md" ]; then
95
+ # Search for task ID or related tags
96
+ related=$(grep -B1 -A5 "$TASK_ID" "$WORKFLOW_DIR/state/request-log.md" 2>/dev/null | head -30 || true)
97
+ if [ -n "$related" ]; then
98
+ echo "$related"
99
+ else
100
+ echo "No related entries found in request-log"
101
+ fi
102
+ fi
103
+ echo ""
104
+
105
+ # 3. Referenced Components
106
+ echo -e "${GREEN}🧩 COMPONENTS${NC}"
107
+ echo "─────────────────────────────────────"
108
+ if [ -f "$WORKFLOW_DIR/state/app-map.md" ]; then
109
+ echo "Available components:"
110
+ grep "^|" "$WORKFLOW_DIR/state/app-map.md" | grep -v "^| ---" | grep -v "^| Component" | grep -v "^| Screen" | grep -v "^| Modal" | head -15
111
+ fi
112
+ echo ""
113
+
114
+ # 4. Relevant Decisions
115
+ echo -e "${GREEN}📏 DECISIONS${NC}"
116
+ echo "─────────────────────────────────────"
117
+ if [ -f "$WORKFLOW_DIR/state/decisions.md" ]; then
118
+ # Show component and coding standards sections
119
+ head -50 "$WORKFLOW_DIR/state/decisions.md" | tail -40
120
+ fi
121
+ echo ""
122
+
123
+ # 5. Dependencies
124
+ echo -e "${GREEN}🔗 DEPENDENCIES${NC}"
125
+ echo "─────────────────────────────────────"
126
+ for tasks_file in "$WORKFLOW_DIR/changes"/*/tasks.json; do
127
+ if [ -f "$tasks_file" ]; then
128
+ python3 -c "
129
+ import json
130
+ with open('$tasks_file') as f:
131
+ data = json.load(f)
132
+ for task in data.get('tasks', []):
133
+ if task.get('id') == '$TASK_ID':
134
+ deps = task.get('dependencies', [])
135
+ if deps:
136
+ print('Depends on:')
137
+ for d in deps:
138
+ print(f' - {d}')
139
+ else:
140
+ print('No dependencies')
141
+ break
142
+ " 2>/dev/null || true
143
+ fi
144
+ done
145
+ echo ""
146
+
147
+ echo -e "${CYAN}═══════════════════════════════════════${NC}"
148
+ echo ""
149
+ echo "Ready to implement. Remember to:"
150
+ echo " 1. Follow acceptance criteria exactly"
151
+ echo " 2. Check app-map before creating components"
152
+ echo " 3. Log changes to request-log"