gsd-trae 1.0.0 → 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 (763) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/README.md +7 -76
  3. package/assets/screenshot.png +0 -0
  4. package/package.json +12 -3
  5. package/.claude/settings.local.json +0 -8
  6. package/.gitmodules +0 -6
  7. package/.trae/project_rules.md +0 -56
  8. package/.trae/rules/project_rules.md +0 -56
  9. package/.vscode/code-counter/code-counter.db +0 -0
  10. package/.vscode/settings.json +0 -5
  11. package/refs/gsd/.github/CODEOWNERS +0 -2
  12. package/refs/gsd/.github/FUNDING.yml +0 -1
  13. package/refs/gsd/.github/ISSUE_TEMPLATE/bug_report.yml +0 -59
  14. package/refs/gsd/.github/ISSUE_TEMPLATE/feature_request.yml +0 -37
  15. package/refs/gsd/.github/pull_request_template.md +0 -24
  16. package/refs/gsd/.github/workflows/auto-label-issues.yml +0 -21
  17. package/refs/gsd/CHANGELOG.md +0 -1520
  18. package/refs/gsd/LICENSE +0 -21
  19. package/refs/gsd/README.md +0 -704
  20. package/refs/gsd/SECURITY.md +0 -33
  21. package/refs/gsd/agents/gsd-codebase-mapper.md +0 -764
  22. package/refs/gsd/agents/gsd-debugger.md +0 -1246
  23. package/refs/gsd/agents/gsd-executor.md +0 -469
  24. package/refs/gsd/agents/gsd-integration-checker.md +0 -443
  25. package/refs/gsd/agents/gsd-phase-researcher.md +0 -546
  26. package/refs/gsd/agents/gsd-plan-checker.md +0 -690
  27. package/refs/gsd/agents/gsd-planner.md +0 -1275
  28. package/refs/gsd/agents/gsd-project-researcher.md +0 -621
  29. package/refs/gsd/agents/gsd-research-synthesizer.md +0 -239
  30. package/refs/gsd/agents/gsd-roadmapper.md +0 -642
  31. package/refs/gsd/agents/gsd-verifier.md +0 -573
  32. package/refs/gsd/assets/gsd-logo-2000-transparent.png +0 -0
  33. package/refs/gsd/assets/gsd-logo-2000-transparent.svg +0 -17
  34. package/refs/gsd/assets/gsd-logo-2000.png +0 -0
  35. package/refs/gsd/assets/gsd-logo-2000.svg +0 -21
  36. package/refs/gsd/assets/terminal.svg +0 -68
  37. package/refs/gsd/bin/install.js +0 -2090
  38. package/refs/gsd/commands/gsd/add-phase.md +0 -43
  39. package/refs/gsd/commands/gsd/add-tests.md +0 -41
  40. package/refs/gsd/commands/gsd/add-todo.md +0 -47
  41. package/refs/gsd/commands/gsd/audit-milestone.md +0 -36
  42. package/refs/gsd/commands/gsd/check-todos.md +0 -45
  43. package/refs/gsd/commands/gsd/cleanup.md +0 -18
  44. package/refs/gsd/commands/gsd/complete-milestone.md +0 -136
  45. package/refs/gsd/commands/gsd/debug.md +0 -167
  46. package/refs/gsd/commands/gsd/discuss-phase.md +0 -83
  47. package/refs/gsd/commands/gsd/execute-phase.md +0 -41
  48. package/refs/gsd/commands/gsd/health.md +0 -22
  49. package/refs/gsd/commands/gsd/help.md +0 -22
  50. package/refs/gsd/commands/gsd/insert-phase.md +0 -32
  51. package/refs/gsd/commands/gsd/join-discord.md +0 -18
  52. package/refs/gsd/commands/gsd/list-phase-assumptions.md +0 -46
  53. package/refs/gsd/commands/gsd/map-codebase.md +0 -71
  54. package/refs/gsd/commands/gsd/new-milestone.md +0 -44
  55. package/refs/gsd/commands/gsd/new-project.md +0 -42
  56. package/refs/gsd/commands/gsd/new-project.md.bak +0 -1041
  57. package/refs/gsd/commands/gsd/pause-work.md +0 -38
  58. package/refs/gsd/commands/gsd/plan-milestone-gaps.md +0 -34
  59. package/refs/gsd/commands/gsd/plan-phase.md +0 -45
  60. package/refs/gsd/commands/gsd/progress.md +0 -24
  61. package/refs/gsd/commands/gsd/quick.md +0 -41
  62. package/refs/gsd/commands/gsd/reapply-patches.md +0 -110
  63. package/refs/gsd/commands/gsd/remove-phase.md +0 -31
  64. package/refs/gsd/commands/gsd/research-phase.md +0 -189
  65. package/refs/gsd/commands/gsd/resume-work.md +0 -40
  66. package/refs/gsd/commands/gsd/set-profile.md +0 -34
  67. package/refs/gsd/commands/gsd/settings.md +0 -36
  68. package/refs/gsd/commands/gsd/update.md +0 -37
  69. package/refs/gsd/commands/gsd/verify-work.md +0 -38
  70. package/refs/gsd/docs/USER-GUIDE.md +0 -471
  71. package/refs/gsd/docs/context-monitor.md +0 -96
  72. package/refs/gsd/get-shit-done/bin/gsd-tools.cjs +0 -585
  73. package/refs/gsd/get-shit-done/bin/lib/commands.cjs +0 -553
  74. package/refs/gsd/get-shit-done/bin/lib/config.cjs +0 -162
  75. package/refs/gsd/get-shit-done/bin/lib/core.cjs +0 -411
  76. package/refs/gsd/get-shit-done/bin/lib/frontmatter.cjs +0 -299
  77. package/refs/gsd/get-shit-done/bin/lib/init.cjs +0 -710
  78. package/refs/gsd/get-shit-done/bin/lib/milestone.cjs +0 -215
  79. package/refs/gsd/get-shit-done/bin/lib/phase.cjs +0 -870
  80. package/refs/gsd/get-shit-done/bin/lib/roadmap.cjs +0 -298
  81. package/refs/gsd/get-shit-done/bin/lib/state.cjs +0 -521
  82. package/refs/gsd/get-shit-done/bin/lib/template.cjs +0 -222
  83. package/refs/gsd/get-shit-done/bin/lib/verify.cjs +0 -772
  84. package/refs/gsd/get-shit-done/references/checkpoints.md +0 -776
  85. package/refs/gsd/get-shit-done/references/continuation-format.md +0 -249
  86. package/refs/gsd/get-shit-done/references/decimal-phase-calculation.md +0 -65
  87. package/refs/gsd/get-shit-done/references/git-integration.md +0 -248
  88. package/refs/gsd/get-shit-done/references/git-planning-commit.md +0 -38
  89. package/refs/gsd/get-shit-done/references/model-profile-resolution.md +0 -34
  90. package/refs/gsd/get-shit-done/references/model-profiles.md +0 -92
  91. package/refs/gsd/get-shit-done/references/phase-argument-parsing.md +0 -61
  92. package/refs/gsd/get-shit-done/references/planning-config.md +0 -196
  93. package/refs/gsd/get-shit-done/references/questioning.md +0 -145
  94. package/refs/gsd/get-shit-done/references/tdd.md +0 -263
  95. package/refs/gsd/get-shit-done/references/ui-brand.md +0 -160
  96. package/refs/gsd/get-shit-done/references/verification-patterns.md +0 -612
  97. package/refs/gsd/get-shit-done/templates/DEBUG.md +0 -164
  98. package/refs/gsd/get-shit-done/templates/UAT.md +0 -247
  99. package/refs/gsd/get-shit-done/templates/VALIDATION.md +0 -76
  100. package/refs/gsd/get-shit-done/templates/codebase/architecture.md +0 -255
  101. package/refs/gsd/get-shit-done/templates/codebase/concerns.md +0 -310
  102. package/refs/gsd/get-shit-done/templates/codebase/conventions.md +0 -307
  103. package/refs/gsd/get-shit-done/templates/codebase/integrations.md +0 -280
  104. package/refs/gsd/get-shit-done/templates/codebase/stack.md +0 -186
  105. package/refs/gsd/get-shit-done/templates/codebase/structure.md +0 -285
  106. package/refs/gsd/get-shit-done/templates/codebase/testing.md +0 -480
  107. package/refs/gsd/get-shit-done/templates/config.json +0 -37
  108. package/refs/gsd/get-shit-done/templates/context.md +0 -283
  109. package/refs/gsd/get-shit-done/templates/continue-here.md +0 -78
  110. package/refs/gsd/get-shit-done/templates/debug-subagent-prompt.md +0 -91
  111. package/refs/gsd/get-shit-done/templates/discovery.md +0 -146
  112. package/refs/gsd/get-shit-done/templates/milestone-archive.md +0 -123
  113. package/refs/gsd/get-shit-done/templates/milestone.md +0 -115
  114. package/refs/gsd/get-shit-done/templates/phase-prompt.md +0 -569
  115. package/refs/gsd/get-shit-done/templates/planner-subagent-prompt.md +0 -117
  116. package/refs/gsd/get-shit-done/templates/project.md +0 -184
  117. package/refs/gsd/get-shit-done/templates/requirements.md +0 -231
  118. package/refs/gsd/get-shit-done/templates/research-project/ARCHITECTURE.md +0 -204
  119. package/refs/gsd/get-shit-done/templates/research-project/FEATURES.md +0 -147
  120. package/refs/gsd/get-shit-done/templates/research-project/PITFALLS.md +0 -200
  121. package/refs/gsd/get-shit-done/templates/research-project/STACK.md +0 -120
  122. package/refs/gsd/get-shit-done/templates/research-project/SUMMARY.md +0 -170
  123. package/refs/gsd/get-shit-done/templates/research.md +0 -552
  124. package/refs/gsd/get-shit-done/templates/retrospective.md +0 -54
  125. package/refs/gsd/get-shit-done/templates/roadmap.md +0 -202
  126. package/refs/gsd/get-shit-done/templates/state.md +0 -176
  127. package/refs/gsd/get-shit-done/templates/summary-complex.md +0 -59
  128. package/refs/gsd/get-shit-done/templates/summary-minimal.md +0 -41
  129. package/refs/gsd/get-shit-done/templates/summary-standard.md +0 -48
  130. package/refs/gsd/get-shit-done/templates/summary.md +0 -248
  131. package/refs/gsd/get-shit-done/templates/user-setup.md +0 -311
  132. package/refs/gsd/get-shit-done/templates/verification-report.md +0 -322
  133. package/refs/gsd/get-shit-done/workflows/add-phase.md +0 -111
  134. package/refs/gsd/get-shit-done/workflows/add-tests.md +0 -350
  135. package/refs/gsd/get-shit-done/workflows/add-todo.md +0 -157
  136. package/refs/gsd/get-shit-done/workflows/audit-milestone.md +0 -297
  137. package/refs/gsd/get-shit-done/workflows/check-todos.md +0 -176
  138. package/refs/gsd/get-shit-done/workflows/cleanup.md +0 -152
  139. package/refs/gsd/get-shit-done/workflows/complete-milestone.md +0 -763
  140. package/refs/gsd/get-shit-done/workflows/diagnose-issues.md +0 -219
  141. package/refs/gsd/get-shit-done/workflows/discovery-phase.md +0 -289
  142. package/refs/gsd/get-shit-done/workflows/discuss-phase.md +0 -542
  143. package/refs/gsd/get-shit-done/workflows/execute-phase.md +0 -449
  144. package/refs/gsd/get-shit-done/workflows/execute-plan.md +0 -448
  145. package/refs/gsd/get-shit-done/workflows/health.md +0 -156
  146. package/refs/gsd/get-shit-done/workflows/help.md +0 -489
  147. package/refs/gsd/get-shit-done/workflows/insert-phase.md +0 -129
  148. package/refs/gsd/get-shit-done/workflows/list-phase-assumptions.md +0 -178
  149. package/refs/gsd/get-shit-done/workflows/map-codebase.md +0 -315
  150. package/refs/gsd/get-shit-done/workflows/new-milestone.md +0 -382
  151. package/refs/gsd/get-shit-done/workflows/new-project.md +0 -1116
  152. package/refs/gsd/get-shit-done/workflows/pause-work.md +0 -122
  153. package/refs/gsd/get-shit-done/workflows/plan-milestone-gaps.md +0 -274
  154. package/refs/gsd/get-shit-done/workflows/plan-phase.md +0 -569
  155. package/refs/gsd/get-shit-done/workflows/progress.md +0 -381
  156. package/refs/gsd/get-shit-done/workflows/quick.md +0 -453
  157. package/refs/gsd/get-shit-done/workflows/remove-phase.md +0 -154
  158. package/refs/gsd/get-shit-done/workflows/research-phase.md +0 -73
  159. package/refs/gsd/get-shit-done/workflows/resume-project.md +0 -306
  160. package/refs/gsd/get-shit-done/workflows/set-profile.md +0 -80
  161. package/refs/gsd/get-shit-done/workflows/settings.md +0 -213
  162. package/refs/gsd/get-shit-done/workflows/transition.md +0 -544
  163. package/refs/gsd/get-shit-done/workflows/update.md +0 -219
  164. package/refs/gsd/get-shit-done/workflows/verify-phase.md +0 -242
  165. package/refs/gsd/get-shit-done/workflows/verify-work.md +0 -569
  166. package/refs/gsd/hooks/gsd-check-update.js +0 -62
  167. package/refs/gsd/hooks/gsd-context-monitor.js +0 -122
  168. package/refs/gsd/hooks/gsd-statusline.js +0 -108
  169. package/refs/gsd/package.json +0 -50
  170. package/refs/gsd/scripts/build-hooks.js +0 -43
  171. package/refs/gsd/tests/commands.test.cjs +0 -661
  172. package/refs/gsd/tests/helpers.cjs +0 -40
  173. package/refs/gsd/tests/init.test.cjs +0 -205
  174. package/refs/gsd/tests/milestone.test.cjs +0 -98
  175. package/refs/gsd/tests/phase.test.cjs +0 -1241
  176. package/refs/gsd/tests/roadmap.test.cjs +0 -265
  177. package/refs/gsd/tests/state.test.cjs +0 -302
  178. package/refs/gsd/tests/verify.test.cjs +0 -80
  179. package/refs/vbenchmark/.agent/agents/codebase-explorer.md +0 -224
  180. package/refs/vbenchmark/.agent/agents/debugger.md +0 -180
  181. package/refs/vbenchmark/.agent/agents/documenter.md +0 -166
  182. package/refs/vbenchmark/.agent/agents/implementer.md +0 -70
  183. package/refs/vbenchmark/.agent/agents/orchestrator.md +0 -212
  184. package/refs/vbenchmark/.agent/agents/researcher.md +0 -80
  185. package/refs/vbenchmark/.agent/agents/reviewer.md +0 -184
  186. package/refs/vbenchmark/.agent/agents/tester.md +0 -170
  187. package/refs/vbenchmark/.agent/commands/commit.md +0 -29
  188. package/refs/vbenchmark/.agent/commands/debug.md +0 -59
  189. package/refs/vbenchmark/.agent/commands/document.md +0 -52
  190. package/refs/vbenchmark/.agent/commands/gather-context.md +0 -58
  191. package/refs/vbenchmark/.agent/commands/init.md +0 -56
  192. package/refs/vbenchmark/.agent/commands/preset-help.md +0 -50
  193. package/refs/vbenchmark/.agent/commands/refactor.md +0 -71
  194. package/refs/vbenchmark/.agent/commands/research.md +0 -37
  195. package/refs/vbenchmark/.agent/commands/review.md +0 -38
  196. package/refs/vbenchmark/.agent/commands/test.md +0 -61
  197. package/refs/vbenchmark/.agent/rules/01-code-quality.md +0 -33
  198. package/refs/vbenchmark/.agent/rules/02-typescript-go.md +0 -46
  199. package/refs/vbenchmark/.agent/rules/03-security-git.md +0 -34
  200. package/refs/vbenchmark/.agent/rules/04-architecture.md +0 -40
  201. package/refs/vbenchmark/.agent/sync.js +0 -536
  202. package/refs/vbenchmark/.agent/workflows/commit.md +0 -29
  203. package/refs/vbenchmark/.agent/workflows/debug.md +0 -59
  204. package/refs/vbenchmark/.agent/workflows/document.md +0 -52
  205. package/refs/vbenchmark/.agent/workflows/gather-context.md +0 -58
  206. package/refs/vbenchmark/.agent/workflows/init.md +0 -56
  207. package/refs/vbenchmark/.agent/workflows/preset-help.md +0 -50
  208. package/refs/vbenchmark/.agent/workflows/refactor.md +0 -71
  209. package/refs/vbenchmark/.agent/workflows/research.md +0 -37
  210. package/refs/vbenchmark/.agent/workflows/review.md +0 -38
  211. package/refs/vbenchmark/.agent/workflows/test.md +0 -61
  212. package/refs/vbenchmark/.claude/commands/agentic-dev/apply.md +0 -222
  213. package/refs/vbenchmark/.claude/commands/agentic-dev/done.md +0 -166
  214. package/refs/vbenchmark/.claude/commands/agentic-dev/proposal.md +0 -220
  215. package/refs/vbenchmark/.claude/commands/openspec/apply.md +0 -23
  216. package/refs/vbenchmark/.claude/commands/openspec/archive.md +0 -27
  217. package/refs/vbenchmark/.claude/commands/openspec/proposal.md +0 -28
  218. package/refs/vbenchmark/.clinerules/01-rules.md +0 -73
  219. package/refs/vbenchmark/.clinerules/02-agents.md +0 -34
  220. package/refs/vbenchmark/.cursor/commands/commit.md +0 -29
  221. package/refs/vbenchmark/.cursor/commands/debug.md +0 -59
  222. package/refs/vbenchmark/.cursor/commands/document.md +0 -52
  223. package/refs/vbenchmark/.cursor/commands/gather-context.md +0 -58
  224. package/refs/vbenchmark/.cursor/commands/init.md +0 -56
  225. package/refs/vbenchmark/.cursor/commands/preset-help.md +0 -50
  226. package/refs/vbenchmark/.cursor/commands/refactor.md +0 -71
  227. package/refs/vbenchmark/.cursor/commands/research.md +0 -37
  228. package/refs/vbenchmark/.cursor/commands/review.md +0 -38
  229. package/refs/vbenchmark/.cursor/commands/test.md +0 -61
  230. package/refs/vbenchmark/.cursor/rules/agents.mdc +0 -1357
  231. package/refs/vbenchmark/.factory/droids/codebase-explorer.md +0 -224
  232. package/refs/vbenchmark/.factory/droids/debugger.md +0 -180
  233. package/refs/vbenchmark/.factory/droids/documenter.md +0 -166
  234. package/refs/vbenchmark/.factory/droids/implementer.md +0 -70
  235. package/refs/vbenchmark/.factory/droids/orchestrator.md +0 -212
  236. package/refs/vbenchmark/.factory/droids/researcher.md +0 -80
  237. package/refs/vbenchmark/.factory/droids/reviewer.md +0 -184
  238. package/refs/vbenchmark/.factory/droids/tester.md +0 -170
  239. package/refs/vbenchmark/.gemini/workflows/commit.md +0 -29
  240. package/refs/vbenchmark/.gemini/workflows/debug.md +0 -59
  241. package/refs/vbenchmark/.gemini/workflows/document.md +0 -52
  242. package/refs/vbenchmark/.gemini/workflows/gather-context.md +0 -58
  243. package/refs/vbenchmark/.gemini/workflows/init.md +0 -56
  244. package/refs/vbenchmark/.gemini/workflows/preset-help.md +0 -50
  245. package/refs/vbenchmark/.gemini/workflows/refactor.md +0 -71
  246. package/refs/vbenchmark/.gemini/workflows/research.md +0 -37
  247. package/refs/vbenchmark/.gemini/workflows/review.md +0 -38
  248. package/refs/vbenchmark/.gemini/workflows/test.md +0 -61
  249. package/refs/vbenchmark/.github/CODEOWNERS +0 -20
  250. package/refs/vbenchmark/.github/FUNDING.yml +0 -4
  251. package/refs/vbenchmark/.github/ISSUE_TEMPLATE/bug-report.yml +0 -76
  252. package/refs/vbenchmark/.github/ISSUE_TEMPLATE/new-task.yml +0 -106
  253. package/refs/vbenchmark/.github/PULL_REQUEST_TEMPLATE.md +0 -38
  254. package/refs/vbenchmark/.github/copilot-instructions.md +0 -73
  255. package/refs/vbenchmark/.github/workflows/ci.yaml +0 -33
  256. package/refs/vbenchmark/.github/workflows/vercel-auto-pr.yml +0 -478
  257. package/refs/vbenchmark/.github/workflows/vercel-deploy.yaml +0 -487
  258. package/refs/vbenchmark/.github/workflows/vercel-pr-command.yaml +0 -337
  259. package/refs/vbenchmark/.github/workflows/vercel-project-init.yaml +0 -208
  260. package/refs/vbenchmark/.opencode/agent/codebase-explorer.md +0 -224
  261. package/refs/vbenchmark/.opencode/agent/debugger.md +0 -180
  262. package/refs/vbenchmark/.opencode/agent/documenter.md +0 -166
  263. package/refs/vbenchmark/.opencode/agent/implementer.md +0 -70
  264. package/refs/vbenchmark/.opencode/agent/orchestrator.md +0 -212
  265. package/refs/vbenchmark/.opencode/agent/researcher.md +0 -80
  266. package/refs/vbenchmark/.opencode/agent/reviewer.md +0 -184
  267. package/refs/vbenchmark/.opencode/agent/tester.md +0 -170
  268. package/refs/vbenchmark/.opencode/command/commit.md +0 -29
  269. package/refs/vbenchmark/.opencode/command/debug.md +0 -59
  270. package/refs/vbenchmark/.opencode/command/document.md +0 -52
  271. package/refs/vbenchmark/.opencode/command/gather-context.md +0 -58
  272. package/refs/vbenchmark/.opencode/command/init.md +0 -56
  273. package/refs/vbenchmark/.opencode/command/preset-help.md +0 -50
  274. package/refs/vbenchmark/.opencode/command/refactor.md +0 -71
  275. package/refs/vbenchmark/.opencode/command/research.md +0 -37
  276. package/refs/vbenchmark/.opencode/command/review.md +0 -38
  277. package/refs/vbenchmark/.opencode/command/test.md +0 -61
  278. package/refs/vbenchmark/.trae/project_rules.md +0 -73
  279. package/refs/vbenchmark/.windsurf/rules/rules.md +0 -85
  280. package/refs/vbenchmark/AGENTS.md +0 -73
  281. package/refs/vbenchmark/CONTRIBUTING.md +0 -332
  282. package/refs/vbenchmark/Caddyfile +0 -3
  283. package/refs/vbenchmark/LICENSE +0 -47
  284. package/refs/vbenchmark/README.md +0 -354
  285. package/refs/vbenchmark/docker-compose.prod.yaml +0 -35
  286. package/refs/vbenchmark/docker-compose.yaml +0 -53
  287. package/refs/vbenchmark/docs/TASK_EXPANSION_PLAN.md +0 -211
  288. package/refs/vbenchmark/docs/THESIS.md +0 -441
  289. package/refs/vbenchmark/docs/categories/code-evolution.md +0 -138
  290. package/refs/vbenchmark/openspec/changes/init-vibecodingbench/design.md +0 -111
  291. package/refs/vbenchmark/openspec/changes/init-vibecodingbench/proposal.md +0 -15
  292. package/refs/vbenchmark/openspec/changes/init-vibecodingbench/specs/evaluation/spec.md +0 -105
  293. package/refs/vbenchmark/openspec/changes/init-vibecodingbench/specs/leaderboard/spec.md +0 -68
  294. package/refs/vbenchmark/openspec/changes/init-vibecodingbench/specs/task-definition/spec.md +0 -45
  295. package/refs/vbenchmark/openspec/changes/init-vibecodingbench/specs/task-runner/spec.md +0 -49
  296. package/refs/vbenchmark/openspec/changes/init-vibecodingbench/tasks.md +0 -413
  297. package/refs/vbenchmark/package.json +0 -51
  298. package/refs/vbenchmark/packages/cli/eslint.config.js +0 -16
  299. package/refs/vbenchmark/packages/cli/package.json +0 -35
  300. package/refs/vbenchmark/packages/cli/src/agents/index.ts +0 -655
  301. package/refs/vbenchmark/packages/cli/src/commands/eval.ts +0 -197
  302. package/refs/vbenchmark/packages/cli/src/commands/list.ts +0 -63
  303. package/refs/vbenchmark/packages/cli/src/commands/run.ts +0 -147
  304. package/refs/vbenchmark/packages/cli/src/evaluator.ts +0 -125
  305. package/refs/vbenchmark/packages/cli/src/index.ts +0 -21
  306. package/refs/vbenchmark/packages/cli/src/lib/task-variation.ts +0 -153
  307. package/refs/vbenchmark/packages/cli/src/loader.ts +0 -258
  308. package/refs/vbenchmark/packages/cli/src/reporter.ts +0 -222
  309. package/refs/vbenchmark/packages/cli/src/runtime/docker.ts +0 -385
  310. package/refs/vbenchmark/packages/cli/tsconfig.json +0 -8
  311. package/refs/vbenchmark/packages/dashboard/Dockerfile +0 -42
  312. package/refs/vbenchmark/packages/dashboard/index.html +0 -21
  313. package/refs/vbenchmark/packages/dashboard/package.json +0 -29
  314. package/refs/vbenchmark/packages/dashboard/postcss.config.js +0 -6
  315. package/refs/vbenchmark/packages/dashboard/public/favicon.svg +0 -24
  316. package/refs/vbenchmark/packages/dashboard/public/logo.png +0 -0
  317. package/refs/vbenchmark/packages/dashboard/public/logo.svg +0 -39
  318. package/refs/vbenchmark/packages/dashboard/src/App.tsx +0 -1468
  319. package/refs/vbenchmark/packages/dashboard/src/data/category-performance.json +0 -1
  320. package/refs/vbenchmark/packages/dashboard/src/data/leaderboard.json +0 -1
  321. package/refs/vbenchmark/packages/dashboard/src/data/task-results.json +0 -1
  322. package/refs/vbenchmark/packages/dashboard/src/data/tasks.json +0 -1
  323. package/refs/vbenchmark/packages/dashboard/src/index.css +0 -3
  324. package/refs/vbenchmark/packages/dashboard/src/main.tsx +0 -13
  325. package/refs/vbenchmark/packages/dashboard/src/vite-env.d.ts +0 -9
  326. package/refs/vbenchmark/packages/dashboard/tailwind.config.js +0 -11
  327. package/refs/vbenchmark/packages/dashboard/tsconfig.json +0 -21
  328. package/refs/vbenchmark/packages/dashboard/tsconfig.node.json +0 -11
  329. package/refs/vbenchmark/packages/dashboard/vercel.json +0 -6
  330. package/refs/vbenchmark/packages/dashboard/vite.config.ts +0 -28
  331. package/refs/vbenchmark/packages/evaluator/eslint.config.js +0 -16
  332. package/refs/vbenchmark/packages/evaluator/package.json +0 -24
  333. package/refs/vbenchmark/packages/evaluator/src/index.ts +0 -15
  334. package/refs/vbenchmark/packages/evaluator/src/runners/functional.ts +0 -88
  335. package/refs/vbenchmark/packages/evaluator/src/runners/quality.ts +0 -140
  336. package/refs/vbenchmark/packages/evaluator/src/runners/security.ts +0 -94
  337. package/refs/vbenchmark/packages/evaluator/src/runners/visual.ts +0 -108
  338. package/refs/vbenchmark/packages/evaluator/src/types.d.ts +0 -19
  339. package/refs/vbenchmark/packages/evaluator/tsconfig.json +0 -8
  340. package/refs/vbenchmark/packages/leaderboard/Dockerfile +0 -38
  341. package/refs/vbenchmark/packages/leaderboard/drizzle.config.ts +0 -10
  342. package/refs/vbenchmark/packages/leaderboard/eslint.config.js +0 -16
  343. package/refs/vbenchmark/packages/leaderboard/fly.toml +0 -29
  344. package/refs/vbenchmark/packages/leaderboard/package.json +0 -36
  345. package/refs/vbenchmark/packages/leaderboard/src/app.ts +0 -29
  346. package/refs/vbenchmark/packages/leaderboard/src/components/BrowserPreview.tsx +0 -190
  347. package/refs/vbenchmark/packages/leaderboard/src/components/ComparisonView.tsx +0 -205
  348. package/refs/vbenchmark/packages/leaderboard/src/components/LeaderboardTable.tsx +0 -150
  349. package/refs/vbenchmark/packages/leaderboard/src/components/LiveRunCard.tsx +0 -133
  350. package/refs/vbenchmark/packages/leaderboard/src/components/SubmissionForm.tsx +0 -406
  351. package/refs/vbenchmark/packages/leaderboard/src/components/SubmitForm.tsx +0 -293
  352. package/refs/vbenchmark/packages/leaderboard/src/components/TerminalStream.tsx +0 -111
  353. package/refs/vbenchmark/packages/leaderboard/src/config/pricing.ts +0 -206
  354. package/refs/vbenchmark/packages/leaderboard/src/db/index.ts +0 -31
  355. package/refs/vbenchmark/packages/leaderboard/src/db/schema.ts +0 -125
  356. package/refs/vbenchmark/packages/leaderboard/src/index.ts +0 -13
  357. package/refs/vbenchmark/packages/leaderboard/src/lib/websocket.ts +0 -124
  358. package/refs/vbenchmark/packages/leaderboard/src/routes/leaderboard.ts +0 -698
  359. package/refs/vbenchmark/packages/leaderboard/src/routes/live.ts +0 -175
  360. package/refs/vbenchmark/packages/leaderboard/src/routes/submissions.ts +0 -183
  361. package/refs/vbenchmark/packages/leaderboard/src/routes/tasks.ts +0 -215
  362. package/refs/vbenchmark/packages/leaderboard/tests/api.test.ts +0 -228
  363. package/refs/vbenchmark/packages/leaderboard/tsconfig.json +0 -9
  364. package/refs/vbenchmark/scripts/deploy.sh +0 -70
  365. package/refs/vbenchmark/tasks/ai-integration/advanced/context-management/PROMPT.md +0 -15
  366. package/refs/vbenchmark/tasks/ai-integration/advanced/context-management/task.yaml +0 -16
  367. package/refs/vbenchmark/tasks/ai-integration/advanced/evaluation-framework/PROMPT.md +0 -15
  368. package/refs/vbenchmark/tasks/ai-integration/advanced/evaluation-framework/task.yaml +0 -16
  369. package/refs/vbenchmark/tasks/ai-integration/advanced/guardrails-safety/PROMPT.md +0 -15
  370. package/refs/vbenchmark/tasks/ai-integration/advanced/guardrails-safety/task.yaml +0 -16
  371. package/refs/vbenchmark/tasks/ai-integration/advanced/memory-system/PROMPT.md +0 -15
  372. package/refs/vbenchmark/tasks/ai-integration/advanced/memory-system/task.yaml +0 -16
  373. package/refs/vbenchmark/tasks/ai-integration/advanced/model-routing/PROMPT.md +0 -15
  374. package/refs/vbenchmark/tasks/ai-integration/advanced/model-routing/task.yaml +0 -16
  375. package/refs/vbenchmark/tasks/ai-integration/advanced/multi-agent-system/PROMPT.md +0 -15
  376. package/refs/vbenchmark/tasks/ai-integration/advanced/multi-agent-system/task.yaml +0 -16
  377. package/refs/vbenchmark/tasks/ai-integration/advanced/prompt-optimization/PROMPT.md +0 -15
  378. package/refs/vbenchmark/tasks/ai-integration/advanced/prompt-optimization/task.yaml +0 -16
  379. package/refs/vbenchmark/tasks/ai-integration/advanced/reasoning-chain/PROMPT.md +0 -15
  380. package/refs/vbenchmark/tasks/ai-integration/advanced/reasoning-chain/task.yaml +0 -16
  381. package/refs/vbenchmark/tasks/ai-integration/advanced/streaming-pipeline/PROMPT.md +0 -15
  382. package/refs/vbenchmark/tasks/ai-integration/advanced/streaming-pipeline/task.yaml +0 -16
  383. package/refs/vbenchmark/tasks/ai-integration/advanced/tool-use-orchestration/PROMPT.md +0 -15
  384. package/refs/vbenchmark/tasks/ai-integration/advanced/tool-use-orchestration/task.yaml +0 -16
  385. package/refs/vbenchmark/tasks/ai-integration/agents/code-review-agent/PROMPT.md +0 -64
  386. package/refs/vbenchmark/tasks/ai-integration/agents/code-review-agent/task.yaml +0 -24
  387. package/refs/vbenchmark/tasks/ai-integration/agents/research-agent/PROMPT.md +0 -61
  388. package/refs/vbenchmark/tasks/ai-integration/agents/research-agent/task.yaml +0 -24
  389. package/refs/vbenchmark/tasks/ai-integration/agents/web-scraper-agent/PROMPT.md +0 -57
  390. package/refs/vbenchmark/tasks/ai-integration/agents/web-scraper-agent/task.yaml +0 -24
  391. package/refs/vbenchmark/tasks/ai-integration/embeddings/duplicate-detection/PROMPT.md +0 -50
  392. package/refs/vbenchmark/tasks/ai-integration/embeddings/duplicate-detection/task.yaml +0 -24
  393. package/refs/vbenchmark/tasks/ai-integration/embeddings/recommendation-engine/PROMPT.md +0 -51
  394. package/refs/vbenchmark/tasks/ai-integration/embeddings/recommendation-engine/task.yaml +0 -24
  395. package/refs/vbenchmark/tasks/ai-integration/embeddings/semantic-search/PROMPT.md +0 -50
  396. package/refs/vbenchmark/tasks/ai-integration/embeddings/semantic-search/task.yaml +0 -24
  397. package/refs/vbenchmark/tasks/ai-integration/fine-tuning/classification-model/PROMPT.md +0 -50
  398. package/refs/vbenchmark/tasks/ai-integration/fine-tuning/classification-model/task.yaml +0 -24
  399. package/refs/vbenchmark/tasks/ai-integration/function-calling/api-orchestrator/PROMPT.md +0 -60
  400. package/refs/vbenchmark/tasks/ai-integration/function-calling/api-orchestrator/task.yaml +0 -24
  401. package/refs/vbenchmark/tasks/ai-integration/function-calling/calendar-assistant/PROMPT.md +0 -50
  402. package/refs/vbenchmark/tasks/ai-integration/function-calling/calendar-assistant/task.yaml +0 -24
  403. package/refs/vbenchmark/tasks/ai-integration/function-calling/database-query/PROMPT.md +0 -62
  404. package/refs/vbenchmark/tasks/ai-integration/function-calling/database-query/task.yaml +0 -24
  405. package/refs/vbenchmark/tasks/ai-integration/multimodal/chart-interpreter/PROMPT.md +0 -60
  406. package/refs/vbenchmark/tasks/ai-integration/multimodal/chart-interpreter/task.yaml +0 -24
  407. package/refs/vbenchmark/tasks/ai-integration/multimodal/image-captioning/PROMPT.md +0 -49
  408. package/refs/vbenchmark/tasks/ai-integration/multimodal/image-captioning/task.yaml +0 -24
  409. package/refs/vbenchmark/tasks/ai-integration/rag-chatbot/code-assistant/PROMPT.md +0 -51
  410. package/refs/vbenchmark/tasks/ai-integration/rag-chatbot/code-assistant/task.yaml +0 -24
  411. package/refs/vbenchmark/tasks/ai-integration/rag-chatbot/doc-search/PROMPT.md +0 -51
  412. package/refs/vbenchmark/tasks/ai-integration/rag-chatbot/doc-search/task.yaml +0 -24
  413. package/refs/vbenchmark/tasks/ai-integration/rag-chatbot/pdf-qa/PROMPT.md +0 -76
  414. package/refs/vbenchmark/tasks/ai-integration/rag-chatbot/pdf-qa/docker-compose.yaml +0 -30
  415. package/refs/vbenchmark/tasks/ai-integration/rag-chatbot/pdf-qa/task.yaml +0 -30
  416. package/refs/vbenchmark/tasks/ai-integration/rag-chatbot/pdf-qa/tests/functional/qa.test.py +0 -146
  417. package/refs/vbenchmark/tasks/ai-integration/rag-chatbot/support-bot/PROMPT.md +0 -51
  418. package/refs/vbenchmark/tasks/ai-integration/rag-chatbot/support-bot/task.yaml +0 -24
  419. package/refs/vbenchmark/tasks/ai-integration/structured-output/contract-analyzer/PROMPT.md +0 -67
  420. package/refs/vbenchmark/tasks/ai-integration/structured-output/contract-analyzer/task.yaml +0 -24
  421. package/refs/vbenchmark/tasks/ai-integration/structured-output/invoice-parser/PROMPT.md +0 -61
  422. package/refs/vbenchmark/tasks/ai-integration/structured-output/invoice-parser/task.yaml +0 -27
  423. package/refs/vbenchmark/tasks/ai-integration/structured-output/receipt-scanner/PROMPT.md +0 -65
  424. package/refs/vbenchmark/tasks/ai-integration/structured-output/receipt-scanner/task.yaml +0 -24
  425. package/refs/vbenchmark/tasks/ai-integration/structured-output/resume-parser/PROMPT.md +0 -70
  426. package/refs/vbenchmark/tasks/ai-integration/structured-output/resume-parser/task.yaml +0 -24
  427. package/refs/vbenchmark/tasks/api-integrations/advanced/api-analytics/PROMPT.md +0 -15
  428. package/refs/vbenchmark/tasks/api-integrations/advanced/api-analytics/task.yaml +0 -16
  429. package/refs/vbenchmark/tasks/api-integrations/advanced/api-gateway/PROMPT.md +0 -15
  430. package/refs/vbenchmark/tasks/api-integrations/advanced/api-gateway/task.yaml +0 -16
  431. package/refs/vbenchmark/tasks/api-integrations/advanced/api-mocking/PROMPT.md +0 -15
  432. package/refs/vbenchmark/tasks/api-integrations/advanced/api-mocking/task.yaml +0 -16
  433. package/refs/vbenchmark/tasks/api-integrations/advanced/contract-testing/PROMPT.md +0 -15
  434. package/refs/vbenchmark/tasks/api-integrations/advanced/contract-testing/task.yaml +0 -16
  435. package/refs/vbenchmark/tasks/api-integrations/advanced/graphql-federation/PROMPT.md +0 -15
  436. package/refs/vbenchmark/tasks/api-integrations/advanced/graphql-federation/task.yaml +0 -16
  437. package/refs/vbenchmark/tasks/api-integrations/advanced/grpc-gateway/PROMPT.md +0 -15
  438. package/refs/vbenchmark/tasks/api-integrations/advanced/grpc-gateway/task.yaml +0 -16
  439. package/refs/vbenchmark/tasks/api-integrations/advanced/rate-limiter/PROMPT.md +0 -15
  440. package/refs/vbenchmark/tasks/api-integrations/advanced/rate-limiter/task.yaml +0 -16
  441. package/refs/vbenchmark/tasks/api-integrations/advanced/request-validator/PROMPT.md +0 -15
  442. package/refs/vbenchmark/tasks/api-integrations/advanced/request-validator/task.yaml +0 -16
  443. package/refs/vbenchmark/tasks/api-integrations/advanced/sdk-generator/PROMPT.md +0 -15
  444. package/refs/vbenchmark/tasks/api-integrations/advanced/sdk-generator/task.yaml +0 -16
  445. package/refs/vbenchmark/tasks/api-integrations/advanced/webhook-processor/PROMPT.md +0 -15
  446. package/refs/vbenchmark/tasks/api-integrations/advanced/webhook-processor/task.yaml +0 -16
  447. package/refs/vbenchmark/tasks/api-integrations/analytics/mixpanel-events/PROMPT.md +0 -42
  448. package/refs/vbenchmark/tasks/api-integrations/analytics/mixpanel-events/task.yaml +0 -24
  449. package/refs/vbenchmark/tasks/api-integrations/analytics/segment-tracking/PROMPT.md +0 -42
  450. package/refs/vbenchmark/tasks/api-integrations/analytics/segment-tracking/task.yaml +0 -24
  451. package/refs/vbenchmark/tasks/api-integrations/auth-provider/oauth2-github/PROMPT.md +0 -42
  452. package/refs/vbenchmark/tasks/api-integrations/auth-provider/oauth2-github/task.yaml +0 -24
  453. package/refs/vbenchmark/tasks/api-integrations/auth-provider/okta-integration/PROMPT.md +0 -44
  454. package/refs/vbenchmark/tasks/api-integrations/auth-provider/okta-integration/task.yaml +0 -24
  455. package/refs/vbenchmark/tasks/api-integrations/auth-provider/saml-sso/PROMPT.md +0 -42
  456. package/refs/vbenchmark/tasks/api-integrations/auth-provider/saml-sso/task.yaml +0 -24
  457. package/refs/vbenchmark/tasks/api-integrations/communication/discord-webhook/PROMPT.md +0 -44
  458. package/refs/vbenchmark/tasks/api-integrations/communication/discord-webhook/task.yaml +0 -24
  459. package/refs/vbenchmark/tasks/api-integrations/communication/slack-bot/PROMPT.md +0 -42
  460. package/refs/vbenchmark/tasks/api-integrations/communication/slack-bot/task.yaml +0 -24
  461. package/refs/vbenchmark/tasks/api-integrations/communication/twilio-sms/PROMPT.md +0 -42
  462. package/refs/vbenchmark/tasks/api-integrations/communication/twilio-sms/task.yaml +0 -24
  463. package/refs/vbenchmark/tasks/api-integrations/email/transactional/PROMPT.md +0 -82
  464. package/refs/vbenchmark/tasks/api-integrations/email/transactional/task.yaml +0 -27
  465. package/refs/vbenchmark/tasks/api-integrations/maps/google-maps-geocoding/PROMPT.md +0 -41
  466. package/refs/vbenchmark/tasks/api-integrations/maps/google-maps-geocoding/task.yaml +0 -24
  467. package/refs/vbenchmark/tasks/api-integrations/maps/mapbox-directions/PROMPT.md +0 -41
  468. package/refs/vbenchmark/tasks/api-integrations/maps/mapbox-directions/task.yaml +0 -24
  469. package/refs/vbenchmark/tasks/api-integrations/payment/crypto-payments/PROMPT.md +0 -43
  470. package/refs/vbenchmark/tasks/api-integrations/payment/crypto-payments/task.yaml +0 -24
  471. package/refs/vbenchmark/tasks/api-integrations/payment/paypal-integration/PROMPT.md +0 -41
  472. package/refs/vbenchmark/tasks/api-integrations/payment/paypal-integration/task.yaml +0 -24
  473. package/refs/vbenchmark/tasks/api-integrations/social/twitter-api/PROMPT.md +0 -41
  474. package/refs/vbenchmark/tasks/api-integrations/social/twitter-api/task.yaml +0 -24
  475. package/refs/vbenchmark/tasks/api-integrations/storage/cloudinary-upload/PROMPT.md +0 -43
  476. package/refs/vbenchmark/tasks/api-integrations/storage/cloudinary-upload/task.yaml +0 -24
  477. package/refs/vbenchmark/tasks/api-integrations/storage/gcs-streaming/PROMPT.md +0 -43
  478. package/refs/vbenchmark/tasks/api-integrations/storage/gcs-streaming/task.yaml +0 -24
  479. package/refs/vbenchmark/tasks/api-integrations/storage/s3-presigned-urls/PROMPT.md +0 -41
  480. package/refs/vbenchmark/tasks/api-integrations/storage/s3-presigned-urls/task.yaml +0 -24
  481. package/refs/vbenchmark/tasks/api-integrations/stripe/checkout-session/PROMPT.md +0 -41
  482. package/refs/vbenchmark/tasks/api-integrations/stripe/checkout-session/task.yaml +0 -24
  483. package/refs/vbenchmark/tasks/api-integrations/stripe/payment-webhook/PROMPT.md +0 -60
  484. package/refs/vbenchmark/tasks/api-integrations/stripe/payment-webhook/docker-compose.yaml +0 -38
  485. package/refs/vbenchmark/tasks/api-integrations/stripe/payment-webhook/task.yaml +0 -31
  486. package/refs/vbenchmark/tasks/api-integrations/stripe/payment-webhook/tests/webhook.test.ts +0 -193
  487. package/refs/vbenchmark/tasks/api-integrations/stripe/subscription-portal/PROMPT.md +0 -41
  488. package/refs/vbenchmark/tasks/api-integrations/stripe/subscription-portal/task.yaml +0 -24
  489. package/refs/vbenchmark/tasks/code-evolution/advanced/api-deprecation/PROMPT.md +0 -15
  490. package/refs/vbenchmark/tasks/code-evolution/advanced/api-deprecation/task.yaml +0 -16
  491. package/refs/vbenchmark/tasks/code-evolution/advanced/ast-refactoring/PROMPT.md +0 -15
  492. package/refs/vbenchmark/tasks/code-evolution/advanced/ast-refactoring/task.yaml +0 -16
  493. package/refs/vbenchmark/tasks/code-evolution/advanced/concurrency-fix/PROMPT.md +0 -15
  494. package/refs/vbenchmark/tasks/code-evolution/advanced/concurrency-fix/task.yaml +0 -16
  495. package/refs/vbenchmark/tasks/code-evolution/advanced/database-schema-migration/PROMPT.md +0 -15
  496. package/refs/vbenchmark/tasks/code-evolution/advanced/database-schema-migration/task.yaml +0 -16
  497. package/refs/vbenchmark/tasks/code-evolution/advanced/dead-code-elimination/PROMPT.md +0 -15
  498. package/refs/vbenchmark/tasks/code-evolution/advanced/dead-code-elimination/task.yaml +0 -16
  499. package/refs/vbenchmark/tasks/code-evolution/advanced/dependency-upgrade/PROMPT.md +0 -15
  500. package/refs/vbenchmark/tasks/code-evolution/advanced/dependency-upgrade/task.yaml +0 -16
  501. package/refs/vbenchmark/tasks/code-evolution/advanced/memory-optimization/PROMPT.md +0 -15
  502. package/refs/vbenchmark/tasks/code-evolution/advanced/memory-optimization/task.yaml +0 -16
  503. package/refs/vbenchmark/tasks/code-evolution/advanced/monorepo-extraction/PROMPT.md +0 -15
  504. package/refs/vbenchmark/tasks/code-evolution/advanced/monorepo-extraction/task.yaml +0 -16
  505. package/refs/vbenchmark/tasks/code-evolution/advanced/performance-profiling/PROMPT.md +0 -15
  506. package/refs/vbenchmark/tasks/code-evolution/advanced/performance-profiling/task.yaml +0 -16
  507. package/refs/vbenchmark/tasks/code-evolution/advanced/type-migration/PROMPT.md +0 -15
  508. package/refs/vbenchmark/tasks/code-evolution/advanced/type-migration/task.yaml +0 -16
  509. package/refs/vbenchmark/tasks/code-evolution/legacy-migration/callback-to-async/PROMPT.md +0 -47
  510. package/refs/vbenchmark/tasks/code-evolution/legacy-migration/callback-to-async/task.yaml +0 -24
  511. package/refs/vbenchmark/tasks/code-evolution/legacy-migration/express-to-fastify/PROMPT.md +0 -49
  512. package/refs/vbenchmark/tasks/code-evolution/legacy-migration/express-to-fastify/base-code/src/app.ts +0 -22
  513. package/refs/vbenchmark/tasks/code-evolution/legacy-migration/express-to-fastify/task.yaml +0 -37
  514. package/refs/vbenchmark/tasks/code-evolution/legacy-migration/express-to-fastify/tests/api.test.ts +0 -70
  515. package/refs/vbenchmark/tasks/code-evolution/legacy-migration/flask-to-fastapi/PROMPT.md +0 -46
  516. package/refs/vbenchmark/tasks/code-evolution/legacy-migration/flask-to-fastapi/task.yaml +0 -24
  517. package/refs/vbenchmark/tasks/code-evolution/legacy-migration/java-to-kotlin/PROMPT.md +0 -45
  518. package/refs/vbenchmark/tasks/code-evolution/legacy-migration/java-to-kotlin/task.yaml +0 -24
  519. package/refs/vbenchmark/tasks/code-evolution/legacy-migration/jquery-to-react/PROMPT.md +0 -47
  520. package/refs/vbenchmark/tasks/code-evolution/legacy-migration/jquery-to-react/task.yaml +0 -24
  521. package/refs/vbenchmark/tasks/code-evolution/legacy-migration/rest-to-grpc/PROMPT.md +0 -47
  522. package/refs/vbenchmark/tasks/code-evolution/legacy-migration/rest-to-grpc/task.yaml +0 -24
  523. package/refs/vbenchmark/tasks/code-evolution/performance/async-refactor/PROMPT.md +0 -47
  524. package/refs/vbenchmark/tasks/code-evolution/performance/async-refactor/task.yaml +0 -24
  525. package/refs/vbenchmark/tasks/code-evolution/performance/memory-leak-fix/PROMPT.md +0 -47
  526. package/refs/vbenchmark/tasks/code-evolution/performance/memory-leak-fix/task.yaml +0 -24
  527. package/refs/vbenchmark/tasks/code-evolution/performance/query-optimization/PROMPT.md +0 -49
  528. package/refs/vbenchmark/tasks/code-evolution/performance/query-optimization/task.yaml +0 -24
  529. package/refs/vbenchmark/tasks/code-evolution/refactoring/class-to-hooks/PROMPT.md +0 -96
  530. package/refs/vbenchmark/tasks/code-evolution/refactoring/class-to-hooks/task.yaml +0 -27
  531. package/refs/vbenchmark/tasks/code-evolution/refactoring/dependency-injection/PROMPT.md +0 -47
  532. package/refs/vbenchmark/tasks/code-evolution/refactoring/dependency-injection/task.yaml +0 -24
  533. package/refs/vbenchmark/tasks/code-evolution/refactoring/error-handling/PROMPT.md +0 -48
  534. package/refs/vbenchmark/tasks/code-evolution/refactoring/error-handling/task.yaml +0 -24
  535. package/refs/vbenchmark/tasks/code-evolution/refactoring/monolith-to-modules/PROMPT.md +0 -50
  536. package/refs/vbenchmark/tasks/code-evolution/refactoring/monolith-to-modules/task.yaml +0 -24
  537. package/refs/vbenchmark/tasks/code-evolution/refactoring/orm-migration/PROMPT.md +0 -47
  538. package/refs/vbenchmark/tasks/code-evolution/refactoring/orm-migration/task.yaml +0 -24
  539. package/refs/vbenchmark/tasks/code-evolution/security/secrets-rotation/PROMPT.md +0 -49
  540. package/refs/vbenchmark/tasks/code-evolution/security/secrets-rotation/task.yaml +0 -24
  541. package/refs/vbenchmark/tasks/code-evolution/security/sql-injection-fix/PROMPT.md +0 -50
  542. package/refs/vbenchmark/tasks/code-evolution/security/sql-injection-fix/task.yaml +0 -24
  543. package/refs/vbenchmark/tasks/code-evolution/security/xss-prevention/PROMPT.md +0 -47
  544. package/refs/vbenchmark/tasks/code-evolution/security/xss-prevention/task.yaml +0 -24
  545. package/refs/vbenchmark/tasks/code-evolution/testing/add-unit-tests/PROMPT.md +0 -48
  546. package/refs/vbenchmark/tasks/code-evolution/testing/add-unit-tests/task.yaml +0 -24
  547. package/refs/vbenchmark/tasks/code-evolution/testing/e2e-playwright/PROMPT.md +0 -50
  548. package/refs/vbenchmark/tasks/code-evolution/testing/e2e-playwright/task.yaml +0 -24
  549. package/refs/vbenchmark/tasks/code-evolution/testing/pytest-fixtures/PROMPT.md +0 -47
  550. package/refs/vbenchmark/tasks/code-evolution/testing/pytest-fixtures/task.yaml +0 -24
  551. package/refs/vbenchmark/tasks/frontend/accessibility/keyboard-shortcuts/PROMPT.md +0 -44
  552. package/refs/vbenchmark/tasks/frontend/accessibility/keyboard-shortcuts/task.yaml +0 -24
  553. package/refs/vbenchmark/tasks/frontend/accessibility/screen-reader-nav/PROMPT.md +0 -44
  554. package/refs/vbenchmark/tasks/frontend/accessibility/screen-reader-nav/task.yaml +0 -24
  555. package/refs/vbenchmark/tasks/frontend/advanced/canvas-editor/PROMPT.md +0 -15
  556. package/refs/vbenchmark/tasks/frontend/advanced/canvas-editor/task.yaml +0 -16
  557. package/refs/vbenchmark/tasks/frontend/advanced/micro-frontend/PROMPT.md +0 -15
  558. package/refs/vbenchmark/tasks/frontend/advanced/micro-frontend/task.yaml +0 -16
  559. package/refs/vbenchmark/tasks/frontend/advanced/offline-first/PROMPT.md +0 -15
  560. package/refs/vbenchmark/tasks/frontend/advanced/offline-first/task.yaml +0 -16
  561. package/refs/vbenchmark/tasks/frontend/advanced/realtime-collab/PROMPT.md +0 -15
  562. package/refs/vbenchmark/tasks/frontend/advanced/realtime-collab/task.yaml +0 -16
  563. package/refs/vbenchmark/tasks/frontend/advanced/service-worker/PROMPT.md +0 -15
  564. package/refs/vbenchmark/tasks/frontend/advanced/service-worker/task.yaml +0 -16
  565. package/refs/vbenchmark/tasks/frontend/advanced/state-machine/PROMPT.md +0 -15
  566. package/refs/vbenchmark/tasks/frontend/advanced/state-machine/task.yaml +0 -16
  567. package/refs/vbenchmark/tasks/frontend/advanced/virtual-list/PROMPT.md +0 -15
  568. package/refs/vbenchmark/tasks/frontend/advanced/virtual-list/task.yaml +0 -16
  569. package/refs/vbenchmark/tasks/frontend/advanced/wasm-integration/PROMPT.md +0 -15
  570. package/refs/vbenchmark/tasks/frontend/advanced/wasm-integration/task.yaml +0 -16
  571. package/refs/vbenchmark/tasks/frontend/advanced/web-worker/PROMPT.md +0 -15
  572. package/refs/vbenchmark/tasks/frontend/advanced/web-worker/task.yaml +0 -16
  573. package/refs/vbenchmark/tasks/frontend/advanced/webgl-visualization/PROMPT.md +0 -15
  574. package/refs/vbenchmark/tasks/frontend/advanced/webgl-visualization/task.yaml +0 -16
  575. package/refs/vbenchmark/tasks/frontend/animation/page-transitions/PROMPT.md +0 -44
  576. package/refs/vbenchmark/tasks/frontend/animation/page-transitions/task.yaml +0 -24
  577. package/refs/vbenchmark/tasks/frontend/components/data-grid/PROMPT.md +0 -59
  578. package/refs/vbenchmark/tasks/frontend/components/data-grid/task.yaml +0 -24
  579. package/refs/vbenchmark/tasks/frontend/components/date-range-picker/PROMPT.md +0 -57
  580. package/refs/vbenchmark/tasks/frontend/components/date-range-picker/task.yaml +0 -24
  581. package/refs/vbenchmark/tasks/frontend/components/file-uploader/PROMPT.md +0 -55
  582. package/refs/vbenchmark/tasks/frontend/components/file-uploader/task.yaml +0 -24
  583. package/refs/vbenchmark/tasks/frontend/components/form-builder/PROMPT.md +0 -96
  584. package/refs/vbenchmark/tasks/frontend/components/form-builder/task.yaml +0 -28
  585. package/refs/vbenchmark/tasks/frontend/components/rich-text-editor/PROMPT.md +0 -45
  586. package/refs/vbenchmark/tasks/frontend/components/rich-text-editor/task.yaml +0 -24
  587. package/refs/vbenchmark/tasks/frontend/figma-to-code/dashboard-layout/PROMPT.md +0 -50
  588. package/refs/vbenchmark/tasks/frontend/figma-to-code/dashboard-layout/task.yaml +0 -25
  589. package/refs/vbenchmark/tasks/frontend/figma-to-code/landing-page/PROMPT.md +0 -49
  590. package/refs/vbenchmark/tasks/frontend/figma-to-code/landing-page/task.yaml +0 -25
  591. package/refs/vbenchmark/tasks/frontend/figma-to-code/mobile-app-screen/PROMPT.md +0 -51
  592. package/refs/vbenchmark/tasks/frontend/figma-to-code/mobile-app-screen/task.yaml +0 -24
  593. package/refs/vbenchmark/tasks/frontend/figma-to-code/pricing-card/PROMPT.md +0 -93
  594. package/refs/vbenchmark/tasks/frontend/figma-to-code/pricing-card/docker-compose.yaml +0 -23
  595. package/refs/vbenchmark/tasks/frontend/figma-to-code/pricing-card/task.yaml +0 -30
  596. package/refs/vbenchmark/tasks/frontend/figma-to-code/pricing-card/tests/visual/diff.test.ts +0 -107
  597. package/refs/vbenchmark/tasks/frontend/figma-to-code/pricing-card/tests/visual/interaction.test.ts +0 -88
  598. package/refs/vbenchmark/tasks/frontend/performance/image-lazy-load/PROMPT.md +0 -43
  599. package/refs/vbenchmark/tasks/frontend/performance/image-lazy-load/task.yaml +0 -24
  600. package/refs/vbenchmark/tasks/frontend/performance/infinite-scroll/PROMPT.md +0 -44
  601. package/refs/vbenchmark/tasks/frontend/performance/infinite-scroll/task.yaml +0 -24
  602. package/refs/vbenchmark/tasks/frontend/state-management/collaborative-editor/PROMPT.md +0 -44
  603. package/refs/vbenchmark/tasks/frontend/state-management/collaborative-editor/task.yaml +0 -24
  604. package/refs/vbenchmark/tasks/frontend/state-management/shopping-cart/PROMPT.md +0 -53
  605. package/refs/vbenchmark/tasks/frontend/state-management/shopping-cart/task.yaml +0 -24
  606. package/refs/vbenchmark/tasks/frontend/visualization/chart-dashboard/PROMPT.md +0 -83
  607. package/refs/vbenchmark/tasks/frontend/visualization/chart-dashboard/task.yaml +0 -28
  608. package/refs/vbenchmark/tasks/frontend/visualization/gantt-chart/PROMPT.md +0 -57
  609. package/refs/vbenchmark/tasks/frontend/visualization/gantt-chart/task.yaml +0 -24
  610. package/refs/vbenchmark/tasks/frontend/visualization/map-dashboard/PROMPT.md +0 -44
  611. package/refs/vbenchmark/tasks/frontend/visualization/map-dashboard/task.yaml +0 -24
  612. package/refs/vbenchmark/tasks/frontend/visualization/realtime-charts/PROMPT.md +0 -43
  613. package/refs/vbenchmark/tasks/frontend/visualization/realtime-charts/task.yaml +0 -24
  614. package/refs/vbenchmark/tasks/glue-code/advanced/blue-green-deploy/PROMPT.md +0 -15
  615. package/refs/vbenchmark/tasks/glue-code/advanced/blue-green-deploy/task.yaml +0 -16
  616. package/refs/vbenchmark/tasks/glue-code/advanced/canary-release/PROMPT.md +0 -15
  617. package/refs/vbenchmark/tasks/glue-code/advanced/canary-release/task.yaml +0 -16
  618. package/refs/vbenchmark/tasks/glue-code/advanced/change-data-capture/PROMPT.md +0 -15
  619. package/refs/vbenchmark/tasks/glue-code/advanced/change-data-capture/task.yaml +0 -16
  620. package/refs/vbenchmark/tasks/glue-code/advanced/config-management/PROMPT.md +0 -15
  621. package/refs/vbenchmark/tasks/glue-code/advanced/config-management/task.yaml +0 -16
  622. package/refs/vbenchmark/tasks/glue-code/advanced/data-pipeline/PROMPT.md +0 -15
  623. package/refs/vbenchmark/tasks/glue-code/advanced/data-pipeline/task.yaml +0 -16
  624. package/refs/vbenchmark/tasks/glue-code/advanced/distributed-tracing/PROMPT.md +0 -15
  625. package/refs/vbenchmark/tasks/glue-code/advanced/distributed-tracing/task.yaml +0 -16
  626. package/refs/vbenchmark/tasks/glue-code/advanced/log-aggregation/PROMPT.md +0 -15
  627. package/refs/vbenchmark/tasks/glue-code/advanced/log-aggregation/task.yaml +0 -16
  628. package/refs/vbenchmark/tasks/glue-code/advanced/schema-registry/PROMPT.md +0 -15
  629. package/refs/vbenchmark/tasks/glue-code/advanced/schema-registry/task.yaml +0 -16
  630. package/refs/vbenchmark/tasks/glue-code/advanced/secret-rotation/PROMPT.md +0 -15
  631. package/refs/vbenchmark/tasks/glue-code/advanced/secret-rotation/task.yaml +0 -16
  632. package/refs/vbenchmark/tasks/glue-code/advanced/stream-processing/PROMPT.md +0 -15
  633. package/refs/vbenchmark/tasks/glue-code/advanced/stream-processing/task.yaml +0 -16
  634. package/refs/vbenchmark/tasks/glue-code/api-sync/rest-to-graphql/PROMPT.md +0 -66
  635. package/refs/vbenchmark/tasks/glue-code/api-sync/rest-to-graphql/task.yaml +0 -27
  636. package/refs/vbenchmark/tasks/glue-code/caching/redis-cache/PROMPT.md +0 -82
  637. package/refs/vbenchmark/tasks/glue-code/caching/redis-cache/task.yaml +0 -27
  638. package/refs/vbenchmark/tasks/glue-code/data-transform/avro-schema-evolution/PROMPT.md +0 -51
  639. package/refs/vbenchmark/tasks/glue-code/data-transform/avro-schema-evolution/task.yaml +0 -24
  640. package/refs/vbenchmark/tasks/glue-code/data-transform/csv-normalizer/PROMPT.md +0 -49
  641. package/refs/vbenchmark/tasks/glue-code/data-transform/csv-normalizer/task.yaml +0 -24
  642. package/refs/vbenchmark/tasks/glue-code/data-transform/excel-to-json/PROMPT.md +0 -67
  643. package/refs/vbenchmark/tasks/glue-code/data-transform/excel-to-json/task.yaml +0 -28
  644. package/refs/vbenchmark/tasks/glue-code/data-transform/excel-to-json/tests/transform.test.py +0 -137
  645. package/refs/vbenchmark/tasks/glue-code/data-transform/json-to-xml/PROMPT.md +0 -45
  646. package/refs/vbenchmark/tasks/glue-code/data-transform/json-to-xml/task.yaml +0 -24
  647. package/refs/vbenchmark/tasks/glue-code/data-transform/protobuf-converter/PROMPT.md +0 -44
  648. package/refs/vbenchmark/tasks/glue-code/data-transform/protobuf-converter/task.yaml +0 -24
  649. package/refs/vbenchmark/tasks/glue-code/etl/cdc-pipeline/PROMPT.md +0 -52
  650. package/refs/vbenchmark/tasks/glue-code/etl/cdc-pipeline/task.yaml +0 -27
  651. package/refs/vbenchmark/tasks/glue-code/etl/database-sync/PROMPT.md +0 -51
  652. package/refs/vbenchmark/tasks/glue-code/etl/database-sync/task.yaml +0 -24
  653. package/refs/vbenchmark/tasks/glue-code/etl/s3-to-warehouse/PROMPT.md +0 -50
  654. package/refs/vbenchmark/tasks/glue-code/etl/s3-to-warehouse/task.yaml +0 -24
  655. package/refs/vbenchmark/tasks/glue-code/file-processing/image-resizer/PROMPT.md +0 -52
  656. package/refs/vbenchmark/tasks/glue-code/file-processing/image-resizer/task.yaml +0 -24
  657. package/refs/vbenchmark/tasks/glue-code/file-processing/pdf-merger/PROMPT.md +0 -50
  658. package/refs/vbenchmark/tasks/glue-code/file-processing/pdf-merger/task.yaml +0 -24
  659. package/refs/vbenchmark/tasks/glue-code/file-processing/video-transcoder/PROMPT.md +0 -50
  660. package/refs/vbenchmark/tasks/glue-code/file-processing/video-transcoder/task.yaml +0 -27
  661. package/refs/vbenchmark/tasks/glue-code/migration/data-backfill/PROMPT.md +0 -50
  662. package/refs/vbenchmark/tasks/glue-code/migration/data-backfill/task.yaml +0 -24
  663. package/refs/vbenchmark/tasks/glue-code/migration/database-versioning/PROMPT.md +0 -50
  664. package/refs/vbenchmark/tasks/glue-code/migration/database-versioning/task.yaml +0 -24
  665. package/refs/vbenchmark/tasks/glue-code/queue/kafka-producer/PROMPT.md +0 -49
  666. package/refs/vbenchmark/tasks/glue-code/queue/kafka-producer/task.yaml +0 -27
  667. package/refs/vbenchmark/tasks/glue-code/queue/rabbitmq-consumer/PROMPT.md +0 -50
  668. package/refs/vbenchmark/tasks/glue-code/queue/rabbitmq-consumer/task.yaml +0 -27
  669. package/refs/vbenchmark/tasks/glue-code/queue/sqs-batch-processor/PROMPT.md +0 -47
  670. package/refs/vbenchmark/tasks/glue-code/queue/sqs-batch-processor/task.yaml +0 -24
  671. package/refs/vbenchmark/tasks/glue-code/scheduler/cron-job-manager/PROMPT.md +0 -52
  672. package/refs/vbenchmark/tasks/glue-code/scheduler/cron-job-manager/task.yaml +0 -27
  673. package/refs/vbenchmark/tasks/glue-code/scheduler/delayed-tasks/PROMPT.md +0 -51
  674. package/refs/vbenchmark/tasks/glue-code/scheduler/delayed-tasks/task.yaml +0 -27
  675. package/refs/vbenchmark/tasks/saas-core/advanced/api-versioning/PROMPT.md +0 -15
  676. package/refs/vbenchmark/tasks/saas-core/advanced/api-versioning/task.yaml +0 -16
  677. package/refs/vbenchmark/tasks/saas-core/advanced/circuit-breaker/PROMPT.md +0 -13
  678. package/refs/vbenchmark/tasks/saas-core/advanced/circuit-breaker/task.yaml +0 -16
  679. package/refs/vbenchmark/tasks/saas-core/advanced/compliance-gdpr/PROMPT.md +0 -15
  680. package/refs/vbenchmark/tasks/saas-core/advanced/compliance-gdpr/task.yaml +0 -16
  681. package/refs/vbenchmark/tasks/saas-core/advanced/cqrs-pattern/PROMPT.md +0 -13
  682. package/refs/vbenchmark/tasks/saas-core/advanced/cqrs-pattern/task.yaml +0 -16
  683. package/refs/vbenchmark/tasks/saas-core/advanced/data-encryption/PROMPT.md +0 -15
  684. package/refs/vbenchmark/tasks/saas-core/advanced/data-encryption/task.yaml +0 -16
  685. package/refs/vbenchmark/tasks/saas-core/advanced/distributed-locking/PROMPT.md +0 -46
  686. package/refs/vbenchmark/tasks/saas-core/advanced/distributed-locking/task.yaml +0 -24
  687. package/refs/vbenchmark/tasks/saas-core/advanced/event-sourcing/PROMPT.md +0 -23
  688. package/refs/vbenchmark/tasks/saas-core/advanced/event-sourcing/task.yaml +0 -16
  689. package/refs/vbenchmark/tasks/saas-core/advanced/feature-flags-ab/PROMPT.md +0 -15
  690. package/refs/vbenchmark/tasks/saas-core/advanced/feature-flags-ab/task.yaml +0 -16
  691. package/refs/vbenchmark/tasks/saas-core/advanced/saga-orchestration/PROMPT.md +0 -13
  692. package/refs/vbenchmark/tasks/saas-core/advanced/saga-orchestration/task.yaml +0 -16
  693. package/refs/vbenchmark/tasks/saas-core/advanced/webhook-delivery/PROMPT.md +0 -15
  694. package/refs/vbenchmark/tasks/saas-core/advanced/webhook-delivery/task.yaml +0 -16
  695. package/refs/vbenchmark/tasks/saas-core/audit/activity-logging/PROMPT.md +0 -50
  696. package/refs/vbenchmark/tasks/saas-core/audit/activity-logging/task.yaml +0 -27
  697. package/refs/vbenchmark/tasks/saas-core/auth/jwt-refresh-tokens/PROMPT.md +0 -50
  698. package/refs/vbenchmark/tasks/saas-core/auth/jwt-refresh-tokens/task.yaml +0 -27
  699. package/refs/vbenchmark/tasks/saas-core/auth/magic-link-email/PROMPT.md +0 -53
  700. package/refs/vbenchmark/tasks/saas-core/auth/magic-link-email/task.yaml +0 -27
  701. package/refs/vbenchmark/tasks/saas-core/auth/mfa-totp/PROMPT.md +0 -79
  702. package/refs/vbenchmark/tasks/saas-core/auth/mfa-totp/task.yaml +0 -27
  703. package/refs/vbenchmark/tasks/saas-core/auth/rbac-permissions/PROMPT.md +0 -51
  704. package/refs/vbenchmark/tasks/saas-core/auth/rbac-permissions/task.yaml +0 -27
  705. package/refs/vbenchmark/tasks/saas-core/auth/session-management/PROMPT.md +0 -52
  706. package/refs/vbenchmark/tasks/saas-core/auth/session-management/task.yaml +0 -27
  707. package/refs/vbenchmark/tasks/saas-core/auth/supabase-oauth/PROMPT.md +0 -45
  708. package/refs/vbenchmark/tasks/saas-core/auth/supabase-oauth/docker-compose.yaml +0 -47
  709. package/refs/vbenchmark/tasks/saas-core/auth/supabase-oauth/task.yaml +0 -32
  710. package/refs/vbenchmark/tasks/saas-core/auth/supabase-oauth/tests/auth.test.ts +0 -59
  711. package/refs/vbenchmark/tasks/saas-core/billing/invoice-generation/PROMPT.md +0 -53
  712. package/refs/vbenchmark/tasks/saas-core/billing/invoice-generation/task.yaml +0 -27
  713. package/refs/vbenchmark/tasks/saas-core/billing/stripe-subscriptions/PROMPT.md +0 -51
  714. package/refs/vbenchmark/tasks/saas-core/billing/stripe-subscriptions/task.yaml +0 -27
  715. package/refs/vbenchmark/tasks/saas-core/billing/usage-metering/PROMPT.md +0 -52
  716. package/refs/vbenchmark/tasks/saas-core/billing/usage-metering/task.yaml +0 -27
  717. package/refs/vbenchmark/tasks/saas-core/crud/dashboard-table/PROMPT.md +0 -48
  718. package/refs/vbenchmark/tasks/saas-core/crud/dashboard-table/task.yaml +0 -28
  719. package/refs/vbenchmark/tasks/saas-core/multi-tenant/org-isolation/PROMPT.md +0 -50
  720. package/refs/vbenchmark/tasks/saas-core/multi-tenant/org-isolation/task.yaml +0 -27
  721. package/refs/vbenchmark/tasks/saas-core/multi-tenant/subdomain-routing/PROMPT.md +0 -50
  722. package/refs/vbenchmark/tasks/saas-core/multi-tenant/subdomain-routing/task.yaml +0 -27
  723. package/refs/vbenchmark/tasks/saas-core/notifications/email-queue/PROMPT.md +0 -53
  724. package/refs/vbenchmark/tasks/saas-core/notifications/email-queue/task.yaml +0 -27
  725. package/refs/vbenchmark/tasks/saas-core/notifications/in-app-alerts/PROMPT.md +0 -51
  726. package/refs/vbenchmark/tasks/saas-core/notifications/in-app-alerts/task.yaml +0 -27
  727. package/refs/vbenchmark/tasks/saas-core/notifications/push-notifications/PROMPT.md +0 -51
  728. package/refs/vbenchmark/tasks/saas-core/notifications/push-notifications/task.yaml +0 -27
  729. package/refs/vbenchmark/tasks/saas-core/realtime/websocket-chat/PROMPT.md +0 -80
  730. package/refs/vbenchmark/tasks/saas-core/realtime/websocket-chat/task.yaml +0 -27
  731. package/refs/vbenchmark/tasks/saas-core/search/full-text-search/PROMPT.md +0 -51
  732. package/refs/vbenchmark/tasks/saas-core/search/full-text-search/task.yaml +0 -27
  733. package/refs/vbenchmark/tasks/saas-core/security/rate-limiter/PROMPT.md +0 -99
  734. package/refs/vbenchmark/tasks/saas-core/security/rate-limiter/task.yaml +0 -27
  735. package/refs/vbenchmark/tasks/saas-core/settings/user-preferences/PROMPT.md +0 -78
  736. package/refs/vbenchmark/tasks/saas-core/settings/user-preferences/task.yaml +0 -27
  737. package/refs/vbenchmark/templates/fastapi-postgres/docker-compose.yaml +0 -36
  738. package/refs/vbenchmark/templates/fastapi-postgres/pyproject.toml +0 -34
  739. package/refs/vbenchmark/templates/fastapi-postgres/src/__init__.py +0 -0
  740. package/refs/vbenchmark/templates/fastapi-postgres/src/config.py +0 -12
  741. package/refs/vbenchmark/templates/fastapi-postgres/src/database.py +0 -15
  742. package/refs/vbenchmark/templates/fastapi-postgres/src/main.py +0 -51
  743. package/refs/vbenchmark/templates/fastapi-postgres/src/models.py +0 -12
  744. package/refs/vbenchmark/templates/fastapi-postgres/src/schemas.py +0 -20
  745. package/refs/vbenchmark/templates/go-fiber/docker-compose.yaml +0 -34
  746. package/refs/vbenchmark/templates/go-fiber/go.mod +0 -33
  747. package/refs/vbenchmark/templates/go-fiber/go.sum +0 -68
  748. package/refs/vbenchmark/templates/go-fiber/main.go +0 -98
  749. package/refs/vbenchmark/templates/nextjs-supabase/.env.example +0 -3
  750. package/refs/vbenchmark/templates/nextjs-supabase/docker-compose.yaml +0 -68
  751. package/refs/vbenchmark/templates/nextjs-supabase/src/app/globals.css +0 -13
  752. package/refs/vbenchmark/templates/nextjs-supabase/src/app/layout.tsx +0 -19
  753. package/refs/vbenchmark/templates/nextjs-supabase/src/app/page.tsx +0 -38
  754. package/refs/vbenchmark/templates/nextjs-supabase/src/lib/supabase/client.ts +0 -8
  755. package/refs/vbenchmark/templates/nextjs-supabase/src/lib/supabase/server.ts +0 -32
  756. package/refs/vbenchmark/templates/rust-axum/Cargo.lock +0 -2371
  757. package/refs/vbenchmark/templates/rust-axum/Cargo.toml +0 -16
  758. package/refs/vbenchmark/templates/rust-axum/docker-compose.yaml +0 -34
  759. package/refs/vbenchmark/templates/rust-axum/migrations/20240101000000_init.sql +0 -20
  760. package/refs/vbenchmark/templates/rust-axum/src/main.rs +0 -121
  761. package/refs/vbenchmark/tsconfig.base.json +0 -18
  762. package/refs/vbenchmark/turbo.json +0 -23
  763. 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
-