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,38 @@
1
+ import chokidar, { type FSWatcher } from 'chokidar';
2
+ import path from 'path';
3
+ import type { ScopeService } from '../services/scope-service.js';
4
+ import { createLogger } from '../utils/logger.js';
5
+
6
+ const log = createLogger('scope');
7
+
8
+ export function startScopeWatcher(
9
+ scopesDir: string,
10
+ scopeService: ScopeService
11
+ ): FSWatcher {
12
+ const watcher = chokidar.watch(scopesDir, {
13
+ ignored: [/(^|[/\\])\../, /node_modules/, /_template\.md$/],
14
+ persistent: true,
15
+ ignoreInitial: true,
16
+ depth: 2, // scopes/completed/*.md
17
+ });
18
+
19
+ watcher
20
+ .on('add', (filePath: string) => {
21
+ if (!filePath.endsWith('.md') || scopeService.isSuppressed(filePath)) return;
22
+ log.info('Scope added', { file: path.basename(filePath) });
23
+ scopeService.updateFromFile(filePath);
24
+ })
25
+ .on('change', (filePath: string) => {
26
+ if (!filePath.endsWith('.md') || scopeService.isSuppressed(filePath)) return;
27
+ log.debug('Scope changed', { file: path.basename(filePath) });
28
+ scopeService.updateFromFile(filePath);
29
+ })
30
+ .on('unlink', (filePath: string) => {
31
+ if (!filePath.endsWith('.md') || scopeService.isSuppressed(filePath)) return;
32
+ log.info('Scope removed', { file: path.basename(filePath) });
33
+ scopeService.removeByFilePath(filePath);
34
+ })
35
+ .on('error', (err: unknown) => log.error('Scope watcher error', { error: String(err) }));
36
+
37
+ return watcher;
38
+ }
@@ -0,0 +1,20 @@
1
+ // ─── Shared API Types ────────────────────────────────────────
2
+ //
3
+ // Types shared between server and client. Single source of truth for
4
+ // enums/unions that were previously duplicated across layers.
5
+
6
+ export type SprintStatus = 'assembling' | 'dispatched' | 'in_progress' | 'completed' | 'failed' | 'cancelled';
7
+ export type SprintScopeStatus = 'pending' | 'queued' | 'dispatched' | 'in_progress' | 'completed' | 'failed' | 'skipped';
8
+ export type GroupType = 'sprint' | 'batch';
9
+
10
+ export type GateStatus = 'pass' | 'fail' | 'running' | 'skipped';
11
+
12
+ export type DeployStatus = 'deploying' | 'healthy' | 'failed' | 'rolled-back';
13
+ export type DeployEnvironment = 'staging' | 'production';
14
+
15
+ export interface AgentConfig {
16
+ id: string;
17
+ label: string;
18
+ emoji: string;
19
+ color: string;
20
+ }
@@ -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
+ }