orbital-command 0.1.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 (325) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +396 -0
  3. package/bin/orbital.js +362 -0
  4. package/dist/assets/WorkflowVisualizer-BZ21PIIF.js +84 -0
  5. package/dist/assets/WorkflowVisualizer-BZV40eAE.css +1 -0
  6. package/dist/assets/charts-D__PA1zp.js +72 -0
  7. package/dist/assets/index-D1G6i0nS.css +1 -0
  8. package/dist/assets/index-DpItvKpf.js +419 -0
  9. package/dist/assets/ui-BvF022GT.js +53 -0
  10. package/dist/assets/vendor-Dzv9lrRc.js +59 -0
  11. package/dist/index.html +19 -0
  12. package/dist/scanner-sweep.png +0 -0
  13. package/dist/server/server/adapters/index.js +34 -0
  14. package/dist/server/server/adapters/iterm2-adapter.js +29 -0
  15. package/dist/server/server/adapters/subprocess-adapter.js +21 -0
  16. package/dist/server/server/adapters/terminal-adapter.js +1 -0
  17. package/dist/server/server/config.js +156 -0
  18. package/dist/server/server/database.js +90 -0
  19. package/dist/server/server/index.js +372 -0
  20. package/dist/server/server/init.js +811 -0
  21. package/dist/server/server/parsers/event-parser.js +64 -0
  22. package/dist/server/server/parsers/scope-parser.js +188 -0
  23. package/dist/server/server/routes/config-routes.js +163 -0
  24. package/dist/server/server/routes/data-routes.js +461 -0
  25. package/dist/server/server/routes/dispatch-routes.js +215 -0
  26. package/dist/server/server/routes/git-routes.js +92 -0
  27. package/dist/server/server/routes/scope-routes.js +215 -0
  28. package/dist/server/server/routes/sprint-routes.js +116 -0
  29. package/dist/server/server/routes/version-routes.js +130 -0
  30. package/dist/server/server/routes/workflow-routes.js +185 -0
  31. package/dist/server/server/schema.js +90 -0
  32. package/dist/server/server/services/batch-orchestrator.js +253 -0
  33. package/dist/server/server/services/claude-session-service.js +352 -0
  34. package/dist/server/server/services/config-service.js +132 -0
  35. package/dist/server/server/services/deploy-service.js +51 -0
  36. package/dist/server/server/services/event-service.js +63 -0
  37. package/dist/server/server/services/gate-service.js +83 -0
  38. package/dist/server/server/services/git-service.js +309 -0
  39. package/dist/server/server/services/github-service.js +145 -0
  40. package/dist/server/server/services/readiness-service.js +184 -0
  41. package/dist/server/server/services/scope-cache.js +72 -0
  42. package/dist/server/server/services/scope-service.js +424 -0
  43. package/dist/server/server/services/sprint-orchestrator.js +312 -0
  44. package/dist/server/server/services/sprint-service.js +293 -0
  45. package/dist/server/server/services/workflow-service.js +397 -0
  46. package/dist/server/server/utils/cc-hooks-parser.js +49 -0
  47. package/dist/server/server/utils/dispatch-utils.js +305 -0
  48. package/dist/server/server/utils/logger.js +86 -0
  49. package/dist/server/server/utils/terminal-launcher.js +388 -0
  50. package/dist/server/server/utils/worktree-manager.js +98 -0
  51. package/dist/server/server/watchers/event-watcher.js +81 -0
  52. package/dist/server/server/watchers/scope-watcher.js +33 -0
  53. package/dist/server/shared/api-types.js +5 -0
  54. package/dist/server/shared/default-workflow.json +616 -0
  55. package/dist/server/shared/workflow-config.js +44 -0
  56. package/dist/server/shared/workflow-engine.js +353 -0
  57. package/index.html +15 -0
  58. package/package.json +110 -0
  59. package/postcss.config.js +6 -0
  60. package/schemas/orbital.config.schema.json +83 -0
  61. package/scripts/postinstall.js +24 -0
  62. package/scripts/start.sh +20 -0
  63. package/server/adapters/index.ts +41 -0
  64. package/server/adapters/iterm2-adapter.ts +37 -0
  65. package/server/adapters/subprocess-adapter.ts +25 -0
  66. package/server/adapters/terminal-adapter.ts +24 -0
  67. package/server/config.ts +234 -0
  68. package/server/database.ts +107 -0
  69. package/server/index.ts +452 -0
  70. package/server/init.ts +891 -0
  71. package/server/parsers/event-parser.ts +74 -0
  72. package/server/parsers/scope-parser.ts +240 -0
  73. package/server/routes/config-routes.ts +182 -0
  74. package/server/routes/data-routes.ts +548 -0
  75. package/server/routes/dispatch-routes.ts +275 -0
  76. package/server/routes/git-routes.ts +112 -0
  77. package/server/routes/scope-routes.ts +262 -0
  78. package/server/routes/sprint-routes.ts +142 -0
  79. package/server/routes/version-routes.ts +156 -0
  80. package/server/routes/workflow-routes.ts +198 -0
  81. package/server/schema.ts +90 -0
  82. package/server/services/batch-orchestrator.ts +286 -0
  83. package/server/services/claude-session-service.ts +441 -0
  84. package/server/services/config-service.ts +151 -0
  85. package/server/services/deploy-service.ts +98 -0
  86. package/server/services/event-service.ts +98 -0
  87. package/server/services/gate-service.ts +126 -0
  88. package/server/services/git-service.ts +391 -0
  89. package/server/services/github-service.ts +183 -0
  90. package/server/services/readiness-service.ts +250 -0
  91. package/server/services/scope-cache.ts +81 -0
  92. package/server/services/scope-service.ts +476 -0
  93. package/server/services/sprint-orchestrator.ts +361 -0
  94. package/server/services/sprint-service.ts +415 -0
  95. package/server/services/workflow-service.ts +461 -0
  96. package/server/utils/cc-hooks-parser.ts +70 -0
  97. package/server/utils/dispatch-utils.ts +395 -0
  98. package/server/utils/logger.ts +109 -0
  99. package/server/utils/terminal-launcher.ts +462 -0
  100. package/server/utils/worktree-manager.ts +104 -0
  101. package/server/watchers/event-watcher.ts +100 -0
  102. package/server/watchers/scope-watcher.ts +38 -0
  103. package/shared/api-types.ts +20 -0
  104. package/shared/default-workflow.json +616 -0
  105. package/shared/workflow-config.ts +170 -0
  106. package/shared/workflow-engine.ts +427 -0
  107. package/src/App.tsx +33 -0
  108. package/src/components/AgentBadge.tsx +40 -0
  109. package/src/components/BatchPreflightModal.tsx +115 -0
  110. package/src/components/CardDisplayToggle.tsx +74 -0
  111. package/src/components/ColumnHeaderActions.tsx +55 -0
  112. package/src/components/ColumnMenu.tsx +99 -0
  113. package/src/components/DeployHistory.tsx +141 -0
  114. package/src/components/DispatchModal.tsx +164 -0
  115. package/src/components/DispatchPopover.tsx +139 -0
  116. package/src/components/DragOverlay.tsx +25 -0
  117. package/src/components/DriftSidebar.tsx +140 -0
  118. package/src/components/EnvironmentStrip.tsx +88 -0
  119. package/src/components/ErrorBoundary.tsx +62 -0
  120. package/src/components/FilterChip.tsx +105 -0
  121. package/src/components/GateIndicator.tsx +33 -0
  122. package/src/components/IdeaDetailModal.tsx +190 -0
  123. package/src/components/IdeaFormDialog.tsx +113 -0
  124. package/src/components/KanbanColumn.tsx +201 -0
  125. package/src/components/MarkdownRenderer.tsx +114 -0
  126. package/src/components/NeonGrid.tsx +128 -0
  127. package/src/components/PromotionQueue.tsx +89 -0
  128. package/src/components/ScopeCard.tsx +234 -0
  129. package/src/components/ScopeDetailModal.tsx +255 -0
  130. package/src/components/ScopeFilterBar.tsx +152 -0
  131. package/src/components/SearchInput.tsx +102 -0
  132. package/src/components/SessionPanel.tsx +335 -0
  133. package/src/components/SprintContainer.tsx +303 -0
  134. package/src/components/SprintDependencyDialog.tsx +78 -0
  135. package/src/components/SprintPreflightModal.tsx +138 -0
  136. package/src/components/StatusBar.tsx +168 -0
  137. package/src/components/SwimCell.tsx +67 -0
  138. package/src/components/SwimLaneRow.tsx +94 -0
  139. package/src/components/SwimlaneBoardView.tsx +108 -0
  140. package/src/components/VersionBadge.tsx +139 -0
  141. package/src/components/ViewModeSelector.tsx +114 -0
  142. package/src/components/config/AgentChip.tsx +53 -0
  143. package/src/components/config/AgentCreateDialog.tsx +321 -0
  144. package/src/components/config/AgentEditor.tsx +175 -0
  145. package/src/components/config/DirectoryTree.tsx +582 -0
  146. package/src/components/config/FileEditor.tsx +550 -0
  147. package/src/components/config/HookChip.tsx +50 -0
  148. package/src/components/config/StageCard.tsx +198 -0
  149. package/src/components/config/TransitionZone.tsx +173 -0
  150. package/src/components/config/UnifiedWorkflowPipeline.tsx +216 -0
  151. package/src/components/config/WorkflowPipeline.tsx +161 -0
  152. package/src/components/source-control/BranchList.tsx +93 -0
  153. package/src/components/source-control/BranchPanel.tsx +105 -0
  154. package/src/components/source-control/CommitLog.tsx +100 -0
  155. package/src/components/source-control/CommitRow.tsx +47 -0
  156. package/src/components/source-control/GitHubPanel.tsx +110 -0
  157. package/src/components/source-control/GitHubSetupGuide.tsx +52 -0
  158. package/src/components/source-control/GitOverviewBar.tsx +101 -0
  159. package/src/components/source-control/PullRequestList.tsx +69 -0
  160. package/src/components/source-control/WorktreeList.tsx +80 -0
  161. package/src/components/ui/badge.tsx +41 -0
  162. package/src/components/ui/button.tsx +55 -0
  163. package/src/components/ui/card.tsx +78 -0
  164. package/src/components/ui/dialog.tsx +94 -0
  165. package/src/components/ui/popover.tsx +33 -0
  166. package/src/components/ui/scroll-area.tsx +54 -0
  167. package/src/components/ui/separator.tsx +28 -0
  168. package/src/components/ui/tabs.tsx +52 -0
  169. package/src/components/ui/toggle-switch.tsx +35 -0
  170. package/src/components/ui/tooltip.tsx +27 -0
  171. package/src/components/workflow/AddEdgeDialog.tsx +217 -0
  172. package/src/components/workflow/AddListDialog.tsx +201 -0
  173. package/src/components/workflow/ChecklistEditor.tsx +239 -0
  174. package/src/components/workflow/CommandPrefixManager.tsx +118 -0
  175. package/src/components/workflow/ConfigSettingsPanel.tsx +189 -0
  176. package/src/components/workflow/DirectionSelector.tsx +133 -0
  177. package/src/components/workflow/DispatchConfigPanel.tsx +180 -0
  178. package/src/components/workflow/EdgeDetailPanel.tsx +236 -0
  179. package/src/components/workflow/EdgePropertyEditor.tsx +251 -0
  180. package/src/components/workflow/EditToolbar.tsx +138 -0
  181. package/src/components/workflow/HookDetailPanel.tsx +250 -0
  182. package/src/components/workflow/HookExecutionLog.tsx +24 -0
  183. package/src/components/workflow/HookSourceModal.tsx +129 -0
  184. package/src/components/workflow/HooksDashboard.tsx +363 -0
  185. package/src/components/workflow/ListPropertyEditor.tsx +251 -0
  186. package/src/components/workflow/MigrationPreviewDialog.tsx +237 -0
  187. package/src/components/workflow/MovementRulesPanel.tsx +188 -0
  188. package/src/components/workflow/NodeDetailPanel.tsx +245 -0
  189. package/src/components/workflow/PresetSelector.tsx +414 -0
  190. package/src/components/workflow/SkillCommandBuilder.tsx +174 -0
  191. package/src/components/workflow/WorkflowEdgeComponent.tsx +145 -0
  192. package/src/components/workflow/WorkflowNode.tsx +147 -0
  193. package/src/components/workflow/graphLayout.ts +186 -0
  194. package/src/components/workflow/mergeHooks.ts +85 -0
  195. package/src/components/workflow/useEditHistory.ts +88 -0
  196. package/src/components/workflow/useWorkflowEditor.ts +262 -0
  197. package/src/components/workflow/validateConfig.ts +70 -0
  198. package/src/hooks/useActiveDispatches.ts +198 -0
  199. package/src/hooks/useBoardSettings.ts +170 -0
  200. package/src/hooks/useCardDisplay.ts +57 -0
  201. package/src/hooks/useCcHooks.ts +24 -0
  202. package/src/hooks/useConfigTree.ts +51 -0
  203. package/src/hooks/useEnforcementRules.ts +46 -0
  204. package/src/hooks/useEvents.ts +59 -0
  205. package/src/hooks/useFileEditor.ts +165 -0
  206. package/src/hooks/useGates.ts +57 -0
  207. package/src/hooks/useIdeaActions.ts +53 -0
  208. package/src/hooks/useKanbanDnd.ts +410 -0
  209. package/src/hooks/useOrbitalConfig.ts +54 -0
  210. package/src/hooks/usePipeline.ts +47 -0
  211. package/src/hooks/usePipelineData.ts +338 -0
  212. package/src/hooks/useReconnect.ts +25 -0
  213. package/src/hooks/useScopeFilters.ts +125 -0
  214. package/src/hooks/useScopeSessions.ts +44 -0
  215. package/src/hooks/useScopes.ts +67 -0
  216. package/src/hooks/useSearch.ts +67 -0
  217. package/src/hooks/useSettings.tsx +187 -0
  218. package/src/hooks/useSocket.ts +25 -0
  219. package/src/hooks/useSourceControl.ts +105 -0
  220. package/src/hooks/useSprintPreflight.ts +55 -0
  221. package/src/hooks/useSprints.ts +154 -0
  222. package/src/hooks/useStatusBarHighlight.ts +18 -0
  223. package/src/hooks/useSwimlaneBoardSettings.ts +104 -0
  224. package/src/hooks/useTheme.ts +9 -0
  225. package/src/hooks/useTransitionReadiness.ts +53 -0
  226. package/src/hooks/useVersion.ts +155 -0
  227. package/src/hooks/useViolations.ts +65 -0
  228. package/src/hooks/useWorkflow.tsx +125 -0
  229. package/src/hooks/useZoomModifier.ts +19 -0
  230. package/src/index.css +797 -0
  231. package/src/layouts/DashboardLayout.tsx +113 -0
  232. package/src/lib/collisionDetection.ts +20 -0
  233. package/src/lib/scope-fields.ts +61 -0
  234. package/src/lib/swimlane.ts +146 -0
  235. package/src/lib/utils.ts +15 -0
  236. package/src/main.tsx +19 -0
  237. package/src/socket.ts +11 -0
  238. package/src/types/index.ts +497 -0
  239. package/src/views/AgentFeed.tsx +339 -0
  240. package/src/views/DeployPipeline.tsx +59 -0
  241. package/src/views/EnforcementView.tsx +378 -0
  242. package/src/views/PrimitivesConfig.tsx +500 -0
  243. package/src/views/QualityGates.tsx +1012 -0
  244. package/src/views/ScopeBoard.tsx +454 -0
  245. package/src/views/SessionTimeline.tsx +516 -0
  246. package/src/views/Settings.tsx +183 -0
  247. package/src/views/SourceControl.tsx +95 -0
  248. package/src/views/WorkflowVisualizer.tsx +382 -0
  249. package/tailwind.config.js +161 -0
  250. package/templates/agents/AUTO-INVOKE.md +180 -0
  251. package/templates/agents/CONFLICT-RESOLUTION.md +128 -0
  252. package/templates/agents/QUICK-REFERENCE.md +122 -0
  253. package/templates/agents/README.md +188 -0
  254. package/templates/agents/SKILL-TRIGGERS.md +100 -0
  255. package/templates/agents/blue-team/frontend-designer.md +424 -0
  256. package/templates/agents/green-team/architect.md +526 -0
  257. package/templates/agents/green-team/rules-enforcer.md +131 -0
  258. package/templates/agents/red-team/attacker-learned.md +24 -0
  259. package/templates/agents/red-team/attacker.md +486 -0
  260. package/templates/agents/red-team/chaos.md +548 -0
  261. package/templates/agents/reference/component-registry.md +82 -0
  262. package/templates/agents/workflows/full-mode.md +218 -0
  263. package/templates/agents/workflows/quick-mode.md +118 -0
  264. package/templates/agents/workflows/security-mode.md +283 -0
  265. package/templates/anti-patterns/dangerous-shortcuts.md +427 -0
  266. package/templates/config/agent-triggers.json +92 -0
  267. package/templates/hooks/agent-team-gate.sh +31 -0
  268. package/templates/hooks/agent-trigger.sh +97 -0
  269. package/templates/hooks/block-push.sh +66 -0
  270. package/templates/hooks/block-workarounds.sh +61 -0
  271. package/templates/hooks/blocker-check.sh +28 -0
  272. package/templates/hooks/completion-checklist.sh +28 -0
  273. package/templates/hooks/decision-capture.sh +15 -0
  274. package/templates/hooks/dependency-check.sh +27 -0
  275. package/templates/hooks/end-session.sh +31 -0
  276. package/templates/hooks/exploration-logger.sh +37 -0
  277. package/templates/hooks/files-changed-summary.sh +37 -0
  278. package/templates/hooks/get-session-id.sh +49 -0
  279. package/templates/hooks/git-commit-guard.sh +34 -0
  280. package/templates/hooks/init-session.sh +93 -0
  281. package/templates/hooks/orbital-emit.sh +79 -0
  282. package/templates/hooks/orbital-report-deploy.sh +78 -0
  283. package/templates/hooks/orbital-report-gates.sh +40 -0
  284. package/templates/hooks/orbital-report-violation.sh +36 -0
  285. package/templates/hooks/orbital-scope-update.sh +53 -0
  286. package/templates/hooks/phase-verify-reminder.sh +26 -0
  287. package/templates/hooks/review-gate-check.sh +82 -0
  288. package/templates/hooks/scope-commit-logger.sh +37 -0
  289. package/templates/hooks/scope-create-cleanup.sh +36 -0
  290. package/templates/hooks/scope-create-gate.sh +80 -0
  291. package/templates/hooks/scope-create-tracker.sh +17 -0
  292. package/templates/hooks/scope-file-sync.sh +53 -0
  293. package/templates/hooks/scope-gate.sh +35 -0
  294. package/templates/hooks/scope-helpers.sh +188 -0
  295. package/templates/hooks/scope-lifecycle-gate.sh +139 -0
  296. package/templates/hooks/scope-prepare.sh +244 -0
  297. package/templates/hooks/scope-transition.sh +172 -0
  298. package/templates/hooks/session-enforcer.sh +143 -0
  299. package/templates/hooks/time-tracker.sh +33 -0
  300. package/templates/lessons-learned.md +15 -0
  301. package/templates/orbital.config.json +35 -0
  302. package/templates/presets/development.json +42 -0
  303. package/templates/presets/gitflow.json +712 -0
  304. package/templates/presets/minimal.json +23 -0
  305. package/templates/quick/rules.md +218 -0
  306. package/templates/scopes/_template.md +255 -0
  307. package/templates/settings-hooks.json +98 -0
  308. package/templates/skills/git-commit/SKILL.md +85 -0
  309. package/templates/skills/git-dev/SKILL.md +99 -0
  310. package/templates/skills/git-hotfix/SKILL.md +223 -0
  311. package/templates/skills/git-main/SKILL.md +84 -0
  312. package/templates/skills/git-production/SKILL.md +165 -0
  313. package/templates/skills/git-staging/SKILL.md +112 -0
  314. package/templates/skills/scope-create/SKILL.md +81 -0
  315. package/templates/skills/scope-fix-review/SKILL.md +168 -0
  316. package/templates/skills/scope-implement/SKILL.md +110 -0
  317. package/templates/skills/scope-post-review/SKILL.md +144 -0
  318. package/templates/skills/scope-pre-review/SKILL.md +211 -0
  319. package/templates/skills/scope-verify/SKILL.md +201 -0
  320. package/templates/skills/session-init/SKILL.md +62 -0
  321. package/templates/skills/session-resume/SKILL.md +201 -0
  322. package/templates/skills/test-checks/SKILL.md +171 -0
  323. package/templates/skills/test-code-review/SKILL.md +252 -0
  324. package/tsconfig.json +25 -0
  325. package/vite.config.ts +38 -0
@@ -0,0 +1,616 @@
1
+ {
2
+ "version": 1,
3
+ "name": "Default Workflow",
4
+ "branchingMode": "trunk",
5
+ "description": "7-list trunk-based workflow with direct push to main",
6
+ "lists": [
7
+ {
8
+ "id": "icebox",
9
+ "label": "Icebox",
10
+ "order": 0,
11
+ "group": "planning",
12
+ "color": "187 72% 43%",
13
+ "hex": "#1faabd",
14
+ "isEntryPoint": true,
15
+ "hasDirectory": true
16
+ },
17
+ {
18
+ "id": "planning",
19
+ "label": "Planning",
20
+ "order": 1,
21
+ "group": "planning",
22
+ "color": "231 99% 66%",
23
+ "hex": "#526cfe",
24
+ "hasDirectory": true,
25
+ "sessionKey": "createScope"
26
+ },
27
+ {
28
+ "id": "backlog",
29
+ "label": "Backlog",
30
+ "order": 2,
31
+ "group": "planning",
32
+ "color": "330 81% 60%",
33
+ "hex": "#ec4899",
34
+ "supportsSprint": true,
35
+ "hasDirectory": true,
36
+ "sessionKey": "reviewScope"
37
+ },
38
+ {
39
+ "id": "implementing",
40
+ "label": "Implementing",
41
+ "order": 3,
42
+ "group": "development",
43
+ "color": "0 84% 60%",
44
+ "hex": "#ef4444",
45
+ "hasDirectory": true,
46
+ "sessionKey": "implementScope"
47
+ },
48
+ {
49
+ "id": "review",
50
+ "label": "Review",
51
+ "order": 4,
52
+ "group": "development",
53
+ "color": "45 93% 58%",
54
+ "hex": "#eab308",
55
+ "supportsBatch": true,
56
+ "hasDirectory": true,
57
+ "sessionKey": "reviewGate"
58
+ },
59
+ {
60
+ "id": "completed",
61
+ "label": "Completed",
62
+ "order": 5,
63
+ "group": "development",
64
+ "color": "175 70% 42%",
65
+ "hex": "#20b6aa",
66
+ "supportsBatch": true,
67
+ "hasDirectory": true,
68
+ "sessionKey": "commit"
69
+ },
70
+ {
71
+ "id": "main",
72
+ "label": "Main",
73
+ "order": 6,
74
+ "group": "main",
75
+ "color": "153 100% 39%",
76
+ "hex": "#00c76d",
77
+ "hasDirectory": true,
78
+ "gitBranch": "main",
79
+ "sessionKey": "pushToMain"
80
+ }
81
+ ],
82
+ "edges": [
83
+ {
84
+ "from": "icebox",
85
+ "to": "planning",
86
+ "direction": "forward",
87
+ "command": "/scope-create {id}",
88
+ "confirmLevel": "quick",
89
+ "label": "Create Scope",
90
+ "description": "Launches /scope-create with idea context pre-filled.",
91
+ "dispatchOnly": false,
92
+ "hooks": ["session-enforcer", "scope-create-gate", "blocker-check", "dependency-check", "scope-transition", "orbital-scope-update"]
93
+ },
94
+ {
95
+ "from": "planning",
96
+ "to": "backlog",
97
+ "direction": "forward",
98
+ "command": "/scope-pre-review {id}",
99
+ "confirmLevel": "quick",
100
+ "label": "Team Review",
101
+ "description": "Runs full agent team review, locks spec, moves to backlog.",
102
+ "dispatchOnly": true,
103
+ "hooks": ["session-enforcer", "blocker-check", "dependency-check", "scope-transition", "orbital-scope-update"]
104
+ },
105
+ {
106
+ "from": "planning",
107
+ "to": "implementing",
108
+ "direction": "shortcut",
109
+ "command": "/scope-implement {id}",
110
+ "confirmLevel": "full",
111
+ "checklist": [
112
+ "Scope is small and well-understood",
113
+ "Spec is complete — no open questions",
114
+ "No cross-scope dependencies to resolve first"
115
+ ],
116
+ "label": "Fast Track",
117
+ "description": "Skips team review and starts implementing directly.",
118
+ "dispatchOnly": false,
119
+ "humanOnly": true,
120
+ "hooks": ["session-enforcer", "blocker-check", "dependency-check", "scope-transition", "orbital-scope-update"]
121
+ },
122
+ {
123
+ "from": "backlog",
124
+ "to": "implementing",
125
+ "direction": "forward",
126
+ "command": "/scope-implement {id}",
127
+ "confirmLevel": "quick",
128
+ "label": "Start Implementing",
129
+ "description": "Opens a Claude session running /scope-implement.",
130
+ "dispatchOnly": true,
131
+ "hooks": ["session-enforcer", "blocker-check", "dependency-check", "scope-transition", "orbital-scope-update"]
132
+ },
133
+ {
134
+ "from": "implementing",
135
+ "to": "review",
136
+ "direction": "forward",
137
+ "command": "/scope-post-review {id}",
138
+ "confirmLevel": "quick",
139
+ "label": "Launch Post-Review",
140
+ "description": "Runs quality gates, formal verification, and code review.",
141
+ "dispatchOnly": true,
142
+ "hooks": ["session-enforcer", "review-gate-check", "blocker-check", "dependency-check", "scope-transition", "orbital-scope-update"]
143
+ },
144
+ {
145
+ "from": "implementing",
146
+ "to": "completed",
147
+ "direction": "shortcut",
148
+ "command": null,
149
+ "confirmLevel": "full",
150
+ "checklist": [
151
+ "Change is small and self-contained",
152
+ "I have manually verified this change works",
153
+ "No review verdict needed for this scope"
154
+ ],
155
+ "label": "Skip Review",
156
+ "description": "Moves directly to completed without running the review gate.",
157
+ "dispatchOnly": false,
158
+ "humanOnly": true,
159
+ "hooks": ["session-enforcer", "completion-checklist", "blocker-check", "dependency-check", "scope-transition", "orbital-scope-update"]
160
+ },
161
+ {
162
+ "from": "implementing",
163
+ "to": "backlog",
164
+ "direction": "backward",
165
+ "command": null,
166
+ "confirmLevel": "quick",
167
+ "label": "Back to Backlog",
168
+ "description": "Returns this scope to the backlog. Use when implementation was not started or session failed.",
169
+ "dispatchOnly": false,
170
+ "humanOnly": true,
171
+ "hooks": ["session-enforcer", "scope-transition", "orbital-scope-update"]
172
+ },
173
+ {
174
+ "from": "review",
175
+ "to": "completed",
176
+ "direction": "forward",
177
+ "command": "/git-commit",
178
+ "confirmLevel": "quick",
179
+ "label": "Commit",
180
+ "description": "Commits scope work.",
181
+ "dispatchOnly": true,
182
+ "hooks": ["session-enforcer", "completion-checklist", "blocker-check", "dependency-check", "scope-transition", "orbital-scope-update", "scope-commit-logger"]
183
+ },
184
+ {
185
+ "from": "completed",
186
+ "to": "main",
187
+ "direction": "forward",
188
+ "command": "/git-main",
189
+ "confirmLevel": "quick",
190
+ "label": "Push to Main",
191
+ "description": "Pushes or PRs scope work to the main branch.",
192
+ "dispatchOnly": true,
193
+ "hooks": ["session-enforcer", "blocker-check", "dependency-check", "scope-transition", "orbital-scope-update", "scope-commit-logger"]
194
+ },
195
+ {
196
+ "from": "review",
197
+ "to": "implementing",
198
+ "direction": "backward",
199
+ "command": "/scope-implement {id}",
200
+ "confirmLevel": "quick",
201
+ "label": "Back to Implementing",
202
+ "description": "Re-opens implementation to address review findings.",
203
+ "dispatchOnly": true,
204
+ "hooks": ["session-enforcer", "scope-transition", "orbital-scope-update"]
205
+ },
206
+ {
207
+ "from": "completed",
208
+ "to": "implementing",
209
+ "direction": "backward",
210
+ "command": "/scope-implement {id}",
211
+ "confirmLevel": "quick",
212
+ "label": "Back to Implementing",
213
+ "description": "Re-opens implementation to fix issues found after commit.",
214
+ "dispatchOnly": true,
215
+ "hooks": ["session-enforcer", "scope-transition", "orbital-scope-update"]
216
+ },
217
+ {
218
+ "from": "main",
219
+ "to": "implementing",
220
+ "direction": "backward",
221
+ "command": "/scope-implement {id}",
222
+ "confirmLevel": "quick",
223
+ "label": "Back to Implementing",
224
+ "description": "Re-opens implementation to fix issues found after push to main.",
225
+ "dispatchOnly": true,
226
+ "hooks": ["session-enforcer", "scope-transition", "orbital-scope-update"]
227
+ },
228
+ {
229
+ "from": "planning",
230
+ "to": "icebox",
231
+ "direction": "backward",
232
+ "command": null,
233
+ "confirmLevel": "quick",
234
+ "label": "Demote to Idea",
235
+ "description": "Sends this scope back to the icebox as an idea.",
236
+ "dispatchOnly": false,
237
+ "humanOnly": true,
238
+ "hooks": ["session-enforcer", "scope-transition", "orbital-scope-update"]
239
+ },
240
+ {
241
+ "from": "backlog",
242
+ "to": "planning",
243
+ "direction": "backward",
244
+ "command": null,
245
+ "confirmLevel": "quick",
246
+ "label": "Revert to Planning",
247
+ "description": "Sends this scope back for more planning. Unlocks spec.",
248
+ "dispatchOnly": false,
249
+ "humanOnly": true,
250
+ "hooks": ["session-enforcer", "scope-transition", "orbital-scope-update"]
251
+ }
252
+ ],
253
+ "hooks": [
254
+ {
255
+ "id": "session-enforcer",
256
+ "label": "Session Authorization",
257
+ "timing": "before",
258
+ "type": "shell",
259
+ "target": ".claude/hooks/session-enforcer.sh",
260
+ "blocking": true,
261
+ "description": "Blocks unauthorized status transitions without a valid session",
262
+ "category": "guard"
263
+ },
264
+ {
265
+ "id": "completion-checklist",
266
+ "label": "Completion Checklist",
267
+ "timing": "before",
268
+ "type": "shell",
269
+ "target": ".claude/hooks/completion-checklist.sh",
270
+ "blocking": true,
271
+ "description": "Blocks completion if DoD items are unchecked",
272
+ "category": "guard"
273
+ },
274
+ {
275
+ "id": "review-gate-check",
276
+ "label": "Review Verdict Check",
277
+ "timing": "before",
278
+ "type": "shell",
279
+ "target": ".claude/hooks/review-gate-check.sh",
280
+ "blocking": false,
281
+ "description": "Warns if review verdict file is missing",
282
+ "category": "gate"
283
+ },
284
+ {
285
+ "id": "blocker-check",
286
+ "label": "Blocker Check",
287
+ "timing": "before",
288
+ "type": "shell",
289
+ "target": ".claude/hooks/blocker-check.sh",
290
+ "blocking": false,
291
+ "description": "Warns if unresolved blockers exist on the scope",
292
+ "category": "gate"
293
+ },
294
+ {
295
+ "id": "dependency-check",
296
+ "label": "Dependency Check",
297
+ "timing": "before",
298
+ "type": "shell",
299
+ "target": ".claude/hooks/dependency-check.sh",
300
+ "blocking": false,
301
+ "description": "Warns if cross-scope dependencies are unresolved",
302
+ "category": "gate"
303
+ },
304
+ {
305
+ "id": "scope-create-gate",
306
+ "label": "Scope Creation Gate",
307
+ "timing": "before",
308
+ "type": "shell",
309
+ "target": ".claude/hooks/scope-create-gate.sh",
310
+ "blocking": false,
311
+ "description": "Validates new scope structure before creation",
312
+ "category": "gate"
313
+ },
314
+ {
315
+ "id": "scope-transition",
316
+ "label": "Scope File Mover",
317
+ "timing": "before",
318
+ "type": "shell",
319
+ "target": ".claude/hooks/scope-transition.sh",
320
+ "blocking": false,
321
+ "description": "Moves scope files between directories and updates frontmatter",
322
+ "category": "lifecycle"
323
+ },
324
+ {
325
+ "id": "orbital-scope-update",
326
+ "label": "Dashboard Sync",
327
+ "timing": "after",
328
+ "type": "shell",
329
+ "target": ".claude/hooks/orbital-scope-update.sh",
330
+ "blocking": false,
331
+ "description": "Pushes status updates to the Orbital Command dashboard",
332
+ "category": "observer"
333
+ },
334
+ {
335
+ "id": "scope-commit-logger",
336
+ "label": "Commit Logger",
337
+ "timing": "after",
338
+ "type": "shell",
339
+ "target": ".claude/hooks/scope-commit-logger.sh",
340
+ "blocking": false,
341
+ "description": "Logs git commits that mention scope IDs",
342
+ "category": "observer"
343
+ },
344
+ {
345
+ "id": "scope-gate",
346
+ "label": "Scope Document Gate",
347
+ "timing": "after",
348
+ "type": "shell",
349
+ "target": ".claude/hooks/scope-gate.sh",
350
+ "blocking": false,
351
+ "description": "Triggers scope document creation after plan approval",
352
+ "category": "gate"
353
+ },
354
+ {
355
+ "id": "scope-lifecycle-gate",
356
+ "label": "Scope Lifecycle Gate",
357
+ "timing": "before",
358
+ "type": "shell",
359
+ "target": ".claude/hooks/scope-lifecycle-gate.sh",
360
+ "blocking": false,
361
+ "description": "Records session UUIDs on scopes before git operations",
362
+ "category": "gate"
363
+ },
364
+ {
365
+ "id": "scope-file-sync",
366
+ "label": "Scope File Sync",
367
+ "timing": "before",
368
+ "type": "shell",
369
+ "target": ".claude/hooks/scope-file-sync.sh",
370
+ "blocking": false,
371
+ "description": "Flags out-of-scope files before git commits",
372
+ "category": "gate"
373
+ },
374
+ {
375
+ "id": "init-session",
376
+ "label": "Session Init",
377
+ "timing": "after",
378
+ "type": "shell",
379
+ "target": ".claude/hooks/init-session.sh",
380
+ "blocking": false,
381
+ "description": "Caches session ID for parallel-safe lookup at session start",
382
+ "category": "lifecycle"
383
+ },
384
+ {
385
+ "id": "end-session",
386
+ "label": "Session End",
387
+ "timing": "after",
388
+ "type": "shell",
389
+ "target": ".claude/hooks/end-session.sh",
390
+ "blocking": false,
391
+ "description": "Emits SESSION_END event when Claude session exits",
392
+ "category": "lifecycle"
393
+ },
394
+ {
395
+ "id": "scope-create-cleanup",
396
+ "label": "Scope Create Cleanup",
397
+ "timing": "after",
398
+ "type": "shell",
399
+ "target": ".claude/hooks/scope-create-cleanup.sh",
400
+ "blocking": false,
401
+ "description": "Removes scope-create session marker after scope document written",
402
+ "category": "lifecycle"
403
+ },
404
+ {
405
+ "id": "get-session-id",
406
+ "label": "Get Session ID",
407
+ "timing": "before",
408
+ "type": "shell",
409
+ "target": ".claude/hooks/get-session-id.sh",
410
+ "blocking": false,
411
+ "description": "Reads cached session UUID from process tree",
412
+ "category": "lifecycle"
413
+ },
414
+ {
415
+ "id": "orbital-emit",
416
+ "label": "Orbital Event Emitter",
417
+ "timing": "after",
418
+ "type": "shell",
419
+ "target": ".claude/hooks/orbital-emit.sh",
420
+ "blocking": false,
421
+ "description": "Emits events to Orbital dashboard via file-based bus",
422
+ "category": "lifecycle"
423
+ },
424
+ {
425
+ "id": "scope-helpers",
426
+ "label": "Scope Helpers",
427
+ "timing": "before",
428
+ "type": "shell",
429
+ "target": ".claude/hooks/scope-helpers.sh",
430
+ "blocking": false,
431
+ "description": "Shared utility functions for scope lifecycle hooks",
432
+ "category": "lifecycle"
433
+ },
434
+ {
435
+ "id": "decision-capture",
436
+ "label": "Decision Capture",
437
+ "timing": "after",
438
+ "type": "shell",
439
+ "target": ".claude/hooks/decision-capture.sh",
440
+ "blocking": false,
441
+ "description": "Nudges user to log decisions after asking questions",
442
+ "category": "observer"
443
+ },
444
+ {
445
+ "id": "exploration-logger",
446
+ "label": "Exploration Logger",
447
+ "timing": "after",
448
+ "type": "shell",
449
+ "target": ".claude/hooks/exploration-logger.sh",
450
+ "blocking": false,
451
+ "description": "Tracks search operations and nudges to log findings",
452
+ "category": "observer"
453
+ },
454
+ {
455
+ "id": "files-changed-summary",
456
+ "label": "Files Changed Summary",
457
+ "timing": "before",
458
+ "type": "shell",
459
+ "target": ".claude/hooks/files-changed-summary.sh",
460
+ "blocking": false,
461
+ "description": "Shows planned vs actual files changed before scope completion",
462
+ "category": "observer"
463
+ },
464
+ {
465
+ "id": "phase-verify-reminder",
466
+ "label": "Phase Verify Reminder",
467
+ "timing": "before",
468
+ "type": "shell",
469
+ "target": ".claude/hooks/phase-verify-reminder.sh",
470
+ "blocking": false,
471
+ "description": "Reminds to verify before marking a phase as done",
472
+ "category": "observer"
473
+ },
474
+ {
475
+ "id": "scope-create-tracker",
476
+ "label": "Scope Create Tracker",
477
+ "timing": "after",
478
+ "type": "shell",
479
+ "target": ".claude/hooks/scope-create-tracker.sh",
480
+ "blocking": false,
481
+ "description": "Tracks when scope create skill is invoked in a session",
482
+ "category": "observer"
483
+ },
484
+ {
485
+ "id": "orbital-report-gates",
486
+ "label": "Report Gates",
487
+ "timing": "after",
488
+ "type": "shell",
489
+ "target": ".claude/hooks/orbital-report-gates.sh",
490
+ "blocking": false,
491
+ "description": "Reports quality gate results to Orbital dashboard",
492
+ "category": "observer"
493
+ },
494
+ {
495
+ "id": "orbital-report-deploy",
496
+ "label": "Report Deploy",
497
+ "timing": "after",
498
+ "type": "shell",
499
+ "target": ".claude/hooks/orbital-report-deploy.sh",
500
+ "blocking": false,
501
+ "description": "Reports deployment events to Orbital dashboard",
502
+ "category": "observer"
503
+ },
504
+ {
505
+ "id": "orbital-report-violation",
506
+ "label": "Report Violation",
507
+ "timing": "after",
508
+ "type": "shell",
509
+ "target": ".claude/hooks/orbital-report-violation.sh",
510
+ "blocking": false,
511
+ "description": "Emits enforcement violation events to Orbital dashboard",
512
+ "category": "observer"
513
+ },
514
+ {
515
+ "id": "agent-trigger",
516
+ "label": "Agent Trigger",
517
+ "timing": "before",
518
+ "type": "shell",
519
+ "target": ".claude/hooks/agent-trigger.sh",
520
+ "blocking": false,
521
+ "description": "Auto-invokes agent review when editing sensitive files",
522
+ "category": "observer"
523
+ },
524
+ {
525
+ "id": "time-tracker",
526
+ "label": "Time Tracker",
527
+ "timing": "after",
528
+ "type": "shell",
529
+ "target": ".claude/hooks/time-tracker.sh",
530
+ "blocking": false,
531
+ "description": "Emits scope status transition events for time tracking",
532
+ "category": "observer"
533
+ }
534
+ ],
535
+ "groups": [
536
+ { "id": "planning", "label": "Planning", "order": 0 },
537
+ { "id": "development", "label": "Development", "order": 1 },
538
+ { "id": "main", "label": "Main", "order": 2 }
539
+ ],
540
+ "eventInference": [
541
+ {
542
+ "eventType": "SCOPE_STATUS_CHANGED",
543
+ "targetStatus": "",
544
+ "dataField": "to",
545
+ "forwardOnly": true
546
+ },
547
+ {
548
+ "eventType": "AGENT_STARTED",
549
+ "targetStatus": "implementing",
550
+ "forwardOnly": true
551
+ },
552
+ {
553
+ "eventType": "AGENT_STARTED",
554
+ "targetStatus": "review",
555
+ "conditions": { "mode": "review" },
556
+ "forwardOnly": true
557
+ },
558
+ {
559
+ "eventType": "AGENT_COMPLETED",
560
+ "targetStatus": "implementing",
561
+ "forwardOnly": true
562
+ },
563
+ {
564
+ "eventType": "AGENT_COMPLETED",
565
+ "targetStatus": "",
566
+ "conditions": {
567
+ "outcome": ["success", "failure", "committed"],
568
+ "dispatchResolution": true
569
+ },
570
+ "forwardOnly": false
571
+ },
572
+ {
573
+ "eventType": "AGENT_CONSENSUS",
574
+ "targetStatus": "implementing",
575
+ "forwardOnly": true
576
+ },
577
+ {
578
+ "eventType": "GATE_STARTED",
579
+ "targetStatus": "review",
580
+ "forwardOnly": true
581
+ },
582
+ {
583
+ "eventType": "GATE_PASSED",
584
+ "targetStatus": "review",
585
+ "forwardOnly": true
586
+ },
587
+ {
588
+ "eventType": "GATE_FAILED",
589
+ "targetStatus": "review",
590
+ "forwardOnly": true
591
+ },
592
+ {
593
+ "eventType": "ALL_GATES_PASSED",
594
+ "targetStatus": "review",
595
+ "forwardOnly": true
596
+ },
597
+ {
598
+ "eventType": "PR_CREATED",
599
+ "targetStatus": "review",
600
+ "forwardOnly": true
601
+ },
602
+ {
603
+ "eventType": "PR_MERGED",
604
+ "targetStatus": "review",
605
+ "forwardOnly": true
606
+ },
607
+ {
608
+ "eventType": "SCOPE_COMPLETED",
609
+ "targetStatus": "completed",
610
+ "forwardOnly": true
611
+ }
612
+ ],
613
+ "allowedCommandPrefixes": ["/scope-", "/git-", "/test-", "/session-"],
614
+ "terminalStatuses": ["main"],
615
+ "commitBranchPatterns": "^(main|feat/|fix/|scope/|chore/)"
616
+ }
@@ -0,0 +1,44 @@
1
+ // --- Type Aliases ---
2
+ // --- Type Guards ---
3
+ export function isWorkflowConfig(obj) {
4
+ if (typeof obj !== 'object' || obj === null)
5
+ return false;
6
+ const o = obj;
7
+ return (o.version === 1 &&
8
+ typeof o.name === 'string' &&
9
+ Array.isArray(o.lists) &&
10
+ Array.isArray(o.edges) &&
11
+ o.lists.every(isWorkflowList) &&
12
+ o.edges.every(isWorkflowEdge) &&
13
+ (o.branchingMode === undefined || o.branchingMode === 'trunk' || o.branchingMode === 'worktree'));
14
+ }
15
+ export function isWorkflowList(obj) {
16
+ if (typeof obj !== 'object' || obj === null)
17
+ return false;
18
+ const o = obj;
19
+ return (typeof o.id === 'string' &&
20
+ typeof o.label === 'string' &&
21
+ typeof o.order === 'number' &&
22
+ typeof o.color === 'string' &&
23
+ typeof o.hex === 'string' &&
24
+ typeof o.hasDirectory === 'boolean');
25
+ }
26
+ const CATEGORY_TO_ENFORCEMENT = {
27
+ guard: 'blocker',
28
+ gate: 'advisor',
29
+ lifecycle: 'operator',
30
+ observer: 'silent',
31
+ };
32
+ export function getHookEnforcement(hook) {
33
+ return CATEGORY_TO_ENFORCEMENT[hook.category];
34
+ }
35
+ export function isWorkflowEdge(obj) {
36
+ if (typeof obj !== 'object' || obj === null)
37
+ return false;
38
+ const o = obj;
39
+ return (typeof o.from === 'string' &&
40
+ typeof o.to === 'string' &&
41
+ typeof o.direction === 'string' &&
42
+ typeof o.label === 'string' &&
43
+ typeof o.description === 'string');
44
+ }