all-hands-cli 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 (305) hide show
  1. package/.allhands/README.md +75 -0
  2. package/.allhands/agents/compounder.yaml +15 -0
  3. package/.allhands/agents/coordinator.yaml +17 -0
  4. package/.allhands/agents/documentor.yaml +15 -0
  5. package/.allhands/agents/e2e-test-planner.yaml +17 -0
  6. package/.allhands/agents/emergent.yaml +22 -0
  7. package/.allhands/agents/executor.yaml +14 -0
  8. package/.allhands/agents/ideation.yaml +11 -0
  9. package/.allhands/agents/initiative-steering.yaml +19 -0
  10. package/.allhands/agents/judge.yaml +13 -0
  11. package/.allhands/agents/planner.yaml +19 -0
  12. package/.allhands/agents/pr-reviewer.yaml +15 -0
  13. package/.allhands/docs.json +5 -0
  14. package/.allhands/docs.local.json +26 -0
  15. package/.allhands/flows/COMPOUNDING.md +203 -0
  16. package/.allhands/flows/COORDINATION.md +89 -0
  17. package/.allhands/flows/CORE.md +87 -0
  18. package/.allhands/flows/DOCUMENTATION.md +218 -0
  19. package/.allhands/flows/E2E_TEST_PLAN_BUILDING.md +140 -0
  20. package/.allhands/flows/EMERGENT_PLANNING.md +57 -0
  21. package/.allhands/flows/IDEATION_SCOPING.md +154 -0
  22. package/.allhands/flows/INITIATIVE_STEERING.md +110 -0
  23. package/.allhands/flows/JUDGE_REVIEWING.md +79 -0
  24. package/.allhands/flows/PROMPT_TASK_EXECUTION.md +68 -0
  25. package/.allhands/flows/PR_REVIEWING.md +43 -0
  26. package/.allhands/flows/SPEC_PLANNING.md +216 -0
  27. package/.allhands/flows/harness/WRITING_HARNESS_FLOWS.md +27 -0
  28. package/.allhands/flows/harness/WRITING_HARNESS_KNOWLEDGE.md +27 -0
  29. package/.allhands/flows/harness/WRITING_HARNESS_ORCHESTRATION.md +27 -0
  30. package/.allhands/flows/harness/WRITING_HARNESS_SKILLS.md +27 -0
  31. package/.allhands/flows/harness/WRITING_HARNESS_TOOLS.md +27 -0
  32. package/.allhands/flows/harness/WRITING_HARNESS_VALIDATION_TOOLING.md +27 -0
  33. package/.allhands/flows/shared/CODEBASE_UNDERSTANDING.md +72 -0
  34. package/.allhands/flows/shared/CREATE_HARNESS_SPEC.md +48 -0
  35. package/.allhands/flows/shared/CREATE_SPEC.md +41 -0
  36. package/.allhands/flows/shared/CREATE_VALIDATION_TOOLING_SPEC.md +70 -0
  37. package/.allhands/flows/shared/DOCUMENTATION_DISCOVERY.md +123 -0
  38. package/.allhands/flows/shared/DOCUMENTATION_WRITER.md +101 -0
  39. package/.allhands/flows/shared/EMERGENT_REFINEMENT_ANALYSIS.md +76 -0
  40. package/.allhands/flows/shared/EXTERNAL_TECH_GUIDANCE.md +97 -0
  41. package/.allhands/flows/shared/IDEATION_CODEBASE_GROUNDING.md +49 -0
  42. package/.allhands/flows/shared/PLAN_DEEPENING.md +152 -0
  43. package/.allhands/flows/shared/PROMPT_TASKS_CURATION.md +113 -0
  44. package/.allhands/flows/shared/PROMPT_VALIDATION_REVIEW.MD +99 -0
  45. package/.allhands/flows/shared/QUICK_PREMORTEM.md +70 -0
  46. package/.allhands/flows/shared/RESEARCH_GUIDANCE.md +38 -0
  47. package/.allhands/flows/shared/REVIEW_OPTIONS_BREAKDOWN.md +68 -0
  48. package/.allhands/flows/shared/SKILL_EXTRACTION.md +84 -0
  49. package/.allhands/flows/shared/SPEC_FLOW_ANALYSIS.md +119 -0
  50. package/.allhands/flows/shared/TDD_WORKFLOW.md +109 -0
  51. package/.allhands/flows/shared/UTILIZE_VALIDATION_TOOLING.md +84 -0
  52. package/.allhands/flows/shared/WRITING_HARNESS_FLOWS.md +11 -0
  53. package/.allhands/flows/shared/WRITING_HARNESS_MCP_TOOLS.md +84 -0
  54. package/.allhands/flows/shared/jury/ARCHITECTURE_REVIEW.md +91 -0
  55. package/.allhands/flows/shared/jury/BEST_PRACTICES_REVIEW.md +80 -0
  56. package/.allhands/flows/shared/jury/CLAIM_VERIFICATION_REVIEW.md +101 -0
  57. package/.allhands/flows/shared/jury/EXPECTATIONS_FIT_REVIEW.md +78 -0
  58. package/.allhands/flows/shared/jury/MAINTAINABILITY_REVIEW.md +110 -0
  59. package/.allhands/flows/shared/jury/PROMPTS_EXPECTATIONS_FIT.md +74 -0
  60. package/.allhands/flows/shared/jury/PROMPTS_FLOW_ANALYSIS.md +92 -0
  61. package/.allhands/flows/shared/jury/PROMPTS_YAGNI.md +78 -0
  62. package/.allhands/flows/shared/jury/PROMPT_PREMORTEM.md +125 -0
  63. package/.allhands/flows/shared/jury/SECURITY_REVIEW.md +86 -0
  64. package/.allhands/flows/shared/jury/YAGNI_REVIEW.md +82 -0
  65. package/.allhands/flows/wip/DEBUG_INVESTIGATION.md +162 -0
  66. package/.allhands/flows/wip/MEMORY_RECALL.md +62 -0
  67. package/.allhands/harness/ah +131 -0
  68. package/.allhands/harness/package-lock.json +5292 -0
  69. package/.allhands/harness/package.json +52 -0
  70. package/.allhands/harness/src/__tests__/e2e/commands.test.ts +307 -0
  71. package/.allhands/harness/src/__tests__/e2e/event-loop.test.ts +539 -0
  72. package/.allhands/harness/src/__tests__/e2e/hooks.test.ts +427 -0
  73. package/.allhands/harness/src/__tests__/e2e/new-initiative-routing.test.ts +137 -0
  74. package/.allhands/harness/src/__tests__/e2e/run-e2e.ts +109 -0
  75. package/.allhands/harness/src/__tests__/e2e/specs-type.test.ts +210 -0
  76. package/.allhands/harness/src/__tests__/e2e/validation-hooks.test.ts +669 -0
  77. package/.allhands/harness/src/__tests__/e2e/validation-path-consistency.test.ts +354 -0
  78. package/.allhands/harness/src/__tests__/e2e/validation.test.ts +528 -0
  79. package/.allhands/harness/src/__tests__/harness/assertions.ts +318 -0
  80. package/.allhands/harness/src/__tests__/harness/cli-runner.ts +359 -0
  81. package/.allhands/harness/src/__tests__/harness/fixture.ts +384 -0
  82. package/.allhands/harness/src/__tests__/harness/hook-runner.ts +411 -0
  83. package/.allhands/harness/src/__tests__/harness/index.ts +122 -0
  84. package/.allhands/harness/src/cli.ts +36 -0
  85. package/.allhands/harness/src/commands/complexity.ts +177 -0
  86. package/.allhands/harness/src/commands/context7.ts +202 -0
  87. package/.allhands/harness/src/commands/docs.ts +557 -0
  88. package/.allhands/harness/src/commands/hooks.ts +24 -0
  89. package/.allhands/harness/src/commands/index.ts +51 -0
  90. package/.allhands/harness/src/commands/knowledge.ts +382 -0
  91. package/.allhands/harness/src/commands/memories.ts +302 -0
  92. package/.allhands/harness/src/commands/notify.ts +61 -0
  93. package/.allhands/harness/src/commands/oracle.ts +158 -0
  94. package/.allhands/harness/src/commands/perplexity.ts +220 -0
  95. package/.allhands/harness/src/commands/planning.ts +245 -0
  96. package/.allhands/harness/src/commands/schema.ts +73 -0
  97. package/.allhands/harness/src/commands/skills.ts +128 -0
  98. package/.allhands/harness/src/commands/solutions.ts +353 -0
  99. package/.allhands/harness/src/commands/spawn.ts +158 -0
  100. package/.allhands/harness/src/commands/specs.ts +532 -0
  101. package/.allhands/harness/src/commands/tavily.ts +226 -0
  102. package/.allhands/harness/src/commands/tools.ts +579 -0
  103. package/.allhands/harness/src/commands/trace.ts +327 -0
  104. package/.allhands/harness/src/commands/tui.ts +960 -0
  105. package/.allhands/harness/src/commands/validate.ts +143 -0
  106. package/.allhands/harness/src/commands/validation-tools.ts +108 -0
  107. package/.allhands/harness/src/hooks/context.ts +1442 -0
  108. package/.allhands/harness/src/hooks/enforcement.ts +170 -0
  109. package/.allhands/harness/src/hooks/index.ts +54 -0
  110. package/.allhands/harness/src/hooks/lifecycle.ts +229 -0
  111. package/.allhands/harness/src/hooks/notification.ts +104 -0
  112. package/.allhands/harness/src/hooks/observability.ts +551 -0
  113. package/.allhands/harness/src/hooks/session.ts +88 -0
  114. package/.allhands/harness/src/hooks/shared.ts +815 -0
  115. package/.allhands/harness/src/hooks/transcript-parser.ts +208 -0
  116. package/.allhands/harness/src/hooks/validation.ts +617 -0
  117. package/.allhands/harness/src/lib/__tests__/ctags.test.ts +244 -0
  118. package/.allhands/harness/src/lib/__tests__/docs-validation.test.ts +344 -0
  119. package/.allhands/harness/src/lib/__tests__/mcp-runtime.test.ts +190 -0
  120. package/.allhands/harness/src/lib/__tests__/schema.test.ts +861 -0
  121. package/.allhands/harness/src/lib/base-command.ts +198 -0
  122. package/.allhands/harness/src/lib/cli-daemon.ts +343 -0
  123. package/.allhands/harness/src/lib/compaction.ts +313 -0
  124. package/.allhands/harness/src/lib/ctags.ts +497 -0
  125. package/.allhands/harness/src/lib/docs-validation.ts +907 -0
  126. package/.allhands/harness/src/lib/event-loop.ts +662 -0
  127. package/.allhands/harness/src/lib/flows.ts +155 -0
  128. package/.allhands/harness/src/lib/git.ts +276 -0
  129. package/.allhands/harness/src/lib/knowledge-worker.ts +72 -0
  130. package/.allhands/harness/src/lib/knowledge.ts +810 -0
  131. package/.allhands/harness/src/lib/llm.ts +255 -0
  132. package/.allhands/harness/src/lib/mcp-client.ts +432 -0
  133. package/.allhands/harness/src/lib/mcp-daemon.ts +486 -0
  134. package/.allhands/harness/src/lib/mcp-runtime.ts +418 -0
  135. package/.allhands/harness/src/lib/notification.ts +115 -0
  136. package/.allhands/harness/src/lib/opencode/index.ts +70 -0
  137. package/.allhands/harness/src/lib/opencode/profiles.ts +300 -0
  138. package/.allhands/harness/src/lib/opencode/prompts/codesearch.md +98 -0
  139. package/.allhands/harness/src/lib/opencode/prompts/knowledge-aggregator.md +67 -0
  140. package/.allhands/harness/src/lib/opencode/runner.ts +281 -0
  141. package/.allhands/harness/src/lib/oracle.ts +926 -0
  142. package/.allhands/harness/src/lib/planning-utils.ts +150 -0
  143. package/.allhands/harness/src/lib/planning.ts +605 -0
  144. package/.allhands/harness/src/lib/pr-review.ts +225 -0
  145. package/.allhands/harness/src/lib/prompts.ts +522 -0
  146. package/.allhands/harness/src/lib/schema.ts +418 -0
  147. package/.allhands/harness/src/lib/schemas/agent-profile.ts +141 -0
  148. package/.allhands/harness/src/lib/schemas/template-vars.ts +138 -0
  149. package/.allhands/harness/src/lib/session.ts +164 -0
  150. package/.allhands/harness/src/lib/specs.ts +348 -0
  151. package/.allhands/harness/src/lib/tldr.ts +829 -0
  152. package/.allhands/harness/src/lib/tmux.ts +1051 -0
  153. package/.allhands/harness/src/lib/trace-store.ts +714 -0
  154. package/.allhands/harness/src/mcp/__tests__/index.test.ts +46 -0
  155. package/.allhands/harness/src/mcp/_template.ts +47 -0
  156. package/.allhands/harness/src/mcp/filesystem.ts +33 -0
  157. package/.allhands/harness/src/mcp/index.ts +69 -0
  158. package/.allhands/harness/src/mcp/playwright.ts +34 -0
  159. package/.allhands/harness/src/mcp/xcodebuild.ts +29 -0
  160. package/.allhands/harness/src/schemas/docs.schema.json +44 -0
  161. package/.allhands/harness/src/schemas/settings.schema.json +214 -0
  162. package/.allhands/harness/src/tui/actions.ts +227 -0
  163. package/.allhands/harness/src/tui/file-viewer-modal.ts +270 -0
  164. package/.allhands/harness/src/tui/index.ts +1574 -0
  165. package/.allhands/harness/src/tui/modal.ts +232 -0
  166. package/.allhands/harness/src/tui/prompts-pane.ts +186 -0
  167. package/.allhands/harness/src/tui/status-pane.ts +434 -0
  168. package/.allhands/harness/tsconfig.json +22 -0
  169. package/.allhands/harness/vitest.config.ts +13 -0
  170. package/.allhands/pillars.md +33 -0
  171. package/.allhands/principles.md +88 -0
  172. package/.allhands/schemas/alignment.yaml +51 -0
  173. package/.allhands/schemas/documentation.yaml +10 -0
  174. package/.allhands/schemas/prompt.yaml +92 -0
  175. package/.allhands/schemas/skill.yaml +34 -0
  176. package/.allhands/schemas/solution.yaml +131 -0
  177. package/.allhands/schemas/spec.yaml +67 -0
  178. package/.allhands/schemas/validation-suite.yaml +49 -0
  179. package/.allhands/schemas/workflow.yaml +51 -0
  180. package/.allhands/settings.json +57 -0
  181. package/.allhands/skills/claude-code-patterns/SKILL.md +60 -0
  182. package/.allhands/skills/claude-code-patterns/docs/context-hygiene.md +19 -0
  183. package/.allhands/skills/harness-maintenance/SKILL.md +449 -0
  184. package/.allhands/skills/harness-maintenance/references/core-architecture.md +187 -0
  185. package/.allhands/skills/harness-maintenance/references/harness-skills.md +87 -0
  186. package/.allhands/skills/harness-maintenance/references/knowledge-compounding.md +78 -0
  187. package/.allhands/skills/harness-maintenance/references/tools-commands-mcp-hooks.md +115 -0
  188. package/.allhands/skills/harness-maintenance/references/validation-tooling.md +77 -0
  189. package/.allhands/skills/harness-maintenance/references/writing-flows.md +84 -0
  190. package/.allhands/validation/browser-automation.md +109 -0
  191. package/.allhands/validation/xcode-automation.md +195 -0
  192. package/.allhands/workflows/documentation.md +86 -0
  193. package/.allhands/workflows/investigation.md +81 -0
  194. package/.allhands/workflows/milestone.md +91 -0
  195. package/.allhands/workflows/optimization.md +85 -0
  196. package/.allhands/workflows/refactor.md +99 -0
  197. package/.allhands/workflows/triage.md +81 -0
  198. package/.claude/README.md +1 -0
  199. package/.claude/agents/explorer.md +10 -0
  200. package/.claude/agents/researcher.md +11 -0
  201. package/.claude/agents/task-runner.md +8 -0
  202. package/.claude/settings.json +231 -0
  203. package/.env.ai.example +7 -0
  204. package/.github/workflows/npm-publish.yml +69 -0
  205. package/.internal.json +45 -0
  206. package/.tldr/config.json +11 -0
  207. package/.tldrignore +90 -0
  208. package/CLAUDE.md +6 -0
  209. package/README.md +98 -0
  210. package/bin/sync-cli.js +7552 -0
  211. package/concerns.md +7 -0
  212. package/docs/README.md +41 -0
  213. package/docs/agents/README.md +24 -0
  214. package/docs/agents/agent-configuration-system.md +86 -0
  215. package/docs/agents/execution-agents.md +50 -0
  216. package/docs/agents/knowledge-agents.md +61 -0
  217. package/docs/agents/orchestration-agent.md +57 -0
  218. package/docs/agents/planning-agents.md +84 -0
  219. package/docs/agents/quality-review-agents.md +67 -0
  220. package/docs/agents/workflow-agent-orchestration.md +69 -0
  221. package/docs/flows/README.md +44 -0
  222. package/docs/flows/compounding.md +126 -0
  223. package/docs/flows/coordination.md +72 -0
  224. package/docs/flows/core-harness-integration.md +63 -0
  225. package/docs/flows/documentation-orchestration.md +98 -0
  226. package/docs/flows/e2e-test-plan-building.md +83 -0
  227. package/docs/flows/emergent-refinement.md +104 -0
  228. package/docs/flows/flow-authoring-and-mcp-tools.md +89 -0
  229. package/docs/flows/judge-reviewing.md +112 -0
  230. package/docs/flows/plan-deepening-and-research.md +107 -0
  231. package/docs/flows/plan-review-jury.md +114 -0
  232. package/docs/flows/pr-reviewing.md +54 -0
  233. package/docs/flows/prompt-task-execution.md +119 -0
  234. package/docs/flows/spec-planning.md +162 -0
  235. package/docs/flows/type-specific-scoping-flows.md +49 -0
  236. package/docs/flows/validation-and-skills-integration.md +145 -0
  237. package/docs/flows/wip/wip-flows.md +102 -0
  238. package/docs/harness/README.md +23 -0
  239. package/docs/harness/agent-profiles.md +84 -0
  240. package/docs/harness/cli/README.md +24 -0
  241. package/docs/harness/cli/cli-entry-and-command-discovery.md +91 -0
  242. package/docs/harness/cli/docs-command.md +87 -0
  243. package/docs/harness/cli/knowledge-command.md +91 -0
  244. package/docs/harness/cli/minor-cli-commands.md +65 -0
  245. package/docs/harness/cli/oracle-command.md +113 -0
  246. package/docs/harness/cli/planning-command.md +95 -0
  247. package/docs/harness/cli/schema-and-validation-commands.md +154 -0
  248. package/docs/harness/cli/search-commands.md +97 -0
  249. package/docs/harness/cli/spawn-command.md +136 -0
  250. package/docs/harness/cli/specs-command.md +102 -0
  251. package/docs/harness/cli/tools-command.md +122 -0
  252. package/docs/harness/cli/trace-command.md +122 -0
  253. package/docs/harness/cli-daemon.md +92 -0
  254. package/docs/harness/event-loop.md +184 -0
  255. package/docs/harness/hooks/README.md +15 -0
  256. package/docs/harness/hooks/context-hooks.md +96 -0
  257. package/docs/harness/hooks/lifecycle-and-observability-hooks.md +135 -0
  258. package/docs/harness/hooks/validation-hooks.md +97 -0
  259. package/docs/harness/test-harness.md +149 -0
  260. package/docs/harness/tui.md +176 -0
  261. package/docs/memories.md +20 -0
  262. package/docs/solutions/agentic-issues/premature-agent-deletion-tui-action-dependency-20260130.md +49 -0
  263. package/docs/solutions/agentic-issues/ref-anchor-scope-mismatch-skill-references-20260131.md +55 -0
  264. package/docs/solutions/agentic-issues/tautological-tests-routing-20260131.md +52 -0
  265. package/docs/solutions/integration_issue/blocktool-output-format-mismatch-hook-runner-20260130.md +52 -0
  266. package/docs/solutions/integration_issue/dual-validation-path-divergence-schema-20260130.md +66 -0
  267. package/docs/solutions/security-issues/unsanitized-domain-path-join-20260131.md +52 -0
  268. package/docs/solutions/test-failures/event-loop-mock-ordering-checkAgentWindows-20260130.md +63 -0
  269. package/docs/sync-cli/README.md +19 -0
  270. package/docs/sync-cli/cli-entrypoint-and-commands.md +39 -0
  271. package/docs/sync-cli/commands/README.md +11 -0
  272. package/docs/sync-cli/commands/pull-manifest-command.md +36 -0
  273. package/docs/sync-cli/commands/push-command.md +84 -0
  274. package/docs/sync-cli/commands/sync-command.md +71 -0
  275. package/docs/sync-cli/systems/README.md +14 -0
  276. package/docs/sync-cli/systems/git-and-github-integration.md +49 -0
  277. package/docs/sync-cli/systems/interactive-ui.md +43 -0
  278. package/docs/sync-cli/systems/manifest-and-distribution.md +51 -0
  279. package/docs/sync-cli/systems/path-resolution.md +42 -0
  280. package/package.json +46 -0
  281. package/scripts/install-shim.sh +40 -0
  282. package/scripts/pre-pack.sh +25 -0
  283. package/specs/harness-maintenance-skill.spec.md +138 -0
  284. package/specs/roadmap/git-spec-lifecycle-management.spec.md +113 -0
  285. package/specs/sync-init-flag.spec.md +117 -0
  286. package/specs/unified-workflow-orchestration.spec.md +250 -0
  287. package/specs/validation-tooling-practice.spec.md +98 -0
  288. package/specs/workflow-domain-configuration.spec.md +265 -0
  289. package/src/commands/pull-manifest.ts +31 -0
  290. package/src/commands/push.ts +344 -0
  291. package/src/commands/sync.ts +289 -0
  292. package/src/lib/constants.ts +10 -0
  293. package/src/lib/dotfiles.ts +36 -0
  294. package/src/lib/fs-utils.ts +18 -0
  295. package/src/lib/gh.ts +40 -0
  296. package/src/lib/git.ts +63 -0
  297. package/src/lib/gitignore.ts +167 -0
  298. package/src/lib/manifest.ts +121 -0
  299. package/src/lib/marker-sync.ts +39 -0
  300. package/src/lib/paths.ts +38 -0
  301. package/src/lib/target-lines.ts +66 -0
  302. package/src/lib/ui.ts +78 -0
  303. package/src/sync-cli.ts +120 -0
  304. package/target-lines.json +23 -0
  305. package/tsconfig.json +20 -0
@@ -0,0 +1,434 @@
1
+ /**
2
+ * Status Pane - Right area showing spec info, active agents, and log stream
3
+ *
4
+ * Layout:
5
+ * ┌─ Status ─────────────────────┐
6
+ * │ Branch: feature/my-branch │
7
+ * │ Base: main │
8
+ * │ │
9
+ * │ ┌──────────────────────────┐ │ <- Selectable spec box (full width)
10
+ * │ │ ▸ my-feature-spec │ │
11
+ * │ └──────────────────────────┘ │
12
+ * │ ┌──────────────────────────┐ │ <- Selectable alignment box (if exists)
13
+ * │ │ ▸ Alignment Doc │ │
14
+ * │ └──────────────────────────┘ │
15
+ * │ ┌──────────────────────────┐ │ <- Selectable e2e box (if exists)
16
+ * │ │ ▸ E2E Test Plan │ │
17
+ * │ └──────────────────────────┘ │
18
+ * │ │
19
+ * │ ── Active Agents ────────────│
20
+ * │ ┌──────────────────────────┐ │ <- Selectable agent box
21
+ * │ │ coordinator ● #01 │ │
22
+ * │ └──────────────────────────┘ │
23
+ * │ │
24
+ * │ ── Recent Activity ──────────│
25
+ * │ [12:34] Agent spawned │
26
+ * └──────────────────────────────┘
27
+ *
28
+ * Selection:
29
+ * - j/k navigates through docs + agents
30
+ * - Enter/Space on doc opens file viewer
31
+ * - x on agent deletes it
32
+ */
33
+
34
+ import blessed from 'blessed';
35
+
36
+ export interface AgentInfo {
37
+ name: string;
38
+ agentType: string;
39
+ promptNumber?: string;
40
+ isRunning: boolean;
41
+ }
42
+
43
+ export interface FileStates {
44
+ spec: boolean;
45
+ alignment: boolean;
46
+ e2eTestPlan: boolean;
47
+ }
48
+
49
+ export interface StatusPaneOptions {
50
+ onViewSpec?: () => void;
51
+ onViewAlignment?: () => void;
52
+ onViewE2ETestPlan?: () => void;
53
+ onDeleteAgent?: (agentName: string) => void;
54
+ }
55
+
56
+ export interface StatusPaneData {
57
+ spec?: string;
58
+ branch?: string;
59
+ agents: AgentInfo[];
60
+ logEntries?: string[];
61
+ fileStates?: FileStates;
62
+ options?: StatusPaneOptions;
63
+ }
64
+
65
+ /**
66
+ * Item types for selection tracking
67
+ */
68
+ export type SelectableItemType = 'spec' | 'alignment' | 'e2e' | 'agent';
69
+
70
+ export interface SelectableItem {
71
+ type: SelectableItemType;
72
+ agentName?: string; // Only for agent type
73
+ }
74
+
75
+ const HEADER_HEIGHT = 3;
76
+
77
+ /**
78
+ * Calculate the list of selectable items based on current state
79
+ */
80
+ export function getSelectableItems(
81
+ spec?: string,
82
+ fileStates?: FileStates,
83
+ agents: AgentInfo[] = []
84
+ ): SelectableItem[] {
85
+ const items: SelectableItem[] = [];
86
+
87
+ // Document items (only if they exist/are viewable)
88
+ if (spec) {
89
+ items.push({ type: 'spec' });
90
+ }
91
+ if (spec && fileStates?.alignment) {
92
+ items.push({ type: 'alignment' });
93
+ }
94
+ if (spec && fileStates?.e2eTestPlan) {
95
+ items.push({ type: 'e2e' });
96
+ }
97
+
98
+ // Agent items
99
+ for (const agent of agents) {
100
+ items.push({ type: 'agent', agentName: agent.name });
101
+ }
102
+
103
+ return items;
104
+ }
105
+
106
+ export function createStatusPane(
107
+ screen: blessed.Widgets.Screen,
108
+ agents: AgentInfo[],
109
+ selectedIndex?: number,
110
+ spec?: string,
111
+ branch?: string,
112
+ baseBranch?: string,
113
+ logEntries: string[] = [],
114
+ fileStates?: FileStates,
115
+ options?: StatusPaneOptions
116
+ ): blessed.Widgets.BoxElement {
117
+ const pane = blessed.box({
118
+ parent: screen,
119
+ top: HEADER_HEIGHT,
120
+ left: '50%+12',
121
+ width: '50%-12',
122
+ height: `100%-${HEADER_HEIGHT}`,
123
+ border: {
124
+ type: 'line',
125
+ },
126
+ label: ' Status ',
127
+ tags: true,
128
+ style: {
129
+ border: {
130
+ fg: '#4A34C5',
131
+ },
132
+ },
133
+ });
134
+
135
+ // Get the inner width for full-width boxes
136
+ const paneWidth = typeof pane.width === 'number' ? pane.width : 40;
137
+ const innerWidth = paneWidth - 4; // Account for pane borders and padding
138
+
139
+ let currentY = 0;
140
+
141
+ // Build selectable items list to track what index corresponds to what
142
+ const selectableItems = getSelectableItems(spec, fileStates, agents);
143
+ let currentSelectableIndex = 0;
144
+
145
+ // Branch line and base branch on separate lines for clarity
146
+ if (branch || baseBranch) {
147
+ if (branch) {
148
+ blessed.text({
149
+ parent: pane,
150
+ top: currentY,
151
+ left: 1,
152
+ content: `{#818cf8-fg}Branch:{/#818cf8-fg} {#c7d2fe-fg}${truncate(branch, 24)}{/#c7d2fe-fg}`,
153
+ tags: true,
154
+ });
155
+ currentY += 1;
156
+ }
157
+ if (baseBranch) {
158
+ blessed.text({
159
+ parent: pane,
160
+ top: currentY,
161
+ left: 1,
162
+ content: `{#5c6370-fg}Base: ${truncate(baseBranch, 26)}{/#5c6370-fg}`,
163
+ tags: true,
164
+ });
165
+ currentY += 1;
166
+ }
167
+ }
168
+
169
+ currentY += 1; // spacing before document links
170
+
171
+ // Document boxes section - full width, selectable
172
+ const DOC_BOX_HEIGHT = 3;
173
+
174
+ // Spec box - ALWAYS shows when spec is selected
175
+ if (spec) {
176
+ const isSelected = selectedIndex === currentSelectableIndex;
177
+ const specBox = blessed.box({
178
+ parent: pane,
179
+ top: currentY,
180
+ left: 1,
181
+ width: innerWidth,
182
+ height: DOC_BOX_HEIGHT,
183
+ border: { type: 'line' },
184
+ tags: true,
185
+ mouse: true,
186
+ style: {
187
+ border: { fg: isSelected ? '#a78bfa' : '#4A34C5' },
188
+ hover: { border: { fg: '#a78bfa' } },
189
+ },
190
+ });
191
+ const specLabel = isSelected
192
+ ? `{#a78bfa-fg}{bold}▸{/bold}{/#a78bfa-fg} {#e0e7ff-fg}{bold}${truncate(spec, innerWidth - 6)}{/bold}{/#e0e7ff-fg}`
193
+ : `{#a78bfa-fg}▸{/#a78bfa-fg} {#e0e7ff-fg}${truncate(spec, innerWidth - 6)}{/#e0e7ff-fg}`;
194
+ blessed.text({
195
+ parent: specBox,
196
+ top: 0,
197
+ left: 1,
198
+ content: specLabel,
199
+ tags: true,
200
+ });
201
+ specBox.on('click', () => options?.onViewSpec?.());
202
+ currentY += DOC_BOX_HEIGHT;
203
+ currentSelectableIndex++;
204
+ } else {
205
+ blessed.text({
206
+ parent: pane,
207
+ top: currentY,
208
+ left: 1,
209
+ content: '{#f59e0b-fg}No spec selected{/#f59e0b-fg}',
210
+ tags: true,
211
+ });
212
+ currentY += 1;
213
+ }
214
+
215
+ // Alignment Doc box (only if file exists)
216
+ if (spec && fileStates?.alignment) {
217
+ const isSelected = selectedIndex === currentSelectableIndex;
218
+ const alignBox = blessed.box({
219
+ parent: pane,
220
+ top: currentY,
221
+ left: 1,
222
+ width: innerWidth,
223
+ height: DOC_BOX_HEIGHT,
224
+ border: { type: 'line' },
225
+ tags: true,
226
+ mouse: true,
227
+ style: {
228
+ border: { fg: isSelected ? '#a78bfa' : '#4A34C5' },
229
+ hover: { border: { fg: '#a78bfa' } },
230
+ },
231
+ });
232
+ const alignLabel = isSelected
233
+ ? '{#a78bfa-fg}{bold}▸{/bold}{/#a78bfa-fg} {#e0e7ff-fg}{bold}Alignment Doc{/bold}{/#e0e7ff-fg}'
234
+ : '{#a78bfa-fg}▸{/#a78bfa-fg} {#e0e7ff-fg}Alignment Doc{/#e0e7ff-fg}';
235
+ blessed.text({
236
+ parent: alignBox,
237
+ top: 0,
238
+ left: 1,
239
+ content: alignLabel,
240
+ tags: true,
241
+ });
242
+ alignBox.on('click', () => options?.onViewAlignment?.());
243
+ currentY += DOC_BOX_HEIGHT;
244
+ currentSelectableIndex++;
245
+ }
246
+
247
+ // E2E Test Plan box (only if file exists)
248
+ if (spec && fileStates?.e2eTestPlan) {
249
+ const isSelected = selectedIndex === currentSelectableIndex;
250
+ const e2eBox = blessed.box({
251
+ parent: pane,
252
+ top: currentY,
253
+ left: 1,
254
+ width: innerWidth,
255
+ height: DOC_BOX_HEIGHT,
256
+ border: { type: 'line' },
257
+ tags: true,
258
+ mouse: true,
259
+ style: {
260
+ border: { fg: isSelected ? '#a78bfa' : '#4A34C5' },
261
+ hover: { border: { fg: '#a78bfa' } },
262
+ },
263
+ });
264
+ const e2eLabel = isSelected
265
+ ? '{#a78bfa-fg}{bold}▸{/bold}{/#a78bfa-fg} {#e0e7ff-fg}{bold}E2E Test Plan{/bold}{/#e0e7ff-fg}'
266
+ : '{#a78bfa-fg}▸{/#a78bfa-fg} {#e0e7ff-fg}E2E Test Plan{/#e0e7ff-fg}';
267
+ blessed.text({
268
+ parent: e2eBox,
269
+ top: 0,
270
+ left: 1,
271
+ content: e2eLabel,
272
+ tags: true,
273
+ });
274
+ e2eBox.on('click', () => options?.onViewE2ETestPlan?.());
275
+ currentY += DOC_BOX_HEIGHT;
276
+ currentSelectableIndex++;
277
+ }
278
+
279
+ currentY += 1;
280
+
281
+ // Separator
282
+ blessed.text({
283
+ parent: pane,
284
+ top: currentY,
285
+ left: 1,
286
+ content: '{#6366f1-fg}━━ Active Agents ━━{/#6366f1-fg}',
287
+ tags: true,
288
+ });
289
+ currentY += 1;
290
+
291
+ // Agent list (vertical, full width, selectable)
292
+ if (agents.length === 0) {
293
+ blessed.text({
294
+ parent: pane,
295
+ top: currentY,
296
+ left: 1,
297
+ content: '{239-fg}No active agents{/239-fg}',
298
+ tags: true,
299
+ });
300
+ currentY += 2;
301
+ } else {
302
+ const AGENT_BOX_HEIGHT = 3;
303
+
304
+ agents.forEach((agent, index) => {
305
+ const isSelected = selectedIndex === currentSelectableIndex;
306
+ const boxStyle = isSelected
307
+ ? { border: { fg: '#a78bfa' }, fg: 'white' }
308
+ : { border: { fg: '#3a3f5c' }, fg: 'white' };
309
+
310
+ const agentBox = blessed.box({
311
+ parent: pane,
312
+ top: currentY,
313
+ left: 1,
314
+ width: innerWidth,
315
+ height: AGENT_BOX_HEIGHT,
316
+ border: { type: 'line' },
317
+ tags: true,
318
+ mouse: true,
319
+ style: boxStyle,
320
+ });
321
+
322
+ // Agent name on the left, status indicator on the right
323
+ const displayName = truncate(agent.name, innerWidth - 12);
324
+ const nameStyle = isSelected ? '{bold}' : '';
325
+ const nameEndStyle = isSelected ? '{/bold}' : '';
326
+ blessed.text({
327
+ parent: agentBox,
328
+ top: 0,
329
+ left: 0,
330
+ content: `${nameStyle}${displayName}${nameEndStyle}`,
331
+ tags: true,
332
+ });
333
+
334
+ const statusLine = formatAgentStatus(agent);
335
+ blessed.text({
336
+ parent: agentBox,
337
+ top: 0,
338
+ right: 1,
339
+ content: statusLine,
340
+ tags: true,
341
+ });
342
+
343
+ // Click to select (could expand to show details)
344
+ agentBox.on('click', () => {
345
+ // For now, clicking just selects - x key will delete
346
+ });
347
+
348
+ currentY += AGENT_BOX_HEIGHT;
349
+ currentSelectableIndex++;
350
+ });
351
+
352
+ currentY += 1;
353
+ }
354
+
355
+ // Log stream section - calculate available space
356
+ // Pane inner height = pane height - 2 (borders) - 1 (help text at bottom)
357
+ const paneHeight = typeof pane.height === 'number' ? pane.height : 30;
358
+ const availableForLogs = paneHeight - 2 - 1 - currentY - 1; // -1 for "Recent Activity" header
359
+
360
+ // Only show logs section if there's space
361
+ if (availableForLogs > 1) {
362
+ blessed.text({
363
+ parent: pane,
364
+ top: currentY,
365
+ left: 1,
366
+ content: '{#6366f1-fg}━━ Recent Activity ━━{/#6366f1-fg}',
367
+ tags: true,
368
+ });
369
+ currentY += 1;
370
+
371
+ // Show as many log entries as will fit (newest first)
372
+ const maxLogLines = Math.max(0, availableForLogs - 1); // -1 for header already added
373
+ const recentLogs = logEntries.slice(-maxLogLines).reverse();
374
+
375
+ if (recentLogs.length === 0) {
376
+ blessed.text({
377
+ parent: pane,
378
+ top: currentY,
379
+ left: 1,
380
+ content: '{#5c6370-fg}No recent activity{/#5c6370-fg}',
381
+ tags: true,
382
+ });
383
+ } else {
384
+ recentLogs.forEach((entry, i) => {
385
+ // Truncate long entries
386
+ const truncatedEntry = entry.length > 35 ? entry.substring(0, 32) + '...' : entry;
387
+ blessed.text({
388
+ parent: pane,
389
+ top: currentY + i,
390
+ left: 1,
391
+ content: `{#8b92a8-fg}${truncatedEntry}{/#8b92a8-fg}`,
392
+ tags: true,
393
+ });
394
+ });
395
+ }
396
+ }
397
+
398
+ // Help text at bottom - show context-sensitive hint
399
+ const selectedItem = selectableItems[selectedIndex ?? -1];
400
+ let helpText = '{#5c6370-fg}[v] Full Log{/#5c6370-fg}';
401
+ if (selectedItem?.type === 'agent') {
402
+ helpText = '{#5c6370-fg}[x] Delete | [v] Log{/#5c6370-fg}';
403
+ } else if (selectedItem?.type === 'spec' || selectedItem?.type === 'alignment' || selectedItem?.type === 'e2e') {
404
+ helpText = '{#5c6370-fg}[Enter] View | [v] Log{/#5c6370-fg}';
405
+ }
406
+
407
+ blessed.text({
408
+ parent: pane,
409
+ bottom: 0,
410
+ left: 1,
411
+ content: helpText,
412
+ tags: true,
413
+ });
414
+
415
+ return pane;
416
+ }
417
+
418
+ function formatAgentStatus(agent: AgentInfo): string {
419
+ const indicator = agent.isRunning
420
+ ? '{green-fg}●{/green-fg}'
421
+ : '{red-fg}●{/red-fg}';
422
+
423
+ let info = indicator;
424
+ if (agent.promptNumber) {
425
+ info += ` #${agent.promptNumber}`;
426
+ }
427
+
428
+ return info;
429
+ }
430
+
431
+ function truncate(str: string, maxLen: number): string {
432
+ if (str.length <= maxLen) return str;
433
+ return str.substring(0, maxLen - 2) + '..';
434
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "lib": ["ES2022"],
5
+ "module": "NodeNext",
6
+ "moduleResolution": "NodeNext",
7
+ "esModuleInterop": true,
8
+ "allowSyntheticDefaultImports": true,
9
+ "strict": true,
10
+ "skipLibCheck": true,
11
+ "outDir": "./dist",
12
+ "rootDir": ".",
13
+ "declaration": true,
14
+ "resolveJsonModule": true,
15
+ "baseUrl": ".",
16
+ "paths": {
17
+ "@/*": ["./*"]
18
+ }
19
+ },
20
+ "include": ["src/**/*", "commands/**/*"],
21
+ "exclude": ["node_modules", "dist"]
22
+ }
@@ -0,0 +1,13 @@
1
+ import { defineConfig } from 'vitest/config';
2
+
3
+ export default defineConfig({
4
+ test: {
5
+ globals: false,
6
+ environment: 'node',
7
+ include: ['src/**/__tests__/**/*.test.ts'],
8
+ coverage: {
9
+ provider: 'v8',
10
+ reporter: ['text', 'json', 'html'],
11
+ },
12
+ },
13
+ });
@@ -0,0 +1,33 @@
1
+ ## Functional Pillars of This Harness
2
+
3
+ These are the load-bearing approaches that realize the First Principles in `principles.md`. Principles define **why**; pillars define **what** the harness structurally delivers.
4
+
5
+ ### 1. Prompt-Driven Execution Loop
6
+ Prompt files are atomic units of work executed in tracked loops. Planned prompts deliver scoped tasks from the planner; emergent prompts are created by the emergent planner as non-overlapping hypotheses for executors to implement. Both follow the same execution primitive — the distinction is origin (planned vs emergent-generated), not execution path. Alignment documents track summaries and decisions across iterations.
7
+
8
+ ### 2. Knowledge Compounding
9
+ Everything feeds forward. Branch-scoped ephemeral artifacts — pain points, decisions, learnings — distill into persistent knowledge: solutions, memories, and domain documentation. Future initiatives benefit from all past work through structured retrieval at key planning and discovery points.
10
+
11
+ ### 3. Approach Discoverability
12
+ Unified tooling makes knowledge and implementation patterns accessible. Embedded documentation search, semantic code analysis, and sub-agent delegation for scoped retrieval — both codebase-specific and external research. Reduces the cost of finding relevant context to near-zero.
13
+
14
+ ### 4. Skills as Domain Practices
15
+ Codebase-specific domain knowledge tuned from execution experience. Not documentation but operational guidance — how to use tools, what patterns to follow, what to avoid. Explicitly accessible per domain. Refined through compounding cycles so future agents inherit hard-won learnings.
16
+
17
+ ### 5. Context-Abstracted Tooling
18
+ CLI commands, MCP tools, and context handlers that process externally, withholding raw data from agent context windows. Oracle delegation for LLM-enabled deterministic tasks. Deterministic tools applied stochastically by agents via flow-suggested use cases.
19
+
20
+ ### 6. Progressive Flow Architecture
21
+ Instruction sets disclosed progressively as agents need them. Flows reference flows, enabling diverse path-finding through predetermined decision trees. Agents work within scoped guidelines toward specific goals without seeing the full system at once.
22
+
23
+ ### 7. Schema-Driven File Contracts
24
+ Single source of configuration for how workflow-critical files are structured. Validated on write, eliminating programmatic dependencies. Stochastic agents write to deterministic contracts across ephemeral and persisted files — one schema definition governs interpretation and authoring system-wide.
25
+
26
+ ### 8. Initiative-Based Orchestration
27
+ Harness-managed workflows for milestone development, investigation, optimization, refactoring, documentation, and triage — unified under a single entry point (New Initiative). **Workflow domain configs** (`.allhands/workflows/`) encode per-domain knowledge consumed by shared flows: ideation scoping adapts interview depth, spec planning calibrates research and jury gating, and the emergent planner caps tangential hypotheses — all driven by a single config file per domain rather than separate hardcoded flows. **Initiative steering** provides mid-execution deep replanning with domain-aware scope adjustment, pausing the prompt loop while the engineer redirects goals, modifies prompts, and amends alignment. The **two-phase emergence model** (core consolidation → tangential exploration) focuses emergent work on core goals first, then broadens to adjacent improvements once the initiative's foundation is solid. TMUX orchestration, lifecycle management, observability (tracing), TUI capabilities, and coding agent hook injection for maximum engineer visibility and control. Templated message injection provides workflow-state-specific context to dependent agents.
28
+
29
+ ### 9. Disposable Software & Variant Exploration
30
+ Open decisions become emergent implementations behind feature flags. The emergent planner creates batches of non-overlapping hypotheses as prompt files; executors implement them as disposable variants. Multiple solutions to the same problem enable quality engineering: engineers choose conventions, kill weak approaches, or refine into A/B tests for production end-user validation. The coordinator filters unwanted emergent work from PRs via existing refinement analysis. Cheap software development with good guardrails and expectation setting during ideation.
31
+
32
+ ### 10. Agentic Validation Tooling
33
+ Programmatic validation that decouples engineers from the implementation loop. Deterministic tooling (tests, migrations, type checks) provides quantitative pass/fail gating for CI/CD and regression prevention. Stochastic tooling (UI automation, log analysis, performance profiling) provides qualitative assessment via agent judgment. Both modes are first-class, discoverable, and compound through execution learnings — enabling engineers to focus on ideation and quality control while agents validate implementation against prepared expectations.
@@ -0,0 +1,88 @@
1
+ ## First Principles Driving This Architecture
2
+
3
+ ### 1. Context is Precious
4
+ **Problem**: Agents degrade with large context windows. Too much information = worse decisions.
5
+
6
+ **Solution**:
7
+ - Isolated units of work (prompt files) with minimal scope (3-5 tasks)
8
+ - Shared information is concise and intentional (alignment docs, not full history)
9
+ - Progressive disclosure - agents only see what they need, when they need it
10
+ - Loop architecture naturally bounds context per execution
11
+
12
+ ### 2. Prompt Files as Units of Work
13
+ **Why this structure**:
14
+ - **Language of implementation**: Prompts ARE the tasks, not descriptions of tasks
15
+ - **Tokens of coordination**: Other agents (planners, reviewers) speak in prompt files
16
+ - **Iterative refinement**: Same prompt can be re-run with accumulated learnings
17
+ - **Record of decisions**: Completed prompts document what was decided, not just done
18
+ - **Novely Emerges**: Prompt tasking is optimal for agent hypothesis and implementation to validate
19
+
20
+ ### 3. Ideation First
21
+ **Why front-load exploration**:
22
+ - Prevents low-level decision fatigue during implementation
23
+ - Discovers limitations early (before they block progress)
24
+ - Allows engineers to go as deep as desired during ideation
25
+ - Compounds on roadmap dependencies regardless of implementation order
26
+ - Consolidates user expectations, desires, concerns upfront
27
+
28
+ ### 4. Quality Engineering (Not Quantity Engineering)
29
+ **The shift**:
30
+ - With cheap software, the question isn't "can we build it?" but "which variant is best?"
31
+ - Plan agents turn open questions into **variant prompt files with validation requirements**
32
+ - Engineering effort goes to **quality control of variants**, not implementation
33
+ - Decision points: consolidate to convention, kill, or ship for A/B testing
34
+
35
+ ### 5. Frontier Models are Capable
36
+ **What agents minimally need**:
37
+ - Control flows as core direction (not micromanagement)
38
+ - Critical motivations for their allocated responsibility
39
+ - Knowledge of how/when to call harness tooling
40
+ - They turn **why** and **what** into **how**
41
+
42
+ ### 6. Agentic Validation Tooling
43
+ **Why tight validation**:
44
+ - Programmatic validation > human supervision
45
+ - Strict acceptance criteria make prompt work verifiable
46
+ - Types of validation: tests, UI automation, profiling, script results
47
+ - Makes engineering supervision redundant for routine checks
48
+ - Validation tooling is infrastructure - assess gaps before planning, create via specs
49
+ - **Two dimensions**: Every validation domain has a stochastic dimension (agent-driven exploratory testing using model intuition) and a deterministic dimension (binary pass/fail gating for CI/CD). Both are first-class.
50
+ - **Crystallization lifecycle**: Stochastic exploration discovers patterns → patterns crystallize into deterministic checks → deterministic checks entrench in CI/CD → stochastic exploration shifts to the frontier. This is how validation compounds.
51
+ - **Suite existence threshold**: A validation suite must have a meaningful stochastic dimension to justify existing. Deterministic-only tools (type checking, linting, formatting) are test commands referenced directly in acceptance criteria and CI/CD — they are not suites.
52
+
53
+ ### 7. Knowledge Compounding
54
+ **Everything feeds forward**:
55
+ - Decisions, pivots, limitations, disagreements
56
+ - Realizations, best practices, preferences
57
+ - The harness implementation itself improves with use
58
+ - Future tasks benefit from all past work
59
+
60
+
61
+ ---
62
+
63
+ ## Core Philosophy: This Harness Enables The Model-First Company
64
+
65
+ The harness exists to facilitate a fundamental shift in how software organizations operate:
66
+
67
+ ### 1. Software is Cheap, Expertise is Valuable
68
+ - AI has made code generation nearly free
69
+ - The bottleneck is now **ideation** and **quality judgment**
70
+ - The harness optimizes for capturing human expertise and translating it to agent-executable work
71
+
72
+ ### 2. Product is Centralized
73
+ - Single source of truth: codebase + connected services + compounded validation
74
+ - Anyone can "talk to the product" through the harness
75
+ - Removes knowledge silos between teams
76
+
77
+ ### 3. New Organizational Roles
78
+ | Traditional | Model-First |
79
+ |------------|-------------|
80
+ | Developers write code | **Product Stakeholders** test, ideate, design |
81
+ | Managers coordinate | **Product Engineers** scope, orchestrate, release |
82
+ | Hierarchies gatekeep | Hierarchies become redundant |
83
+
84
+ ### 4. Ship Fast, Hide Uncertainty
85
+ - Push frequently to main
86
+ - Feature flags hide incomplete work
87
+ - Convention is safe; experimentation is cheap
88
+
@@ -0,0 +1,51 @@
1
+ # Alignment Doc Schema
2
+ # Single source of truth for alignment document structure
3
+
4
+ frontmatter:
5
+ spec_name:
6
+ type: string
7
+ required: true
8
+ description: "Name of the spec this alignment doc serves"
9
+
10
+ spec_path:
11
+ type: string
12
+ required: true
13
+ description: "Path to the spec file"
14
+
15
+ validation_gaps_accepted:
16
+ type: array
17
+ items: string
18
+ required: false
19
+ description: "Validation gaps engineer accepted (e.g., 'No E2E - manual UI testing')"
20
+
21
+ core_consolidation:
22
+ type: enum
23
+ required: false
24
+ values: [pending, complete]
25
+ default: pending
26
+ description: "Emergence phase tracking — pending for core goal consolidation, complete enables tangential exploration"
27
+
28
+ body:
29
+ description: "Markdown document with header and append sections"
30
+ sections:
31
+ - name: "Overview"
32
+ required: true
33
+ description: "High-level overview of spec motivations and goals"
34
+
35
+ - name: "Hard User Requirements"
36
+ required: true
37
+ description: "Concise, immutable user requirements. Guidelines for emergent work."
38
+
39
+ - name: "Engineer Decisions"
40
+ required: false
41
+ description: "ONLY deviations - do NOT record when engineer accepts recommendations. Captures: recommended → chosen instead → reasoning."
42
+
43
+ - name: "Prompt Summaries"
44
+ required: false
45
+ appended_by: "executor"
46
+ description: "Appended after prompt execution, not during planning."
47
+ format: |
48
+ ### ##-prompt-file-name.prompt.md
49
+ **Decision**: The most important decisions that were made during implementation
50
+ **Files**: List of key files of interest from the commit
51
+ **Summary**: Very brief explanation of implementation
@@ -0,0 +1,10 @@
1
+ # Documentation Doc Schema
2
+ # Single source of truth for documentation document structure
3
+
4
+ frontmatter:
5
+ description:
6
+ type: string
7
+ required: true
8
+ description: "1-2 sentence summary enabling semantic search discovery / understanding of this document's purpose"
9
+
10
+ body: "No strict schema - just ensure code references are done via format: [ref:<file_path>:<symbol_name>] or [ref:<file_path>] (if no symbol is possible to include for the reference). Ensure that file references are used INSTEAD of code snippets."