@khoavu882/doflow 0.0.0-stage → 2.0.0-beta.3

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 (407) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +132 -2
  3. package/bin/doflow.js +44 -0
  4. package/core/.antigravity-plugin/hooks.json +39 -0
  5. package/core/.antigravity-plugin/mcp_config.json +18 -0
  6. package/core/.antigravity-plugin/plugin.json +31 -0
  7. package/core/.claude-plugin/marketplace.json +20 -0
  8. package/core/.claude-plugin/plugin.json +21 -0
  9. package/core/.codex-plugin/marketplace.json +20 -0
  10. package/core/.codex-plugin/plugin.json +35 -0
  11. package/core/.plugin/plugin.json +19 -0
  12. package/core/harnesses/antigravity/hooks/pre-implementation-gate.sh +9 -0
  13. package/core/harnesses/antigravity/hooks/stop-check.sh +10 -0
  14. package/core/harnesses/claude/hooks/lib.sh +304 -0
  15. package/core/harnesses/claude/hooks/mcp-tool-guard.sh +20 -0
  16. package/core/harnesses/claude/hooks/permission-audit.sh +47 -0
  17. package/core/harnesses/claude/hooks/post-compact.sh +74 -0
  18. package/core/harnesses/claude/hooks/post-edit-lint.sh +36 -0
  19. package/core/harnesses/claude/hooks/post-tool-failure.sh +47 -0
  20. package/core/harnesses/claude/hooks/pre-bash-guard.sh +20 -0
  21. package/core/harnesses/claude/hooks/pre-compact.sh +43 -0
  22. package/core/harnesses/claude/hooks/pre-implement-gate.sh +21 -0
  23. package/core/harnesses/claude/hooks/session-end.sh +89 -0
  24. package/core/harnesses/claude/hooks/session-start.sh +5 -0
  25. package/core/harnesses/claude/hooks/skill-config-audit.sh +39 -0
  26. package/core/harnesses/claude/hooks/stop-check.sh +5 -0
  27. package/core/harnesses/claude/hooks/subagent-audit.sh +7 -0
  28. package/core/harnesses/claude/hooks/user-prompt-submit.sh +5 -0
  29. package/core/harnesses/claude/settings/keybindings.json +20 -0
  30. package/core/harnesses/claude/settings/settings.json +201 -0
  31. package/core/harnesses/claude/statusline/doflow-statusline.sh +49 -0
  32. package/core/harnesses/codex/agents/core-implementer.toml +7 -0
  33. package/core/harnesses/codex/agents/quality-guardian.toml +8 -0
  34. package/core/harnesses/codex/agents/research-writer.toml +8 -0
  35. package/core/harnesses/codex/agents/spec-analyst.toml +8 -0
  36. package/core/harnesses/codex/agents/system-architect.toml +9 -0
  37. package/core/harnesses/codex/config/config.toml +10 -0
  38. package/core/harnesses/codex/hooks/hooks.json +122 -0
  39. package/core/harnesses/codex/hooks/lib.sh +335 -0
  40. package/core/harnesses/codex/hooks/mcp-tool-guard.sh +18 -0
  41. package/core/harnesses/codex/hooks/post-edit-lint.impl.sh +52 -0
  42. package/core/harnesses/codex/hooks/post-edit-lint.sh +6 -0
  43. package/core/harnesses/codex/hooks/pre-bash-guard.sh +18 -0
  44. package/core/harnesses/codex/hooks/pre-compact.impl.sh +46 -0
  45. package/core/harnesses/codex/hooks/pre-compact.sh +9 -0
  46. package/core/harnesses/codex/hooks/pre-implement-gate.sh +19 -0
  47. package/core/harnesses/codex/hooks/session-end.impl.sh +92 -0
  48. package/core/harnesses/codex/hooks/session-end.sh +5 -0
  49. package/core/harnesses/codex/hooks/session-start.sh +5 -0
  50. package/core/harnesses/codex/hooks/stop-check.sh +8 -0
  51. package/core/harnesses/codex/hooks/subagent-audit.sh +8 -0
  52. package/core/harnesses/codex/hooks/user-prompt-submit.sh +6 -0
  53. package/core/harnesses/gemini/hooks/hooks.json +77 -0
  54. package/core/harnesses/gemini/hooks/lib.sh +302 -0
  55. package/core/harnesses/gemini/hooks/mcp-tool-guard.sh +21 -0
  56. package/core/harnesses/gemini/hooks/post-edit-lint.sh +39 -0
  57. package/core/harnesses/gemini/hooks/pre-bash-guard.sh +21 -0
  58. package/core/harnesses/gemini/hooks/pre-compact.sh +38 -0
  59. package/core/harnesses/gemini/hooks/pre-implement-gate.sh +22 -0
  60. package/core/harnesses/gemini/hooks/session-end.impl.sh +89 -0
  61. package/core/harnesses/gemini/hooks/session-end.sh +5 -0
  62. package/core/harnesses/gemini/hooks/session-start.sh +5 -0
  63. package/core/harnesses/gemini/settings/adapter-defaults.json +4 -0
  64. package/core/harnesses/kiro/agents/doflow.json +58 -0
  65. package/core/harnesses/kiro/hooks/doflow.json +53 -0
  66. package/core/harnesses/kiro/hooks/lib.sh +324 -0
  67. package/core/harnesses/kiro/hooks/mcp-tool-guard.sh +9 -0
  68. package/core/harnesses/kiro/hooks/pre-bash-guard.sh +9 -0
  69. package/core/harnesses/kiro/hooks/pre-implement-gate.sh +9 -0
  70. package/core/harnesses/kiro/hooks/session-start.sh +9 -0
  71. package/core/harnesses/kiro/hooks/stop-check.sh +43 -0
  72. package/core/harnesses/shared/hooks/ENVELOPE_MIGRATION.md +39 -0
  73. package/core/harnesses/shared/hooks/adapters/antigravity.js +111 -0
  74. package/core/harnesses/shared/hooks/adapters/arg-fields.js +19 -0
  75. package/core/harnesses/shared/hooks/adapters/gemini.js +114 -0
  76. package/core/harnesses/shared/hooks/hooks.json +47 -0
  77. package/core/harnesses/shared/hooks/policies/blocked-patterns.conf +91 -0
  78. package/core/harnesses/shared/hooks/policies/capture-failure.sh +97 -0
  79. package/core/harnesses/shared/hooks/policies/deny-json.sh +29 -0
  80. package/core/harnesses/shared/hooks/policies/lib.sh +501 -0
  81. package/core/harnesses/shared/hooks/policies/mcp-policy.conf +21 -0
  82. package/core/harnesses/shared/hooks/policies/mcp-tool-guard.sh +91 -0
  83. package/core/harnesses/shared/hooks/policies/pre-bash-guard.sh +328 -0
  84. package/core/harnesses/shared/hooks/policies/pre-implementation-gate.sh +496 -0
  85. package/core/harnesses/shared/hooks/policies/prompt-nudge.jq +131 -0
  86. package/core/harnesses/shared/hooks/policies/session-context.sh +141 -0
  87. package/core/harnesses/shared/hooks/policies/stop-check.sh +264 -0
  88. package/core/harnesses/shared/hooks/policies/subagent-audit.sh +46 -0
  89. package/core/harnesses/shared/hooks/policies/user-prompt-submit.sh +235 -0
  90. package/core/harnesses/shared/hooks/stream-hook-runner.js +590 -0
  91. package/core/harnesses/shared/locator/doflow-run +87 -0
  92. package/core/registry/advice.json +101 -0
  93. package/core/registry/assets.json +792 -0
  94. package/core/registry/capabilities.json +120 -0
  95. package/core/registry/contracts.json +189 -0
  96. package/core/registry/external-tools.json +191 -0
  97. package/core/registry/harnesses.json +2062 -0
  98. package/core/registry/lifecycle.json +231 -0
  99. package/core/registry/mcp.json +18 -0
  100. package/core/registry/models.json +79 -0
  101. package/core/registry/readiness-templates.json +118 -0
  102. package/core/registry/routes.json +47 -0
  103. package/core/registry/storage.json +1057 -0
  104. package/core/registry/verification.json +258 -0
  105. package/core/registry/workflows.json +790 -0
  106. package/core/shared/agent-specs/core-implementer.md +73 -0
  107. package/core/shared/agent-specs/quality-guardian.md +28 -0
  108. package/core/shared/agent-specs/research-writer.md +31 -0
  109. package/core/shared/agent-specs/spec-analyst.md +33 -0
  110. package/core/shared/agent-specs/system-architect.md +29 -0
  111. package/core/shared/guidance/DOFLOW_CORE.md +8 -0
  112. package/core/shared/guidance/FLAGS.md +25 -0
  113. package/core/shared/guidance/PRINCIPLES.md +61 -0
  114. package/core/shared/guidance/VERSION +1 -0
  115. package/core/shared/guidance/mcp/MCP_Context7.md +18 -0
  116. package/core/shared/guidance/mcp/MCP_Sequential.md +17 -0
  117. package/core/shared/guidance/modes/MODE_Brainstorming.md +46 -0
  118. package/core/shared/guidance/modes/MODE_DeepResearch.md +69 -0
  119. package/core/shared/guidance/modes/MODE_Introspection.md +33 -0
  120. package/core/shared/guidance/modes/MODE_Orchestration.md +57 -0
  121. package/core/shared/guidance/modes/MODE_Task_Management.md +74 -0
  122. package/core/shared/guidance/pointers/claude-gemini.md +2 -0
  123. package/core/shared/guidance/pointers/codex.md +6 -0
  124. package/core/shared/guidance/references/ARTIFACT_FORMAT.md +373 -0
  125. package/core/shared/guidance/references/ARTIFACT_VOICE.md +104 -0
  126. package/core/shared/guidance/references/CONSTITUTION_BASE.md +47 -0
  127. package/core/shared/guidance/references/DIAGRAM_GUIDE.md +161 -0
  128. package/core/shared/guidance/references/DOFLOW_CHAIN.md +87 -0
  129. package/core/shared/guidance/references/EVIDENCE_LEDGER.md +93 -0
  130. package/core/shared/guidance/references/MODEL_SELECTION.md +74 -0
  131. package/core/shared/guidance/references/ORCHESTRATION.md +36 -0
  132. package/core/shared/guidance/references/RESEARCH_CONFIG.md +21 -0
  133. package/core/shared/guidance/references/WORKFLOW_HANDOFF.md +81 -0
  134. package/core/shared/guidance/rules/RULE_01_SAFETY.md +25 -0
  135. package/core/shared/guidance/rules/RULE_02_WORKFLOW.md +23 -0
  136. package/core/shared/guidance/rules/RULE_03_QUALITY.md +14 -0
  137. package/core/shared/guidance/rules/RULE_04_QUESTIONS.md +46 -0
  138. package/core/shared/scripts/doflow/assets/mermaid-theme.json +46 -0
  139. package/core/shared/scripts/doflow/bash/do-exec-paths.sh +167 -0
  140. package/core/shared/scripts/doflow/bash/do-git-state.sh +546 -0
  141. package/core/shared/scripts/doflow/bash/do-parallel-check.sh +208 -0
  142. package/core/shared/scripts/doflow/bash/do-paths.sh +347 -0
  143. package/core/shared/scripts/doflow/bash/do-prereqs.sh +66 -0
  144. package/core/shared/scripts/doflow/bash/do-review-package.sh +127 -0
  145. package/core/shared/scripts/doflow/bash/do-task-brief.sh +698 -0
  146. package/core/shared/scripts/doflow/bash/render-audit.sh +224 -0
  147. package/core/shared/scripts/doflow/bash/render-diagrams.sh +177 -0
  148. package/core/shared/scripts/doflow/bash/render-puml.sh +223 -0
  149. package/core/shared/scripts/doflow/bash/sync-context.sh +66 -0
  150. package/core/shared/scripts/doflow/bash/validate-artifacts.sh +526 -0
  151. package/core/shared/scripts/doflow/bin/doflow-run +592 -0
  152. package/core/shared/skills/do/SKILL.md +128 -0
  153. package/core/shared/skills/do/references/estimation.md +13 -0
  154. package/core/shared/skills/do/references/pm_routing.md +25 -0
  155. package/core/shared/skills/do/references/tool_matrix.md +52 -0
  156. package/core/shared/skills/do-brainstorm/SKILL.md +252 -0
  157. package/core/shared/skills/do-code-review/README.md +49 -0
  158. package/core/shared/skills/do-code-review/SKILL.md +333 -0
  159. package/core/shared/skills/do-code-review/assets/sample_c_clean.c +71 -0
  160. package/core/shared/skills/do-code-review/assets/sample_c_smells.c +66 -0
  161. package/core/shared/skills/do-code-review/assets/sample_cpp_shift.cpp +19 -0
  162. package/core/shared/skills/do-code-review/assets/sample_csharp_clean.cs +100 -0
  163. package/core/shared/skills/do-code-review/assets/sample_csharp_smells.cs +78 -0
  164. package/core/shared/skills/do-code-review/assets/sample_java_clean.java +55 -0
  165. package/core/shared/skills/do-code-review/assets/sample_java_smells.java +56 -0
  166. package/core/shared/skills/do-code-review/assets/sample_json_clean.json +7 -0
  167. package/core/shared/skills/do-code-review/assets/sample_markdown_clean.md +30 -0
  168. package/core/shared/skills/do-code-review/assets/sample_markdown_smells.md +29 -0
  169. package/core/shared/skills/do-code-review/assets/sample_shell_heredoc.sh +38 -0
  170. package/core/shared/skills/do-code-review/assets/sample_shell_smells.sh +15 -0
  171. package/core/shared/skills/do-code-review/assets/sample_typescript_strings.ts +36 -0
  172. package/core/shared/skills/do-code-review/assets/sample_yaml_smells.yaml +6 -0
  173. package/core/shared/skills/do-code-review/content-types/config.md +83 -0
  174. package/core/shared/skills/do-code-review/content-types/markdown.md +132 -0
  175. package/core/shared/skills/do-code-review/expected_outputs/sample_c_clean_quality.json +79 -0
  176. package/core/shared/skills/do-code-review/expected_outputs/sample_c_smells_quality.json +169 -0
  177. package/core/shared/skills/do-code-review/expected_outputs/sample_cpp_shift_quality.json +49 -0
  178. package/core/shared/skills/do-code-review/expected_outputs/sample_csharp_clean_quality.json +149 -0
  179. package/core/shared/skills/do-code-review/expected_outputs/sample_csharp_smells_quality.json +157 -0
  180. package/core/shared/skills/do-code-review/expected_outputs/sample_java_clean_quality.json +67 -0
  181. package/core/shared/skills/do-code-review/expected_outputs/sample_java_smells_quality.json +97 -0
  182. package/core/shared/skills/do-code-review/expected_outputs/sample_json_clean_quality.json +33 -0
  183. package/core/shared/skills/do-code-review/expected_outputs/sample_markdown_clean_quality.json +1 -0
  184. package/core/shared/skills/do-code-review/expected_outputs/sample_markdown_smells_quality.json +16 -0
  185. package/core/shared/skills/do-code-review/expected_outputs/sample_shell_heredoc_quality.json +54 -0
  186. package/core/shared/skills/do-code-review/expected_outputs/sample_shell_smells_quality.json +91 -0
  187. package/core/shared/skills/do-code-review/expected_outputs/sample_typescript_strings_quality.json +60 -0
  188. package/core/shared/skills/do-code-review/expected_outputs/sample_yaml_smells_quality.json +46 -0
  189. package/core/shared/skills/do-code-review/languages/c.md +103 -0
  190. package/core/shared/skills/do-code-review/languages/cpp.md +103 -0
  191. package/core/shared/skills/do-code-review/languages/csharp.md +97 -0
  192. package/core/shared/skills/do-code-review/languages/dart.md +108 -0
  193. package/core/shared/skills/do-code-review/languages/go.md +92 -0
  194. package/core/shared/skills/do-code-review/languages/java.md +103 -0
  195. package/core/shared/skills/do-code-review/languages/kotlin.md +88 -0
  196. package/core/shared/skills/do-code-review/languages/php.md +109 -0
  197. package/core/shared/skills/do-code-review/languages/python.md +94 -0
  198. package/core/shared/skills/do-code-review/languages/ruby.md +105 -0
  199. package/core/shared/skills/do-code-review/languages/rust.md +99 -0
  200. package/core/shared/skills/do-code-review/languages/shell.md +90 -0
  201. package/core/shared/skills/do-code-review/languages/swift.md +88 -0
  202. package/core/shared/skills/do-code-review/languages/typescript.md +97 -0
  203. package/core/shared/skills/do-code-review/review-policy.json +47 -0
  204. package/core/shared/skills/do-code-review/rules/universal.md +49 -0
  205. package/core/shared/skills/do-code-review/scripts/code_quality_checker.py +1696 -0
  206. package/core/shared/skills/do-code-review/scripts/doc_quality_checker.py +532 -0
  207. package/core/shared/skills/do-code-review/scripts/pr_analyzer.py +620 -0
  208. package/core/shared/skills/do-code-review/scripts/review_report_generator.py +505 -0
  209. package/core/shared/skills/do-constitution/SKILL.md +72 -0
  210. package/core/shared/skills/do-design/SKILL.md +212 -0
  211. package/core/shared/skills/do-diagnose/SKILL.md +156 -0
  212. package/core/shared/skills/do-diagnose/references/code_audit.md +15 -0
  213. package/core/shared/skills/do-diagnose/references/refactoring.md +12 -0
  214. package/core/shared/skills/do-diagnose/references/root_cause.md +17 -0
  215. package/core/shared/skills/do-document/SKILL.md +81 -0
  216. package/core/shared/skills/do-document/references/api-reference.md +42 -0
  217. package/core/shared/skills/do-document/references/deep_research.md +18 -0
  218. package/core/shared/skills/do-document/references/embedded-research.md +11 -0
  219. package/core/shared/skills/do-document/references/implementation-flow.md +105 -0
  220. package/core/shared/skills/do-document/references/index_generator.md +9 -0
  221. package/core/shared/skills/do-document/references/user-guide.md +22 -0
  222. package/core/shared/skills/do-execute-plan/SKILL.md +261 -0
  223. package/core/shared/skills/do-execute-plan/references/handoff_record.md +57 -0
  224. package/core/shared/skills/do-execute-plan/references/parallel_dispatch.md +92 -0
  225. package/core/shared/skills/do-execute-plan/references/readiness_gate.md +155 -0
  226. package/core/shared/skills/do-execute-plan/references/run_position.md +63 -0
  227. package/core/shared/skills/do-execute-plan/references/scaffold.md +441 -0
  228. package/core/shared/skills/do-execute-plan/references/task_attempts.md +41 -0
  229. package/core/shared/skills/do-flow/SKILL.md +186 -0
  230. package/core/shared/skills/do-flow/references/task_classes.md +134 -0
  231. package/core/shared/skills/do-git/SKILL.md +115 -0
  232. package/core/shared/skills/do-git/references/hotfix-ritual.md +44 -0
  233. package/core/shared/skills/do-git/references/lifecycle-policy.md +54 -0
  234. package/core/shared/skills/do-git/references/release-ritual.md +64 -0
  235. package/core/shared/skills/do-implement/SKILL.md +222 -0
  236. package/core/shared/skills/do-plan/SKILL.md +219 -0
  237. package/core/shared/skills/do-test/SKILL.md +113 -0
  238. package/core/shared/templates/doflow/constitution-template.md +28 -0
  239. package/core/shared/templates/doflow/data-model-template.md +169 -0
  240. package/core/shared/templates/doflow/design-template.md +193 -0
  241. package/core/shared/templates/doflow/external-contract-template.md +35 -0
  242. package/core/shared/templates/doflow/intent-template.md +45 -0
  243. package/core/shared/templates/doflow/plan-template.md +151 -0
  244. package/core/shared/templates/doflow/question-log-template.md +51 -0
  245. package/core/shared/templates/doflow/requirement-template.md +126 -0
  246. package/core/shared/templates/doflow/specs-template.md +55 -0
  247. package/core/shared/templates/doflow/state-template.md +59 -0
  248. package/core/shared/workflows/do-flow-chain.md +17 -0
  249. package/package.json +46 -4
  250. package/src/adapters/antigravity/index.ts +631 -0
  251. package/src/adapters/claude/index.ts +548 -0
  252. package/src/adapters/claude/mcp.ts +94 -0
  253. package/src/adapters/codex/agents.ts +208 -0
  254. package/src/adapters/codex/config.ts +272 -0
  255. package/src/adapters/codex/hooks.ts +203 -0
  256. package/src/adapters/codex/index.ts +707 -0
  257. package/src/adapters/codex/mcp.ts +271 -0
  258. package/src/adapters/codex/native-projection.ts +34 -0
  259. package/src/adapters/copilot/index.ts +413 -0
  260. package/src/adapters/copy-tree.ts +620 -0
  261. package/src/adapters/gemini/hooks.ts +210 -0
  262. package/src/adapters/gemini/index.ts +390 -0
  263. package/src/adapters/hook-commands.ts +60 -0
  264. package/src/adapters/index.ts +106 -0
  265. package/src/adapters/kiro/index.ts +310 -0
  266. package/src/adapters/mcp-entries.ts +331 -0
  267. package/src/adapters/opencode/index.ts +466 -0
  268. package/src/adapters/pi/index.ts +279 -0
  269. package/src/adapters/pi/json-members.ts +185 -0
  270. package/src/adapters/pi/mcp.ts +373 -0
  271. package/src/adapters/resolve-source.ts +19 -0
  272. package/src/cli/commands/install.ts +218 -0
  273. package/src/cli/commands/list-backups.ts +21 -0
  274. package/src/cli/commands/reconcile.ts +120 -0
  275. package/src/cli/commands/remove.ts +82 -0
  276. package/src/cli/commands/rollback.ts +172 -0
  277. package/src/cli/commands/self-update.ts +33 -0
  278. package/src/cli/commands/status.ts +138 -0
  279. package/src/cli/commands/tools.ts +92 -0
  280. package/src/cli/commands/update.ts +162 -0
  281. package/src/cli/index.ts +568 -0
  282. package/src/cli/runtime-commands.ts +281 -0
  283. package/src/cli/shared.ts +218 -0
  284. package/src/helper/bash-helper.ts +34 -0
  285. package/src/helper/git.ts +24 -0
  286. package/src/helper/guardrails.ts +49 -0
  287. package/src/helper/harness-paths.ts +140 -0
  288. package/src/helper/marker-merge.ts +116 -0
  289. package/src/helper/prompt.ts +61 -0
  290. package/src/helper/repo-root.ts +29 -0
  291. package/src/helper/settings-merge.ts +151 -0
  292. package/src/helper/settings-scope.ts +33 -0
  293. package/src/helper/toml.ts +244 -0
  294. package/src/install/backup-set.ts +149 -0
  295. package/src/install/backup.ts +724 -0
  296. package/src/install/context.ts +58 -0
  297. package/src/install/manifest.ts +145 -0
  298. package/src/install/mcp.ts +254 -0
  299. package/src/install/paths.ts +84 -0
  300. package/src/install/targets.ts +90 -0
  301. package/src/install/tool-lifecycle.ts +151 -0
  302. package/src/lifecycle/bash-availability.ts +25 -0
  303. package/src/lifecycle/index.ts +812 -0
  304. package/src/lifecycle/mcp-index.ts +28 -0
  305. package/src/lifecycle/policies.ts +73 -0
  306. package/src/lifecycle/view.ts +175 -0
  307. package/src/registry/index.ts +611 -0
  308. package/src/release/sync-plugin-versions.ts +66 -0
  309. package/src/runtime/advice/cli.ts +283 -0
  310. package/src/runtime/advice/client.ts +324 -0
  311. package/src/runtime/advice/config.ts +189 -0
  312. package/src/runtime/advice/doctor.ts +169 -0
  313. package/src/runtime/advice/endpoint-guard.ts +134 -0
  314. package/src/runtime/advice/kinds.ts +154 -0
  315. package/src/runtime/advice/providers/ollama-systemone.ts +209 -0
  316. package/src/runtime/advice/record.ts +166 -0
  317. package/src/runtime/advice/registry.ts +170 -0
  318. package/src/runtime/advice/strength.ts +66 -0
  319. package/src/runtime/brief-tools.ts +342 -0
  320. package/src/runtime/c4-project.ts +371 -0
  321. package/src/runtime/capability-router.ts +484 -0
  322. package/src/runtime/checkouts.ts +170 -0
  323. package/src/runtime/claims.ts +468 -0
  324. package/src/runtime/cli-result.ts +55 -0
  325. package/src/runtime/cli.ts +678 -0
  326. package/src/runtime/command-detect.ts +516 -0
  327. package/src/runtime/context-pack.ts +492 -0
  328. package/src/runtime/decision-register.ts +493 -0
  329. package/src/runtime/evidence-ledger.ts +338 -0
  330. package/src/runtime/failure/capture.ts +272 -0
  331. package/src/runtime/failure/classifier.ts +68 -0
  332. package/src/runtime/failure/cli.ts +178 -0
  333. package/src/runtime/failure/home.ts +64 -0
  334. package/src/runtime/failure/store.ts +226 -0
  335. package/src/runtime/feature-resolve.ts +79 -0
  336. package/src/runtime/freshness.ts +177 -0
  337. package/src/runtime/health.ts +863 -0
  338. package/src/runtime/history-compactor.ts +237 -0
  339. package/src/runtime/implementation-gate.ts +321 -0
  340. package/src/runtime/inventory/coverage.ts +218 -0
  341. package/src/runtime/inventory/identity.ts +65 -0
  342. package/src/runtime/inventory/index.ts +705 -0
  343. package/src/runtime/inventory/precedence.ts +134 -0
  344. package/src/runtime/inventory/read-scopes.ts +131 -0
  345. package/src/runtime/inventory/siblings.ts +192 -0
  346. package/src/runtime/knowledge/chunker.ts +124 -0
  347. package/src/runtime/knowledge/hybrid.ts +149 -0
  348. package/src/runtime/knowledge/index-store.ts +145 -0
  349. package/src/runtime/knowledge/retrieval.ts +194 -0
  350. package/src/runtime/leak-scan.ts +185 -0
  351. package/src/runtime/lifecycle/cli.ts +276 -0
  352. package/src/runtime/lifecycle/event-store.ts +340 -0
  353. package/src/runtime/lifecycle/fold.ts +353 -0
  354. package/src/runtime/lifecycle/followup.ts +432 -0
  355. package/src/runtime/lifecycle/goal.ts +249 -0
  356. package/src/runtime/lifecycle/intent-writer.ts +86 -0
  357. package/src/runtime/lifecycle/overview.ts +292 -0
  358. package/src/runtime/lifecycle/release.ts +241 -0
  359. package/src/runtime/lifecycle/report-store.ts +221 -0
  360. package/src/runtime/lifecycle/retention.ts +212 -0
  361. package/src/runtime/lifecycle/root.ts +71 -0
  362. package/src/runtime/lifecycle/status.ts +353 -0
  363. package/src/runtime/lifecycle/store-upkeep.ts +393 -0
  364. package/src/runtime/locator-resolve.ts +158 -0
  365. package/src/runtime/mask.ts +210 -0
  366. package/src/runtime/mcp-consultations.ts +412 -0
  367. package/src/runtime/mcp-reach.ts +157 -0
  368. package/src/runtime/model-router.ts +153 -0
  369. package/src/runtime/outcome.ts +467 -0
  370. package/src/runtime/reach.ts +148 -0
  371. package/src/runtime/readiness-record.ts +150 -0
  372. package/src/runtime/readiness.ts +435 -0
  373. package/src/runtime/recovery.ts +282 -0
  374. package/src/runtime/research-request.ts +231 -0
  375. package/src/runtime/retrieval-plan.ts +578 -0
  376. package/src/runtime/scaffold/artifacts.ts +217 -0
  377. package/src/runtime/scaffold/fingerprint.ts +56 -0
  378. package/src/runtime/scaffold/generate.ts +911 -0
  379. package/src/runtime/scaffold/languages.ts +245 -0
  380. package/src/runtime/storage/cli.ts +64 -0
  381. package/src/runtime/storage/engine.ts +249 -0
  382. package/src/runtime/storage/registry.ts +130 -0
  383. package/src/runtime/storage/roots.ts +63 -0
  384. package/src/runtime/storage/rules.ts +282 -0
  385. package/src/runtime/storage/upkeep.ts +243 -0
  386. package/src/runtime/storage/work-status.ts +326 -0
  387. package/src/runtime/task-attempts.ts +415 -0
  388. package/src/runtime/task-classifier.ts +550 -0
  389. package/src/runtime/task-scope.ts +130 -0
  390. package/src/runtime/task-state.ts +176 -0
  391. package/src/runtime/trace/indicators.ts +235 -0
  392. package/src/runtime/trace/ledger.ts +626 -0
  393. package/src/runtime/trace/render.ts +76 -0
  394. package/src/runtime/trace/views.ts +459 -0
  395. package/src/runtime/verification/contract-runner.ts +341 -0
  396. package/src/runtime/verification/engine.ts +1461 -0
  397. package/src/runtime/verification/registry.ts +130 -0
  398. package/src/runtime/verification/scope-bound.ts +418 -0
  399. package/src/runtime/verification/test-selection.ts +172 -0
  400. package/src/runtime/workflow-engine.ts +588 -0
  401. package/src/runtime/workflow-orchestrator.ts +953 -0
  402. package/src/runtime/worktree.ts +340 -0
  403. package/src/state/index.ts +193 -0
  404. package/src/state/lockfile.ts +136 -0
  405. package/src/state/run-lock.ts +408 -0
  406. package/types/node-commonjs.d.ts +68 -0
  407. package/types/runtime.d.ts +91 -0
@@ -0,0 +1,105 @@
1
+ ---
2
+ language: ruby
3
+ extensions: [".rb", ".rake", ".gemspec", ".ru"]
4
+ ---
5
+
6
+ # Ruby — Language-Specific Review Notes
7
+
8
+ Load this file alongside `rules/universal.md`. Universal rules are not repeated here — only Ruby-specific rules and idioms.
9
+
10
+ ---
11
+
12
+ ## PR Analyzer — Ruby Risk Signals
13
+
14
+ - `puts` / `p` / `pp` debug statements left in production code
15
+ - `# rubocop:disable` comments — verify they are justified
16
+ - `eval` / `instance_eval` / `class_eval` with user-controlled input
17
+ - Hardcoded credentials, tokens, or `SECRET_KEY_BASE` in source
18
+ - `binding.pry` / `byebug` / `debugger` left in code
19
+
20
+ ---
21
+
22
+ ## Code Quality — Ruby Checks
23
+
24
+ - Methods longer than 15 lines — Ruby idioms favor very small methods
25
+ - Classes with more than 10 public methods — possible god object
26
+ - `rescue Exception` — catches `SignalException` and `SystemExit`; use `rescue StandardError` or more specific types
27
+ - `method_missing` implemented without `respond_to_missing?`
28
+ - Deeply nested blocks (>3 levels) — extract to methods
29
+ - String interpolation used where a symbol would suffice (hash keys, etc.)
30
+
31
+ ---
32
+
33
+ ## Security
34
+
35
+ - Flag `eval` / `instance_eval` with user-controlled strings — remote code execution
36
+ - Flag `system()` / `exec()` / backtick calls with user-controlled input — shell injection
37
+ - Flag `YAML.load` on untrusted data — use `YAML.safe_load`
38
+ - Flag `Marshal.load` on untrusted data — arbitrary code execution
39
+ - Flag raw SQL string interpolation in ActiveRecord — use parameterized queries (`where("name = ?", name)`)
40
+ - Flag `params` passed directly to `redirect_to` without validation — open redirect
41
+ - Flag `render inline:` with user data — XSS via ERB
42
+ - Flag missing `strong_parameters` in Rails controllers — mass assignment vulnerability
43
+
44
+ ---
45
+
46
+ ## Async / Concurrency
47
+
48
+ - Flag shared mutable state accessed from multiple threads without a `Mutex`
49
+ - Flag `Thread.new` without storing the thread reference — exceptions are silently swallowed
50
+ - Flag `sleep` used as a synchronization mechanism in threaded code
51
+ - Flag `@@class_variables` mutated in multi-threaded contexts — not thread-safe
52
+ - Flag Sidekiq / ActiveJob workers that are not idempotent — jobs can be retried
53
+
54
+ ---
55
+
56
+ ## Resource Management
57
+
58
+ - Flag `File.open` without a block form — the block form guarantees `close`
59
+ - Flag database connections or HTTP clients not released in `ensure` blocks
60
+ - Flag `ActiveRecord` queries inside loops — N+1 pattern; use `includes` / `preload` / `eager_load`
61
+ - Flag `ObjectSpace` usage in production — memory and performance impact
62
+
63
+ ---
64
+
65
+ ## Exception Handling
66
+
67
+ - Flag `rescue Exception` — use `rescue StandardError` or a specific exception class
68
+ - Flag empty `rescue` blocks — swallowed errors
69
+ - Flag `rescue` used for control flow (e.g. rescuing `ActiveRecord::RecordNotFound` instead of using `find_by`)
70
+ - Flag re-raising with `raise e` instead of bare `raise` — loses the original backtrace
71
+ - Flag `ensure` blocks that can raise — masks the original exception
72
+
73
+ ---
74
+
75
+ ## Performance
76
+
77
+ - Flag N+1 ActiveRecord queries — use `includes`, `preload`, or `eager_load`
78
+ - Flag `Array#each` with string concatenation — use `map` + `join`
79
+ - Flag `select` + `map` that could be a single `filter_map`
80
+ - Flag `.count` on an ActiveRecord relation inside a view or loop — triggers a query each time
81
+ - Flag `require` inside a method body — constant overhead on every call
82
+ - Flag `Hash#merge` in a loop — use `merge!` or `each_with_object`
83
+
84
+ ---
85
+
86
+ ## Idioms and Best Practices
87
+
88
+ ### Ruby Style
89
+ - Prefer `map` / `select` / `reject` / `reduce` over manual `each` + accumulator
90
+ - Prefer `&method(:name)` over `{ |x| some_method(x) }` for method reference blocks
91
+ - Prefer `freeze` on string constants to avoid repeated object allocation
92
+ - Use `attr_reader` / `attr_writer` / `attr_accessor` instead of manual getter/setter methods
93
+ - Prefer `Symbol#to_proc` (`&:method_name`) for simple single-method blocks
94
+
95
+ ### Rails-Specific
96
+ - Keep controllers thin — logic belongs in service objects, models, or concerns
97
+ - Use `before_action` for authentication/authorization checks — never inline
98
+ - Prefer `find_by` over `where(...).first` — more intent-revealing
99
+ - Flag `after_commit` callbacks with side effects that should be in a service object
100
+ - Prefer `respond_to` blocks over separate controller actions for format variants
101
+
102
+ ### Modern Ruby (3.x)
103
+ - Prefer pattern matching (`case/in`) for complex data destructuring
104
+ - Use numbered block parameters (`_1`, `_2`) only for very short, obvious blocks
105
+ - Prefer `Data.define` for simple immutable value objects (Ruby 3.2+)
@@ -0,0 +1,99 @@
1
+ ---
2
+ language: rust
3
+ extensions: [".rs"]
4
+ ---
5
+
6
+ # Rust — Language-Specific Review Notes
7
+
8
+ Load this file alongside `rules/universal.md`. Universal rules are not repeated here — only Rust-specific rules and idioms.
9
+
10
+ ---
11
+
12
+ ## PR Analyzer — Rust Risk Signals
13
+
14
+ - `unsafe { }` blocks — require explicit justification and sign-off
15
+ - `#[allow(...)]` attributes suppressing lints — verify they are justified
16
+ - `.unwrap()` / `.expect("")` on `Option` or `Result` outside of tests or prototypes
17
+ - Hardcoded credentials or tokens in source
18
+ - `TODO` / `FIXME` comments near `unsafe` or ownership code
19
+
20
+ ---
21
+
22
+ ## Code Quality — Rust Checks
23
+
24
+ - `.unwrap()` used broadly in production code — prefer `?`, `if let`, or `match`
25
+ - `clone()` called excessively — may indicate ownership design issues
26
+ - `Arc<Mutex<T>>` used where a simpler ownership model would work
27
+ - `Box<dyn Trait>` used where generics (`impl Trait`) would avoid heap allocation
28
+ - `pub` fields on structs that should enforce invariants — use accessor methods
29
+
30
+ ---
31
+
32
+ ## Security
33
+
34
+ - Flag `unsafe` blocks accessing raw pointers without clear safety invariant documented in a comment
35
+ - Flag `std::mem::transmute` — almost always a logic error or undefined behavior; require strong justification
36
+ - Flag `from_utf8_unchecked` on user-controlled data — use `from_utf8` with error handling
37
+ - Flag `unwrap()` on user-supplied input parsing — panics are a denial-of-service vector in server code
38
+ - Flag hardcoded secrets — use environment variables or a secrets crate
39
+
40
+ ---
41
+
42
+ ## Async / Concurrency
43
+
44
+ - Flag `std::sync::Mutex` used in async code — use `tokio::sync::Mutex` to avoid blocking the async runtime
45
+ - Flag `.await` inside a `std::sync::MutexGuard` scope — holds the lock across an await point, blocking other tasks
46
+ - Flag `spawn` without storing the `JoinHandle` — panics in the spawned task are silently ignored
47
+ - Flag `Arc<Mutex<T>>` cloned excessively — consider message passing via channels instead
48
+ - Flag blocking I/O calls (`std::fs`, `std::net`) inside async functions — use async equivalents
49
+
50
+ ---
51
+
52
+ ## Resource Management
53
+
54
+ - Flag manual `drop` called explicitly where the natural scope boundary suffices
55
+ - Flag `Rc<T>` used in multi-threaded code — use `Arc<T>`; the compiler catches this but flag in review for architecture discussion
56
+ - Flag `Vec` or `String` with large pre-allocated capacity never trimmed — call `.shrink_to_fit()` if long-lived
57
+ - Flag `impl Drop` that can panic — causes `abort` during stack unwinding
58
+
59
+ ---
60
+
61
+ ## Exception Handling
62
+
63
+ - Flag `.unwrap()` in production code outside of tests — use `?` to propagate or handle explicitly
64
+ - Flag `.expect("todo")` or `.expect("")` — messages must explain the invariant that guarantees safety
65
+ - Flag `panic!` used for recoverable errors — use `Result<T, E>`
66
+ - Flag `unwrap_or_default()` where the default silently masks a real error
67
+ - Prefer typed error enums (`thiserror`) over `Box<dyn Error>` for library crates
68
+ - Prefer `anyhow` for application-level error context; `thiserror` for library error types
69
+
70
+ ---
71
+
72
+ ## Performance
73
+
74
+ - Flag `.clone()` on large types in hot paths — review whether a reference or `Cow<T>` would work
75
+ - Flag `format!` used only to create a `String` from a literal — use `.to_string()` or `String::from`
76
+ - Flag `collect::<Vec<_>>()` followed immediately by `.iter()` — chain iterators instead
77
+ - Flag `Box<T>` for small types where stack allocation is fine
78
+ - Flag `Mutex` contention on a hot path — consider `RwLock` for read-heavy workloads or sharding
79
+
80
+ ---
81
+
82
+ ## Idioms and Best Practices
83
+
84
+ ### Ownership
85
+ - Prefer borrowing (`&T`, `&mut T`) over cloning wherever the lifetime allows
86
+ - Use `Cow<'_, str>` for functions that sometimes need to own and sometimes borrow
87
+ - Prefer `impl Trait` in function signatures over `Box<dyn Trait>` for static dispatch
88
+
89
+ ### Error Handling
90
+ - Use `?` operator to propagate errors — avoid manual `match Err(e) => return Err(e)`
91
+ - Define domain error types with `thiserror` in libraries; use `anyhow` in binaries
92
+ - Never use `.unwrap()` in library code — it panics the caller's thread
93
+
94
+ ### Modern Rust
95
+ - Prefer `if let` / `while let` for single-variant matches over full `match`
96
+ - Prefer `?` over `unwrap` everywhere errors are recoverable
97
+ - Use `#[derive(Debug, Clone, PartialEq)]` consistently on data types
98
+ - Prefer `iter()` chains over manual loops — they compose and optimize well
99
+ - Use `clippy` and treat its lints as required — flag any `#[allow(clippy::...)]` in review
@@ -0,0 +1,90 @@
1
+ ---
2
+ language: shell
3
+ extensions: [".sh", ".bash", ".zsh"]
4
+ ---
5
+
6
+ # Shell — Language-Specific Review Notes
7
+
8
+ Load this file alongside `rules/universal.md`. Universal rules are not repeated here — only
9
+ shell-specific rules and idioms.
10
+
11
+ Shell sits in `languages/` rather than `content-types/` because it is executable code with real
12
+ control flow: functions, branches, loops, and a complexity reading that means something. Its
13
+ failure modes are its own, though — almost every serious shell bug is a quoting bug, an unchecked
14
+ exit status, or a command that ran in the wrong directory.
15
+
16
+ ---
17
+
18
+ ## PR Analyzer — Shell Risk Signals
19
+
20
+ - No `set -euo pipefail` (or equivalent) near the top of an executable script
21
+ - `rm -rf` with any variable in the path
22
+ - `eval`, or a command assembled by string concatenation
23
+ - `curl ... | bash`, or any pipe from the network into an interpreter
24
+ - `sudo` inside a script that is not documented as requiring it
25
+ - A `trap` that is registered but cleans up nothing, or is absent where a temp dir is created
26
+
27
+ ## Code Quality — Shell Checks
28
+
29
+ - **Unquoted expansion** — `$VAR` rather than `"$VAR"` in any command touching a path. A value with
30
+ a space becomes two arguments; a value with `*` becomes whatever the glob matched. This is the
31
+ single most common real shell defect and the analyser flags it for path-acting commands.
32
+ - **Unchecked `cd`** — `cd "$dir"` without `|| exit` and without `set -e` leaves every subsequent
33
+ line running in the previous directory. The commands still "succeed", against the wrong tree.
34
+ - **Unchecked command substitution** — `x=$(cmd)` swallows `cmd`'s exit status unless `set -e` and
35
+ `pipefail` are both in force.
36
+ - **`[` vs `[[`** — prefer `[[ ]]` in bash: it does not word-split, so an empty variable does not
37
+ turn a comparison into a syntax error.
38
+ - **Long functions** — the universal threshold applies; a shell function past it is usually several
39
+ scripts that never got separated.
40
+
41
+ ## Security
42
+
43
+ - Never interpolate untrusted input into a command string; pass it as an argument.
44
+ - `eval` is a finding unless the review can name why nothing else works.
45
+ - Secrets passed as command-line arguments are visible in `ps`; prefer an environment variable read
46
+ from a file, or stdin.
47
+ - A temp file created without `mktemp` is a predictable path, which is a symlink attack.
48
+ - `IFS` changed without being restored affects every later word-split in the script.
49
+
50
+ ## Async / Concurrency
51
+
52
+ - A backgrounded job (`&`) whose exit status is never collected by `wait` fails silently.
53
+ - `nohup ... &` detaches deliberately; the review should confirm the output redirection is explicit,
54
+ since an inherited stdin or stdout fd can hold a pipe open and hang the caller.
55
+ - Parallel writes to one file from backgrounded jobs interleave; append-with-`>>` is not atomic
56
+ above the pipe buffer size.
57
+
58
+ ## Resource Management
59
+
60
+ - Every `mktemp` needs a matching `trap ... EXIT` that removes it, including on the error paths.
61
+ - A `trap` registered after the resource is created leaves a window where a signal leaks it.
62
+ - File descriptors opened with `exec 3<` are closed with `exec 3<&-`, not by falling off the end.
63
+
64
+ ## Exception Handling
65
+
66
+ - Shell has no exceptions; `set -e` plus explicit `|| { ...; exit 1; }` is the mechanism.
67
+ - `set -e` does not apply inside a command substitution, a condition, or the left side of `&&` —
68
+ a review that assumes it does will pass code that silently continues.
69
+ - An error message must go to stderr (`>&2`), or a caller capturing stdout will absorb it as data.
70
+ - A non-zero exit that is expected and handled should say so in a comment; a reader cannot tell an
71
+ ignored failure from a tolerated one.
72
+
73
+ ## Performance
74
+
75
+ - A loop calling an external binary per line is the usual cause of a slow script; `awk`, `sed` or a
76
+ single `xargs` does the same work in one process.
77
+ - `$(cat file)` reads the whole file into memory; `< file` in a redirect does not.
78
+ - Subshells `( )` fork; braces `{ }` do not. Reaching for the first out of habit costs a process per
79
+ iteration.
80
+
81
+ ## Idioms and Best Practices
82
+
83
+ - `#!/usr/bin/env bash` rather than a hardcoded interpreter path.
84
+ - `set -euo pipefail` at the top of anything executable, with a comment where one of the three is
85
+ deliberately omitted (a hook that must fail open, for example — see this repository's own hooks).
86
+ - Quote every expansion by default; make the unquoted ones the exception that carries a comment.
87
+ - `local` on every variable inside a function — shell variables are global otherwise.
88
+ - `readonly` for constants, so a later assignment is an error rather than a surprise.
89
+ - `shellcheck` catches most of the above; this file exists because the bundled analyser must work
90
+ without it (see the skill's no-external-dependency constraint).
@@ -0,0 +1,88 @@
1
+ ---
2
+ language: swift
3
+ extensions: [".swift"]
4
+ ---
5
+
6
+ # Swift — Language-Specific Review Notes
7
+
8
+ Load this file alongside `rules/universal.md`. Universal rules are not repeated here — only Swift-specific rules and idioms.
9
+
10
+ ---
11
+
12
+ ## PR Analyzer — Swift Risk Signals
13
+
14
+ - `print()` statements left in production code
15
+ - Force unwrap (`!`) on optionals outside of tests or justified init
16
+ - Force cast (`as!`) without a safe fallback
17
+ - Hardcoded credentials or API keys in source
18
+
19
+ ---
20
+
21
+ ## Code Quality — Swift Checks
22
+
23
+ - Force unwrap (`!`) used broadly — prefer `guard let` or `if let`
24
+ - `try!` used outside of guaranteed-safe contexts
25
+ - Retain cycles in closures — missing `[weak self]` or `[unowned self]`
26
+ - `@objc` / `dynamic` used without an Objective-C interop reason
27
+
28
+ ---
29
+
30
+ ## Security
31
+
32
+ - Flag credentials stored in `UserDefaults` — require Keychain
33
+ - Flag `URLSession` requests over plain HTTP in production
34
+ - Flag `WKWebView` loading arbitrary user-supplied URLs without validation
35
+
36
+ ---
37
+
38
+ ## Async / Concurrency
39
+
40
+ - Flag `DispatchQueue.main.sync` called from the main thread — deadlock
41
+ - Flag `@escaping` closures capturing `self` strongly in reference cycles — use `[weak self]`
42
+ - Flag mixing `async/await` and `DispatchQueue` for the same operation without clear reasoning
43
+ - Flag `Task { }` (unstructured) where a structured `async let` or `TaskGroup` would maintain structure
44
+ - Flag data races — shared mutable state accessed from multiple tasks without an actor
45
+
46
+ ---
47
+
48
+ ## Resource Management
49
+
50
+ - Flag `URLSessionDataTask` started with no cancellation handle stored — cannot be cancelled if the view disappears
51
+ - Flag `NotificationCenter` observers added without a corresponding `removeObserver` — memory leak
52
+ - Flag `CLLocationManager` / `AVCaptureSession` not stopped when the owning view controller is dismissed
53
+
54
+ ---
55
+
56
+ ## Exception Handling
57
+
58
+ - Flag `try!` outside of guaranteed-safe contexts (test fixtures, constants) — crashes on failure
59
+ - Flag `try?` discarding errors where the failure mode matters to the caller
60
+ - Flag error types conforming to `Error` with no associated values or message — makes debugging hard
61
+ - Flag throwing functions calling `fatalError()` as a fallback — choose one error strategy
62
+
63
+ ---
64
+
65
+ ## Performance
66
+
67
+ - Flag `UIImage(named:)` called repeatedly for the same asset without caching
68
+ - Flag synchronous network calls on the main thread
69
+ - Flag `Array` used for frequent membership tests — prefer `Set`
70
+ - Flag `String` interpolation inside tight loops where a pre-built string would avoid allocations
71
+
72
+ ---
73
+
74
+ ## Idioms and Best Practices
75
+
76
+ ### Optionals
77
+ - Prefer `guard let` for early exit; `if let` for local scope
78
+ - Prefer optional chaining (`?.`) over force unwrap
79
+ - Flag implicitly unwrapped optionals (`var x: String!`) outside of `@IBOutlet`
80
+
81
+ ### Memory Management
82
+ - Flag closures capturing `self` strongly in reference cycles — use `[weak self]`
83
+ - Prefer `struct` over `class` for value semantics unless identity or inheritance is needed
84
+ - Use `unowned` only when the lifetime is guaranteed — otherwise `weak`
85
+
86
+ ### Concurrency (Swift 5.5+)
87
+ - Prefer `async/await` over completion handlers in new code
88
+ - Flag `DispatchQueue.main.async` where `@MainActor` or `await MainActor.run` is more appropriate
@@ -0,0 +1,97 @@
1
+ ---
2
+ language: typescript
3
+ extensions: [".ts", ".tsx", ".js", ".jsx", ".mjs"]
4
+ ---
5
+
6
+ # TypeScript / JavaScript — Language-Specific Review Notes
7
+
8
+ Load this file alongside `rules/universal.md`. Universal rules are not repeated here — only TypeScript/JavaScript-specific rules and idioms.
9
+
10
+ ---
11
+
12
+ ## PR Analyzer — TypeScript / JavaScript Risk Signals
13
+
14
+ - `console.log` / `debugger` statements left in production code
15
+ - `// eslint-disable` comments — verify they are justified
16
+ - `any` type annotations — require explicit justification
17
+ - `@ts-ignore` / `@ts-expect-error` — verify they are justified
18
+ - `eval()` with any dynamic or user-controlled input
19
+ - Hardcoded API keys or tokens in source
20
+
21
+ ---
22
+
23
+ ## Code Quality — TypeScript / JavaScript Checks
24
+
25
+ - `any` used broadly instead of proper typing
26
+ - Non-null assertion (`!`) used without justification
27
+ - `var` declarations — prefer `const` / `let`
28
+ - Missing `await` on async function calls
29
+ - Floating promises (no `.catch()` and no `await`)
30
+ - `==` used instead of `===`
31
+
32
+ ---
33
+
34
+ ## Security
35
+
36
+ - Flag `innerHTML`, `outerHTML`, `document.write()` with user-controlled data — use `textContent` or a sanitizer
37
+ - Flag `dangerouslySetInnerHTML` in React without a sanitizer
38
+ - Flag `eval()` / `new Function()` with dynamic input
39
+ - Flag JWT decoded without signature verification
40
+ - Flag missing `httpOnly` / `secure` flags on cookies
41
+
42
+ ---
43
+
44
+ ## Async / Promises
45
+
46
+ - Flag floating promises — async calls not `await`-ed and without `.catch()`
47
+ - Flag `Promise.all()` where `Promise.allSettled()` is safer (one failure should not cancel siblings)
48
+ - Flag `async` functions inside `forEach` — `forEach` does not await; use `for...of` or `Promise.all()`
49
+ - Flag unhandled promise rejection (no global `unhandledRejection` handler in Node.js services)
50
+
51
+ ---
52
+
53
+ ## Resource Management
54
+
55
+ - Flag `fs.createReadStream` / `fs.createWriteStream` with no `close` or `destroy` on error
56
+ - Flag `EventEmitter` listeners added in a loop without removal — memory leak
57
+ - Flag `setInterval` / `setTimeout` handles not cleared when the owning component unmounts or exits
58
+ - Flag database clients / pools not released after use in Node.js
59
+
60
+ ---
61
+
62
+ ## Exception Handling
63
+
64
+ - Flag `catch (e) {}` (empty catch) — swallowed error
65
+ - Flag `catch (e)` where `e` is used as `any` without narrowing — type the error properly
66
+ - Flag `Promise` rejection not handled — `.catch()` or `try/await/catch` required
67
+ - Flag re-throwing a new `Error` without wrapping the original — loses stack context
68
+ - Use `Error` subclasses for domain errors rather than plain strings or object literals
69
+
70
+ ---
71
+
72
+ ## Performance
73
+
74
+ - Flag `Array.prototype.find` / `filter` / `map` chained multiple times over the same array — combine into one pass
75
+ - Flag DOM queries (`document.querySelector`) inside loops — cache the result
76
+ - Flag `JSON.parse` / `JSON.stringify` in a hot path on large objects — consider streaming or partial parsing
77
+ - Flag `async` functions called sequentially in a loop where `Promise.all()` would parallelize them
78
+
79
+ ---
80
+
81
+ ## Idioms and Best Practices
82
+
83
+ ### Type Safety (TypeScript)
84
+ - Prefer `unknown` over `any` for truly unknown values — forces a type guard before use
85
+ - Prefer type narrowing (`typeof`, `instanceof`, discriminated unions) over casting
86
+ - Enable `strict` mode in `tsconfig.json`
87
+ - Prefer `interface` for object shapes that may be extended; `type` for unions and aliases
88
+
89
+ ### Modern JavaScript / TypeScript
90
+ - Prefer `const` by default; `let` only when reassignment is needed
91
+ - Prefer optional chaining (`?.`) and nullish coalescing (`??`) over manual null guards
92
+ - Prefer `structuredClone()` over manual deep-copy patterns
93
+ - Prefer named exports over default exports for better refactoring support
94
+
95
+ ### Null / Undefined Safety
96
+ - Distinguish between `null` (intentional absence) and `undefined` (not set) — be consistent
97
+ - Flag `== null` checks that accidentally include `undefined` when only one is intended
@@ -0,0 +1,47 @@
1
+ {
2
+ "description": "Review policy DoFlow ships. The analyzer resolves three tiers, lowest precedence first: its built-in literal, this file, then agent-docs/review-policy.json in the repository under review. A project overrides individual values by declaring only those values in its own file; everything it omits resolves from here. Documentation must name this file rather than restate any value in it, and a guard in the default test suite fails when a shipped document carries a number declared here.",
3
+ "thresholds": {
4
+ "long_function_lines": 50,
5
+ "too_many_parameters": 5,
6
+ "high_complexity": 10,
7
+ "god_class_methods": 20,
8
+ "max_imports": 15,
9
+ "max_declarative_depth": 8
10
+ },
11
+ "thresholdLabels": {
12
+ "long_function_lines": "Long function",
13
+ "too_many_parameters": "Too many params",
14
+ "high_complexity": "High complexity",
15
+ "god_class_methods": "God class",
16
+ "max_imports": "Too many imports",
17
+ "max_declarative_depth": "Nesting depth"
18
+ },
19
+ "severities": [
20
+ "low",
21
+ "medium",
22
+ "high"
23
+ ],
24
+ "verdictBands": [
25
+ {
26
+ "verdict": "Approve",
27
+ "minScore": 90,
28
+ "maxHighFindings": 0
29
+ },
30
+ {
31
+ "verdict": "Approve with suggestions",
32
+ "minScore": 75,
33
+ "maxHighFindings": 2
34
+ },
35
+ {
36
+ "verdict": "Request changes",
37
+ "minScore": 50,
38
+ "maxHighFindings": null
39
+ },
40
+ {
41
+ "verdict": "Block",
42
+ "minScore": 0,
43
+ "maxHighFindings": null
44
+ }
45
+ ],
46
+ "exclusions": []
47
+ }
@@ -0,0 +1,49 @@
1
+ # Universal Rules — All Languages
2
+
3
+ These rules apply regardless of language. Load this file for every review, alongside the relevant `languages/*.md` file.
4
+
5
+ ---
6
+
7
+ ## Security
8
+
9
+ - Flag any string interpolation or concatenation used to build SQL, shell, or LDAP queries — require parameterized queries or a safe API
10
+ - Flag hardcoded credentials, API keys, tokens, or secrets anywhere in source — require environment variables or a secrets manager
11
+ - Flag user-controlled input passed to file system, process execution, or URL redirect APIs without validation
12
+ - Flag overly broad CORS or CSP policies
13
+
14
+ ---
15
+
16
+ ## Async / Concurrency
17
+
18
+ - Flag shared mutable state accessed from multiple threads/coroutines/tasks without synchronization
19
+ - Flag fire-and-forget async operations with no error handling path
20
+ - Flag timeouts missing on any network or I/O call
21
+ - Flag unbounded queues or thread pools with no backpressure mechanism
22
+
23
+ ---
24
+
25
+ ## Resource Management
26
+
27
+ - Flag any resource (file, socket, DB connection, HTTP connection) acquired without a guaranteed release path
28
+ - Flag connection pools not returned to the pool on all code paths (including exceptions)
29
+ - Flag unbounded collections that grow without eviction — potential memory leak
30
+ - Flag resources held open longer than the operation they serve
31
+
32
+ ---
33
+
34
+ ## Exception Handling
35
+
36
+ - Flag empty catch/except blocks — swallowed exceptions hide bugs silently
37
+ - Flag catching the broadest possible exception type (`Exception`, `Throwable`, `error`) where a specific type is appropriate
38
+ - Flag exceptions used for normal control flow (signaling "not found", etc.) — use return values or `Optional`
39
+ - Flag error context lost when re-throwing — always wrap with the original cause
40
+
41
+ ---
42
+
43
+ ## Performance
44
+
45
+ - Flag N+1 query patterns — loading a collection then querying for each item individually
46
+ - Flag unbounded queries or API calls with no pagination or limit
47
+ - Flag synchronous I/O on a thread or event loop that serves concurrent requests
48
+ - Flag large objects serialized/deserialized repeatedly when they could be cached
49
+ - Flag string concatenation in tight loops — use a builder or join