@mrciphersmith/keryx 0.2.9

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 (297) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +351 -0
  3. package/dist/cli.js +48427 -0
  4. package/dist/proxy-worker.js +381 -0
  5. package/package.json +63 -0
  6. package/src/gdgraph/affected.test.ts +100 -0
  7. package/src/gdgraph/affected.ts +135 -0
  8. package/src/gdgraph/build-integrity.test.ts +193 -0
  9. package/src/gdgraph/build-lang.test.ts +399 -0
  10. package/src/gdgraph/build.test.ts +120 -0
  11. package/src/gdgraph/build.ts +804 -0
  12. package/src/gdgraph/config.test.ts +47 -0
  13. package/src/gdgraph/config.ts +113 -0
  14. package/src/gdgraph/core-sources.test.ts +99 -0
  15. package/src/gdgraph/core-sources.ts +20 -0
  16. package/src/gdgraph/enrich.ts +79 -0
  17. package/src/gdgraph/fallback.test.ts +153 -0
  18. package/src/gdgraph/find.test.ts +78 -0
  19. package/src/gdgraph/find.ts +107 -0
  20. package/src/gdgraph/pagerank.ts +129 -0
  21. package/src/gdgraph/path.test.ts +56 -0
  22. package/src/gdgraph/path.ts +112 -0
  23. package/src/gdgraph/query.ts +133 -0
  24. package/src/gdgraph/repomap.test.ts +110 -0
  25. package/src/gdgraph/repomap.ts +193 -0
  26. package/src/gdgraph/service.test.ts +59 -0
  27. package/src/gdgraph/service.ts +51 -0
  28. package/src/gdgraph/staleness.ts +20 -0
  29. package/src/gdgraph/symbol.test.ts +89 -0
  30. package/src/gdgraph/symbol.ts +123 -0
  31. package/src/gdgraph/symbols-capability.test.ts +41 -0
  32. package/src/gdgraph/symbols-capability.ts +49 -0
  33. package/src/gdgraph/target.ts +56 -0
  34. package/src/gdgraph/treesitter/adapter.test.ts +249 -0
  35. package/src/gdgraph/treesitter/adapter.ts +213 -0
  36. package/src/gdgraph/treesitter/extract.test.ts +278 -0
  37. package/src/gdgraph/treesitter/extract.ts +389 -0
  38. package/src/gdgraph/treesitter/grammars.ts +110 -0
  39. package/src/gdgraph/treesitter/no-treesitter-import.test.ts +51 -0
  40. package/src/gdgraph/treesitter/resolve-calls.test.ts +38 -0
  41. package/src/gdgraph/types.ts +63 -0
  42. package/src/gdskills/bundled/rules/core/api-contracts.mdc +148 -0
  43. package/src/gdskills/bundled/rules/core/async-patterns.mdc +185 -0
  44. package/src/gdskills/bundled/rules/core/clean-architecture.mdc +163 -0
  45. package/src/gdskills/bundled/rules/core/code-review-ai-assistant.mdc +49 -0
  46. package/src/gdskills/bundled/rules/core/code-review-b091-profile.mdc +48 -0
  47. package/src/gdskills/bundled/rules/core/code-style-patterns.mdc +54 -0
  48. package/src/gdskills/bundled/rules/core/commit-message-formatting.mdc +25 -0
  49. package/src/gdskills/bundled/rules/core/database-patterns.mdc +162 -0
  50. package/src/gdskills/bundled/rules/core/documentation-management.mdc +106 -0
  51. package/src/gdskills/bundled/rules/core/error-handling.mdc +163 -0
  52. package/src/gdskills/bundled/rules/core/execution-metrics.md +99 -0
  53. package/src/gdskills/bundled/rules/core/frontend-assistant.mdc +40 -0
  54. package/src/gdskills/bundled/rules/core/git-rules.mdc +37 -0
  55. package/src/gdskills/bundled/rules/core/gproject-contracts.mdc +198 -0
  56. package/src/gdskills/bundled/rules/core/implementation-doc-mandate.mdc +149 -0
  57. package/src/gdskills/bundled/rules/core/implementation-plans.mdc +58 -0
  58. package/src/gdskills/bundled/rules/core/jobs-documentation.mdc +221 -0
  59. package/src/gdskills/bundled/rules/core/mobx-store-template.mdc +561 -0
  60. package/src/gdskills/bundled/rules/core/model-selection.mdc +53 -0
  61. package/src/gdskills/bundled/rules/core/nestjs-dto.mdc +50 -0
  62. package/src/gdskills/bundled/rules/core/playwright-testing.mdc +321 -0
  63. package/src/gdskills/bundled/rules/core/requirements-management.mdc +35 -0
  64. package/src/gdskills/bundled/rules/core/requirements-package-standard.mdc +103 -0
  65. package/src/gdskills/bundled/rules/core/review-agent-profile.mdc +49 -0
  66. package/src/gdskills/bundled/rules/core/review-strict-profile.mdc +44 -0
  67. package/src/gdskills/bundled/rules/core/rule-management-workflow.mdc +62 -0
  68. package/src/gdskills/bundled/rules/core/security-baseline.mdc +155 -0
  69. package/src/gdskills/bundled/rules/core/shared-definitions.mdc +79 -0
  70. package/src/gdskills/bundled/rules/core/skill-lifecycle.mdc +55 -0
  71. package/src/gdskills/bundled/rules/core/skills-storage-workflow.mdc +88 -0
  72. package/src/gdskills/bundled/rules/core/solid-principles.mdc +149 -0
  73. package/src/gdskills/bundled/rules/core/storybook-guidelines.mdc +36 -0
  74. package/src/gdskills/bundled/rules/core/subagent-context-construction.md +107 -0
  75. package/src/gdskills/bundled/rules/core/subagent-status-protocol.md +169 -0
  76. package/src/gdskills/bundled/rules/core/tdd-workflow.mdc +96 -0
  77. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.codex.md +47 -0
  78. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.cursor.md +55 -0
  79. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.md +352 -0
  80. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.opencode.md +39 -0
  81. package/src/gdskills/bundled/skills/orchestration/code-verifier/SKILL.zed.md +29 -0
  82. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.codex.md +567 -0
  83. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.cursor.md +567 -0
  84. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.md +655 -0
  85. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.opencode.md +567 -0
  86. package/src/gdskills/bundled/skills/orchestration/context-collector/SKILL.zed.md +567 -0
  87. package/src/gdskills/bundled/skills/orchestration/context-collector/input-contract.schema.json +134 -0
  88. package/src/gdskills/bundled/skills/orchestration/context-collector/orchestrator-prompt.md +183 -0
  89. package/src/gdskills/bundled/skills/orchestration/context-collector/output-contract.schema.json +208 -0
  90. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.codex.md +1412 -0
  91. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.cursor.md +1412 -0
  92. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.detail.md +735 -0
  93. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.md +468 -0
  94. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.opencode.md +1412 -0
  95. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/SKILL.zed.md +1412 -0
  96. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/analysis-request.md +62 -0
  97. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/analysis-request.template.md +79 -0
  98. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/input-contract.schema.json +247 -0
  99. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/orchestrator-prompt.md +362 -0
  100. package/src/gdskills/bundled/skills/orchestration/feature-analyzer/output-contract.schema.json +87 -0
  101. package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.codex.md +105 -0
  102. package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.cursor.md +105 -0
  103. package/src/gdskills/bundled/skills/orchestration/feature-dev/SKILL.md +165 -0
  104. package/src/gdskills/bundled/skills/orchestration/flow-orchestrator/SKILL.md +379 -0
  105. package/src/gdskills/bundled/skills/orchestration/flow-orchestrator/input-contract.schema.json +33 -0
  106. package/src/gdskills/bundled/skills/orchestration/flow-orchestrator/output-contract.schema.json +41 -0
  107. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.codex.md +307 -0
  108. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.cursor.md +307 -0
  109. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.md +373 -0
  110. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.opencode.md +307 -0
  111. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/SKILL.zed.md +307 -0
  112. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/input-contract.schema.json +130 -0
  113. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/issue-request.template.md +50 -0
  114. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/orchestrator-prompt.md +155 -0
  115. package/src/gdskills/bundled/skills/orchestration/issue-analyzer/output-contract.schema.json +61 -0
  116. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.codex.md +365 -0
  117. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.cursor.md +365 -0
  118. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.md +373 -0
  119. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.opencode.md +365 -0
  120. package/src/gdskills/bundled/skills/orchestration/job-documenter/SKILL.zed.md +365 -0
  121. package/src/gdskills/bundled/skills/orchestration/job-documenter/input-contract.schema.json +55 -0
  122. package/src/gdskills/bundled/skills/orchestration/job-documenter/output-contract.schema.json +58 -0
  123. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.codex.md +1701 -0
  124. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.cursor.md +1701 -0
  125. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.md +1734 -0
  126. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.opencode.md +1701 -0
  127. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/SKILL.zed.md +1701 -0
  128. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/input-contract.schema.json +188 -0
  129. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/orchestrator-prompt.md +179 -0
  130. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/output-contract.schema.json +103 -0
  131. package/src/gdskills/bundled/skills/orchestration/job-orchestrator/state.schema.json +164 -0
  132. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.codex.md +395 -0
  133. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.cursor.md +395 -0
  134. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.md +556 -0
  135. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.opencode.md +395 -0
  136. package/src/gdskills/bundled/skills/orchestration/task-implementer/SKILL.zed.md +395 -0
  137. package/src/gdskills/bundled/skills/orchestration/task-implementer/input-contract.schema.json +204 -0
  138. package/src/gdskills/bundled/skills/orchestration/task-implementer/orchestrator-prompt.md +206 -0
  139. package/src/gdskills/bundled/skills/orchestration/task-implementer/output-contract.schema.json +51 -0
  140. package/src/gdskills/bundled/skills/orchestration/task-implementer/task-request.template.md +111 -0
  141. package/src/gdskills/bundled/skills/planning/autodoc-analyst/SKILL.md +163 -0
  142. package/src/gdskills/bundled/skills/planning/autodoc-architect/SKILL.md +161 -0
  143. package/src/gdskills/bundled/skills/planning/autodoc-assembler/SKILL.md +128 -0
  144. package/src/gdskills/bundled/skills/planning/autodoc-orchestrator/SKILL.md +321 -0
  145. package/src/gdskills/bundled/skills/planning/autodoc-scanner/SKILL.md +166 -0
  146. package/src/gdskills/bundled/skills/planning/autodoc-writer/SKILL.md +253 -0
  147. package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.claude.md +46 -0
  148. package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.codex.md +90 -0
  149. package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.cursor.md +90 -0
  150. package/src/gdskills/bundled/skills/planning/brainstorm/SKILL.md +90 -0
  151. package/src/gdskills/bundled/skills/planning/consistency-checker/SKILL.codex.md +33 -0
  152. package/src/gdskills/bundled/skills/planning/consistency-checker/SKILL.cursor.md +33 -0
  153. package/src/gdskills/bundled/skills/planning/consistency-checker/SKILL.md +190 -0
  154. package/src/gdskills/bundled/skills/planning/docpack-orchestrator/SKILL.md +142 -0
  155. package/src/gdskills/bundled/skills/planning/docpack-orchestrator/input-contract.schema.json +31 -0
  156. package/src/gdskills/bundled/skills/planning/docpack-orchestrator/output-contract.schema.json +31 -0
  157. package/src/gdskills/bundled/skills/planning/docpack-review/SKILL.md +80 -0
  158. package/src/gdskills/bundled/skills/planning/docpack-review/input-contract.schema.json +20 -0
  159. package/src/gdskills/bundled/skills/planning/docpack-review/output-contract.schema.json +36 -0
  160. package/src/gdskills/bundled/skills/planning/interview/SKILL.codex.md +181 -0
  161. package/src/gdskills/bundled/skills/planning/interview/SKILL.cursor.md +181 -0
  162. package/src/gdskills/bundled/skills/planning/interview/SKILL.md +187 -0
  163. package/src/gdskills/bundled/skills/planning/interviewer/SKILL.claude.md +94 -0
  164. package/src/gdskills/bundled/skills/planning/interviewer/SKILL.codex.md +99 -0
  165. package/src/gdskills/bundled/skills/planning/interviewer/SKILL.cursor.md +99 -0
  166. package/src/gdskills/bundled/skills/planning/interviewer/SKILL.md +105 -0
  167. package/src/gdskills/bundled/skills/planning/patterns-researcher/SKILL.codex.md +33 -0
  168. package/src/gdskills/bundled/skills/planning/patterns-researcher/SKILL.cursor.md +33 -0
  169. package/src/gdskills/bundled/skills/planning/patterns-researcher/SKILL.md +237 -0
  170. package/src/gdskills/bundled/skills/planning/planner/SKILL.codex.md +33 -0
  171. package/src/gdskills/bundled/skills/planning/planner/SKILL.cursor.md +33 -0
  172. package/src/gdskills/bundled/skills/planning/planner/SKILL.md +190 -0
  173. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.codex.md +193 -0
  174. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.cursor.md +193 -0
  175. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.md +193 -0
  176. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.opencode.md +193 -0
  177. package/src/gdskills/bundled/skills/planning/prd-creator/SKILL.zed.md +193 -0
  178. package/src/gdskills/bundled/skills/planning/prd-creator/input-contract.schema.json +63 -0
  179. package/src/gdskills/bundled/skills/planning/prd-creator/output-contract.schema.json +175 -0
  180. package/src/gdskills/bundled/skills/planning/problem-definer/SKILL.codex.md +31 -0
  181. package/src/gdskills/bundled/skills/planning/problem-definer/SKILL.cursor.md +31 -0
  182. package/src/gdskills/bundled/skills/planning/problem-definer/SKILL.md +153 -0
  183. package/src/gdskills/bundled/skills/planning/project-discovery/SKILL.codex.md +32 -0
  184. package/src/gdskills/bundled/skills/planning/project-discovery/SKILL.cursor.md +32 -0
  185. package/src/gdskills/bundled/skills/planning/project-discovery/SKILL.md +166 -0
  186. package/src/gdskills/bundled/skills/planning/spec-writer/SKILL.codex.md +44 -0
  187. package/src/gdskills/bundled/skills/planning/spec-writer/SKILL.cursor.md +44 -0
  188. package/src/gdskills/bundled/skills/planning/spec-writer/SKILL.md +243 -0
  189. package/src/gdskills/bundled/skills/planning/stack-advisor/SKILL.codex.md +43 -0
  190. package/src/gdskills/bundled/skills/planning/stack-advisor/SKILL.cursor.md +43 -0
  191. package/src/gdskills/bundled/skills/planning/stack-advisor/SKILL.md +193 -0
  192. package/src/gdskills/bundled/skills/platform/agent-entrypoint-distiller/SKILL.md +47 -0
  193. package/src/gdskills/bundled/skills/platform/claude-md-management/SKILL.codex.md +87 -0
  194. package/src/gdskills/bundled/skills/platform/claude-md-management/SKILL.cursor.md +87 -0
  195. package/src/gdskills/bundled/skills/platform/claude-md-management/SKILL.md +87 -0
  196. package/src/gdskills/bundled/skills/platform/hookify/SKILL.codex.md +100 -0
  197. package/src/gdskills/bundled/skills/platform/hookify/SKILL.cursor.md +100 -0
  198. package/src/gdskills/bundled/skills/platform/hookify/SKILL.md +100 -0
  199. package/src/gdskills/bundled/skills/quality/changelog/SKILL.claude.md +45 -0
  200. package/src/gdskills/bundled/skills/quality/changelog/SKILL.codex.md +84 -0
  201. package/src/gdskills/bundled/skills/quality/changelog/SKILL.cursor.md +84 -0
  202. package/src/gdskills/bundled/skills/quality/changelog/SKILL.md +84 -0
  203. package/src/gdskills/bundled/skills/quality/commit/SKILL.codex.md +66 -0
  204. package/src/gdskills/bundled/skills/quality/commit/SKILL.cursor.md +66 -0
  205. package/src/gdskills/bundled/skills/quality/commit/SKILL.md +66 -0
  206. package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.claude.md +40 -0
  207. package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.codex.md +66 -0
  208. package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.cursor.md +66 -0
  209. package/src/gdskills/bundled/skills/quality/db-migrate/SKILL.md +66 -0
  210. package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.claude.md +45 -0
  211. package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.codex.md +81 -0
  212. package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.cursor.md +81 -0
  213. package/src/gdskills/bundled/skills/quality/dependency-update/SKILL.md +81 -0
  214. package/src/gdskills/bundled/skills/quality/deploy/SKILL.claude.md +42 -0
  215. package/src/gdskills/bundled/skills/quality/deploy/SKILL.codex.md +70 -0
  216. package/src/gdskills/bundled/skills/quality/deploy/SKILL.cursor.md +70 -0
  217. package/src/gdskills/bundled/skills/quality/deploy/SKILL.md +70 -0
  218. package/src/gdskills/bundled/skills/quality/metaproject-security/SKILL.md +103 -0
  219. package/src/gdskills/bundled/skills/quality/perf-check/SKILL.claude.md +48 -0
  220. package/src/gdskills/bundled/skills/quality/perf-check/SKILL.codex.md +83 -0
  221. package/src/gdskills/bundled/skills/quality/perf-check/SKILL.cursor.md +83 -0
  222. package/src/gdskills/bundled/skills/quality/perf-check/SKILL.md +83 -0
  223. package/src/gdskills/bundled/skills/quality/pr/SKILL.codex.md +75 -0
  224. package/src/gdskills/bundled/skills/quality/pr/SKILL.cursor.md +75 -0
  225. package/src/gdskills/bundled/skills/quality/pr/SKILL.md +75 -0
  226. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.codex.md +364 -0
  227. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.cursor.md +295 -0
  228. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.md +378 -0
  229. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.opencode.md +364 -0
  230. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/SKILL.zed.md +38 -0
  231. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/input-contract.schema.json +53 -0
  232. package/src/gdskills/bundled/skills/quality/pr-issue-documenter/output-contract.schema.json +46 -0
  233. package/src/gdskills/bundled/skills/quality/push/SKILL.codex.md +52 -0
  234. package/src/gdskills/bundled/skills/quality/push/SKILL.cursor.md +52 -0
  235. package/src/gdskills/bundled/skills/quality/push/SKILL.md +52 -0
  236. package/src/gdskills/bundled/skills/quality/security-audit/SKILL.claude.md +40 -0
  237. package/src/gdskills/bundled/skills/quality/security-audit/SKILL.codex.md +61 -0
  238. package/src/gdskills/bundled/skills/quality/security-audit/SKILL.cursor.md +61 -0
  239. package/src/gdskills/bundled/skills/quality/security-audit/SKILL.md +61 -0
  240. package/src/gdskills/bundled/skills/quality/test-gen/SKILL.claude.md +30 -0
  241. package/src/gdskills/bundled/skills/quality/test-gen/SKILL.codex.md +75 -0
  242. package/src/gdskills/bundled/skills/quality/test-gen/SKILL.cursor.md +75 -0
  243. package/src/gdskills/bundled/skills/quality/test-gen/SKILL.md +75 -0
  244. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.codex.md +64 -0
  245. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.cursor.md +74 -0
  246. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.md +339 -0
  247. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.opencode.md +48 -0
  248. package/src/gdskills/bundled/skills/quality/tests-creator/SKILL.zed.md +44 -0
  249. package/src/gdskills/bundled/skills/quality/tests-creator/input-contract.schema.json +121 -0
  250. package/src/gdskills/bundled/skills/quality/tests-creator/output-contract.schema.json +127 -0
  251. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.codex.md +204 -0
  252. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.cursor.md +204 -0
  253. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.md +203 -0
  254. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.opencode.md +204 -0
  255. package/src/gdskills/bundled/skills/review/code-ai-review/SKILL.zed.md +204 -0
  256. package/src/gdskills/bundled/skills/review/code-b091-review/SKILL.codex.md +209 -0
  257. package/src/gdskills/bundled/skills/review/code-b091-review/SKILL.cursor.md +209 -0
  258. package/src/gdskills/bundled/skills/review/code-b091-review/SKILL.md +208 -0
  259. package/src/gdskills/bundled/skills/review/code-b091-review/SKILL.opencode.md +209 -0
  260. package/src/gdskills/bundled/skills/review/code-b091-review/SKILL.zed.md +209 -0
  261. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.codex.md +263 -0
  262. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.cursor.md +263 -0
  263. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.md +258 -0
  264. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.opencode.md +263 -0
  265. package/src/gdskills/bundled/skills/review/code-mobx-store-review/SKILL.zed.md +263 -0
  266. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.codex.md +175 -0
  267. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.cursor.md +175 -0
  268. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.md +168 -0
  269. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.opencode.md +175 -0
  270. package/src/gdskills/bundled/skills/review/code-style-review/SKILL.zed.md +175 -0
  271. package/src/gdskills/bundled/skills/review/review-architecture/SKILL.md +360 -0
  272. package/src/gdskills/bundled/skills/review/review-backend/SKILL.md +337 -0
  273. package/src/gdskills/bundled/skills/review/review-clean-code/SKILL.md +477 -0
  274. package/src/gdskills/bundled/skills/review/review-core-boundaries/SKILL.md +93 -0
  275. package/src/gdskills/bundled/skills/review/review-flow-graph/SKILL.md +119 -0
  276. package/src/gdskills/bundled/skills/review/review-frontend/SKILL.md +595 -0
  277. package/src/gdskills/bundled/skills/review/review-frontend-conventions/SKILL.md +144 -0
  278. package/src/gdskills/bundled/skills/review/review-highload/SKILL.md +519 -0
  279. package/src/gdskills/bundled/skills/review/review-logic/SKILL.md +323 -0
  280. package/src/gdskills/bundled/skills/review/review-orchestrator/SKILL.md +927 -0
  281. package/src/gdskills/bundled/skills/review/review-orchestrator/input-contract.schema.json +153 -0
  282. package/src/gdskills/bundled/skills/review/review-orchestrator/output-contract.schema.json +77 -0
  283. package/src/gdskills/bundled/skills/review/review-orchestrator/review-context.schema.json +389 -0
  284. package/src/gdskills/bundled/skills/review/review-orchestrator/reviewer-finding.schema.json +189 -0
  285. package/src/gdskills/bundled/skills/review/review-orchestrator/reviewer-input.schema.json +241 -0
  286. package/src/gdskills/bundled/skills/review/review-performance/SKILL.md +344 -0
  287. package/src/gdskills/bundled/skills/review/review-pr-feedback/SKILL.md +327 -0
  288. package/src/gdskills/bundled/skills/review/review-security-code/SKILL.md +348 -0
  289. package/src/gdskills/bundled/skills/review/review-strict/SKILL.md +328 -0
  290. package/src/gdskills/bundled/skills/review/review-style/SKILL.md +343 -0
  291. package/src/gdskills/bundled/skills/review/review-testing-practices/SKILL.md +134 -0
  292. package/src/gdskills/bundled/skills/shared/git-merge-base.md +33 -0
  293. package/src/gdskills/contracts/agent-event.schema.json +32 -0
  294. package/src/gdskills/contracts/orchestrator-state.schema.json +58 -0
  295. package/src/gdskills/contracts/review-finding.schema.json +59 -0
  296. package/src/gdskills/contracts/subagent-dispatch.schema.json +123 -0
  297. package/src/gdskills/contracts/subagent-result.schema.json +136 -0
@@ -0,0 +1,348 @@
1
+ ---
2
+ name: review-security-code
3
+ description: "Use when a code-level security review is requested, checking for injection vulnerabilities, auth gaps, insecure cryptography, secrets, and OWASP Top 10 patterns in changed code. NOT for infrastructure, deployment, or dependency audits."
4
+ triggers:
5
+ - "review security"
6
+ - "security review"
7
+ - "check for vulnerabilities"
8
+ - "security check"
9
+ - "OWASP review"
10
+ - dispatched by review-orchestrator
11
+ metadata:
12
+ author: "MrCipherSmith"
13
+ version: "1.0.0"
14
+ category: "review"
15
+ license: "MIT"
16
+ compatibility: "cursor,codex,zed,opencode,claude"
17
+ ---
18
+
19
+ # Review: Security Code (Code-Level Vulnerabilities)
20
+
21
+ ## Purpose
22
+
23
+ Finds exploitable security vulnerabilities introduced in the changed code of the current branch. Covers injection, auth/authz gaps, IDOR, secrets, insecure crypto, CSRF, path traversal, and framework-specific patterns (NestJS, React). Produces findings with explicit attack vectors and concrete fixes.
24
+
25
+ This skill covers **code-level security only**. It does NOT audit npm/bun dependency trees, Docker configurations, or deployment surfaces — use `security-audit` for those.
26
+
27
+ ---
28
+
29
+ ## Input Contract
30
+
31
+ | Field | Required | Description |
32
+ |-------|----------|-------------|
33
+ | Branch / diff range | No | Defaults to merge-base..HEAD + uncommitted changes |
34
+ | Explicit commit hash/range | No | Review only that range when provided |
35
+ | `JOB_NAME` | No | Job name when dispatched by orchestrator |
36
+ | `CONTEXT_PATH` | No | Path to context doc when dispatched by orchestrator |
37
+
38
+ ---
39
+
40
+ ## Scope Boundaries
41
+
42
+ | Concern | This skill | Use instead |
43
+ |---------|-----------|-------------|
44
+ | Injection (SQL, XSS, command, SSTI) | YES | — |
45
+ | Auth/authz gaps, IDOR, privilege escalation | YES | — |
46
+ | Missing input validation / DTO validation | YES | — |
47
+ | Hardcoded secrets, logging secrets | YES | — |
48
+ | Insecure cryptography (MD5, SHA1, weak random) | YES | — |
49
+ | CSRF, path traversal, open redirect | YES | — |
50
+ | OWASP Top 10 code patterns | YES | — |
51
+ | NestJS-specific: missing guards, unvalidated DTOs | YES | — |
52
+ | React-specific: dangerouslySetInnerHTML, eval() | YES | — |
53
+ | npm/bun dependency vulnerabilities | NO | `security-audit` |
54
+ | Infrastructure / Docker / deployment security | NO | `security-audit` |
55
+ | Performance bottlenecks | NO | `review-performance` |
56
+ | Logic correctness, architecture | NO | `review-logic`, `review-architecture` |
57
+ | Code style, naming | NO | `code-style-review` |
58
+
59
+ ---
60
+
61
+ ## Scope Detection
62
+
63
+ See shared script: `skills/shared/git-merge-base.md`
64
+
65
+ Run the script from that file to determine `MERGE_BASE` (`BASE_SHA`) and `SCOPE` before proceeding.
66
+
67
+ ### Commands to collect the review slice
68
+
69
+ ```bash
70
+ git status
71
+ git log --oneline "${BASE_SHA}..HEAD"
72
+ git diff --stat --name-status "${BASE_SHA}..HEAD"
73
+ git diff "${BASE_SHA}..HEAD"
74
+
75
+ # Include uncommitted changes (default mode):
76
+ git diff --stat --name-status "${BASE_SHA}"
77
+ git diff "${BASE_SHA}"
78
+ git ls-files --others --exclude-standard
79
+ ```
80
+
81
+ For explicit hash/range mode:
82
+
83
+ ```bash
84
+ git diff --stat --name-status <FROM_SHA>..<TO_SHA>
85
+ git diff <FROM_SHA>..<TO_SHA>
86
+ ```
87
+
88
+ ---
89
+
90
+ ## Review Checklist
91
+
92
+ Work through every category below for each changed file. Tie every finding to a concrete line in the diff.
93
+
94
+ ### 1. Injection Vulnerabilities
95
+
96
+ **SQL Injection**
97
+ - [ ] Raw SQL built by string concatenation or template literals with user input
98
+ - [ ] ORM `query()` / `rawQuery()` calls with unparameterized values
99
+ - [ ] TypeORM `createQueryBuilder` using `.where(\`field = '${value}'\`)` instead of parameterized bindings
100
+
101
+ Attack vector template: _"Attacker sends `' OR '1'='1` as `<param>`, bypassing WHERE clause."_
102
+
103
+ **XSS (Cross-Site Scripting)**
104
+ - [ ] React `dangerouslySetInnerHTML` with unsanitized user content
105
+ - [ ] Template engines rendering user data without escaping
106
+ - [ ] Server-side HTML construction with string concatenation
107
+
108
+ Attack vector template: _"Attacker injects `<script>document.cookie</script>` via `<param>`."_
109
+
110
+ **Command Injection**
111
+ - [ ] `child_process.exec()` / `execSync()` with user-supplied arguments
112
+ - [ ] Shell string building: `exec(\`ls ${userInput}\`)`
113
+ - [ ] Prefer `execFile()` / `spawn()` with argument arrays
114
+
115
+ Attack vector template: _"Attacker passes `; rm -rf /` as `<param>`, executed in shell context."_
116
+
117
+ **Server-Side Template Injection (SSTI)**
118
+ - [ ] Template engine `render()` called with user-controlled template string (not just data)
119
+ - [ ] Dynamic template loading from user-supplied names without allowlist
120
+
121
+ **`eval()` / `Function()` / `vm.runInNewContext()`**
122
+ - [ ] Any usage with non-literal, non-compile-time strings
123
+
124
+ ### 2. Authentication and Authorization
125
+
126
+ **Missing Authentication Guards**
127
+ - [ ] NestJS: controllers or routes missing `@UseGuards(JwtAuthGuard)` (or equivalent)
128
+ - [ ] Express: middleware chain missing auth check before sensitive handler
129
+ - [ ] GraphQL resolvers missing `@UseGuards` decorator
130
+
131
+ **Missing Authorization / RBAC**
132
+ - [ ] NestJS: routes with data-mutating operations missing `@Roles()` / `@Permissions()`
133
+ - [ ] Guard present but role check is overly permissive (e.g., allows any authenticated user for admin action)
134
+
135
+ **Broken Auth Logic**
136
+ - [ ] JWT verification disabled or bypassed (`verify: false`, `algorithms: []`)
137
+ - [ ] Session fixation: session ID not rotated on privilege elevation
138
+ - [ ] Password comparison with `==` instead of `crypto.timingSafeEqual` or bcrypt
139
+
140
+ **Privilege Escalation**
141
+ - [ ] User can change their own `role`, `permissions`, or `isAdmin` via a user-facing update endpoint
142
+ - [ ] User ID taken from request body instead of authenticated session/token
143
+
144
+ ### 3. Insecure Direct Object References (IDOR)
145
+
146
+ - [ ] DB lookup by `id` taken from request params/body without verifying ownership: `repo.findOne({ id: req.params.id })` — no `userId` scope check
147
+ - [ ] File access, download, or deletion by filename/path from request without ownership validation
148
+
149
+ Attack vector template: _"Attacker replaces `id=123` with `id=456` in request, accessing another user's resource."_
150
+
151
+ ### 4. Missing Input Validation / Sanitization
152
+
153
+ - [ ] NestJS: DTO class without `class-validator` decorators (`@IsString()`, `@IsEmail()`, `@IsUUID()`, etc.)
154
+ - [ ] NestJS: `ValidationPipe` not applied globally or per-handler
155
+ - [ ] Express: no `express-validator` or equivalent on body/query params
156
+ - [ ] Accepting unbounded `limit`/`offset` from user without max cap (DoS vector)
157
+ - [ ] File upload: MIME type and extension validated only client-side, not server-side
158
+ - [ ] Email/URL fields accepted without format validation
159
+
160
+ ### 5. Secrets and Credentials
161
+
162
+ - [ ] Hardcoded API keys, passwords, tokens, or private keys in source
163
+ - [ ] Secrets passed via URL query params (end up in logs and proxies)
164
+ - [ ] Passwords, tokens, or PII logged via `console.log`, `logger.debug`, or error serialization
165
+ - [ ] `.env` files committed to version control
166
+ - [ ] JWT secret is a short literal string (`"secret"`, `"myapp"`)
167
+
168
+ ### 6. Insecure Cryptography
169
+
170
+ - [ ] MD5 or SHA1 used for password hashing or security tokens
171
+ - [ ] `Math.random()` used to generate tokens, nonces, or session IDs — use `crypto.randomBytes()`
172
+ - [ ] AES-ECB mode (deterministic, leaks patterns) — prefer AES-GCM
173
+ - [ ] RSA with key size < 2048 bits
174
+ - [ ] Hardcoded IV/salt instead of random per-operation
175
+
176
+ ### 7. CSRF
177
+
178
+ - [ ] State-changing endpoints (POST/PUT/PATCH/DELETE) accessible from browser context without CSRF token validation
179
+ - [ ] CSRF protection middleware bypassed for specific routes
180
+ - [ ] SameSite cookie attribute absent or set to `None` without `Secure`
181
+
182
+ ### 8. Path Traversal
183
+
184
+ - [ ] File path constructed from user input without normalization and allowlist check: `fs.readFile('./uploads/' + filename)`
185
+ - [ ] `path.join()` used but result not validated against base directory (join can escape with `..`)
186
+ - [ ] Correct pattern: `path.resolve(BASE, filename)` followed by check that result starts with `BASE`
187
+
188
+ Attack vector template: _"Attacker sends `filename=../../etc/passwd`, reading arbitrary server files."_
189
+
190
+ ### 9. Open Redirect
191
+
192
+ - [ ] Redirect target taken from user-supplied query param without allowlist: `res.redirect(req.query.returnTo)`
193
+ - [ ] Only relative paths or allowlisted origins should be accepted as redirect targets
194
+
195
+ ### 10. React-Specific Patterns
196
+
197
+ - [ ] `dangerouslySetInnerHTML={{ __html: userContent }}` without DOMPurify or equivalent sanitization
198
+ - [ ] `eval(userInput)` or `new Function(userInput)` in component or hook
199
+ - [ ] Sensitive data stored in `localStorage` / `sessionStorage` (XSS accessible)
200
+ - [ ] `postMessage` handler without origin check
201
+
202
+ ### 11. NestJS-Specific Patterns
203
+
204
+ - [ ] Controller method lacks `@UseGuards` when the route handles sensitive data or mutations
205
+ - [ ] DTO class lacks `class-validator` annotations; `ValidationPipe` has `whitelist: false` or `forbidNonWhitelisted: false`
206
+ - [ ] `@Body() body: any` — accepting untyped, unvalidated body
207
+ - [ ] `@Public()` decorator used on an endpoint that should require auth
208
+ - [ ] File upload handler missing MIME-type and size validation
209
+
210
+ ---
211
+
212
+ ## Iron Laws
213
+
214
+ 1. **Every security finding MUST state the attack vector explicitly.** Name the attacker action, the entry point, and the impact. No attack vector → no finding above INFO.
215
+ 2. **A finding without a reproducible code path is INFO, not blocker.** "Could theoretically..." = INFO. "Attacker sends X to endpoint Y, which executes Z" = blocker/major.
216
+ 3. **Never flag theoretical vulnerabilities.** The vulnerable code path must exist in the changed diff. Do not report hypothetical misuse of safe APIs.
217
+ 4. **Do not flag the same pattern twice.** If the same class of issue (e.g., missing `@UseGuards`) appears in five files, group them under one finding with all locations listed.
218
+
219
+ ---
220
+
221
+ ## Output Contract
222
+
223
+ ### Class scope — required for `blocker` and `major`
224
+
225
+ Every `blocker` and `major` finding must carry `class_scope`: **every** site that
226
+ holds the shape you found, and **how you enumerated them** — the grep or query
227
+ you ran, or the guard that derives the set.
228
+
229
+ A finding anchored to one `file:line` is a claim about one site. The recorded
230
+ history of this repository is that a fix then repairs that site and leaves its
231
+ siblings: one writer of five, one operator instruction of four, six readers of
232
+ eight. Each was found by the *next* review round, which is why reviews here have
233
+ run to seven and four rounds instead of one.
234
+
235
+ ```yaml
236
+ class_scope:
237
+ sites: ["src/lib/shell-config.ts:60", "src/session/store.ts:133"]
238
+ enumeration_method: "grep for the config-path resolvers; 7 writers, 2 unguarded"
239
+ ```
240
+
241
+ "I checked the others" is not an enumeration method. A single-entry `sites` list
242
+ is a claim that the class has exactly one member — make it deliberately, because
243
+ `review-finding.schema.json` accepts it and the next round tests it.
244
+
245
+ `minor` and `info` may omit it: enumerating the class for every low-severity
246
+ observation is theatre, not rigour.
247
+
248
+ ### Status line (first line of response)
249
+
250
+ ```
251
+ STATUS: DONE | DONE_WITH_CONCERNS | NEEDS_CONTEXT | BLOCKED
252
+ ```
253
+
254
+ - `DONE` — review complete, findings (if any) are below, no external info needed
255
+ - `DONE_WITH_CONCERNS` — review complete but one or more blockers or majors found
256
+ - `NEEDS_CONTEXT` — cannot determine whether code is vulnerable without additional context (e.g., missing route config, missing auth middleware file not in diff)
257
+ - `BLOCKED` — cannot run git commands or access the repo
258
+
259
+ ### Report structure
260
+
261
+ ```markdown
262
+ STATUS: DONE_WITH_CONCERNS
263
+
264
+ ## Security Review
265
+
266
+ ### Scope
267
+ - Branch: `<BRANCH>`
268
+ - Parent ref: `<PARENT>`
269
+ - Merge-base: `<BASE_SHA>`
270
+ - Scope mode: default-with-uncommitted | explicit-hash-range
271
+ - Changed files reviewed: <N>
272
+
273
+ ### Summary
274
+ - Blockers: <N>
275
+ - Major: <N>
276
+ - Minor: <N>
277
+ - Info: <N>
278
+
279
+ ### Findings
280
+
281
+ ### [F-001] Title
282
+ - **Severity**: blocker | major | minor | info
283
+ - **File**: path/to/file.ts:line
284
+ - **Attack vector**: precise description of how an attacker exploits this
285
+ - **Problem**: what is wrong in the code
286
+ - **Why it matters**: concrete impact (data breach, account takeover, RCE, etc.)
287
+ - **Fix**: concrete suggestion
288
+ - **Patch** (optional):
289
+ ```diff
290
+ - vulnerable line
291
+ + fixed line
292
+ ```
293
+
294
+ ### Clean Areas
295
+ [List categories with no findings, confirming they were checked]
296
+ ```
297
+
298
+ ### Severity definitions
299
+
300
+ | Severity | Meaning |
301
+ |----------|---------|
302
+ | `blocker` | Exploitable vulnerability in the current code path; must fix before merge |
303
+ | `major` | High-likelihood risk with a plausible attack scenario; strongly recommended before merge |
304
+ | `minor` | Hardening improvement or defense-in-depth; can ship but should be tracked |
305
+ | `info` | Pattern worth noting; no clear attack vector in current code |
306
+
307
+ ---
308
+
309
+ ## Red Flags Table
310
+
311
+ Stop and re-read these rules if you are thinking:
312
+
313
+ | Rationalization | Why it's wrong |
314
+ |---|---|
315
+ | "It's probably behind auth so injection doesn't matter" | Auth is a separate layer; injection must be fixed at the data layer regardless |
316
+ | "The team would never send that payload" | Attackers are not on the team |
317
+ | "MD5 is used for caching keys, not passwords — it's fine" | State it as INFO, but do not silently skip it; it often drifts |
318
+ | "I'll downgrade to minor to avoid friction" | Severity reflects real risk, not social dynamics |
319
+ | "The code uses an ORM so SQL injection is not possible" | ORMs have raw-query escape hatches; verify parameterization |
320
+ | "No attack vector found — I'll call it major anyway" | No attack vector = INFO only, per Iron Law 1 |
321
+ | "It's outside the diff but the pattern is clearly wrong" | Only flag changed code; flag legacy via INFO with note to track separately |
322
+
323
+ ---
324
+
325
+ ## Job Context Awareness
326
+
327
+ When dispatched by `job-orchestrator` or `review-orchestrator` as part of a job pipeline, the prompt MAY include:
328
+
329
+ ```
330
+ JOB_NAME: <job-name>
331
+ CONTEXT_PATH: <JOBS_ROOT>/<job-name>/ai/context.md
332
+ ```
333
+
334
+ If provided and the file exists, read the context document before starting the review. Use it to:
335
+ - Understand which auth framework is in use (custom JWT, Passport, Keycloak, etc.)
336
+ - Identify intentional public endpoints that are documented as unauthenticated by design
337
+ - Understand which validation library and pipe configuration the project uses
338
+ - Avoid flagging intentional architectural security decisions as findings
339
+
340
+ If the file does not exist or is not provided, proceed normally — context is optional and non-blocking.
341
+
342
+
343
+ ## Orchestrated Review Contract
344
+
345
+ When dispatched by `review-orchestrator`, follow the provided `reviewer-input.schema.json` payload. Return a `REVIEW_RESULT` object compatible with `skills/review-orchestrator/reviewer-finding.schema.json`, then a concise markdown summary. Keep findings evidence-based, include concrete `suggested_fix` for every blocker/major, and return `NEEDS_CONTEXT` instead of guessing when required context is missing.
346
+
347
+ ---
348
+
@@ -0,0 +1,328 @@
1
+ ---
2
+ name: review-strict
3
+ description: |
4
+ Use when: a strict engineering pass is needed — either as a meta-reviewer reading consolidated
5
+ findings from other reviewers and elevating weak findings, or standalone on a git diff.
6
+ Covers "strict review", "review --strict", "boss review", "review as boss", or dispatched
7
+ by review-orchestrator as an optional post-pass after other reviewers complete.
8
+ NOT for: first-pass review (run domain reviewers first); large refactors outside the diff
9
+ scope (file separately).
10
+ version: "1.0.0"
11
+ triggers:
12
+ - "strict review"
13
+ - "review --strict"
14
+ - "boss review"
15
+ - "review as boss"
16
+ metadata:
17
+ author: "MrCipherSmith"
18
+ version: "1.0.0"
19
+ category: "review"
20
+ license: "MIT"
21
+ compatibility: "cursor,codex,zed,opencode,claude"
22
+ ---
23
+
24
+ # Review — Strict (Meta-Reviewer)
25
+
26
+ Strict engineering review pass. This is a **meta-reviewer**: it reads findings from other
27
+ reviewers (or the raw diff when run standalone) and applies strict engineering judgment.
28
+ It elevates understated findings, adds architectural commentary, and catches issues that
29
+ domain reviewers may have let through. Style: direct, no-fluff, engineering-focused.
30
+
31
+ ---
32
+
33
+ ## Workflow
34
+
35
+ ```
36
+ review-strict Progress:
37
+ - [ ] Step 1: Read Job Context (if CONTEXT_PATH provided)
38
+ - [ ] Step 2: Determine input mode (meta or standalone)
39
+ - [ ] Step 3: If standalone — determine git scope and collect diff
40
+ - [ ] Step 4: If meta — ingest findings from other reviewers
41
+ - [ ] Step 5: Apply strict principles to findings or diff
42
+ - [ ] Step 6: Elevate understated findings
43
+ - [ ] Step 7: Add new findings not caught by other reviewers
44
+ - [ ] Step 8: Check single source of truth violations
45
+ - [ ] Step 9: Emit enhanced findings + strict commentary
46
+ ```
47
+
48
+ ---
49
+
50
+ ## Input Contract
51
+
52
+ | Field | Type | Required | Description |
53
+ |-------|------|----------|-------------|
54
+ | `findings` | string | no | Consolidated findings from other reviewers (markdown). When present, operate in meta mode. |
55
+ | `branch` | string | no | Branch to review. Defaults to current branch. Required in standalone mode. |
56
+ | `commit_range` | string | no | Explicit range (e.g., `abc123..HEAD`). Overrides merge-base in standalone mode. |
57
+ | `context_doc` | string | no | Path to job context document (e.g., `<JOBS_ROOT>/<job>/ai/context.md`). |
58
+
59
+ ---
60
+
61
+ ## Mode Detection
62
+
63
+ **Meta mode** (preferred when dispatched by review-orchestrator `--strict`):
64
+ - Input includes pre-existing findings from domain reviewers
65
+ - Read those findings, then read the diff for context
66
+ - Operate on both: elevate weak findings, add new ones
67
+
68
+ **Standalone mode** (when invoked directly without pre-existing findings):
69
+ - No findings provided
70
+ - Determine git scope via `skills/shared/git-merge-base.md`
71
+ - Collect diff and apply full strict checklist independently
72
+
73
+ ---
74
+
75
+ ## Scope Detection (standalone mode)
76
+
77
+ See shared script: `skills/shared/git-merge-base.md`
78
+
79
+ ```bash
80
+ # Default mode — all changes from merge-base to working tree
81
+ git diff --name-only "${BASE_SHA}"
82
+ git diff "${BASE_SHA}"
83
+
84
+ # Explicit range mode
85
+ git diff --name-only <FROM_SHA>..<TO_SHA>
86
+ git diff <FROM_SHA>..<TO_SHA>
87
+ ```
88
+
89
+ ---
90
+
91
+ ## Strict Principles
92
+
93
+ ### Elevation Rules (meta mode)
94
+
95
+ When reading findings from other reviewers, elevate severity when:
96
+
97
+ | Condition | Elevate to |
98
+ |-----------|-----------|
99
+ | Finding labeled `minor` but could cause a bug under specific conditions | `major` |
100
+ | Finding labeled `major` but blocks correctness or data integrity in any realistic scenario | `blocker` |
101
+ | Finding labeled `info` but represents a design flaw (not just a suggestion) | `minor` or `major` |
102
+ | Finding is vague ("consider refactoring X") without a concrete fix | Downgrade to `info` or rewrite with concrete fix |
103
+
104
+ Every elevation must cite the line or code evidence that justifies the change. No elevation without evidence.
105
+
106
+ ---
107
+
108
+ ### Core Strict Checks
109
+
110
+ **No ducktape fixes**
111
+ - A fix that masks a symptom rather than addressing the root cause — flag as `major`
112
+ - Example: `setTimeout(fn, 0)` to defer a race condition instead of fixing the race — flag as `major`; demand root cause fix
113
+ - Example: `|| []` to avoid a null check instead of ensuring the upstream always returns an array — flag as `minor` if trivial, `major` if the null case indicates a real upstream bug
114
+
115
+ **No magic timeouts**
116
+ - `setTimeout(fn, 0)`, `setTimeout(fn, 100)`, `setTimeout(fn, 500)` without a comment explaining exactly why — always flag as `major`
117
+ - Comment must explain: what is being deferred, why, and what the correct fix would be if time allowed
118
+ - `setInterval` without a cleanup mechanism — `major`
119
+
120
+ **No `any` and no unsafe casts**
121
+ - `any` in new code — `major`
122
+ - `as any` — `major`
123
+ - `as unknown as T` without an explanatory comment — `major`
124
+ - `@ts-ignore` without an explanatory comment — `major`
125
+
126
+ **TODO comments in merged code**
127
+ - `// TODO` / `// FIXME` / `// HACK` present in the diff — flag as `minor` with a note: "file a ticket or resolve before merge"
128
+ - `// TODO: remove before deploy` in production-bound code — **blocker**
129
+
130
+ **No architectural shortcuts**
131
+ - Logic in the wrong layer: UI layer calling APIs directly, controller containing business rules, view accessing store internals — `major`
132
+ - Challenge with: "why is this in this layer?" — must have a concrete answer
133
+ - Cross-cutting concerns scattered in multiple places instead of one — `major` (single source of truth violation)
134
+
135
+ **Single source of truth**
136
+ - Same rule or check duplicated in two or more places — flag as `major`
137
+ - Example: input validation logic in both the controller and the service — pick one authoritative location
138
+ - Example: same constant defined in two files — centralize
139
+
140
+ **MobX conventions (when MobX is in the diff)**
141
+ - Inter-store callbacks (`onChangeX`, `handleX`, `syncX`, `onFireX`) that are `public` — flag as `major` ("should be `private`; public only if called from JSX")
142
+ - `useCallback` or `useMemo` added without a demonstrable need (no expensive computation, no stable reference requirement) — flag as `minor`
143
+ - MobX `autorun` or `reaction` without a disposal mechanism — flag as `major` (memory leak)
144
+
145
+ **Conventions**
146
+ - `currentState` naming: observable state fields named with `current` prefix when they represent present value — flag inconsistency as `minor`
147
+ - Interface names without `I` prefix (`UserService` as an interface instead of `IUserService`) — flag as `minor`
148
+
149
+ **No scope expansion**
150
+ - Large refactors outside the diff scope: note them as `info` with "out of scope — file separately"
151
+ - Never propose a rewrite of unrelated code in the same response
152
+
153
+ ---
154
+
155
+ ## Architectural Commentary
156
+
157
+ After findings, add a brief "Not Today" section for:
158
+ - Architectural shortcuts visible in the diff that are not bugs but will hurt maintainability
159
+ - Technical debt introduced intentionally or unintentionally
160
+ - Patterns that contradict the project's stated architecture
161
+
162
+ Use the phrase "not today" sparingly — only when a shortcut was taken that needs to be acknowledged.
163
+ Format: `> **Not today:** [what was shortcutted and why it matters long-term]`
164
+
165
+ This section is non-blocking (info-level). It is opinion, not a finding. Keep it to ≤3 items.
166
+
167
+ ---
168
+
169
+ ## Iron Laws
170
+
171
+ | Rule | Rationale |
172
+ |------|-----------|
173
+ | Every finding must cite code evidence (file:line or diff hunk) | "Strictly speaking" without evidence = `info` only |
174
+ | No elevation without a concrete reason stated | Elevation is a claim; claims need backing |
175
+ | No scope expansion — large refactors outside the diff = "out of scope, file separately" | Scope creep in reviews is as harmful as in implementation |
176
+ | Severity of a finding is per-finding, never averaged or influenced by other findings | Each finding stands on its own |
177
+ | `setTimeout(0)` — always flag, no exceptions | There is always a better solution |
178
+ | `any` in new code — always flag, no exceptions | Type safety is non-negotiable |
179
+
180
+ ---
181
+
182
+ ## Orchestrated Review Contract
183
+
184
+ When dispatched by `review-orchestrator`, follow the provided `reviewer-input.schema.json` payload. Return a `REVIEW_RESULT` object compatible with `skills/review-orchestrator/reviewer-finding.schema.json`, then a concise markdown summary. Keep findings evidence-based, include concrete `suggested_fix` for every blocker/major, and return `NEEDS_CONTEXT` instead of guessing when required context is missing.
185
+
186
+ ---
187
+
188
+ ## Finding Format
189
+
190
+ ### Class scope — required for `blocker` and `major`
191
+
192
+ Every `blocker` and `major` finding must carry `class_scope`: **every** site that
193
+ holds the shape you found, and **how you enumerated them** — the grep or query
194
+ you ran, or the guard that derives the set.
195
+
196
+ A finding anchored to one `file:line` is a claim about one site. The recorded
197
+ history of this repository is that a fix then repairs that site and leaves its
198
+ siblings: one writer of five, one operator instruction of four, six readers of
199
+ eight. Each was found by the *next* review round, which is why reviews here have
200
+ run to seven and four rounds instead of one.
201
+
202
+ ```yaml
203
+ class_scope:
204
+ sites: ["src/lib/shell-config.ts:60", "src/session/store.ts:133"]
205
+ enumeration_method: "grep for the config-path resolvers; 7 writers, 2 unguarded"
206
+ ```
207
+
208
+ "I checked the others" is not an enumeration method. A single-entry `sites` list
209
+ is a claim that the class has exactly one member — make it deliberately, because
210
+ `review-finding.schema.json` accepts it and the next round tests it.
211
+
212
+ `minor` and `info` may omit it: enumerating the class for every low-severity
213
+ observation is theatre, not rigour.
214
+
215
+ ```markdown
216
+ ### [F-001] Title
217
+
218
+ - **Severity**: blocker | major | minor | info
219
+ - **File**: path/to/file.ts:line
220
+ - **Problem**: what is wrong
221
+ - **Why it matters**: correctness / testability / conventions / maintainability
222
+ - **Fix**: concrete suggestion
223
+ - **Elevated from**: minor → major (or: new finding) <!-- only in meta mode -->
224
+ - **Patch** (optional):
225
+ ```diff
226
+ - old line
227
+ + new line
228
+ ```
229
+ ```
230
+
231
+ ---
232
+
233
+ ## Output Contract
234
+
235
+ ```
236
+ STATUS: DONE | DONE_WITH_CONCERNS | NEEDS_CONTEXT | BLOCKED
237
+ ```
238
+
239
+ - `DONE` — no blockers or majors after strict pass
240
+ - `DONE_WITH_CONCERNS` — one or more blocker or major findings
241
+ - `NEEDS_CONTEXT` — cannot assess intent without context doc; state what is missing
242
+ - `BLOCKED` — cannot access diff or findings input; state reason
243
+
244
+ ```markdown
245
+ # Strict Review Report
246
+
247
+ ## Verdict: APPROVE | APPROVE_WITH_SUGGESTIONS | REQUEST_CHANGES
248
+
249
+ ## Summary
250
+ <2-4 sentences: overall engineering quality, key concerns, whether findings from other
251
+ reviewers were understated.>
252
+
253
+ ## Review Scope
254
+ - Branch: `<BRANCH>`
255
+ - Parent ref: `<PARENT>`
256
+ - Merge-base: `<BASE_SHA>`
257
+ - Mode: `<meta | standalone>`
258
+ - Scope mode: `<default-with-uncommitted | explicit-hash-range>`
259
+ - Input findings ingested: <N> (meta mode only)
260
+
261
+ ## Stats
262
+ - blocker: N (N elevated)
263
+ - major: N (N elevated, N new)
264
+ - minor: N
265
+ - info: N
266
+
267
+ ## Blockers (must fix before merge)
268
+ <[F-NNN] findings>
269
+
270
+ ## Major Issues
271
+ <[F-NNN] findings — mark elevated ones clearly>
272
+
273
+ ## Minor & Info
274
+ <[F-NNN] findings>
275
+
276
+ ## Not Today
277
+ > **Not today:** [architectural shortcut 1]
278
+ > **Not today:** [architectural shortcut 2]
279
+
280
+ ## Positive Notes
281
+ <Optional. What held up to strict scrutiny.>
282
+ ```
283
+
284
+ ---
285
+
286
+ ## Scope Boundaries
287
+
288
+ | Concern | This skill | Use instead |
289
+ |---------|------------|-------------|
290
+ | Elevating/validating findings from domain reviewers | YES | — |
291
+ | Strict engineering commentary on diff | YES | — |
292
+ | `setTimeout`, `any`, ducktape, SSOT violations | YES | — |
293
+ | MobX conventions (inter-store access, disposal) | YES | — |
294
+ | First-pass logic review | NO | `review-logic` |
295
+ | First-pass frontend patterns | NO | `review-frontend` |
296
+ | First-pass backend patterns | NO | `review-backend` |
297
+ | Large out-of-scope refactors | NO | file separately |
298
+
299
+ ---
300
+
301
+ ## Job Context Awareness
302
+
303
+ When dispatched by `job-orchestrator` or called with an explicit context path, the prompt MAY include:
304
+
305
+ ```
306
+ JOB_NAME: <job-name>
307
+ CONTEXT_PATH: <JOBS_ROOT>/<job-name>/ai/context.md
308
+ ```
309
+
310
+ If provided and the file exists, read the context document **before** applying strict principles.
311
+ Use it to understand:
312
+ - Intentional architectural decisions (do not flag agreed-upon patterns as shortcuts)
313
+ - Which libraries, patterns, and conventions were explicitly chosen
314
+ - Acceptance criteria (to detect spec gaps if running standalone)
315
+
316
+ If absent, proceed normally — context is optional and non-blocking.
317
+
318
+ ---
319
+
320
+ ## Red Flags
321
+
322
+ | Rationalization | Why it is wrong |
323
+ |----------------|-----------------|
324
+ | "The other reviewer already caught it, I don't need to address it" | Meta mode means you own the final assessment; weak findings stay weak unless you act |
325
+ | "setTimeout(0) is a common pattern" | Common patterns can still be wrong; demand the root cause fix |
326
+ | "I'll add a 'Not Today' for everything I disagree with" | Not Today is for real shortcuts, not personal preference; ≤3 items |
327
+ | "Elevating to blocker feels harsh" | Harsh is blocking a production incident; elevate when the evidence supports it |
328
+ | "The `any` is in a test file" | Type safety in tests matters; typed mocks prevent false-green tests |