@event4u/agent-config 8.13.0 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (279) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +136 -0
  3. package/README.md +1 -1
  4. package/dist/agent-src/commands/agent-handoff.md +35 -0
  5. package/dist/agent-src/commands/agents/init.md +1 -0
  6. package/dist/agent-src/commands/agents/optimize.md +1 -0
  7. package/dist/agent-src/commands/agents/user/accept.md +3 -2
  8. package/dist/agent-src/commands/agents/user/init.md +5 -4
  9. package/dist/agent-src/commands/agents/user/update.md +3 -2
  10. package/dist/agent-src/commands/agents/user.md +1 -0
  11. package/dist/agent-src/commands/agents.md +1 -0
  12. package/dist/agent-src/commands/analytics/show.md +1 -0
  13. package/dist/agent-src/commands/analytics.md +1 -0
  14. package/dist/agent-src/commands/analyze/decision.md +1 -0
  15. package/dist/agent-src/commands/analyze/incident.md +1 -0
  16. package/dist/agent-src/commands/analyze/near-miss.md +1 -0
  17. package/dist/agent-src/commands/analyze/postmortem.md +1 -0
  18. package/dist/agent-src/commands/analyze/premortem.md +1 -0
  19. package/dist/agent-src/commands/analyze/reference-repo.md +1 -0
  20. package/dist/agent-src/commands/analyze.md +3 -2
  21. package/dist/agent-src/commands/brand/identity.md +6 -5
  22. package/dist/agent-src/commands/brand/review.md +6 -5
  23. package/dist/agent-src/commands/brand/strategy.md +6 -4
  24. package/dist/agent-src/commands/brand/tokens.md +7 -6
  25. package/dist/agent-src/commands/brand/voice.md +5 -4
  26. package/dist/agent-src/commands/brand.md +9 -7
  27. package/dist/agent-src/commands/bug/fix.md +1 -0
  28. package/dist/agent-src/commands/bug/investigate.md +1 -0
  29. package/dist/agent-src/commands/bug.md +2 -1
  30. package/dist/agent-src/commands/challenge-me/vision.md +1 -0
  31. package/dist/agent-src/commands/challenge-me/with-docs.md +1 -0
  32. package/dist/agent-src/commands/challenge-me.md +28 -6
  33. package/dist/agent-src/commands/chat-history.md +1 -0
  34. package/dist/agent-src/commands/check-current-md.md +1 -0
  35. package/dist/agent-src/commands/commit.md +1 -0
  36. package/dist/agent-src/commands/context/create.md +3 -2
  37. package/dist/agent-src/commands/context.md +1 -0
  38. package/dist/agent-src/commands/cost/profile.md +1 -0
  39. package/dist/agent-src/commands/cost.md +2 -1
  40. package/dist/agent-src/commands/council/analysis.md +1 -0
  41. package/dist/agent-src/commands/council/debate.md +1 -0
  42. package/dist/agent-src/commands/council/default.md +21 -20
  43. package/dist/agent-src/commands/council/design.md +1 -0
  44. package/dist/agent-src/commands/council/optimize.md +1 -0
  45. package/dist/agent-src/commands/council/pr.md +1 -0
  46. package/dist/agent-src/commands/council.md +1 -0
  47. package/dist/agent-src/commands/estimate-ticket.md +1 -0
  48. package/dist/agent-src/commands/feature/dev.md +1 -0
  49. package/dist/agent-src/commands/feature/explore.md +1 -0
  50. package/dist/agent-src/commands/feature/plan.md +1 -0
  51. package/dist/agent-src/commands/feature/refactor.md +1 -0
  52. package/dist/agent-src/commands/feature/roadmap.md +1 -0
  53. package/dist/agent-src/commands/feature.md +2 -1
  54. package/dist/agent-src/commands/fix/pr-comments.md +19 -0
  55. package/dist/agent-src/commands/fix.md +2 -1
  56. package/dist/agent-src/commands/ghostwriter/delete.md +1 -0
  57. package/dist/agent-src/commands/ghostwriter/fetch.md +1 -0
  58. package/dist/agent-src/commands/ghostwriter/show.md +1 -0
  59. package/dist/agent-src/commands/ghostwriter/write.md +1 -0
  60. package/dist/agent-src/commands/ghostwriter.md +1 -0
  61. package/dist/agent-src/commands/grill-me.md +17 -12
  62. package/dist/agent-src/commands/humanize.md +1 -0
  63. package/dist/agent-src/commands/image/analyse.md +2 -1
  64. package/dist/agent-src/commands/image/create.md +1 -0
  65. package/dist/agent-src/commands/image/verify.md +1 -0
  66. package/dist/agent-src/commands/image.md +16 -12
  67. package/dist/agent-src/commands/implement-ticket.md +1 -0
  68. package/dist/agent-src/commands/judge/on-diff.md +1 -0
  69. package/dist/agent-src/commands/judge/solo.md +1 -0
  70. package/dist/agent-src/commands/judge/steps.md +1 -0
  71. package/dist/agent-src/commands/judge.md +1 -0
  72. package/dist/agent-src/commands/knowledge/cross-repo.md +1 -0
  73. package/dist/agent-src/commands/knowledge/forget.md +1 -0
  74. package/dist/agent-src/commands/knowledge/ingest.md +1 -0
  75. package/dist/agent-src/commands/knowledge/list.md +10 -0
  76. package/dist/agent-src/commands/knowledge.md +1 -0
  77. package/dist/agent-src/commands/memory/learn-low-impact.md +1 -0
  78. package/dist/agent-src/commands/memory/mine-session.md +1 -0
  79. package/dist/agent-src/commands/memory/promote.md +3 -2
  80. package/dist/agent-src/commands/memory.md +1 -0
  81. package/dist/agent-src/commands/mission/upgrade.md +45 -24
  82. package/dist/agent-src/commands/mode.md +1 -0
  83. package/dist/agent-src/commands/module/create.md +1 -0
  84. package/dist/agent-src/commands/module/explore.md +1 -0
  85. package/dist/agent-src/commands/module.md +1 -0
  86. package/dist/agent-src/commands/optimize/agents-dir.md +1 -0
  87. package/dist/agent-src/commands/optimize/project.md +1 -0
  88. package/dist/agent-src/commands/optimize/prompt.md +1 -0
  89. package/dist/agent-src/commands/optimize.md +2 -1
  90. package/dist/agent-src/commands/orchestrate.md +1 -0
  91. package/dist/agent-src/commands/override.md +1 -0
  92. package/dist/agent-src/commands/package.md +2 -1
  93. package/dist/agent-src/commands/post-as/ghostwriter.md +1 -0
  94. package/dist/agent-src/commands/post-as/me.md +1 -0
  95. package/dist/agent-src/commands/post-as.md +1 -0
  96. package/dist/agent-src/commands/pr/create/description-only.md +1 -0
  97. package/dist/agent-src/commands/pr/create.md +19 -17
  98. package/dist/agent-src/commands/prediction-pool.md +7 -6
  99. package/dist/agent-src/commands/prepare-for-review.md +1 -0
  100. package/dist/agent-src/commands/profile/activate.md +1 -0
  101. package/dist/agent-src/commands/profile/deactivate.md +1 -0
  102. package/dist/agent-src/commands/profile.md +1 -0
  103. package/dist/agent-src/commands/project.md +2 -1
  104. package/dist/agent-src/commands/refine-ticket.md +7 -0
  105. package/dist/agent-src/commands/research/deep.md +1 -0
  106. package/dist/agent-src/commands/research.md +1 -0
  107. package/dist/agent-src/commands/review/routing.md +1 -0
  108. package/dist/agent-src/commands/review.md +2 -1
  109. package/dist/agent-src/commands/roadmap/ai-council.md +1 -0
  110. package/dist/agent-src/commands/roadmap/materialize.md +1 -0
  111. package/dist/agent-src/commands/roadmap/process-full.md +1 -0
  112. package/dist/agent-src/commands/roadmap/process-phase.md +1 -0
  113. package/dist/agent-src/commands/roadmap/process-step.md +1 -0
  114. package/dist/agent-src/commands/roadmap.md +1 -0
  115. package/dist/agent-src/commands/security-audit-config.md +2 -1
  116. package/dist/agent-src/commands/skill/preview.md +1 -0
  117. package/dist/agent-src/commands/skill.md +1 -0
  118. package/dist/agent-src/commands/skills/discover.md +1 -0
  119. package/dist/agent-src/commands/skills.md +1 -0
  120. package/dist/agent-src/commands/sync/agent-settings.md +1 -0
  121. package/dist/agent-src/commands/sync.md +2 -1
  122. package/dist/agent-src/commands/team/adversarial.md +3 -2
  123. package/dist/agent-src/commands/team/delegate.md +3 -2
  124. package/dist/agent-src/commands/team/review.md +3 -2
  125. package/dist/agent-src/commands/team/status.md +49 -18
  126. package/dist/agent-src/commands/team-knowledge.md +8 -6
  127. package/dist/agent-src/commands/team.md +21 -16
  128. package/dist/agent-src/commands/tests/e2e-heal.md +1 -0
  129. package/dist/agent-src/commands/tests/e2e-plan.md +1 -0
  130. package/dist/agent-src/commands/tests/execute.md +1 -0
  131. package/dist/agent-src/commands/tests.md +2 -1
  132. package/dist/agent-src/commands/update-form-request-messages.md +1 -0
  133. package/dist/agent-src/commands/upstream-contribute.md +1 -0
  134. package/dist/agent-src/commands/video/from-script.md +3 -2
  135. package/dist/agent-src/commands/video/from-song.md +22 -21
  136. package/dist/agent-src/commands/video/scene.md +1 -0
  137. package/dist/agent-src/commands/video/stitch.md +2 -1
  138. package/dist/agent-src/commands/video/storyboard.md +1 -0
  139. package/dist/agent-src/commands/video.md +1 -0
  140. package/dist/agent-src/commands/work.md +1 -0
  141. package/dist/agent-src/commands/worktree/cleanup.md +8 -7
  142. package/dist/agent-src/commands/worktree/create.md +1 -0
  143. package/dist/agent-src/commands/worktree/verify.md +1 -0
  144. package/dist/agent-src/commands/worktree.md +1 -0
  145. package/dist/agent-src/rules/active-remediation.md +12 -36
  146. package/dist/agent-src/rules/artifact-drafting-protocol.md +7 -64
  147. package/dist/agent-src/rules/context-hygiene.md +19 -113
  148. package/dist/agent-src/rules/design-fidelity.md +4 -60
  149. package/dist/agent-src/rules/domain-adoption-policy.md +10 -106
  150. package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +12 -60
  151. package/dist/agent-src/rules/improve-before-implement.md +4 -0
  152. package/dist/agent-src/rules/minimal-safe-diff.md +6 -86
  153. package/dist/agent-src/rules/size-enforcement.md +10 -0
  154. package/dist/agent-src/rules/tool-safety.md +17 -3
  155. package/dist/agent-src/skills/agent-security-review/SKILL.md +12 -1
  156. package/dist/agent-src/skills/ai-council/SKILL.md +11 -0
  157. package/dist/agent-src/skills/bug-analyzer/SKILL.md +24 -2
  158. package/dist/agent-src/skills/code-review/SKILL.md +105 -93
  159. package/dist/agent-src/skills/code-review/checklists/backend.md +50 -0
  160. package/dist/agent-src/skills/code-review/checklists/database.md +19 -0
  161. package/dist/agent-src/skills/code-review/checklists/dependency.md +18 -0
  162. package/dist/agent-src/skills/code-review/checklists/docs.md +14 -0
  163. package/dist/agent-src/skills/code-review/checklists/frontend.md +19 -0
  164. package/dist/agent-src/skills/code-review/checklists/infra.md +17 -0
  165. package/dist/agent-src/skills/code-review/checklists/producing-the-review.md +62 -0
  166. package/dist/agent-src/skills/code-review/checklists/test-only.md +13 -0
  167. package/dist/agent-src/skills/code-review/evals/evals.json +53 -15
  168. package/dist/agent-src/skills/condense-memory/SKILL.md +3 -2
  169. package/dist/agent-src/skills/conventional-commits-writing/evals/evals.json +15 -0
  170. package/dist/agent-src/skills/docker/SKILL.md +10 -0
  171. package/dist/agent-src/skills/docx-authoring/SKILL.md +102 -0
  172. package/dist/agent-src/skills/github-ci/evals/evals.json +25 -0
  173. package/dist/agent-src/skills/humanizer/SKILL.md +79 -3
  174. package/dist/agent-src/skills/humanizer/references/anti-aiisms.md +112 -0
  175. package/dist/agent-src/skills/humanizer/references/fixtures.md +70 -0
  176. package/dist/agent-src/skills/judge-bug-hunter/SKILL.md +7 -1
  177. package/dist/agent-src/skills/laravel/SKILL.md +10 -0
  178. package/dist/agent-src/skills/launch-readiness/SKILL.md +35 -0
  179. package/dist/agent-src/skills/merge-conflicts/SKILL.md +30 -0
  180. package/dist/agent-src/skills/pdf-tools/SKILL.md +101 -0
  181. package/dist/agent-src/skills/quality-tools/evals/evals.json +15 -0
  182. package/dist/agent-src/skills/security-audit/SKILL.md +29 -0
  183. package/dist/agent-src/skills/security-maturity-assessment/SKILL.md +90 -0
  184. package/dist/agent-src/skills/security-maturity-assessment/evals/triggers.json +52 -0
  185. package/dist/agent-src/skills/skill-writing/SKILL.md +79 -0
  186. package/dist/agent-src/skills/spreadsheet-authoring/SKILL.md +11 -3
  187. package/dist/agent-src/skills/subagent-orchestration/schemas/team-review-status.json +103 -0
  188. package/dist/agent-src/skills/terraform/SKILL.md +10 -0
  189. package/dist/agent-src/skills/test-driven-development/SKILL.md +31 -0
  190. package/dist/agent-src/skills/threat-modeling/SKILL.md +15 -0
  191. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  192. package/dist/agent-src/templates/scripts/telemetry/aggregator.ts +0 -0
  193. package/dist/agent-src/templates/scripts/telemetry/engagement.ts +30 -0
  194. package/dist/agent-src/templates/scripts/telemetry/report_renderer.ts +22 -9
  195. package/dist/agent-src/templates/scripts/telemetry_record.ts +5 -0
  196. package/dist/discovery/deprecation-report.md +1 -1
  197. package/dist/discovery/discovery-manifest.json +256 -190
  198. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  199. package/dist/discovery/discovery-manifest.summary.md +5 -5
  200. package/dist/discovery/orphan-report.md +1 -1
  201. package/dist/discovery/packs.json +20 -17
  202. package/dist/discovery/trust-report.md +3 -3
  203. package/dist/discovery/workspaces.json +16 -13
  204. package/dist/install/install.mjs +10 -2
  205. package/dist/mcp/registry-manifest.json +3 -3
  206. package/dist/router.json +1 -1
  207. package/dist/scripts/condense.js +5 -0
  208. package/dist/scripts/condense.js.map +1 -1
  209. package/dist/server/schemas/settings.js +5 -1
  210. package/dist/server/schemas/settings.js.map +1 -1
  211. package/docs/CLAIMS.md +8 -1
  212. package/docs/SKILL_CENSUS.md +8 -0
  213. package/docs/architecture.md +2 -2
  214. package/docs/benchmark.md +67 -2
  215. package/docs/catalog.md +2 -2
  216. package/docs/contracts/ai-council-config.md +9 -2
  217. package/docs/contracts/ai-team-config.md +37 -4
  218. package/docs/contracts/prelaunch-diagnostics.md +151 -0
  219. package/docs/contracts/release-pr-gating.md +1 -0
  220. package/docs/decisions/ADR-049-configuration-trust-boundary.md +9 -1
  221. package/docs/featured-skills.md +2 -2
  222. package/docs/getting-started-by-role.md +1 -1
  223. package/docs/getting-started.md +16 -5
  224. package/docs/governance-advantage.md +1 -1
  225. package/docs/guidelines/agent-infra/active-remediation-mechanics.md +45 -0
  226. package/docs/guidelines/agent-infra/agent-interaction-and-decision-quality.md +28 -0
  227. package/docs/guidelines/agent-infra/artifact-drafting-protocol-mechanics.md +76 -0
  228. package/docs/guidelines/agent-infra/context-hygiene-mechanics.md +90 -0
  229. package/docs/guidelines/agent-infra/domain-adoption-gates.md +112 -0
  230. package/docs/guidelines/agent-infra/framework-neutrality-patterns.md +66 -0
  231. package/docs/guidelines/agent-infra/minimal-safe-diff-mechanics.md +99 -0
  232. package/docs/guidelines/agent-infra/skill-quality-checklist.md +13 -0
  233. package/docs/guidelines/design-fidelity-mechanics.md +76 -0
  234. package/docs/parity/command-frontmatter.md +60 -0
  235. package/docs/proof.md +6 -5
  236. package/package.json +1 -1
  237. package/src/agent-src/templates/scripts/telemetry/aggregator.ts +0 -0
  238. package/src/agent-src/templates/scripts/telemetry/engagement.ts +30 -0
  239. package/src/agent-src/templates/scripts/telemetry/report_renderer.ts +22 -9
  240. package/src/agent-src/templates/scripts/telemetry_record.ts +5 -0
  241. package/src/config/agent-settings.template.yml +34 -10
  242. package/src/config/prelaunch-areas.yml +36 -0
  243. package/src/scripts/_cli/cmd_doctor.ts +118 -26
  244. package/src/scripts/_lib/claude_plugin.ts +77 -2
  245. package/src/scripts/_lib/orchestration_record.ts +5 -0
  246. package/src/scripts/_lib/tool_adapter_registry.ts +120 -0
  247. package/src/scripts/ai_team/config.ts +73 -1
  248. package/src/scripts/ai_team/review_gate.ts +636 -0
  249. package/src/scripts/ai_team/team_dispatch.ts +612 -0
  250. package/src/scripts/bench_ab_task_runner.ts +11 -1
  251. package/src/scripts/bench_parity_count.ts +279 -0
  252. package/src/scripts/build_linear_digest.ts +3 -1
  253. package/src/scripts/check_bridge_derivation.ts +172 -0
  254. package/src/scripts/check_consumer_scope_flip.ts +179 -0
  255. package/src/scripts/check_council_config_location.ts +115 -15
  256. package/src/scripts/check_host_loadability.ts +81 -0
  257. package/src/scripts/condense.ts +5 -0
  258. package/src/scripts/hook_manifest.yaml +12 -1
  259. package/src/scripts/lint_handoffs.ts +42 -0
  260. package/src/scripts/lint_skill_descriptions.ts +228 -0
  261. package/src/scripts/lint_skill_descriptions_allowlist.json +1 -0
  262. package/src/scripts/lint_skill_scripts_readonly.ts +145 -0
  263. package/src/scripts/lint_skill_scripts_readonly_allowlist.json +8 -0
  264. package/src/scripts/lint_supported_tools_matrix.ts +35 -0
  265. package/src/scripts/optimize_skill_description.ts +144 -0
  266. package/src/scripts/orchestration_record.ts +2 -1
  267. package/src/scripts/prelaunch_diagnostics.ts +248 -0
  268. package/src/scripts/run_skill_evals.ts +70 -4
  269. package/src/scripts/schemas/command.schema.json +7 -0
  270. package/src/scripts/schemas/evals.schema.json +105 -14
  271. package/src/scripts/schemas/prelaunch-report.schema.json +107 -0
  272. package/src/scripts/schemas/skill.schema.json +18 -1
  273. package/src/scripts/schemas/subagent.schema.json +6 -0
  274. package/src/scripts/skill_linter.ts +43 -3
  275. package/src/scripts/smoke_host_loadability.sh +73 -0
  276. package/src/scripts/team_review_gate_hook.ts +115 -0
  277. package/src/scripts/trigger_eval_grandfather.json +1 -2
  278. package/src/scripts/utilization_report.ts +225 -0
  279. package/src/server/schemas/settings.ts +9 -1
@@ -26,84 +26,88 @@ Use this skill when:
26
26
 
27
27
  ### Mindset
28
28
 
29
- - **Be thorough but pragmatic** — catch real bugs, not style nitpicks that tools handle.
30
- - **Understand intent first** — read the PR description, linked ticket, and commit messages before looking at code.
31
- - **Check the full picture** — a change in a service may require changes in tests, migrations, docs.
29
+ - **Be thorough but pragmatic** — catch real bugs, not style nitpicks tools handle.
30
+ - **Understand intent first** — read PR description, linked ticket, commit messages before code.
31
+ - **Check the full picture** — a service change may require test / migration / doc changes.
32
32
  - **Assume good intent** — suggest improvements, don't criticize.
33
33
 
34
34
  ### Review order
35
35
 
36
36
  1. **Understand the goal** — what is this change trying to achieve?
37
- 2. **Architecture** — does the approach make sense? Right layer? Right pattern?
38
- 3. **Correctness** — does it actually work? Edge cases? Error handling?
39
- 4. **Quality** — types, naming, readability, DRY, SOLID?
40
- 5. **Security** — input validation, authorization, injection?
41
- 6. **Performance** — N+1 queries, missing indexes, unbounded queries?
42
- 7. **Tests** — are new paths covered? Are existing tests still valid?
43
- 8. **Conventions** — does it follow project standards?
44
-
45
- ## Review checklist
46
-
47
- The checks below are stack-agnostic. For framework-specific conventions (PSR-12 + `declare(strict_types=1)`, FormRequest, single-action `__invoke`, API Resources, Pest, Blade escaping, Eloquent N+1) defer to the carve-outs:
48
- - PHP / Laravel → [`laravel`](../laravel/SKILL.md), [`laravel-validation`](../laravel-validation/SKILL.md), [`eloquent`](../eloquent/SKILL.md), [`pest-testing`](../pest-testing/SKILL.md), [`blade-ui`](../blade-ui/SKILL.md), [`php-coder`](../php-coder/SKILL.md)
49
- - Symfony → [`symfony-workflow`](../symfony-workflow/SKILL.md)
50
- - Next.js / TS → [`nextjs-patterns`](../nextjs-patterns/SKILL.md), [`react-shadcn-ui`](../react-shadcn-ui/SKILL.md)
51
-
52
- ### Code quality
53
-
54
- | Check | What to look for |
55
- |---|---|
56
- | **Type discipline** | New code is fully typed in the project's idiom (PHP typed properties + `declare(strict_types=1)`, TS strict, Python type hints, Go / Rust by construction). |
57
- | **Style conformance** | Matches the project's formatter / linter output — no reformatting battles, no out-of-band style. |
58
- | **Naming** | Clear, descriptive names; matches the dominant casing in the surrounding code (camelCase / snake_case / PascalCase per the language's idiom). |
59
- | **Early returns** | No deep nesting. Guard clauses at the top. |
60
- | **Single responsibility** | Each class / module / function does one thing. HTTP handlers stay thin. |
61
- | **No magic** | No reach-through to globals (`app()`, `$_GET`, ambient context). No untyped data shapes leaking out of the I/O boundary. |
62
- | **Doc comments** | Only where the type system is insufficient (generics, complex shapes). No redundant docblocks. |
63
-
64
- ### Architecture
65
-
66
- | Check | What to look for |
67
- |---|---|
68
- | **Layer separation** | Business logic in services / use-cases, not in HTTP handlers. Domain models stay I/O-free. |
69
- | **Handler shape** | New handlers follow the framework's recommended shape (Laravel single-action `__invoke`, Next.js route handler, Express handler-per-route). See the stack carve-out. |
70
- | **Input validation** | Validated at the request boundary via the framework's primitive (Laravel `FormRequest`, Zod / class-validator, Pydantic, struct-tag validators). No ad-hoc inline `if` checks. |
71
- | **Response shaping** | Returns through a transformer / serializer / DTO. Never returns raw ORM entities. |
72
- | **DTOs / value objects** | Structured data between layers, not raw associative arrays / `any` / `dict[str, Any]`. |
73
- | **Dependency injection** | Constructor injection (or framework-idiomatic equivalent). No service-locator calls in business logic. |
74
-
75
- ### Database & Performance
76
-
77
- | Check | What to look for |
78
- |---|---|
79
- | **N+1 queries** | Relationship / association access in loops without eager / batch loading. |
80
- | **Missing indexes** | New columns used in `WHERE` / `JOIN` without a supporting index. |
81
- | **Unbounded queries** | Full-table reads (`Model::all()`, `SELECT *` without `LIMIT`, unpaged list endpoints). |
82
- | **Raw SQL** | Parameterised queries only. No string concatenation with user input. |
83
- | **Migrations** | Reversible. Targets the right connection / schema. Idempotent where the platform supports it. |
84
- | **Money / precision** | Uses an exact-precision type (PHP `decimal` / `Math` helper, TS bigint / decimal lib, Python `Decimal`), never `float`. |
85
-
86
- ### Security
87
-
88
- | Check | What to look for |
89
- |---|---|
90
- | **Authorization** | Authz check at every state-changing endpoint (Laravel Policy, Symfony voter, NestJS guard, framework middleware). No unprotected mutating routes. |
91
- | **Input validation** | All user input validated at the boundary via the framework's primitive. |
92
- | **Mass assignment** | No bulk-binding raw request payloads to ORM entities without an explicit allow-list (`$fillable` / `$guarded` in Laravel, DTO mapping in TS / Python). |
93
- | **Injection** | No raw queries / command lines / template strings with unescaped user input. |
94
- | **Output encoding** | Template output is escaped by default; raw / unescaped output is intentional and reviewed (Blade `{{ }}` vs `{!! !!}`, React `dangerouslySetInnerHTML`, Jinja `\|safe`). |
95
- | **Sensitive data** | No secrets, tokens, or passwords in code, logs, or error responses. |
96
-
97
- ### Tests
98
-
99
- | Check | What to look for |
100
- |---|---|
101
- | **Coverage** | New code paths have tests. Bug fixes have regression tests (RED → GREEN). |
102
- | **Test quality** | Tests verify behaviour, not implementation details. |
103
- | **Framework idiom** | Correct conventions for the project's test framework (Pest / PHPUnit, Jest / Vitest, pytest, `go test`, `cargo test`) — see the stack carve-out for specifics. |
104
- | **Test data** | Provisioned via the project's idiom (seeders, factories, fixtures, builders). |
105
- | **Assertions** | Meaningful assertions. Not just "no exception thrown". |
106
- | **Flaky risks** | Time-dependent tests freeze the clock (`travel()`, `jest.useFakeTimers()`, `freezegun`). No reliance on execution speed. |
37
+ 2. **Detect the change-type + depth** — route to the right checklist, pick review depth (below).
38
+ 3. **Architecture** — approach sound? Right layer? Right pattern?
39
+ 4. **Correctness** — does it work? Edge cases? Error handling?
40
+ 5. **Quality** — types, naming, readability, DRY, SOLID?
41
+ 6. **Security** — input validation, authorization, injection?
42
+ 7. **Performance** — N+1 queries, missing indexes, unbounded queries?
43
+ 8. **Tests** — are new paths covered? Are existing tests still valid?
44
+ 9. **Conventions** — does it follow project standards?
45
+
46
+ ## Change-type routing — load only the checklist the diff needs
47
+
48
+ Per-domain checklists live in `checklists/`, loaded **on demand** — a review
49
+ carries only the depth the change needs (progressive disclosure; a dependency
50
+ bump does not pay for the backend security table). Detect the change-type from
51
+ the diff's file paths, then read the matching file:
52
+
53
+ | Change-type | File-pattern signal (any match) | Checklist |
54
+ |---|---|---|
55
+ | **dependency** (expedited) | ONLY `composer.json`/`*.lock`, `package.json`/lockfiles, `pyproject.toml`, `go.mod`/`go.sum`, `Cargo.toml`/`*.lock` | [`checklists/dependency.md`](checklists/dependency.md) |
56
+ | **migration / database** | `**/migrations/**`, `**/*migration*`, schema files, query-heavy data-access code | [`checklists/database.md`](checklists/database.md) |
57
+ | **frontend / UI** | `*.tsx`, `*.jsx`, `*.vue`, `*.blade.php`, `*.css`, `components/**`, `resources/views/**` | [`checklists/frontend.md`](checklists/frontend.md) |
58
+ | **infra / IaC / CI** | `*.tf`, `Dockerfile*`, `k8s/**`, `*.yaml` under `.github/workflows/`, Pulumi/Ansible | [`checklists/infra.md`](checklists/infra.md) |
59
+ | **test-only** | ONLY `tests/**`, `*.test.*`, `*.spec.*`, `*Test.php` | [`checklists/test-only.md`](checklists/test-only.md) |
60
+ | **docs-only** | ONLY `*.md`, `docs/**` | [`checklists/docs.md`](checklists/docs.md) |
61
+ | **backend / default** | anything else (server-side logic) | [`checklists/backend.md`](checklists/backend.md) |
62
+
63
+ A diff spanning several types loads each matching checklist; a mixed diff is
64
+ never downgraded to the expedited path (a lockfile bump *plus* code is backend
65
+ + dependency). Every `checklists/*.md` file MUST be reachable from a row above.
66
+
67
+ Framework-specific conventions defer to the carve-outs: PHP / Laravel →
68
+ [`laravel`](../laravel/SKILL.md), [`laravel-validation`](../laravel-validation/SKILL.md),
69
+ [`eloquent`](../eloquent/SKILL.md), [`pest-testing`](../pest-testing/SKILL.md),
70
+ [`blade-ui`](../blade-ui/SKILL.md), [`php-coder`](../php-coder/SKILL.md);
71
+ Symfony → [`symfony-workflow`](../symfony-workflow/SKILL.md); Next.js / TS →
72
+ [`nextjs-patterns`](../nextjs-patterns/SKILL.md), [`react-shadcn-ui`](../react-shadcn-ui/SKILL.md).
73
+
74
+ ### Metadata gates — verdict `❓` until satisfied
75
+
76
+ Some changes are unverifiable from source; when a gate fires the verdict is
77
+ `❓`, not approval — ask for the missing evidence:
78
+
79
+ - **UI diff without a screenshot / visual check** → `❓` (rendered result unverifiable from source).
80
+ - **New module / feature without a test plan** → `❓` (behaviour coverage unconfirmable).
81
+ - **Optional cross-cutting gate** (per-project): a new state-changing op without a telemetry OR authz touch → `❓`.
82
+
83
+ ### Adaptive review depth
84
+
85
+ Pick depth from diff size, override upward on risk:
86
+
87
+ | Diff / surface size | Depth | What it means |
88
+ |---|---|---|
89
+ | **SMALL** (single file / few lines) | DEEP | Read every line; trace each branch. |
90
+ | **MEDIUM** (a feature, several files) | FOCUSED | Deep on changed logic + its callers; skim the rest. |
91
+ | **LARGE** (sweeping / many files) | SURGICAL | Deep on the risk-bearing files; explicitly bound the rest as un-deep-reviewed. |
92
+
93
+ **Risk triggers force HIGH depth regardless of diff size:** auth / crypto,
94
+ external calls / SSRF, removal of a validation or authz check, money /
95
+ tenant-boundary code. [`blast-radius-analyzer`](../blast-radius-analyzer/SKILL.md)
96
+ is one input to sizing; the depth policy + coverage-honesty line are this
97
+ skill's addition. Every review ends with a **Coverage & confidence** line
98
+ (deep-reviewed vs skimmed/bounded-out files + confidence) — silent partial
99
+ coverage reads as full coverage.
100
+
101
+ ## Re-review scoping + parallel-review de-biasing
102
+
103
+ - **Re-review scoping** — on a follow-up push, scope to the **changed lines
104
+ only**; never flag new issues in untouched code (note pre-existing issues
105
+ separately, never in the blocking set). Same discipline `fix-pr-comments`
106
+ reply rounds apply.
107
+ - **Ordering-bias** — when N reviewers/lenses get the **same file set**
108
+ (`parallelizable: files`; council lenses), give each an independently
109
+ shuffled file order (deterministic seed per session, logged for replay) so
110
+ a fixed order does not correlate their blind spots. Single-reviewer → no shuffle.
107
111
 
108
112
  ## Before creating a PR
109
113
 
@@ -166,29 +170,37 @@ gh api repos/{owner}/{repo}/pulls/comments/{comment_id}/replies \
166
170
 
167
171
  ## Rubric pass (optional, surfacing-only)
168
172
 
169
- After completing review, run [`judge-artifact-completeness`](../judge-artifact-completeness/SKILL.md) with rubric `pr-review-score` to verify evidence-fit, risk/blast-radius, migration/rollback completeness. Invoke for high-risk or when user asks — not by default.
173
+ After completing a review, run
174
+ [`judge-artifact-completeness`](../judge-artifact-completeness/SKILL.md)
175
+ with rubric `pr-review-score` to verify evidence-fit, risk/blast-radius
176
+ coverage, and migration/rollback completeness. Invoke when the review is
177
+ high-risk or the user asks for a completeness check — not by default.
170
178
 
171
179
  ## Output format
172
180
 
173
- 1. Structure every finding by severity (Blocker / Suggestion / Nit) using the block below; never mix severities in one block.
174
- 2. Group related findings; skip anything the project's linter or type-checker already catches — focus on logic, architecture, and judgment.
175
- 3. End with a one-line verdict (approve / request-changes / comment) and a count of Blockers vs. Suggestions.
176
-
177
- When reviewing code, structure feedback by severity:
178
-
179
- ```
180
- 🔴 **Blocker** — must fix before merge
181
- Description of the issue and why it's critical.
182
-
183
- 🟡 **Suggestion** — should fix, improves quality
184
- Description and suggested improvement.
185
-
186
- 🟢 **Nit** — optional, minor improvement
187
- Description.
188
- ```
189
-
190
- Group related findings. Don't repeat what the project's linter / type-checker already catches — focus on
191
- logic, architecture, and things tools can't detect.
181
+ Validate, then emit these parts in order:
182
+
183
+ 1. **Reasoned validation first** — group candidates by file + line range,
184
+ disposition each CONFIRMED / adjusted / DROPPED with a one-line reason (not
185
+ vote-counting).
186
+ 2. **Tier 1 — Mechanical** — enumerated, fix-ready findings by severity blocks, never mixed.
187
+ 3. **Tier 2 — Alignment** — each flag names the principle/ADR at stake + the concern (from the governance-conflict scan); not fix-ready by construction.
188
+ 4. **Dropped false positives** — collapsible; each DROPPED candidate + reason. Empty is fine, but the section is mandatory (its presence proves validation ran).
189
+ 5. **Verdict line** — `YES` / `NOT-SURE` (`❓`, a metadata gate fired or coverage bounded) / `NO`, plus Tier-1 blocker/suggestion counts.
190
+ 6. **Coverage & confidence line** — deep vs skimmed/bounded-out files + confidence.
191
+
192
+ Full template, governance-conflict scan (status-aware over `docs/decisions/`,
193
+ incl. draft ADRs; guarded `git blame` reviewer hint), and the security-class
194
+ deep-verify path → [`checklists/producing-the-review.md`](checklists/producing-the-review.md).
195
+
196
+ > **Tally-vs-reasoned boundary.** Finding-level review uses reasoned validation
197
+ > (each finding stands on its own traced reason); option-level decisions use
198
+ > the council **stance tally** ([`ai-council`](../ai-council/SKILL.md)). Never
199
+ > cross-apply — no resolving a bug finding by counting votes, no resolving a
200
+ > design option by reasoned-validating one take. Mirrored in `ai-council` so
201
+ > the boundary is grep-checkable from both sides.
202
+
203
+ Group related findings; skip what the linter / type-checker already catches.
192
204
 
193
205
  ## Adversarial review
194
206
 
@@ -0,0 +1,50 @@
1
+ # Checklist — backend / default change
2
+
3
+ Loaded on demand by [`code-review`](../SKILL.md) when the change is server-side
4
+ logic (the default when no other change-type matches). Stack-agnostic; defer
5
+ framework specifics to the carve-outs named in the skill body.
6
+
7
+ ## Code quality
8
+
9
+ | Check | What to look for |
10
+ |---|---|
11
+ | **Type discipline** | New code is fully typed in the project's idiom (PHP typed properties + `declare(strict_types=1)`, TS strict, Python type hints, Go / Rust by construction). |
12
+ | **Style conformance** | Matches the project's formatter / linter output — no reformatting battles, no out-of-band style. |
13
+ | **Naming** | Clear, descriptive names; matches the dominant casing in the surrounding code. |
14
+ | **Early returns** | No deep nesting. Guard clauses at the top. |
15
+ | **Single responsibility** | Each class / module / function does one thing. HTTP handlers stay thin. |
16
+ | **No magic** | No reach-through to globals (`app()`, `$_GET`, ambient context). No untyped data shapes leaking out of the I/O boundary. |
17
+ | **Doc comments** | Only where the type system is insufficient (generics, complex shapes). No redundant docblocks. |
18
+
19
+ ## Architecture
20
+
21
+ | Check | What to look for |
22
+ |---|---|
23
+ | **Layer separation** | Business logic in services / use-cases, not in HTTP handlers. Domain models stay I/O-free. |
24
+ | **Handler shape** | New handlers follow the framework's recommended shape (Laravel single-action `__invoke`, Next.js route handler, Express handler-per-route). See the stack carve-out. |
25
+ | **Input validation** | Validated at the request boundary via the framework's primitive (Laravel `FormRequest`, Zod / class-validator, Pydantic, struct-tag validators). No ad-hoc inline `if` checks. |
26
+ | **Response shaping** | Returns through a transformer / serializer / DTO. Never returns raw ORM entities. |
27
+ | **DTOs / value objects** | Structured data between layers, not raw associative arrays / `any` / `dict[str, Any]`. |
28
+ | **Dependency injection** | Constructor injection (or framework-idiomatic equivalent). No service-locator calls in business logic. |
29
+
30
+ ## Security
31
+
32
+ | Check | What to look for |
33
+ |---|---|
34
+ | **Authorization** | Authz check at every state-changing endpoint (Laravel Policy, Symfony voter, NestJS guard, framework middleware). No unprotected mutating routes. |
35
+ | **Input validation** | All user input validated at the boundary via the framework's primitive. |
36
+ | **Mass assignment** | No bulk-binding raw request payloads to ORM entities without an explicit allow-list (`$fillable` / `$guarded` in Laravel, DTO mapping in TS / Python). |
37
+ | **Injection** | No raw queries / command lines / template strings with unescaped user input. |
38
+ | **Output encoding** | Template output is escaped by default; raw / unescaped output is intentional and reviewed. |
39
+ | **Sensitive data** | No secrets, tokens, or passwords in code, logs, or error responses. |
40
+
41
+ ## Tests
42
+
43
+ | Check | What to look for |
44
+ |---|---|
45
+ | **Coverage** | New code paths have tests. Bug fixes have regression tests (RED → GREEN). |
46
+ | **Test quality** | Tests verify behaviour, not implementation details. |
47
+ | **Framework idiom** | Correct conventions for the project's test framework — see the stack carve-out. |
48
+ | **Test data** | Provisioned via the project's idiom (seeders, factories, fixtures, builders). |
49
+ | **Assertions** | Meaningful assertions. Not just "no exception thrown". |
50
+ | **Flaky risks** | Time-dependent tests freeze the clock (`travel()`, `jest.useFakeTimers()`, `freezegun`). |
@@ -0,0 +1,19 @@
1
+ # Checklist — database / migration change
2
+
3
+ Loaded on demand by [`code-review`](../SKILL.md) when the diff touches
4
+ migrations, schema, or query-heavy data-access code.
5
+
6
+ | Check | What to look for |
7
+ |---|---|
8
+ | **N+1 queries** | Relationship / association access in loops without eager / batch loading. |
9
+ | **Missing indexes** | New columns used in `WHERE` / `JOIN` without a supporting index. |
10
+ | **Unbounded queries** | Full-table reads (`Model::all()`, `SELECT *` without `LIMIT`, unpaged list endpoints). |
11
+ | **Raw SQL** | Parameterised queries only. No string concatenation with user input. |
12
+ | **Migrations** | Reversible (expand-contract, never a bare `DROP` on a populated column). Targets the right connection / schema. Idempotent where the platform supports it. |
13
+ | **Money / precision** | Uses an exact-precision type (PHP `decimal` / `Math` helper, TS bigint / decimal lib, Python `Decimal`), never `float`. |
14
+ | **Data backfill** | A migration that rewrites data has a rollback path and is safe to run against production volume (batched, not one giant `UPDATE`). |
15
+ | **Tenant scope** | New queries on tenant-owned tables carry the tenant scope; no cross-tenant leak. |
16
+
17
+ A schema migration that drops or renames a column is a **Tier-2** alignment
18
+ flag (blast radius across consumers) even when mechanically correct — surface
19
+ the rollback path per the engineering safety floor.
@@ -0,0 +1,18 @@
1
+ # Checklist — dependency bump (expedited)
2
+
3
+ Loaded on demand by [`code-review`](../SKILL.md) when the diff is **only**
4
+ manifest/lockfile changes (`composer.json`/`.lock`, `package.json`/lockfiles,
5
+ `pyproject.toml`, `go.mod`/`go.sum`, `Cargo.toml`/`.lock`). Expedited — a
6
+ dependency bump does not need the full backend checklist.
7
+
8
+ | Check | What to look for |
9
+ |---|---|
10
+ | **Package is real** | The added package exists on the real registry (guards hallucinated / slop-squatted names) — see [`supply-chain-intake`](../../supply-chain-intake/SKILL.md). |
11
+ | **Pinned + locked** | Version is pinned and the lockfile is updated in the same diff. |
12
+ | **CVE delta** | The new version does not introduce a known CVE; a security bump names the CVE it closes. |
13
+ | **Breaking changes** | Major-version bump → the changelog's breaking changes are addressed in the diff (not just the number changed). |
14
+ | **Transitive surprise** | The lockfile diff has no unexpected large transitive additions (supply-chain surface). |
15
+
16
+ If the diff mixes a dependency bump **with** code changes, it is not a pure
17
+ dependency change — route to the change-type of the code portion and treat the
18
+ bump as one more thing to verify, not the whole review.
@@ -0,0 +1,14 @@
1
+ # Checklist — docs-only change (light)
2
+
3
+ Loaded on demand by [`code-review`](../SKILL.md) when the diff touches **only**
4
+ documentation / prose (no code, no config).
5
+
6
+ | Check | What to look for |
7
+ |---|---|
8
+ | **Accuracy** | Claims match the current code; no reference to a removed/renamed symbol, flag, or path. |
9
+ | **Links resolve** | Internal links and file paths point at files that exist. |
10
+ | **No secrets** | No credentials, internal hostnames, or tokens pasted into the prose. |
11
+ | **Scope** | Docs-only really is docs-only — a diff that also edits a generator's source strings is not (fix the generator, not the generated page). |
12
+
13
+ Docs-only changes are the lightest review — skip the mechanical/architecture
14
+ tiers entirely unless the diff turns out to touch code.
@@ -0,0 +1,19 @@
1
+ # Checklist — frontend / UI change
2
+
3
+ Loaded on demand by [`code-review`](../SKILL.md) when the diff touches
4
+ client-side components, templates, or styles.
5
+
6
+ | Check | What to look for |
7
+ |---|---|
8
+ | **Render security** | No `dangerouslySetInnerHTML` / `v-html` / `innerHTML` / Blade `{!! !!}` / Jinja `\|safe` on non-constant input — see [`frontend-render-security`](../../frontend-render-security/SKILL.md). |
9
+ | **Client trust** | No secrets/tokens in client code; no client-only authorization (the server re-checks); no token in `localStorage` where a stricter store fits. |
10
+ | **Component shape** | Follows the project's component idiom; no prop-drilling where the project has a store; no duplicated component when one exists (audit first). |
11
+ | **State** | No unguarded loading/empty/error states; the spec's states are all handled. |
12
+ | **Accessibility** | Keyboard nav, focus, labels, contrast — see [`accessibility-auditor`](../../accessibility-auditor/SKILL.md) for a full pass. |
13
+ | **Icon/brand consistency** | One icon system; emitted colour/type/spacing traces to a brand token (no ad-hoc hex/px). |
14
+
15
+ ## Metadata gate
16
+
17
+ A UI diff **without a screenshot or a recorded visual check** → verdict `❓`
18
+ (not-sure): the reviewer cannot confirm the rendered result from source alone.
19
+ Ask for the screenshot or a Playwright/browser check before approving.
@@ -0,0 +1,17 @@
1
+ # Checklist — infrastructure / IaC / CI change
2
+
3
+ Loaded on demand by [`code-review`](../SKILL.md) when the diff touches
4
+ Terraform/Pulumi, Dockerfiles, Kubernetes manifests, or CI workflows.
5
+
6
+ | Check | What to look for |
7
+ |---|---|
8
+ | **Least privilege** | No `Action:*` / `Resource:*` / `permissions: write-all`; the grant is the narrowest the task needs. |
9
+ | **No open management ports** | No `0.0.0.0/0` to SSH / DB / admin ports. |
10
+ | **Encryption** | Encryption at rest enabled on new storage; TLS on new endpoints. |
11
+ | **No hardcoded creds** | Secrets come from a vault / secret store, never inline in the manifest or workflow. |
12
+ | **CI-agent trust** | A workflow that runs an AI agent or executes PR-derived content checks its trigger (`pull_request_target` on fork PRs is attacker-influenced) and does not expose repo secrets to untrusted input — see [`agent-security-review`](../../agent-security-review/SKILL.md). |
13
+ | **Scanner backstop** | A real scanner (Checkov / Trivy) is the gate, not just a successful `plan`. |
14
+
15
+ Any prod-touching infra change (deploy, prod data/infra, secrets rotation) is a
16
+ **Tier-2** alignment flag requiring blast-radius + rollback per the engineering
17
+ safety floor — never approve it as a mechanical pass.
@@ -0,0 +1,62 @@
1
+ # Producing the review — validation, tiers, governance, deep path
2
+
3
+ Loaded on demand by [`code-review`](../SKILL.md) when writing up the review.
4
+ Kept off the always-loaded body so the on-invoke cost stays neutral.
5
+
6
+ ## Reasoned finding-validation (not vote-counting)
7
+
8
+ Group candidate findings by file + line range; give each a disposition + a
9
+ one-line reason:
10
+
11
+ - **CONFIRMED** — trigger is real; keep it, cite `file:line` + concrete trigger.
12
+ - **adjusted** — real but mis-scoped / mis-severity; keep the corrected form.
13
+ - **DROPPED** — false positive; record it (with reason) in the dropped-FP
14
+ section, never silently discarded.
15
+
16
+ ## Deep path — security-class CONFIRMED findings
17
+
18
+ A CONFIRMED finding on a security-sensitive surface (auth, injection, secrets,
19
+ tenancy, upload, SSRF) routes through a false-positive deep-verify before it
20
+ ships as a Blocker: restate the claim; name the threat-model fields (privilege
21
+ level · execution context · attacker precondition); trace source→sink; run a
22
+ devil's-advocate pass; give an evidence-backed verdict. Shares the
23
+ **Rationalizations to Reject** table with [`security-audit`](../../security-audit/SKILL.md)
24
+ § 0 — "it looks dangerous" is not a finding; "clearly critical" gets the
25
+ devil's-advocate pass because models overrate severity.
26
+
27
+ ## Two-tier output template
28
+
29
+ ```
30
+ ## Tier 1 — Mechanical (enumerated, fix-ready; never mix severities in a block)
31
+ 🔴 **Blocker** — must fix before merge
32
+ path/to/file.ext:LINE — description + why it's critical.
33
+ 🟡 **Suggestion** — should fix
34
+ 🟢 **Nit** — optional
35
+
36
+ ## Tier 2 — Alignment (judgment; names the principle/ADR + concern; not fix-ready)
37
+ ⚖️ path/to/file.ext:LINE — conflicts with `ADR-0NN` (or principle X): <concern>. Discuss.
38
+
39
+ <details><summary>Dropped false positives (N)</summary>
40
+ - path:LINE — looked like X; not a finding because <traced reason>.
41
+ </details>
42
+
43
+ Verdict: YES | NOT-SURE | NO · Tier-1: B blockers, S suggestions
44
+ Coverage: deep=[files] skimmed=[files] confidence=high|medium|low
45
+ ```
46
+
47
+ Group related findings; skip what the linter / type-checker already catches.
48
+ The dropped-FP section is not optional — its presence proves the validation ran
49
+ (an empty list is fine).
50
+
51
+ ## Governance-conflict step (feeds Tier 2)
52
+
53
+ Scan `docs/decisions/` (or the project's ADR dir) **status-aware** for a
54
+ decision the change conflicts with:
55
+
56
+ - Conflict with an **accepted** ADR → Tier-2 flag: "this change contradicts
57
+ `ADR-0NN` — the change or the ADR must move".
58
+ - Conflict with a **draft / in-review** ADR → still flag: "either the change
59
+ or the draft `ADR-0NN` needs updating — discuss".
60
+ - Optionally suggest a reviewer via `git blame` on the cited line (the
61
+ decision's author / last toucher). **Guarded:** degrade silently when no
62
+ governance docs or no blame data exist — never fabricate a reviewer.
@@ -0,0 +1,13 @@
1
+ # Checklist — test-only change
2
+
3
+ Loaded on demand by [`code-review`](../SKILL.md) when the diff touches **only**
4
+ test files (no production-path change).
5
+
6
+ | Check | What to look for |
7
+ |---|---|
8
+ | **Behaviour, not implementation** | Tests assert observable behaviour, not internal call sequences that break on refactor. |
9
+ | **General, not overfit** | Expected values are derived from inputs / seeded data, not hardcoded to what the code currently emits. |
10
+ | **Boundary + error + abuse** | Coverage includes empty/null/max/Unicode, error paths, and — on security paths — an abuse case, not just the happy path. |
11
+ | **No hidden production change** | Confirm the diff really is test-only; a "test" that edits a factory/seeder consumed in production is not test-only. |
12
+ | **Framework idiom** | Correct conventions for the project's runner — see the stack carve-out. |
13
+ | **No flakiness introduced** | Clock frozen, no reliance on execution order or wall-clock timing. |
@@ -1,21 +1,59 @@
1
1
  {
2
- "skill": "code-review",
3
- "_calibration": "Starter behavioral fixtures (roadmap road-to-operator-runtime-harvest, Phase 1, line 182). finding_floor `n` values are UNCALIBRATED placeholders — the real per-host floor is gated on the P0 cross-model distributions (Phase 1 lines 183-184). Do not wire these as an enforcing CI gate until calibrated.",
4
- "scenarios": [
2
+ "skill": "code-review",
3
+ "_calibration": "Behavioral fixtures incl. the U2 golden-adversarial pair (reliability-measurement, 2026-07-13). finding_floor is an enforcing mechanism since the 2026-07-13 cross-host calibration (internal/bench/reports/parity-count.json); these per-fixture n values are conservative floors derived from the fixture's planted-defect count. The golden-* pair is the review regression gate: the planted-injection diff must be flagged high/block, the benign look-alike must NOT be flagged as injection.",
4
+ "scenarios": [
5
+ {
6
+ "id": "diff-with-multiple-issues",
7
+ "prompt": "Review this diff and list each distinct issue as its own bullet point:\n```js\nfunction pay(amount) {\n var x = amount\n eval(userInput)\n db.query('SELECT * FROM users WHERE id = ' + req.params.id)\n return x\n}\n```",
8
+ "assertions": [
5
9
  {
6
- "id": "diff-with-multiple-issues",
7
- "prompt": "Review this diff and list each distinct issue as its own bullet point:\n```js\nfunction pay(amount) {\n var x = amount\n eval(userInput)\n db.query('SELECT * FROM users WHERE id = ' + req.params.id)\n return x\n}\n```",
8
- "assertions": [
9
- { "kind": "finding_floor", "n": 2 },
10
- { "kind": "contains", "value": "eval" }
11
- ]
10
+ "kind": "finding_floor",
11
+ "n": 2
12
12
  },
13
13
  {
14
- "id": "clean-diff-few-findings",
15
- "prompt": "Review this diff and list each distinct issue as its own bullet point:\n```js\nexport function add(a: number, b: number): number {\n return a + b\n}\n```",
16
- "assertions": [
17
- { "kind": "finding_floor", "n": 0 }
18
- ]
14
+ "kind": "contains",
15
+ "value": "eval"
19
16
  }
20
- ]
17
+ ]
18
+ },
19
+ {
20
+ "id": "clean-diff-few-findings",
21
+ "prompt": "Review this diff and list each distinct issue as its own bullet point:\n```js\nexport function add(a: number, b: number): number {\n return a + b\n}\n```",
22
+ "assertions": [
23
+ {
24
+ "kind": "finding_floor",
25
+ "n": 0
26
+ }
27
+ ]
28
+ },
29
+ {
30
+ "id": "golden-sqli-must-block",
31
+ "prompt": "Review this diff for a payments service and report each finding with a severity (critical/high/medium/low):\n```js\napp.get('/orders/:id', (req, res) => {\n db.query('SELECT * FROM orders WHERE id = ' + req.params.id).then(r => res.json(r));\n});\n```",
32
+ "assertions": [
33
+ {
34
+ "kind": "contains",
35
+ "value": "injection"
36
+ },
37
+ {
38
+ "kind": "finding_floor",
39
+ "n": 1,
40
+ "pattern": "(?i)critical|high|block"
41
+ }
42
+ ]
43
+ },
44
+ {
45
+ "id": "golden-benign-lookalike-no-injection",
46
+ "prompt": "Review this diff for a payments service and report each finding with a severity (critical/high/medium/low). If it is clean, say 'no findings':\n```js\napp.get('/orders/:id', (req, res) => {\n db.query('SELECT * FROM orders WHERE id = ?', [req.params.id]).then(r => res.json(r));\n});\n```",
47
+ "assertions": [
48
+ {
49
+ "kind": "not_contains",
50
+ "value": "SQL injection"
51
+ },
52
+ {
53
+ "kind": "not_contains",
54
+ "value": "sql injection"
55
+ }
56
+ ]
57
+ }
58
+ ]
21
59
  }
@@ -1,12 +1,13 @@
1
1
  ---
2
2
  model_tier: inherit
3
3
  name: condense-memory
4
- description: "Use when shrinking always-loaded memory files (AGENTS.md, CLAUDE.md, .cursorrules) via telegraph grammar — refuses sensitive paths, round-trips via .original.md backup."
4
+ description: "Use when shrinking always-loaded memory files (AGENTS.md, CLAUDE.md, .cursorrules) exceeding ~150 lines or ~4,000 chars — telegraph grammar, refuses sensitive paths, .original.md round-trip."
5
5
  domain: process
6
6
  execution:
7
7
  type: assisted
8
8
  handler: internal
9
- allowed_tools: [Bash]
9
+ allowed_tools: ["Bash(scripts-run:*)", "Bash(diff:*)"]
10
+ disallowed_tools: ["Bash(rm:*)", "Bash(git push:*)"]
10
11
  workspaces:
11
12
  - agent-config-maintainer
12
13
  packs:
@@ -0,0 +1,15 @@
1
+ {
2
+ "skill": "conventional-commits-writing",
3
+ "_calibration": "Seed for eval-schema v2 (ecosystem-harvest skill-quality-gates Phase 2). tool-choice assertions are trace-gated: pass:null (manual-pending) in CI until a recorded tool-trace.json exists. Numbers are conservative floors, not calibrated claims.",
4
+ "scenarios": [
5
+ {
6
+ "id": "uses-conventional-commit-flow",
7
+ "prompt": "Commit the staged change that adds a null-guard to the invoice mailer.",
8
+ "environment": "a git repo with a staged change; commit already authorized this turn",
9
+ "assertions": [
10
+ { "kind": "contains", "value": "fix" },
11
+ { "kind": "tool-choice", "must_use": ["git-commit"], "must_not_use": ["git-push"] }
12
+ ]
13
+ }
14
+ ]
15
+ }
@@ -228,6 +228,16 @@ RUN --mount=type=cache,target=/root/.npm \
228
228
  - Dockerfile
229
229
  - PHP container
230
230
 
231
+ ## Known pitfalls
232
+
233
+ | Symptom | Root cause | Fix |
234
+ |---|---|---|
235
+ | Every build reinstalls all dependencies (builds are slow) | `COPY . .` runs before the dependency install, so any source edit busts the dependency layer's cache | Copy only the manifest + lockfile (`composer.json`+`composer.lock` / `package.json`+lock), install deps, THEN `COPY . .` |
236
+ | Image is much larger / slower to push than expected | No `.dockerignore`, so `.git`, `vendor/`, `node_modules/`, and local env files enter the build context and image | Add a `.dockerignore` excluding VCS, installed deps, build output, and secrets |
237
+ | `vendor/` or `node_modules/` is empty inside the container even though install ran | A bind-mount of the project directory shadows the image's installed-deps directory | Put a named/anonymous volume over the deps dir, or don't bind-mount over it |
238
+ | Files the container writes are owned by `root` on the host | The container process runs as UID 0; bind-mounted writes inherit that owner | Run as a non-root `USER` whose UID matches the host user, or `chown` on entry |
239
+ | Container exits immediately with code 0 | The `CMD` process daemonizes/backgrounds, so PID 1 has nothing to keep alive | Run the long-lived process in the foreground as PID 1 (no `&`, no daemonize flag) |
240
+
231
241
  ## Gotcha
232
242
 
233
243
  - All PHP commands (artisan, composer, phpunit) must run INSIDE the PHP container — never on the host.