cc-devflow 4.3.0 → 4.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (579) hide show
  1. package/.claude/skills/cc-act/CHANGELOG.md +70 -0
  2. package/.claude/skills/cc-act/PLAYBOOK.md +212 -0
  3. package/.claude/skills/cc-act/SKILL.md +330 -0
  4. package/.claude/skills/cc-act/assets/PR_BRIEF_TEMPLATE.md +68 -0
  5. package/.claude/skills/cc-act/assets/RELEASE_NOTE_TEMPLATE.md +29 -0
  6. package/.claude/skills/cc-act/references/closure-contract.md +49 -0
  7. package/.claude/skills/cc-act/references/git-commit-guidelines.md +83 -0
  8. package/.claude/skills/cc-act/scripts/archive-requirement.sh +49 -0
  9. package/.claude/skills/cc-act/scripts/cc-act-common.sh +245 -0
  10. package/.claude/skills/cc-act/scripts/detect-ship-target.sh +82 -0
  11. package/.claude/skills/cc-act/scripts/generate-status-report.sh +83 -0
  12. package/.claude/skills/cc-act/scripts/render-pr-brief.sh +200 -0
  13. package/.claude/skills/cc-act/scripts/sync-act-docs.sh +328 -0
  14. package/.claude/skills/cc-act/scripts/verify-act-gate.sh +63 -0
  15. package/.claude/skills/cc-check/CHANGELOG.md +78 -0
  16. package/.claude/skills/cc-check/PLAYBOOK.md +153 -0
  17. package/.claude/skills/cc-check/SKILL.md +353 -0
  18. package/.claude/skills/cc-check/assets/REPORT_CARD_TEMPLATE.json +53 -0
  19. package/.claude/skills/cc-check/references/gate-contract.md +29 -0
  20. package/.claude/skills/cc-check/references/review-contract.md +45 -0
  21. package/.claude/skills/cc-check/scripts/render-report-card.js +229 -0
  22. package/.claude/skills/cc-check/scripts/run-quality-gates.sh +86 -0
  23. package/.claude/skills/cc-check/scripts/verify-gate.sh +57 -0
  24. package/.claude/skills/cc-do/CHANGELOG.md +54 -0
  25. package/.claude/skills/cc-do/PLAYBOOK.md +119 -0
  26. package/.claude/skills/cc-do/SKILL.md +224 -0
  27. package/.claude/skills/cc-do/references/execution-recovery.md +86 -0
  28. package/.claude/skills/cc-do/references/parallel-dispatch.md +80 -0
  29. package/.claude/skills/cc-do/scripts/build-task-context.sh +184 -0
  30. package/.claude/skills/cc-do/scripts/cc-do-common.sh +79 -0
  31. package/.claude/skills/cc-do/scripts/check-task-status.sh +92 -0
  32. package/.claude/skills/cc-do/scripts/detect-file-conflicts.sh +87 -0
  33. package/.claude/skills/cc-do/scripts/mark-task-complete.sh +119 -0
  34. package/.claude/skills/cc-do/scripts/record-review-decision.sh +89 -0
  35. package/.claude/skills/cc-do/scripts/recover-workflow.sh +84 -0
  36. package/.claude/skills/cc-do/scripts/run-problem-analysis.sh +70 -0
  37. package/.claude/skills/cc-do/scripts/select-ready-tasks.sh +135 -0
  38. package/.claude/skills/cc-do/scripts/verify-task-gates.sh +94 -0
  39. package/.claude/skills/cc-do/scripts/write-task-checkpoint.sh +102 -0
  40. package/.claude/skills/cc-investigate/CHANGELOG.md +31 -0
  41. package/.claude/skills/cc-investigate/PLAYBOOK.md +49 -0
  42. package/.claude/skills/cc-investigate/SKILL.md +229 -0
  43. package/.claude/skills/cc-investigate/assets/ANALYSIS_TEMPLATE.md +56 -0
  44. package/.claude/skills/cc-investigate/assets/TASKS_TEMPLATE.md +53 -0
  45. package/.claude/skills/cc-investigate/assets/TASK_MANIFEST_TEMPLATE.json +106 -0
  46. package/.claude/skills/cc-investigate/references/investigation-contract.md +28 -0
  47. package/.claude/skills/cc-investigate/scripts/bootstrap-analysis.sh +38 -0
  48. package/.claude/skills/cc-plan/CHANGELOG.md +104 -0
  49. package/.claude/skills/cc-plan/PLAYBOOK.md +106 -0
  50. package/.claude/skills/cc-plan/SKILL.md +333 -0
  51. package/.claude/skills/cc-plan/assets/DESIGN_TEMPLATE.md +156 -0
  52. package/.claude/skills/cc-plan/assets/TASKS_TEMPLATE.md +99 -0
  53. package/.claude/skills/cc-plan/assets/TASK_MANIFEST_TEMPLATE.json +111 -0
  54. package/.claude/skills/cc-plan/assets/TINY_DESIGN_TEMPLATE.md +80 -0
  55. package/.claude/skills/cc-plan/references/planning-contract.md +82 -0
  56. package/.claude/skills/cc-plan/scripts/bump-skill-version.sh +103 -0
  57. package/.claude/skills/cc-plan/scripts/parse-task-dependencies.js +75 -0
  58. package/.claude/skills/cc-plan/scripts/validate-scope.sh +78 -0
  59. package/.claude/skills/cc-roadmap/CHANGELOG.md +119 -0
  60. package/.claude/skills/cc-roadmap/PLAYBOOK.md +136 -0
  61. package/.claude/skills/cc-roadmap/SKILL.md +267 -0
  62. package/.claude/skills/cc-roadmap/assets/BACKLOG_TEMPLATE.md +46 -0
  63. package/.claude/skills/cc-roadmap/assets/ROADMAP_TEMPLATE.md +154 -0
  64. package/.claude/skills/cc-roadmap/assets/TRACKING_TEMPLATE.json +51 -0
  65. package/.claude/skills/cc-roadmap/references/roadmap-dialogue.md +37 -0
  66. package/.claude/skills/cc-roadmap/scripts/bump-skill-version.sh +103 -0
  67. package/.claude/skills/cc-roadmap/scripts/lib/roadmap-tracking/markdown.js +604 -0
  68. package/.claude/skills/cc-roadmap/scripts/lib/roadmap-tracking/query.js +63 -0
  69. package/.claude/skills/cc-roadmap/scripts/lib/roadmap-tracking/schema.js +245 -0
  70. package/.claude/skills/cc-roadmap/scripts/lib/roadmap-tracking/store.js +139 -0
  71. package/.claude/skills/cc-roadmap/scripts/locate-roadmap-item.sh +109 -0
  72. package/.claude/skills/cc-roadmap/scripts/roadmap-tracking.js +153 -0
  73. package/.claude/skills/cc-roadmap/scripts/sync-roadmap-progress.sh +100 -0
  74. package/.claude/skills/cc-simplify/CHANGELOG.md +10 -0
  75. package/.claude/skills/cc-simplify/SKILL.md +55 -0
  76. package/.claude/skills/cc-spec-init/CHANGELOG.md +12 -0
  77. package/.claude/skills/cc-spec-init/PLAYBOOK.md +55 -0
  78. package/.claude/skills/cc-spec-init/SKILL.md +135 -0
  79. package/.claude/skills/cc-spec-init/assets/CAPABILITY_TEMPLATE.md +64 -0
  80. package/.claude/skills/cc-spec-init/assets/CHANGE_META_TEMPLATE.json +28 -0
  81. package/.claude/skills/cc-spec-init/assets/INDEX_TEMPLATE.md +35 -0
  82. package/.claude/skills/cc-spec-init/references/spec-contract.md +22 -0
  83. package/.claude/skills/cc-spec-init/scripts/bootstrap-specs.sh +31 -0
  84. package/.claude/skills/cc-spec-init/scripts/validate-spec-links.sh +45 -0
  85. package/CHANGELOG.md +80 -4
  86. package/README.md +148 -741
  87. package/README.zh-CN.md +146 -740
  88. package/bin/adapt.js +2 -6
  89. package/bin/cc-devflow-cli.js +287 -166
  90. package/config/distributable-skills.json +24 -0
  91. package/config/schema/cc-devflow-config.schema.json +45 -0
  92. package/config/user-config.template.yml +16 -0
  93. package/docs/CLAUDE.md +10 -6
  94. package/docs/commands/README.md +19 -46
  95. package/docs/commands/README.zh-CN.md +25 -48
  96. package/docs/examples/BY-ARTIFACT.md +7 -0
  97. package/docs/examples/README.md +38 -0
  98. package/docs/examples/START-HERE.md +149 -0
  99. package/docs/examples/example-bindings.json +38 -0
  100. package/docs/examples/full-design-blocked/BACKLOG.md +45 -0
  101. package/docs/examples/full-design-blocked/README.md +55 -0
  102. package/docs/examples/full-design-blocked/ROADMAP.md +53 -0
  103. package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/design.md +154 -0
  104. package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/task-manifest.json +146 -0
  105. package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/planning/tasks.md +78 -0
  106. package/docs/examples/full-design-blocked/changes/REQ-002-bulk-invite-import/review/report-card.json +52 -0
  107. package/docs/examples/full-design-blocked/roadmap-tracking.json +50 -0
  108. package/docs/examples/local-handoff/BACKLOG.md +45 -0
  109. package/docs/examples/local-handoff/README.md +56 -0
  110. package/docs/examples/local-handoff/ROADMAP.md +45 -0
  111. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/handoff/resume-index.md +39 -0
  112. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/handoff/status.md +29 -0
  113. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/design.md +71 -0
  114. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/task-manifest.json +98 -0
  115. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/planning/tasks.md +59 -0
  116. package/docs/examples/local-handoff/changes/REQ-003-audit-log-export/review/report-card.json +44 -0
  117. package/docs/examples/local-handoff/roadmap-tracking.json +48 -0
  118. package/docs/examples/pdca-loop/BACKLOG.md +46 -0
  119. package/docs/examples/pdca-loop/README.md +58 -0
  120. package/docs/examples/pdca-loop/ROADMAP.md +133 -0
  121. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/handoff/pr-brief.md +72 -0
  122. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/handoff/status.md +29 -0
  123. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/design.md +72 -0
  124. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/task-manifest.json +201 -0
  125. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/planning/tasks.md +73 -0
  126. package/docs/examples/pdca-loop/changes/REQ-001-copy-invite-link/review/report-card.json +44 -0
  127. package/docs/examples/pdca-loop/roadmap-tracking.json +114 -0
  128. package/docs/examples/scripts/check-example-bindings.sh +116 -0
  129. package/docs/guides/getting-started.md +94 -129
  130. package/docs/guides/getting-started.zh-CN.md +103 -84
  131. package/docs/skill-runtime-migration.md +46 -0
  132. package/docs/v4.3.0-migration-guide.md +60 -225
  133. package/lib/compiler/CLAUDE.md +55 -84
  134. package/lib/compiler/__tests__/drift.test.js +1 -1
  135. package/lib/compiler/__tests__/errors.test.js +0 -1
  136. package/lib/compiler/__tests__/integration.test.js +49 -3
  137. package/lib/compiler/__tests__/manifest.test.js +0 -156
  138. package/lib/compiler/__tests__/parser.test.js +33 -104
  139. package/lib/compiler/__tests__/schemas.test.js +30 -34
  140. package/lib/compiler/__tests__/skills-registry.test.js +114 -0
  141. package/lib/compiler/__tests__/transformer.test.js +5 -9
  142. package/lib/compiler/emitters/antigravity-emitter.js +5 -213
  143. package/lib/compiler/emitters/base-emitter.js +3 -298
  144. package/lib/compiler/emitters/codex-emitter.js +4 -202
  145. package/lib/compiler/emitters/cursor-emitter.js +3 -287
  146. package/lib/compiler/emitters/qwen-emitter.js +4 -176
  147. package/lib/compiler/index.js +65 -345
  148. package/lib/compiler/manifest.js +6 -68
  149. package/lib/compiler/parser.js +31 -63
  150. package/lib/compiler/platforms.js +32 -277
  151. package/lib/compiler/resource-copier.js +176 -6
  152. package/lib/compiler/rules-emitters/__tests__/antigravity-rules-emitter.test.js +3 -3
  153. package/lib/compiler/rules-emitters/__tests__/cursor-rules-emitter.test.js +14 -4
  154. package/lib/compiler/rules-emitters/__tests__/qwen-rules-emitter.test.js +16 -7
  155. package/lib/compiler/rules-emitters/antigravity-rules-emitter.js +10 -15
  156. package/lib/compiler/rules-emitters/base-rules-emitter.js +5 -5
  157. package/lib/compiler/rules-emitters/cursor-rules-emitter.js +7 -12
  158. package/lib/compiler/rules-emitters/index.js +6 -3
  159. package/lib/compiler/rules-emitters/qwen-rules-emitter.js +7 -7
  160. package/lib/compiler/schemas.js +8 -4
  161. package/lib/compiler/skills-registry.js +213 -15
  162. package/lib/compiler/transformer.js +1 -1
  163. package/lib/skill-runtime/CLAUDE.md +19 -0
  164. package/lib/skill-runtime/__tests__/autopilot.test.js +210 -0
  165. package/lib/skill-runtime/__tests__/cli-bootstrap.integration.test.js +291 -0
  166. package/lib/skill-runtime/__tests__/config.test.js +161 -0
  167. package/lib/skill-runtime/__tests__/delegation.test.js +97 -0
  168. package/lib/skill-runtime/__tests__/dispatch.test.js +267 -0
  169. package/lib/skill-runtime/__tests__/intent.test.js +219 -0
  170. package/lib/skill-runtime/__tests__/lifecycle.test.js +169 -0
  171. package/lib/skill-runtime/__tests__/paths.test.js +42 -0
  172. package/lib/skill-runtime/__tests__/planner.tdd.test.js +250 -0
  173. package/lib/skill-runtime/__tests__/prepare-pr.test.js +139 -0
  174. package/lib/skill-runtime/__tests__/query.test.js +284 -0
  175. package/lib/skill-runtime/__tests__/runtime.integration.test.js +281 -0
  176. package/lib/skill-runtime/__tests__/schemas.test.js +207 -0
  177. package/lib/skill-runtime/__tests__/team-state.test.js +51 -0
  178. package/lib/skill-runtime/__tests__/worker-run.test.js +253 -0
  179. package/lib/skill-runtime/__tests__/worker.test.js +56 -0
  180. package/lib/skill-runtime/artifacts.js +93 -0
  181. package/lib/skill-runtime/config.js +379 -0
  182. package/lib/skill-runtime/delegation.js +533 -0
  183. package/lib/skill-runtime/index.js +36 -0
  184. package/lib/skill-runtime/intent.js +333 -0
  185. package/lib/skill-runtime/lifecycle.js +294 -0
  186. package/lib/skill-runtime/operations/CLAUDE.md +19 -0
  187. package/lib/skill-runtime/operations/approve.js +66 -0
  188. package/lib/skill-runtime/operations/autopilot-core.js +337 -0
  189. package/lib/skill-runtime/operations/autopilot-execution.js +307 -0
  190. package/lib/skill-runtime/operations/autopilot-shared.js +48 -0
  191. package/lib/skill-runtime/operations/autopilot.js +163 -0
  192. package/lib/skill-runtime/operations/dispatch.js +454 -0
  193. package/lib/skill-runtime/operations/init.js +64 -0
  194. package/lib/{harness → skill-runtime}/operations/janitor.js +9 -6
  195. package/lib/skill-runtime/operations/plan.js +59 -0
  196. package/lib/skill-runtime/operations/prepare-pr.js +25 -0
  197. package/lib/skill-runtime/operations/release.js +96 -0
  198. package/lib/skill-runtime/operations/resume.js +143 -0
  199. package/lib/skill-runtime/operations/snapshot.js +45 -0
  200. package/lib/skill-runtime/operations/verify.js +170 -0
  201. package/lib/skill-runtime/operations/worker-run.js +529 -0
  202. package/lib/skill-runtime/operations/worker.js +33 -0
  203. package/lib/skill-runtime/paths.js +213 -0
  204. package/lib/skill-runtime/planner.js +519 -0
  205. package/lib/skill-runtime/query.js +157 -0
  206. package/lib/skill-runtime/review.js +557 -0
  207. package/lib/skill-runtime/schemas.js +400 -0
  208. package/lib/{harness → skill-runtime}/store.js +45 -30
  209. package/lib/skill-runtime/team-state.js +122 -0
  210. package/package.json +13 -11
  211. package/.claude/CLAUDE.md +0 -125
  212. package/.claude/agents/architecture-designer.md +0 -443
  213. package/.claude/agents/bug-analyzer.md +0 -381
  214. package/.claude/agents/checklist-agent.md +0 -175
  215. package/.claude/agents/clarify-analyst.md +0 -50
  216. package/.claude/agents/code-quality-reviewer.md +0 -205
  217. package/.claude/agents/code-reviewer.md +0 -71
  218. package/.claude/agents/codex-analyzer.md +0 -39
  219. package/.claude/agents/compatibility-checker.md +0 -579
  220. package/.claude/agents/consistency-checker.md +0 -532
  221. package/.claude/agents/dev-implementer.md +0 -195
  222. package/.claude/agents/flow-researcher.md +0 -132
  223. package/.claude/agents/impact-analyzer.md +0 -440
  224. package/.claude/agents/planner.md +0 -230
  225. package/.claude/agents/prd-writer.md +0 -320
  226. package/.claude/agents/project-guidelines-generator.md +0 -1329
  227. package/.claude/agents/qa-tester.md +0 -313
  228. package/.claude/agents/release-manager.md +0 -295
  229. package/.claude/agents/security-reviewer.md +0 -314
  230. package/.claude/agents/spec-reviewer.md +0 -221
  231. package/.claude/agents/style-guide-generator.md +0 -458
  232. package/.claude/agents/tech-architect.md +0 -516
  233. package/.claude/agents/ui-designer.md +0 -485
  234. package/.claude/commands/core/architecture.md +0 -459
  235. package/.claude/commands/core/guidelines.md +0 -511
  236. package/.claude/commands/core/roadmap.md +0 -468
  237. package/.claude/commands/core/style.md +0 -83
  238. package/.claude/commands/flow/CLAUDE.md +0 -24
  239. package/.claude/commands/flow/archive.md +0 -280
  240. package/.claude/commands/flow/constitution.md +0 -82
  241. package/.claude/commands/flow/context.md +0 -150
  242. package/.claude/commands/flow/delta.md +0 -245
  243. package/.claude/commands/flow/dev.md +0 -40
  244. package/.claude/commands/flow/fix.md +0 -217
  245. package/.claude/commands/flow/ideate.md +0 -214
  246. package/.claude/commands/flow/init.md +0 -38
  247. package/.claude/commands/flow/release.md +0 -36
  248. package/.claude/commands/flow/restart.md +0 -97
  249. package/.claude/commands/flow/spec.md +0 -36
  250. package/.claude/commands/flow/status.md +0 -64
  251. package/.claude/commands/flow/update.md +0 -111
  252. package/.claude/commands/flow/upgrade.md +0 -115
  253. package/.claude/commands/flow/verify.md +0 -37
  254. package/.claude/commands/flow/workspace.md +0 -155
  255. package/.claude/commands/util/cancel-ralph.md +0 -60
  256. package/.claude/commands/util/code-review.md +0 -58
  257. package/.claude/commands/util/git-commit.md +0 -422
  258. package/.claude/commands/util/problem-analyzer.md +0 -60
  259. package/.claude/config/quality-gates.yml +0 -305
  260. package/.claude/config/quality-rules.yml +0 -161
  261. package/.claude/docs/SPEC_KIT_CONSTITUTION_ANALYSIS.md +0 -426
  262. package/.claude/docs/design/consistency-conflict-detection-algorithms.md +0 -658
  263. package/.claude/docs/design/intent-driven-input-design.md +0 -380
  264. package/.claude/docs/design/prd-version-management-design.md +0 -437
  265. package/.claude/docs/examples/design-inspiration-pool.md +0 -59
  266. package/.claude/docs/examples/ui-prototype-constitution-checklist.md +0 -75
  267. package/.claude/docs/guides/INIT_TROUBLESHOOTING.md +0 -117
  268. package/.claude/docs/guides/NEW_TROUBLESHOOTING.md +0 -99
  269. package/.claude/docs/guides/ROADMAP_TROUBLESHOOTING.md +0 -188
  270. package/.claude/docs/guides/TASK_COMPLETION_MARKING.md +0 -338
  271. package/.claude/docs/guides/TEAM_MODE_GUIDE.md +0 -312
  272. package/.claude/docs/implementation-summary-v7.md +0 -449
  273. package/.claude/docs/spec-format-guide.md +0 -349
  274. package/.claude/docs/state-consolidation-design.md +0 -323
  275. package/.claude/docs/templates/ARCHITECTURE_TEMPLATE.md +0 -332
  276. package/.claude/docs/templates/ATTEMPT_TEMPLATE.md +0 -156
  277. package/.claude/docs/templates/BACKLOG_TEMPLATE.md +0 -261
  278. package/.claude/docs/templates/BRAINSTORM_TEMPLATE.md +0 -148
  279. package/.claude/docs/templates/CHECKLIST_TEMPLATE.md +0 -52
  280. package/.claude/docs/templates/CLARIFICATION_REPORT_TEMPLATE.md +0 -206
  281. package/.claude/docs/templates/CODE_REVIEW_TEMPLATE.md +0 -71
  282. package/.claude/docs/templates/DELTA_SPEC_TEMPLATE.md +0 -91
  283. package/.claude/docs/templates/DESIGN_DECISIONS_TEMPLATE.md +0 -151
  284. package/.claude/docs/templates/DESIGN_TEMPLATE.md +0 -157
  285. package/.claude/docs/templates/ERROR_LOG_TEMPLATE.md +0 -80
  286. package/.claude/docs/templates/INIT_FLOW_TEMPLATE.md +0 -198
  287. package/.claude/docs/templates/INTENT_CLARIFICATION_TEMPLATE.md +0 -57
  288. package/.claude/docs/templates/JOURNAL_TEMPLATE.md +0 -75
  289. package/.claude/docs/templates/NEW_ORCHESTRATION_TEMPLATE.md +0 -76
  290. package/.claude/docs/templates/PROPOSAL_TEMPLATE.md +0 -91
  291. package/.claude/docs/templates/RESEARCH_TEMPLATE.md +0 -276
  292. package/.claude/docs/templates/REVIEW-HIGH.md +0 -57
  293. package/.claude/docs/templates/ROADMAP_DIALOGUE_TEMPLATE.md +0 -198
  294. package/.claude/docs/templates/ROADMAP_TEMPLATE.md +0 -310
  295. package/.claude/docs/templates/SPEC_TEMPLATE_DELTA.md +0 -139
  296. package/.claude/docs/templates/SPEC_TEMPLATE_PROJECT.md +0 -93
  297. package/.claude/docs/templates/STYLE_TEMPLATE.md +0 -479
  298. package/.claude/docs/templates/UI_PROTOTYPE_TEMPLATE.md +0 -373
  299. package/.claude/docs/templates/_shared/CLAUDE.md +0 -36
  300. package/.claude/docs/templates/_shared/CONSTITUTION_CHECK.md +0 -125
  301. package/.claude/docs/templates/_shared/VALIDATION_CHECKLIST.md +0 -187
  302. package/.claude/docs/templates/_shared/YAML_FRONTMATTER.md +0 -164
  303. package/.claude/docs/templates/context/dev.jsonl.template +0 -6
  304. package/.claude/docs/templates/context/epic.jsonl.template +0 -5
  305. package/.claude/docs/templates/context/prd.jsonl.template +0 -4
  306. package/.claude/docs/templates/context/research.jsonl.template +0 -4
  307. package/.claude/docs/templates/context/review.jsonl.template +0 -5
  308. package/.claude/docs/templates/context/tech.jsonl.template +0 -5
  309. package/.claude/guides/agent-guides/agent-coordination-guide.md +0 -459
  310. package/.claude/guides/project-guidelines-system.md +0 -463
  311. package/.claude/guides/technical-guides/datetime-handling-guide.md +0 -563
  312. package/.claude/guides/technical-guides/git-github-guide.md +0 -642
  313. package/.claude/guides/technical-guides/test-execution-guide.md +0 -618
  314. package/.claude/guides/workflow-guides/bug-fix-orchestrator.md +0 -217
  315. package/.claude/guides/workflow-guides/flow-orchestrator.md +0 -48
  316. package/.claude/hooks/CLAUDE.md +0 -342
  317. package/.claude/hooks/checklist-gate.js +0 -397
  318. package/.claude/hooks/error-handling-reminder.sh +0 -12
  319. package/.claude/hooks/error-handling-reminder.ts +0 -459
  320. package/.claude/hooks/hooks.json +0 -15
  321. package/.claude/hooks/inject-agent-context.ts +0 -480
  322. package/.claude/hooks/inject-skill-context.ts +0 -359
  323. package/.claude/hooks/post-tool-use-tracker.sh +0 -280
  324. package/.claude/hooks/pre-tool-use-guardrail.sh +0 -36
  325. package/.claude/hooks/pre-tool-use-guardrail.ts +0 -342
  326. package/.claude/hooks/ralph-loop.ts +0 -931
  327. package/.claude/hooks/ralph-stop-hook.sh +0 -190
  328. package/.claude/hooks/skill-activation-prompt.sh +0 -36
  329. package/.claude/hooks/skill-activation-prompt.ts +0 -214
  330. package/.claude/hooks/state/skills-used-test-guard.json +0 -3
  331. package/.claude/hooks/task-completed-hook.ts +0 -593
  332. package/.claude/hooks/teammate-idle-hook.ts +0 -690
  333. package/.claude/hooks/types/team-types.d.ts +0 -238
  334. package/.claude/rules/devflow-conventions.md +0 -286
  335. package/.claude/rules/project-constitution.md +0 -1002
  336. package/.claude/rules/rationalization-library.md +0 -282
  337. package/.claude/schemas/constitution.schema.json +0 -43
  338. package/.claude/scripts/.claude/commands/flow/export-openspec.md +0 -221
  339. package/.claude/scripts/.claude/commands/flow/import-openspec.md +0 -171
  340. package/.claude/scripts/CLAUDE.md +0 -76
  341. package/.claude/scripts/__tests__/openspec.test.js +0 -212
  342. package/.claude/scripts/analyze-upgrade-impact.sh +0 -200
  343. package/.claude/scripts/archive-requirement.sh +0 -394
  344. package/.claude/scripts/calculate-checklist-completion.sh +0 -243
  345. package/.claude/scripts/calculate-quarter.sh +0 -206
  346. package/.claude/scripts/check-dependencies.sh +0 -409
  347. package/.claude/scripts/check-prerequisites.sh +0 -232
  348. package/.claude/scripts/check-task-status.sh +0 -288
  349. package/.claude/scripts/checklist-errors.sh +0 -131
  350. package/.claude/scripts/common.sh +0 -1102
  351. package/.claude/scripts/consolidate-research.sh +0 -182
  352. package/.claude/scripts/create-requirement.sh +0 -451
  353. package/.claude/scripts/delta-parser.ts +0 -637
  354. package/.claude/scripts/detect-file-conflicts.sh +0 -151
  355. package/.claude/scripts/export-contracts.sh +0 -117
  356. package/.claude/scripts/export-openspec.js +0 -222
  357. package/.claude/scripts/extract-data-model.sh +0 -78
  358. package/.claude/scripts/flow-context-add.sh +0 -134
  359. package/.claude/scripts/flow-context-init.sh +0 -133
  360. package/.claude/scripts/flow-context-validate.sh +0 -144
  361. package/.claude/scripts/flow-delta-apply.sh +0 -297
  362. package/.claude/scripts/flow-delta-archive.sh +0 -71
  363. package/.claude/scripts/flow-delta-create.sh +0 -202
  364. package/.claude/scripts/flow-delta-list.sh +0 -142
  365. package/.claude/scripts/flow-delta-status.sh +0 -235
  366. package/.claude/scripts/flow-quality-full.sh +0 -215
  367. package/.claude/scripts/flow-quality-quick.sh +0 -119
  368. package/.claude/scripts/flow-workspace-init.sh +0 -117
  369. package/.claude/scripts/flow-workspace-record.sh +0 -164
  370. package/.claude/scripts/generate-clarification-questions.sh +0 -377
  371. package/.claude/scripts/generate-clarification-report.sh +0 -463
  372. package/.claude/scripts/generate-quickstart.sh +0 -146
  373. package/.claude/scripts/generate-research-tasks.sh +0 -157
  374. package/.claude/scripts/generate-status-report.sh +0 -523
  375. package/.claude/scripts/generate-tech-analysis.sh +0 -46
  376. package/.claude/scripts/get-workflow-status.sh +0 -415
  377. package/.claude/scripts/import-openspec.js +0 -272
  378. package/.claude/scripts/locate-requirement-in-roadmap.sh +0 -233
  379. package/.claude/scripts/manage-constitution.sh +0 -602
  380. package/.claude/scripts/mark-task-complete.sh +0 -198
  381. package/.claude/scripts/parse-task-dependencies.js +0 -334
  382. package/.claude/scripts/populate-research-tasks.sh +0 -284
  383. package/.claude/scripts/record-quality-error.sh +0 -165
  384. package/.claude/scripts/recover-workflow.sh +0 -463
  385. package/.claude/scripts/run-clarify-scan.sh +0 -601
  386. package/.claude/scripts/run-high-review.sh +0 -62
  387. package/.claude/scripts/run-problem-analysis.sh +0 -68
  388. package/.claude/scripts/run-quality-gates.sh +0 -242
  389. package/.claude/scripts/setup-epic.sh +0 -173
  390. package/.claude/scripts/setup-ralph-loop.sh +0 -155
  391. package/.claude/scripts/sync-roadmap-progress.sh +0 -300
  392. package/.claude/scripts/sync-task-marks.sh +0 -199
  393. package/.claude/scripts/team-dev-init.sh +0 -319
  394. package/.claude/scripts/team-state-recovery.sh +0 -229
  395. package/.claude/scripts/test-clarify-scan.sh +0 -515
  396. package/.claude/scripts/update-agent-context.sh +0 -806
  397. package/.claude/scripts/validate-constitution.sh +0 -567
  398. package/.claude/scripts/validate-hooks.sh +0 -487
  399. package/.claude/scripts/validate-research.sh +0 -332
  400. package/.claude/scripts/validate-scope-boundary.sh +0 -493
  401. package/.claude/scripts/validate-scope.sh +0 -200
  402. package/.claude/scripts/verify-gate.sh +0 -269
  403. package/.claude/scripts/verify-setup.sh +0 -37
  404. package/.claude/scripts/workflow-status.ts +0 -433
  405. package/.claude/settings.json +0 -95
  406. package/.claude/skills/_reference-implementations/README.md +0 -96
  407. package/.claude/skills/_reference-implementations/backend-express-prisma/SKILL.md +0 -302
  408. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/architecture-overview.md +0 -451
  409. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/async-and-errors.md +0 -307
  410. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/complete-examples.md +0 -638
  411. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/configuration.md +0 -275
  412. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/database-patterns.md +0 -224
  413. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/middleware-guide.md +0 -213
  414. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/routing-and-controllers.md +0 -756
  415. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/sentry-and-monitoring.md +0 -336
  416. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/services-and-repositories.md +0 -789
  417. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/testing-guide.md +0 -235
  418. package/.claude/skills/_reference-implementations/backend-express-prisma/resources/validation-patterns.md +0 -754
  419. package/.claude/skills/_reference-implementations/frontend-react-mui/SKILL.md +0 -399
  420. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/common-patterns.md +0 -331
  421. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/complete-examples.md +0 -872
  422. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/component-patterns.md +0 -502
  423. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/data-fetching.md +0 -767
  424. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/file-organization.md +0 -502
  425. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/loading-and-error-states.md +0 -501
  426. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/performance.md +0 -406
  427. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/routing-guide.md +0 -364
  428. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/styling-guide.md +0 -428
  429. package/.claude/skills/_reference-implementations/frontend-react-mui/resources/typescript-standards.md +0 -418
  430. package/.claude/skills/attention-refresh/SKILL.md +0 -170
  431. package/.claude/skills/brainstorming/SKILL.md +0 -161
  432. package/.claude/skills/cc-devflow-orchestrator/SKILL.md +0 -169
  433. package/.claude/skills/constitution-guardian/SKILL.md +0 -306
  434. package/.claude/skills/constitution-quick-ref/SKILL.md +0 -374
  435. package/.claude/skills/debugging/SKILL.md +0 -221
  436. package/.claude/skills/file-standards/SKILL.md +0 -353
  437. package/.claude/skills/finishing-branch/SKILL.md +0 -189
  438. package/.claude/skills/flow-dev/CLAUDE.md +0 -16
  439. package/.claude/skills/flow-dev/SKILL.md +0 -94
  440. package/.claude/skills/flow-dev/assets/IMPLEMENTATION_PLAN_TEMPLATE.md +0 -71
  441. package/.claude/skills/flow-dev/context.jsonl +0 -4
  442. package/.claude/skills/flow-dev/dev-implementer.jsonl +0 -8
  443. package/.claude/skills/flow-dev/scripts/entry-gate.sh +0 -116
  444. package/.claude/skills/flow-dev/scripts/exit-gate.sh +0 -101
  445. package/.claude/skills/flow-dev/scripts/task-orchestrator.sh +0 -106
  446. package/.claude/skills/flow-fix/SKILL.md +0 -105
  447. package/.claude/skills/flow-fix/context.jsonl +0 -6
  448. package/.claude/skills/flow-fix/references/bug-analyzer.md +0 -381
  449. package/.claude/skills/flow-init/SKILL.md +0 -105
  450. package/.claude/skills/flow-init/assets/BRAINSTORM_TEMPLATE.md +0 -148
  451. package/.claude/skills/flow-init/assets/INIT_FLOW_TEMPLATE.md +0 -198
  452. package/.claude/skills/flow-init/assets/RESEARCH_TEMPLATE.md +0 -276
  453. package/.claude/skills/flow-init/context.jsonl +0 -5
  454. package/.claude/skills/flow-init/references/flow-researcher.md +0 -132
  455. package/.claude/skills/flow-init/scripts/check-prerequisites.sh +0 -240
  456. package/.claude/skills/flow-init/scripts/consolidate-research.sh +0 -182
  457. package/.claude/skills/flow-init/scripts/create-requirement.sh +0 -404
  458. package/.claude/skills/flow-init/scripts/generate-research-tasks.sh +0 -157
  459. package/.claude/skills/flow-init/scripts/populate-research-tasks.sh +0 -284
  460. package/.claude/skills/flow-init/scripts/validate-research.sh +0 -340
  461. package/.claude/skills/flow-quality/SKILL.md +0 -98
  462. package/.claude/skills/flow-quality/context.jsonl +0 -6
  463. package/.claude/skills/flow-quality/references/code-quality-reviewer.md +0 -205
  464. package/.claude/skills/flow-quality/references/qa-tester.md +0 -313
  465. package/.claude/skills/flow-quality/references/security-reviewer.md +0 -314
  466. package/.claude/skills/flow-quality/references/spec-reviewer.md +0 -221
  467. package/.claude/skills/flow-release/SKILL.md +0 -60
  468. package/.claude/skills/flow-release/context.jsonl +0 -5
  469. package/.claude/skills/flow-release/references/release-manager.md +0 -295
  470. package/.claude/skills/flow-spec/CLAUDE.md +0 -17
  471. package/.claude/skills/flow-spec/SKILL.md +0 -102
  472. package/.claude/skills/flow-spec/context.jsonl +0 -5
  473. package/.claude/skills/flow-spec/scripts/entry-gate.sh +0 -194
  474. package/.claude/skills/flow-spec/scripts/exit-gate.sh +0 -244
  475. package/.claude/skills/flow-spec/scripts/parallel-orchestrator.sh +0 -205
  476. package/.claude/skills/flow-spec/scripts/team-communication.sh +0 -353
  477. package/.claude/skills/flow-spec/scripts/team-init.sh +0 -195
  478. package/.claude/skills/flow-spec/scripts/test-team-mode.sh +0 -496
  479. package/.claude/skills/flow-spec/team-config.json +0 -165
  480. package/.claude/skills/flow-verify/CLAUDE.md +0 -10
  481. package/.claude/skills/flow-verify/SKILL.md +0 -53
  482. package/.claude/skills/flow-verify/context.jsonl +0 -5
  483. package/.claude/skills/fractal-docs/SKILL.md +0 -45
  484. package/.claude/skills/journey-checker/SKILL.md +0 -199
  485. package/.claude/skills/journey-checker/pressure-scenarios.md +0 -164
  486. package/.claude/skills/receiving-review/SKILL.md +0 -153
  487. package/.claude/skills/skill-creator/LICENSE.txt +0 -202
  488. package/.claude/skills/skill-creator/SKILL.md +0 -356
  489. package/.claude/skills/skill-creator/references/output-patterns.md +0 -82
  490. package/.claude/skills/skill-creator/references/workflows.md +0 -28
  491. package/.claude/skills/skill-creator/scripts/init_skill.py +0 -303
  492. package/.claude/skills/skill-creator/scripts/package_skill.py +0 -110
  493. package/.claude/skills/skill-creator/scripts/quick_validate.py +0 -95
  494. package/.claude/skills/skill-rules.json +0 -359
  495. package/.claude/skills/tdd/SKILL.md +0 -218
  496. package/.claude/skills/tdd-enforcer/SKILL.md +0 -192
  497. package/.claude/skills/utility/npm-release/CLAUDE.md +0 -55
  498. package/.claude/skills/utility/npm-release/SKILL.md +0 -379
  499. package/.claude/skills/utility/npm-release/references/version-decision-guide.md +0 -134
  500. package/.claude/skills/utility/npm-release/scripts/atomic-version-bump.sh +0 -95
  501. package/.claude/skills/utility/npm-release/scripts/validate-version-sync.sh +0 -82
  502. package/.claude/skills/utility/npm-release/scripts/version-decision-tree.sh +0 -44
  503. package/.claude/skills/verification/SKILL.md +0 -158
  504. package/.claude/skills/workflow.yaml +0 -219
  505. package/.claude/tests/README.md +0 -300
  506. package/.claude/tests/TODO.md +0 -69
  507. package/.claude/tests/__pycache__/test_analyze_upgrade_impact.cpython-311-pytest-7.2.2.pyc +0 -0
  508. package/.claude/tests/__pycache__/test_consolidate_research.cpython-311-pytest-7.2.2.pyc +0 -0
  509. package/.claude/tests/__pycache__/test_export_contracts.cpython-311-pytest-7.2.2.pyc +0 -0
  510. package/.claude/tests/__pycache__/test_extract_data_model.cpython-311-pytest-7.2.2.pyc +0 -0
  511. package/.claude/tests/__pycache__/test_generate_quickstart.cpython-311-pytest-7.2.2.pyc +0 -0
  512. package/.claude/tests/__pycache__/test_generate_research_tasks.cpython-311-pytest-7.2.2.pyc +0 -0
  513. package/.claude/tests/constitution/run_all_constitution_tests.sh +0 -111
  514. package/.claude/tests/constitution/test_agent_assignment.sh +0 -207
  515. package/.claude/tests/constitution/test_article_coverage.sh +0 -201
  516. package/.claude/tests/constitution/test_template_completeness.sh +0 -150
  517. package/.claude/tests/constitution/test_version_consistency.sh +0 -120
  518. package/.claude/tests/fixtures/spec_delta_full.md +0 -16
  519. package/.claude/tests/fixtures/tasks_progress_sample.md +0 -5
  520. package/.claude/tests/run-all-tests.sh +0 -229
  521. package/.claude/tests/scripts/run.sh +0 -30
  522. package/.claude/tests/scripts/test-framework.sh +0 -128
  523. package/.claude/tests/scripts/test_check_prerequisites.sh +0 -511
  524. package/.claude/tests/scripts/test_check_prerequisites.sh.bak +0 -504
  525. package/.claude/tests/scripts/test_check_prerequisites.sh.bak2 +0 -505
  526. package/.claude/tests/scripts/test_check_prerequisites.sh.bak3 +0 -506
  527. package/.claude/tests/scripts/test_check_prerequisites.sh.bak4 +0 -507
  528. package/.claude/tests/scripts/test_check_prerequisites.sh.bak5 +0 -508
  529. package/.claude/tests/scripts/test_check_task_status.sh +0 -499
  530. package/.claude/tests/scripts/test_common.sh +0 -244
  531. package/.claude/tests/scripts/test_generate_status_report.sh +0 -71
  532. package/.claude/tests/scripts/test_mark_task_complete.sh +0 -441
  533. package/.claude/tests/scripts/test_mark_task_complete.sh.backup +0 -410
  534. package/.claude/tests/scripts/test_recover_workflow.sh +0 -304
  535. package/.claude/tests/scripts/test_setup_epic.sh +0 -437
  536. package/.claude/tests/scripts/test_sync_task_marks.sh +0 -196
  537. package/.claude/tests/scripts/test_validate_constitution.sh +0 -74
  538. package/.claude/tests/scripts/test_validate_research.sh +0 -462
  539. package/.claude/tests/slugify.bats +0 -82
  540. package/.claude/tests/test-framework.sh +0 -732
  541. package/.claude/tests/test_analyze_upgrade_impact.py +0 -34
  542. package/.claude/tests/test_consolidate_research.py +0 -48
  543. package/.claude/tests/test_export_contracts.py +0 -43
  544. package/.claude/tests/test_extract_data_model.py +0 -33
  545. package/.claude/tests/test_generate_quickstart.py +0 -50
  546. package/.claude/tests/test_generate_research_tasks.py +0 -52
  547. package/.claude/tsc-cache/70d2fc6d-2936-429b-b529-429f1aae8c88/affected-repos.txt +0 -1
  548. package/.claude/tsc-cache/70d2fc6d-2936-429b-b529-429f1aae8c88/edited-files.log +0 -2
  549. package/bin/harness.js +0 -22
  550. package/docs/commands/core-roadmap.md +0 -106
  551. package/docs/commands/core-roadmap.zh-CN.md +0 -102
  552. package/docs/commands/core-style.md +0 -53
  553. package/docs/commands/core-style.zh-CN.md +0 -53
  554. package/docs/commands/flow-init.md +0 -140
  555. package/docs/commands/flow-init.zh-CN.md +0 -169
  556. package/docs/commands/flow-new.md +0 -39
  557. package/docs/commands/flow-new.zh-CN.md +0 -39
  558. package/lib/compiler/__tests__/compile-regression.test.js +0 -103
  559. package/lib/compiler/__tests__/multi-module-emitters.test.js +0 -534
  560. package/lib/compiler/__tests__/resource-copier.test.js +0 -26
  561. package/lib/compiler/__tests__/skill-discovery.test.js +0 -72
  562. package/lib/compiler/context-expander.js +0 -179
  563. package/lib/compiler/rules-emitters/__tests__/codex-rules-emitter.test.js +0 -109
  564. package/lib/compiler/rules-emitters/codex-rules-emitter.js +0 -116
  565. package/lib/compiler/skill-discovery.js +0 -68
  566. package/lib/harness/CLAUDE.md +0 -22
  567. package/lib/harness/__tests__/planner.tdd.test.js +0 -125
  568. package/lib/harness/cli.js +0 -208
  569. package/lib/harness/index.js +0 -18
  570. package/lib/harness/operations/dispatch.js +0 -298
  571. package/lib/harness/operations/init.js +0 -48
  572. package/lib/harness/operations/pack.js +0 -100
  573. package/lib/harness/operations/plan.js +0 -83
  574. package/lib/harness/operations/release.js +0 -170
  575. package/lib/harness/operations/resume.js +0 -44
  576. package/lib/harness/operations/verify.js +0 -177
  577. package/lib/harness/planner.js +0 -272
  578. package/lib/harness/query.js +0 -126
  579. package/lib/harness/schemas.js +0 -129
@@ -1,754 +0,0 @@
1
- # Validation Patterns - Input Validation with Zod
2
-
3
- Complete guide to input validation using Zod schemas for type-safe validation.
4
-
5
- ## Table of Contents
6
-
7
- - [Why Zod?](#why-zod)
8
- - [Basic Zod Patterns](#basic-zod-patterns)
9
- - [Schema Examples from Codebase](#schema-examples-from-codebase)
10
- - [Route-Level Validation](#route-level-validation)
11
- - [Controller Validation](#controller-validation)
12
- - [DTO Pattern](#dto-pattern)
13
- - [Error Handling](#error-handling)
14
- - [Advanced Patterns](#advanced-patterns)
15
-
16
- ---
17
-
18
- ## Why Zod?
19
-
20
- ### Benefits Over Joi/Other Libraries
21
-
22
- **Type Safety:**
23
- - ✅ Full TypeScript inference
24
- - ✅ Runtime + compile-time validation
25
- - ✅ Automatic type generation
26
-
27
- **Developer Experience:**
28
- - ✅ Intuitive API
29
- - ✅ Composable schemas
30
- - ✅ Excellent error messages
31
-
32
- **Performance:**
33
- - ✅ Fast validation
34
- - ✅ Small bundle size
35
- - ✅ Tree-shakeable
36
-
37
- ### Migration from Joi
38
-
39
- Modern validation uses Zod instead of Joi:
40
-
41
- ```typescript
42
- // ❌ OLD - Joi (being phased out)
43
- const schema = Joi.object({
44
- email: Joi.string().email().required(),
45
- name: Joi.string().min(3).required(),
46
- });
47
-
48
- // ✅ NEW - Zod (preferred)
49
- const schema = z.object({
50
- email: z.string().email(),
51
- name: z.string().min(3),
52
- });
53
- ```
54
-
55
- ---
56
-
57
- ## Basic Zod Patterns
58
-
59
- ### Primitive Types
60
-
61
- ```typescript
62
- import { z } from 'zod';
63
-
64
- // Strings
65
- const nameSchema = z.string();
66
- const emailSchema = z.string().email();
67
- const urlSchema = z.string().url();
68
- const uuidSchema = z.string().uuid();
69
- const minLengthSchema = z.string().min(3);
70
- const maxLengthSchema = z.string().max(100);
71
-
72
- // Numbers
73
- const ageSchema = z.number().int().positive();
74
- const priceSchema = z.number().positive();
75
- const rangeSchema = z.number().min(0).max(100);
76
-
77
- // Booleans
78
- const activeSchema = z.boolean();
79
-
80
- // Dates
81
- const dateSchema = z.string().datetime(); // ISO 8601 string
82
- const nativeDateSchema = z.date(); // Native Date object
83
-
84
- // Enums
85
- const roleSchema = z.enum(['admin', 'operations', 'user']);
86
- const statusSchema = z.enum(['PENDING', 'APPROVED', 'REJECTED']);
87
- ```
88
-
89
- ### Objects
90
-
91
- ```typescript
92
- // Simple object
93
- const userSchema = z.object({
94
- email: z.string().email(),
95
- name: z.string(),
96
- age: z.number().int().positive(),
97
- });
98
-
99
- // Nested objects
100
- const addressSchema = z.object({
101
- street: z.string(),
102
- city: z.string(),
103
- zipCode: z.string().regex(/^\d{5}$/),
104
- });
105
-
106
- const userWithAddressSchema = z.object({
107
- name: z.string(),
108
- address: addressSchema,
109
- });
110
-
111
- // Optional fields
112
- const userSchema = z.object({
113
- name: z.string(),
114
- email: z.string().email().optional(),
115
- phone: z.string().optional(),
116
- });
117
-
118
- // Nullable fields
119
- const userSchema = z.object({
120
- name: z.string(),
121
- middleName: z.string().nullable(),
122
- });
123
- ```
124
-
125
- ### Arrays
126
-
127
- ```typescript
128
- // Array of primitives
129
- const rolesSchema = z.array(z.string());
130
- const numbersSchema = z.array(z.number());
131
-
132
- // Array of objects
133
- const usersSchema = z.array(
134
- z.object({
135
- id: z.string(),
136
- name: z.string(),
137
- })
138
- );
139
-
140
- // Array with constraints
141
- const tagsSchema = z.array(z.string()).min(1).max(10);
142
- const nonEmptyArray = z.array(z.string()).nonempty();
143
- ```
144
-
145
- ---
146
-
147
- ## Schema Examples from Codebase
148
-
149
- ### Form Validation Schemas
150
-
151
- **File:** `/form/src/helpers/zodSchemas.ts`
152
-
153
- ```typescript
154
- import { z } from 'zod';
155
-
156
- // Question types enum
157
- export const questionTypeSchema = z.enum([
158
- 'input',
159
- 'textbox',
160
- 'editor',
161
- 'dropdown',
162
- 'autocomplete',
163
- 'checkbox',
164
- 'radio',
165
- 'upload',
166
- ]);
167
-
168
- // Upload types
169
- export const uploadTypeSchema = z.array(
170
- z.enum(['pdf', 'image', 'excel', 'video', 'powerpoint', 'word']).nullable()
171
- );
172
-
173
- // Input types
174
- export const inputTypeSchema = z
175
- .enum(['date', 'number', 'input', 'currency'])
176
- .nullable();
177
-
178
- // Question option
179
- export const questionOptionSchema = z.object({
180
- id: z.number().int().positive().optional(),
181
- controlTag: z.string().max(150).nullable().optional(),
182
- label: z.string().max(100).nullable().optional(),
183
- order: z.number().int().min(0).default(0),
184
- });
185
-
186
- // Question schema
187
- export const questionSchema = z.object({
188
- id: z.number().int().positive().optional(),
189
- formID: z.number().int().positive(),
190
- sectionID: z.number().int().positive().optional(),
191
- options: z.array(questionOptionSchema).optional(),
192
- label: z.string().max(500),
193
- description: z.string().max(5000).optional(),
194
- type: questionTypeSchema,
195
- uploadTypes: uploadTypeSchema.optional(),
196
- inputType: inputTypeSchema.optional(),
197
- tags: z.array(z.string().max(150)).optional(),
198
- required: z.boolean(),
199
- isStandard: z.boolean().optional(),
200
- deprecatedKey: z.string().nullable().optional(),
201
- maxLength: z.number().int().positive().nullable().optional(),
202
- isOptionsSorted: z.boolean().optional(),
203
- });
204
-
205
- // Form section schema
206
- export const formSectionSchema = z.object({
207
- id: z.number().int().positive(),
208
- formID: z.number().int().positive(),
209
- questions: z.array(questionSchema).optional(),
210
- label: z.string().max(500),
211
- description: z.string().max(5000).optional(),
212
- isStandard: z.boolean(),
213
- });
214
-
215
- // Create form schema
216
- export const createFormSchema = z.object({
217
- id: z.number().int().positive(),
218
- label: z.string().max(150),
219
- description: z.string().max(6000).nullable().optional(),
220
- isPhase: z.boolean().optional(),
221
- username: z.string(),
222
- });
223
-
224
- // Update order schema
225
- export const updateOrderSchema = z.object({
226
- source: z.object({
227
- index: z.number().int().min(0),
228
- sectionID: z.number().int().min(0),
229
- }),
230
- destination: z.object({
231
- index: z.number().int().min(0),
232
- sectionID: z.number().int().min(0),
233
- }),
234
- });
235
-
236
- // Controller-specific validation schemas
237
- export const createQuestionValidationSchema = z.object({
238
- formID: z.number().int().positive(),
239
- sectionID: z.number().int().positive(),
240
- question: questionSchema,
241
- index: z.number().int().min(0).nullable().optional(),
242
- username: z.string(),
243
- });
244
-
245
- export const updateQuestionValidationSchema = z.object({
246
- questionID: z.number().int().positive(),
247
- username: z.string(),
248
- question: questionSchema,
249
- });
250
- ```
251
-
252
- ### Proxy Relationship Schema
253
-
254
- ```typescript
255
- // Proxy relationship validation
256
- const createProxySchema = z.object({
257
- originalUserID: z.string().min(1),
258
- proxyUserID: z.string().min(1),
259
- startsAt: z.string().datetime(),
260
- expiresAt: z.string().datetime(),
261
- });
262
-
263
- // With custom validation
264
- const createProxySchemaWithValidation = createProxySchema.refine(
265
- (data) => new Date(data.expiresAt) > new Date(data.startsAt),
266
- {
267
- message: 'expiresAt must be after startsAt',
268
- path: ['expiresAt'],
269
- }
270
- );
271
- ```
272
-
273
- ### Workflow Validation
274
-
275
- ```typescript
276
- // Workflow start schema
277
- const startWorkflowSchema = z.object({
278
- workflowCode: z.string().min(1),
279
- entityType: z.enum(['Post', 'User', 'Comment']),
280
- entityID: z.number().int().positive(),
281
- dryRun: z.boolean().optional().default(false),
282
- });
283
-
284
- // Workflow step completion schema
285
- const completeStepSchema = z.object({
286
- stepInstanceID: z.number().int().positive(),
287
- answers: z.record(z.string(), z.any()),
288
- dryRun: z.boolean().optional().default(false),
289
- });
290
- ```
291
-
292
- ---
293
-
294
- ## Route-Level Validation
295
-
296
- ### Pattern 1: Inline Validation
297
-
298
- ```typescript
299
- // routes/proxyRoutes.ts
300
- import { z } from 'zod';
301
-
302
- const createProxySchema = z.object({
303
- originalUserID: z.string().min(1),
304
- proxyUserID: z.string().min(1),
305
- startsAt: z.string().datetime(),
306
- expiresAt: z.string().datetime(),
307
- });
308
-
309
- router.post(
310
- '/',
311
- SSOMiddlewareClient.verifyLoginStatus,
312
- async (req, res) => {
313
- try {
314
- // Validate at route level
315
- const validated = createProxySchema.parse(req.body);
316
-
317
- // Delegate to service
318
- const proxy = await proxyService.createProxyRelationship(validated);
319
-
320
- res.status(201).json({ success: true, data: proxy });
321
- } catch (error) {
322
- if (error instanceof z.ZodError) {
323
- return res.status(400).json({
324
- success: false,
325
- error: {
326
- message: 'Validation failed',
327
- details: error.errors,
328
- },
329
- });
330
- }
331
- handler.handleException(res, error);
332
- }
333
- }
334
- );
335
- ```
336
-
337
- **Pros:**
338
- - Quick and simple
339
- - Good for simple routes
340
-
341
- **Cons:**
342
- - Validation logic in routes
343
- - Harder to test
344
- - Not reusable
345
-
346
- ---
347
-
348
- ## Controller Validation
349
-
350
- ### Pattern 2: Controller Validation (Recommended)
351
-
352
- ```typescript
353
- // validators/userSchemas.ts
354
- import { z } from 'zod';
355
-
356
- export const createUserSchema = z.object({
357
- email: z.string().email(),
358
- name: z.string().min(2).max(100),
359
- roles: z.array(z.enum(['admin', 'operations', 'user'])),
360
- isActive: z.boolean().default(true),
361
- });
362
-
363
- export const updateUserSchema = z.object({
364
- email: z.string().email().optional(),
365
- name: z.string().min(2).max(100).optional(),
366
- roles: z.array(z.enum(['admin', 'operations', 'user'])).optional(),
367
- isActive: z.boolean().optional(),
368
- });
369
-
370
- export type CreateUserDTO = z.infer<typeof createUserSchema>;
371
- export type UpdateUserDTO = z.infer<typeof updateUserSchema>;
372
- ```
373
-
374
- ```typescript
375
- // controllers/UserController.ts
376
- import { Request, Response } from 'express';
377
- import { BaseController } from './BaseController';
378
- import { UserService } from '../services/userService';
379
- import { createUserSchema, updateUserSchema } from '../validators/userSchemas';
380
- import { z } from 'zod';
381
-
382
- export class UserController extends BaseController {
383
- private userService: UserService;
384
-
385
- constructor() {
386
- super();
387
- this.userService = new UserService();
388
- }
389
-
390
- async createUser(req: Request, res: Response): Promise<void> {
391
- try {
392
- // Validate input
393
- const validated = createUserSchema.parse(req.body);
394
-
395
- // Call service
396
- const user = await this.userService.createUser(validated);
397
-
398
- this.handleSuccess(res, user, 'User created successfully', 201);
399
- } catch (error) {
400
- if (error instanceof z.ZodError) {
401
- // Handle validation errors with 400 status
402
- return this.handleError(error, res, 'createUser', 400);
403
- }
404
- this.handleError(error, res, 'createUser');
405
- }
406
- }
407
-
408
- async updateUser(req: Request, res: Response): Promise<void> {
409
- try {
410
- // Validate params and body
411
- const userId = req.params.id;
412
- const validated = updateUserSchema.parse(req.body);
413
-
414
- const user = await this.userService.updateUser(userId, validated);
415
-
416
- this.handleSuccess(res, user, 'User updated successfully');
417
- } catch (error) {
418
- if (error instanceof z.ZodError) {
419
- return this.handleError(error, res, 'updateUser', 400);
420
- }
421
- this.handleError(error, res, 'updateUser');
422
- }
423
- }
424
- }
425
- ```
426
-
427
- **Pros:**
428
- - Clean separation
429
- - Reusable schemas
430
- - Easy to test
431
- - Type-safe DTOs
432
-
433
- **Cons:**
434
- - More files to manage
435
-
436
- ---
437
-
438
- ## DTO Pattern
439
-
440
- ### Type Inference from Schemas
441
-
442
- ```typescript
443
- import { z } from 'zod';
444
-
445
- // Define schema
446
- const createUserSchema = z.object({
447
- email: z.string().email(),
448
- name: z.string(),
449
- age: z.number().int().positive(),
450
- });
451
-
452
- // Infer TypeScript type from schema
453
- type CreateUserDTO = z.infer<typeof createUserSchema>;
454
-
455
- // Equivalent to:
456
- // type CreateUserDTO = {
457
- // email: string;
458
- // name: string;
459
- // age: number;
460
- // }
461
-
462
- // Use in service
463
- class UserService {
464
- async createUser(data: CreateUserDTO): Promise<User> {
465
- // data is fully typed!
466
- console.log(data.email); // ✅ TypeScript knows this exists
467
- console.log(data.invalid); // ❌ TypeScript error!
468
- }
469
- }
470
- ```
471
-
472
- ### Input vs Output Types
473
-
474
- ```typescript
475
- // Input schema (what API receives)
476
- const createUserInputSchema = z.object({
477
- email: z.string().email(),
478
- name: z.string(),
479
- password: z.string().min(8),
480
- });
481
-
482
- // Output schema (what API returns)
483
- const userOutputSchema = z.object({
484
- id: z.string().uuid(),
485
- email: z.string().email(),
486
- name: z.string(),
487
- createdAt: z.string().datetime(),
488
- // password excluded!
489
- });
490
-
491
- type CreateUserInput = z.infer<typeof createUserInputSchema>;
492
- type UserOutput = z.infer<typeof userOutputSchema>;
493
- ```
494
-
495
- ---
496
-
497
- ## Error Handling
498
-
499
- ### Zod Error Format
500
-
501
- ```typescript
502
- try {
503
- const validated = schema.parse(data);
504
- } catch (error) {
505
- if (error instanceof z.ZodError) {
506
- console.log(error.errors);
507
- // [
508
- // {
509
- // code: 'invalid_type',
510
- // expected: 'string',
511
- // received: 'number',
512
- // path: ['email'],
513
- // message: 'Expected string, received number'
514
- // }
515
- // ]
516
- }
517
- }
518
- ```
519
-
520
- ### Custom Error Messages
521
-
522
- ```typescript
523
- const userSchema = z.object({
524
- email: z.string().email({ message: 'Please provide a valid email address' }),
525
- name: z.string().min(2, { message: 'Name must be at least 2 characters' }),
526
- age: z.number().int().positive({ message: 'Age must be a positive number' }),
527
- });
528
- ```
529
-
530
- ### Formatted Error Response
531
-
532
- ```typescript
533
- // Helper function to format Zod errors
534
- function formatZodError(error: z.ZodError) {
535
- return {
536
- message: 'Validation failed',
537
- errors: error.errors.map((err) => ({
538
- field: err.path.join('.'),
539
- message: err.message,
540
- code: err.code,
541
- })),
542
- };
543
- }
544
-
545
- // In controller
546
- catch (error) {
547
- if (error instanceof z.ZodError) {
548
- return res.status(400).json({
549
- success: false,
550
- error: formatZodError(error),
551
- });
552
- }
553
- }
554
-
555
- // Response example:
556
- // {
557
- // "success": false,
558
- // "error": {
559
- // "message": "Validation failed",
560
- // "errors": [
561
- // {
562
- // "field": "email",
563
- // "message": "Invalid email",
564
- // "code": "invalid_string"
565
- // }
566
- // ]
567
- // }
568
- // }
569
- ```
570
-
571
- ---
572
-
573
- ## Advanced Patterns
574
-
575
- ### Conditional Validation
576
-
577
- ```typescript
578
- // Validate based on other field values
579
- const submissionSchema = z.object({
580
- type: z.enum(['NEW', 'UPDATE']),
581
- postId: z.number().optional(),
582
- }).refine(
583
- (data) => {
584
- // If type is UPDATE, postId is required
585
- if (data.type === 'UPDATE') {
586
- return data.postId !== undefined;
587
- }
588
- return true;
589
- },
590
- {
591
- message: 'postId is required when type is UPDATE',
592
- path: ['postId'],
593
- }
594
- );
595
- ```
596
-
597
- ### Transform Data
598
-
599
- ```typescript
600
- // Transform strings to numbers
601
- const userSchema = z.object({
602
- name: z.string(),
603
- age: z.string().transform((val) => parseInt(val, 10)),
604
- });
605
-
606
- // Transform dates
607
- const eventSchema = z.object({
608
- name: z.string(),
609
- date: z.string().transform((str) => new Date(str)),
610
- });
611
- ```
612
-
613
- ### Preprocess Data
614
-
615
- ```typescript
616
- // Trim strings before validation
617
- const userSchema = z.object({
618
- email: z.preprocess(
619
- (val) => typeof val === 'string' ? val.trim().toLowerCase() : val,
620
- z.string().email()
621
- ),
622
- name: z.preprocess(
623
- (val) => typeof val === 'string' ? val.trim() : val,
624
- z.string().min(2)
625
- ),
626
- });
627
- ```
628
-
629
- ### Union Types
630
-
631
- ```typescript
632
- // Multiple possible types
633
- const idSchema = z.union([z.string(), z.number()]);
634
-
635
- // Discriminated unions
636
- const notificationSchema = z.discriminatedUnion('type', [
637
- z.object({
638
- type: z.literal('email'),
639
- recipient: z.string().email(),
640
- subject: z.string(),
641
- }),
642
- z.object({
643
- type: z.literal('sms'),
644
- phoneNumber: z.string(),
645
- message: z.string(),
646
- }),
647
- ]);
648
- ```
649
-
650
- ### Recursive Schemas
651
-
652
- ```typescript
653
- // For nested structures like trees
654
- type Category = {
655
- id: number;
656
- name: string;
657
- children?: Category[];
658
- };
659
-
660
- const categorySchema: z.ZodType<Category> = z.lazy(() =>
661
- z.object({
662
- id: z.number(),
663
- name: z.string(),
664
- children: z.array(categorySchema).optional(),
665
- })
666
- );
667
- ```
668
-
669
- ### Schema Composition
670
-
671
- ```typescript
672
- // Base schemas
673
- const timestampsSchema = z.object({
674
- createdAt: z.string().datetime(),
675
- updatedAt: z.string().datetime(),
676
- });
677
-
678
- const auditSchema = z.object({
679
- createdBy: z.string(),
680
- updatedBy: z.string(),
681
- });
682
-
683
- // Compose schemas
684
- const userSchema = z.object({
685
- id: z.string(),
686
- email: z.string().email(),
687
- name: z.string(),
688
- }).merge(timestampsSchema).merge(auditSchema);
689
-
690
- // Extend schemas
691
- const adminUserSchema = userSchema.extend({
692
- adminLevel: z.number().int().min(1).max(5),
693
- permissions: z.array(z.string()),
694
- });
695
-
696
- // Pick specific fields
697
- const publicUserSchema = userSchema.pick({
698
- id: true,
699
- name: true,
700
- // email excluded
701
- });
702
-
703
- // Omit fields
704
- const userWithoutTimestamps = userSchema.omit({
705
- createdAt: true,
706
- updatedAt: true,
707
- });
708
- ```
709
-
710
- ### Validation Middleware
711
-
712
- ```typescript
713
- // Create reusable validation middleware
714
- import { Request, Response, NextFunction } from 'express';
715
- import { z } from 'zod';
716
-
717
- export function validateBody<T extends z.ZodType>(schema: T) {
718
- return (req: Request, res: Response, next: NextFunction) => {
719
- try {
720
- req.body = schema.parse(req.body);
721
- next();
722
- } catch (error) {
723
- if (error instanceof z.ZodError) {
724
- return res.status(400).json({
725
- success: false,
726
- error: {
727
- message: 'Validation failed',
728
- details: error.errors,
729
- },
730
- });
731
- }
732
- next(error);
733
- }
734
- };
735
- }
736
-
737
- // Usage
738
- router.post('/users',
739
- validateBody(createUserSchema),
740
- async (req, res) => {
741
- // req.body is validated and typed!
742
- const user = await userService.createUser(req.body);
743
- res.json({ success: true, data: user });
744
- }
745
- );
746
- ```
747
-
748
- ---
749
-
750
- **Related Files:**
751
- - [SKILL.md](SKILL.md) - Main guide
752
- - [routing-and-controllers.md](routing-and-controllers.md) - Using validation in controllers
753
- - [services-and-repositories.md](services-and-repositories.md) - Using DTOs in services
754
- - [async-and-errors.md](async-and-errors.md) - Error handling patterns