@next-friday/create-app 9.2.0 → 9.3.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 (260) hide show
  1. package/package.json +13 -10
  2. package/templates/base/.agents/review.md +1 -1
  3. package/templates/base/.claude/settings.json +11 -0
  4. package/templates/base/.claude-plugin/marketplace.json +16 -0
  5. package/templates/base/.cursor/hooks/load-project-plugins.sh +3 -0
  6. package/templates/base/.cursor/hooks.json +6 -0
  7. package/templates/base/.github/workflows/control-band.yml +4 -2
  8. package/templates/base/.github/workflows/spec-on-intent-merge.yml +2 -1
  9. package/templates/base/REVIEW.md +1 -1
  10. package/templates/base/SETUP.md +12 -9
  11. package/templates/base/intent/README.md +1 -1
  12. package/templates/base/plugins/sdlc/claude-code/.claude-plugin/plugin.json +7 -0
  13. package/templates/base/plugins/sdlc/claude-code/agents/verifier.md +7 -0
  14. package/templates/base/plugins/sdlc/claude-code/hooks/check-reply-shape.sh +53 -0
  15. package/templates/base/plugins/sdlc/claude-code/hooks/hooks.json +15 -0
  16. package/templates/base/{.agents → plugins/sdlc/claude-code}/skills/brand-policy/SKILL.md +1 -3
  17. package/templates/base/{.agents → plugins/sdlc/claude-code}/skills/compliance-policy/SKILL.md +0 -2
  18. package/templates/base/plugins/sdlc/claude-code/skills/sdlc-help/SKILL.md +23 -0
  19. package/templates/base/{.cursor/skills/sdlc → plugins/sdlc/claude-code/skills/sdlc-mode}/SKILL.md +22 -11
  20. package/templates/base/plugins/sdlc/claude-code/skills/sdlc-mode/playbooks/build.md +46 -0
  21. package/templates/base/{.cursor/skills/sdlc → plugins/sdlc/claude-code/skills/sdlc-mode}/playbooks/deploy.md +4 -4
  22. package/templates/base/{.claude/skills/sdlc → plugins/sdlc/claude-code/skills/sdlc-mode}/playbooks/design.md +8 -8
  23. package/templates/base/{.cursor/skills/sdlc → plugins/sdlc/claude-code/skills/sdlc-mode}/playbooks/fix.md +7 -7
  24. package/templates/base/{.agents/skills/sdlc → plugins/sdlc/claude-code/skills/sdlc-mode}/playbooks/maintain.md +6 -8
  25. package/templates/base/plugins/sdlc/claude-code/skills/sdlc-mode/playbooks/open-pr.md +17 -0
  26. package/templates/base/{.cursor/skills/sdlc → plugins/sdlc/claude-code/skills/sdlc-mode}/playbooks/plan.md +6 -6
  27. package/templates/base/{.agents/skills/sdlc → plugins/sdlc/claude-code/skills/sdlc-mode}/playbooks/question.md +2 -2
  28. package/templates/base/{.cursor/skills/sdlc → plugins/sdlc/claude-code/skills/sdlc-mode}/playbooks/review.md +7 -8
  29. package/templates/base/{.claude → plugins/sdlc/claude-code}/skills/security-policy/SKILL.md +0 -2
  30. package/templates/base/plugins/sdlc/claude-code/skills/setup-sdlc/SKILL.md +51 -0
  31. package/templates/base/{.agents → plugins/sdlc/claude-code}/skills/ux-policy/SKILL.md +0 -2
  32. package/templates/base/plugins/sdlc/cursor/.cursor-plugin/plugin.json +10 -0
  33. package/templates/base/plugins/sdlc/cursor/agents/verifier.md +7 -0
  34. package/templates/base/plugins/sdlc/cursor/hooks/check-reply-shape.sh +53 -0
  35. package/templates/base/plugins/sdlc/cursor/hooks/hooks.json +16 -0
  36. package/templates/base/{.cursor → plugins/sdlc/cursor}/skills/brand-policy/SKILL.md +1 -3
  37. package/templates/base/{.claude → plugins/sdlc/cursor}/skills/compliance-policy/SKILL.md +0 -2
  38. package/templates/base/plugins/sdlc/cursor/skills/sdlc-help/SKILL.md +23 -0
  39. package/templates/base/{.claude/skills/sdlc → plugins/sdlc/cursor/skills/sdlc-mode}/SKILL.md +22 -11
  40. package/templates/base/plugins/sdlc/cursor/skills/sdlc-mode/playbooks/build.md +46 -0
  41. package/templates/base/{.agents/skills/sdlc → plugins/sdlc/cursor/skills/sdlc-mode}/playbooks/deploy.md +4 -4
  42. package/templates/base/{.cursor/skills/sdlc → plugins/sdlc/cursor/skills/sdlc-mode}/playbooks/design.md +8 -8
  43. package/templates/base/{.agents/skills/sdlc → plugins/sdlc/cursor/skills/sdlc-mode}/playbooks/fix.md +7 -7
  44. package/templates/base/{.cursor/skills/sdlc → plugins/sdlc/cursor/skills/sdlc-mode}/playbooks/maintain.md +6 -8
  45. package/templates/base/plugins/sdlc/cursor/skills/sdlc-mode/playbooks/open-pr.md +17 -0
  46. package/templates/base/{.agents/skills/sdlc → plugins/sdlc/cursor/skills/sdlc-mode}/playbooks/plan.md +6 -6
  47. package/templates/base/{.claude/skills/sdlc → plugins/sdlc/cursor/skills/sdlc-mode}/playbooks/question.md +2 -2
  48. package/templates/base/{.agents/skills/sdlc → plugins/sdlc/cursor/skills/sdlc-mode}/playbooks/review.md +7 -8
  49. package/templates/base/{.agents → plugins/sdlc/cursor}/skills/security-policy/SKILL.md +0 -2
  50. package/templates/base/plugins/sdlc/cursor/skills/setup-sdlc/SKILL.md +51 -0
  51. package/templates/base/{.claude → plugins/sdlc/cursor}/skills/ux-policy/SKILL.md +0 -2
  52. package/templates/base/scripts/check-agent-gates.ts +14 -1
  53. package/templates/base/scripts/check-plan.ts +1 -1
  54. package/templates/base/scripts/sync-agent-rules.ts +0 -58
  55. package/templates/nestjs/AGENTS.md +6 -4
  56. package/templates/nestjs/CONTRIBUTING.md +0 -1
  57. package/templates/nestjs/package.json +7 -8
  58. package/templates/nextjs/AGENTS.md +6 -4
  59. package/templates/nextjs/CONTRIBUTING.md +0 -1
  60. package/templates/nextjs/package.json +7 -8
  61. package/templates/nodejs/AGENTS.md +6 -4
  62. package/templates/nodejs/CONTRIBUTING.md +0 -1
  63. package/templates/nodejs/package.json +3 -4
  64. package/templates/payload/.agents/review.md +1 -1
  65. package/templates/payload/AGENTS.md +6 -4
  66. package/templates/payload/CONTRIBUTING.md +0 -1
  67. package/templates/payload/REVIEW.md +1 -1
  68. package/templates/payload/package.json +9 -10
  69. package/templates/turborepo/.agents/review.md +1 -1
  70. package/templates/turborepo/AGENTS.md +6 -4
  71. package/templates/turborepo/CONTRIBUTING.md +0 -1
  72. package/templates/turborepo/REVIEW.md +1 -1
  73. package/templates/turborepo/apps/app/package.json +6 -6
  74. package/templates/turborepo/apps/backoffice/package.json +8 -8
  75. package/templates/turborepo/package.json +1 -2
  76. package/templates/base/.agents/agents.json +0 -7
  77. package/templates/base/.agents/skill-evals/README.md +0 -42
  78. package/templates/base/.agents/skill-evals/sdlc/answers-question-without-writing/case.yaml +0 -12
  79. package/templates/base/.agents/skill-evals/sdlc/answers-question-without-writing/graders/01-the-reply-explains-why-pnpm.md +0 -7
  80. package/templates/base/.agents/skill-evals/sdlc/answers-question-without-writing/graders/02-no-file-in-the-project.md +0 -7
  81. package/templates/base/.agents/skill-evals/sdlc/answers-question-without-writing/graders/03-no-commit-is-made-nothing.md +0 -7
  82. package/templates/base/.agents/skill-evals/sdlc/answers-question-without-writing/graders/04-the-reply-is-in-the.md +0 -7
  83. package/templates/base/.agents/skill-evals/sdlc/answers-question-without-writing/graders/05-every-path-in-the-reply.md +0 -7
  84. package/templates/base/.agents/skill-evals/sdlc/answers-question-without-writing/graders/06-everything-the-reply-states-as.md +0 -7
  85. package/templates/base/.agents/skill-evals/sdlc/answers-question-without-writing/prompt.md +0 -8
  86. package/templates/base/.agents/skill-evals/sdlc/build-continues-from-an-accepted-plan/case.yaml +0 -12
  87. package/templates/base/.agents/skill-evals/sdlc/build-continues-from-an-accepted-plan/fixture.md +0 -1
  88. package/templates/base/.agents/skill-evals/sdlc/build-continues-from-an-accepted-plan/graders/01-work-happens-on-the-plan-branch.md +0 -7
  89. package/templates/base/.agents/skill-evals/sdlc/build-continues-from-an-accepted-plan/graders/02-the-plan-is-implemented-and-checked.md +0 -7
  90. package/templates/base/.agents/skill-evals/sdlc/build-continues-from-an-accepted-plan/graders/03-the-branch-is-pushed.md +0 -7
  91. package/templates/base/.agents/skill-evals/sdlc/build-continues-from-an-accepted-plan/graders/04-the-reply-lists-three-playbooks.md +0 -7
  92. package/templates/base/.agents/skill-evals/sdlc/build-continues-from-an-accepted-plan/graders/05-no-approval-and-no-merge.md +0 -7
  93. package/templates/base/.agents/skill-evals/sdlc/build-continues-from-an-accepted-plan/graders/06-the-reply-ends-at-the-code-owner.md +0 -7
  94. package/templates/base/.agents/skill-evals/sdlc/build-continues-from-an-accepted-plan/graders/07-the-plan-names-the-engineer.md +0 -7
  95. package/templates/base/.agents/skill-evals/sdlc/build-continues-from-an-accepted-plan/prompt.md +0 -8
  96. package/templates/base/.agents/skill-evals/sdlc/build-interviews-before-planning/case.yaml +0 -71
  97. package/templates/base/.agents/skill-evals/sdlc/build-interviews-before-planning/fixture.md +0 -1
  98. package/templates/base/.agents/skill-evals/sdlc/build-interviews-before-planning/graders/01-the-reply-asks-numbered-questions.md +0 -7
  99. package/templates/base/.agents/skill-evals/sdlc/build-interviews-before-planning/graders/02-no-plan-before-the-answers.md +0 -7
  100. package/templates/base/.agents/skill-evals/sdlc/build-interviews-before-planning/graders/03-no-question-depends-on-another.md +0 -7
  101. package/templates/base/.agents/skill-evals/sdlc/build-interviews-before-planning/graders/04-no-file-or-commit.md +0 -7
  102. package/templates/base/.agents/skill-evals/sdlc/build-interviews-before-planning/graders/05-the-reply-is-in-thai.md +0 -7
  103. package/templates/base/.agents/skill-evals/sdlc/build-interviews-before-planning/prompt.md +0 -8
  104. package/templates/base/.agents/skill-evals/sdlc/build-plans-and-waits-for-the-engineer/case.yaml +0 -68
  105. package/templates/base/.agents/skill-evals/sdlc/build-plans-and-waits-for-the-engineer/fixture.md +0 -1
  106. package/templates/base/.agents/skill-evals/sdlc/build-plans-and-waits-for-the-engineer/graders/01-the-plan-has-the-four-headings.md +0 -7
  107. package/templates/base/.agents/skill-evals/sdlc/build-plans-and-waits-for-the-engineer/graders/02-no-source-file-or-commit.md +0 -7
  108. package/templates/base/.agents/skill-evals/sdlc/build-plans-and-waits-for-the-engineer/graders/03-the-reply-names-the-gate.md +0 -7
  109. package/templates/base/.agents/skill-evals/sdlc/build-plans-and-waits-for-the-engineer/graders/04-the-reply-is-in-thai.md +0 -7
  110. package/templates/base/.agents/skill-evals/sdlc/build-plans-and-waits-for-the-engineer/prompt.md +0 -10
  111. package/templates/base/.agents/skill-evals/sdlc/deploy-stops-at-the-production-gate/case.yaml +0 -8
  112. package/templates/base/.agents/skill-evals/sdlc/deploy-stops-at-the-production-gate/fixture.md +0 -1
  113. package/templates/base/.agents/skill-evals/sdlc/deploy-stops-at-the-production-gate/graders/01-no-deployment-is-started.md +0 -7
  114. package/templates/base/.agents/skill-evals/sdlc/deploy-stops-at-the-production-gate/graders/02-the-reply-names-the-release-manager-gate.md +0 -7
  115. package/templates/base/.agents/skill-evals/sdlc/deploy-stops-at-the-production-gate/graders/03-the-reply-says-what-it-could-not-read.md +0 -7
  116. package/templates/base/.agents/skill-evals/sdlc/deploy-stops-at-the-production-gate/graders/04-the-reply-is-in-the-language.md +0 -7
  117. package/templates/base/.agents/skill-evals/sdlc/deploy-stops-at-the-production-gate/prompt.md +0 -8
  118. package/templates/base/.agents/skill-evals/sdlc/drafts-intent-and-waits-for-yes/case.yaml +0 -13
  119. package/templates/base/.agents/skill-evals/sdlc/drafts-intent-and-waits-for-yes/graders/01-a-file-intentkebabcasenameintentmd-exists-with.md +0 -7
  120. package/templates/base/.agents/skill-evals/sdlc/drafts-intent-and-waits-for-yes/graders/02-the-reply-shows-the-draft.md +0 -7
  121. package/templates/base/.agents/skill-evals/sdlc/drafts-intent-and-waits-for-yes/graders/03-no-commit-is-made-nothing.md +0 -7
  122. package/templates/base/.agents/skill-evals/sdlc/drafts-intent-and-waits-for-yes/graders/04-reply-lists-the-playbook-steps.md +0 -7
  123. package/templates/base/.agents/skill-evals/sdlc/drafts-intent-and-waits-for-yes/graders/05-the-reply-is-in-the.md +0 -7
  124. package/templates/base/.agents/skill-evals/sdlc/drafts-intent-and-waits-for-yes/graders/06-every-path-in-the-reply.md +0 -7
  125. package/templates/base/.agents/skill-evals/sdlc/drafts-intent-and-waits-for-yes/graders/07-the-drafts-open-questions-section.md +0 -7
  126. package/templates/base/.agents/skill-evals/sdlc/drafts-intent-and-waits-for-yes/prompt.md +0 -10
  127. package/templates/base/.agents/skill-evals/sdlc/fix-reproduces-finds-the-cause-and-waits-for-the-engineer/case.yaml +0 -34
  128. package/templates/base/.agents/skill-evals/sdlc/fix-reproduces-finds-the-cause-and-waits-for-the-engineer/fixture.md +0 -1
  129. package/templates/base/.agents/skill-evals/sdlc/fix-reproduces-finds-the-cause-and-waits-for-the-engineer/graders/01-the-reply-shows-the-reproduction-output.md +0 -7
  130. package/templates/base/.agents/skill-evals/sdlc/fix-reproduces-finds-the-cause-and-waits-for-the-engineer/graders/02-the-reply-names-one-cause-with-evidence.md +0 -7
  131. package/templates/base/.agents/skill-evals/sdlc/fix-reproduces-finds-the-cause-and-waits-for-the-engineer/graders/03-the-plan-has-the-four-headings.md +0 -7
  132. package/templates/base/.agents/skill-evals/sdlc/fix-reproduces-finds-the-cause-and-waits-for-the-engineer/graders/04-no-file-or-commit.md +0 -7
  133. package/templates/base/.agents/skill-evals/sdlc/fix-reproduces-finds-the-cause-and-waits-for-the-engineer/graders/05-the-reply-names-the-gate.md +0 -7
  134. package/templates/base/.agents/skill-evals/sdlc/fix-reproduces-finds-the-cause-and-waits-for-the-engineer/graders/06-the-reply-is-in-thai.md +0 -7
  135. package/templates/base/.agents/skill-evals/sdlc/fix-reproduces-finds-the-cause-and-waits-for-the-engineer/prompt.md +0 -8
  136. package/templates/base/.agents/skill-evals/sdlc/interviews-before-writing-intent/case.yaml +0 -12
  137. package/templates/base/.agents/skill-evals/sdlc/interviews-before-writing-intent/graders/01-the-first-message-restates-the.md +0 -7
  138. package/templates/base/.agents/skill-evals/sdlc/interviews-before-writing-intent/graders/02-the-reply-asks-numbered-questions.md +0 -7
  139. package/templates/base/.agents/skill-evals/sdlc/interviews-before-writing-intent/graders/03-no-intentmd-is-written-before.md +0 -7
  140. package/templates/base/.agents/skill-evals/sdlc/interviews-before-writing-intent/graders/04-reply-lists-the-playbook-steps.md +0 -7
  141. package/templates/base/.agents/skill-evals/sdlc/interviews-before-writing-intent/graders/05-no-commit-is-made-nothing.md +0 -7
  142. package/templates/base/.agents/skill-evals/sdlc/interviews-before-writing-intent/graders/06-the-reply-is-in-the.md +0 -7
  143. package/templates/base/.agents/skill-evals/sdlc/interviews-before-writing-intent/graders/07-every-path-in-the-reply.md +0 -7
  144. package/templates/base/.agents/skill-evals/sdlc/interviews-before-writing-intent/graders/08-no-question-in-the-round.md +0 -7
  145. package/templates/base/.agents/skill-evals/sdlc/interviews-before-writing-intent/prompt.md +0 -8
  146. package/templates/base/.agents/skill-evals/sdlc/maintain-writes-intent-from-a-finding/case.yaml +0 -14
  147. package/templates/base/.agents/skill-evals/sdlc/maintain-writes-intent-from-a-finding/fixture.md +0 -1
  148. package/templates/base/.agents/skill-evals/sdlc/maintain-writes-intent-from-a-finding/graders/01-the-intent-has-the-five-headings.md +0 -7
  149. package/templates/base/.agents/skill-evals/sdlc/maintain-writes-intent-from-a-finding/graders/02-problem-holds-the-error-and-where.md +0 -7
  150. package/templates/base/.agents/skill-evals/sdlc/maintain-writes-intent-from-a-finding/graders/03-unverified-cause-is-an-open-question.md +0 -7
  151. package/templates/base/.agents/skill-evals/sdlc/maintain-writes-intent-from-a-finding/graders/04-no-source-file-is-changed.md +0 -7
  152. package/templates/base/.agents/skill-evals/sdlc/maintain-writes-intent-from-a-finding/graders/05-a-branch-is-pushed-and-the-gate-is-named.md +0 -7
  153. package/templates/base/.agents/skill-evals/sdlc/maintain-writes-intent-from-a-finding/graders/06-the-person-is-asked-no-question.md +0 -7
  154. package/templates/base/.agents/skill-evals/sdlc/maintain-writes-intent-from-a-finding/prompt.md +0 -8
  155. package/templates/base/.agents/skill-evals/sdlc/reported-problem-starts-the-plan/case.yaml +0 -12
  156. package/templates/base/.agents/skill-evals/sdlc/reported-problem-starts-the-plan/graders/01-the-reply-follows-the-plan.md +0 -7
  157. package/templates/base/.agents/skill-evals/sdlc/reported-problem-starts-the-plan/graders/02-the-reply-does-not-tell.md +0 -7
  158. package/templates/base/.agents/skill-evals/sdlc/reported-problem-starts-the-plan/graders/03-no-file-is-created-or.md +0 -7
  159. package/templates/base/.agents/skill-evals/sdlc/reported-problem-starts-the-plan/graders/04-the-reply-is-in-the.md +0 -7
  160. package/templates/base/.agents/skill-evals/sdlc/reported-problem-starts-the-plan/graders/05-every-path-in-the-reply.md +0 -7
  161. package/templates/base/.agents/skill-evals/sdlc/reported-problem-starts-the-plan/prompt.md +0 -8
  162. package/templates/base/.agents/skill-evals/sdlc/request-that-fits-no-row/case.yaml +0 -11
  163. package/templates/base/.agents/skill-evals/sdlc/request-that-fits-no-row/fixture.md +0 -1
  164. package/templates/base/.agents/skill-evals/sdlc/request-that-fits-no-row/graders/01-no-file-is-written-and-nothing-is-committed.md +0 -7
  165. package/templates/base/.agents/skill-evals/sdlc/request-that-fits-no-row/graders/02-the-reply-names-the-closest-row.md +0 -7
  166. package/templates/base/.agents/skill-evals/sdlc/request-that-fits-no-row/graders/03-the-reply-is-short-and-in-thai.md +0 -7
  167. package/templates/base/.agents/skill-evals/sdlc/request-that-fits-no-row/prompt.md +0 -8
  168. package/templates/base/.agents/skill-evals/sdlc/review-reports-findings-and-never-merges/case.yaml +0 -79
  169. package/templates/base/.agents/skill-evals/sdlc/review-reports-findings-and-never-merges/fixture.md +0 -1
  170. package/templates/base/.agents/skill-evals/sdlc/review-reports-findings-and-never-merges/graders/01-findings-have-pass-severity-and-location.md +0 -7
  171. package/templates/base/.agents/skill-evals/sdlc/review-reports-findings-and-never-merges/graders/02-no-approval-and-no-merge.md +0 -7
  172. package/templates/base/.agents/skill-evals/sdlc/review-reports-findings-and-never-merges/graders/03-the-reply-names-the-code-owner-gate.md +0 -7
  173. package/templates/base/.agents/skill-evals/sdlc/review-reports-findings-and-never-merges/graders/04-nothing-is-pushed-or-changed.md +0 -7
  174. package/templates/base/.agents/skill-evals/sdlc/review-reports-findings-and-never-merges/graders/05-the-review-runs-in-a-fresh-context.md +0 -7
  175. package/templates/base/.agents/skill-evals/sdlc/review-reports-findings-and-never-merges/prompt.md +0 -8
  176. package/templates/base/.agents/skill-evals/sdlc/spec-for-unmerged-intent-stops/case.yaml +0 -42
  177. package/templates/base/.agents/skill-evals/sdlc/spec-for-unmerged-intent-stops/fixture.md +0 -1
  178. package/templates/base/.agents/skill-evals/sdlc/spec-for-unmerged-intent-stops/graders/01-no-spec-is-written.md +0 -7
  179. package/templates/base/.agents/skill-evals/sdlc/spec-for-unmerged-intent-stops/graders/02-no-commit-is-made.md +0 -7
  180. package/templates/base/.agents/skill-evals/sdlc/spec-for-unmerged-intent-stops/graders/03-the-reply-says-not-merged.md +0 -7
  181. package/templates/base/.agents/skill-evals/sdlc/spec-for-unmerged-intent-stops/graders/04-the-reply-is-in-the.md +0 -7
  182. package/templates/base/.agents/skill-evals/sdlc/spec-for-unmerged-intent-stops/graders/05-the-reply-is-short.md +0 -7
  183. package/templates/base/.agents/skill-evals/sdlc/spec-for-unmerged-intent-stops/prompt.md +0 -8
  184. package/templates/base/.agents/skill-evals/sdlc/statement-without-command-starts-no-work/case.yaml +0 -12
  185. package/templates/base/.agents/skill-evals/sdlc/statement-without-command-starts-no-work/graders/01-no-intentmd-or-any-other.md +0 -7
  186. package/templates/base/.agents/skill-evals/sdlc/statement-without-command-starts-no-work/graders/02-no-commit-is-made-nothing.md +0 -7
  187. package/templates/base/.agents/skill-evals/sdlc/statement-without-command-starts-no-work/graders/03-the-reply-is-in-the.md +0 -7
  188. package/templates/base/.agents/skill-evals/sdlc/statement-without-command-starts-no-work/graders/04-every-path-in-the-reply.md +0 -7
  189. package/templates/base/.agents/skill-evals/sdlc/statement-without-command-starts-no-work/graders/05-the-reply-says-that-work.md +0 -7
  190. package/templates/base/.agents/skill-evals/sdlc/statement-without-command-starts-no-work/prompt.md +0 -8
  191. package/templates/base/.agents/skill-evals/sdlc/writes-spec-from-merged-intent/case.yaml +0 -42
  192. package/templates/base/.agents/skill-evals/sdlc/writes-spec-from-merged-intent/fixture.md +0 -1
  193. package/templates/base/.agents/skill-evals/sdlc/writes-spec-from-merged-intent/graders/01-the-spec-has-the-five-headings.md +0 -7
  194. package/templates/base/.agents/skill-evals/sdlc/writes-spec-from-merged-intent/graders/02-policies-has-one-line-per-policy.md +0 -7
  195. package/templates/base/.agents/skill-evals/sdlc/writes-spec-from-merged-intent/graders/03-no-policy-is-called-unwritten.md +0 -7
  196. package/templates/base/.agents/skill-evals/sdlc/writes-spec-from-merged-intent/graders/04-a-branch-is-pushed-for-review.md +0 -7
  197. package/templates/base/.agents/skill-evals/sdlc/writes-spec-from-merged-intent/graders/05-the-reply-names-the-gate.md +0 -7
  198. package/templates/base/.agents/skill-evals/sdlc/writes-spec-from-merged-intent/graders/06-the-reply-is-in-the.md +0 -7
  199. package/templates/base/.agents/skill-evals/sdlc/writes-spec-from-merged-intent/graders/07-no-merge-is-made.md +0 -7
  200. package/templates/base/.agents/skill-evals/sdlc/writes-spec-from-merged-intent/graders/08-the-four-policies-are-read-before-writing.md +0 -7
  201. package/templates/base/.agents/skill-evals/sdlc/writes-spec-from-merged-intent/prompt.md +0 -8
  202. package/templates/base/.agents/skill-evals/sdlc-help/explains-how-to-start-work/case.yaml +0 -11
  203. package/templates/base/.agents/skill-evals/sdlc-help/explains-how-to-start-work/graders/01-the-reply-says-that-work.md +0 -7
  204. package/templates/base/.agents/skill-evals/sdlc-help/explains-how-to-start-work/graders/02-the-reply-gives-one-example.md +0 -7
  205. package/templates/base/.agents/skill-evals/sdlc-help/explains-how-to-start-work/graders/03-the-reply-lists-the-project.md +0 -7
  206. package/templates/base/.agents/skill-evals/sdlc-help/explains-how-to-start-work/graders/04-no-file-is-created-or.md +0 -7
  207. package/templates/base/.agents/skill-evals/sdlc-help/explains-how-to-start-work/graders/05-the-reply-is-in-the.md +0 -7
  208. package/templates/base/.agents/skill-evals/sdlc-help/explains-how-to-start-work/graders/06-every-path-in-the-reply.md +0 -7
  209. package/templates/base/.agents/skill-evals/sdlc-help/explains-how-to-start-work/prompt.md +0 -8
  210. package/templates/base/.agents/skill-evals/sdlc-help/unknown-playbook-is-not-invented/case.yaml +0 -10
  211. package/templates/base/.agents/skill-evals/sdlc-help/unknown-playbook-is-not-invented/graders/01-the-reply-says-that-this.md +0 -7
  212. package/templates/base/.agents/skill-evals/sdlc-help/unknown-playbook-is-not-invented/graders/02-the-reply-does-not-describe.md +0 -7
  213. package/templates/base/.agents/skill-evals/sdlc-help/unknown-playbook-is-not-invented/graders/03-no-file-is-created-or.md +0 -7
  214. package/templates/base/.agents/skill-evals/sdlc-help/unknown-playbook-is-not-invented/graders/04-the-reply-is-in-the.md +0 -7
  215. package/templates/base/.agents/skill-evals/sdlc-help/unknown-playbook-is-not-invented/graders/05-every-path-in-the-reply.md +0 -7
  216. package/templates/base/.agents/skill-evals/sdlc-help/unknown-playbook-is-not-invented/prompt.md +0 -8
  217. package/templates/base/.agents/skill-evals/sdlc-help/work-request-is-sent-to-sdlc/case.yaml +0 -11
  218. package/templates/base/.agents/skill-evals/sdlc-help/work-request-is-sent-to-sdlc/graders/01-the-reply-says-to-send.md +0 -7
  219. package/templates/base/.agents/skill-evals/sdlc-help/work-request-is-sent-to-sdlc/graders/02-no-file-is-created-or.md +0 -7
  220. package/templates/base/.agents/skill-evals/sdlc-help/work-request-is-sent-to-sdlc/graders/03-the-reply-is-in-the.md +0 -7
  221. package/templates/base/.agents/skill-evals/sdlc-help/work-request-is-sent-to-sdlc/graders/04-every-path-in-the-reply.md +0 -7
  222. package/templates/base/.agents/skill-evals/sdlc-help/work-request-is-sent-to-sdlc/prompt.md +0 -8
  223. package/templates/base/.agents/skills/sdlc/SKILL.md +0 -54
  224. package/templates/base/.agents/skills/sdlc/playbooks/build.md +0 -46
  225. package/templates/base/.agents/skills/sdlc/playbooks/design.md +0 -40
  226. package/templates/base/.agents/skills/sdlc/playbooks/open-pr.md +0 -15
  227. package/templates/base/.agents/skills/sdlc-help/SKILL.md +0 -23
  228. package/templates/base/.claude/skills/brand-policy/SKILL.md +0 -18
  229. package/templates/base/.claude/skills/sdlc/playbooks/build.md +0 -46
  230. package/templates/base/.claude/skills/sdlc/playbooks/deploy.md +0 -9
  231. package/templates/base/.claude/skills/sdlc/playbooks/fix.md +0 -23
  232. package/templates/base/.claude/skills/sdlc/playbooks/maintain.md +0 -20
  233. package/templates/base/.claude/skills/sdlc/playbooks/open-pr.md +0 -15
  234. package/templates/base/.claude/skills/sdlc/playbooks/plan.md +0 -33
  235. package/templates/base/.claude/skills/sdlc/playbooks/review.md +0 -17
  236. package/templates/base/.claude/skills/sdlc-help/SKILL.md +0 -23
  237. package/templates/base/.cursor/skills/compliance-policy/SKILL.md +0 -25
  238. package/templates/base/.cursor/skills/sdlc/playbooks/build.md +0 -46
  239. package/templates/base/.cursor/skills/sdlc/playbooks/open-pr.md +0 -15
  240. package/templates/base/.cursor/skills/sdlc/playbooks/question.md +0 -8
  241. package/templates/base/.cursor/skills/sdlc-help/SKILL.md +0 -23
  242. package/templates/base/.cursor/skills/security-policy/SKILL.md +0 -41
  243. package/templates/base/.cursor/skills/ux-policy/SKILL.md +0 -21
  244. package/templates/base/.github/workflows/agent-evals.yml +0 -46
  245. package/templates/base/scripts/run-agent-evals.ts +0 -1186
  246. package/templates/nestjs/.agents/agents/verifier.md +0 -1
  247. package/templates/nestjs/.claude/agents/verifier.md +0 -7
  248. package/templates/nestjs/.cursor/agents/verifier.md +0 -7
  249. package/templates/nextjs/.agents/agents/verifier.md +0 -1
  250. package/templates/nextjs/.claude/agents/verifier.md +0 -7
  251. package/templates/nextjs/.cursor/agents/verifier.md +0 -7
  252. package/templates/nodejs/.agents/agents/verifier.md +0 -1
  253. package/templates/nodejs/.claude/agents/verifier.md +0 -7
  254. package/templates/nodejs/.cursor/agents/verifier.md +0 -7
  255. package/templates/payload/.agents/agents/verifier.md +0 -1
  256. package/templates/payload/.claude/agents/verifier.md +0 -7
  257. package/templates/payload/.cursor/agents/verifier.md +0 -7
  258. package/templates/turborepo/.agents/agents/verifier.md +0 -1
  259. package/templates/turborepo/.claude/agents/verifier.md +0 -7
  260. package/templates/turborepo/.cursor/agents/verifier.md +0 -7
@@ -37,7 +37,6 @@ Run the narrowest check that covers the change while you work. Git hooks run the
37
37
 
38
38
  - **Scans:** CI also runs coverage, the build, the container image, and the secret, SAST, OSV, CodeQL, dependency-review, and OpenSSF Scorecard scans. CodeQL, dependency-review, and Scorecard run on public repositories, and on private ones when the `CODE_SCANNING` repository variable is `true`. Dependabot and OSV-Scanner report vulnerable dependencies.
39
39
  - **Coverage:** CI requires 95% line coverage on changed lines in `src/`, except `main.ts`, which starts the server and handles the shutdown signals. Keep other logic out of it, as `src/port.ts` and `src/server.ts` do.
40
- - **Agent evals:** run `pnpm evals:run` after you change `AGENTS.md`, a skill under `.agents/skills/`, or a hook under `.agents/hooks/`, and add a case name to run one case. It runs the cases in `.agents/skill-evals/` with Claude Code on your own Claude login, so it spends your Claude usage, and it is not part of `pnpm verify`.
41
40
 
42
41
  Run `pnpm verify` for repository changes.
43
42
 
@@ -16,7 +16,6 @@
16
16
  "check": "pnpm verify:static && pnpm test:changed && pnpm build",
17
17
  "clean": "rm -rf dist coverage .eslintcache node_modules/.cache",
18
18
  "depcruise": "depcruise --config .dependency-cruiser.json src eslint.config.ts vitest.config.ts",
19
- "evals:run": "node scripts/run-agent-evals.ts",
20
19
  "format": "prettier --write --cache .",
21
20
  "format:check": "prettier --check --cache . && editorconfig-checker",
22
21
  "gates:check": "node scripts/check-agent-gates.ts",
@@ -48,8 +47,8 @@
48
47
  "@next-friday/prettier-config-friday": "4.0.0",
49
48
  "@swc/core": "1.16.22",
50
49
  "@types/node": "26.6.6",
51
- "@vitest/coverage-v8": "5.0.5",
52
- "dependency-cruiser": "18.7.1",
50
+ "@vitest/coverage-v8": "5.1.0",
51
+ "dependency-cruiser": "18.7.2",
53
52
  "editorconfig-checker": "7.0.0",
54
53
  "eslint": "10.14.0",
55
54
  "fast-check": "4.10.2",
@@ -60,7 +59,7 @@
60
59
  "prettier": "3.9.10",
61
60
  "sort-package-json": "4.1.0",
62
61
  "typescript": "7.0.2",
63
- "vitest": "5.0.5",
62
+ "vitest": "5.1.0",
64
63
  "yaml": "2.9.1"
65
64
  },
66
65
  "packageManager": "pnpm@12.6.0+sha512.3ef68f951cb111ac204b4a5a16f0b2ddf0da56a96e0413e81d855d9f0b55ef926714709028e1cd00c405c2c5fb7b9e8ec4dc46777c805d0373c2f2ff00fd20ec",
@@ -6,7 +6,7 @@ Run three passes and tag each finding with its pass:
6
6
 
7
7
  - Bugs: logic errors, broken edge cases, subtle regressions
8
8
  - Security: injection risks, authentication gaps, PII in logs
9
- - Compliance: the change matches spec.md, plan.md and the design principles that the four policies in `.agents/skills/` state; flag a plan.md that has no `Accepted by:` line and a change that makes `AGENTS.md` outdated
9
+ - Compliance: the change matches spec.md, plan.md and the design principles that the policies in force state, each the project's own `.agents/skills/<area>-policy/SKILL.md` or else the `sdlc` plugin's default; flag a plan.md that has no `Accepted by:` line and a change that makes `AGENTS.md` outdated
10
10
 
11
11
  ## What Important means here
12
12
 
@@ -14,7 +14,7 @@ Payload CMS on Next.js App Router and PostgreSQL, in TypeScript on pnpm and Node
14
14
  | Create a migration | `pnpm migrate:create <name>` | `INFO: Migration created at` the new file under `migrations/`, then `INFO: Done.` |
15
15
  | What `pre-push` runs | `pnpm check` | exits 0; the last output is the route table of `next build` with `ƒ /health` |
16
16
  | Every check except `pnpm test:e2e` | `pnpm verify` | exits 0; the last output is the route table of `next build` with `ƒ /health` |
17
- | Render rules after a change | `pnpm rules:sync` | `Synced 69 agent rule files; 0 updated.` |
17
+ | Render rules after a change | `pnpm rules:sync` | `Synced 37 agent rule files; 0 updated.` |
18
18
 
19
19
  ## Verifying your work
20
20
 
@@ -24,6 +24,8 @@ Payload CMS on Next.js App Router and PostgreSQL, in TypeScript on pnpm and Node
24
24
 
25
25
  Run all three before reporting any task complete, and paste the output. `pnpm verify` runs all three.
26
26
 
27
+ The `verifier` subagent starts the app with `pnpm dev`, which needs a PostgreSQL database in `DATABASE_URL` and `PAYLOAD_SECRET` in `.env`. It exercises the changed behavior and the two nearest neighboring flows.
28
+
27
29
  ## Architecture
28
30
 
29
31
  - `src/payload.config.ts` wires the collections in `src/collections/` to PostgreSQL. The site lives in `src/app/(frontend)/`, and `src/app/health/route.ts` serves `/health`. `next.config.ts` builds `output: "standalone"` and leaves Cache Components off.
@@ -35,11 +37,11 @@ Run all three before reporting any task complete, and paste the output. `pnpm ve
35
37
  2. **Put unit tests next to the code as `src/**/*.test.{ts,tsx}` and Playwright end-to-end tests in `test/` as `*.e2e.test.ts`.** Vitest collects only the first pattern.
36
38
  3. **Component tests need a DOM test environment, and Vitest runs in Node.js.** Add that environment with the first component test.
37
39
  4. **Read configuration through `requireEnvironment` in `src/environment.ts`.** Document each variable in `.env.example`.
38
- 5. **Start from the accepted spec, in plan mode** (Cursor: Plan Mode). Give the plan the change's `intent/<change>/intent.md` and `spec.md`. Commit the approved plan as `intent/<change>/plan.md` with an `Accepted by:` line naming the engineer, as `.agents/skills/sdlc/playbooks/build.md` describes.
40
+ 5. **Start from the accepted spec, in plan mode** (Cursor: Plan Mode). Give the plan the change's `intent/<change>/intent.md` and `spec.md`. Commit the approved plan as `intent/<change>/plan.md` with an `Accepted by:` line naming the engineer, as `playbooks/build.md` of the `sdlc-mode` skill in `plugins/sdlc/claude-code/` describes.
39
41
  6. **Start a bug fix with a failing test.** A bug fix has no intent and no spec; its plan, `intent/<short-description>/plan.md`, is accepted by an engineer before any code changes. Reproduce the bug as a test, confirm it fails for the reason you expect, and commit it on a `fix/` branch. Then `.agents/hooks/agent-test-edit-gate.sh` blocks test edits by itself: make the test pass without editing it. On a branch with another name, create `.git/bug-fix-in-progress` first, and delete it once the test passes.
40
- 7. **Do not start work a person did not ask for.** When a message reports a problem without asking for work, answer in a few lines and end with the message that would start it: `/sdlc` followed by their own words.
42
+ 7. **Do not start work a person did not ask for.** When a message reports a problem without asking for work, answer in a few lines and end with the message that would start it: `/sdlc:sdlc-mode` followed by their own words.
41
43
  8. **Branch from the latest `origin/main`, and open the pull request ready for review.** Name the branch `<type>/<short-description>` and fill the body from `.github/pull_request_template.md`. `.github/workflows/ci.yml` runs full verification only on a pull request that is not a draft. Never merge a pull request: a person merges it with `--squash` after code owner approval, bottom-up for a stack of pull requests.
42
- 9. **Write replies a person can check.** Reply in the language the person wrote in. Write paths from the project root, such as `README.md:12`, never from the machine's root. State as a fact only what you opened or ran in this turn, and say what you ran; mark anything else as inferred or not checked. Answer what was asked and stop: leave out tools, services, and steps the request does not need, and never hand the person a check you could run. Send nothing outside the session, such as a message to another session or a service, unless a task step says to.
44
+ 9. **Write replies a person can check.** Write paths from the project root, such as `README.md:12`, never from the machine's root. State as a fact only what you opened or ran in this turn, and say what you ran; mark anything else as inferred or not checked. Answer what was asked and stop: leave out tools, services, and steps the request does not need, and never hand the person a check you could run. Send nothing outside the session, such as a message to another session or a service, unless a task step says to.
43
45
  10. **Run parallel sessions in separate worktrees, on tasks that touch different files.** Start each with `claude --worktree <name>`: a worktree is its own checkout on its own branch. Tasks that share files run in one session, one after another. Start with two or three sessions, and add one only while you can review every stream properly.
44
46
 
45
47
  ## Things Claude gets wrong
@@ -39,7 +39,6 @@ Run the narrowest check that covers the change while you work. Git hooks run the
39
39
  - **Scans:** CI also runs coverage, the build, the container image, and the secret, SAST, OSV, CodeQL, dependency-review, and OpenSSF Scorecard scans. CodeQL, dependency-review, and Scorecard run on public repositories, and on private ones when the `CODE_SCANNING` repository variable is `true`. Dependabot and OSV-Scanner report vulnerable dependencies.
40
40
  - **End-to-end tests:** run `pnpm test:e2e` when you change pages or the admin panel. It starts the development server unless one is already running, and needs `DATABASE_URL` and `PAYLOAD_SECRET` from `.env`. Run `pnpm exec playwright install chromium` once before the first run. CI runs it against the production build and a PostgreSQL service on every pull request that is ready for review and changes code.
41
41
  - **Coverage:** CI requires 95% branch coverage on changed lines in `src/`, except layouts, the Payload config, and generated files.
42
- - **Agent evals:** run `pnpm evals:run` after you change `AGENTS.md`, a skill under `.agents/skills/`, or a hook under `.agents/hooks/`, and add a case name to run one case. It runs the cases in `.agents/skill-evals/` with Claude Code on your own Claude login, so it spends your Claude usage, and it is not part of `pnpm verify`.
43
42
 
44
43
  Run `pnpm verify` for repository changes.
45
44
 
@@ -6,7 +6,7 @@ Run three passes and tag each finding with its pass:
6
6
 
7
7
  - Bugs: logic errors, broken edge cases, subtle regressions
8
8
  - Security: injection risks, authentication gaps, PII in logs
9
- - Compliance: the change matches spec.md, plan.md and the design principles that the four policies in `.agents/skills/` state; flag a plan.md that has no `Accepted by:` line and a change that makes `AGENTS.md` outdated
9
+ - Compliance: the change matches spec.md, plan.md and the design principles that the policies in force state, each the project's own `.agents/skills/<area>-policy/SKILL.md` or else the `sdlc` plugin's default; flag a plan.md that has no `Accepted by:` line and a change that makes `AGENTS.md` outdated
10
10
 
11
11
  ## What Important means here
12
12
 
@@ -17,7 +17,6 @@
17
17
  "clean": "rm -rf .next coverage *.tsbuildinfo .eslintcache node_modules/.cache",
18
18
  "depcruise": "depcruise --config .dependency-cruiser.json src test eslint.config.ts next.config.ts playwright.config.ts vitest.config.ts",
19
19
  "dev": "next dev",
20
- "evals:run": "node scripts/run-agent-evals.ts",
21
20
  "format": "prettier --write --cache .",
22
21
  "format:check": "prettier --check --cache . && editorconfig-checker",
23
22
  "gates:check": "node scripts/check-agent-gates.ts",
@@ -47,11 +46,11 @@
47
46
  "verify:static": "pnpm rules:check && pnpm gates:check && pnpm plan:check && pnpm bands:check && pnpm lint:check && pnpm format:check && pnpm sort-package-json:check && pnpm typecheck && pnpm knip && pnpm depcruise"
48
47
  },
49
48
  "dependencies": {
50
- "@payloadcms/db-postgres": "3.92.1",
51
- "@payloadcms/next": "3.92.1",
52
- "@payloadcms/richtext-lexical": "3.92.1",
53
- "next": "16.4.3",
54
- "payload": "3.92.1",
49
+ "@payloadcms/db-postgres": "3.93.0",
50
+ "@payloadcms/next": "3.93.0",
51
+ "@payloadcms/richtext-lexical": "3.93.0",
52
+ "next": "16.4.5",
53
+ "payload": "3.93.0",
55
54
  "react": "19.3.1",
56
55
  "react-dom": "19.3.1",
57
56
  "sharp": "0.35.5"
@@ -61,14 +60,14 @@
61
60
  "@next-friday/commitlint-config-friday": "4.0.0",
62
61
  "@next-friday/eslint-config-friday": "5.1.0",
63
62
  "@next-friday/prettier-config-friday": "4.0.0",
64
- "@next/eslint-plugin-next": "16.4.3",
63
+ "@next/eslint-plugin-next": "16.4.5",
65
64
  "@playwright/test": "1.64.1",
66
65
  "@swc/core": "1.16.22",
67
66
  "@types/node": "26.6.6",
68
67
  "@types/react": "19.3.0",
69
68
  "@types/react-dom": "19.3.0",
70
- "@vitest/coverage-v8": "5.0.5",
71
- "dependency-cruiser": "18.7.1",
69
+ "@vitest/coverage-v8": "5.1.0",
70
+ "dependency-cruiser": "18.7.2",
72
71
  "editorconfig-checker": "7.0.0",
73
72
  "eslint": "10.14.0",
74
73
  "fast-check": "4.10.2",
@@ -79,7 +78,7 @@
79
78
  "prettier": "3.9.10",
80
79
  "sort-package-json": "4.1.0",
81
80
  "typescript": "7.0.2",
82
- "vitest": "5.0.5",
81
+ "vitest": "5.1.0",
83
82
  "yaml": "2.9.1"
84
83
  },
85
84
  "packageManager": "pnpm@12.6.0+sha512.3ef68f951cb111ac204b4a5a16f0b2ddf0da56a96e0413e81d855d9f0b55ef926714709028e1cd00c405c2c5fb7b9e8ec4dc46777c805d0373c2f2ff00fd20ec",
@@ -6,7 +6,7 @@ Run three passes and tag each finding with its pass:
6
6
 
7
7
  - Bugs: logic errors, broken edge cases, subtle regressions
8
8
  - Security: injection risks, authentication gaps, PII in logs
9
- - Compliance: the change matches spec.md, plan.md and the design principles that the four policies in `.agents/skills/` state; flag a plan.md that has no `Accepted by:` line and a change that makes `AGENTS.md` outdated
9
+ - Compliance: the change matches spec.md, plan.md and the design principles that the policies in force state, each the project's own `.agents/skills/<area>-policy/SKILL.md` or else the `sdlc` plugin's default; flag a plan.md that has no `Accepted by:` line and a change that makes `AGENTS.md` outdated
10
10
 
11
11
  ## What Important means here
12
12
 
@@ -15,7 +15,7 @@ Turborepo workspace in TypeScript on pnpm and Node.js `>=24.22.1 <25`. `apps/app
15
15
  | Create a migration | `pnpm migrate:create <name>` | `INFO: Migration created at` the new file under `migrations/`, then `INFO: Done.` |
16
16
  | What `pre-push` runs | `pnpm check` | exits 0; the output ends with the summary `Tasks: 2 successful, 2 total` |
17
17
  | Every check except `pnpm test:e2e` | `pnpm verify` | exits 0; the output ends with the summary `Tasks: 2 successful, 2 total` |
18
- | Render rules after a change | `pnpm rules:sync` | `Synced 69 agent rule files; 0 updated.` |
18
+ | Render rules after a change | `pnpm rules:sync` | `Synced 37 agent rule files; 0 updated.` |
19
19
 
20
20
  ## Verifying your work
21
21
 
@@ -25,6 +25,8 @@ Turborepo workspace in TypeScript on pnpm and Node.js `>=24.22.1 <25`. `apps/app
25
25
 
26
26
  Run all three before reporting any task complete, and paste the output. `pnpm verify` runs all three.
27
27
 
28
+ The `verifier` subagent starts the app with `pnpm dev`, which needs a PostgreSQL database in `DATABASE_URL` and `PAYLOAD_SECRET` in `.env`. It exercises the changed behavior and the two nearest neighboring flows.
29
+
28
30
  ## Architecture
29
31
 
30
32
  - Root scripts run lint, format, Knip, and the agent checks once for the workspace, and hand `build`, `test`, `typecheck`, and `depcruise` to Turborepo for each app. `TURBO_FILTER` narrows them; the default is every app.
@@ -37,11 +39,11 @@ Run all three before reporting any task complete, and paste the output. `pnpm ve
37
39
  2. **Put unit tests next to the code and Playwright end-to-end tests in `apps/app/test/` and `apps/backoffice/test/` as `*.e2e.test.ts`.** Vitest collects `apps/app/app/**/*.test.{ts,tsx}` and `apps/backoffice/src/**/*.test.{ts,tsx}`.
38
40
  3. **Component tests need a DOM test environment, and Vitest runs in Node.js.** Add that environment with the first component test.
39
41
  4. **Read backoffice configuration through `requireEnvironment` in `apps/backoffice/src/environment.ts`.** Document each variable in `.env.example`.
40
- 5. **Start from the accepted spec, in plan mode** (Cursor: Plan Mode). Give the plan the change's `intent/<change>/intent.md` and `spec.md`. Commit the approved plan as `intent/<change>/plan.md` with an `Accepted by:` line naming the engineer, as `.agents/skills/sdlc/playbooks/build.md` describes.
42
+ 5. **Start from the accepted spec, in plan mode** (Cursor: Plan Mode). Give the plan the change's `intent/<change>/intent.md` and `spec.md`. Commit the approved plan as `intent/<change>/plan.md` with an `Accepted by:` line naming the engineer, as `playbooks/build.md` of the `sdlc-mode` skill in `plugins/sdlc/claude-code/` describes.
41
43
  6. **Start a bug fix with a failing test.** A bug fix has no intent and no spec; its plan, `intent/<short-description>/plan.md`, is accepted by an engineer before any code changes. Reproduce the bug as a test, confirm it fails for the reason you expect, and commit it on a `fix/` branch. Then `.agents/hooks/agent-test-edit-gate.sh` blocks test edits by itself: make the test pass without editing it. On a branch with another name, create `.git/bug-fix-in-progress` first, and delete it once the test passes.
42
- 7. **Do not start work a person did not ask for.** When a message reports a problem without asking for work, answer in a few lines and end with the message that would start it: `/sdlc` followed by their own words.
44
+ 7. **Do not start work a person did not ask for.** When a message reports a problem without asking for work, answer in a few lines and end with the message that would start it: `/sdlc:sdlc-mode` followed by their own words.
43
45
  8. **Branch from the latest `origin/main`, and open the pull request ready for review.** Name the branch `<type>/<short-description>` and fill the body from `.github/pull_request_template.md`. `.github/workflows/ci.yml` runs full verification only on a pull request that is not a draft. Never merge a pull request: a person merges it with `--squash` after code owner approval, bottom-up for a stack of pull requests.
44
- 9. **Write replies a person can check.** Reply in the language the person wrote in. Write paths from the project root, such as `README.md:12`, never from the machine's root. State as a fact only what you opened or ran in this turn, and say what you ran; mark anything else as inferred or not checked. Answer what was asked and stop: leave out tools, services, and steps the request does not need, and never hand the person a check you could run. Send nothing outside the session, such as a message to another session or a service, unless a task step says to.
46
+ 9. **Write replies a person can check.** Write paths from the project root, such as `README.md:12`, never from the machine's root. State as a fact only what you opened or ran in this turn, and say what you ran; mark anything else as inferred or not checked. Answer what was asked and stop: leave out tools, services, and steps the request does not need, and never hand the person a check you could run. Send nothing outside the session, such as a message to another session or a service, unless a task step says to.
45
47
  10. **Run parallel sessions in separate worktrees, on tasks that touch different files.** Start each with `claude --worktree <name>`: a worktree is its own checkout on its own branch. Tasks that share files run in one session, one after another. Start with two or three sessions, and add one only while you can review every stream properly.
46
48
 
47
49
  ## Things Claude gets wrong
@@ -40,7 +40,6 @@ Run the narrowest check that covers the change while you work. Git hooks run the
40
40
  - **Scans:** CI also runs coverage, the build, the container image, and the secret, SAST, OSV, CodeQL, dependency-review, and OpenSSF Scorecard scans. CodeQL, dependency-review, and Scorecard run on public repositories, and on private ones when the `CODE_SCANNING` repository variable is `true`. Dependabot and OSV-Scanner report vulnerable dependencies.
41
41
  - **End-to-end tests:** run `pnpm test:e2e` when you change pages or the admin panel. It builds both apps first, then starts both development servers unless they are already running. The build and the backoffice need `DATABASE_URL`, `PAYLOAD_SECRET`, and `APP_URL` from `.env`. Run `pnpm --filter ./apps/app exec playwright install chromium` once before the first run. CI runs it against the production build and a PostgreSQL service on every pull request that is ready for review and changes code.
42
42
  - **Coverage:** CI requires 95% branch coverage on changed lines in `apps/app/app/` and `apps/backoffice/src/`, except layouts, the Payload config, and generated files.
43
- - **Agent evals:** run `pnpm evals:run` after you change `AGENTS.md`, a skill under `.agents/skills/`, or a hook under `.agents/hooks/`, and add a case name to run one case. It runs the cases in `.agents/skill-evals/` with Claude Code on your own Claude login, so it spends your Claude usage, and it is not part of `pnpm verify`.
44
43
 
45
44
  Run `pnpm verify` for repository changes.
46
45
 
@@ -6,7 +6,7 @@ Run three passes and tag each finding with its pass:
6
6
 
7
7
  - Bugs: logic errors, broken edge cases, subtle regressions
8
8
  - Security: injection risks, authentication gaps, PII in logs
9
- - Compliance: the change matches spec.md, plan.md and the design principles that the four policies in `.agents/skills/` state; flag a plan.md that has no `Accepted by:` line and a change that makes `AGENTS.md` outdated
9
+ - Compliance: the change matches spec.md, plan.md and the design principles that the policies in force state, each the project's own `.agents/skills/<area>-policy/SKILL.md` or else the `sdlc` plugin's default; flag a plan.md that has no `Accepted by:` line and a change that makes `AGENTS.md` outdated
10
10
 
11
11
  ## What Important means here
12
12
 
@@ -18,22 +18,22 @@
18
18
  "typecheck": "next typegen && tsc --noEmit -p tsconfig.json"
19
19
  },
20
20
  "dependencies": {
21
- "next": "16.4.3",
21
+ "next": "16.4.5",
22
22
  "react": "19.3.1",
23
23
  "react-dom": "19.3.1"
24
24
  },
25
25
  "devDependencies": {
26
26
  "@playwright/test": "1.64.1",
27
27
  "@swc/core": "1.16.22",
28
- "@tailwindcss/postcss": "4.3.3",
28
+ "@tailwindcss/postcss": "4.3.4",
29
29
  "@types/node": "26.6.6",
30
30
  "@types/react": "19.3.0",
31
31
  "@types/react-dom": "19.3.0",
32
- "@vitest/coverage-v8": "5.0.5",
33
- "dependency-cruiser": "18.7.1",
34
- "tailwindcss": "4.3.3",
32
+ "@vitest/coverage-v8": "5.1.0",
33
+ "dependency-cruiser": "18.7.2",
34
+ "tailwindcss": "4.3.4",
35
35
  "typescript": "7.0.2",
36
- "vitest": "5.0.5"
36
+ "vitest": "5.1.0"
37
37
  },
38
38
  "engines": {
39
39
  "node": ">=24.22.1 <25"
@@ -23,11 +23,11 @@
23
23
  "typecheck": "next typegen && tsc --noEmit -p tsconfig.json"
24
24
  },
25
25
  "dependencies": {
26
- "@payloadcms/db-postgres": "3.92.1",
27
- "@payloadcms/next": "3.92.1",
28
- "@payloadcms/richtext-lexical": "3.92.1",
29
- "next": "16.4.3",
30
- "payload": "3.92.1",
26
+ "@payloadcms/db-postgres": "3.93.0",
27
+ "@payloadcms/next": "3.93.0",
28
+ "@payloadcms/richtext-lexical": "3.93.0",
29
+ "next": "16.4.5",
30
+ "payload": "3.93.0",
31
31
  "react": "19.3.1",
32
32
  "react-dom": "19.3.1",
33
33
  "sharp": "0.35.5"
@@ -38,11 +38,11 @@
38
38
  "@types/node": "26.6.6",
39
39
  "@types/react": "19.3.0",
40
40
  "@types/react-dom": "19.3.0",
41
- "@vitest/coverage-v8": "5.0.5",
42
- "dependency-cruiser": "18.7.1",
41
+ "@vitest/coverage-v8": "5.1.0",
42
+ "dependency-cruiser": "18.7.2",
43
43
  "fast-check": "4.10.2",
44
44
  "typescript": "7.0.2",
45
- "vitest": "5.0.5"
45
+ "vitest": "5.1.0"
46
46
  },
47
47
  "engines": {
48
48
  "node": ">=24.22.1 <25"
@@ -17,7 +17,6 @@
17
17
  "clean": "rm -rf apps/app/.next apps/app/coverage apps/backoffice/.next apps/backoffice/coverage .turbo coverage *.tsbuildinfo .eslintcache node_modules/.cache",
18
18
  "depcruise": "turbo run depcruise $TURBO_FILTER",
19
19
  "dev": "turbo run dev --filter=./apps/*",
20
- "evals:run": "node scripts/run-agent-evals.ts",
21
20
  "format": "prettier --write --cache .",
22
21
  "format:check": "prettier --check --cache . && editorconfig-checker",
23
22
  "gates:check": "node scripts/check-agent-gates.ts",
@@ -50,7 +49,7 @@
50
49
  "@next-friday/commitlint-config-friday": "4.0.0",
51
50
  "@next-friday/eslint-config-friday": "5.1.0",
52
51
  "@next-friday/prettier-config-friday": "4.0.0",
53
- "@next/eslint-plugin-next": "16.4.3",
52
+ "@next/eslint-plugin-next": "16.4.5",
54
53
  "@types/node": "26.6.6",
55
54
  "editorconfig-checker": "7.0.0",
56
55
  "eslint": "10.14.0",
@@ -1,7 +0,0 @@
1
- {
2
- "verifier": {
3
- "description": "Runs the app and checks the change works before the session reports done",
4
- "readonly": true,
5
- "tools": ["Bash", "Read"]
6
- }
7
- }
@@ -1,42 +0,0 @@
1
- # Skill evals
2
-
3
- Each case under `<skill>/<case>/` is a prompt plus checks that decide whether the agent did the work. `pnpm evals:run` runs every case with Claude Code and the developer's own Claude login; `pnpm evals:run <case> ...` runs the named cases. It copies the project (without `.git` and `node_modules`) to a temporary directory, makes one commit, applies the case's fixture, runs `claude -p` with the prompt, evaluates the checks, prints one line per case, and exits non-zero when any case that ran failed. `AGENT_EVALS_MODEL` sets the model; the default is `claude-haiku-5-5`.
4
-
5
- ## Files of a case
6
-
7
- - `prompt.md`: the prompt, after its front matter.
8
- - `case.yaml`: `expected_outcome`, `timeout_seconds`, an optional `fixture`, and `checks`.
9
- - `fixture.md`: the state the case needs, in prose. A case with this file and no `fixture` in `case.yaml` is reported as `skipped: fixture not machine-applicable`.
10
- - `graders/*.md`: criteria that a model judges. The script does not read them.
11
-
12
- ## Fixture steps
13
-
14
- Steps run in order in the copy. Each is one key:
15
-
16
- | Step | Effect |
17
- | :----------------------- | :--------------------------------------------------------------------------------------------------------- |
18
- | `write: {path, content}` | Writes the file. |
19
- | `commit: <message>` | Commits every change. |
20
- | `branch: <name>` | Creates the branch from the current one and checks it out. |
21
- | `checkout: <name>` | Checks out the branch. |
22
- | `bare_remote: <name>` | Creates a bare repository next to the copy, adds it as the remote `<name>`, and pushes every branch to it. |
23
-
24
- The default branch is `main`.
25
-
26
- ## Checks
27
-
28
- Each entry of `checks` is a kind, or a kind with its argument. Regular expressions use the `m` and `u` flags.
29
-
30
- | Check | Passes when |
31
- | :---------------------------- | :------------------------------------------------------------------------------ |
32
- | `no_file_changes` | The working tree is as the fixture left it. |
33
- | `no_new_commits` | No ref holds a commit that the fixture did not create. |
34
- | `no_new_branch` | No local branch exists that the fixture did not create. |
35
- | `reply_matches: <regex>` | The reply matches. |
36
- | `reply_lacks: <regex>` | The reply does not match. |
37
- | `file_exists: <path>` | The file exists. A glob matches only files the run created or changed. |
38
- | `file_matches: {path, regex}` | A file at `path` matches. A glob matches only files the run created or changed. |
39
- | `commit_touches_only: <glob>` | Every file of the first commit the run made matches the glob. |
40
- | `branch_matches: <regex>` | The checked-out branch matches. |
41
-
42
- A check decides only what a script can decide. What needs judgment stays in `graders/`.
@@ -1,12 +0,0 @@
1
- schema_version: "1.1"
2
- name: answers-question-without-writing
3
- expected_outcome: |
4
- The agent answers why `pnpm verify` runs knip and cites the files it read. It writes no file and makes no commit.
5
- timeout_seconds: 600
6
- checks:
7
- - reply_matches: "knip"
8
- - reply_matches: '[\w./-]+\.(?:json|md|ts|ya?ml)'
9
- - no_file_changes
10
- - no_new_commits
11
- - reply_matches: '[\u0E00-\u0E7F]{10}'
12
- - reply_lacks: '(?:^|[\s`("''])/(?:home|tmp|root|Users|var|private)/'
@@ -1,7 +0,0 @@
1
- ---
2
- type: llm
3
- focus: trace
4
- weight: 1
5
- ---
6
-
7
- The reply explains why `pnpm verify` runs knip and cites at least one file path or command output as its source
@@ -1,7 +0,0 @@
1
- ---
2
- type: llm
3
- focus: trace
4
- weight: 1
5
- ---
6
-
7
- No file in the project is created or changed
@@ -1,7 +0,0 @@
1
- ---
2
- type: llm
3
- focus: trace
4
- weight: 1
5
- ---
6
-
7
- No commit is made, nothing is pushed, and no pull request is opened
@@ -1,7 +0,0 @@
1
- ---
2
- type: llm
3
- focus: trace
4
- weight: 1
5
- ---
6
-
7
- The reply is in the language of the person's message
@@ -1,7 +0,0 @@
1
- ---
2
- type: llm
3
- focus: trace
4
- weight: 1
5
- ---
6
-
7
- Every path in the reply starts from the project root; none starts from the machine's root
@@ -1,7 +0,0 @@
1
- ---
2
- type: llm
3
- focus: trace
4
- weight: 1
5
- ---
6
-
7
- Everything the reply states as a fact is backed by a file the session opened or a command it ran; the rest is marked as inferred or not checked
@@ -1,8 +0,0 @@
1
- ---
2
- tags: [skill-creator]
3
- max_turns: 20
4
- timeout_seconds: 600
5
- allowed_tools: [Read, Glob, Grep, Skill, Write, Edit, Bash]
6
- ---
7
-
8
- /sdlc ทำไม pnpm verify ถึงรัน knip ด้วย
@@ -1,12 +0,0 @@
1
- schema_version: "1.1"
2
- name: build-continues-from-an-accepted-plan
3
- expected_outcome: |
4
- The plan intent/app-version/plan.md exists on the unmerged branch feat/app-version, and the engineer says it is accepted. The agent checks out that branch, implements the plan, runs the checks under Verifying your work, pushes the branch, opens the pull request, reviews it, and stops at the gate for the code owner. It neither approves nor merges.
5
- timeout_seconds: 1800
6
- checks:
7
- - branch_matches: "^feat/app-version$"
8
- - file_matches:
9
- path: intent/app-version/plan.md
10
- regex: '^Accepted by: @joe-dev\.$'
11
- - commit_touches_only: intent/app-version/plan.md
12
- - reply_matches: '[\u0E00-\u0E7F]{10}'
@@ -1 +0,0 @@
1
- `intent/app-version/intent.md` and `intent/app-version/spec.md` are committed on the default branch. The branch `feat/app-version` holds `intent/app-version/plan.md` as its only commit, is pushed, and is not merged, and its `plan.md` has no `Accepted by:` line; the default branch has no `intent/app-version/plan.md`. `origin` is a repository the session can push to, but it has no pull request host.
@@ -1,7 +0,0 @@
1
- ---
2
- type: llm
3
- focus: trace
4
- weight: 1
5
- ---
6
-
7
- The work happens on the branch `feat/app-version`
@@ -1,7 +0,0 @@
1
- ---
2
- type: llm
3
- focus: trace
4
- weight: 1
5
- ---
6
-
7
- The files the plan names are implemented, and the checks under Verifying your work were run with their output shown
@@ -1,7 +0,0 @@
1
- ---
2
- type: llm
3
- focus: trace
4
- weight: 1
5
- ---
6
-
7
- The branch is pushed, and the reply either gives the pull request URL or says no pull request could be opened and names the branch
@@ -1,7 +0,0 @@
1
- ---
2
- type: llm
3
- focus: trace
4
- weight: 1
5
- ---
6
-
7
- The reply lists the steps of `build.md`, `open-pr.md`, and `review.md`, each under its file name
@@ -1,7 +0,0 @@
1
- ---
2
- type: llm
3
- focus: trace
4
- weight: 1
5
- ---
6
-
7
- The session neither approves nor merges a pull request
@@ -1,7 +0,0 @@
1
- ---
2
- type: llm
3
- focus: trace
4
- weight: 1
5
- ---
6
-
7
- The reply ends at the gate that waits on the code owner
@@ -1,7 +0,0 @@
1
- ---
2
- type: llm
3
- focus: trace
4
- weight: 1
5
- ---
6
-
7
- The plan's `Accepted by:` line names `@joe-dev`, and `plan.md` with that line is committed before any other change on the branch
@@ -1,8 +0,0 @@
1
- ---
2
- tags: [skill-creator]
3
- max_turns: 60
4
- timeout_seconds: 1800
5
- allowed_tools: [Read, Glob, Grep, Skill, Write, Edit, Bash]
6
- ---
7
-
8
- /sdlc ผม @joe-dev ยอมรับแผนใน intent/app-version/plan.md แล้ว ลงมือทำต่อได้เลย
@@ -1,71 +0,0 @@
1
- schema_version: "1.1"
2
- name: build-interviews-before-planning
3
- expected_outcome: |
4
- The spec intent/app-version/spec.md is merged and has no plan, and the request names no files, order of work, or tests. The agent reads the intent, the spec, and the code, asks numbered questions that each carry a recommended answer, shows no plan yet, changes no code and makes no commit.
5
- timeout_seconds: 900
6
- fixture:
7
- - write:
8
- path: intent/app-version/intent.md
9
- content: |
10
- # Intent: app version endpoint
11
-
12
- Author: Joe (Developer Productivity). Status: accepted.
13
-
14
- ## Problem
15
-
16
- Support cannot tell which version of the service a customer reaches. Each ticket about a regression starts with a question about the version, about ten times a week (count from the support queue).
17
-
18
- ## Proposed outcome
19
-
20
- A caller sees the running version at `GET /version`. Out of scope: build metadata.
21
-
22
- ## Affected users and systems
23
-
24
- Support engineers and the service's HTTP API.
25
-
26
- ## Constraints
27
-
28
- No authentication change.
29
-
30
- ## Open questions
31
-
32
- None
33
- - write:
34
- path: intent/app-version/spec.md
35
- content: |
36
- # Spec: app version endpoint
37
-
38
- From `intent/app-version/intent.md`. Status: accepted.
39
-
40
- Request: "add a version endpoint". Skills at `0000000`.
41
-
42
- ## Requirements
43
-
44
- 1. `GET /version` answers 200 with the JSON body `{"version": "<version in package.json>"}` and no other field.
45
-
46
- ## Design
47
-
48
- `src/version/version.controller.ts` (new) reads the version from `package.json` and returns it.
49
-
50
- ## Policies
51
-
52
- - Brand: Does not apply, no user-visible text.
53
- - Security: Does not apply, the endpoint exposes no secret.
54
- - Compliance: Does not apply, no personal data.
55
- - UX: Does not apply, no interface.
56
-
57
- ## Areas of concern
58
-
59
- None
60
-
61
- ## Open questions
62
-
63
- None
64
- - commit: "docs: add app-version intent and spec"
65
- checks:
66
- - reply_matches: '^\s*(?:\*\*)?1[.)]'
67
- - reply_matches: '^\s*(?:\*\*)?2[.)]'
68
- - reply_lacks: '(?=[\s\S]*Files that change)(?=[\s\S]*Order of work)(?=[\s\S]*Risks)(?=[\s\S]*Proof)'
69
- - no_file_changes
70
- - no_new_commits
71
- - reply_matches: '[\u0E00-\u0E7F]{10}'
@@ -1 +0,0 @@
1
- `intent/app-version/intent.md` and `intent/app-version/spec.md` are committed on the default branch, and no `intent/app-version/plan.md` exists on any branch.
@@ -1,7 +0,0 @@
1
- ---
2
- type: llm
3
- focus: trace
4
- weight: 1
5
- ---
6
-
7
- The reply asks numbered questions about the files the change touches, the order of the work, the tests that prove it, or the options the engineer rules out; each carries a concrete recommended answer that "yes" could accept, or says that it has none to recommend