gsd-trae 1.0.1 → 1.0.2

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 (761) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/assets/screenshot.png +0 -0
  3. package/package.json +9 -2
  4. package/.claude/settings.local.json +0 -8
  5. package/.gitmodules +0 -6
  6. package/.trae/rules/project_rules.md +0 -56
  7. package/.vscode/code-counter/code-counter.db +0 -0
  8. package/.vscode/settings.json +0 -6
  9. package/refs/gsd/.github/CODEOWNERS +0 -2
  10. package/refs/gsd/.github/FUNDING.yml +0 -1
  11. package/refs/gsd/.github/ISSUE_TEMPLATE/bug_report.yml +0 -59
  12. package/refs/gsd/.github/ISSUE_TEMPLATE/feature_request.yml +0 -37
  13. package/refs/gsd/.github/pull_request_template.md +0 -24
  14. package/refs/gsd/.github/workflows/auto-label-issues.yml +0 -21
  15. package/refs/gsd/CHANGELOG.md +0 -1520
  16. package/refs/gsd/LICENSE +0 -21
  17. package/refs/gsd/README.md +0 -704
  18. package/refs/gsd/SECURITY.md +0 -33
  19. package/refs/gsd/agents/gsd-codebase-mapper.md +0 -764
  20. package/refs/gsd/agents/gsd-debugger.md +0 -1246
  21. package/refs/gsd/agents/gsd-executor.md +0 -469
  22. package/refs/gsd/agents/gsd-integration-checker.md +0 -443
  23. package/refs/gsd/agents/gsd-phase-researcher.md +0 -546
  24. package/refs/gsd/agents/gsd-plan-checker.md +0 -690
  25. package/refs/gsd/agents/gsd-planner.md +0 -1275
  26. package/refs/gsd/agents/gsd-project-researcher.md +0 -621
  27. package/refs/gsd/agents/gsd-research-synthesizer.md +0 -239
  28. package/refs/gsd/agents/gsd-roadmapper.md +0 -642
  29. package/refs/gsd/agents/gsd-verifier.md +0 -573
  30. package/refs/gsd/assets/gsd-logo-2000-transparent.png +0 -0
  31. package/refs/gsd/assets/gsd-logo-2000-transparent.svg +0 -17
  32. package/refs/gsd/assets/gsd-logo-2000.png +0 -0
  33. package/refs/gsd/assets/gsd-logo-2000.svg +0 -21
  34. package/refs/gsd/assets/terminal.svg +0 -68
  35. package/refs/gsd/bin/install.js +0 -2090
  36. package/refs/gsd/commands/gsd/add-phase.md +0 -43
  37. package/refs/gsd/commands/gsd/add-tests.md +0 -41
  38. package/refs/gsd/commands/gsd/add-todo.md +0 -47
  39. package/refs/gsd/commands/gsd/audit-milestone.md +0 -36
  40. package/refs/gsd/commands/gsd/check-todos.md +0 -45
  41. package/refs/gsd/commands/gsd/cleanup.md +0 -18
  42. package/refs/gsd/commands/gsd/complete-milestone.md +0 -136
  43. package/refs/gsd/commands/gsd/debug.md +0 -167
  44. package/refs/gsd/commands/gsd/discuss-phase.md +0 -83
  45. package/refs/gsd/commands/gsd/execute-phase.md +0 -41
  46. package/refs/gsd/commands/gsd/health.md +0 -22
  47. package/refs/gsd/commands/gsd/help.md +0 -22
  48. package/refs/gsd/commands/gsd/insert-phase.md +0 -32
  49. package/refs/gsd/commands/gsd/join-discord.md +0 -18
  50. package/refs/gsd/commands/gsd/list-phase-assumptions.md +0 -46
  51. package/refs/gsd/commands/gsd/map-codebase.md +0 -71
  52. package/refs/gsd/commands/gsd/new-milestone.md +0 -44
  53. package/refs/gsd/commands/gsd/new-project.md +0 -42
  54. package/refs/gsd/commands/gsd/new-project.md.bak +0 -1041
  55. package/refs/gsd/commands/gsd/pause-work.md +0 -38
  56. package/refs/gsd/commands/gsd/plan-milestone-gaps.md +0 -34
  57. package/refs/gsd/commands/gsd/plan-phase.md +0 -45
  58. package/refs/gsd/commands/gsd/progress.md +0 -24
  59. package/refs/gsd/commands/gsd/quick.md +0 -41
  60. package/refs/gsd/commands/gsd/reapply-patches.md +0 -110
  61. package/refs/gsd/commands/gsd/remove-phase.md +0 -31
  62. package/refs/gsd/commands/gsd/research-phase.md +0 -189
  63. package/refs/gsd/commands/gsd/resume-work.md +0 -40
  64. package/refs/gsd/commands/gsd/set-profile.md +0 -34
  65. package/refs/gsd/commands/gsd/settings.md +0 -36
  66. package/refs/gsd/commands/gsd/update.md +0 -37
  67. package/refs/gsd/commands/gsd/verify-work.md +0 -38
  68. package/refs/gsd/docs/USER-GUIDE.md +0 -471
  69. package/refs/gsd/docs/context-monitor.md +0 -96
  70. package/refs/gsd/get-shit-done/bin/gsd-tools.cjs +0 -585
  71. package/refs/gsd/get-shit-done/bin/lib/commands.cjs +0 -553
  72. package/refs/gsd/get-shit-done/bin/lib/config.cjs +0 -162
  73. package/refs/gsd/get-shit-done/bin/lib/core.cjs +0 -411
  74. package/refs/gsd/get-shit-done/bin/lib/frontmatter.cjs +0 -299
  75. package/refs/gsd/get-shit-done/bin/lib/init.cjs +0 -710
  76. package/refs/gsd/get-shit-done/bin/lib/milestone.cjs +0 -215
  77. package/refs/gsd/get-shit-done/bin/lib/phase.cjs +0 -870
  78. package/refs/gsd/get-shit-done/bin/lib/roadmap.cjs +0 -298
  79. package/refs/gsd/get-shit-done/bin/lib/state.cjs +0 -521
  80. package/refs/gsd/get-shit-done/bin/lib/template.cjs +0 -222
  81. package/refs/gsd/get-shit-done/bin/lib/verify.cjs +0 -772
  82. package/refs/gsd/get-shit-done/references/checkpoints.md +0 -776
  83. package/refs/gsd/get-shit-done/references/continuation-format.md +0 -249
  84. package/refs/gsd/get-shit-done/references/decimal-phase-calculation.md +0 -65
  85. package/refs/gsd/get-shit-done/references/git-integration.md +0 -248
  86. package/refs/gsd/get-shit-done/references/git-planning-commit.md +0 -38
  87. package/refs/gsd/get-shit-done/references/model-profile-resolution.md +0 -34
  88. package/refs/gsd/get-shit-done/references/model-profiles.md +0 -92
  89. package/refs/gsd/get-shit-done/references/phase-argument-parsing.md +0 -61
  90. package/refs/gsd/get-shit-done/references/planning-config.md +0 -196
  91. package/refs/gsd/get-shit-done/references/questioning.md +0 -145
  92. package/refs/gsd/get-shit-done/references/tdd.md +0 -263
  93. package/refs/gsd/get-shit-done/references/ui-brand.md +0 -160
  94. package/refs/gsd/get-shit-done/references/verification-patterns.md +0 -612
  95. package/refs/gsd/get-shit-done/templates/DEBUG.md +0 -164
  96. package/refs/gsd/get-shit-done/templates/UAT.md +0 -247
  97. package/refs/gsd/get-shit-done/templates/VALIDATION.md +0 -76
  98. package/refs/gsd/get-shit-done/templates/codebase/architecture.md +0 -255
  99. package/refs/gsd/get-shit-done/templates/codebase/concerns.md +0 -310
  100. package/refs/gsd/get-shit-done/templates/codebase/conventions.md +0 -307
  101. package/refs/gsd/get-shit-done/templates/codebase/integrations.md +0 -280
  102. package/refs/gsd/get-shit-done/templates/codebase/stack.md +0 -186
  103. package/refs/gsd/get-shit-done/templates/codebase/structure.md +0 -285
  104. package/refs/gsd/get-shit-done/templates/codebase/testing.md +0 -480
  105. package/refs/gsd/get-shit-done/templates/config.json +0 -37
  106. package/refs/gsd/get-shit-done/templates/context.md +0 -283
  107. package/refs/gsd/get-shit-done/templates/continue-here.md +0 -78
  108. package/refs/gsd/get-shit-done/templates/debug-subagent-prompt.md +0 -91
  109. package/refs/gsd/get-shit-done/templates/discovery.md +0 -146
  110. package/refs/gsd/get-shit-done/templates/milestone-archive.md +0 -123
  111. package/refs/gsd/get-shit-done/templates/milestone.md +0 -115
  112. package/refs/gsd/get-shit-done/templates/phase-prompt.md +0 -569
  113. package/refs/gsd/get-shit-done/templates/planner-subagent-prompt.md +0 -117
  114. package/refs/gsd/get-shit-done/templates/project.md +0 -184
  115. package/refs/gsd/get-shit-done/templates/requirements.md +0 -231
  116. package/refs/gsd/get-shit-done/templates/research-project/ARCHITECTURE.md +0 -204
  117. package/refs/gsd/get-shit-done/templates/research-project/FEATURES.md +0 -147
  118. package/refs/gsd/get-shit-done/templates/research-project/PITFALLS.md +0 -200
  119. package/refs/gsd/get-shit-done/templates/research-project/STACK.md +0 -120
  120. package/refs/gsd/get-shit-done/templates/research-project/SUMMARY.md +0 -170
  121. package/refs/gsd/get-shit-done/templates/research.md +0 -552
  122. package/refs/gsd/get-shit-done/templates/retrospective.md +0 -54
  123. package/refs/gsd/get-shit-done/templates/roadmap.md +0 -202
  124. package/refs/gsd/get-shit-done/templates/state.md +0 -176
  125. package/refs/gsd/get-shit-done/templates/summary-complex.md +0 -59
  126. package/refs/gsd/get-shit-done/templates/summary-minimal.md +0 -41
  127. package/refs/gsd/get-shit-done/templates/summary-standard.md +0 -48
  128. package/refs/gsd/get-shit-done/templates/summary.md +0 -248
  129. package/refs/gsd/get-shit-done/templates/user-setup.md +0 -311
  130. package/refs/gsd/get-shit-done/templates/verification-report.md +0 -322
  131. package/refs/gsd/get-shit-done/workflows/add-phase.md +0 -111
  132. package/refs/gsd/get-shit-done/workflows/add-tests.md +0 -350
  133. package/refs/gsd/get-shit-done/workflows/add-todo.md +0 -157
  134. package/refs/gsd/get-shit-done/workflows/audit-milestone.md +0 -297
  135. package/refs/gsd/get-shit-done/workflows/check-todos.md +0 -176
  136. package/refs/gsd/get-shit-done/workflows/cleanup.md +0 -152
  137. package/refs/gsd/get-shit-done/workflows/complete-milestone.md +0 -763
  138. package/refs/gsd/get-shit-done/workflows/diagnose-issues.md +0 -219
  139. package/refs/gsd/get-shit-done/workflows/discovery-phase.md +0 -289
  140. package/refs/gsd/get-shit-done/workflows/discuss-phase.md +0 -542
  141. package/refs/gsd/get-shit-done/workflows/execute-phase.md +0 -449
  142. package/refs/gsd/get-shit-done/workflows/execute-plan.md +0 -448
  143. package/refs/gsd/get-shit-done/workflows/health.md +0 -156
  144. package/refs/gsd/get-shit-done/workflows/help.md +0 -489
  145. package/refs/gsd/get-shit-done/workflows/insert-phase.md +0 -129
  146. package/refs/gsd/get-shit-done/workflows/list-phase-assumptions.md +0 -178
  147. package/refs/gsd/get-shit-done/workflows/map-codebase.md +0 -315
  148. package/refs/gsd/get-shit-done/workflows/new-milestone.md +0 -382
  149. package/refs/gsd/get-shit-done/workflows/new-project.md +0 -1116
  150. package/refs/gsd/get-shit-done/workflows/pause-work.md +0 -122
  151. package/refs/gsd/get-shit-done/workflows/plan-milestone-gaps.md +0 -274
  152. package/refs/gsd/get-shit-done/workflows/plan-phase.md +0 -569
  153. package/refs/gsd/get-shit-done/workflows/progress.md +0 -381
  154. package/refs/gsd/get-shit-done/workflows/quick.md +0 -453
  155. package/refs/gsd/get-shit-done/workflows/remove-phase.md +0 -154
  156. package/refs/gsd/get-shit-done/workflows/research-phase.md +0 -73
  157. package/refs/gsd/get-shit-done/workflows/resume-project.md +0 -306
  158. package/refs/gsd/get-shit-done/workflows/set-profile.md +0 -80
  159. package/refs/gsd/get-shit-done/workflows/settings.md +0 -213
  160. package/refs/gsd/get-shit-done/workflows/transition.md +0 -544
  161. package/refs/gsd/get-shit-done/workflows/update.md +0 -219
  162. package/refs/gsd/get-shit-done/workflows/verify-phase.md +0 -242
  163. package/refs/gsd/get-shit-done/workflows/verify-work.md +0 -569
  164. package/refs/gsd/hooks/gsd-check-update.js +0 -62
  165. package/refs/gsd/hooks/gsd-context-monitor.js +0 -122
  166. package/refs/gsd/hooks/gsd-statusline.js +0 -108
  167. package/refs/gsd/package.json +0 -50
  168. package/refs/gsd/scripts/build-hooks.js +0 -43
  169. package/refs/gsd/tests/commands.test.cjs +0 -661
  170. package/refs/gsd/tests/helpers.cjs +0 -40
  171. package/refs/gsd/tests/init.test.cjs +0 -205
  172. package/refs/gsd/tests/milestone.test.cjs +0 -98
  173. package/refs/gsd/tests/phase.test.cjs +0 -1241
  174. package/refs/gsd/tests/roadmap.test.cjs +0 -265
  175. package/refs/gsd/tests/state.test.cjs +0 -302
  176. package/refs/gsd/tests/verify.test.cjs +0 -80
  177. package/refs/vbenchmark/.agent/agents/codebase-explorer.md +0 -224
  178. package/refs/vbenchmark/.agent/agents/debugger.md +0 -180
  179. package/refs/vbenchmark/.agent/agents/documenter.md +0 -166
  180. package/refs/vbenchmark/.agent/agents/implementer.md +0 -70
  181. package/refs/vbenchmark/.agent/agents/orchestrator.md +0 -212
  182. package/refs/vbenchmark/.agent/agents/researcher.md +0 -80
  183. package/refs/vbenchmark/.agent/agents/reviewer.md +0 -184
  184. package/refs/vbenchmark/.agent/agents/tester.md +0 -170
  185. package/refs/vbenchmark/.agent/commands/commit.md +0 -29
  186. package/refs/vbenchmark/.agent/commands/debug.md +0 -59
  187. package/refs/vbenchmark/.agent/commands/document.md +0 -52
  188. package/refs/vbenchmark/.agent/commands/gather-context.md +0 -58
  189. package/refs/vbenchmark/.agent/commands/init.md +0 -56
  190. package/refs/vbenchmark/.agent/commands/preset-help.md +0 -50
  191. package/refs/vbenchmark/.agent/commands/refactor.md +0 -71
  192. package/refs/vbenchmark/.agent/commands/research.md +0 -37
  193. package/refs/vbenchmark/.agent/commands/review.md +0 -38
  194. package/refs/vbenchmark/.agent/commands/test.md +0 -61
  195. package/refs/vbenchmark/.agent/rules/01-code-quality.md +0 -33
  196. package/refs/vbenchmark/.agent/rules/02-typescript-go.md +0 -46
  197. package/refs/vbenchmark/.agent/rules/03-security-git.md +0 -34
  198. package/refs/vbenchmark/.agent/rules/04-architecture.md +0 -40
  199. package/refs/vbenchmark/.agent/sync.js +0 -536
  200. package/refs/vbenchmark/.agent/workflows/commit.md +0 -29
  201. package/refs/vbenchmark/.agent/workflows/debug.md +0 -59
  202. package/refs/vbenchmark/.agent/workflows/document.md +0 -52
  203. package/refs/vbenchmark/.agent/workflows/gather-context.md +0 -58
  204. package/refs/vbenchmark/.agent/workflows/init.md +0 -56
  205. package/refs/vbenchmark/.agent/workflows/preset-help.md +0 -50
  206. package/refs/vbenchmark/.agent/workflows/refactor.md +0 -71
  207. package/refs/vbenchmark/.agent/workflows/research.md +0 -37
  208. package/refs/vbenchmark/.agent/workflows/review.md +0 -38
  209. package/refs/vbenchmark/.agent/workflows/test.md +0 -61
  210. package/refs/vbenchmark/.claude/commands/agentic-dev/apply.md +0 -222
  211. package/refs/vbenchmark/.claude/commands/agentic-dev/done.md +0 -166
  212. package/refs/vbenchmark/.claude/commands/agentic-dev/proposal.md +0 -220
  213. package/refs/vbenchmark/.claude/commands/openspec/apply.md +0 -23
  214. package/refs/vbenchmark/.claude/commands/openspec/archive.md +0 -27
  215. package/refs/vbenchmark/.claude/commands/openspec/proposal.md +0 -28
  216. package/refs/vbenchmark/.clinerules/01-rules.md +0 -73
  217. package/refs/vbenchmark/.clinerules/02-agents.md +0 -34
  218. package/refs/vbenchmark/.cursor/commands/commit.md +0 -29
  219. package/refs/vbenchmark/.cursor/commands/debug.md +0 -59
  220. package/refs/vbenchmark/.cursor/commands/document.md +0 -52
  221. package/refs/vbenchmark/.cursor/commands/gather-context.md +0 -58
  222. package/refs/vbenchmark/.cursor/commands/init.md +0 -56
  223. package/refs/vbenchmark/.cursor/commands/preset-help.md +0 -50
  224. package/refs/vbenchmark/.cursor/commands/refactor.md +0 -71
  225. package/refs/vbenchmark/.cursor/commands/research.md +0 -37
  226. package/refs/vbenchmark/.cursor/commands/review.md +0 -38
  227. package/refs/vbenchmark/.cursor/commands/test.md +0 -61
  228. package/refs/vbenchmark/.cursor/rules/agents.mdc +0 -1357
  229. package/refs/vbenchmark/.factory/droids/codebase-explorer.md +0 -224
  230. package/refs/vbenchmark/.factory/droids/debugger.md +0 -180
  231. package/refs/vbenchmark/.factory/droids/documenter.md +0 -166
  232. package/refs/vbenchmark/.factory/droids/implementer.md +0 -70
  233. package/refs/vbenchmark/.factory/droids/orchestrator.md +0 -212
  234. package/refs/vbenchmark/.factory/droids/researcher.md +0 -80
  235. package/refs/vbenchmark/.factory/droids/reviewer.md +0 -184
  236. package/refs/vbenchmark/.factory/droids/tester.md +0 -170
  237. package/refs/vbenchmark/.gemini/workflows/commit.md +0 -29
  238. package/refs/vbenchmark/.gemini/workflows/debug.md +0 -59
  239. package/refs/vbenchmark/.gemini/workflows/document.md +0 -52
  240. package/refs/vbenchmark/.gemini/workflows/gather-context.md +0 -58
  241. package/refs/vbenchmark/.gemini/workflows/init.md +0 -56
  242. package/refs/vbenchmark/.gemini/workflows/preset-help.md +0 -50
  243. package/refs/vbenchmark/.gemini/workflows/refactor.md +0 -71
  244. package/refs/vbenchmark/.gemini/workflows/research.md +0 -37
  245. package/refs/vbenchmark/.gemini/workflows/review.md +0 -38
  246. package/refs/vbenchmark/.gemini/workflows/test.md +0 -61
  247. package/refs/vbenchmark/.github/CODEOWNERS +0 -20
  248. package/refs/vbenchmark/.github/FUNDING.yml +0 -4
  249. package/refs/vbenchmark/.github/ISSUE_TEMPLATE/bug-report.yml +0 -76
  250. package/refs/vbenchmark/.github/ISSUE_TEMPLATE/new-task.yml +0 -106
  251. package/refs/vbenchmark/.github/PULL_REQUEST_TEMPLATE.md +0 -38
  252. package/refs/vbenchmark/.github/copilot-instructions.md +0 -73
  253. package/refs/vbenchmark/.github/workflows/ci.yaml +0 -33
  254. package/refs/vbenchmark/.github/workflows/vercel-auto-pr.yml +0 -478
  255. package/refs/vbenchmark/.github/workflows/vercel-deploy.yaml +0 -487
  256. package/refs/vbenchmark/.github/workflows/vercel-pr-command.yaml +0 -337
  257. package/refs/vbenchmark/.github/workflows/vercel-project-init.yaml +0 -208
  258. package/refs/vbenchmark/.opencode/agent/codebase-explorer.md +0 -224
  259. package/refs/vbenchmark/.opencode/agent/debugger.md +0 -180
  260. package/refs/vbenchmark/.opencode/agent/documenter.md +0 -166
  261. package/refs/vbenchmark/.opencode/agent/implementer.md +0 -70
  262. package/refs/vbenchmark/.opencode/agent/orchestrator.md +0 -212
  263. package/refs/vbenchmark/.opencode/agent/researcher.md +0 -80
  264. package/refs/vbenchmark/.opencode/agent/reviewer.md +0 -184
  265. package/refs/vbenchmark/.opencode/agent/tester.md +0 -170
  266. package/refs/vbenchmark/.opencode/command/commit.md +0 -29
  267. package/refs/vbenchmark/.opencode/command/debug.md +0 -59
  268. package/refs/vbenchmark/.opencode/command/document.md +0 -52
  269. package/refs/vbenchmark/.opencode/command/gather-context.md +0 -58
  270. package/refs/vbenchmark/.opencode/command/init.md +0 -56
  271. package/refs/vbenchmark/.opencode/command/preset-help.md +0 -50
  272. package/refs/vbenchmark/.opencode/command/refactor.md +0 -71
  273. package/refs/vbenchmark/.opencode/command/research.md +0 -37
  274. package/refs/vbenchmark/.opencode/command/review.md +0 -38
  275. package/refs/vbenchmark/.opencode/command/test.md +0 -61
  276. package/refs/vbenchmark/.trae/project_rules.md +0 -73
  277. package/refs/vbenchmark/.windsurf/rules/rules.md +0 -85
  278. package/refs/vbenchmark/AGENTS.md +0 -73
  279. package/refs/vbenchmark/CONTRIBUTING.md +0 -332
  280. package/refs/vbenchmark/Caddyfile +0 -3
  281. package/refs/vbenchmark/LICENSE +0 -47
  282. package/refs/vbenchmark/README.md +0 -354
  283. package/refs/vbenchmark/docker-compose.prod.yaml +0 -35
  284. package/refs/vbenchmark/docker-compose.yaml +0 -53
  285. package/refs/vbenchmark/docs/TASK_EXPANSION_PLAN.md +0 -211
  286. package/refs/vbenchmark/docs/THESIS.md +0 -441
  287. package/refs/vbenchmark/docs/categories/code-evolution.md +0 -138
  288. package/refs/vbenchmark/openspec/changes/init-vibecodingbench/design.md +0 -111
  289. package/refs/vbenchmark/openspec/changes/init-vibecodingbench/proposal.md +0 -15
  290. package/refs/vbenchmark/openspec/changes/init-vibecodingbench/specs/evaluation/spec.md +0 -105
  291. package/refs/vbenchmark/openspec/changes/init-vibecodingbench/specs/leaderboard/spec.md +0 -68
  292. package/refs/vbenchmark/openspec/changes/init-vibecodingbench/specs/task-definition/spec.md +0 -45
  293. package/refs/vbenchmark/openspec/changes/init-vibecodingbench/specs/task-runner/spec.md +0 -49
  294. package/refs/vbenchmark/openspec/changes/init-vibecodingbench/tasks.md +0 -413
  295. package/refs/vbenchmark/package.json +0 -51
  296. package/refs/vbenchmark/packages/cli/eslint.config.js +0 -16
  297. package/refs/vbenchmark/packages/cli/package.json +0 -35
  298. package/refs/vbenchmark/packages/cli/src/agents/index.ts +0 -655
  299. package/refs/vbenchmark/packages/cli/src/commands/eval.ts +0 -197
  300. package/refs/vbenchmark/packages/cli/src/commands/list.ts +0 -63
  301. package/refs/vbenchmark/packages/cli/src/commands/run.ts +0 -147
  302. package/refs/vbenchmark/packages/cli/src/evaluator.ts +0 -125
  303. package/refs/vbenchmark/packages/cli/src/index.ts +0 -21
  304. package/refs/vbenchmark/packages/cli/src/lib/task-variation.ts +0 -153
  305. package/refs/vbenchmark/packages/cli/src/loader.ts +0 -258
  306. package/refs/vbenchmark/packages/cli/src/reporter.ts +0 -222
  307. package/refs/vbenchmark/packages/cli/src/runtime/docker.ts +0 -385
  308. package/refs/vbenchmark/packages/cli/tsconfig.json +0 -8
  309. package/refs/vbenchmark/packages/dashboard/Dockerfile +0 -42
  310. package/refs/vbenchmark/packages/dashboard/index.html +0 -21
  311. package/refs/vbenchmark/packages/dashboard/package.json +0 -29
  312. package/refs/vbenchmark/packages/dashboard/postcss.config.js +0 -6
  313. package/refs/vbenchmark/packages/dashboard/public/favicon.svg +0 -24
  314. package/refs/vbenchmark/packages/dashboard/public/logo.png +0 -0
  315. package/refs/vbenchmark/packages/dashboard/public/logo.svg +0 -39
  316. package/refs/vbenchmark/packages/dashboard/src/App.tsx +0 -1468
  317. package/refs/vbenchmark/packages/dashboard/src/data/category-performance.json +0 -1
  318. package/refs/vbenchmark/packages/dashboard/src/data/leaderboard.json +0 -1
  319. package/refs/vbenchmark/packages/dashboard/src/data/task-results.json +0 -1
  320. package/refs/vbenchmark/packages/dashboard/src/data/tasks.json +0 -1
  321. package/refs/vbenchmark/packages/dashboard/src/index.css +0 -3
  322. package/refs/vbenchmark/packages/dashboard/src/main.tsx +0 -13
  323. package/refs/vbenchmark/packages/dashboard/src/vite-env.d.ts +0 -9
  324. package/refs/vbenchmark/packages/dashboard/tailwind.config.js +0 -11
  325. package/refs/vbenchmark/packages/dashboard/tsconfig.json +0 -21
  326. package/refs/vbenchmark/packages/dashboard/tsconfig.node.json +0 -11
  327. package/refs/vbenchmark/packages/dashboard/vercel.json +0 -6
  328. package/refs/vbenchmark/packages/dashboard/vite.config.ts +0 -28
  329. package/refs/vbenchmark/packages/evaluator/eslint.config.js +0 -16
  330. package/refs/vbenchmark/packages/evaluator/package.json +0 -24
  331. package/refs/vbenchmark/packages/evaluator/src/index.ts +0 -15
  332. package/refs/vbenchmark/packages/evaluator/src/runners/functional.ts +0 -88
  333. package/refs/vbenchmark/packages/evaluator/src/runners/quality.ts +0 -140
  334. package/refs/vbenchmark/packages/evaluator/src/runners/security.ts +0 -94
  335. package/refs/vbenchmark/packages/evaluator/src/runners/visual.ts +0 -108
  336. package/refs/vbenchmark/packages/evaluator/src/types.d.ts +0 -19
  337. package/refs/vbenchmark/packages/evaluator/tsconfig.json +0 -8
  338. package/refs/vbenchmark/packages/leaderboard/Dockerfile +0 -38
  339. package/refs/vbenchmark/packages/leaderboard/drizzle.config.ts +0 -10
  340. package/refs/vbenchmark/packages/leaderboard/eslint.config.js +0 -16
  341. package/refs/vbenchmark/packages/leaderboard/fly.toml +0 -29
  342. package/refs/vbenchmark/packages/leaderboard/package.json +0 -36
  343. package/refs/vbenchmark/packages/leaderboard/src/app.ts +0 -29
  344. package/refs/vbenchmark/packages/leaderboard/src/components/BrowserPreview.tsx +0 -190
  345. package/refs/vbenchmark/packages/leaderboard/src/components/ComparisonView.tsx +0 -205
  346. package/refs/vbenchmark/packages/leaderboard/src/components/LeaderboardTable.tsx +0 -150
  347. package/refs/vbenchmark/packages/leaderboard/src/components/LiveRunCard.tsx +0 -133
  348. package/refs/vbenchmark/packages/leaderboard/src/components/SubmissionForm.tsx +0 -406
  349. package/refs/vbenchmark/packages/leaderboard/src/components/SubmitForm.tsx +0 -293
  350. package/refs/vbenchmark/packages/leaderboard/src/components/TerminalStream.tsx +0 -111
  351. package/refs/vbenchmark/packages/leaderboard/src/config/pricing.ts +0 -206
  352. package/refs/vbenchmark/packages/leaderboard/src/db/index.ts +0 -31
  353. package/refs/vbenchmark/packages/leaderboard/src/db/schema.ts +0 -125
  354. package/refs/vbenchmark/packages/leaderboard/src/index.ts +0 -13
  355. package/refs/vbenchmark/packages/leaderboard/src/lib/websocket.ts +0 -124
  356. package/refs/vbenchmark/packages/leaderboard/src/routes/leaderboard.ts +0 -698
  357. package/refs/vbenchmark/packages/leaderboard/src/routes/live.ts +0 -175
  358. package/refs/vbenchmark/packages/leaderboard/src/routes/submissions.ts +0 -183
  359. package/refs/vbenchmark/packages/leaderboard/src/routes/tasks.ts +0 -215
  360. package/refs/vbenchmark/packages/leaderboard/tests/api.test.ts +0 -228
  361. package/refs/vbenchmark/packages/leaderboard/tsconfig.json +0 -9
  362. package/refs/vbenchmark/scripts/deploy.sh +0 -70
  363. package/refs/vbenchmark/tasks/ai-integration/advanced/context-management/PROMPT.md +0 -15
  364. package/refs/vbenchmark/tasks/ai-integration/advanced/context-management/task.yaml +0 -16
  365. package/refs/vbenchmark/tasks/ai-integration/advanced/evaluation-framework/PROMPT.md +0 -15
  366. package/refs/vbenchmark/tasks/ai-integration/advanced/evaluation-framework/task.yaml +0 -16
  367. package/refs/vbenchmark/tasks/ai-integration/advanced/guardrails-safety/PROMPT.md +0 -15
  368. package/refs/vbenchmark/tasks/ai-integration/advanced/guardrails-safety/task.yaml +0 -16
  369. package/refs/vbenchmark/tasks/ai-integration/advanced/memory-system/PROMPT.md +0 -15
  370. package/refs/vbenchmark/tasks/ai-integration/advanced/memory-system/task.yaml +0 -16
  371. package/refs/vbenchmark/tasks/ai-integration/advanced/model-routing/PROMPT.md +0 -15
  372. package/refs/vbenchmark/tasks/ai-integration/advanced/model-routing/task.yaml +0 -16
  373. package/refs/vbenchmark/tasks/ai-integration/advanced/multi-agent-system/PROMPT.md +0 -15
  374. package/refs/vbenchmark/tasks/ai-integration/advanced/multi-agent-system/task.yaml +0 -16
  375. package/refs/vbenchmark/tasks/ai-integration/advanced/prompt-optimization/PROMPT.md +0 -15
  376. package/refs/vbenchmark/tasks/ai-integration/advanced/prompt-optimization/task.yaml +0 -16
  377. package/refs/vbenchmark/tasks/ai-integration/advanced/reasoning-chain/PROMPT.md +0 -15
  378. package/refs/vbenchmark/tasks/ai-integration/advanced/reasoning-chain/task.yaml +0 -16
  379. package/refs/vbenchmark/tasks/ai-integration/advanced/streaming-pipeline/PROMPT.md +0 -15
  380. package/refs/vbenchmark/tasks/ai-integration/advanced/streaming-pipeline/task.yaml +0 -16
  381. package/refs/vbenchmark/tasks/ai-integration/advanced/tool-use-orchestration/PROMPT.md +0 -15
  382. package/refs/vbenchmark/tasks/ai-integration/advanced/tool-use-orchestration/task.yaml +0 -16
  383. package/refs/vbenchmark/tasks/ai-integration/agents/code-review-agent/PROMPT.md +0 -64
  384. package/refs/vbenchmark/tasks/ai-integration/agents/code-review-agent/task.yaml +0 -24
  385. package/refs/vbenchmark/tasks/ai-integration/agents/research-agent/PROMPT.md +0 -61
  386. package/refs/vbenchmark/tasks/ai-integration/agents/research-agent/task.yaml +0 -24
  387. package/refs/vbenchmark/tasks/ai-integration/agents/web-scraper-agent/PROMPT.md +0 -57
  388. package/refs/vbenchmark/tasks/ai-integration/agents/web-scraper-agent/task.yaml +0 -24
  389. package/refs/vbenchmark/tasks/ai-integration/embeddings/duplicate-detection/PROMPT.md +0 -50
  390. package/refs/vbenchmark/tasks/ai-integration/embeddings/duplicate-detection/task.yaml +0 -24
  391. package/refs/vbenchmark/tasks/ai-integration/embeddings/recommendation-engine/PROMPT.md +0 -51
  392. package/refs/vbenchmark/tasks/ai-integration/embeddings/recommendation-engine/task.yaml +0 -24
  393. package/refs/vbenchmark/tasks/ai-integration/embeddings/semantic-search/PROMPT.md +0 -50
  394. package/refs/vbenchmark/tasks/ai-integration/embeddings/semantic-search/task.yaml +0 -24
  395. package/refs/vbenchmark/tasks/ai-integration/fine-tuning/classification-model/PROMPT.md +0 -50
  396. package/refs/vbenchmark/tasks/ai-integration/fine-tuning/classification-model/task.yaml +0 -24
  397. package/refs/vbenchmark/tasks/ai-integration/function-calling/api-orchestrator/PROMPT.md +0 -60
  398. package/refs/vbenchmark/tasks/ai-integration/function-calling/api-orchestrator/task.yaml +0 -24
  399. package/refs/vbenchmark/tasks/ai-integration/function-calling/calendar-assistant/PROMPT.md +0 -50
  400. package/refs/vbenchmark/tasks/ai-integration/function-calling/calendar-assistant/task.yaml +0 -24
  401. package/refs/vbenchmark/tasks/ai-integration/function-calling/database-query/PROMPT.md +0 -62
  402. package/refs/vbenchmark/tasks/ai-integration/function-calling/database-query/task.yaml +0 -24
  403. package/refs/vbenchmark/tasks/ai-integration/multimodal/chart-interpreter/PROMPT.md +0 -60
  404. package/refs/vbenchmark/tasks/ai-integration/multimodal/chart-interpreter/task.yaml +0 -24
  405. package/refs/vbenchmark/tasks/ai-integration/multimodal/image-captioning/PROMPT.md +0 -49
  406. package/refs/vbenchmark/tasks/ai-integration/multimodal/image-captioning/task.yaml +0 -24
  407. package/refs/vbenchmark/tasks/ai-integration/rag-chatbot/code-assistant/PROMPT.md +0 -51
  408. package/refs/vbenchmark/tasks/ai-integration/rag-chatbot/code-assistant/task.yaml +0 -24
  409. package/refs/vbenchmark/tasks/ai-integration/rag-chatbot/doc-search/PROMPT.md +0 -51
  410. package/refs/vbenchmark/tasks/ai-integration/rag-chatbot/doc-search/task.yaml +0 -24
  411. package/refs/vbenchmark/tasks/ai-integration/rag-chatbot/pdf-qa/PROMPT.md +0 -76
  412. package/refs/vbenchmark/tasks/ai-integration/rag-chatbot/pdf-qa/docker-compose.yaml +0 -30
  413. package/refs/vbenchmark/tasks/ai-integration/rag-chatbot/pdf-qa/task.yaml +0 -30
  414. package/refs/vbenchmark/tasks/ai-integration/rag-chatbot/pdf-qa/tests/functional/qa.test.py +0 -146
  415. package/refs/vbenchmark/tasks/ai-integration/rag-chatbot/support-bot/PROMPT.md +0 -51
  416. package/refs/vbenchmark/tasks/ai-integration/rag-chatbot/support-bot/task.yaml +0 -24
  417. package/refs/vbenchmark/tasks/ai-integration/structured-output/contract-analyzer/PROMPT.md +0 -67
  418. package/refs/vbenchmark/tasks/ai-integration/structured-output/contract-analyzer/task.yaml +0 -24
  419. package/refs/vbenchmark/tasks/ai-integration/structured-output/invoice-parser/PROMPT.md +0 -61
  420. package/refs/vbenchmark/tasks/ai-integration/structured-output/invoice-parser/task.yaml +0 -27
  421. package/refs/vbenchmark/tasks/ai-integration/structured-output/receipt-scanner/PROMPT.md +0 -65
  422. package/refs/vbenchmark/tasks/ai-integration/structured-output/receipt-scanner/task.yaml +0 -24
  423. package/refs/vbenchmark/tasks/ai-integration/structured-output/resume-parser/PROMPT.md +0 -70
  424. package/refs/vbenchmark/tasks/ai-integration/structured-output/resume-parser/task.yaml +0 -24
  425. package/refs/vbenchmark/tasks/api-integrations/advanced/api-analytics/PROMPT.md +0 -15
  426. package/refs/vbenchmark/tasks/api-integrations/advanced/api-analytics/task.yaml +0 -16
  427. package/refs/vbenchmark/tasks/api-integrations/advanced/api-gateway/PROMPT.md +0 -15
  428. package/refs/vbenchmark/tasks/api-integrations/advanced/api-gateway/task.yaml +0 -16
  429. package/refs/vbenchmark/tasks/api-integrations/advanced/api-mocking/PROMPT.md +0 -15
  430. package/refs/vbenchmark/tasks/api-integrations/advanced/api-mocking/task.yaml +0 -16
  431. package/refs/vbenchmark/tasks/api-integrations/advanced/contract-testing/PROMPT.md +0 -15
  432. package/refs/vbenchmark/tasks/api-integrations/advanced/contract-testing/task.yaml +0 -16
  433. package/refs/vbenchmark/tasks/api-integrations/advanced/graphql-federation/PROMPT.md +0 -15
  434. package/refs/vbenchmark/tasks/api-integrations/advanced/graphql-federation/task.yaml +0 -16
  435. package/refs/vbenchmark/tasks/api-integrations/advanced/grpc-gateway/PROMPT.md +0 -15
  436. package/refs/vbenchmark/tasks/api-integrations/advanced/grpc-gateway/task.yaml +0 -16
  437. package/refs/vbenchmark/tasks/api-integrations/advanced/rate-limiter/PROMPT.md +0 -15
  438. package/refs/vbenchmark/tasks/api-integrations/advanced/rate-limiter/task.yaml +0 -16
  439. package/refs/vbenchmark/tasks/api-integrations/advanced/request-validator/PROMPT.md +0 -15
  440. package/refs/vbenchmark/tasks/api-integrations/advanced/request-validator/task.yaml +0 -16
  441. package/refs/vbenchmark/tasks/api-integrations/advanced/sdk-generator/PROMPT.md +0 -15
  442. package/refs/vbenchmark/tasks/api-integrations/advanced/sdk-generator/task.yaml +0 -16
  443. package/refs/vbenchmark/tasks/api-integrations/advanced/webhook-processor/PROMPT.md +0 -15
  444. package/refs/vbenchmark/tasks/api-integrations/advanced/webhook-processor/task.yaml +0 -16
  445. package/refs/vbenchmark/tasks/api-integrations/analytics/mixpanel-events/PROMPT.md +0 -42
  446. package/refs/vbenchmark/tasks/api-integrations/analytics/mixpanel-events/task.yaml +0 -24
  447. package/refs/vbenchmark/tasks/api-integrations/analytics/segment-tracking/PROMPT.md +0 -42
  448. package/refs/vbenchmark/tasks/api-integrations/analytics/segment-tracking/task.yaml +0 -24
  449. package/refs/vbenchmark/tasks/api-integrations/auth-provider/oauth2-github/PROMPT.md +0 -42
  450. package/refs/vbenchmark/tasks/api-integrations/auth-provider/oauth2-github/task.yaml +0 -24
  451. package/refs/vbenchmark/tasks/api-integrations/auth-provider/okta-integration/PROMPT.md +0 -44
  452. package/refs/vbenchmark/tasks/api-integrations/auth-provider/okta-integration/task.yaml +0 -24
  453. package/refs/vbenchmark/tasks/api-integrations/auth-provider/saml-sso/PROMPT.md +0 -42
  454. package/refs/vbenchmark/tasks/api-integrations/auth-provider/saml-sso/task.yaml +0 -24
  455. package/refs/vbenchmark/tasks/api-integrations/communication/discord-webhook/PROMPT.md +0 -44
  456. package/refs/vbenchmark/tasks/api-integrations/communication/discord-webhook/task.yaml +0 -24
  457. package/refs/vbenchmark/tasks/api-integrations/communication/slack-bot/PROMPT.md +0 -42
  458. package/refs/vbenchmark/tasks/api-integrations/communication/slack-bot/task.yaml +0 -24
  459. package/refs/vbenchmark/tasks/api-integrations/communication/twilio-sms/PROMPT.md +0 -42
  460. package/refs/vbenchmark/tasks/api-integrations/communication/twilio-sms/task.yaml +0 -24
  461. package/refs/vbenchmark/tasks/api-integrations/email/transactional/PROMPT.md +0 -82
  462. package/refs/vbenchmark/tasks/api-integrations/email/transactional/task.yaml +0 -27
  463. package/refs/vbenchmark/tasks/api-integrations/maps/google-maps-geocoding/PROMPT.md +0 -41
  464. package/refs/vbenchmark/tasks/api-integrations/maps/google-maps-geocoding/task.yaml +0 -24
  465. package/refs/vbenchmark/tasks/api-integrations/maps/mapbox-directions/PROMPT.md +0 -41
  466. package/refs/vbenchmark/tasks/api-integrations/maps/mapbox-directions/task.yaml +0 -24
  467. package/refs/vbenchmark/tasks/api-integrations/payment/crypto-payments/PROMPT.md +0 -43
  468. package/refs/vbenchmark/tasks/api-integrations/payment/crypto-payments/task.yaml +0 -24
  469. package/refs/vbenchmark/tasks/api-integrations/payment/paypal-integration/PROMPT.md +0 -41
  470. package/refs/vbenchmark/tasks/api-integrations/payment/paypal-integration/task.yaml +0 -24
  471. package/refs/vbenchmark/tasks/api-integrations/social/twitter-api/PROMPT.md +0 -41
  472. package/refs/vbenchmark/tasks/api-integrations/social/twitter-api/task.yaml +0 -24
  473. package/refs/vbenchmark/tasks/api-integrations/storage/cloudinary-upload/PROMPT.md +0 -43
  474. package/refs/vbenchmark/tasks/api-integrations/storage/cloudinary-upload/task.yaml +0 -24
  475. package/refs/vbenchmark/tasks/api-integrations/storage/gcs-streaming/PROMPT.md +0 -43
  476. package/refs/vbenchmark/tasks/api-integrations/storage/gcs-streaming/task.yaml +0 -24
  477. package/refs/vbenchmark/tasks/api-integrations/storage/s3-presigned-urls/PROMPT.md +0 -41
  478. package/refs/vbenchmark/tasks/api-integrations/storage/s3-presigned-urls/task.yaml +0 -24
  479. package/refs/vbenchmark/tasks/api-integrations/stripe/checkout-session/PROMPT.md +0 -41
  480. package/refs/vbenchmark/tasks/api-integrations/stripe/checkout-session/task.yaml +0 -24
  481. package/refs/vbenchmark/tasks/api-integrations/stripe/payment-webhook/PROMPT.md +0 -60
  482. package/refs/vbenchmark/tasks/api-integrations/stripe/payment-webhook/docker-compose.yaml +0 -38
  483. package/refs/vbenchmark/tasks/api-integrations/stripe/payment-webhook/task.yaml +0 -31
  484. package/refs/vbenchmark/tasks/api-integrations/stripe/payment-webhook/tests/webhook.test.ts +0 -193
  485. package/refs/vbenchmark/tasks/api-integrations/stripe/subscription-portal/PROMPT.md +0 -41
  486. package/refs/vbenchmark/tasks/api-integrations/stripe/subscription-portal/task.yaml +0 -24
  487. package/refs/vbenchmark/tasks/code-evolution/advanced/api-deprecation/PROMPT.md +0 -15
  488. package/refs/vbenchmark/tasks/code-evolution/advanced/api-deprecation/task.yaml +0 -16
  489. package/refs/vbenchmark/tasks/code-evolution/advanced/ast-refactoring/PROMPT.md +0 -15
  490. package/refs/vbenchmark/tasks/code-evolution/advanced/ast-refactoring/task.yaml +0 -16
  491. package/refs/vbenchmark/tasks/code-evolution/advanced/concurrency-fix/PROMPT.md +0 -15
  492. package/refs/vbenchmark/tasks/code-evolution/advanced/concurrency-fix/task.yaml +0 -16
  493. package/refs/vbenchmark/tasks/code-evolution/advanced/database-schema-migration/PROMPT.md +0 -15
  494. package/refs/vbenchmark/tasks/code-evolution/advanced/database-schema-migration/task.yaml +0 -16
  495. package/refs/vbenchmark/tasks/code-evolution/advanced/dead-code-elimination/PROMPT.md +0 -15
  496. package/refs/vbenchmark/tasks/code-evolution/advanced/dead-code-elimination/task.yaml +0 -16
  497. package/refs/vbenchmark/tasks/code-evolution/advanced/dependency-upgrade/PROMPT.md +0 -15
  498. package/refs/vbenchmark/tasks/code-evolution/advanced/dependency-upgrade/task.yaml +0 -16
  499. package/refs/vbenchmark/tasks/code-evolution/advanced/memory-optimization/PROMPT.md +0 -15
  500. package/refs/vbenchmark/tasks/code-evolution/advanced/memory-optimization/task.yaml +0 -16
  501. package/refs/vbenchmark/tasks/code-evolution/advanced/monorepo-extraction/PROMPT.md +0 -15
  502. package/refs/vbenchmark/tasks/code-evolution/advanced/monorepo-extraction/task.yaml +0 -16
  503. package/refs/vbenchmark/tasks/code-evolution/advanced/performance-profiling/PROMPT.md +0 -15
  504. package/refs/vbenchmark/tasks/code-evolution/advanced/performance-profiling/task.yaml +0 -16
  505. package/refs/vbenchmark/tasks/code-evolution/advanced/type-migration/PROMPT.md +0 -15
  506. package/refs/vbenchmark/tasks/code-evolution/advanced/type-migration/task.yaml +0 -16
  507. package/refs/vbenchmark/tasks/code-evolution/legacy-migration/callback-to-async/PROMPT.md +0 -47
  508. package/refs/vbenchmark/tasks/code-evolution/legacy-migration/callback-to-async/task.yaml +0 -24
  509. package/refs/vbenchmark/tasks/code-evolution/legacy-migration/express-to-fastify/PROMPT.md +0 -49
  510. package/refs/vbenchmark/tasks/code-evolution/legacy-migration/express-to-fastify/base-code/src/app.ts +0 -22
  511. package/refs/vbenchmark/tasks/code-evolution/legacy-migration/express-to-fastify/task.yaml +0 -37
  512. package/refs/vbenchmark/tasks/code-evolution/legacy-migration/express-to-fastify/tests/api.test.ts +0 -70
  513. package/refs/vbenchmark/tasks/code-evolution/legacy-migration/flask-to-fastapi/PROMPT.md +0 -46
  514. package/refs/vbenchmark/tasks/code-evolution/legacy-migration/flask-to-fastapi/task.yaml +0 -24
  515. package/refs/vbenchmark/tasks/code-evolution/legacy-migration/java-to-kotlin/PROMPT.md +0 -45
  516. package/refs/vbenchmark/tasks/code-evolution/legacy-migration/java-to-kotlin/task.yaml +0 -24
  517. package/refs/vbenchmark/tasks/code-evolution/legacy-migration/jquery-to-react/PROMPT.md +0 -47
  518. package/refs/vbenchmark/tasks/code-evolution/legacy-migration/jquery-to-react/task.yaml +0 -24
  519. package/refs/vbenchmark/tasks/code-evolution/legacy-migration/rest-to-grpc/PROMPT.md +0 -47
  520. package/refs/vbenchmark/tasks/code-evolution/legacy-migration/rest-to-grpc/task.yaml +0 -24
  521. package/refs/vbenchmark/tasks/code-evolution/performance/async-refactor/PROMPT.md +0 -47
  522. package/refs/vbenchmark/tasks/code-evolution/performance/async-refactor/task.yaml +0 -24
  523. package/refs/vbenchmark/tasks/code-evolution/performance/memory-leak-fix/PROMPT.md +0 -47
  524. package/refs/vbenchmark/tasks/code-evolution/performance/memory-leak-fix/task.yaml +0 -24
  525. package/refs/vbenchmark/tasks/code-evolution/performance/query-optimization/PROMPT.md +0 -49
  526. package/refs/vbenchmark/tasks/code-evolution/performance/query-optimization/task.yaml +0 -24
  527. package/refs/vbenchmark/tasks/code-evolution/refactoring/class-to-hooks/PROMPT.md +0 -96
  528. package/refs/vbenchmark/tasks/code-evolution/refactoring/class-to-hooks/task.yaml +0 -27
  529. package/refs/vbenchmark/tasks/code-evolution/refactoring/dependency-injection/PROMPT.md +0 -47
  530. package/refs/vbenchmark/tasks/code-evolution/refactoring/dependency-injection/task.yaml +0 -24
  531. package/refs/vbenchmark/tasks/code-evolution/refactoring/error-handling/PROMPT.md +0 -48
  532. package/refs/vbenchmark/tasks/code-evolution/refactoring/error-handling/task.yaml +0 -24
  533. package/refs/vbenchmark/tasks/code-evolution/refactoring/monolith-to-modules/PROMPT.md +0 -50
  534. package/refs/vbenchmark/tasks/code-evolution/refactoring/monolith-to-modules/task.yaml +0 -24
  535. package/refs/vbenchmark/tasks/code-evolution/refactoring/orm-migration/PROMPT.md +0 -47
  536. package/refs/vbenchmark/tasks/code-evolution/refactoring/orm-migration/task.yaml +0 -24
  537. package/refs/vbenchmark/tasks/code-evolution/security/secrets-rotation/PROMPT.md +0 -49
  538. package/refs/vbenchmark/tasks/code-evolution/security/secrets-rotation/task.yaml +0 -24
  539. package/refs/vbenchmark/tasks/code-evolution/security/sql-injection-fix/PROMPT.md +0 -50
  540. package/refs/vbenchmark/tasks/code-evolution/security/sql-injection-fix/task.yaml +0 -24
  541. package/refs/vbenchmark/tasks/code-evolution/security/xss-prevention/PROMPT.md +0 -47
  542. package/refs/vbenchmark/tasks/code-evolution/security/xss-prevention/task.yaml +0 -24
  543. package/refs/vbenchmark/tasks/code-evolution/testing/add-unit-tests/PROMPT.md +0 -48
  544. package/refs/vbenchmark/tasks/code-evolution/testing/add-unit-tests/task.yaml +0 -24
  545. package/refs/vbenchmark/tasks/code-evolution/testing/e2e-playwright/PROMPT.md +0 -50
  546. package/refs/vbenchmark/tasks/code-evolution/testing/e2e-playwright/task.yaml +0 -24
  547. package/refs/vbenchmark/tasks/code-evolution/testing/pytest-fixtures/PROMPT.md +0 -47
  548. package/refs/vbenchmark/tasks/code-evolution/testing/pytest-fixtures/task.yaml +0 -24
  549. package/refs/vbenchmark/tasks/frontend/accessibility/keyboard-shortcuts/PROMPT.md +0 -44
  550. package/refs/vbenchmark/tasks/frontend/accessibility/keyboard-shortcuts/task.yaml +0 -24
  551. package/refs/vbenchmark/tasks/frontend/accessibility/screen-reader-nav/PROMPT.md +0 -44
  552. package/refs/vbenchmark/tasks/frontend/accessibility/screen-reader-nav/task.yaml +0 -24
  553. package/refs/vbenchmark/tasks/frontend/advanced/canvas-editor/PROMPT.md +0 -15
  554. package/refs/vbenchmark/tasks/frontend/advanced/canvas-editor/task.yaml +0 -16
  555. package/refs/vbenchmark/tasks/frontend/advanced/micro-frontend/PROMPT.md +0 -15
  556. package/refs/vbenchmark/tasks/frontend/advanced/micro-frontend/task.yaml +0 -16
  557. package/refs/vbenchmark/tasks/frontend/advanced/offline-first/PROMPT.md +0 -15
  558. package/refs/vbenchmark/tasks/frontend/advanced/offline-first/task.yaml +0 -16
  559. package/refs/vbenchmark/tasks/frontend/advanced/realtime-collab/PROMPT.md +0 -15
  560. package/refs/vbenchmark/tasks/frontend/advanced/realtime-collab/task.yaml +0 -16
  561. package/refs/vbenchmark/tasks/frontend/advanced/service-worker/PROMPT.md +0 -15
  562. package/refs/vbenchmark/tasks/frontend/advanced/service-worker/task.yaml +0 -16
  563. package/refs/vbenchmark/tasks/frontend/advanced/state-machine/PROMPT.md +0 -15
  564. package/refs/vbenchmark/tasks/frontend/advanced/state-machine/task.yaml +0 -16
  565. package/refs/vbenchmark/tasks/frontend/advanced/virtual-list/PROMPT.md +0 -15
  566. package/refs/vbenchmark/tasks/frontend/advanced/virtual-list/task.yaml +0 -16
  567. package/refs/vbenchmark/tasks/frontend/advanced/wasm-integration/PROMPT.md +0 -15
  568. package/refs/vbenchmark/tasks/frontend/advanced/wasm-integration/task.yaml +0 -16
  569. package/refs/vbenchmark/tasks/frontend/advanced/web-worker/PROMPT.md +0 -15
  570. package/refs/vbenchmark/tasks/frontend/advanced/web-worker/task.yaml +0 -16
  571. package/refs/vbenchmark/tasks/frontend/advanced/webgl-visualization/PROMPT.md +0 -15
  572. package/refs/vbenchmark/tasks/frontend/advanced/webgl-visualization/task.yaml +0 -16
  573. package/refs/vbenchmark/tasks/frontend/animation/page-transitions/PROMPT.md +0 -44
  574. package/refs/vbenchmark/tasks/frontend/animation/page-transitions/task.yaml +0 -24
  575. package/refs/vbenchmark/tasks/frontend/components/data-grid/PROMPT.md +0 -59
  576. package/refs/vbenchmark/tasks/frontend/components/data-grid/task.yaml +0 -24
  577. package/refs/vbenchmark/tasks/frontend/components/date-range-picker/PROMPT.md +0 -57
  578. package/refs/vbenchmark/tasks/frontend/components/date-range-picker/task.yaml +0 -24
  579. package/refs/vbenchmark/tasks/frontend/components/file-uploader/PROMPT.md +0 -55
  580. package/refs/vbenchmark/tasks/frontend/components/file-uploader/task.yaml +0 -24
  581. package/refs/vbenchmark/tasks/frontend/components/form-builder/PROMPT.md +0 -96
  582. package/refs/vbenchmark/tasks/frontend/components/form-builder/task.yaml +0 -28
  583. package/refs/vbenchmark/tasks/frontend/components/rich-text-editor/PROMPT.md +0 -45
  584. package/refs/vbenchmark/tasks/frontend/components/rich-text-editor/task.yaml +0 -24
  585. package/refs/vbenchmark/tasks/frontend/figma-to-code/dashboard-layout/PROMPT.md +0 -50
  586. package/refs/vbenchmark/tasks/frontend/figma-to-code/dashboard-layout/task.yaml +0 -25
  587. package/refs/vbenchmark/tasks/frontend/figma-to-code/landing-page/PROMPT.md +0 -49
  588. package/refs/vbenchmark/tasks/frontend/figma-to-code/landing-page/task.yaml +0 -25
  589. package/refs/vbenchmark/tasks/frontend/figma-to-code/mobile-app-screen/PROMPT.md +0 -51
  590. package/refs/vbenchmark/tasks/frontend/figma-to-code/mobile-app-screen/task.yaml +0 -24
  591. package/refs/vbenchmark/tasks/frontend/figma-to-code/pricing-card/PROMPT.md +0 -93
  592. package/refs/vbenchmark/tasks/frontend/figma-to-code/pricing-card/docker-compose.yaml +0 -23
  593. package/refs/vbenchmark/tasks/frontend/figma-to-code/pricing-card/task.yaml +0 -30
  594. package/refs/vbenchmark/tasks/frontend/figma-to-code/pricing-card/tests/visual/diff.test.ts +0 -107
  595. package/refs/vbenchmark/tasks/frontend/figma-to-code/pricing-card/tests/visual/interaction.test.ts +0 -88
  596. package/refs/vbenchmark/tasks/frontend/performance/image-lazy-load/PROMPT.md +0 -43
  597. package/refs/vbenchmark/tasks/frontend/performance/image-lazy-load/task.yaml +0 -24
  598. package/refs/vbenchmark/tasks/frontend/performance/infinite-scroll/PROMPT.md +0 -44
  599. package/refs/vbenchmark/tasks/frontend/performance/infinite-scroll/task.yaml +0 -24
  600. package/refs/vbenchmark/tasks/frontend/state-management/collaborative-editor/PROMPT.md +0 -44
  601. package/refs/vbenchmark/tasks/frontend/state-management/collaborative-editor/task.yaml +0 -24
  602. package/refs/vbenchmark/tasks/frontend/state-management/shopping-cart/PROMPT.md +0 -53
  603. package/refs/vbenchmark/tasks/frontend/state-management/shopping-cart/task.yaml +0 -24
  604. package/refs/vbenchmark/tasks/frontend/visualization/chart-dashboard/PROMPT.md +0 -83
  605. package/refs/vbenchmark/tasks/frontend/visualization/chart-dashboard/task.yaml +0 -28
  606. package/refs/vbenchmark/tasks/frontend/visualization/gantt-chart/PROMPT.md +0 -57
  607. package/refs/vbenchmark/tasks/frontend/visualization/gantt-chart/task.yaml +0 -24
  608. package/refs/vbenchmark/tasks/frontend/visualization/map-dashboard/PROMPT.md +0 -44
  609. package/refs/vbenchmark/tasks/frontend/visualization/map-dashboard/task.yaml +0 -24
  610. package/refs/vbenchmark/tasks/frontend/visualization/realtime-charts/PROMPT.md +0 -43
  611. package/refs/vbenchmark/tasks/frontend/visualization/realtime-charts/task.yaml +0 -24
  612. package/refs/vbenchmark/tasks/glue-code/advanced/blue-green-deploy/PROMPT.md +0 -15
  613. package/refs/vbenchmark/tasks/glue-code/advanced/blue-green-deploy/task.yaml +0 -16
  614. package/refs/vbenchmark/tasks/glue-code/advanced/canary-release/PROMPT.md +0 -15
  615. package/refs/vbenchmark/tasks/glue-code/advanced/canary-release/task.yaml +0 -16
  616. package/refs/vbenchmark/tasks/glue-code/advanced/change-data-capture/PROMPT.md +0 -15
  617. package/refs/vbenchmark/tasks/glue-code/advanced/change-data-capture/task.yaml +0 -16
  618. package/refs/vbenchmark/tasks/glue-code/advanced/config-management/PROMPT.md +0 -15
  619. package/refs/vbenchmark/tasks/glue-code/advanced/config-management/task.yaml +0 -16
  620. package/refs/vbenchmark/tasks/glue-code/advanced/data-pipeline/PROMPT.md +0 -15
  621. package/refs/vbenchmark/tasks/glue-code/advanced/data-pipeline/task.yaml +0 -16
  622. package/refs/vbenchmark/tasks/glue-code/advanced/distributed-tracing/PROMPT.md +0 -15
  623. package/refs/vbenchmark/tasks/glue-code/advanced/distributed-tracing/task.yaml +0 -16
  624. package/refs/vbenchmark/tasks/glue-code/advanced/log-aggregation/PROMPT.md +0 -15
  625. package/refs/vbenchmark/tasks/glue-code/advanced/log-aggregation/task.yaml +0 -16
  626. package/refs/vbenchmark/tasks/glue-code/advanced/schema-registry/PROMPT.md +0 -15
  627. package/refs/vbenchmark/tasks/glue-code/advanced/schema-registry/task.yaml +0 -16
  628. package/refs/vbenchmark/tasks/glue-code/advanced/secret-rotation/PROMPT.md +0 -15
  629. package/refs/vbenchmark/tasks/glue-code/advanced/secret-rotation/task.yaml +0 -16
  630. package/refs/vbenchmark/tasks/glue-code/advanced/stream-processing/PROMPT.md +0 -15
  631. package/refs/vbenchmark/tasks/glue-code/advanced/stream-processing/task.yaml +0 -16
  632. package/refs/vbenchmark/tasks/glue-code/api-sync/rest-to-graphql/PROMPT.md +0 -66
  633. package/refs/vbenchmark/tasks/glue-code/api-sync/rest-to-graphql/task.yaml +0 -27
  634. package/refs/vbenchmark/tasks/glue-code/caching/redis-cache/PROMPT.md +0 -82
  635. package/refs/vbenchmark/tasks/glue-code/caching/redis-cache/task.yaml +0 -27
  636. package/refs/vbenchmark/tasks/glue-code/data-transform/avro-schema-evolution/PROMPT.md +0 -51
  637. package/refs/vbenchmark/tasks/glue-code/data-transform/avro-schema-evolution/task.yaml +0 -24
  638. package/refs/vbenchmark/tasks/glue-code/data-transform/csv-normalizer/PROMPT.md +0 -49
  639. package/refs/vbenchmark/tasks/glue-code/data-transform/csv-normalizer/task.yaml +0 -24
  640. package/refs/vbenchmark/tasks/glue-code/data-transform/excel-to-json/PROMPT.md +0 -67
  641. package/refs/vbenchmark/tasks/glue-code/data-transform/excel-to-json/task.yaml +0 -28
  642. package/refs/vbenchmark/tasks/glue-code/data-transform/excel-to-json/tests/transform.test.py +0 -137
  643. package/refs/vbenchmark/tasks/glue-code/data-transform/json-to-xml/PROMPT.md +0 -45
  644. package/refs/vbenchmark/tasks/glue-code/data-transform/json-to-xml/task.yaml +0 -24
  645. package/refs/vbenchmark/tasks/glue-code/data-transform/protobuf-converter/PROMPT.md +0 -44
  646. package/refs/vbenchmark/tasks/glue-code/data-transform/protobuf-converter/task.yaml +0 -24
  647. package/refs/vbenchmark/tasks/glue-code/etl/cdc-pipeline/PROMPT.md +0 -52
  648. package/refs/vbenchmark/tasks/glue-code/etl/cdc-pipeline/task.yaml +0 -27
  649. package/refs/vbenchmark/tasks/glue-code/etl/database-sync/PROMPT.md +0 -51
  650. package/refs/vbenchmark/tasks/glue-code/etl/database-sync/task.yaml +0 -24
  651. package/refs/vbenchmark/tasks/glue-code/etl/s3-to-warehouse/PROMPT.md +0 -50
  652. package/refs/vbenchmark/tasks/glue-code/etl/s3-to-warehouse/task.yaml +0 -24
  653. package/refs/vbenchmark/tasks/glue-code/file-processing/image-resizer/PROMPT.md +0 -52
  654. package/refs/vbenchmark/tasks/glue-code/file-processing/image-resizer/task.yaml +0 -24
  655. package/refs/vbenchmark/tasks/glue-code/file-processing/pdf-merger/PROMPT.md +0 -50
  656. package/refs/vbenchmark/tasks/glue-code/file-processing/pdf-merger/task.yaml +0 -24
  657. package/refs/vbenchmark/tasks/glue-code/file-processing/video-transcoder/PROMPT.md +0 -50
  658. package/refs/vbenchmark/tasks/glue-code/file-processing/video-transcoder/task.yaml +0 -27
  659. package/refs/vbenchmark/tasks/glue-code/migration/data-backfill/PROMPT.md +0 -50
  660. package/refs/vbenchmark/tasks/glue-code/migration/data-backfill/task.yaml +0 -24
  661. package/refs/vbenchmark/tasks/glue-code/migration/database-versioning/PROMPT.md +0 -50
  662. package/refs/vbenchmark/tasks/glue-code/migration/database-versioning/task.yaml +0 -24
  663. package/refs/vbenchmark/tasks/glue-code/queue/kafka-producer/PROMPT.md +0 -49
  664. package/refs/vbenchmark/tasks/glue-code/queue/kafka-producer/task.yaml +0 -27
  665. package/refs/vbenchmark/tasks/glue-code/queue/rabbitmq-consumer/PROMPT.md +0 -50
  666. package/refs/vbenchmark/tasks/glue-code/queue/rabbitmq-consumer/task.yaml +0 -27
  667. package/refs/vbenchmark/tasks/glue-code/queue/sqs-batch-processor/PROMPT.md +0 -47
  668. package/refs/vbenchmark/tasks/glue-code/queue/sqs-batch-processor/task.yaml +0 -24
  669. package/refs/vbenchmark/tasks/glue-code/scheduler/cron-job-manager/PROMPT.md +0 -52
  670. package/refs/vbenchmark/tasks/glue-code/scheduler/cron-job-manager/task.yaml +0 -27
  671. package/refs/vbenchmark/tasks/glue-code/scheduler/delayed-tasks/PROMPT.md +0 -51
  672. package/refs/vbenchmark/tasks/glue-code/scheduler/delayed-tasks/task.yaml +0 -27
  673. package/refs/vbenchmark/tasks/saas-core/advanced/api-versioning/PROMPT.md +0 -15
  674. package/refs/vbenchmark/tasks/saas-core/advanced/api-versioning/task.yaml +0 -16
  675. package/refs/vbenchmark/tasks/saas-core/advanced/circuit-breaker/PROMPT.md +0 -13
  676. package/refs/vbenchmark/tasks/saas-core/advanced/circuit-breaker/task.yaml +0 -16
  677. package/refs/vbenchmark/tasks/saas-core/advanced/compliance-gdpr/PROMPT.md +0 -15
  678. package/refs/vbenchmark/tasks/saas-core/advanced/compliance-gdpr/task.yaml +0 -16
  679. package/refs/vbenchmark/tasks/saas-core/advanced/cqrs-pattern/PROMPT.md +0 -13
  680. package/refs/vbenchmark/tasks/saas-core/advanced/cqrs-pattern/task.yaml +0 -16
  681. package/refs/vbenchmark/tasks/saas-core/advanced/data-encryption/PROMPT.md +0 -15
  682. package/refs/vbenchmark/tasks/saas-core/advanced/data-encryption/task.yaml +0 -16
  683. package/refs/vbenchmark/tasks/saas-core/advanced/distributed-locking/PROMPT.md +0 -46
  684. package/refs/vbenchmark/tasks/saas-core/advanced/distributed-locking/task.yaml +0 -24
  685. package/refs/vbenchmark/tasks/saas-core/advanced/event-sourcing/PROMPT.md +0 -23
  686. package/refs/vbenchmark/tasks/saas-core/advanced/event-sourcing/task.yaml +0 -16
  687. package/refs/vbenchmark/tasks/saas-core/advanced/feature-flags-ab/PROMPT.md +0 -15
  688. package/refs/vbenchmark/tasks/saas-core/advanced/feature-flags-ab/task.yaml +0 -16
  689. package/refs/vbenchmark/tasks/saas-core/advanced/saga-orchestration/PROMPT.md +0 -13
  690. package/refs/vbenchmark/tasks/saas-core/advanced/saga-orchestration/task.yaml +0 -16
  691. package/refs/vbenchmark/tasks/saas-core/advanced/webhook-delivery/PROMPT.md +0 -15
  692. package/refs/vbenchmark/tasks/saas-core/advanced/webhook-delivery/task.yaml +0 -16
  693. package/refs/vbenchmark/tasks/saas-core/audit/activity-logging/PROMPT.md +0 -50
  694. package/refs/vbenchmark/tasks/saas-core/audit/activity-logging/task.yaml +0 -27
  695. package/refs/vbenchmark/tasks/saas-core/auth/jwt-refresh-tokens/PROMPT.md +0 -50
  696. package/refs/vbenchmark/tasks/saas-core/auth/jwt-refresh-tokens/task.yaml +0 -27
  697. package/refs/vbenchmark/tasks/saas-core/auth/magic-link-email/PROMPT.md +0 -53
  698. package/refs/vbenchmark/tasks/saas-core/auth/magic-link-email/task.yaml +0 -27
  699. package/refs/vbenchmark/tasks/saas-core/auth/mfa-totp/PROMPT.md +0 -79
  700. package/refs/vbenchmark/tasks/saas-core/auth/mfa-totp/task.yaml +0 -27
  701. package/refs/vbenchmark/tasks/saas-core/auth/rbac-permissions/PROMPT.md +0 -51
  702. package/refs/vbenchmark/tasks/saas-core/auth/rbac-permissions/task.yaml +0 -27
  703. package/refs/vbenchmark/tasks/saas-core/auth/session-management/PROMPT.md +0 -52
  704. package/refs/vbenchmark/tasks/saas-core/auth/session-management/task.yaml +0 -27
  705. package/refs/vbenchmark/tasks/saas-core/auth/supabase-oauth/PROMPT.md +0 -45
  706. package/refs/vbenchmark/tasks/saas-core/auth/supabase-oauth/docker-compose.yaml +0 -47
  707. package/refs/vbenchmark/tasks/saas-core/auth/supabase-oauth/task.yaml +0 -32
  708. package/refs/vbenchmark/tasks/saas-core/auth/supabase-oauth/tests/auth.test.ts +0 -59
  709. package/refs/vbenchmark/tasks/saas-core/billing/invoice-generation/PROMPT.md +0 -53
  710. package/refs/vbenchmark/tasks/saas-core/billing/invoice-generation/task.yaml +0 -27
  711. package/refs/vbenchmark/tasks/saas-core/billing/stripe-subscriptions/PROMPT.md +0 -51
  712. package/refs/vbenchmark/tasks/saas-core/billing/stripe-subscriptions/task.yaml +0 -27
  713. package/refs/vbenchmark/tasks/saas-core/billing/usage-metering/PROMPT.md +0 -52
  714. package/refs/vbenchmark/tasks/saas-core/billing/usage-metering/task.yaml +0 -27
  715. package/refs/vbenchmark/tasks/saas-core/crud/dashboard-table/PROMPT.md +0 -48
  716. package/refs/vbenchmark/tasks/saas-core/crud/dashboard-table/task.yaml +0 -28
  717. package/refs/vbenchmark/tasks/saas-core/multi-tenant/org-isolation/PROMPT.md +0 -50
  718. package/refs/vbenchmark/tasks/saas-core/multi-tenant/org-isolation/task.yaml +0 -27
  719. package/refs/vbenchmark/tasks/saas-core/multi-tenant/subdomain-routing/PROMPT.md +0 -50
  720. package/refs/vbenchmark/tasks/saas-core/multi-tenant/subdomain-routing/task.yaml +0 -27
  721. package/refs/vbenchmark/tasks/saas-core/notifications/email-queue/PROMPT.md +0 -53
  722. package/refs/vbenchmark/tasks/saas-core/notifications/email-queue/task.yaml +0 -27
  723. package/refs/vbenchmark/tasks/saas-core/notifications/in-app-alerts/PROMPT.md +0 -51
  724. package/refs/vbenchmark/tasks/saas-core/notifications/in-app-alerts/task.yaml +0 -27
  725. package/refs/vbenchmark/tasks/saas-core/notifications/push-notifications/PROMPT.md +0 -51
  726. package/refs/vbenchmark/tasks/saas-core/notifications/push-notifications/task.yaml +0 -27
  727. package/refs/vbenchmark/tasks/saas-core/realtime/websocket-chat/PROMPT.md +0 -80
  728. package/refs/vbenchmark/tasks/saas-core/realtime/websocket-chat/task.yaml +0 -27
  729. package/refs/vbenchmark/tasks/saas-core/search/full-text-search/PROMPT.md +0 -51
  730. package/refs/vbenchmark/tasks/saas-core/search/full-text-search/task.yaml +0 -27
  731. package/refs/vbenchmark/tasks/saas-core/security/rate-limiter/PROMPT.md +0 -99
  732. package/refs/vbenchmark/tasks/saas-core/security/rate-limiter/task.yaml +0 -27
  733. package/refs/vbenchmark/tasks/saas-core/settings/user-preferences/PROMPT.md +0 -78
  734. package/refs/vbenchmark/tasks/saas-core/settings/user-preferences/task.yaml +0 -27
  735. package/refs/vbenchmark/templates/fastapi-postgres/docker-compose.yaml +0 -36
  736. package/refs/vbenchmark/templates/fastapi-postgres/pyproject.toml +0 -34
  737. package/refs/vbenchmark/templates/fastapi-postgres/src/__init__.py +0 -0
  738. package/refs/vbenchmark/templates/fastapi-postgres/src/config.py +0 -12
  739. package/refs/vbenchmark/templates/fastapi-postgres/src/database.py +0 -15
  740. package/refs/vbenchmark/templates/fastapi-postgres/src/main.py +0 -51
  741. package/refs/vbenchmark/templates/fastapi-postgres/src/models.py +0 -12
  742. package/refs/vbenchmark/templates/fastapi-postgres/src/schemas.py +0 -20
  743. package/refs/vbenchmark/templates/go-fiber/docker-compose.yaml +0 -34
  744. package/refs/vbenchmark/templates/go-fiber/go.mod +0 -33
  745. package/refs/vbenchmark/templates/go-fiber/go.sum +0 -68
  746. package/refs/vbenchmark/templates/go-fiber/main.go +0 -98
  747. package/refs/vbenchmark/templates/nextjs-supabase/.env.example +0 -3
  748. package/refs/vbenchmark/templates/nextjs-supabase/docker-compose.yaml +0 -68
  749. package/refs/vbenchmark/templates/nextjs-supabase/src/app/globals.css +0 -13
  750. package/refs/vbenchmark/templates/nextjs-supabase/src/app/layout.tsx +0 -19
  751. package/refs/vbenchmark/templates/nextjs-supabase/src/app/page.tsx +0 -38
  752. package/refs/vbenchmark/templates/nextjs-supabase/src/lib/supabase/client.ts +0 -8
  753. package/refs/vbenchmark/templates/nextjs-supabase/src/lib/supabase/server.ts +0 -32
  754. package/refs/vbenchmark/templates/rust-axum/Cargo.lock +0 -2371
  755. package/refs/vbenchmark/templates/rust-axum/Cargo.toml +0 -16
  756. package/refs/vbenchmark/templates/rust-axum/docker-compose.yaml +0 -34
  757. package/refs/vbenchmark/templates/rust-axum/migrations/20240101000000_init.sql +0 -20
  758. package/refs/vbenchmark/templates/rust-axum/src/main.rs +0 -121
  759. package/refs/vbenchmark/tsconfig.base.json +0 -18
  760. package/refs/vbenchmark/turbo.json +0 -23
  761. package/refs/vbenchmark/vercel.json +0 -10
@@ -1,1241 +0,0 @@
1
- /**
2
- * GSD Tools Tests - Phase
3
- */
4
-
5
- const { test, describe, beforeEach, afterEach } = require('node:test');
6
- const assert = require('node:assert');
7
- const fs = require('fs');
8
- const path = require('path');
9
- const { runGsdTools, createTempProject, cleanup } = require('./helpers.cjs');
10
-
11
- describe('phases list command', () => {
12
- let tmpDir;
13
-
14
- beforeEach(() => {
15
- tmpDir = createTempProject();
16
- });
17
-
18
- afterEach(() => {
19
- cleanup(tmpDir);
20
- });
21
-
22
- test('empty phases directory returns empty array', () => {
23
- const result = runGsdTools('phases list', tmpDir);
24
- assert.ok(result.success, `Command failed: ${result.error}`);
25
-
26
- const output = JSON.parse(result.output);
27
- assert.deepStrictEqual(output.directories, [], 'directories should be empty');
28
- assert.strictEqual(output.count, 0, 'count should be 0');
29
- });
30
-
31
- test('lists phase directories sorted numerically', () => {
32
- // Create out-of-order directories
33
- fs.mkdirSync(path.join(tmpDir, '.planning', 'phases', '10-final'), { recursive: true });
34
- fs.mkdirSync(path.join(tmpDir, '.planning', 'phases', '02-api'), { recursive: true });
35
- fs.mkdirSync(path.join(tmpDir, '.planning', 'phases', '01-foundation'), { recursive: true });
36
-
37
- const result = runGsdTools('phases list', tmpDir);
38
- assert.ok(result.success, `Command failed: ${result.error}`);
39
-
40
- const output = JSON.parse(result.output);
41
- assert.strictEqual(output.count, 3, 'should have 3 directories');
42
- assert.deepStrictEqual(
43
- output.directories,
44
- ['01-foundation', '02-api', '10-final'],
45
- 'should be sorted numerically'
46
- );
47
- });
48
-
49
- test('handles decimal phases in sort order', () => {
50
- fs.mkdirSync(path.join(tmpDir, '.planning', 'phases', '02-api'), { recursive: true });
51
- fs.mkdirSync(path.join(tmpDir, '.planning', 'phases', '02.1-hotfix'), { recursive: true });
52
- fs.mkdirSync(path.join(tmpDir, '.planning', 'phases', '02.2-patch'), { recursive: true });
53
- fs.mkdirSync(path.join(tmpDir, '.planning', 'phases', '03-ui'), { recursive: true });
54
-
55
- const result = runGsdTools('phases list', tmpDir);
56
- assert.ok(result.success, `Command failed: ${result.error}`);
57
-
58
- const output = JSON.parse(result.output);
59
- assert.deepStrictEqual(
60
- output.directories,
61
- ['02-api', '02.1-hotfix', '02.2-patch', '03-ui'],
62
- 'decimal phases should sort correctly between whole numbers'
63
- );
64
- });
65
-
66
- test('--type plans lists only PLAN.md files', () => {
67
- const phaseDir = path.join(tmpDir, '.planning', 'phases', '01-test');
68
- fs.mkdirSync(phaseDir, { recursive: true });
69
- fs.writeFileSync(path.join(phaseDir, '01-01-PLAN.md'), '# Plan 1');
70
- fs.writeFileSync(path.join(phaseDir, '01-02-PLAN.md'), '# Plan 2');
71
- fs.writeFileSync(path.join(phaseDir, '01-01-SUMMARY.md'), '# Summary');
72
- fs.writeFileSync(path.join(phaseDir, 'RESEARCH.md'), '# Research');
73
-
74
- const result = runGsdTools('phases list --type plans', tmpDir);
75
- assert.ok(result.success, `Command failed: ${result.error}`);
76
-
77
- const output = JSON.parse(result.output);
78
- assert.deepStrictEqual(
79
- output.files.sort(),
80
- ['01-01-PLAN.md', '01-02-PLAN.md'],
81
- 'should list only PLAN files'
82
- );
83
- });
84
-
85
- test('--type summaries lists only SUMMARY.md files', () => {
86
- const phaseDir = path.join(tmpDir, '.planning', 'phases', '01-test');
87
- fs.mkdirSync(phaseDir, { recursive: true });
88
- fs.writeFileSync(path.join(phaseDir, '01-01-PLAN.md'), '# Plan');
89
- fs.writeFileSync(path.join(phaseDir, '01-01-SUMMARY.md'), '# Summary 1');
90
- fs.writeFileSync(path.join(phaseDir, '01-02-SUMMARY.md'), '# Summary 2');
91
-
92
- const result = runGsdTools('phases list --type summaries', tmpDir);
93
- assert.ok(result.success, `Command failed: ${result.error}`);
94
-
95
- const output = JSON.parse(result.output);
96
- assert.deepStrictEqual(
97
- output.files.sort(),
98
- ['01-01-SUMMARY.md', '01-02-SUMMARY.md'],
99
- 'should list only SUMMARY files'
100
- );
101
- });
102
-
103
- test('--phase filters to specific phase directory', () => {
104
- const phase01 = path.join(tmpDir, '.planning', 'phases', '01-foundation');
105
- const phase02 = path.join(tmpDir, '.planning', 'phases', '02-api');
106
- fs.mkdirSync(phase01, { recursive: true });
107
- fs.mkdirSync(phase02, { recursive: true });
108
- fs.writeFileSync(path.join(phase01, '01-01-PLAN.md'), '# Plan');
109
- fs.writeFileSync(path.join(phase02, '02-01-PLAN.md'), '# Plan');
110
-
111
- const result = runGsdTools('phases list --type plans --phase 01', tmpDir);
112
- assert.ok(result.success, `Command failed: ${result.error}`);
113
-
114
- const output = JSON.parse(result.output);
115
- assert.deepStrictEqual(output.files, ['01-01-PLAN.md'], 'should only list phase 01 plans');
116
- assert.strictEqual(output.phase_dir, 'foundation', 'should report phase name without number prefix');
117
- });
118
- });
119
-
120
- // ─────────────────────────────────────────────────────────────────────────────
121
- // roadmap get-phase command
122
- // ─────────────────────────────────────────────────────────────────────────────
123
-
124
-
125
- describe('phase next-decimal command', () => {
126
- let tmpDir;
127
-
128
- beforeEach(() => {
129
- tmpDir = createTempProject();
130
- });
131
-
132
- afterEach(() => {
133
- cleanup(tmpDir);
134
- });
135
-
136
- test('returns X.1 when no decimal phases exist', () => {
137
- fs.mkdirSync(path.join(tmpDir, '.planning', 'phases', '06-feature'), { recursive: true });
138
- fs.mkdirSync(path.join(tmpDir, '.planning', 'phases', '07-next'), { recursive: true });
139
-
140
- const result = runGsdTools('phase next-decimal 06', tmpDir);
141
- assert.ok(result.success, `Command failed: ${result.error}`);
142
-
143
- const output = JSON.parse(result.output);
144
- assert.strictEqual(output.next, '06.1', 'should return 06.1');
145
- assert.deepStrictEqual(output.existing, [], 'no existing decimals');
146
- });
147
-
148
- test('increments from existing decimal phases', () => {
149
- fs.mkdirSync(path.join(tmpDir, '.planning', 'phases', '06-feature'), { recursive: true });
150
- fs.mkdirSync(path.join(tmpDir, '.planning', 'phases', '06.1-hotfix'), { recursive: true });
151
- fs.mkdirSync(path.join(tmpDir, '.planning', 'phases', '06.2-patch'), { recursive: true });
152
-
153
- const result = runGsdTools('phase next-decimal 06', tmpDir);
154
- assert.ok(result.success, `Command failed: ${result.error}`);
155
-
156
- const output = JSON.parse(result.output);
157
- assert.strictEqual(output.next, '06.3', 'should return 06.3');
158
- assert.deepStrictEqual(output.existing, ['06.1', '06.2'], 'lists existing decimals');
159
- });
160
-
161
- test('handles gaps in decimal sequence', () => {
162
- fs.mkdirSync(path.join(tmpDir, '.planning', 'phases', '06-feature'), { recursive: true });
163
- fs.mkdirSync(path.join(tmpDir, '.planning', 'phases', '06.1-first'), { recursive: true });
164
- fs.mkdirSync(path.join(tmpDir, '.planning', 'phases', '06.3-third'), { recursive: true });
165
-
166
- const result = runGsdTools('phase next-decimal 06', tmpDir);
167
- assert.ok(result.success, `Command failed: ${result.error}`);
168
-
169
- const output = JSON.parse(result.output);
170
- // Should take next after highest, not fill gap
171
- assert.strictEqual(output.next, '06.4', 'should return 06.4, not fill gap at 06.2');
172
- });
173
-
174
- test('handles single-digit phase input', () => {
175
- fs.mkdirSync(path.join(tmpDir, '.planning', 'phases', '06-feature'), { recursive: true });
176
-
177
- const result = runGsdTools('phase next-decimal 6', tmpDir);
178
- assert.ok(result.success, `Command failed: ${result.error}`);
179
-
180
- const output = JSON.parse(result.output);
181
- assert.strictEqual(output.next, '06.1', 'should normalize to 06.1');
182
- assert.strictEqual(output.base_phase, '06', 'base phase should be padded');
183
- });
184
-
185
- test('returns error if base phase does not exist', () => {
186
- fs.mkdirSync(path.join(tmpDir, '.planning', 'phases', '01-start'), { recursive: true });
187
-
188
- const result = runGsdTools('phase next-decimal 06', tmpDir);
189
- assert.ok(result.success, `Command should succeed: ${result.error}`);
190
-
191
- const output = JSON.parse(result.output);
192
- assert.strictEqual(output.found, false, 'base phase not found');
193
- assert.strictEqual(output.next, '06.1', 'should still suggest 06.1');
194
- });
195
- });
196
-
197
- // ─────────────────────────────────────────────────────────────────────────────
198
- // phase-plan-index command
199
- // ─────────────────────────────────────────────────────────────────────────────
200
-
201
-
202
- describe('phase-plan-index command', () => {
203
- let tmpDir;
204
-
205
- beforeEach(() => {
206
- tmpDir = createTempProject();
207
- });
208
-
209
- afterEach(() => {
210
- cleanup(tmpDir);
211
- });
212
-
213
- test('empty phase directory returns empty plans array', () => {
214
- fs.mkdirSync(path.join(tmpDir, '.planning', 'phases', '03-api'), { recursive: true });
215
-
216
- const result = runGsdTools('phase-plan-index 03', tmpDir);
217
- assert.ok(result.success, `Command failed: ${result.error}`);
218
-
219
- const output = JSON.parse(result.output);
220
- assert.strictEqual(output.phase, '03', 'phase number correct');
221
- assert.deepStrictEqual(output.plans, [], 'plans should be empty');
222
- assert.deepStrictEqual(output.waves, {}, 'waves should be empty');
223
- assert.deepStrictEqual(output.incomplete, [], 'incomplete should be empty');
224
- assert.strictEqual(output.has_checkpoints, false, 'no checkpoints');
225
- });
226
-
227
- test('extracts single plan with frontmatter', () => {
228
- const phaseDir = path.join(tmpDir, '.planning', 'phases', '03-api');
229
- fs.mkdirSync(phaseDir, { recursive: true });
230
-
231
- fs.writeFileSync(
232
- path.join(phaseDir, '03-01-PLAN.md'),
233
- `---
234
- wave: 1
235
- autonomous: true
236
- objective: Set up database schema
237
- files-modified: [prisma/schema.prisma, src/lib/db.ts]
238
- ---
239
-
240
- ## Task 1: Create schema
241
- ## Task 2: Generate client
242
- `
243
- );
244
-
245
- const result = runGsdTools('phase-plan-index 03', tmpDir);
246
- assert.ok(result.success, `Command failed: ${result.error}`);
247
-
248
- const output = JSON.parse(result.output);
249
- assert.strictEqual(output.plans.length, 1, 'should have 1 plan');
250
- assert.strictEqual(output.plans[0].id, '03-01', 'plan id correct');
251
- assert.strictEqual(output.plans[0].wave, 1, 'wave extracted');
252
- assert.strictEqual(output.plans[0].autonomous, true, 'autonomous extracted');
253
- assert.strictEqual(output.plans[0].objective, 'Set up database schema', 'objective extracted');
254
- assert.deepStrictEqual(output.plans[0].files_modified, ['prisma/schema.prisma', 'src/lib/db.ts'], 'files extracted');
255
- assert.strictEqual(output.plans[0].task_count, 2, 'task count correct');
256
- assert.strictEqual(output.plans[0].has_summary, false, 'no summary yet');
257
- });
258
-
259
- test('groups multiple plans by wave', () => {
260
- const phaseDir = path.join(tmpDir, '.planning', 'phases', '03-api');
261
- fs.mkdirSync(phaseDir, { recursive: true });
262
-
263
- fs.writeFileSync(
264
- path.join(phaseDir, '03-01-PLAN.md'),
265
- `---
266
- wave: 1
267
- autonomous: true
268
- objective: Database setup
269
- ---
270
-
271
- ## Task 1: Schema
272
- `
273
- );
274
-
275
- fs.writeFileSync(
276
- path.join(phaseDir, '03-02-PLAN.md'),
277
- `---
278
- wave: 1
279
- autonomous: true
280
- objective: Auth setup
281
- ---
282
-
283
- ## Task 1: JWT
284
- `
285
- );
286
-
287
- fs.writeFileSync(
288
- path.join(phaseDir, '03-03-PLAN.md'),
289
- `---
290
- wave: 2
291
- autonomous: false
292
- objective: API routes
293
- ---
294
-
295
- ## Task 1: Routes
296
- `
297
- );
298
-
299
- const result = runGsdTools('phase-plan-index 03', tmpDir);
300
- assert.ok(result.success, `Command failed: ${result.error}`);
301
-
302
- const output = JSON.parse(result.output);
303
- assert.strictEqual(output.plans.length, 3, 'should have 3 plans');
304
- assert.deepStrictEqual(output.waves['1'], ['03-01', '03-02'], 'wave 1 has 2 plans');
305
- assert.deepStrictEqual(output.waves['2'], ['03-03'], 'wave 2 has 1 plan');
306
- });
307
-
308
- test('detects incomplete plans (no matching summary)', () => {
309
- const phaseDir = path.join(tmpDir, '.planning', 'phases', '03-api');
310
- fs.mkdirSync(phaseDir, { recursive: true });
311
-
312
- // Plan with summary
313
- fs.writeFileSync(path.join(phaseDir, '03-01-PLAN.md'), `---\nwave: 1\n---\n## Task 1`);
314
- fs.writeFileSync(path.join(phaseDir, '03-01-SUMMARY.md'), `# Summary`);
315
-
316
- // Plan without summary
317
- fs.writeFileSync(path.join(phaseDir, '03-02-PLAN.md'), `---\nwave: 2\n---\n## Task 1`);
318
-
319
- const result = runGsdTools('phase-plan-index 03', tmpDir);
320
- assert.ok(result.success, `Command failed: ${result.error}`);
321
-
322
- const output = JSON.parse(result.output);
323
- assert.strictEqual(output.plans[0].has_summary, true, 'first plan has summary');
324
- assert.strictEqual(output.plans[1].has_summary, false, 'second plan has no summary');
325
- assert.deepStrictEqual(output.incomplete, ['03-02'], 'incomplete list correct');
326
- });
327
-
328
- test('detects checkpoints (autonomous: false)', () => {
329
- const phaseDir = path.join(tmpDir, '.planning', 'phases', '03-api');
330
- fs.mkdirSync(phaseDir, { recursive: true });
331
-
332
- fs.writeFileSync(
333
- path.join(phaseDir, '03-01-PLAN.md'),
334
- `---
335
- wave: 1
336
- autonomous: false
337
- objective: Manual review needed
338
- ---
339
-
340
- ## Task 1: Review
341
- `
342
- );
343
-
344
- const result = runGsdTools('phase-plan-index 03', tmpDir);
345
- assert.ok(result.success, `Command failed: ${result.error}`);
346
-
347
- const output = JSON.parse(result.output);
348
- assert.strictEqual(output.has_checkpoints, true, 'should detect checkpoint');
349
- assert.strictEqual(output.plans[0].autonomous, false, 'plan marked non-autonomous');
350
- });
351
-
352
- test('phase not found returns error', () => {
353
- const result = runGsdTools('phase-plan-index 99', tmpDir);
354
- assert.ok(result.success, `Command should succeed: ${result.error}`);
355
-
356
- const output = JSON.parse(result.output);
357
- assert.strictEqual(output.error, 'Phase not found', 'should report phase not found');
358
- });
359
- });
360
-
361
- // ─────────────────────────────────────────────────────────────────────────────
362
- // state-snapshot command
363
- // ─────────────────────────────────────────────────────────────────────────────
364
-
365
-
366
- describe('phase add command', () => {
367
- let tmpDir;
368
-
369
- beforeEach(() => {
370
- tmpDir = createTempProject();
371
- });
372
-
373
- afterEach(() => {
374
- cleanup(tmpDir);
375
- });
376
-
377
- test('adds phase after highest existing', () => {
378
- fs.writeFileSync(
379
- path.join(tmpDir, '.planning', 'ROADMAP.md'),
380
- `# Roadmap v1.0
381
-
382
- ### Phase 1: Foundation
383
- **Goal:** Setup
384
-
385
- ### Phase 2: API
386
- **Goal:** Build API
387
-
388
- ---
389
- `
390
- );
391
-
392
- const result = runGsdTools('phase add User Dashboard', tmpDir);
393
- assert.ok(result.success, `Command failed: ${result.error}`);
394
-
395
- const output = JSON.parse(result.output);
396
- assert.strictEqual(output.phase_number, 3, 'should be phase 3');
397
- assert.strictEqual(output.slug, 'user-dashboard');
398
-
399
- // Verify directory created
400
- assert.ok(
401
- fs.existsSync(path.join(tmpDir, '.planning', 'phases', '03-user-dashboard')),
402
- 'directory should be created'
403
- );
404
-
405
- // Verify ROADMAP updated
406
- const roadmap = fs.readFileSync(path.join(tmpDir, '.planning', 'ROADMAP.md'), 'utf-8');
407
- assert.ok(roadmap.includes('### Phase 3: User Dashboard'), 'roadmap should include new phase');
408
- assert.ok(roadmap.includes('**Depends on:** Phase 2'), 'should depend on previous');
409
- });
410
-
411
- test('handles empty roadmap', () => {
412
- fs.writeFileSync(
413
- path.join(tmpDir, '.planning', 'ROADMAP.md'),
414
- `# Roadmap v1.0\n`
415
- );
416
-
417
- const result = runGsdTools('phase add Initial Setup', tmpDir);
418
- assert.ok(result.success, `Command failed: ${result.error}`);
419
-
420
- const output = JSON.parse(result.output);
421
- assert.strictEqual(output.phase_number, 1, 'should be phase 1');
422
- });
423
-
424
- test('phase add includes **Requirements**: TBD in new ROADMAP entry', () => {
425
- fs.writeFileSync(
426
- path.join(tmpDir, '.planning', 'ROADMAP.md'),
427
- `# Roadmap v1.0\n\n### Phase 1: Foundation\n**Goal:** Setup\n\n---\n`
428
- );
429
-
430
- const result = runGsdTools('phase add User Dashboard', tmpDir);
431
- assert.ok(result.success, `Command failed: ${result.error}`);
432
-
433
- const roadmap = fs.readFileSync(path.join(tmpDir, '.planning', 'ROADMAP.md'), 'utf-8');
434
- assert.ok(roadmap.includes('**Requirements**: TBD'), 'new phase entry should include Requirements TBD');
435
- });
436
- });
437
-
438
- // ─────────────────────────────────────────────────────────────────────────────
439
- // phase insert command
440
- // ─────────────────────────────────────────────────────────────────────────────
441
-
442
-
443
- describe('phase insert command', () => {
444
- let tmpDir;
445
-
446
- beforeEach(() => {
447
- tmpDir = createTempProject();
448
- });
449
-
450
- afterEach(() => {
451
- cleanup(tmpDir);
452
- });
453
-
454
- test('inserts decimal phase after target', () => {
455
- fs.writeFileSync(
456
- path.join(tmpDir, '.planning', 'ROADMAP.md'),
457
- `# Roadmap
458
-
459
- ### Phase 1: Foundation
460
- **Goal:** Setup
461
-
462
- ### Phase 2: API
463
- **Goal:** Build API
464
- `
465
- );
466
- fs.mkdirSync(path.join(tmpDir, '.planning', 'phases', '01-foundation'), { recursive: true });
467
-
468
- const result = runGsdTools('phase insert 1 Fix Critical Bug', tmpDir);
469
- assert.ok(result.success, `Command failed: ${result.error}`);
470
-
471
- const output = JSON.parse(result.output);
472
- assert.strictEqual(output.phase_number, '01.1', 'should be 01.1');
473
- assert.strictEqual(output.after_phase, '1');
474
-
475
- // Verify directory
476
- assert.ok(
477
- fs.existsSync(path.join(tmpDir, '.planning', 'phases', '01.1-fix-critical-bug')),
478
- 'decimal phase directory should be created'
479
- );
480
-
481
- // Verify ROADMAP
482
- const roadmap = fs.readFileSync(path.join(tmpDir, '.planning', 'ROADMAP.md'), 'utf-8');
483
- assert.ok(roadmap.includes('Phase 01.1: Fix Critical Bug (INSERTED)'), 'roadmap should include inserted phase');
484
- });
485
-
486
- test('increments decimal when siblings exist', () => {
487
- fs.writeFileSync(
488
- path.join(tmpDir, '.planning', 'ROADMAP.md'),
489
- `# Roadmap
490
-
491
- ### Phase 1: Foundation
492
- **Goal:** Setup
493
-
494
- ### Phase 2: API
495
- **Goal:** Build API
496
- `
497
- );
498
- fs.mkdirSync(path.join(tmpDir, '.planning', 'phases', '01-foundation'), { recursive: true });
499
- fs.mkdirSync(path.join(tmpDir, '.planning', 'phases', '01.1-hotfix'), { recursive: true });
500
-
501
- const result = runGsdTools('phase insert 1 Another Fix', tmpDir);
502
- assert.ok(result.success, `Command failed: ${result.error}`);
503
-
504
- const output = JSON.parse(result.output);
505
- assert.strictEqual(output.phase_number, '01.2', 'should be 01.2');
506
- });
507
-
508
- test('rejects missing phase', () => {
509
- fs.writeFileSync(
510
- path.join(tmpDir, '.planning', 'ROADMAP.md'),
511
- `# Roadmap\n### Phase 1: Test\n**Goal:** Test\n`
512
- );
513
-
514
- const result = runGsdTools('phase insert 99 Fix Something', tmpDir);
515
- assert.ok(!result.success, 'should fail for missing phase');
516
- assert.ok(result.error.includes('not found'), 'error mentions not found');
517
- });
518
-
519
- test('handles padding mismatch between input and roadmap', () => {
520
- fs.writeFileSync(
521
- path.join(tmpDir, '.planning', 'ROADMAP.md'),
522
- `# Roadmap
523
-
524
- ## Phase 09.05: Existing Decimal Phase
525
- **Goal:** Test padding
526
-
527
- ## Phase 09.1: Next Phase
528
- **Goal:** Test
529
- `
530
- );
531
- fs.mkdirSync(path.join(tmpDir, '.planning', 'phases', '09.05-existing'), { recursive: true });
532
-
533
- // Pass unpadded "9.05" but roadmap has "09.05"
534
- const result = runGsdTools('phase insert 9.05 Padding Test', tmpDir);
535
- assert.ok(result.success, `Command failed: ${result.error}`);
536
-
537
- const output = JSON.parse(result.output);
538
- assert.strictEqual(output.after_phase, '9.05');
539
-
540
- const roadmap = fs.readFileSync(path.join(tmpDir, '.planning', 'ROADMAP.md'), 'utf-8');
541
- assert.ok(roadmap.includes('(INSERTED)'), 'roadmap should include inserted phase');
542
- });
543
-
544
- test('phase insert includes **Requirements**: TBD in new ROADMAP entry', () => {
545
- fs.writeFileSync(
546
- path.join(tmpDir, '.planning', 'ROADMAP.md'),
547
- `# Roadmap\n\n### Phase 1: Foundation\n**Goal:** Setup\n\n### Phase 2: API\n**Goal:** Build API\n`
548
- );
549
- fs.mkdirSync(path.join(tmpDir, '.planning', 'phases', '01-foundation'), { recursive: true });
550
-
551
- const result = runGsdTools('phase insert 1 Fix Critical Bug', tmpDir);
552
- assert.ok(result.success, `Command failed: ${result.error}`);
553
-
554
- const roadmap = fs.readFileSync(path.join(tmpDir, '.planning', 'ROADMAP.md'), 'utf-8');
555
- assert.ok(roadmap.includes('**Requirements**: TBD'), 'inserted phase entry should include Requirements TBD');
556
- });
557
-
558
- test('handles #### heading depth from multi-milestone roadmaps', () => {
559
- fs.writeFileSync(
560
- path.join(tmpDir, '.planning', 'ROADMAP.md'),
561
- `# Roadmap
562
-
563
- ### v1.1 Milestone
564
-
565
- #### Phase 5: Feature Work
566
- **Goal:** Build features
567
-
568
- #### Phase 6: Polish
569
- **Goal:** Polish
570
- `
571
- );
572
- fs.mkdirSync(path.join(tmpDir, '.planning', 'phases', '05-feature-work'), { recursive: true });
573
-
574
- const result = runGsdTools('phase insert 5 Hotfix', tmpDir);
575
- assert.ok(result.success, `Command failed: ${result.error}`);
576
-
577
- const output = JSON.parse(result.output);
578
- assert.strictEqual(output.phase_number, '05.1');
579
-
580
- const roadmap = fs.readFileSync(path.join(tmpDir, '.planning', 'ROADMAP.md'), 'utf-8');
581
- assert.ok(roadmap.includes('Phase 05.1: Hotfix (INSERTED)'), 'roadmap should include inserted phase');
582
- });
583
- });
584
-
585
- // ─────────────────────────────────────────────────────────────────────────────
586
- // phase remove command
587
- // ─────────────────────────────────────────────────────────────────────────────
588
-
589
-
590
- describe('phase remove command', () => {
591
- let tmpDir;
592
-
593
- beforeEach(() => {
594
- tmpDir = createTempProject();
595
- });
596
-
597
- afterEach(() => {
598
- cleanup(tmpDir);
599
- });
600
-
601
- test('removes phase directory and renumbers subsequent', () => {
602
- // Setup 3 phases
603
- fs.writeFileSync(
604
- path.join(tmpDir, '.planning', 'ROADMAP.md'),
605
- `# Roadmap
606
-
607
- ### Phase 1: Foundation
608
- **Goal:** Setup
609
- **Depends on:** Nothing
610
-
611
- ### Phase 2: Auth
612
- **Goal:** Authentication
613
- **Depends on:** Phase 1
614
-
615
- ### Phase 3: Features
616
- **Goal:** Core features
617
- **Depends on:** Phase 2
618
- `
619
- );
620
-
621
- fs.mkdirSync(path.join(tmpDir, '.planning', 'phases', '01-foundation'), { recursive: true });
622
- const p2 = path.join(tmpDir, '.planning', 'phases', '02-auth');
623
- fs.mkdirSync(p2, { recursive: true });
624
- fs.writeFileSync(path.join(p2, '02-01-PLAN.md'), '# Plan');
625
- const p3 = path.join(tmpDir, '.planning', 'phases', '03-features');
626
- fs.mkdirSync(p3, { recursive: true });
627
- fs.writeFileSync(path.join(p3, '03-01-PLAN.md'), '# Plan');
628
- fs.writeFileSync(path.join(p3, '03-02-PLAN.md'), '# Plan 2');
629
-
630
- // Remove phase 2
631
- const result = runGsdTools('phase remove 2', tmpDir);
632
- assert.ok(result.success, `Command failed: ${result.error}`);
633
-
634
- const output = JSON.parse(result.output);
635
- assert.strictEqual(output.removed, '2');
636
- assert.strictEqual(output.directory_deleted, '02-auth');
637
-
638
- // Phase 3 should be renumbered to 02
639
- assert.ok(
640
- fs.existsSync(path.join(tmpDir, '.planning', 'phases', '02-features')),
641
- 'phase 3 should be renumbered to 02-features'
642
- );
643
- assert.ok(
644
- !fs.existsSync(path.join(tmpDir, '.planning', 'phases', '03-features')),
645
- 'old 03-features should not exist'
646
- );
647
-
648
- // Files inside should be renamed
649
- assert.ok(
650
- fs.existsSync(path.join(tmpDir, '.planning', 'phases', '02-features', '02-01-PLAN.md')),
651
- 'plan file should be renumbered to 02-01'
652
- );
653
- assert.ok(
654
- fs.existsSync(path.join(tmpDir, '.planning', 'phases', '02-features', '02-02-PLAN.md')),
655
- 'plan 2 should be renumbered to 02-02'
656
- );
657
-
658
- // ROADMAP should be updated
659
- const roadmap = fs.readFileSync(path.join(tmpDir, '.planning', 'ROADMAP.md'), 'utf-8');
660
- assert.ok(!roadmap.includes('Phase 2: Auth'), 'removed phase should not be in roadmap');
661
- assert.ok(roadmap.includes('Phase 2: Features'), 'phase 3 should be renumbered to 2');
662
- });
663
-
664
- test('rejects removal of phase with summaries unless --force', () => {
665
- const p1 = path.join(tmpDir, '.planning', 'phases', '01-test');
666
- fs.mkdirSync(p1, { recursive: true });
667
- fs.writeFileSync(path.join(p1, '01-01-PLAN.md'), '# Plan');
668
- fs.writeFileSync(path.join(p1, '01-01-SUMMARY.md'), '# Summary');
669
- fs.writeFileSync(
670
- path.join(tmpDir, '.planning', 'ROADMAP.md'),
671
- `# Roadmap\n### Phase 1: Test\n**Goal:** Test\n`
672
- );
673
-
674
- // Should fail without --force
675
- const result = runGsdTools('phase remove 1', tmpDir);
676
- assert.ok(!result.success, 'should fail without --force');
677
- assert.ok(result.error.includes('executed plan'), 'error mentions executed plans');
678
-
679
- // Should succeed with --force
680
- const forceResult = runGsdTools('phase remove 1 --force', tmpDir);
681
- assert.ok(forceResult.success, `Force remove failed: ${forceResult.error}`);
682
- });
683
-
684
- test('removes decimal phase and renumbers siblings', () => {
685
- fs.writeFileSync(
686
- path.join(tmpDir, '.planning', 'ROADMAP.md'),
687
- `# Roadmap\n### Phase 6: Main\n**Goal:** Main\n### Phase 6.1: Fix A\n**Goal:** Fix A\n### Phase 6.2: Fix B\n**Goal:** Fix B\n### Phase 6.3: Fix C\n**Goal:** Fix C\n`
688
- );
689
-
690
- fs.mkdirSync(path.join(tmpDir, '.planning', 'phases', '06-main'), { recursive: true });
691
- fs.mkdirSync(path.join(tmpDir, '.planning', 'phases', '06.1-fix-a'), { recursive: true });
692
- fs.mkdirSync(path.join(tmpDir, '.planning', 'phases', '06.2-fix-b'), { recursive: true });
693
- fs.mkdirSync(path.join(tmpDir, '.planning', 'phases', '06.3-fix-c'), { recursive: true });
694
-
695
- const result = runGsdTools('phase remove 6.2', tmpDir);
696
- assert.ok(result.success, `Command failed: ${result.error}`);
697
-
698
- // 06.3 should become 06.2
699
- assert.ok(
700
- fs.existsSync(path.join(tmpDir, '.planning', 'phases', '06.2-fix-c')),
701
- '06.3 should be renumbered to 06.2'
702
- );
703
- assert.ok(
704
- !fs.existsSync(path.join(tmpDir, '.planning', 'phases', '06.3-fix-c')),
705
- 'old 06.3 should not exist'
706
- );
707
- });
708
-
709
- test('updates STATE.md phase count', () => {
710
- fs.writeFileSync(
711
- path.join(tmpDir, '.planning', 'ROADMAP.md'),
712
- `# Roadmap\n### Phase 1: A\n**Goal:** A\n### Phase 2: B\n**Goal:** B\n`
713
- );
714
- fs.writeFileSync(
715
- path.join(tmpDir, '.planning', 'STATE.md'),
716
- `# State\n\n**Current Phase:** 1\n**Total Phases:** 2\n`
717
- );
718
- fs.mkdirSync(path.join(tmpDir, '.planning', 'phases', '01-a'), { recursive: true });
719
- fs.mkdirSync(path.join(tmpDir, '.planning', 'phases', '02-b'), { recursive: true });
720
-
721
- runGsdTools('phase remove 2', tmpDir);
722
-
723
- const state = fs.readFileSync(path.join(tmpDir, '.planning', 'STATE.md'), 'utf-8');
724
- assert.ok(state.includes('**Total Phases:** 1'), 'total phases should be decremented');
725
- });
726
- });
727
-
728
- // ─────────────────────────────────────────────────────────────────────────────
729
- // phase complete command
730
- // ─────────────────────────────────────────────────────────────────────────────
731
-
732
-
733
- describe('phase complete command', () => {
734
- let tmpDir;
735
-
736
- beforeEach(() => {
737
- tmpDir = createTempProject();
738
- });
739
-
740
- afterEach(() => {
741
- cleanup(tmpDir);
742
- });
743
-
744
- test('marks phase complete and transitions to next', () => {
745
- fs.writeFileSync(
746
- path.join(tmpDir, '.planning', 'ROADMAP.md'),
747
- `# Roadmap
748
-
749
- - [ ] Phase 1: Foundation
750
- - [ ] Phase 2: API
751
-
752
- ### Phase 1: Foundation
753
- **Goal:** Setup
754
- **Plans:** 1 plans
755
-
756
- ### Phase 2: API
757
- **Goal:** Build API
758
- `
759
- );
760
- fs.writeFileSync(
761
- path.join(tmpDir, '.planning', 'STATE.md'),
762
- `# State\n\n**Current Phase:** 01\n**Current Phase Name:** Foundation\n**Status:** In progress\n**Current Plan:** 01-01\n**Last Activity:** 2025-01-01\n**Last Activity Description:** Working on phase 1\n`
763
- );
764
-
765
- const p1 = path.join(tmpDir, '.planning', 'phases', '01-foundation');
766
- fs.mkdirSync(p1, { recursive: true });
767
- fs.writeFileSync(path.join(p1, '01-01-PLAN.md'), '# Plan');
768
- fs.writeFileSync(path.join(p1, '01-01-SUMMARY.md'), '# Summary');
769
- fs.mkdirSync(path.join(tmpDir, '.planning', 'phases', '02-api'), { recursive: true });
770
-
771
- const result = runGsdTools('phase complete 1', tmpDir);
772
- assert.ok(result.success, `Command failed: ${result.error}`);
773
-
774
- const output = JSON.parse(result.output);
775
- assert.strictEqual(output.completed_phase, '1');
776
- assert.strictEqual(output.plans_executed, '1/1');
777
- assert.strictEqual(output.next_phase, '02');
778
- assert.strictEqual(output.is_last_phase, false);
779
-
780
- // Verify STATE.md updated
781
- const state = fs.readFileSync(path.join(tmpDir, '.planning', 'STATE.md'), 'utf-8');
782
- assert.ok(state.includes('**Current Phase:** 02'), 'should advance to phase 02');
783
- assert.ok(state.includes('**Status:** Ready to plan'), 'status should be ready to plan');
784
- assert.ok(state.includes('**Current Plan:** Not started'), 'plan should be reset');
785
-
786
- // Verify ROADMAP checkbox
787
- const roadmap = fs.readFileSync(path.join(tmpDir, '.planning', 'ROADMAP.md'), 'utf-8');
788
- assert.ok(roadmap.includes('[x]'), 'phase should be checked off');
789
- assert.ok(roadmap.includes('completed'), 'completion date should be added');
790
- });
791
-
792
- test('detects last phase in milestone', () => {
793
- fs.writeFileSync(
794
- path.join(tmpDir, '.planning', 'ROADMAP.md'),
795
- `# Roadmap\n### Phase 1: Only Phase\n**Goal:** Everything\n`
796
- );
797
- fs.writeFileSync(
798
- path.join(tmpDir, '.planning', 'STATE.md'),
799
- `# State\n\n**Current Phase:** 01\n**Status:** In progress\n**Current Plan:** 01-01\n**Last Activity:** 2025-01-01\n**Last Activity Description:** Working\n`
800
- );
801
-
802
- const p1 = path.join(tmpDir, '.planning', 'phases', '01-only-phase');
803
- fs.mkdirSync(p1, { recursive: true });
804
- fs.writeFileSync(path.join(p1, '01-01-PLAN.md'), '# Plan');
805
- fs.writeFileSync(path.join(p1, '01-01-SUMMARY.md'), '# Summary');
806
-
807
- const result = runGsdTools('phase complete 1', tmpDir);
808
- assert.ok(result.success, `Command failed: ${result.error}`);
809
-
810
- const output = JSON.parse(result.output);
811
- assert.strictEqual(output.is_last_phase, true, 'should detect last phase');
812
- assert.strictEqual(output.next_phase, null, 'no next phase');
813
-
814
- const state = fs.readFileSync(path.join(tmpDir, '.planning', 'STATE.md'), 'utf-8');
815
- assert.ok(state.includes('Milestone complete'), 'status should be milestone complete');
816
- });
817
-
818
- test('updates REQUIREMENTS.md traceability when phase completes', () => {
819
- fs.writeFileSync(
820
- path.join(tmpDir, '.planning', 'ROADMAP.md'),
821
- `# Roadmap
822
-
823
- - [ ] Phase 1: Auth
824
-
825
- ### Phase 1: Auth
826
- **Goal:** User authentication
827
- **Requirements:** AUTH-01, AUTH-02
828
- **Plans:** 1 plans
829
-
830
- ### Phase 2: API
831
- **Goal:** Build API
832
- **Requirements:** API-01
833
- `
834
- );
835
- fs.writeFileSync(
836
- path.join(tmpDir, '.planning', 'REQUIREMENTS.md'),
837
- `# Requirements
838
-
839
- ## v1 Requirements
840
-
841
- ### Authentication
842
-
843
- - [ ] **AUTH-01**: User can sign up with email
844
- - [ ] **AUTH-02**: User can log in
845
- - [ ] **AUTH-03**: User can reset password
846
-
847
- ### API
848
-
849
- - [ ] **API-01**: REST endpoints
850
-
851
- ## Traceability
852
-
853
- | Requirement | Phase | Status |
854
- |-------------|-------|--------|
855
- | AUTH-01 | Phase 1 | Pending |
856
- | AUTH-02 | Phase 1 | Pending |
857
- | AUTH-03 | Phase 2 | Pending |
858
- | API-01 | Phase 2 | Pending |
859
- `
860
- );
861
- fs.writeFileSync(
862
- path.join(tmpDir, '.planning', 'STATE.md'),
863
- `# State\n\n**Current Phase:** 01\n**Current Phase Name:** Auth\n**Status:** In progress\n**Current Plan:** 01-01\n**Last Activity:** 2025-01-01\n**Last Activity Description:** Working\n`
864
- );
865
-
866
- const p1 = path.join(tmpDir, '.planning', 'phases', '01-auth');
867
- fs.mkdirSync(p1, { recursive: true });
868
- fs.writeFileSync(path.join(p1, '01-01-PLAN.md'), '# Plan');
869
- fs.writeFileSync(path.join(p1, '01-01-SUMMARY.md'), '# Summary');
870
- fs.mkdirSync(path.join(tmpDir, '.planning', 'phases', '02-api'), { recursive: true });
871
-
872
- const result = runGsdTools('phase complete 1', tmpDir);
873
- assert.ok(result.success, `Command failed: ${result.error}`);
874
-
875
- const req = fs.readFileSync(path.join(tmpDir, '.planning', 'REQUIREMENTS.md'), 'utf-8');
876
-
877
- // Checkboxes updated for phase 1 requirements
878
- assert.ok(req.includes('- [x] **AUTH-01**'), 'AUTH-01 checkbox should be checked');
879
- assert.ok(req.includes('- [x] **AUTH-02**'), 'AUTH-02 checkbox should be checked');
880
- // Other requirements unchanged
881
- assert.ok(req.includes('- [ ] **AUTH-03**'), 'AUTH-03 should remain unchecked');
882
- assert.ok(req.includes('- [ ] **API-01**'), 'API-01 should remain unchecked');
883
-
884
- // Traceability table updated
885
- assert.ok(req.includes('| AUTH-01 | Phase 1 | Complete |'), 'AUTH-01 status should be Complete');
886
- assert.ok(req.includes('| AUTH-02 | Phase 1 | Complete |'), 'AUTH-02 status should be Complete');
887
- assert.ok(req.includes('| AUTH-03 | Phase 2 | Pending |'), 'AUTH-03 should remain Pending');
888
- assert.ok(req.includes('| API-01 | Phase 2 | Pending |'), 'API-01 should remain Pending');
889
- });
890
-
891
- test('handles requirements with bracket format [REQ-01, REQ-02]', () => {
892
- fs.writeFileSync(
893
- path.join(tmpDir, '.planning', 'ROADMAP.md'),
894
- `# Roadmap
895
-
896
- - [ ] Phase 1: Auth
897
-
898
- ### Phase 1: Auth
899
- **Goal:** User authentication
900
- **Requirements:** [AUTH-01, AUTH-02]
901
- **Plans:** 1 plans
902
-
903
- ### Phase 2: API
904
- **Goal:** Build API
905
- **Requirements:** [API-01]
906
- `
907
- );
908
- fs.writeFileSync(
909
- path.join(tmpDir, '.planning', 'REQUIREMENTS.md'),
910
- `# Requirements
911
-
912
- ## v1 Requirements
913
-
914
- ### Authentication
915
-
916
- - [ ] **AUTH-01**: User can sign up with email
917
- - [ ] **AUTH-02**: User can log in
918
- - [ ] **AUTH-03**: User can reset password
919
-
920
- ### API
921
-
922
- - [ ] **API-01**: REST endpoints
923
-
924
- ## Traceability
925
-
926
- | Requirement | Phase | Status |
927
- |-------------|-------|--------|
928
- | AUTH-01 | Phase 1 | Pending |
929
- | AUTH-02 | Phase 1 | Pending |
930
- | AUTH-03 | Phase 2 | Pending |
931
- | API-01 | Phase 2 | Pending |
932
- `
933
- );
934
- fs.writeFileSync(
935
- path.join(tmpDir, '.planning', 'STATE.md'),
936
- `# State\n\n**Current Phase:** 01\n**Current Phase Name:** Auth\n**Status:** In progress\n**Current Plan:** 01-01\n**Last Activity:** 2025-01-01\n**Last Activity Description:** Working\n`
937
- );
938
-
939
- const p1 = path.join(tmpDir, '.planning', 'phases', '01-auth');
940
- fs.mkdirSync(p1, { recursive: true });
941
- fs.writeFileSync(path.join(p1, '01-01-PLAN.md'), '# Plan');
942
- fs.writeFileSync(path.join(p1, '01-01-SUMMARY.md'), '# Summary');
943
- fs.mkdirSync(path.join(tmpDir, '.planning', 'phases', '02-api'), { recursive: true });
944
-
945
- const result = runGsdTools('phase complete 1', tmpDir);
946
- assert.ok(result.success, `Command failed: ${result.error}`);
947
-
948
- const req = fs.readFileSync(path.join(tmpDir, '.planning', 'REQUIREMENTS.md'), 'utf-8');
949
-
950
- // Checkboxes updated for phase 1 requirements (brackets stripped)
951
- assert.ok(req.includes('- [x] **AUTH-01**'), 'AUTH-01 checkbox should be checked');
952
- assert.ok(req.includes('- [x] **AUTH-02**'), 'AUTH-02 checkbox should be checked');
953
- // Other requirements unchanged
954
- assert.ok(req.includes('- [ ] **AUTH-03**'), 'AUTH-03 should remain unchecked');
955
- assert.ok(req.includes('- [ ] **API-01**'), 'API-01 should remain unchecked');
956
-
957
- // Traceability table updated
958
- assert.ok(req.includes('| AUTH-01 | Phase 1 | Complete |'), 'AUTH-01 status should be Complete');
959
- assert.ok(req.includes('| AUTH-02 | Phase 1 | Complete |'), 'AUTH-02 status should be Complete');
960
- assert.ok(req.includes('| AUTH-03 | Phase 2 | Pending |'), 'AUTH-03 should remain Pending');
961
- assert.ok(req.includes('| API-01 | Phase 2 | Pending |'), 'API-01 should remain Pending');
962
- });
963
-
964
- test('handles phase with no requirements mapping', () => {
965
- fs.writeFileSync(
966
- path.join(tmpDir, '.planning', 'ROADMAP.md'),
967
- `# Roadmap
968
-
969
- - [ ] Phase 1: Setup
970
-
971
- ### Phase 1: Setup
972
- **Goal:** Project setup (no requirements)
973
- **Plans:** 1 plans
974
- `
975
- );
976
- fs.writeFileSync(
977
- path.join(tmpDir, '.planning', 'REQUIREMENTS.md'),
978
- `# Requirements
979
-
980
- ## v1 Requirements
981
-
982
- - [ ] **REQ-01**: Some requirement
983
-
984
- ## Traceability
985
-
986
- | Requirement | Phase | Status |
987
- |-------------|-------|--------|
988
- | REQ-01 | Phase 2 | Pending |
989
- `
990
- );
991
- fs.writeFileSync(
992
- path.join(tmpDir, '.planning', 'STATE.md'),
993
- `# State\n\n**Current Phase:** 01\n**Status:** In progress\n**Current Plan:** 01-01\n**Last Activity:** 2025-01-01\n**Last Activity Description:** Working\n`
994
- );
995
-
996
- const p1 = path.join(tmpDir, '.planning', 'phases', '01-setup');
997
- fs.mkdirSync(p1, { recursive: true });
998
- fs.writeFileSync(path.join(p1, '01-01-PLAN.md'), '# Plan');
999
- fs.writeFileSync(path.join(p1, '01-01-SUMMARY.md'), '# Summary');
1000
-
1001
- const result = runGsdTools('phase complete 1', tmpDir);
1002
- assert.ok(result.success, `Command failed: ${result.error}`);
1003
-
1004
- // REQUIREMENTS.md should be unchanged
1005
- const req = fs.readFileSync(path.join(tmpDir, '.planning', 'REQUIREMENTS.md'), 'utf-8');
1006
- assert.ok(req.includes('- [ ] **REQ-01**'), 'REQ-01 should remain unchecked');
1007
- assert.ok(req.includes('| REQ-01 | Phase 2 | Pending |'), 'REQ-01 should remain Pending');
1008
- });
1009
-
1010
- test('handles missing REQUIREMENTS.md gracefully', () => {
1011
- fs.writeFileSync(
1012
- path.join(tmpDir, '.planning', 'ROADMAP.md'),
1013
- `# Roadmap
1014
-
1015
- - [ ] Phase 1: Foundation
1016
- **Requirements:** REQ-01
1017
-
1018
- ### Phase 1: Foundation
1019
- **Goal:** Setup
1020
- `
1021
- );
1022
- fs.writeFileSync(
1023
- path.join(tmpDir, '.planning', 'STATE.md'),
1024
- `# State\n\n**Current Phase:** 01\n**Status:** In progress\n**Current Plan:** 01-01\n**Last Activity:** 2025-01-01\n**Last Activity Description:** Working\n`
1025
- );
1026
-
1027
- const p1 = path.join(tmpDir, '.planning', 'phases', '01-foundation');
1028
- fs.mkdirSync(p1, { recursive: true });
1029
- fs.writeFileSync(path.join(p1, '01-01-PLAN.md'), '# Plan');
1030
- fs.writeFileSync(path.join(p1, '01-01-SUMMARY.md'), '# Summary');
1031
-
1032
- const result = runGsdTools('phase complete 1', tmpDir);
1033
- assert.ok(result.success, `Command should succeed even without REQUIREMENTS.md: ${result.error}`);
1034
- });
1035
-
1036
- test('handles multi-level decimal phase without regex crash', () => {
1037
- fs.writeFileSync(
1038
- path.join(tmpDir, '.planning', 'ROADMAP.md'),
1039
- `# Roadmap
1040
-
1041
- - [x] Phase 3: Lorem
1042
- - [x] Phase 3.2: Ipsum
1043
- - [ ] Phase 3.2.1: Dolor Sit
1044
- - [ ] Phase 4: Amet
1045
-
1046
- ### Phase 3: Lorem
1047
- **Goal:** Setup
1048
- **Plans:** 1/1 plans complete
1049
- **Requirements:** LOR-01
1050
-
1051
- ### Phase 3.2: Ipsum
1052
- **Goal:** Build
1053
- **Plans:** 1/1 plans complete
1054
- **Requirements:** IPS-01
1055
-
1056
- ### Phase 03.2.1: Dolor Sit Polish (INSERTED)
1057
- **Goal:** Polish
1058
- **Plans:** 1/1 plans complete
1059
-
1060
- ### Phase 4: Amet
1061
- **Goal:** Deliver
1062
- **Requirements:** AMT-01: Filter items by category with AND logic (items matching ALL selected categories)
1063
- `
1064
- );
1065
-
1066
- fs.writeFileSync(
1067
- path.join(tmpDir, '.planning', 'REQUIREMENTS.md'),
1068
- `# Requirements
1069
-
1070
- - [ ] **LOR-01**: Lorem database schema
1071
- - [ ] **IPS-01**: Ipsum rendering engine
1072
- - [ ] **AMT-01**: Filter items by category
1073
- `
1074
- );
1075
-
1076
- fs.writeFileSync(
1077
- path.join(tmpDir, '.planning', 'STATE.md'),
1078
- `# State
1079
-
1080
- **Current Phase:** 03.2.1
1081
- **Current Phase Name:** Dolor Sit Polish
1082
- **Status:** Execution complete
1083
- **Current Plan:** 03.2.1-01
1084
- **Last Activity:** 2025-01-01
1085
- **Last Activity Description:** Working
1086
- `
1087
- );
1088
-
1089
- const p32 = path.join(tmpDir, '.planning', 'phases', '03.2-ipsum');
1090
- const p321 = path.join(tmpDir, '.planning', 'phases', '03.2.1-dolor-sit');
1091
- const p4 = path.join(tmpDir, '.planning', 'phases', '04-amet');
1092
- fs.mkdirSync(p32, { recursive: true });
1093
- fs.mkdirSync(p321, { recursive: true });
1094
- fs.mkdirSync(p4, { recursive: true });
1095
- fs.writeFileSync(path.join(p321, '03.2.1-01-PLAN.md'), '# Plan');
1096
- fs.writeFileSync(path.join(p321, '03.2.1-01-SUMMARY.md'), '# Summary');
1097
-
1098
- const result = runGsdTools('phase complete 03.2.1', tmpDir);
1099
- assert.ok(result.success, `Command should not crash on regex metacharacters: ${result.error}`);
1100
-
1101
- const req = fs.readFileSync(path.join(tmpDir, '.planning', 'REQUIREMENTS.md'), 'utf-8');
1102
- assert.ok(req.includes('- [ ] **AMT-01**'), 'AMT-01 should remain unchanged');
1103
- });
1104
- });
1105
-
1106
- // ─────────────────────────────────────────────────────────────────────────────
1107
- // comparePhaseNum and normalizePhaseName (imported directly)
1108
- // ─────────────────────────────────────────────────────────────────────────────
1109
-
1110
- const { comparePhaseNum, normalizePhaseName } = require('../get-shit-done/bin/lib/core.cjs');
1111
-
1112
- describe('comparePhaseNum', () => {
1113
- test('sorts integer phases numerically', () => {
1114
- assert.ok(comparePhaseNum('2', '10') < 0);
1115
- assert.ok(comparePhaseNum('10', '2') > 0);
1116
- assert.strictEqual(comparePhaseNum('5', '5'), 0);
1117
- });
1118
-
1119
- test('sorts decimal phases correctly', () => {
1120
- assert.ok(comparePhaseNum('12', '12.1') < 0);
1121
- assert.ok(comparePhaseNum('12.1', '12.2') < 0);
1122
- assert.ok(comparePhaseNum('12.2', '13') < 0);
1123
- });
1124
-
1125
- test('sorts letter-suffix phases correctly', () => {
1126
- assert.ok(comparePhaseNum('12', '12A') < 0);
1127
- assert.ok(comparePhaseNum('12A', '12B') < 0);
1128
- assert.ok(comparePhaseNum('12B', '13') < 0);
1129
- });
1130
-
1131
- test('sorts hybrid phases correctly', () => {
1132
- assert.ok(comparePhaseNum('12A', '12A.1') < 0);
1133
- assert.ok(comparePhaseNum('12A.1', '12A.2') < 0);
1134
- assert.ok(comparePhaseNum('12A.2', '12B') < 0);
1135
- });
1136
-
1137
- test('handles full sort order', () => {
1138
- const phases = ['13', '12B', '12A.2', '12', '12.1', '12A', '12A.1', '12.2'];
1139
- phases.sort(comparePhaseNum);
1140
- assert.deepStrictEqual(phases, ['12', '12.1', '12.2', '12A', '12A.1', '12A.2', '12B', '13']);
1141
- });
1142
-
1143
- test('handles directory names with slugs', () => {
1144
- const dirs = ['13-deploy', '12B-hotfix', '12A.1-bugfix', '12-foundation', '12.1-inserted', '12A-split'];
1145
- dirs.sort(comparePhaseNum);
1146
- assert.deepStrictEqual(dirs, [
1147
- '12-foundation', '12.1-inserted', '12A-split', '12A.1-bugfix', '12B-hotfix', '13-deploy'
1148
- ]);
1149
- });
1150
-
1151
- test('case insensitive letter matching', () => {
1152
- assert.ok(comparePhaseNum('12a', '12B') < 0);
1153
- assert.ok(comparePhaseNum('12A', '12b') < 0);
1154
- assert.strictEqual(comparePhaseNum('12a', '12A'), 0);
1155
- });
1156
-
1157
- test('sorts multi-level decimal phases correctly', () => {
1158
- assert.ok(comparePhaseNum('3.2', '3.2.1') < 0);
1159
- assert.ok(comparePhaseNum('3.2.1', '3.2.2') < 0);
1160
- assert.ok(comparePhaseNum('3.2.1', '3.3') < 0);
1161
- assert.ok(comparePhaseNum('3.2.1', '4') < 0);
1162
- assert.strictEqual(comparePhaseNum('3.2.1', '3.2.1'), 0);
1163
- });
1164
-
1165
- test('falls back to localeCompare for non-phase strings', () => {
1166
- const result = comparePhaseNum('abc', 'def');
1167
- assert.strictEqual(typeof result, 'number');
1168
- });
1169
- });
1170
-
1171
- describe('normalizePhaseName', () => {
1172
- test('pads single-digit integers', () => {
1173
- assert.strictEqual(normalizePhaseName('3'), '03');
1174
- assert.strictEqual(normalizePhaseName('12'), '12');
1175
- });
1176
-
1177
- test('handles decimal phases', () => {
1178
- assert.strictEqual(normalizePhaseName('3.1'), '03.1');
1179
- assert.strictEqual(normalizePhaseName('12.2'), '12.2');
1180
- });
1181
-
1182
- test('handles letter-suffix phases', () => {
1183
- assert.strictEqual(normalizePhaseName('3A'), '03A');
1184
- assert.strictEqual(normalizePhaseName('12B'), '12B');
1185
- });
1186
-
1187
- test('handles hybrid phases', () => {
1188
- assert.strictEqual(normalizePhaseName('3A.1'), '03A.1');
1189
- assert.strictEqual(normalizePhaseName('12A.2'), '12A.2');
1190
- });
1191
-
1192
- test('uppercases letters', () => {
1193
- assert.strictEqual(normalizePhaseName('3a'), '03A');
1194
- assert.strictEqual(normalizePhaseName('12b.1'), '12B.1');
1195
- });
1196
-
1197
- test('handles multi-level decimal phases', () => {
1198
- assert.strictEqual(normalizePhaseName('3.2.1'), '03.2.1');
1199
- assert.strictEqual(normalizePhaseName('12.3.4'), '12.3.4');
1200
- });
1201
-
1202
- test('returns non-matching input unchanged', () => {
1203
- assert.strictEqual(normalizePhaseName('abc'), 'abc');
1204
- });
1205
- });
1206
-
1207
- describe('letter-suffix phase sorting', () => {
1208
- let tmpDir;
1209
-
1210
- beforeEach(() => {
1211
- tmpDir = createTempProject();
1212
- });
1213
-
1214
- afterEach(() => {
1215
- cleanup(tmpDir);
1216
- });
1217
-
1218
- test('lists letter-suffix phases in correct order', () => {
1219
- fs.mkdirSync(path.join(tmpDir, '.planning', 'phases', '12-foundation'), { recursive: true });
1220
- fs.mkdirSync(path.join(tmpDir, '.planning', 'phases', '12.1-inserted'), { recursive: true });
1221
- fs.mkdirSync(path.join(tmpDir, '.planning', 'phases', '12A-split'), { recursive: true });
1222
- fs.mkdirSync(path.join(tmpDir, '.planning', 'phases', '12A.1-bugfix'), { recursive: true });
1223
- fs.mkdirSync(path.join(tmpDir, '.planning', 'phases', '12B-hotfix'), { recursive: true });
1224
- fs.mkdirSync(path.join(tmpDir, '.planning', 'phases', '13-deploy'), { recursive: true });
1225
-
1226
- const result = runGsdTools('phases list', tmpDir);
1227
- assert.ok(result.success, `Command failed: ${result.error}`);
1228
-
1229
- const output = JSON.parse(result.output);
1230
- assert.deepStrictEqual(
1231
- output.directories,
1232
- ['12-foundation', '12.1-inserted', '12A-split', '12A.1-bugfix', '12B-hotfix', '13-deploy'],
1233
- 'letter-suffix phases should sort correctly'
1234
- );
1235
- });
1236
- });
1237
-
1238
- // ─────────────────────────────────────────────────────────────────────────────
1239
- // milestone complete command
1240
- // ─────────────────────────────────────────────────────────────────────────────
1241
-