create-hq 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (310) hide show
  1. package/dist/deps.d.ts +4 -0
  2. package/dist/deps.d.ts.map +1 -0
  3. package/dist/deps.js +65 -0
  4. package/dist/deps.js.map +1 -0
  5. package/dist/git.d.ts +3 -0
  6. package/dist/git.d.ts.map +1 -0
  7. package/dist/git.js +19 -0
  8. package/dist/git.js.map +1 -0
  9. package/dist/index.d.ts +3 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +23 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/scaffold.d.ts +8 -0
  14. package/dist/scaffold.d.ts.map +1 -0
  15. package/dist/scaffold.js +130 -0
  16. package/dist/scaffold.js.map +1 -0
  17. package/dist/ui.d.ts +7 -0
  18. package/dist/ui.d.ts.map +1 -0
  19. package/dist/ui.js +36 -0
  20. package/dist/ui.js.map +1 -0
  21. package/package.json +41 -0
  22. package/template/.claude/CLAUDE.md +202 -0
  23. package/template/.claude/commands/checkpoint.md +127 -0
  24. package/template/.claude/commands/cleanup.md +307 -0
  25. package/template/.claude/commands/execute-task.md +440 -0
  26. package/template/.claude/commands/exit-plan.md +41 -0
  27. package/template/.claude/commands/handoff.md +97 -0
  28. package/template/.claude/commands/learn.md +218 -0
  29. package/template/.claude/commands/metrics.md +118 -0
  30. package/template/.claude/commands/newworker.md +162 -0
  31. package/template/.claude/commands/nexttask.md +67 -0
  32. package/template/.claude/commands/prd.md +238 -0
  33. package/template/.claude/commands/reanchor.md +51 -0
  34. package/template/.claude/commands/remember.md +126 -0
  35. package/template/.claude/commands/run-project.md +348 -0
  36. package/template/.claude/commands/run.md +110 -0
  37. package/template/.claude/commands/search-reindex.md +62 -0
  38. package/template/.claude/commands/search.md +100 -0
  39. package/template/.claude/commands/setup.md +381 -0
  40. package/template/.claude/scripts/pure-ralph-loop.ps1 +312 -0
  41. package/template/.claude/scripts/pure-ralph-loop.sh +859 -0
  42. package/template/CHANGELOG.md +220 -0
  43. package/template/LICENSE +21 -0
  44. package/template/MIGRATION.md +259 -0
  45. package/template/README.md +368 -0
  46. package/template/data/journal/.gitkeep +0 -0
  47. package/template/docs/images/ascii-banner-options.md +122 -0
  48. package/template/docs/images/hq-banner.svg +105 -0
  49. package/template/knowledge/Ralph/01-overview.md +71 -0
  50. package/template/knowledge/Ralph/02-core-concepts.md +114 -0
  51. package/template/knowledge/Ralph/03-how-ralph-works.md +184 -0
  52. package/template/knowledge/Ralph/04-back-pressure.md +222 -0
  53. package/template/knowledge/Ralph/05-specifications.md +210 -0
  54. package/template/knowledge/Ralph/06-agents-md.md +222 -0
  55. package/template/knowledge/Ralph/07-implementation.md +316 -0
  56. package/template/knowledge/Ralph/08-economics.md +182 -0
  57. package/template/knowledge/Ralph/09-resources.md +145 -0
  58. package/template/knowledge/Ralph/10-claude-code-workflow.md +212 -0
  59. package/template/knowledge/Ralph/11-team-training-guide.md +383 -0
  60. package/template/knowledge/Ralph/README.md +40 -0
  61. package/template/knowledge/ai-security-framework/CONTRIBUTING.md +139 -0
  62. package/template/knowledge/ai-security-framework/GLOSSARY.md +176 -0
  63. package/template/knowledge/ai-security-framework/LICENSE +21 -0
  64. package/template/knowledge/ai-security-framework/QUICK-START.md +172 -0
  65. package/template/knowledge/ai-security-framework/README.md +232 -0
  66. package/template/knowledge/ai-security-framework/checklists/browser-security.md +301 -0
  67. package/template/knowledge/ai-security-framework/checklists/credential-isolation.md +322 -0
  68. package/template/knowledge/ai-security-framework/checklists/incident-response.md +288 -0
  69. package/template/knowledge/ai-security-framework/checklists/pre-flight.md +249 -0
  70. package/template/knowledge/ai-security-framework/checklists/weekly-audit.md +159 -0
  71. package/template/knowledge/ai-security-framework/configs/audit-logging.md +372 -0
  72. package/template/knowledge/ai-security-framework/configs/kill-switches.md +354 -0
  73. package/template/knowledge/ai-security-framework/docs/01-core-principles.md +256 -0
  74. package/template/knowledge/ai-security-framework/docs/02-threat-landscape.md +326 -0
  75. package/template/knowledge/ai-security-framework/docs/03-security-posture.md +250 -0
  76. package/template/knowledge/ai-security-framework/templates/agents-security.md +233 -0
  77. package/template/knowledge/design-styles/README.md +42 -0
  78. package/template/knowledge/design-styles/american-industrial.md +136 -0
  79. package/template/knowledge/design-styles/ethereal-abstract.md +133 -0
  80. package/template/knowledge/design-styles/liminal-portal.md +111 -0
  81. package/template/knowledge/design-styles/swipes/american-industrial/G-3m4YPW0AADdu2.jpeg +0 -0
  82. package/template/knowledge/design-styles/swipes/american-industrial/G-JJlt5WwAABK3K.png +0 -0
  83. package/template/knowledge/design-styles/swipes/american-industrial/G-JJmj5W0AEbJ-7.png +0 -0
  84. package/template/knowledge/design-styles/swipes/american-industrial/G59fgNuXkAAKLJQ (1).jpeg +0 -0
  85. package/template/knowledge/design-styles/swipes/american-industrial/G59fgNuXkAAKLJQ.jpeg +0 -0
  86. package/template/knowledge/design-styles/swipes/american-industrial/G7fVkn3WEAAM-ST.jpeg +0 -0
  87. package/template/knowledge/design-styles/swipes/american-industrial/G8ECO5JWEAIksyn.png +0 -0
  88. package/template/knowledge/design-styles/swipes/american-industrial/G9-3GQSWoAA8eqZ.png +0 -0
  89. package/template/knowledge/design-styles/swipes/american-industrial/G9xEOqrXkAEZRcs.png +0 -0
  90. package/template/knowledge/design-styles/swipes/american-industrial/G_MVeJrXQAA8sx4.jpeg +0 -0
  91. package/template/knowledge/design-styles/swipes/american-industrial/G_RSkmGXkAAgAVZ.png +0 -0
  92. package/template/knowledge/design-styles/swipes/american-industrial/README.md +31 -0
  93. package/template/knowledge/design-styles/swipes/american-industrial/qyqtg7Dq.png +0 -0
  94. package/template/knowledge/dev-team/README.md +35 -0
  95. package/template/knowledge/dev-team/patterns/README.md +34 -0
  96. package/template/knowledge/dev-team/patterns/frontend/react-best-practices.md +178 -0
  97. package/template/knowledge/dev-team/troubleshooting/README.md +31 -0
  98. package/template/knowledge/dev-team/workflows/README.md +49 -0
  99. package/template/knowledge/hq/checkpoint-schema.json +51 -0
  100. package/template/knowledge/hq/index-md-spec.md +74 -0
  101. package/template/knowledge/hq/thread-schema.md +153 -0
  102. package/template/knowledge/hq-core/checkpoint-schema.json +51 -0
  103. package/template/knowledge/hq-core/index-md-spec.md +74 -0
  104. package/template/knowledge/hq-core/thread-schema.md +153 -0
  105. package/template/knowledge/loom/README.md +51 -0
  106. package/template/knowledge/loom/architecture.md +125 -0
  107. package/template/knowledge/loom/code-style.md +169 -0
  108. package/template/knowledge/loom/llm-proxy.md +132 -0
  109. package/template/knowledge/loom/state-machine.md +131 -0
  110. package/template/knowledge/loom/thread-system.md +117 -0
  111. package/template/knowledge/loom/tools.md +94 -0
  112. package/template/knowledge/loom/weaver.md +96 -0
  113. package/template/knowledge/loom/web-frontend.md +131 -0
  114. package/template/knowledge/projects/README.md +72 -0
  115. package/template/knowledge/projects/templates/README.template.md +28 -0
  116. package/template/knowledge/workers/README.md +195 -0
  117. package/template/knowledge/workers/ralph-loop-pattern.md +157 -0
  118. package/template/knowledge/workers/skill-schema.md +182 -0
  119. package/template/knowledge/workers/state-machine.md +102 -0
  120. package/template/knowledge/workers/templates/base-worker.yaml +73 -0
  121. package/template/knowledge/workers/templates/code-worker.yaml +85 -0
  122. package/template/knowledge/workers/templates/skill.yaml +49 -0
  123. package/template/knowledge/workers/templates/social-worker.yaml +70 -0
  124. package/template/modules/examples/full-manifest.yaml +92 -0
  125. package/template/modules/examples/minimal.yaml +14 -0
  126. package/template/modules/modules.yaml +59 -0
  127. package/template/projects/.gitkeep +0 -0
  128. package/template/projects/incorporate-workers-into-pure-ralph/prd.json +88 -0
  129. package/template/projects/pure-ralph-branch-isolation/README.md +114 -0
  130. package/template/projects/pure-ralph-branch-isolation/prd.json +123 -0
  131. package/template/projects/purist-ralph-loop/README.md +148 -0
  132. package/template/projects/purist-ralph-loop/prd.json +135 -0
  133. package/template/projects/ralph-test/prd.json +50 -0
  134. package/template/prompts/pure-ralph-base.md +551 -0
  135. package/template/settings/.gitkeep +0 -0
  136. package/template/settings/pure-ralph.json +42 -0
  137. package/template/social-content/drafts/INDEX.md +21 -0
  138. package/template/social-content/drafts/linkedin/.gitkeep +1 -0
  139. package/template/social-content/drafts/x/.gitkeep +1 -0
  140. package/template/social-content/images/.gitkeep +1 -0
  141. package/template/starter-projects/code-worker/README.md +97 -0
  142. package/template/starter-projects/code-worker/prd.json +45 -0
  143. package/template/starter-projects/personal-assistant/README.md +42 -0
  144. package/template/starter-projects/personal-assistant/prd.json +43 -0
  145. package/template/starter-projects/social-media/README.md +60 -0
  146. package/template/starter-projects/social-media/prd.json +43 -0
  147. package/template/workers/content-brand/README.md +59 -0
  148. package/template/workers/content-brand/skills/messaging-alignment.md +91 -0
  149. package/template/workers/content-brand/skills/tone-check.md +76 -0
  150. package/template/workers/content-brand/skills/voice-analysis.md +68 -0
  151. package/template/workers/content-brand/worker.yaml +81 -0
  152. package/template/workers/content-legal/README.md +80 -0
  153. package/template/workers/content-legal/skills/claim-substantiation.md +150 -0
  154. package/template/workers/content-legal/skills/compliance-scan.md +123 -0
  155. package/template/workers/content-legal/skills/disclaimer-check.md +146 -0
  156. package/template/workers/content-legal/worker.yaml +118 -0
  157. package/template/workers/content-product/README.md +77 -0
  158. package/template/workers/content-product/skills/claim-verification.md +96 -0
  159. package/template/workers/content-product/skills/feature-accuracy.md +117 -0
  160. package/template/workers/content-product/skills/stats-check.md +128 -0
  161. package/template/workers/content-product/worker.yaml +97 -0
  162. package/template/workers/content-sales/README.md +70 -0
  163. package/template/workers/content-sales/skills/conversion-analysis.md +96 -0
  164. package/template/workers/content-sales/skills/cta-audit.md +107 -0
  165. package/template/workers/content-sales/skills/value-prop-check.md +114 -0
  166. package/template/workers/content-sales/worker.yaml +93 -0
  167. package/template/workers/content-shared/cli.ts +242 -0
  168. package/template/workers/content-shared/index.ts +234 -0
  169. package/template/workers/content-shared/lib/accuracy-analyzer.ts +661 -0
  170. package/template/workers/content-shared/lib/analyze.ts +370 -0
  171. package/template/workers/content-shared/lib/brand-analyzer.ts +526 -0
  172. package/template/workers/content-shared/lib/cms-integration.ts +446 -0
  173. package/template/workers/content-shared/lib/compliance-analyzer.ts +655 -0
  174. package/template/workers/content-shared/lib/conversion-analyzer.ts +555 -0
  175. package/template/workers/content-shared/lib/github-integration.ts +582 -0
  176. package/template/workers/content-shared/lib/output.ts +373 -0
  177. package/template/workers/content-shared/lib/parser.ts +771 -0
  178. package/template/workers/content-shared/lib/priority.ts +439 -0
  179. package/template/workers/content-shared/lib/recommendations.ts +512 -0
  180. package/template/workers/content-shared/lib/reporter.ts +749 -0
  181. package/template/workers/content-shared/lib/restructure.ts +664 -0
  182. package/template/workers/content-shared/lib/scorer.ts +140 -0
  183. package/template/workers/content-shared/lib/types.ts +227 -0
  184. package/template/workers/content-shared/lib/variants.ts +595 -0
  185. package/template/workers/content-shared/package.json +51 -0
  186. package/template/workers/content-shared/pnpm-lock.yaml +39 -0
  187. package/template/workers/content-shared/test/sample-page.json +115 -0
  188. package/template/workers/content-shared/tsconfig.json +20 -0
  189. package/template/workers/dev-team/README.md +166 -0
  190. package/template/workers/dev-team/_template.yaml +70 -0
  191. package/template/workers/dev-team/architect/package.json +27 -0
  192. package/template/workers/dev-team/architect/skills/api-design.md +89 -0
  193. package/template/workers/dev-team/architect/skills/refactor-plan.md +96 -0
  194. package/template/workers/dev-team/architect/skills/system-design.md +100 -0
  195. package/template/workers/dev-team/architect/src/index.ts +49 -0
  196. package/template/workers/dev-team/architect/src/mcp-server.ts +122 -0
  197. package/template/workers/dev-team/architect/src/skills/api-design.ts +316 -0
  198. package/template/workers/dev-team/architect/src/skills/refactor-plan.ts +264 -0
  199. package/template/workers/dev-team/architect/src/skills/system-design.ts +212 -0
  200. package/template/workers/dev-team/architect/tsconfig.json +19 -0
  201. package/template/workers/dev-team/architect/worker.yaml +128 -0
  202. package/template/workers/dev-team/backend-dev/package-lock.json +1252 -0
  203. package/template/workers/dev-team/backend-dev/package.json +27 -0
  204. package/template/workers/dev-team/backend-dev/skills/implement-endpoint.md +70 -0
  205. package/template/workers/dev-team/backend-dev/skills/implement-service.md +62 -0
  206. package/template/workers/dev-team/backend-dev/src/index.ts +51 -0
  207. package/template/workers/dev-team/backend-dev/src/mcp-server.ts +109 -0
  208. package/template/workers/dev-team/backend-dev/src/skills/implement-endpoint.ts +122 -0
  209. package/template/workers/dev-team/backend-dev/src/skills/implement-service.ts +126 -0
  210. package/template/workers/dev-team/backend-dev/tsconfig.json +19 -0
  211. package/template/workers/dev-team/backend-dev/worker.yaml +128 -0
  212. package/template/workers/dev-team/code-reviewer/package-lock.json +1080 -0
  213. package/template/workers/dev-team/code-reviewer/package.json +24 -0
  214. package/template/workers/dev-team/code-reviewer/skills/merge-to-production.md +61 -0
  215. package/template/workers/dev-team/code-reviewer/skills/merge-to-staging.md +54 -0
  216. package/template/workers/dev-team/code-reviewer/skills/request-changes.md +63 -0
  217. package/template/workers/dev-team/code-reviewer/skills/review-pr.md +77 -0
  218. package/template/workers/dev-team/code-reviewer/src/index.ts +56 -0
  219. package/template/workers/dev-team/code-reviewer/src/mcp-server.ts +101 -0
  220. package/template/workers/dev-team/code-reviewer/tsconfig.json +19 -0
  221. package/template/workers/dev-team/code-reviewer/worker.yaml +90 -0
  222. package/template/workers/dev-team/database-dev/package.json +22 -0
  223. package/template/workers/dev-team/database-dev/skills/create-schema.md +48 -0
  224. package/template/workers/dev-team/database-dev/src/index.ts +50 -0
  225. package/template/workers/dev-team/database-dev/src/mcp-server.ts +76 -0
  226. package/template/workers/dev-team/database-dev/tsconfig.json +18 -0
  227. package/template/workers/dev-team/database-dev/worker.yaml +90 -0
  228. package/template/workers/dev-team/frontend-dev/package.json +22 -0
  229. package/template/workers/dev-team/frontend-dev/skills/create-component.md +26 -0
  230. package/template/workers/dev-team/frontend-dev/src/index.ts +50 -0
  231. package/template/workers/dev-team/frontend-dev/src/mcp-server.ts +77 -0
  232. package/template/workers/dev-team/frontend-dev/tsconfig.json +18 -0
  233. package/template/workers/dev-team/frontend-dev/worker.yaml +132 -0
  234. package/template/workers/dev-team/infra-dev/package.json +24 -0
  235. package/template/workers/dev-team/infra-dev/skills/add-monitoring.md +73 -0
  236. package/template/workers/dev-team/infra-dev/skills/configure-deployment.md +80 -0
  237. package/template/workers/dev-team/infra-dev/skills/create-dockerfile.md +62 -0
  238. package/template/workers/dev-team/infra-dev/skills/setup-cicd.md +63 -0
  239. package/template/workers/dev-team/infra-dev/src/index.ts +55 -0
  240. package/template/workers/dev-team/infra-dev/src/mcp-server.ts +82 -0
  241. package/template/workers/dev-team/infra-dev/tsconfig.json +19 -0
  242. package/template/workers/dev-team/infra-dev/worker.yaml +92 -0
  243. package/template/workers/dev-team/knowledge-curator/package.json +24 -0
  244. package/template/workers/dev-team/knowledge-curator/skills/curate-troubleshooting.md +63 -0
  245. package/template/workers/dev-team/knowledge-curator/skills/process-learnings.md +61 -0
  246. package/template/workers/dev-team/knowledge-curator/skills/sync-documentation.md +76 -0
  247. package/template/workers/dev-team/knowledge-curator/skills/update-patterns.md +63 -0
  248. package/template/workers/dev-team/knowledge-curator/src/index.ts +53 -0
  249. package/template/workers/dev-team/knowledge-curator/src/mcp-server.ts +92 -0
  250. package/template/workers/dev-team/knowledge-curator/tsconfig.json +19 -0
  251. package/template/workers/dev-team/knowledge-curator/worker.yaml +80 -0
  252. package/template/workers/dev-team/motion-designer/package.json +22 -0
  253. package/template/workers/dev-team/motion-designer/skills/add-animation.md +25 -0
  254. package/template/workers/dev-team/motion-designer/skills/generate-image.md +36 -0
  255. package/template/workers/dev-team/motion-designer/src/index.ts +63 -0
  256. package/template/workers/dev-team/motion-designer/src/mcp-server.ts +79 -0
  257. package/template/workers/dev-team/motion-designer/tsconfig.json +18 -0
  258. package/template/workers/dev-team/motion-designer/worker.yaml +84 -0
  259. package/template/workers/dev-team/product-planner/queue.json +4 -0
  260. package/template/workers/dev-team/product-planner/worker.yaml +220 -0
  261. package/template/workers/dev-team/project-manager/package-lock.json +1252 -0
  262. package/template/workers/dev-team/project-manager/package.json +27 -0
  263. package/template/workers/dev-team/project-manager/skills/create-prd.md +66 -0
  264. package/template/workers/dev-team/project-manager/skills/next-issue.md +51 -0
  265. package/template/workers/dev-team/project-manager/skills/project-status.md +59 -0
  266. package/template/workers/dev-team/project-manager/skills/update-learnings.md +65 -0
  267. package/template/workers/dev-team/project-manager/src/index.ts +54 -0
  268. package/template/workers/dev-team/project-manager/src/mcp-server.ts +207 -0
  269. package/template/workers/dev-team/project-manager/src/skills/create-prd.ts +86 -0
  270. package/template/workers/dev-team/project-manager/src/skills/next-issue.ts +137 -0
  271. package/template/workers/dev-team/project-manager/src/skills/project-status.ts +131 -0
  272. package/template/workers/dev-team/project-manager/src/skills/update-learnings.ts +94 -0
  273. package/template/workers/dev-team/project-manager/tsconfig.json +19 -0
  274. package/template/workers/dev-team/project-manager/worker.yaml +96 -0
  275. package/template/workers/dev-team/qa-tester/package.json +24 -0
  276. package/template/workers/dev-team/qa-tester/skills/create-demo-account.md +36 -0
  277. package/template/workers/dev-team/qa-tester/skills/run-tests.md +36 -0
  278. package/template/workers/dev-team/qa-tester/skills/write-test.md +27 -0
  279. package/template/workers/dev-team/qa-tester/src/index.ts +61 -0
  280. package/template/workers/dev-team/qa-tester/src/mcp-server.ts +88 -0
  281. package/template/workers/dev-team/qa-tester/tsconfig.json +18 -0
  282. package/template/workers/dev-team/qa-tester/worker.yaml +116 -0
  283. package/template/workers/dev-team/task-executor/package-lock.json +1252 -0
  284. package/template/workers/dev-team/task-executor/package.json +27 -0
  285. package/template/workers/dev-team/task-executor/skills/analyze-issue.md +101 -0
  286. package/template/workers/dev-team/task-executor/skills/execute.md +133 -0
  287. package/template/workers/dev-team/task-executor/skills/report-learnings.md +106 -0
  288. package/template/workers/dev-team/task-executor/skills/validate-completion.md +121 -0
  289. package/template/workers/dev-team/task-executor/src/index.ts +54 -0
  290. package/template/workers/dev-team/task-executor/src/mcp-server.ts +139 -0
  291. package/template/workers/dev-team/task-executor/src/skills/analyze-issue.ts +219 -0
  292. package/template/workers/dev-team/task-executor/src/skills/execute.ts +132 -0
  293. package/template/workers/dev-team/task-executor/src/skills/report-learnings.ts +119 -0
  294. package/template/workers/dev-team/task-executor/src/skills/validate-completion.ts +142 -0
  295. package/template/workers/dev-team/task-executor/tsconfig.json +19 -0
  296. package/template/workers/dev-team/task-executor/worker.yaml +110 -0
  297. package/template/workers/registry.yaml +171 -0
  298. package/template/workers/security-scanner/README.md +73 -0
  299. package/template/workers/security-scanner/skills/pre-deploy-check.md +205 -0
  300. package/template/workers/security-scanner/worker.yaml +26 -0
  301. package/template/workspace/checkpoints/.gitkeep +0 -0
  302. package/template/workspace/content-ideas/inbox.jsonl +0 -0
  303. package/template/workspace/drafts/.gitkeep +0 -0
  304. package/template/workspace/learnings/.gitkeep +3 -0
  305. package/template/workspace/orchestrator/.gitkeep +0 -0
  306. package/template/workspace/ralph-test/COMPLETE.md +18 -0
  307. package/template/workspace/ralph-test/hello.txt +2 -0
  308. package/template/workspace/reports/.gitkeep +0 -0
  309. package/template/workspace/scratch/.gitkeep +0 -0
  310. package/template/workspace/threads/.gitkeep +3 -0
@@ -0,0 +1,74 @@
1
+ # INDEX.md Specification
2
+
3
+ Standard for hierarchical INDEX.md files across HQ directories.
4
+
5
+ ## Template
6
+
7
+ ```markdown
8
+ # {Directory Name}
9
+
10
+ > Auto-generated. Updated: {YYYY-MM-DD}
11
+
12
+ | Name | Description |
13
+ |------|-------------|
14
+ | `item/` | 1-line description |
15
+ ```
16
+
17
+ Optional 1-2 line notes section at bottom for usage hints (e.g., "Load workers via `/run {id}`").
18
+
19
+ ## Description Extraction
20
+
21
+ | File type | Source |
22
+ |-----------|--------|
23
+ | `.md` | First `#` heading |
24
+ | `.yaml` | `description:` field |
25
+ | `.json` | `name` or `description` field |
26
+ | Directory | File count + purpose summary |
27
+
28
+ Max 80 chars per description. If no metadata extractable, use filename.
29
+
30
+ ## Variants
31
+
32
+ - `projects/INDEX.md` → add `Status` column (active/completed/archived)
33
+ - `workspace/orchestrator/INDEX.md` → add `Progress` column (e.g. "5/11 45%")
34
+ - `workspace/reports/INDEX.md` → add `Date` column
35
+
36
+ ## Locations (10 directories)
37
+
38
+ 1. `projects/`
39
+ 2. `companies/{company-1}/knowledge/`
40
+ 3. `companies/{company-2}/knowledge/`
41
+ 4. `companies/{company-3}/knowledge/`
42
+ 5. `knowledge/`
43
+ 6. `workers/public/`
44
+ 7. `workers/private/`
45
+ 8. `workspace/orchestrator/`
46
+ 9. `workspace/reports/`
47
+ 10. `workspace/social-drafts/`
48
+
49
+ Root `INDEX.md` and `workspace/threads/INDEX.md` also exist but follow their own formats.
50
+
51
+ ## Regeneration Rules
52
+
53
+ - Always full-rewrite (not incremental patch). Idempotent.
54
+ - Skip: `INDEX.md` itself, `.DS_Store`, `node_modules/`, dotfiles
55
+ - Sort entries: directories first, then files, alphabetical within each group
56
+ - Timestamp: use current date in YYYY-MM-DD format
57
+
58
+ ## Update Triggers
59
+
60
+ | Command | INDEX.md files updated |
61
+ |---------|----------------------|
62
+ | `/checkpoint` | Root, threads/, + touched company knowledge dirs |
63
+ | `/handoff` | Root, threads/, orchestrator/, + touched company knowledge dirs |
64
+ | `/reanchor` | Validates freshness, reads indexes for context |
65
+ | `/cleanup --reindex` | ALL INDEX.md files (full rebuild) |
66
+ | `/prd` | `projects/` |
67
+ | `/run-project` | `projects/`, `workspace/orchestrator/` |
68
+ | `/newworker` | `workers/public/` or `workers/private/` |
69
+ | `/contentidea`, `/suggestposts`, `/post-now` | `workspace/social-drafts/` |
70
+ | Report generation | `workspace/reports/` |
71
+
72
+ ## qmd
73
+
74
+ INDEX.md files are excluded from qmd indexing via `.qmdignore`. They are navigation aids, not searchable content.
@@ -0,0 +1,153 @@
1
+ # Thread Schema
2
+
3
+ Threads persist complete session state including conversation summary, git context, and worker execution info. Inspired by Loom's thread-system.
4
+
5
+ ## Location
6
+
7
+ `workspace/threads/{thread_id}.json`
8
+
9
+ ## Thread ID Format
10
+
11
+ `T-{YYYYMMDD}-{HHMMSS}-{slug}`
12
+
13
+ Example: `T-20260123-143052-mrr-report`
14
+
15
+ ## Schema
16
+
17
+ ```json
18
+ {
19
+ "thread_id": "T-20260123-143052-mrr-report",
20
+ "version": 1,
21
+ "created_at": "2026-01-23T14:30:52.000Z",
22
+ "updated_at": "2026-01-23T14:35:00.000Z",
23
+
24
+ "workspace_root": "~/Documents/HQ",
25
+ "cwd": "repos/private/{company}",
26
+
27
+ "git": {
28
+ "branch": "main",
29
+ "remote_url": "git@github.com:user/repo.git",
30
+ "initial_commit": "abc1234",
31
+ "current_commit": "def5678",
32
+ "commits_made": [
33
+ "def5678: feat: add MRR calculation"
34
+ ],
35
+ "dirty": false
36
+ },
37
+
38
+ "worker": {
39
+ "id": "{worker-id}",
40
+ "skill": "mrr",
41
+ "state": "completed",
42
+ "started_at": "2026-01-23T14:30:52.000Z",
43
+ "completed_at": "2026-01-23T14:35:00.000Z"
44
+ },
45
+
46
+ "conversation_summary": "Generated MRR report showing $45,230 current MRR with 3.2% growth",
47
+ "files_touched": [
48
+ "workspace/reports/finance/2026-01-23-mrr.md"
49
+ ],
50
+ "next_steps": [],
51
+
52
+ "metadata": {
53
+ "title": "MRR Report Jan 2026",
54
+ "tags": ["finance", "{company}", "mrr"]
55
+ }
56
+ }
57
+ ```
58
+
59
+ ## Fields
60
+
61
+ ### Core
62
+
63
+ | Field | Type | Description |
64
+ |-------|------|-------------|
65
+ | `thread_id` | string | Unique identifier |
66
+ | `version` | number | Schema version (currently 1) |
67
+ | `created_at` | ISO8601 | Thread creation time |
68
+ | `updated_at` | ISO8601 | Last update time |
69
+
70
+ ### Context
71
+
72
+ | Field | Type | Description |
73
+ |-------|------|-------------|
74
+ | `workspace_root` | string | HQ root path |
75
+ | `cwd` | string | Working directory (relative to root) |
76
+
77
+ ### Git State
78
+
79
+ | Field | Type | Description |
80
+ |-------|------|-------------|
81
+ | `git.branch` | string | Current branch |
82
+ | `git.remote_url` | string | Origin remote URL |
83
+ | `git.initial_commit` | string | Commit SHA at thread start |
84
+ | `git.current_commit` | string | Commit SHA at thread end |
85
+ | `git.commits_made` | string[] | Commits created during session |
86
+ | `git.dirty` | boolean | Uncommitted changes present |
87
+
88
+ ### Worker State
89
+
90
+ | Field | Type | Description |
91
+ |-------|------|-------------|
92
+ | `worker.id` | string | Worker ID (if applicable) |
93
+ | `worker.skill` | string | Skill executed |
94
+ | `worker.state` | enum | `idle`, `loading`, `executing`, `verifying`, `completed`, `error` |
95
+ | `worker.started_at` | ISO8601 | Execution start |
96
+ | `worker.completed_at` | ISO8601 | Execution end |
97
+
98
+ ### Results
99
+
100
+ | Field | Type | Description |
101
+ |-------|------|-------------|
102
+ | `conversation_summary` | string | What was accomplished |
103
+ | `files_touched` | string[] | Files created/modified |
104
+ | `next_steps` | string[] | Remaining work |
105
+
106
+ ### Metadata
107
+
108
+ | Field | Type | Description |
109
+ |-------|------|-------------|
110
+ | `metadata.title` | string | Human-readable title |
111
+ | `metadata.tags` | string[] | Searchable tags |
112
+
113
+ ## State Values
114
+
115
+ Worker states follow the FSM:
116
+
117
+ ```
118
+ idle → loading → executing → verifying → completed
119
+
120
+ error
121
+ ```
122
+
123
+ ## Usage
124
+
125
+ ### Creating a Thread
126
+
127
+ ```bash
128
+ # Captured by /checkpoint command
129
+ /checkpoint mrr-report
130
+ ```
131
+
132
+ ### Searching Threads
133
+
134
+ ```bash
135
+ # Via /search command
136
+ /search mrr
137
+ ```
138
+
139
+ ### Listing Recent
140
+
141
+ ```bash
142
+ ls -lt workspace/threads/ | head -10
143
+ ```
144
+
145
+ ## Backward Compatibility
146
+
147
+ Old checkpoints in `workspace/checkpoints/` remain valid. Threads are a superset with richer git context.
148
+
149
+ ## See Also
150
+
151
+ - [Loom thread-system](../loom/thread-system.md) - Inspiration
152
+ - `/checkpoint` command - Creates threads
153
+ - `/search` command - Searches threads
@@ -0,0 +1,51 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "hq-checkpoint-schema",
4
+ "title": "HQ Checkpoint Schema",
5
+ "description": "Canonical checkpoint format for HQ task progress tracking",
6
+ "type": "object",
7
+ "required": ["task_id", "completed_at", "summary"],
8
+ "properties": {
9
+ "task_id": {
10
+ "type": "string",
11
+ "description": "Unique identifier for the task (e.g., US-001, feature-name)"
12
+ },
13
+ "completed_at": {
14
+ "type": "string",
15
+ "format": "date-time",
16
+ "description": "ISO8601 timestamp when checkpoint was created"
17
+ },
18
+ "summary": {
19
+ "type": "string",
20
+ "description": "Brief description of work completed"
21
+ },
22
+ "files_touched": {
23
+ "type": "array",
24
+ "items": { "type": "string" },
25
+ "description": "List of files modified during this work"
26
+ },
27
+ "build_passed": {
28
+ "type": "boolean",
29
+ "description": "Whether build/tests passed after this work"
30
+ },
31
+ "commit": {
32
+ "type": "string",
33
+ "description": "Git commit hash if code was committed"
34
+ },
35
+ "next_steps": {
36
+ "type": "array",
37
+ "items": { "type": "string" },
38
+ "description": "Suggested next actions for future sessions"
39
+ },
40
+ "notes": {
41
+ "type": "string",
42
+ "description": "Additional context or observations"
43
+ },
44
+ "metadata": {
45
+ "type": "object",
46
+ "description": "Arbitrary additional data",
47
+ "additionalProperties": true
48
+ }
49
+ },
50
+ "additionalProperties": false
51
+ }
@@ -0,0 +1,74 @@
1
+ # INDEX.md Specification
2
+
3
+ Standard for hierarchical INDEX.md files across HQ directories.
4
+
5
+ ## Template
6
+
7
+ ```markdown
8
+ # {Directory Name}
9
+
10
+ > Auto-generated. Updated: {YYYY-MM-DD}
11
+
12
+ | Name | Description |
13
+ |------|-------------|
14
+ | `item/` | 1-line description |
15
+ ```
16
+
17
+ Optional 1-2 line notes section at bottom for usage hints (e.g., "Load workers via `/run {id}`").
18
+
19
+ ## Description Extraction
20
+
21
+ | File type | Source |
22
+ |-----------|--------|
23
+ | `.md` | First `#` heading |
24
+ | `.yaml` | `description:` field |
25
+ | `.json` | `name` or `description` field |
26
+ | Directory | File count + purpose summary |
27
+
28
+ Max 80 chars per description. If no metadata extractable, use filename.
29
+
30
+ ## Variants
31
+
32
+ - `projects/INDEX.md` → add `Status` column (active/completed/archived)
33
+ - `workspace/orchestrator/INDEX.md` → add `Progress` column (e.g. "5/11 45%")
34
+ - `workspace/reports/INDEX.md` → add `Date` column
35
+
36
+ ## Locations (10 directories)
37
+
38
+ 1. `projects/`
39
+ 2. `companies/{company-1}/knowledge/`
40
+ 3. `companies/{company-2}/knowledge/`
41
+ 4. `companies/{company-3}/knowledge/`
42
+ 5. `knowledge/`
43
+ 6. `workers/public/`
44
+ 7. `workers/private/`
45
+ 8. `workspace/orchestrator/`
46
+ 9. `workspace/reports/`
47
+ 10. `workspace/social-drafts/`
48
+
49
+ Root `INDEX.md` and `workspace/threads/INDEX.md` also exist but follow their own formats.
50
+
51
+ ## Regeneration Rules
52
+
53
+ - Always full-rewrite (not incremental patch). Idempotent.
54
+ - Skip: `INDEX.md` itself, `.DS_Store`, `node_modules/`, dotfiles
55
+ - Sort entries: directories first, then files, alphabetical within each group
56
+ - Timestamp: use current date in YYYY-MM-DD format
57
+
58
+ ## Update Triggers
59
+
60
+ | Command | INDEX.md files updated |
61
+ |---------|----------------------|
62
+ | `/checkpoint` | Root, threads/, + touched company knowledge dirs |
63
+ | `/handoff` | Root, threads/, orchestrator/, + touched company knowledge dirs |
64
+ | `/reanchor` | Validates freshness, reads indexes for context |
65
+ | `/cleanup --reindex` | ALL INDEX.md files (full rebuild) |
66
+ | `/prd` | `projects/` |
67
+ | `/run-project` | `projects/`, `workspace/orchestrator/` |
68
+ | `/newworker` | `workers/public/` or `workers/private/` |
69
+ | `/contentidea`, `/suggestposts`, `/post-now` | `workspace/social-drafts/` |
70
+ | Report generation | `workspace/reports/` |
71
+
72
+ ## qmd
73
+
74
+ INDEX.md files are excluded from qmd indexing via `.qmdignore`. They are navigation aids, not searchable content.
@@ -0,0 +1,153 @@
1
+ # Thread Schema
2
+
3
+ Threads persist complete session state including conversation summary, git context, and worker execution info. Inspired by Loom's thread-system.
4
+
5
+ ## Location
6
+
7
+ `workspace/threads/{thread_id}.json`
8
+
9
+ ## Thread ID Format
10
+
11
+ `T-{YYYYMMDD}-{HHMMSS}-{slug}`
12
+
13
+ Example: `T-20260123-143052-mrr-report`
14
+
15
+ ## Schema
16
+
17
+ ```json
18
+ {
19
+ "thread_id": "T-20260123-143052-mrr-report",
20
+ "version": 1,
21
+ "created_at": "2026-01-23T14:30:52.000Z",
22
+ "updated_at": "2026-01-23T14:35:00.000Z",
23
+
24
+ "workspace_root": "~/Documents/HQ",
25
+ "cwd": "repos/private/{company}",
26
+
27
+ "git": {
28
+ "branch": "main",
29
+ "remote_url": "git@github.com:user/repo.git",
30
+ "initial_commit": "abc1234",
31
+ "current_commit": "def5678",
32
+ "commits_made": [
33
+ "def5678: feat: add MRR calculation"
34
+ ],
35
+ "dirty": false
36
+ },
37
+
38
+ "worker": {
39
+ "id": "{worker-id}",
40
+ "skill": "mrr",
41
+ "state": "completed",
42
+ "started_at": "2026-01-23T14:30:52.000Z",
43
+ "completed_at": "2026-01-23T14:35:00.000Z"
44
+ },
45
+
46
+ "conversation_summary": "Generated MRR report showing $45,230 current MRR with 3.2% growth",
47
+ "files_touched": [
48
+ "workspace/reports/finance/2026-01-23-mrr.md"
49
+ ],
50
+ "next_steps": [],
51
+
52
+ "metadata": {
53
+ "title": "MRR Report Jan 2026",
54
+ "tags": ["finance", "{company}", "mrr"]
55
+ }
56
+ }
57
+ ```
58
+
59
+ ## Fields
60
+
61
+ ### Core
62
+
63
+ | Field | Type | Description |
64
+ |-------|------|-------------|
65
+ | `thread_id` | string | Unique identifier |
66
+ | `version` | number | Schema version (currently 1) |
67
+ | `created_at` | ISO8601 | Thread creation time |
68
+ | `updated_at` | ISO8601 | Last update time |
69
+
70
+ ### Context
71
+
72
+ | Field | Type | Description |
73
+ |-------|------|-------------|
74
+ | `workspace_root` | string | HQ root path |
75
+ | `cwd` | string | Working directory (relative to root) |
76
+
77
+ ### Git State
78
+
79
+ | Field | Type | Description |
80
+ |-------|------|-------------|
81
+ | `git.branch` | string | Current branch |
82
+ | `git.remote_url` | string | Origin remote URL |
83
+ | `git.initial_commit` | string | Commit SHA at thread start |
84
+ | `git.current_commit` | string | Commit SHA at thread end |
85
+ | `git.commits_made` | string[] | Commits created during session |
86
+ | `git.dirty` | boolean | Uncommitted changes present |
87
+
88
+ ### Worker State
89
+
90
+ | Field | Type | Description |
91
+ |-------|------|-------------|
92
+ | `worker.id` | string | Worker ID (if applicable) |
93
+ | `worker.skill` | string | Skill executed |
94
+ | `worker.state` | enum | `idle`, `loading`, `executing`, `verifying`, `completed`, `error` |
95
+ | `worker.started_at` | ISO8601 | Execution start |
96
+ | `worker.completed_at` | ISO8601 | Execution end |
97
+
98
+ ### Results
99
+
100
+ | Field | Type | Description |
101
+ |-------|------|-------------|
102
+ | `conversation_summary` | string | What was accomplished |
103
+ | `files_touched` | string[] | Files created/modified |
104
+ | `next_steps` | string[] | Remaining work |
105
+
106
+ ### Metadata
107
+
108
+ | Field | Type | Description |
109
+ |-------|------|-------------|
110
+ | `metadata.title` | string | Human-readable title |
111
+ | `metadata.tags` | string[] | Searchable tags |
112
+
113
+ ## State Values
114
+
115
+ Worker states follow the FSM:
116
+
117
+ ```
118
+ idle → loading → executing → verifying → completed
119
+
120
+ error
121
+ ```
122
+
123
+ ## Usage
124
+
125
+ ### Creating a Thread
126
+
127
+ ```bash
128
+ # Captured by /checkpoint command
129
+ /checkpoint mrr-report
130
+ ```
131
+
132
+ ### Searching Threads
133
+
134
+ ```bash
135
+ # Via /search command
136
+ /search mrr
137
+ ```
138
+
139
+ ### Listing Recent
140
+
141
+ ```bash
142
+ ls -lt workspace/threads/ | head -10
143
+ ```
144
+
145
+ ## Backward Compatibility
146
+
147
+ Old checkpoints in `workspace/checkpoints/` remain valid. Threads are a superset with richer git context.
148
+
149
+ ## See Also
150
+
151
+ - [Loom thread-system](../loom/thread-system.md) - Inspiration
152
+ - `/checkpoint` command - Creates threads
153
+ - `/search` command - Searches threads
@@ -0,0 +1,51 @@
1
+ # Loom
2
+
3
+ AI-powered coding agent built in Rust by Geoffrey Huntley.
4
+
5
+ **Repo**: `repos/public/loom/` | **GitHub**: https://github.com/ghuntley/loom
6
+
7
+ ## What Is Loom?
8
+
9
+ Loom is a REPL-based AI coding agent with:
10
+ - **96 Rust crates** organized as a Cargo workspace
11
+ - **Server-side LLM proxy** - API keys never leave the server
12
+ - **Tool system** for file ops, bash, web search
13
+ - **Weaver** - remote execution via K8s pods
14
+ - **Svelte 5 web frontend**
15
+
16
+ ## Core Principles
17
+
18
+ 1. **Modularity** - Clean separation via trait implementations
19
+ 2. **Extensibility** - Easy addition of LLM providers and tools
20
+ 3. **Reliability** - Retry mechanisms, structured logging
21
+
22
+ ## Knowledge Base
23
+
24
+ | Doc | Description |
25
+ |-----|-------------|
26
+ | [architecture.md](architecture.md) | System design, crate organization, tech stack |
27
+ | [state-machine.md](state-machine.md) | Core agent loop (7-state FSM) |
28
+ | [tools.md](tools.md) | Tool trait, registry, built-in tools |
29
+ | [llm-proxy.md](llm-proxy.md) | LLM provider abstraction, SSE streaming |
30
+ | [thread-system.md](thread-system.md) | Conversation persistence, search |
31
+ | [weaver.md](weaver.md) | Remote execution, K8s, WireGuard |
32
+ | [web-frontend.md](web-frontend.md) | Svelte 5 runes, xstate patterns |
33
+ | [code-style.md](code-style.md) | Rust/Svelte conventions |
34
+
35
+ ## Quick Reference
36
+
37
+ ```
38
+ loom/
39
+ ├── crates/ # 96 Rust crates
40
+ ├── web/loom-web/ # Svelte 5 frontend
41
+ ├── specs/ # 57 design specs
42
+ ├── infra/ # Nix/K8s infrastructure
43
+ └── AGENTS.md # Development guidelines
44
+ ```
45
+
46
+ ## Key Files
47
+
48
+ - `AGENTS.md` - Build commands, deployment, code style
49
+ - `specs/README.md` - Spec index by category
50
+ - `specs/state-machine.md` - Agent FSM spec
51
+ - `crates/loom-common-core/src/` - Core types and state machine
@@ -0,0 +1,125 @@
1
+ # Loom Architecture
2
+
3
+ ## Workspace Layout
4
+
5
+ ```
6
+ loom/
7
+ ├── crates/ # 96 Rust crates
8
+ ├── web/loom-web/ # Svelte 5 frontend
9
+ ├── specs/ # 57 design specifications
10
+ ├── infra/ # Nix/K8s infrastructure
11
+ │ ├── nixos-modules/
12
+ │ ├── pkgs/
13
+ │ └── machines/
14
+ ├── docker/ # Container configs
15
+ ├── scripts/ # Build utilities
16
+ ├── tools/ # Tool definitions
17
+ └── ide/vscode/ # VS Code extension
18
+ ```
19
+
20
+ ## Crate Categories
21
+
22
+ ### Core (shared types & abstractions)
23
+ | Crate | Purpose |
24
+ |-------|---------|
25
+ | `loom-common-core` | State machine, agent, LLM types, tool types |
26
+ | `loom-common-thread` | Thread/conversation model |
27
+ | `loom-common-config` | Shared configuration |
28
+ | `loom-common-http` | reqwest wrapper with retry |
29
+ | `loom-common-secret` | Secret handling (auto-redact) |
30
+
31
+ ### CLI
32
+ | Crate | Purpose |
33
+ |-------|---------|
34
+ | `loom-cli` | Main CLI application |
35
+ | `loom-cli-tools` | Tool implementations |
36
+ | `loom-cli-auto-commit` | Git auto-commit hook |
37
+ | `loom-cli-git` | Git integration |
38
+ | `loom-cli-spool` | VCS (spool/jj) support |
39
+
40
+ ### Server
41
+ | Crate | Purpose |
42
+ |-------|---------|
43
+ | `loom-server` | HTTP API (axum), migrations, main service |
44
+ | `loom-server-api` | API endpoints |
45
+ | `loom-server-db` | SQLite via sqlx |
46
+ | `loom-server-llm-service` | LLM orchestration |
47
+ | `loom-server-llm-proxy` | Client-side proxy handling |
48
+ | `loom-server-llm-anthropic` | Claude integration |
49
+ | `loom-server-llm-openai` | OpenAI integration |
50
+ | `loom-server-llm-vertex` | Google Vertex AI |
51
+
52
+ ### Server Auth
53
+ | Crate | Purpose |
54
+ |-------|---------|
55
+ | `loom-server-auth` | Auth framework |
56
+ | `loom-server-auth-github` | GitHub OAuth |
57
+ | `loom-server-auth-google` | Google OAuth |
58
+ | `loom-server-auth-magiclink` | Magic link auth |
59
+ | `loom-server-auth-okta` | Okta SAML |
60
+ | `loom-server-auth-devicecode` | Device code flow |
61
+
62
+ ### TUI (Terminal UI)
63
+ | Crate | Purpose |
64
+ |-------|---------|
65
+ | `loom-tui-app` | Main TUI application |
66
+ | `loom-tui-core` | Core types |
67
+ | `loom-tui-component` | Component framework |
68
+ | `loom-tui-widget-*` | Widgets (header, input, markdown, message-list, modal, scrollable, spinner, status-bar, thread-list, tool-panel) |
69
+
70
+ ### Observability
71
+ | Crate | Purpose |
72
+ |-------|---------|
73
+ | `loom-analytics` | PostHog-style analytics |
74
+ | `loom-crash` | Crash reporting |
75
+ | `loom-crons` | Cron job monitoring |
76
+ | `loom-server-sessions` | Session tracking |
77
+
78
+ ### Weaver (Remote Execution)
79
+ | Crate | Purpose |
80
+ |-------|---------|
81
+ | `loom-weaver-*` | Remote execution stack |
82
+ | `loom-wgtunnel-*` | WireGuard tunneling |
83
+ | `loom-weaver-ebpf` | eBPF syscall tracing |
84
+
85
+ ## Server-Client Architecture
86
+
87
+ ```
88
+ ┌─────────────┐ HTTP ┌─────────────┐ Provider API ┌─────────────┐
89
+ │ loom-cli │ ───────────────▶│ loom-server │ ──────────────────▶ │ Anthropic │
90
+ │ │ /proxy/{provider}│ │ │ OpenAI │
91
+ │ ProxyLlm- │ /complete │ LlmService │ │ Vertex AI │
92
+ │ Client │ /stream │ │ │ │
93
+ └─────────────┘ ◀───────────── └─────────────┘ ◀────────────────── └─────────────┘
94
+ SSE stream SSE stream
95
+ ```
96
+
97
+ **Key insight**: API keys stay server-side. Clients use proxy endpoints.
98
+
99
+ ## Tech Stack
100
+
101
+ | Layer | Technology |
102
+ |-------|------------|
103
+ | Backend | Rust, Tokio async runtime, axum HTTP |
104
+ | Database | SQLite with sqlx |
105
+ | Web Frontend | Svelte 5 (runes), SvelteKit, Tailwind CSS 4, xstate |
106
+ | Build | Cargo, Nix (cargo2nix for reproducible builds) |
107
+ | Containers | Nix + Docker |
108
+ | Orchestration | Kubernetes (for Weaver pods) |
109
+ | i18n | GNU gettext with Lingui |
110
+ | Testing | proptest (property-based), vitest (web) |
111
+ | TUI | Ratatui 0.30 |
112
+
113
+ ## Database
114
+
115
+ - SQLite via sqlx with compile-time query checking
116
+ - Migrations in `crates/loom-server/migrations/`
117
+ - Naming: `NNN_description.sql` (e.g., `020_scm_repos.sql`)
118
+ - Auto-run on server startup
119
+
120
+ ## Deployment
121
+
122
+ - Production runs NixOS with auto-update
123
+ - `git push origin trunk` triggers deployment
124
+ - Update service polls every 10 seconds
125
+ - Health endpoint: `https://loom.ghuntley.com/health`