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.
- package/LICENSE +21 -0
- package/README.md +396 -0
- package/bin/orbital.js +362 -0
- package/dist/assets/WorkflowVisualizer-BZ21PIIF.js +84 -0
- package/dist/assets/WorkflowVisualizer-BZV40eAE.css +1 -0
- package/dist/assets/charts-D__PA1zp.js +72 -0
- package/dist/assets/index-D1G6i0nS.css +1 -0
- package/dist/assets/index-DpItvKpf.js +419 -0
- package/dist/assets/ui-BvF022GT.js +53 -0
- package/dist/assets/vendor-Dzv9lrRc.js +59 -0
- package/dist/index.html +19 -0
- package/dist/scanner-sweep.png +0 -0
- package/dist/server/server/adapters/index.js +34 -0
- package/dist/server/server/adapters/iterm2-adapter.js +29 -0
- package/dist/server/server/adapters/subprocess-adapter.js +21 -0
- package/dist/server/server/adapters/terminal-adapter.js +1 -0
- package/dist/server/server/config.js +156 -0
- package/dist/server/server/database.js +90 -0
- package/dist/server/server/index.js +372 -0
- package/dist/server/server/init.js +811 -0
- package/dist/server/server/parsers/event-parser.js +64 -0
- package/dist/server/server/parsers/scope-parser.js +188 -0
- package/dist/server/server/routes/config-routes.js +163 -0
- package/dist/server/server/routes/data-routes.js +461 -0
- package/dist/server/server/routes/dispatch-routes.js +215 -0
- package/dist/server/server/routes/git-routes.js +92 -0
- package/dist/server/server/routes/scope-routes.js +215 -0
- package/dist/server/server/routes/sprint-routes.js +116 -0
- package/dist/server/server/routes/version-routes.js +130 -0
- package/dist/server/server/routes/workflow-routes.js +185 -0
- package/dist/server/server/schema.js +90 -0
- package/dist/server/server/services/batch-orchestrator.js +253 -0
- package/dist/server/server/services/claude-session-service.js +352 -0
- package/dist/server/server/services/config-service.js +132 -0
- package/dist/server/server/services/deploy-service.js +51 -0
- package/dist/server/server/services/event-service.js +63 -0
- package/dist/server/server/services/gate-service.js +83 -0
- package/dist/server/server/services/git-service.js +309 -0
- package/dist/server/server/services/github-service.js +145 -0
- package/dist/server/server/services/readiness-service.js +184 -0
- package/dist/server/server/services/scope-cache.js +72 -0
- package/dist/server/server/services/scope-service.js +424 -0
- package/dist/server/server/services/sprint-orchestrator.js +312 -0
- package/dist/server/server/services/sprint-service.js +293 -0
- package/dist/server/server/services/workflow-service.js +397 -0
- package/dist/server/server/utils/cc-hooks-parser.js +49 -0
- package/dist/server/server/utils/dispatch-utils.js +305 -0
- package/dist/server/server/utils/logger.js +86 -0
- package/dist/server/server/utils/terminal-launcher.js +388 -0
- package/dist/server/server/utils/worktree-manager.js +98 -0
- package/dist/server/server/watchers/event-watcher.js +81 -0
- package/dist/server/server/watchers/scope-watcher.js +33 -0
- package/dist/server/shared/api-types.js +5 -0
- package/dist/server/shared/default-workflow.json +616 -0
- package/dist/server/shared/workflow-config.js +44 -0
- package/dist/server/shared/workflow-engine.js +353 -0
- package/index.html +15 -0
- package/package.json +110 -0
- package/postcss.config.js +6 -0
- package/schemas/orbital.config.schema.json +83 -0
- package/scripts/postinstall.js +24 -0
- package/scripts/start.sh +20 -0
- package/server/adapters/index.ts +41 -0
- package/server/adapters/iterm2-adapter.ts +37 -0
- package/server/adapters/subprocess-adapter.ts +25 -0
- package/server/adapters/terminal-adapter.ts +24 -0
- package/server/config.ts +234 -0
- package/server/database.ts +107 -0
- package/server/index.ts +452 -0
- package/server/init.ts +891 -0
- package/server/parsers/event-parser.ts +74 -0
- package/server/parsers/scope-parser.ts +240 -0
- package/server/routes/config-routes.ts +182 -0
- package/server/routes/data-routes.ts +548 -0
- package/server/routes/dispatch-routes.ts +275 -0
- package/server/routes/git-routes.ts +112 -0
- package/server/routes/scope-routes.ts +262 -0
- package/server/routes/sprint-routes.ts +142 -0
- package/server/routes/version-routes.ts +156 -0
- package/server/routes/workflow-routes.ts +198 -0
- package/server/schema.ts +90 -0
- package/server/services/batch-orchestrator.ts +286 -0
- package/server/services/claude-session-service.ts +441 -0
- package/server/services/config-service.ts +151 -0
- package/server/services/deploy-service.ts +98 -0
- package/server/services/event-service.ts +98 -0
- package/server/services/gate-service.ts +126 -0
- package/server/services/git-service.ts +391 -0
- package/server/services/github-service.ts +183 -0
- package/server/services/readiness-service.ts +250 -0
- package/server/services/scope-cache.ts +81 -0
- package/server/services/scope-service.ts +476 -0
- package/server/services/sprint-orchestrator.ts +361 -0
- package/server/services/sprint-service.ts +415 -0
- package/server/services/workflow-service.ts +461 -0
- package/server/utils/cc-hooks-parser.ts +70 -0
- package/server/utils/dispatch-utils.ts +395 -0
- package/server/utils/logger.ts +109 -0
- package/server/utils/terminal-launcher.ts +462 -0
- package/server/utils/worktree-manager.ts +104 -0
- package/server/watchers/event-watcher.ts +100 -0
- package/server/watchers/scope-watcher.ts +38 -0
- package/shared/api-types.ts +20 -0
- package/shared/default-workflow.json +616 -0
- package/shared/workflow-config.ts +170 -0
- package/shared/workflow-engine.ts +427 -0
- package/src/App.tsx +33 -0
- package/src/components/AgentBadge.tsx +40 -0
- package/src/components/BatchPreflightModal.tsx +115 -0
- package/src/components/CardDisplayToggle.tsx +74 -0
- package/src/components/ColumnHeaderActions.tsx +55 -0
- package/src/components/ColumnMenu.tsx +99 -0
- package/src/components/DeployHistory.tsx +141 -0
- package/src/components/DispatchModal.tsx +164 -0
- package/src/components/DispatchPopover.tsx +139 -0
- package/src/components/DragOverlay.tsx +25 -0
- package/src/components/DriftSidebar.tsx +140 -0
- package/src/components/EnvironmentStrip.tsx +88 -0
- package/src/components/ErrorBoundary.tsx +62 -0
- package/src/components/FilterChip.tsx +105 -0
- package/src/components/GateIndicator.tsx +33 -0
- package/src/components/IdeaDetailModal.tsx +190 -0
- package/src/components/IdeaFormDialog.tsx +113 -0
- package/src/components/KanbanColumn.tsx +201 -0
- package/src/components/MarkdownRenderer.tsx +114 -0
- package/src/components/NeonGrid.tsx +128 -0
- package/src/components/PromotionQueue.tsx +89 -0
- package/src/components/ScopeCard.tsx +234 -0
- package/src/components/ScopeDetailModal.tsx +255 -0
- package/src/components/ScopeFilterBar.tsx +152 -0
- package/src/components/SearchInput.tsx +102 -0
- package/src/components/SessionPanel.tsx +335 -0
- package/src/components/SprintContainer.tsx +303 -0
- package/src/components/SprintDependencyDialog.tsx +78 -0
- package/src/components/SprintPreflightModal.tsx +138 -0
- package/src/components/StatusBar.tsx +168 -0
- package/src/components/SwimCell.tsx +67 -0
- package/src/components/SwimLaneRow.tsx +94 -0
- package/src/components/SwimlaneBoardView.tsx +108 -0
- package/src/components/VersionBadge.tsx +139 -0
- package/src/components/ViewModeSelector.tsx +114 -0
- package/src/components/config/AgentChip.tsx +53 -0
- package/src/components/config/AgentCreateDialog.tsx +321 -0
- package/src/components/config/AgentEditor.tsx +175 -0
- package/src/components/config/DirectoryTree.tsx +582 -0
- package/src/components/config/FileEditor.tsx +550 -0
- package/src/components/config/HookChip.tsx +50 -0
- package/src/components/config/StageCard.tsx +198 -0
- package/src/components/config/TransitionZone.tsx +173 -0
- package/src/components/config/UnifiedWorkflowPipeline.tsx +216 -0
- package/src/components/config/WorkflowPipeline.tsx +161 -0
- package/src/components/source-control/BranchList.tsx +93 -0
- package/src/components/source-control/BranchPanel.tsx +105 -0
- package/src/components/source-control/CommitLog.tsx +100 -0
- package/src/components/source-control/CommitRow.tsx +47 -0
- package/src/components/source-control/GitHubPanel.tsx +110 -0
- package/src/components/source-control/GitHubSetupGuide.tsx +52 -0
- package/src/components/source-control/GitOverviewBar.tsx +101 -0
- package/src/components/source-control/PullRequestList.tsx +69 -0
- package/src/components/source-control/WorktreeList.tsx +80 -0
- package/src/components/ui/badge.tsx +41 -0
- package/src/components/ui/button.tsx +55 -0
- package/src/components/ui/card.tsx +78 -0
- package/src/components/ui/dialog.tsx +94 -0
- package/src/components/ui/popover.tsx +33 -0
- package/src/components/ui/scroll-area.tsx +54 -0
- package/src/components/ui/separator.tsx +28 -0
- package/src/components/ui/tabs.tsx +52 -0
- package/src/components/ui/toggle-switch.tsx +35 -0
- package/src/components/ui/tooltip.tsx +27 -0
- package/src/components/workflow/AddEdgeDialog.tsx +217 -0
- package/src/components/workflow/AddListDialog.tsx +201 -0
- package/src/components/workflow/ChecklistEditor.tsx +239 -0
- package/src/components/workflow/CommandPrefixManager.tsx +118 -0
- package/src/components/workflow/ConfigSettingsPanel.tsx +189 -0
- package/src/components/workflow/DirectionSelector.tsx +133 -0
- package/src/components/workflow/DispatchConfigPanel.tsx +180 -0
- package/src/components/workflow/EdgeDetailPanel.tsx +236 -0
- package/src/components/workflow/EdgePropertyEditor.tsx +251 -0
- package/src/components/workflow/EditToolbar.tsx +138 -0
- package/src/components/workflow/HookDetailPanel.tsx +250 -0
- package/src/components/workflow/HookExecutionLog.tsx +24 -0
- package/src/components/workflow/HookSourceModal.tsx +129 -0
- package/src/components/workflow/HooksDashboard.tsx +363 -0
- package/src/components/workflow/ListPropertyEditor.tsx +251 -0
- package/src/components/workflow/MigrationPreviewDialog.tsx +237 -0
- package/src/components/workflow/MovementRulesPanel.tsx +188 -0
- package/src/components/workflow/NodeDetailPanel.tsx +245 -0
- package/src/components/workflow/PresetSelector.tsx +414 -0
- package/src/components/workflow/SkillCommandBuilder.tsx +174 -0
- package/src/components/workflow/WorkflowEdgeComponent.tsx +145 -0
- package/src/components/workflow/WorkflowNode.tsx +147 -0
- package/src/components/workflow/graphLayout.ts +186 -0
- package/src/components/workflow/mergeHooks.ts +85 -0
- package/src/components/workflow/useEditHistory.ts +88 -0
- package/src/components/workflow/useWorkflowEditor.ts +262 -0
- package/src/components/workflow/validateConfig.ts +70 -0
- package/src/hooks/useActiveDispatches.ts +198 -0
- package/src/hooks/useBoardSettings.ts +170 -0
- package/src/hooks/useCardDisplay.ts +57 -0
- package/src/hooks/useCcHooks.ts +24 -0
- package/src/hooks/useConfigTree.ts +51 -0
- package/src/hooks/useEnforcementRules.ts +46 -0
- package/src/hooks/useEvents.ts +59 -0
- package/src/hooks/useFileEditor.ts +165 -0
- package/src/hooks/useGates.ts +57 -0
- package/src/hooks/useIdeaActions.ts +53 -0
- package/src/hooks/useKanbanDnd.ts +410 -0
- package/src/hooks/useOrbitalConfig.ts +54 -0
- package/src/hooks/usePipeline.ts +47 -0
- package/src/hooks/usePipelineData.ts +338 -0
- package/src/hooks/useReconnect.ts +25 -0
- package/src/hooks/useScopeFilters.ts +125 -0
- package/src/hooks/useScopeSessions.ts +44 -0
- package/src/hooks/useScopes.ts +67 -0
- package/src/hooks/useSearch.ts +67 -0
- package/src/hooks/useSettings.tsx +187 -0
- package/src/hooks/useSocket.ts +25 -0
- package/src/hooks/useSourceControl.ts +105 -0
- package/src/hooks/useSprintPreflight.ts +55 -0
- package/src/hooks/useSprints.ts +154 -0
- package/src/hooks/useStatusBarHighlight.ts +18 -0
- package/src/hooks/useSwimlaneBoardSettings.ts +104 -0
- package/src/hooks/useTheme.ts +9 -0
- package/src/hooks/useTransitionReadiness.ts +53 -0
- package/src/hooks/useVersion.ts +155 -0
- package/src/hooks/useViolations.ts +65 -0
- package/src/hooks/useWorkflow.tsx +125 -0
- package/src/hooks/useZoomModifier.ts +19 -0
- package/src/index.css +797 -0
- package/src/layouts/DashboardLayout.tsx +113 -0
- package/src/lib/collisionDetection.ts +20 -0
- package/src/lib/scope-fields.ts +61 -0
- package/src/lib/swimlane.ts +146 -0
- package/src/lib/utils.ts +15 -0
- package/src/main.tsx +19 -0
- package/src/socket.ts +11 -0
- package/src/types/index.ts +497 -0
- package/src/views/AgentFeed.tsx +339 -0
- package/src/views/DeployPipeline.tsx +59 -0
- package/src/views/EnforcementView.tsx +378 -0
- package/src/views/PrimitivesConfig.tsx +500 -0
- package/src/views/QualityGates.tsx +1012 -0
- package/src/views/ScopeBoard.tsx +454 -0
- package/src/views/SessionTimeline.tsx +516 -0
- package/src/views/Settings.tsx +183 -0
- package/src/views/SourceControl.tsx +95 -0
- package/src/views/WorkflowVisualizer.tsx +382 -0
- package/tailwind.config.js +161 -0
- package/templates/agents/AUTO-INVOKE.md +180 -0
- package/templates/agents/CONFLICT-RESOLUTION.md +128 -0
- package/templates/agents/QUICK-REFERENCE.md +122 -0
- package/templates/agents/README.md +188 -0
- package/templates/agents/SKILL-TRIGGERS.md +100 -0
- package/templates/agents/blue-team/frontend-designer.md +424 -0
- package/templates/agents/green-team/architect.md +526 -0
- package/templates/agents/green-team/rules-enforcer.md +131 -0
- package/templates/agents/red-team/attacker-learned.md +24 -0
- package/templates/agents/red-team/attacker.md +486 -0
- package/templates/agents/red-team/chaos.md +548 -0
- package/templates/agents/reference/component-registry.md +82 -0
- package/templates/agents/workflows/full-mode.md +218 -0
- package/templates/agents/workflows/quick-mode.md +118 -0
- package/templates/agents/workflows/security-mode.md +283 -0
- package/templates/anti-patterns/dangerous-shortcuts.md +427 -0
- package/templates/config/agent-triggers.json +92 -0
- package/templates/hooks/agent-team-gate.sh +31 -0
- package/templates/hooks/agent-trigger.sh +97 -0
- package/templates/hooks/block-push.sh +66 -0
- package/templates/hooks/block-workarounds.sh +61 -0
- package/templates/hooks/blocker-check.sh +28 -0
- package/templates/hooks/completion-checklist.sh +28 -0
- package/templates/hooks/decision-capture.sh +15 -0
- package/templates/hooks/dependency-check.sh +27 -0
- package/templates/hooks/end-session.sh +31 -0
- package/templates/hooks/exploration-logger.sh +37 -0
- package/templates/hooks/files-changed-summary.sh +37 -0
- package/templates/hooks/get-session-id.sh +49 -0
- package/templates/hooks/git-commit-guard.sh +34 -0
- package/templates/hooks/init-session.sh +93 -0
- package/templates/hooks/orbital-emit.sh +79 -0
- package/templates/hooks/orbital-report-deploy.sh +78 -0
- package/templates/hooks/orbital-report-gates.sh +40 -0
- package/templates/hooks/orbital-report-violation.sh +36 -0
- package/templates/hooks/orbital-scope-update.sh +53 -0
- package/templates/hooks/phase-verify-reminder.sh +26 -0
- package/templates/hooks/review-gate-check.sh +82 -0
- package/templates/hooks/scope-commit-logger.sh +37 -0
- package/templates/hooks/scope-create-cleanup.sh +36 -0
- package/templates/hooks/scope-create-gate.sh +80 -0
- package/templates/hooks/scope-create-tracker.sh +17 -0
- package/templates/hooks/scope-file-sync.sh +53 -0
- package/templates/hooks/scope-gate.sh +35 -0
- package/templates/hooks/scope-helpers.sh +188 -0
- package/templates/hooks/scope-lifecycle-gate.sh +139 -0
- package/templates/hooks/scope-prepare.sh +244 -0
- package/templates/hooks/scope-transition.sh +172 -0
- package/templates/hooks/session-enforcer.sh +143 -0
- package/templates/hooks/time-tracker.sh +33 -0
- package/templates/lessons-learned.md +15 -0
- package/templates/orbital.config.json +35 -0
- package/templates/presets/development.json +42 -0
- package/templates/presets/gitflow.json +712 -0
- package/templates/presets/minimal.json +23 -0
- package/templates/quick/rules.md +218 -0
- package/templates/scopes/_template.md +255 -0
- package/templates/settings-hooks.json +98 -0
- package/templates/skills/git-commit/SKILL.md +85 -0
- package/templates/skills/git-dev/SKILL.md +99 -0
- package/templates/skills/git-hotfix/SKILL.md +223 -0
- package/templates/skills/git-main/SKILL.md +84 -0
- package/templates/skills/git-production/SKILL.md +165 -0
- package/templates/skills/git-staging/SKILL.md +112 -0
- package/templates/skills/scope-create/SKILL.md +81 -0
- package/templates/skills/scope-fix-review/SKILL.md +168 -0
- package/templates/skills/scope-implement/SKILL.md +110 -0
- package/templates/skills/scope-post-review/SKILL.md +144 -0
- package/templates/skills/scope-pre-review/SKILL.md +211 -0
- package/templates/skills/scope-verify/SKILL.md +201 -0
- package/templates/skills/session-init/SKILL.md +62 -0
- package/templates/skills/session-resume/SKILL.md +201 -0
- package/templates/skills/test-checks/SKILL.md +171 -0
- package/templates/skills/test-code-review/SKILL.md +252 -0
- package/tsconfig.json +25 -0
- package/vite.config.ts +38 -0
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: test-checks
|
|
3
|
+
description: Runs 13 quality gates including linting, type checking, rule verification, and stale scope detection. Use before commits, after making changes, or when checking code quality quickly.
|
|
4
|
+
user-invocable: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /test-checks - Run All Quality Gates
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
tokens: ~600
|
|
11
|
+
trigger: /test-checks
|
|
12
|
+
purpose: Run the complete 13-step quality gate pipeline before committing
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## What This Does
|
|
16
|
+
|
|
17
|
+
Executes the full pre-commit quality pipeline - same checks the git hook runs.
|
|
18
|
+
|
|
19
|
+
## The 13 Checks
|
|
20
|
+
|
|
21
|
+
| # | Check | Command (from orbital.config.json) | What It Catches |
|
|
22
|
+
|---|-------|--------------------------------------|-----------------|
|
|
23
|
+
| 1 | TypeScript | `commands.typeCheck` | Type errors |
|
|
24
|
+
| 2 | Lint | `commands.lint` | Code style violations |
|
|
25
|
+
| 3 | Build | `commands.build` | Compilation, imports |
|
|
26
|
+
| 4 | Templates | `commands.validateTemplates` | Template syntax |
|
|
27
|
+
| 5 | Doc Links | `commands.validateDocs` | Broken links |
|
|
28
|
+
| 6 | Doc Freshness | `commands.docFreshness` | Stale auto-docs |
|
|
29
|
+
| 7 | Enforcement | `commands.checkRules` | Rule violations |
|
|
30
|
+
| 8 | Workarounds | grep patterns | Bypass attempts |
|
|
31
|
+
| 9 | **Placeholders** | grep PLACEHOLDER/STUB | Incomplete implementations |
|
|
32
|
+
| 10 | **Mock Data** | grep mock/fake in prod | Test data in production |
|
|
33
|
+
| 11 | **Shortcuts** | grep "for now"/TODO | Unfinished work |
|
|
34
|
+
| 12 | **Default Secrets** | grep fallback secrets | Security vulnerabilities |
|
|
35
|
+
| 13 | **Stale Scopes** | grep completed scopes | Scopes needing move to completed/ |
|
|
36
|
+
|
|
37
|
+
## Steps
|
|
38
|
+
|
|
39
|
+
### Step 1: Run All Checks (with Orbital Gate Reporting)
|
|
40
|
+
|
|
41
|
+
Read `.claude/orbital.config.json` for project-specific commands. Run each check, capture timing, and report results to Orbital Command. If the Orbital server isn't running, reporting is silently skipped.
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
HOOK_DIR="$(git rev-parse --show-toplevel)/.claude/hooks"
|
|
45
|
+
export ORBITAL_GATE_COMMIT_SHA=$(git rev-parse --short HEAD 2>/dev/null)
|
|
46
|
+
|
|
47
|
+
# Helper: run a gate check and report result
|
|
48
|
+
# Usage: run_gate <gate_name> <check_number> <total> <command...>
|
|
49
|
+
run_gate() {
|
|
50
|
+
local gate="$1" num="$2" total="$3"; shift 3
|
|
51
|
+
echo "[$num/$total] $gate..."
|
|
52
|
+
local start_ms=$(($(date +%s) * 1000))
|
|
53
|
+
if eval "$@" 2>&1; then
|
|
54
|
+
local end_ms=$(($(date +%s) * 1000))
|
|
55
|
+
"$HOOK_DIR/orbital-report-gates.sh" "$gate" "pass" "$(( end_ms - start_ms ))"
|
|
56
|
+
return 0
|
|
57
|
+
else
|
|
58
|
+
local end_ms=$(($(date +%s) * 1000))
|
|
59
|
+
"$HOOK_DIR/orbital-report-gates.sh" "$gate" "fail" "$(( end_ms - start_ms ))"
|
|
60
|
+
return 1
|
|
61
|
+
fi
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
# Checks 1-7: Read commands from orbital.config.json — skip any that are null
|
|
65
|
+
# Run commands.typeCheck (if configured, skip if null)
|
|
66
|
+
run_gate "type-check" 1 13 "<commands.typeCheck from orbital.config.json>"
|
|
67
|
+
# Run commands.lint (if configured, skip if null)
|
|
68
|
+
run_gate "lint" 2 13 "<commands.lint from orbital.config.json>"
|
|
69
|
+
# Run commands.build (if configured, skip if null)
|
|
70
|
+
run_gate "build" 3 13 "<commands.build from orbital.config.json>"
|
|
71
|
+
# Run commands.validateTemplates (if configured, skip if null)
|
|
72
|
+
run_gate "template-validation" 4 13 "<commands.validateTemplates from orbital.config.json>"
|
|
73
|
+
# Run commands.validateDocs (if configured, skip if null)
|
|
74
|
+
run_gate "doc-links" 5 13 "<commands.validateDocs from orbital.config.json>"
|
|
75
|
+
# Run commands.docFreshness (if configured, skip if null)
|
|
76
|
+
run_gate "doc-freshness" 6 13 "<commands.docFreshness from orbital.config.json>"
|
|
77
|
+
|
|
78
|
+
# Enforcement: capture output for violation reporting
|
|
79
|
+
# Run commands.checkRules (if configured, skip if null)
|
|
80
|
+
echo "[7/13] rule-enforcement..."
|
|
81
|
+
RULES_START=$(($(date +%s) * 1000))
|
|
82
|
+
RULES_OUTPUT=$(<commands.checkRules from orbital.config.json> 2>&1)
|
|
83
|
+
RULES_EXIT=$?
|
|
84
|
+
RULES_END=$(($(date +%s) * 1000))
|
|
85
|
+
if [ $RULES_EXIT -eq 0 ]; then
|
|
86
|
+
"$HOOK_DIR/orbital-report-gates.sh" "rule-enforcement" "pass" "$(( RULES_END - RULES_START ))"
|
|
87
|
+
else
|
|
88
|
+
"$HOOK_DIR/orbital-report-gates.sh" "rule-enforcement" "fail" "$(( RULES_END - RULES_START ))"
|
|
89
|
+
echo "$RULES_OUTPUT"
|
|
90
|
+
fi
|
|
91
|
+
|
|
92
|
+
# Checks 8-13: Generic code quality checks (not project-specific)
|
|
93
|
+
run_gate "no-placeholders" 8 13 '! grep -rEi "PLACEHOLDER|STUB_|DUMMY_" . --include="*.ts" --include="*.py" --include="*.js" | grep -v __tests__ | grep -v node_modules'
|
|
94
|
+
run_gate "no-mock-data" 9 13 '! grep -rEi "mockSignature|fakeUser|MOCK_DATA" . --include="*.ts" --include="*.py" --include="*.js" | grep -v __tests__ | grep -v node_modules'
|
|
95
|
+
run_gate "no-shortcuts" 10 13 'FOUND=$(grep -rc "for now\|// TODO:\|// FIXME:" . --include="*.ts" --include="*.py" --include="*.js" 2>/dev/null | grep -v node_modules | grep -v ":0$" | wc -l | tr -d " "); [ "$FOUND" -eq 0 ]'
|
|
96
|
+
run_gate "no-default-secrets" 11 13 '! grep -rE "\|\| ['\''\"]\.\*(secret|key|token)" . --include="*.ts" --include="*.py" --include="*.js" | grep -v __tests__ | grep -v node_modules'
|
|
97
|
+
run_gate "no-stale-scopes" 12 13 'STALE=$(grep -rl "^status: implementing" scopes/completed/ scopes/review/ 2>/dev/null | wc -l | tr -d " "); [ "$STALE" -eq 0 ]'
|
|
98
|
+
# Run commands.test (if configured, skip if null)
|
|
99
|
+
run_gate "tests" 13 13 "<commands.test from orbital.config.json>"
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Step 2: Report Results
|
|
103
|
+
|
|
104
|
+
Display the summary table (same format as before — the Orbital Command dashboard gets data automatically via the gate reports above).
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
╔═══════════════════════════════════════════════════════════════╗
|
|
108
|
+
║ PRE-COMMIT QUALITY GATES ║
|
|
109
|
+
╠═══════════════════════════════════════════════════════════════╣
|
|
110
|
+
║ ║
|
|
111
|
+
║ [1/13] TypeScript type-check ✅/❌ ║
|
|
112
|
+
║ [2/13] ESLint ✅/❌ ║
|
|
113
|
+
║ [3/13] Build ✅/❌ ║
|
|
114
|
+
║ [4/13] Template validation ✅/❌ ║
|
|
115
|
+
║ [5/13] Documentation links ✅/❌ ║
|
|
116
|
+
║ [6/13] Doc freshness ✅/❌ ║
|
|
117
|
+
║ [7/13] Enforcement rules ✅/❌ ║
|
|
118
|
+
║ [8/13] No placeholders ✅/❌ ║
|
|
119
|
+
║ [9/13] No mock data in prod ✅/❌ ║
|
|
120
|
+
║ [10/13] No untracked shortcuts ✅/❌ ║
|
|
121
|
+
║ [11/13] No default secrets ✅/❌ ║
|
|
122
|
+
║ [12/13] No stale scopes ✅/❌ ║
|
|
123
|
+
║ [13/13] Tests ✅/❌ ║
|
|
124
|
+
║ ║
|
|
125
|
+
╚═══════════════════════════════════════════════════════════════╝
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Step 3: On Failure
|
|
129
|
+
|
|
130
|
+
When a check fails:
|
|
131
|
+
1. **Read the error** - It tells you what's wrong
|
|
132
|
+
2. **Fix the issue** - Use Edit tool
|
|
133
|
+
3. **Re-run that check** - Verify the fix
|
|
134
|
+
4. **Continue** - Move to next check
|
|
135
|
+
|
|
136
|
+
## Quick Fixes
|
|
137
|
+
|
|
138
|
+
| Check | Common Fix |
|
|
139
|
+
|-------|-----------|
|
|
140
|
+
| TypeScript | Add missing types, fix type mismatches |
|
|
141
|
+
| Lint | Run the lint fix command, remove any types |
|
|
142
|
+
| Build | Same as TypeScript, check imports |
|
|
143
|
+
| Templates | Fix placeholder syntax in template files |
|
|
144
|
+
| Doc Links | Update/remove broken links |
|
|
145
|
+
| Doc Freshness | Regenerate auto-docs |
|
|
146
|
+
| Enforcement | See enforcement rules for specific fixes |
|
|
147
|
+
| Workarounds | Use Write/Edit tools properly, not bash |
|
|
148
|
+
| **Placeholders** | Replace with real implementation or throw error |
|
|
149
|
+
| **Mock Data** | Move to `__tests__/fixtures/` or implement real logic |
|
|
150
|
+
| **Shortcuts** | Complete the TODO or link to tracking ticket |
|
|
151
|
+
| **Default Secrets** | Remove fallback, require env var with validation |
|
|
152
|
+
| **Stale Scopes** | Run `/git-commit` to commit and transition reviewed scopes |
|
|
153
|
+
|
|
154
|
+
## File Size Check
|
|
155
|
+
|
|
156
|
+
Also verify no new files exceed the configured line limit (default: 400 lines). Check `orbital.config.json` for `maxFileLines` and `maxFileLinesExemptions`:
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
# Adjust the path and extension to match your project structure
|
|
160
|
+
find src -name "*.ts" -o -name "*.py" -o -name "*.js" | xargs wc -l | awk '$1 > 400'
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
Check `orbital.config.json` for any exempt files listed under `maxFileLinesExemptions`.
|
|
164
|
+
|
|
165
|
+
## After All Pass
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
git add -A && git commit -m "your message"
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
The git hook will run these same checks automatically.
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: test-code-review
|
|
3
|
+
description: Runs complete validation suite including pre-commit checks, pre-push verification, and code review agents. Use when preparing major commits, before creating PRs, or for comprehensive quality checks.
|
|
4
|
+
user-invocable: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /test-code-review - Complete Validation Suite
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
tokens: ~600
|
|
11
|
+
trigger: /test-code-review
|
|
12
|
+
purpose: Run the full validation pipeline: pre-commit checks, pre-push checks, and parallel code review
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## What This Does
|
|
16
|
+
|
|
17
|
+
Combines all validation layers into one comprehensive check:
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
┌─────────────────────────────────────────────────────────────────────────┐
|
|
21
|
+
│ /test-code-review │
|
|
22
|
+
├─────────────────────────────────────────────────────────────────────────┤
|
|
23
|
+
│ │
|
|
24
|
+
│ Phase 1: /test-checks (8 checks) │
|
|
25
|
+
│ ├── TypeScript, ESLint, Build, Templates │
|
|
26
|
+
│ └── Doc links, Doc freshness, Enforcement, Workarounds │
|
|
27
|
+
│ │
|
|
28
|
+
│ Phase 2: pre-push (3 checks) │
|
|
29
|
+
│ ├── Documentation sync │
|
|
30
|
+
│ ├── Auto-generated docs │
|
|
31
|
+
│ └── Code review scan │
|
|
32
|
+
│ │
|
|
33
|
+
│ Phase 3: code-review (6 agents in parallel) │
|
|
34
|
+
│ ├── code-reviewer, silent-failure-hunter, code-simplifier │
|
|
35
|
+
│ └── comment-analyzer, pr-test-analyzer, type-design-analyzer │
|
|
36
|
+
│ │
|
|
37
|
+
│ Phase 4: Synthesize Results │
|
|
38
|
+
│ └── Collect findings, categorize by severity │
|
|
39
|
+
│ │
|
|
40
|
+
│ Phase 5: Scope Completion Check (if all pass) │
|
|
41
|
+
│ └── Check if branch scopes can move to /scopes/completed/ │
|
|
42
|
+
│ │
|
|
43
|
+
│ Phase 6: Reflection Prompt (optional) │
|
|
44
|
+
│ └── Ask if user wants to capture learnings in lessons-learned.md │
|
|
45
|
+
│ │
|
|
46
|
+
└─────────────────────────────────────────────────────────────────────────┘
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Steps
|
|
50
|
+
|
|
51
|
+
### Phase 1: Pre-Commit Checks
|
|
52
|
+
|
|
53
|
+
Run all 8 quality gates. Read commands from `.claude/orbital.config.json` — skip any that are null:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
echo "═══ PHASE 1: PRE-COMMIT ═══"
|
|
57
|
+
# Run commands.typeCheck from orbital.config.json (skip if null)
|
|
58
|
+
echo "[1/8] TypeScript..."
|
|
59
|
+
# Run commands.lint from orbital.config.json (skip if null)
|
|
60
|
+
echo "[2/8] Lint..."
|
|
61
|
+
# Run commands.build from orbital.config.json (skip if null)
|
|
62
|
+
echo "[3/8] Build..."
|
|
63
|
+
# Run commands.validateTemplates from orbital.config.json (skip if null)
|
|
64
|
+
echo "[4/8] Templates..."
|
|
65
|
+
# Run commands.validateDocs from orbital.config.json (skip if null)
|
|
66
|
+
echo "[5/8] Doc links..."
|
|
67
|
+
# Run commands.docFreshness from orbital.config.json (skip if null)
|
|
68
|
+
echo "[6/8] Doc freshness..."
|
|
69
|
+
# Run commands.checkRules from orbital.config.json (skip if null)
|
|
70
|
+
echo "[7/8] Enforcement..."
|
|
71
|
+
echo "[8/8] Workarounds..." && echo "✅ Check staged files manually"
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**Stop here if any check fails. Fix before proceeding.**
|
|
75
|
+
|
|
76
|
+
### Phase 2: Pre-Push Checks
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
echo "═══ PHASE 2: PRE-PUSH ═══"
|
|
80
|
+
|
|
81
|
+
# Check documentation sync
|
|
82
|
+
CHANGED=$(git diff --name-only HEAD~1..HEAD 2>/dev/null || git diff --name-only)
|
|
83
|
+
|
|
84
|
+
echo "Changed files:"
|
|
85
|
+
echo "$CHANGED"
|
|
86
|
+
|
|
87
|
+
# Check critical files from orbital.config.json criticalFiles list (if configured)
|
|
88
|
+
echo "Critical files needing docs:"
|
|
89
|
+
echo "$CHANGED" | grep -E "<criticalFiles pattern from orbital.config.json>" || echo "None"
|
|
90
|
+
|
|
91
|
+
# Run commands.docFreshness from orbital.config.json (skip if null)
|
|
92
|
+
echo "Auto-docs check..."
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Phase 3: Parallel Code Review
|
|
96
|
+
|
|
97
|
+
Launch ALL 6 review agents simultaneously using Task tool:
|
|
98
|
+
|
|
99
|
+
**You MUST send a single message with 6 parallel Task invocations:**
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
Task: pr-review-toolkit:code-reviewer
|
|
103
|
+
Prompt: "Review current changes for bugs, security, conventions"
|
|
104
|
+
|
|
105
|
+
Task: pr-review-toolkit:silent-failure-hunter
|
|
106
|
+
Prompt: "Review for silent failures; swallowed errors, bad fallbacks"
|
|
107
|
+
|
|
108
|
+
Task: pr-review-toolkit:code-simplifier
|
|
109
|
+
Prompt: "Review for unnecessary complexity"
|
|
110
|
+
|
|
111
|
+
Task: pr-review-toolkit:comment-analyzer
|
|
112
|
+
Prompt: "Review comment accuracy and maintainability"
|
|
113
|
+
|
|
114
|
+
Task: pr-review-toolkit:pr-test-analyzer
|
|
115
|
+
Prompt: "Analyze test coverage gaps"
|
|
116
|
+
|
|
117
|
+
Task: pr-review-toolkit:type-design-analyzer
|
|
118
|
+
Prompt: "Review type design quality"
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Phase 4: Synthesize Results
|
|
122
|
+
|
|
123
|
+
Collect all findings and report:
|
|
124
|
+
|
|
125
|
+
```
|
|
126
|
+
╔═══════════════════════════════════════════════════════════════════════╗
|
|
127
|
+
║ /test-code-review RESULTS ║
|
|
128
|
+
╠═══════════════════════════════════════════════════════════════════════╣
|
|
129
|
+
║ ║
|
|
130
|
+
║ PHASE 1: Pre-Commit [8/8 passed] ✅ ║
|
|
131
|
+
║ PHASE 2: Pre-Push [3/3 passed] ✅ ║
|
|
132
|
+
║ PHASE 3: Code Review [findings below] ║
|
|
133
|
+
║ ║
|
|
134
|
+
║ ───────────────────────────────────────────────────────────────── ║
|
|
135
|
+
║ 🚫 BLOCKERS (must fix): 0 ║
|
|
136
|
+
║ ⚠️ WARNINGS (should fix): 2 ║
|
|
137
|
+
║ 💡 SUGGESTIONS (consider): 5 ║
|
|
138
|
+
║ ║
|
|
139
|
+
╚═══════════════════════════════════════════════════════════════════════╝
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### Phase 5: Scope Completion Check (Only If All Phases Pass)
|
|
143
|
+
|
|
144
|
+
**Only run this phase if Phases 1-3 pass with no blockers.**
|
|
145
|
+
|
|
146
|
+
This phase checks if any scope documents should be moved to the `/scopes/completed/` folder.
|
|
147
|
+
|
|
148
|
+
#### Step 1: Extract Scope Numbers from Branch Name
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
# Get current branch name and extract scope numbers
|
|
152
|
+
BRANCH=$(git branch --show-current)
|
|
153
|
+
echo "Current branch: $BRANCH"
|
|
154
|
+
|
|
155
|
+
# Extract all 3-digit scope numbers from branch name
|
|
156
|
+
# Handles patterns like: feature/scopes-007-012, fix/scope-018, feature/024-dynamic-convergence
|
|
157
|
+
SCOPE_NUMS=$(echo "$BRANCH" | grep -oE '[0-9]{3}' | sort -u)
|
|
158
|
+
echo "Scope numbers found in branch: $SCOPE_NUMS"
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
#### Step 2: Check for Matching Scope Files
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
# For each scope number, check if a matching file exists in /scopes/ (not completed/)
|
|
165
|
+
for num in $SCOPE_NUMS; do
|
|
166
|
+
SCOPE_FILE=$(ls scopes/${num}-*.md 2>/dev/null)
|
|
167
|
+
if [ -n "$SCOPE_FILE" ]; then
|
|
168
|
+
echo "📋 Found scope file: $SCOPE_FILE"
|
|
169
|
+
fi
|
|
170
|
+
done
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
#### Step 3: Prompt for Scope Completion
|
|
174
|
+
|
|
175
|
+
If matching scope files are found and all tests passed:
|
|
176
|
+
|
|
177
|
+
```
|
|
178
|
+
╔═══════════════════════════════════════════════════════════════════════╗
|
|
179
|
+
║ 🎯 SCOPE COMPLETION CHECK ║
|
|
180
|
+
╠═══════════════════════════════════════════════════════════════════════╣
|
|
181
|
+
║ ║
|
|
182
|
+
║ All validation phases PASSED! ✅ ║
|
|
183
|
+
║ ║
|
|
184
|
+
║ The following scope files match your branch and may be complete: ║
|
|
185
|
+
║ ║
|
|
186
|
+
║ 📋 scopes/018-feature-name.md ║
|
|
187
|
+
║ ║
|
|
188
|
+
║ ───────────────────────────────────────────────────────────────── ║
|
|
189
|
+
║ Would you like to move completed scopes to /scopes/completed/? ║
|
|
190
|
+
║ ║
|
|
191
|
+
║ Before moving, verify: ║
|
|
192
|
+
║ ✓ All acceptance criteria in the scope are met ║
|
|
193
|
+
║ ✓ No remaining TODOs in the scope file ║
|
|
194
|
+
║ ✓ Related code changes are committed ║
|
|
195
|
+
║ ║
|
|
196
|
+
╚═══════════════════════════════════════════════════════════════════════╝
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
#### Step 4: Move Completed Scopes (If User Confirms)
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
|
+
# Only after user confirmation (scopes are gitignored, use plain mv)
|
|
203
|
+
mv scopes/XXX-scope-name.md scopes/completed/
|
|
204
|
+
echo "✅ Moved scope XXX to completed folder"
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
**Note:** Scopes are gitignored — use plain `mv`, not `git mv`.
|
|
208
|
+
|
|
209
|
+
## Modes
|
|
210
|
+
|
|
211
|
+
| Command | What Runs |
|
|
212
|
+
|---------|-----------|
|
|
213
|
+
| `/test-code-review` | All 6 phases (full validation + scope check + reflect prompt) |
|
|
214
|
+
| `/test-code-review quick` | Phase 1 only (pre-commit checks) |
|
|
215
|
+
| `/test-code-review review` | Phase 3 only (parallel code review) |
|
|
216
|
+
|
|
217
|
+
## On Failure
|
|
218
|
+
|
|
219
|
+
1. Fix issues found in each phase before proceeding
|
|
220
|
+
2. Re-run `/test-code-review` to verify fixes
|
|
221
|
+
3. Only commit/push when all phases pass
|
|
222
|
+
|
|
223
|
+
## On Success
|
|
224
|
+
|
|
225
|
+
When all phases pass with no blockers:
|
|
226
|
+
1. Phase 5 automatically checks for scope files matching your branch
|
|
227
|
+
2. If found, you'll be prompted to move them to `/scopes/completed/`
|
|
228
|
+
3. Verify acceptance criteria are met before confirming the move
|
|
229
|
+
4. Use plain `mv` when moving scope files (scopes are gitignored)
|
|
230
|
+
|
|
231
|
+
### Phase 6: Reflection Prompt (Optional)
|
|
232
|
+
|
|
233
|
+
After successful validation, prompt for reflection:
|
|
234
|
+
|
|
235
|
+
```
|
|
236
|
+
╔═══════════════════════════════════════════════════════════════════════╗
|
|
237
|
+
║ 🎯 ALL VALIDATION PASSED ║
|
|
238
|
+
╠═══════════════════════════════════════════════════════════════════════╣
|
|
239
|
+
║ ║
|
|
240
|
+
║ Before you commit, consider capturing learnings: ║
|
|
241
|
+
║ ║
|
|
242
|
+
║ 📚 Record any lessons in .claude/lessons-learned.md ║
|
|
243
|
+
║ 🪝 Note any hook/skill improvements for future sessions ║
|
|
244
|
+
║ ║
|
|
245
|
+
║ This helps improve the system for future work! ║
|
|
246
|
+
║ ║
|
|
247
|
+
║ Capture learnings now? (or skip and commit) ║
|
|
248
|
+
║ ║
|
|
249
|
+
╚═══════════════════════════════════════════════════════════════════════╝
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
If user chooses to reflect, help them write an entry in `.claude/lessons-learned.md` before proceeding to commit.
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"lib": ["ES2022", "DOM", "DOM.Iterable"],
|
|
5
|
+
"module": "ESNext",
|
|
6
|
+
"skipLibCheck": true,
|
|
7
|
+
"moduleResolution": "bundler",
|
|
8
|
+
"allowImportingTsExtensions": true,
|
|
9
|
+
"isolatedModules": true,
|
|
10
|
+
"moduleDetection": "force",
|
|
11
|
+
"noEmit": true,
|
|
12
|
+
"jsx": "react-jsx",
|
|
13
|
+
"strict": true,
|
|
14
|
+
"noUnusedLocals": true,
|
|
15
|
+
"noUnusedParameters": true,
|
|
16
|
+
"noFallthroughCasesInSwitch": true,
|
|
17
|
+
"forceConsistentCasingInFileNames": true,
|
|
18
|
+
"resolveJsonModule": true,
|
|
19
|
+
"baseUrl": ".",
|
|
20
|
+
"paths": {
|
|
21
|
+
"@/*": ["src/*"]
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"include": ["src", "shared"]
|
|
25
|
+
}
|
package/vite.config.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { defineConfig } from 'vite';
|
|
2
|
+
import react from '@vitejs/plugin-react';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
|
|
5
|
+
const serverPort = process.env.ORBITAL_SERVER_PORT || '4444';
|
|
6
|
+
|
|
7
|
+
export default defineConfig({
|
|
8
|
+
plugins: [react()],
|
|
9
|
+
resolve: {
|
|
10
|
+
alias: {
|
|
11
|
+
'@': path.resolve(__dirname, './src'),
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
server: {
|
|
15
|
+
port: 4445,
|
|
16
|
+
proxy: {
|
|
17
|
+
'/api/orbital': {
|
|
18
|
+
target: `http://localhost:${serverPort}`,
|
|
19
|
+
changeOrigin: true,
|
|
20
|
+
},
|
|
21
|
+
'/socket.io': {
|
|
22
|
+
target: `http://localhost:${serverPort}`,
|
|
23
|
+
ws: true,
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
build: {
|
|
28
|
+
rollupOptions: {
|
|
29
|
+
output: {
|
|
30
|
+
manualChunks: {
|
|
31
|
+
vendor: ['react', 'react-dom', 'react-router-dom'],
|
|
32
|
+
charts: ['recharts'],
|
|
33
|
+
ui: ['@radix-ui/react-dialog', '@radix-ui/react-scroll-area', '@radix-ui/react-tabs', '@radix-ui/react-tooltip'],
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
});
|