@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,144 @@
1
+ ---
2
+ name: review-frontend-conventions
3
+ description: |
4
+ Use when reviewing frontend code against repository-local conventions commonly
5
+ captured in CLAUDE.md or similar project guides: React/MobX boundaries,
6
+ TypeScript strictness, i18n placement, storage wrappers, error handling,
7
+ styling tokens, Storybook expectations, and local tooling rules. Dispatched
8
+ by review-orchestrator for --frontend-conventions, --project-conventions,
9
+ --all, or frontend src/**/*.ts(x) changes when local convention docs exist.
10
+ metadata:
11
+ author: "MrCipherSmith"
12
+ version: "1.0.0"
13
+ category: "review"
14
+ license: "MIT"
15
+ ---
16
+
17
+ # Review — Frontend Conventions
18
+
19
+ Reviewer for frontend repository conventions that are more specific than generic React/MobX
20
+ correctness. Use it alongside `review-frontend`, `review-style`, `review-performance`, and
21
+ `review-logic`.
22
+
23
+ Before reviewing, read the nearest project guide files if they exist: root `CLAUDE.md`,
24
+ `AGENTS.md`, `.junie/guidelines.md`, `ARCHITECTURE.md`, and module-level `CLAUDE.md` files.
25
+ The checklist below is a neutral baseline; local project rules win when they are stricter.
26
+
27
+ ---
28
+
29
+ ## Scope
30
+
31
+ Review changed frontend source, stories, tests, and UI wrapper files for local conventions.
32
+ Do not flag unrelated generic React/MobX issues unless they also violate a local convention or
33
+ the baseline below.
34
+
35
+ If no local convention document exists, run only the neutral baseline and state that no
36
+ project-specific guide was found.
37
+
38
+ ---
39
+
40
+ ## Checklist
41
+
42
+ ### Styling and UI
43
+
44
+ - Prefer the repository's styling system consistently (Tailwind, CSS modules, design tokens, or
45
+ the established local framework).
46
+ - Avoid inline `style` except for genuinely dynamic positioning or third-party integration seams.
47
+ - Theme colors and spacing come from local tokens, not ad hoc literals.
48
+ - Use the established UI kit and wrapper layer; do not bypass shared wrappers without a reason.
49
+ - Reuse existing icons/assets before adding new ones.
50
+
51
+ ### TypeScript
52
+
53
+ - Avoid `any` and broad `as` casts. Prefer type guards, discriminated unions, and precise types.
54
+ - Keep tests and stories typed unless intentionally exercising invalid edge cases.
55
+ - Follow local React type import conventions consistently.
56
+ - Write new code in the direction of stricter compiler settings.
57
+
58
+ ### React Components
59
+
60
+ - Keep components thin: read state, bind events, render.
61
+ - Business logic, IO, validation, and data transformation belong in stores/services.
62
+ - Avoid React local state/memo/callback hooks where the local architecture expects observable or
63
+ computed state.
64
+ - Use effects only for lifecycle, subscriptions, and third-party integration; always clean up.
65
+ - Components reading observable state are wrapped in the repository's reactive wrapper.
66
+ - Props shape and file naming follow local conventions.
67
+
68
+ ### State Stores
69
+
70
+ - Store classes follow local naming, file casing, context, and hook conventions.
71
+ - Observable classes initialize their reactivity in constructors.
72
+ - Member ordering follows local lint/member-ordering rules.
73
+ - UI-called actions preserve `this` binding.
74
+ - Async callbacks that mutate observable state re-enter an action boundary.
75
+ - Derived serializable state has a single source of truth such as `currentState` when that is the
76
+ local pattern.
77
+
78
+ ### i18n, Storage, and Errors
79
+
80
+ - Translations happen at the view/render boundary unless local architecture says otherwise.
81
+ - Do not hide missing translations with inline fallbacks when the project expects JSON/catalog
82
+ entries.
83
+ - Browser storage goes through shared wrappers/adapters; direct `localStorage`/`sessionStorage`
84
+ access is a review finding when wrappers exist.
85
+ - Catch blocks normalize user-facing messages, preserve original errors for logging, and notify
86
+ through the established UI notification channel.
87
+
88
+ ### Stories and Tooling
89
+
90
+ - New reusable UI surfaces have stories or examples matching local standards.
91
+ - Stories include representative default, empty/minimal, and stress/large states where useful.
92
+ - Wrapper components expose plain props for controls when the primary component is store-only.
93
+ - Treat unused-code tools as signals: preserve intentional public APIs with narrow ignores rather
94
+ than deleting documented runtime/story/test entrypoints.
95
+
96
+ ---
97
+
98
+ ## Orchestrated Review Contract
99
+
100
+ 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.
101
+
102
+ ---
103
+
104
+ ## Finding Format
105
+
106
+ ### Class scope — required for `blocker` and `major`
107
+
108
+ Every `blocker` and `major` finding must carry `class_scope`: **every** site that
109
+ holds the shape you found, and **how you enumerated them** — the grep or query
110
+ you ran, or the guard that derives the set.
111
+
112
+ A finding anchored to one `file:line` is a claim about one site. The recorded
113
+ history of this repository is that a fix then repairs that site and leaves its
114
+ siblings: one writer of five, one operator instruction of four, six readers of
115
+ eight. Each was found by the *next* review round, which is why reviews here have
116
+ run to seven and four rounds instead of one.
117
+
118
+ ```yaml
119
+ class_scope:
120
+ sites: ["src/lib/shell-config.ts:60", "src/session/store.ts:133"]
121
+ enumeration_method: "grep for the config-path resolvers; 7 writers, 2 unguarded"
122
+ ```
123
+
124
+ "I checked the others" is not an enumeration method. A single-entry `sites` list
125
+ is a claim that the class has exactly one member — make it deliberately, because
126
+ `review-finding.schema.json` accepts it and the next round tests it.
127
+
128
+ `minor` and `info` may omit it: enumerating the class for every low-severity
129
+ observation is theatre, not rigour.
130
+
131
+ ```markdown
132
+ ### [F-NNN] Title
133
+
134
+ - **Severity**: blocker | major | minor | info
135
+ - **File**: path/to/file.ts:line
136
+ - **Problem**: what local frontend convention is violated
137
+ - **Why it matters**: runtime behavior, maintainability, CI, UX, or developer workflow impact
138
+ - **Fix**: concrete project-aligned change
139
+ ```
140
+
141
+ Severity guidance: lost reactivity, direct storage quota risk, masked translation/error behavior,
142
+ and violations that break CI are `blocker`/`major`; naming/story coverage is usually `minor`
143
+ unless it breaks tooling or controls.
144
+
@@ -0,0 +1,519 @@
1
+ ---
2
+ name: review-highload
3
+ description: |
4
+ Use when: reviewing code that will run under high concurrency or high traffic —
5
+ race conditions, connection pool exhaustion, cache invalidation, missing indexes,
6
+ unbounded queues, missing backpressure, retry storms, idempotency gaps,
7
+ hot-path blocking I/O, and distributed systems anti-patterns.
8
+ Triggered by: "review highload", "review scalability", "highload review",
9
+ "review concurrency", "review --highload", or dispatched by review-orchestrator.
10
+ NOT for: frontend re-render performance (review-performance), general N+1 queries
11
+ (review-performance), clean code style (review-clean-code), or NestJS module structure
12
+ (review-architecture).
13
+ version: "1.0.0"
14
+ triggers:
15
+ - "review highload"
16
+ - "review scalability"
17
+ - "highload review"
18
+ - "review concurrency"
19
+ - "review distributed"
20
+ - "review --highload"
21
+ - dispatched by review-orchestrator
22
+ metadata:
23
+ author: "MrCipherSmith"
24
+ version: "1.0.0"
25
+ category: "review"
26
+ license: "MIT"
27
+ compatibility: "cursor,codex,zed,opencode,claude"
28
+ ---
29
+
30
+ # Review: High-Load & Scalability
31
+
32
+ Specialized reviewer for **code that will run under significant concurrent load**.
33
+ Focuses on correctness under concurrency, resource contention, back-pressure, failure
34
+ modes at scale, and distributed systems invariants — not general performance profiling.
35
+
36
+ Reviews only changes introduced in the current branch (merge-base to HEAD).
37
+
38
+ ---
39
+
40
+ ## Workflow
41
+
42
+ ```
43
+ High-Load Review Progress:
44
+ - [ ] Step 1: Read Job Context (if provided) — understand expected load profile
45
+ - [ ] Step 2: Determine git scope (merge-base)
46
+ - [ ] Step 3: Collect diff and changed file list
47
+ - [ ] Step 4: Concurrency and race condition check
48
+ - [ ] Step 5: Resource management check (connections, threads, file handles, memory)
49
+ - [ ] Step 6: Caching and cache invalidation check
50
+ - [ ] Step 7: Database access patterns under load
51
+ - [ ] Step 8: Async processing and queue patterns
52
+ - [ ] Step 9: Retry, timeout, and circuit breaker patterns
53
+ - [ ] Step 10: Idempotency and distributed invariants
54
+ - [ ] Step 11: Emit findings in unified format
55
+ ```
56
+
57
+ ---
58
+
59
+ ## Input Contract
60
+
61
+ | Field | Type | Required | Description |
62
+ |-------|------|----------|-------------|
63
+ | `branch` | string | no | Branch to review. Defaults to current branch. |
64
+ | `commit_range` | string | no | Explicit hash or range. Overrides merge-base detection. |
65
+ | `context_doc` | string | no | Path to job context document. Read before reviewing to understand expected RPS, SLA, and load profile. |
66
+ | `load_profile` | string | no | Optional hint: expected RPS, concurrent users, or traffic pattern. Adjusts severity of findings. |
67
+
68
+ ---
69
+
70
+ ## Scope Detection
71
+
72
+ See shared script: `skills/shared/git-merge-base.md`
73
+
74
+ Run the script to determine `BASE_SHA`, then collect the diff:
75
+
76
+ ```bash
77
+ git diff --name-status "${BASE_SHA}"
78
+ git diff "${BASE_SHA}"
79
+ git ls-files --others --exclude-standard
80
+ ```
81
+
82
+ Review scope: **changes introduced in the current branch since merge-base only**.
83
+ Pre-existing problems in unchanged lines are out of scope unless the diff makes them worse.
84
+
85
+ ---
86
+
87
+ ## Iron Laws
88
+
89
+ 1. **A race condition on shared mutable state is always a `blocker`.** There is no "it probably won't happen in practice" — race conditions manifest unpredictably under load.
90
+ 2. **An unbounded resource (connection, goroutine, thread, queue, in-memory collection) that grows with request rate is always at least `major`.** Under load it will exhaust the resource.
91
+ 3. **Missing retry idempotency is always a `blocker` where the operation has side effects.** A retried non-idempotent write is a data integrity bug.
92
+ 4. **Blocking I/O on a thread/fiber that is shared with the event loop is always at least `major`.** One slow call blocks all concurrent requests on that thread.
93
+ 5. **Architecture opinions without a named pattern violation and concrete load-related impact are `info` only.** State the failure mode, not just that "it could be better".
94
+
95
+ ---
96
+
97
+ ## Review Checklist
98
+
99
+ ### Part A: Concurrency and Race Conditions
100
+
101
+ #### A1. Shared Mutable State
102
+
103
+ - [ ] Shared in-memory state (module-level variables, singleton fields, static properties) mutated from concurrent requests without a lock, mutex, or atomic operation
104
+ - [ ] Read-modify-write operations on shared counters, maps, or lists not wrapped in an atomic or transaction
105
+ - [ ] `Map` / `Set` / plain objects used as in-process caches mutated from concurrent async operations
106
+ - [ ] NestJS `DEFAULT`-scoped (singleton) service holding per-request state (e.g., `this.currentUser = ...`)
107
+
108
+ Flags:
109
+ - Singleton service holding mutable per-request state — **blocker**
110
+ - Read-modify-write on shared map/counter without atomicity — **blocker**
111
+ - Module-level mutable variable mutated from async handlers — **major**
112
+
113
+ #### A2. Double-Check and TOCTOU
114
+
115
+ - [ ] Check-then-act patterns where the condition can change between check and action: `if (!exists) insert` without a unique constraint or lock
116
+ - [ ] Optimistic upsert without conflict handling (`INSERT ... ON CONFLICT DO NOTHING` with no retry)
117
+ - [ ] Token or resource validity checked before use but not at the moment of use (TOCTOU)
118
+
119
+ Flags:
120
+ - Check-then-act on a DB record with no uniqueness enforcement or lock — **blocker**
121
+ - Token validity checked only at entry, not at point of use after a long async chain — **major**
122
+
123
+ #### A3. Async/Await and Concurrency Primitives
124
+
125
+ - [ ] `Promise.all` used with an unbounded array of promises (can spawn thousands of concurrent operations)
126
+ - [ ] `for...of` with `await` inside where `Promise.all` would allow safe parallelism (sequential when parallel is intended)
127
+ - [ ] Missing concurrency limit: N parallel jobs where N = input size (use a concurrency limiter / semaphore for unbounded inputs)
128
+ - [ ] `async` function swallowing rejection via unhandled `.catch(() => {})` on a fire-and-forget
129
+
130
+ Flags:
131
+ - `Promise.all(items.map(...))` where `items` can be arbitrarily large — **major** (resource exhaustion)
132
+ - Fire-and-forget async call with no error handling and no queue backing — **major**
133
+ - Missing concurrency cap on parallel operations whose count scales with user input — **major**
134
+
135
+ ---
136
+
137
+ ### Part B: Resource Management
138
+
139
+ #### B1. Connection Pools
140
+
141
+ - [ ] Database / Redis / HTTP connection created per request instead of using a shared pool
142
+ - [ ] Connection pool size not configured — using default (often 5–10 connections), which will queue at scale
143
+ - [ ] Pool exhaustion handling: no timeout on `pool.connect()`, no error boundary — requests will hang silently
144
+ - [ ] Connection opened in a function that may throw before `.release()` or `.end()` without a `finally` block
145
+
146
+ Flags:
147
+ - `new Pool()` / `new Client()` / `createConnection()` inside a request handler — **blocker**
148
+ - No pool max size configured for a production service — **major**
149
+ - Connection acquired without guaranteed release in finally — **major**
150
+ - Pool timeout not configured (will queue indefinitely on exhaustion) — **minor**
151
+
152
+ #### B2. File Handles and Streams
153
+
154
+ - [ ] File opened with `fs.open` / `fs.createReadStream` without explicit close / destroy on error
155
+ - [ ] Readable stream not consumed (memory grows indefinitely until GC or crash)
156
+ - [ ] Large file read into memory at once (`fs.readFileSync` / `Buffer.concat` on unknown-size input) — use streams
157
+
158
+ Flags:
159
+ - File handle without guaranteed close — **major**
160
+ - `readFileSync` or full `Buffer.concat` on potentially large/user-supplied files — **major**
161
+ - Unhandled readable stream accumulating in memory — **major**
162
+
163
+ #### B3. Memory and Object Allocation
164
+
165
+ - [ ] Large objects allocated per-request that are not freed between requests
166
+ - [ ] In-process cache (plain `Map`) with no eviction policy — grows unboundedly
167
+ - [ ] Closure capturing a large object (e.g., full DB result set) in a long-lived data structure
168
+
169
+ Flags:
170
+ - In-process cache `Map` / `Record` with no TTL or max-size eviction — **major**
171
+ - Per-request object allocation in a hot path that could be pooled or reused — **minor**
172
+
173
+ ---
174
+
175
+ ### Part C: Caching
176
+
177
+ #### C1. Cache Invalidation
178
+
179
+ - [ ] Cache entry updated after a write but not invalidated for related keys (stale reads after update)
180
+ - [ ] Cache TTL set to 0 (effectively no caching) or missing on a frequently-read, rarely-written entity
181
+ - [ ] Cache key not namespaced — collision between tenants / environments
182
+ - [ ] Caching a response that contains per-user data without scoping the key to the user
183
+
184
+ Flags:
185
+ - Cached response containing user-specific data with no user-scoped key — **blocker** (data leak)
186
+ - Related cache entries not invalidated after a mutating operation — **major**
187
+ - Missing cache key namespace in a multi-tenant or multi-environment system — **major**
188
+ - TTL missing or set to a value that is clearly mismatched with data freshness requirements — **minor**
189
+
190
+ #### C2. Cache Stampede
191
+
192
+ - [ ] High-traffic key expires simultaneously for many callers — no lock-based or probabilistic early expiry to prevent stampede
193
+ - [ ] Thundering herd: cache miss triggers N concurrent DB reads for the same key with no deduplication (e.g., no mutex/semaphore on the first fetch)
194
+
195
+ Flags:
196
+ - Hot key (called >100 RPS) with no stampede protection — **major**
197
+ - Cache miss firing N simultaneous DB queries with no in-flight deduplication — **major**
198
+
199
+ #### C3. Cache Correctness
200
+
201
+ - [ ] Mutable value stored in cache by reference (not a deep copy) — mutation after storage corrupts the cache
202
+ - [ ] Cache key includes non-deterministic components (timestamp, random value, process ID)
203
+
204
+ Flags:
205
+ - Storing a mutable reference in cache (object not serialized/cloned) — **major**
206
+ - Non-deterministic cache key — **major**
207
+
208
+ ---
209
+
210
+ ### Part D: Database Access Under Load
211
+
212
+ #### D1. Missing Indexes
213
+
214
+ - [ ] Query filtering or ordering by a column not in an index on a large table
215
+ - [ ] JOIN on a column that lacks an index on at least one side
216
+ - [ ] Unique constraint missing on a column used in uniqueness checks
217
+
218
+ Flags:
219
+ - `WHERE` / `ORDER BY` on an un-indexed column on a high-traffic table — **major**
220
+ - Missing unique constraint where the application relies on uniqueness — **blocker**
221
+
222
+ #### D2. Lock Contention
223
+
224
+ - [ ] `SELECT ... FOR UPDATE` on a wide row range — locks more rows than needed
225
+ - [ ] Transaction holding a lock while performing external I/O (HTTP call, file read) — lock held far too long
226
+ - [ ] Nested transactions with locks — can deadlock under concurrent writers
227
+ - [ ] Long-running migration with a full-table lock on a live, high-traffic table
228
+
229
+ Flags:
230
+ - External I/O (HTTP, file) inside a database transaction — **blocker**
231
+ - `SELECT ... FOR UPDATE` with no LIMIT on a high-traffic table — **major**
232
+ - Schema migration adding NOT NULL column without a default on a live table — **major**
233
+
234
+ #### D3. N+1 and Unbounded Queries
235
+
236
+ - [ ] Query inside a loop where one batch query would suffice
237
+ - [ ] `findAll()` / `SELECT *` on a large table with no LIMIT/pagination
238
+ - [ ] Fetching full entity to check a single field
239
+
240
+ Flags:
241
+ - N+1 in a hot path — **major** (also flagged by `review-performance`, noted here for load context)
242
+ - Unbounded `findAll()` on a table that grows with usage — **major**
243
+ - Fetching full row just to read one column — **minor**
244
+
245
+ #### D4. Connection and Transaction Hygiene
246
+
247
+ - [ ] Transaction started but no explicit commit / rollback on all code paths (leak on exception)
248
+ - [ ] Long-lived transaction (spans multiple user interactions or HTTP calls)
249
+ - [ ] Mixing read replicas and write primary within the same business operation without awareness of replication lag
250
+
251
+ Flags:
252
+ - Transaction with no guaranteed commit/rollback on exception path — **major**
253
+ - Replication lag not accounted for (read-your-writes guarantee assumed on replica) — **major**
254
+
255
+ ---
256
+
257
+ ### Part E: Async Processing and Queues
258
+
259
+ #### E1. Queue Backpressure
260
+
261
+ - [ ] Producer adding to an in-memory queue with no max depth — under load the queue grows until OOM
262
+ - [ ] Consumer not acknowledging/nacking messages — messages redeliver indefinitely on crash
263
+ - [ ] Batch consumer with no upper bound on batch size — single batch can take arbitrarily long
264
+
265
+ Flags:
266
+ - Unbounded in-memory queue / channel — **blocker**
267
+ - Message consumer missing ack/nack — **major**
268
+ - Batch size not capped — **major**
269
+
270
+ #### E2. Dead Letter and Poison Pills
271
+
272
+ - [ ] No dead-letter queue for failed messages — poison pills block the consumer indefinitely
273
+ - [ ] Retry loop with no maximum retry count — failed message retried forever
274
+ - [ ] Consumer crashing on a single malformed message due to missing error handling around deserialization
275
+
276
+ Flags:
277
+ - No DLQ or max retry limit on a message consumer — **major**
278
+ - Deserialization error crashing the consumer process — **major**
279
+
280
+ #### E3. Ordering Guarantees
281
+
282
+ - [ ] Code assumes FIFO delivery on a queue that does not guarantee ordering (e.g., SQS standard)
283
+ - [ ] Parallel consumers writing to shared state where order matters
284
+
285
+ Flags:
286
+ - FIFO assumption on an at-least-once / unordered queue — **major**
287
+
288
+ ---
289
+
290
+ ### Part F: Retry, Timeout, and Circuit Breaker
291
+
292
+ #### F1. Retry Safety
293
+
294
+ - [ ] Non-idempotent operation retried without idempotency key (charge, send email, create record)
295
+ - [ ] Retry with fixed delay instead of exponential backoff — causes retry storms
296
+ - [ ] No maximum retry count — code retries indefinitely
297
+ - [ ] Missing jitter on exponential backoff — synchronized retries cause thundering herd
298
+
299
+ Flags:
300
+ - Non-idempotent write retried without idempotency key — **blocker** (data integrity)
301
+ - Fixed delay retry or no backoff — **major**
302
+ - No max retry count — **major**
303
+ - Exponential backoff without jitter — **minor**
304
+
305
+ #### F2. Timeouts
306
+
307
+ - [ ] HTTP client / DB call / queue operation with no timeout configured
308
+ - [ ] Single timeout for the full chain (outer timeout too long relative to the number of downstream calls)
309
+ - [ ] `setTimeout` as a timeout substitute for async operations that do not stop when the timer fires
310
+
311
+ Flags:
312
+ - External call with no timeout — **major**
313
+ - Using `setTimeout` as a "give up" timer without actually canceling the operation — **minor**
314
+
315
+ #### F3. Circuit Breaker
316
+
317
+ - [ ] Repeated calls to a known-failing downstream without a circuit breaker — floods the downstream and starves the thread pool
318
+ - [ ] Fallback returning stale/empty data not documented as intentional degradation
319
+
320
+ Flags:
321
+ - Unbounded retries to a failing downstream without circuit breaker — **major**
322
+ - No fallback or graceful degradation when downstream is unavailable — **minor**
323
+
324
+ ---
325
+
326
+ ### Part G: Idempotency and Distributed Invariants
327
+
328
+ #### G1. Idempotency
329
+
330
+ - [ ] Webhook / event handler has no deduplication — processing the same event twice produces duplicate side effects
331
+ - [ ] API endpoint that creates a resource not accepting or generating an idempotency key
332
+ - [ ] Distributed cron/scheduled job running on multiple instances simultaneously with no distributed lock
333
+
334
+ Flags:
335
+ - Event handler with no deduplication and non-idempotent side effects — **blocker**
336
+ - Distributed cron with no leader election or distributed lock — **blocker**
337
+ - Resource creation endpoint with no idempotency key support — **major**
338
+
339
+ #### G2. Distributed Consistency
340
+
341
+ - [ ] Assumption that two sequential operations form an atomic unit without a transaction or saga
342
+ - [ ] Cross-service write sequence with no compensation logic on partial failure
343
+ - [ ] Relying on eventual consistency while assuming immediate consistency (reading from cache/replica right after writing)
344
+
345
+ Flags:
346
+ - Multi-step cross-service operation with no rollback / saga — **major**
347
+ - Assumed immediate consistency where eventual consistency is the actual guarantee — **major**
348
+
349
+ #### G3. Clock and ID Assumptions
350
+
351
+ - [ ] Using `Date.now()` or `new Date()` for ordering events across distributed nodes — clocks drift
352
+ - [ ] Auto-increment integer IDs expected to be globally unique across sharded databases
353
+ - [ ] UUID v1 (time-based, exposable MAC address) used where UUID v4 (random) is safer
354
+
355
+ Flags:
356
+ - Event ordering based on wall-clock time in a distributed context — **major**
357
+ - Assumption of globally unique sequential IDs across shards — **major**
358
+
359
+ ---
360
+
361
+ ## Scope Boundaries
362
+
363
+ | Concern | This skill | Use instead |
364
+ |---------|-----------|-------------|
365
+ | Race conditions, shared mutable state, concurrent writes | YES | — |
366
+ | Connection pool exhaustion, resource leaks | YES | — |
367
+ | Cache invalidation, cache stampede, stale reads | YES | — |
368
+ | Lock contention, long transactions, missing indexes | YES | — |
369
+ | Queue backpressure, dead letters, ordering | YES | — |
370
+ | Retry storms, timeouts, circuit breakers | YES | — |
371
+ | Idempotency, distributed locks, distributed consistency | YES | — |
372
+ | Frontend re-render performance, bundle size | NO | `review-performance` |
373
+ | General N+1 queries (not load-specific) | NO | `review-performance` |
374
+ | NestJS module structure, layer violations | NO | `review-architecture` |
375
+ | Memory leaks in React components | NO | `review-performance` |
376
+ | Logic bugs unrelated to concurrency | NO | `review-logic` |
377
+
378
+ ---
379
+
380
+ ## Orchestrated Review Contract
381
+
382
+ 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.
383
+
384
+ ---
385
+
386
+ ## Finding Format
387
+
388
+ ### Class scope — required for `blocker` and `major`
389
+
390
+ Every `blocker` and `major` finding must carry `class_scope`: **every** site that
391
+ holds the shape you found, and **how you enumerated them** — the grep or query
392
+ you ran, or the guard that derives the set.
393
+
394
+ A finding anchored to one `file:line` is a claim about one site. The recorded
395
+ history of this repository is that a fix then repairs that site and leaves its
396
+ siblings: one writer of five, one operator instruction of four, six readers of
397
+ eight. Each was found by the *next* review round, which is why reviews here have
398
+ run to seven and four rounds instead of one.
399
+
400
+ ```yaml
401
+ class_scope:
402
+ sites: ["src/lib/shell-config.ts:60", "src/session/store.ts:133"]
403
+ enumeration_method: "grep for the config-path resolvers; 7 writers, 2 unguarded"
404
+ ```
405
+
406
+ "I checked the others" is not an enumeration method. A single-entry `sites` list
407
+ is a claim that the class has exactly one member — make it deliberately, because
408
+ `review-finding.schema.json` accepts it and the next round tests it.
409
+
410
+ `minor` and `info` may omit it: enumerating the class for every low-severity
411
+ observation is theatre, not rigour.
412
+
413
+ ```markdown
414
+ ### [F-NNN] Title
415
+
416
+ - **Severity**: blocker | major | minor | info
417
+ - **File**: path/to/file.ts:line
418
+ - **Pattern**: Concurrency A1 — Shared Mutable State | Resource B1 — Connection Pool | etc.
419
+ - **Failure mode**: what specifically breaks under load and at what scale
420
+ - **Fix**: concrete change with reference pattern (exponential backoff, connection pool, distributed lock, etc.)
421
+ - **Patch** (optional): unified diff
422
+ ```
423
+
424
+ The **Failure mode** line is mandatory for this reviewer — every finding must state the load-related consequence (OOM at 1k RPS, connection exhaustion at 500 concurrent users, duplicate charges on retry, etc.).
425
+
426
+ Severity guide:
427
+
428
+ | Severity | When to use |
429
+ |----------|------------|
430
+ | `blocker` | Race condition on shared state; non-idempotent retry; unbounded in-memory queue; distributed cron with no lock; transaction holding external I/O lock |
431
+ | `major` | Connection without pool; unbounded `Promise.all`; missing retry timeout/backoff; cache stampede on hot key; N+1 in hot path; long transaction; DLQ missing |
432
+ | `minor` | Backoff without jitter; TTL misconfigured; per-request allocation in hot path; full-row fetch for one field |
433
+ | `info` | Architectural note without concrete failure mode at current load |
434
+
435
+ ---
436
+
437
+ ## Output Contract
438
+
439
+ ```
440
+ STATUS: DONE | DONE_WITH_CONCERNS | NEEDS_CONTEXT | BLOCKED
441
+ ```
442
+
443
+ ```markdown
444
+ ## High-Load Review
445
+
446
+ ### Review Scope
447
+ - Branch: `<BRANCH>`
448
+ - Parent ref: `<PARENT>`
449
+ - Merge-base: `<BASE_SHA>`
450
+ - Scope mode: `<default-with-uncommitted | explicit-hash-range>`
451
+ - Load profile: `<from context doc or "not provided">`
452
+ - Changed files reviewed: <N>
453
+
454
+ ### Summary
455
+ <2-3 sentences: what changed, key high-load concerns, overall verdict at scale.>
456
+
457
+ ### Stats
458
+ - blocker: N | major: N | minor: N | info: N
459
+
460
+ ### Findings
461
+
462
+ #### Concurrency & Race Conditions
463
+ <[F-NNN] findings or "None detected.">
464
+
465
+ #### Resource Management
466
+ <[F-NNN] findings or "None detected.">
467
+
468
+ #### Caching
469
+ <[F-NNN] findings or "None detected.">
470
+
471
+ #### Database Under Load
472
+ <[F-NNN] findings or "None detected.">
473
+
474
+ #### Async / Queues
475
+ <[F-NNN] findings or "None detected.">
476
+
477
+ #### Retry / Timeout / Circuit Breaker
478
+ <[F-NNN] findings or "None detected.">
479
+
480
+ #### Idempotency & Distributed Invariants
481
+ <[F-NNN] findings or "None detected.">
482
+
483
+ ### Clean Areas
484
+ [List checklist sections with no findings, confirming they were reviewed]
485
+ ```
486
+
487
+ ---
488
+
489
+ ## Job Context Awareness
490
+
491
+ When dispatched by `review-orchestrator` or `job-orchestrator`, the prompt MAY include:
492
+
493
+ ```
494
+ JOB_NAME: <job-name>
495
+ CONTEXT_PATH: <JOBS_ROOT>/<job-name>/ai/context.md
496
+ ```
497
+
498
+ If provided and the file exists, read the context document before reviewing. Use it to:
499
+ - Understand the expected traffic profile (RPS, concurrent users, burst patterns)
500
+ - Know the infrastructure constraints (pool sizes, queue limits, replica topology)
501
+ - Identify intentional trade-offs already accepted (eventual consistency, at-least-once delivery)
502
+ - Avoid flagging documented acceptable degradation paths as violations
503
+
504
+ If absent, proceed normally — context is optional and non-blocking.
505
+ When load profile is unknown, note in findings that severity assumes "moderate-to-high traffic".
506
+
507
+ ---
508
+
509
+ ## Red Flags
510
+
511
+ | Rationalization | Why it is wrong |
512
+ |----------------|-----------------|
513
+ | "We don't have high traffic yet, so this is fine" | Correctness under concurrency does not depend on current traffic; a race condition exists at 1 RPS too |
514
+ | "The connection pool defaults are probably fine" | Default pools (5–10 connections) queue at a few hundred concurrent users; always verify |
515
+ | "Retrying this is safe because it's idempotent" | Verify it actually is — most `POST` endpoints are not idempotent by default |
516
+ | "We'll add a circuit breaker later" | "Later" is when the downstream is down; flag as minor now to create the record |
517
+ | "The cache invalidation is handled somewhere else" | "Somewhere else" means it will be missed — flag where the write happens with no corresponding invalidation |
518
+ | "This runs in a queue so race conditions don't apply" | Multiple consumer instances still race on shared DB rows unless explicitly serialized |
519
+ | "Using Date.now() for ordering is fine" | Clock skew across nodes makes wall-clock ordering unreliable; use logical clocks or DB sequences |