freeharness 0.4.1

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 (375) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE +108 -0
  3. package/README.md +134 -0
  4. package/canonical/HARVEST.yaml +858 -0
  5. package/canonical/PROVENANCE.yaml +740 -0
  6. package/canonical/agents/README.md +95 -0
  7. package/canonical/agents/agentic-architect.md +18 -0
  8. package/canonical/agents/database-reviewer.md +41 -0
  9. package/canonical/agents/explorer-ai-engineer-analyst.md +65 -0
  10. package/canonical/agents/pr-reviewer.md +96 -0
  11. package/canonical/agents/python-reviewer.md +55 -0
  12. package/canonical/agents/report-formatter.md +19 -0
  13. package/canonical/agents/security-reviewer.md +53 -0
  14. package/canonical/agents/test-writer.md +34 -0
  15. package/canonical/commands/fh-context.md +37 -0
  16. package/canonical/evals/promptfoo.redteam.yaml +108 -0
  17. package/canonical/hooks/cost-prices.json +14 -0
  18. package/canonical/hooks/freeharness-auto-memory.mjs +158 -0
  19. package/canonical/hooks/freeharness-config-guard.mjs +162 -0
  20. package/canonical/hooks/freeharness-context-monitor.mjs +198 -0
  21. package/canonical/hooks/freeharness-converge.mjs +227 -0
  22. package/canonical/hooks/freeharness-cost-tracker.mjs +1027 -0
  23. package/canonical/hooks/freeharness-memory-guard.mjs +57 -0
  24. package/canonical/hooks/freeharness-output-pruner.mjs +333 -0
  25. package/canonical/hooks/freeharness-precompact.mjs +323 -0
  26. package/canonical/hooks/freeharness-repeat-tool.mjs +208 -0
  27. package/canonical/hooks/freeharness-security-guidance.mjs +164 -0
  28. package/canonical/hooks/freeharness-session-start +583 -0
  29. package/canonical/hooks/hooks.auto-memory.claude-code.json +16 -0
  30. package/canonical/hooks/hooks.claude-code.json +17 -0
  31. package/canonical/hooks/hooks.config-guard.claude-code.json +16 -0
  32. package/canonical/hooks/hooks.context-monitor.claude-code.json +15 -0
  33. package/canonical/hooks/hooks.converge.claude-code.json +15 -0
  34. package/canonical/hooks/hooks.cost-tracker.claude-code.json +37 -0
  35. package/canonical/hooks/hooks.memory-guard.claude-code.json +16 -0
  36. package/canonical/hooks/hooks.output-pruner.claude-code.json +16 -0
  37. package/canonical/hooks/hooks.precompact.claude-code.json +15 -0
  38. package/canonical/hooks/hooks.repeat-tool.claude-code.json +25 -0
  39. package/canonical/hooks/hooks.security-guidance.claude-code.json +16 -0
  40. package/canonical/mcp/servers.json +20 -0
  41. package/canonical/openspec/config.base.yaml +89 -0
  42. package/canonical/openspec/schema.spec-driven.yaml +277 -0
  43. package/canonical/openspec/templates/data-contract.md +36 -0
  44. package/canonical/openspec/templates/design.md +84 -0
  45. package/canonical/openspec/templates/eval-plan.md +33 -0
  46. package/canonical/openspec/templates/follow-ups.md +2 -0
  47. package/canonical/openspec/templates/proposal.md +45 -0
  48. package/canonical/openspec/templates/spec.md +42 -0
  49. package/canonical/openspec/templates/tasks.md +38 -0
  50. package/canonical/profiles/local-llamacpp.LOCAL-MODELS.md +47 -0
  51. package/canonical/profiles/local-llamacpp.json +27 -0
  52. package/canonical/profiles/local-ollama.json +20 -0
  53. package/canonical/profiles/mcp.json +91 -0
  54. package/canonical/rules/CLAUDE.md +78 -0
  55. package/canonical/rules/project-CLAUDE.template.md +62 -0
  56. package/canonical/rules/routing.md +20 -0
  57. package/canonical/rules/safety.md +41 -0
  58. package/canonical/settings/settings.cache-hygiene.claude-code.json +5 -0
  59. package/canonical/skills/agent-evaluation/SKILL.md +102 -0
  60. package/canonical/skills/agent-evaluation/assets/evaluation_report_template.md +206 -0
  61. package/canonical/skills/agent-evaluation/evals/cases.yaml +106 -0
  62. package/canonical/skills/agent-evaluation/references/dataset-preparation.md +351 -0
  63. package/canonical/skills/agent-evaluation/references/scorers-constraints.md +165 -0
  64. package/canonical/skills/agent-evaluation/references/scorers.md +431 -0
  65. package/canonical/skills/agent-evaluation/references/setup-guide.md +252 -0
  66. package/canonical/skills/agent-evaluation/references/tracing-integration.md +164 -0
  67. package/canonical/skills/agent-evaluation/references/troubleshooting.md +514 -0
  68. package/canonical/skills/agent-evaluation/scripts/analyze_results.py +462 -0
  69. package/canonical/skills/agent-evaluation/scripts/create_dataset_template.py +382 -0
  70. package/canonical/skills/agent-evaluation/scripts/list_datasets.py +273 -0
  71. package/canonical/skills/agent-evaluation/scripts/run_evaluation_template.py +309 -0
  72. package/canonical/skills/agent-evaluation/scripts/setup_mlflow.py +353 -0
  73. package/canonical/skills/agent-evaluation/scripts/utils/__init__.py +27 -0
  74. package/canonical/skills/agent-evaluation/scripts/utils/env_validation.py +123 -0
  75. package/canonical/skills/agent-evaluation/scripts/utils/tracing_utils.py +108 -0
  76. package/canonical/skills/agent-evaluation/scripts/validate_agent_tracing.py +148 -0
  77. package/canonical/skills/agent-evaluation/scripts/validate_auth.py +240 -0
  78. package/canonical/skills/agent-evaluation/scripts/validate_environment.py +185 -0
  79. package/canonical/skills/agent-evaluation/scripts/validate_tracing_runtime.py +318 -0
  80. package/canonical/skills/agentic-architecture/SKILL.md +41 -0
  81. package/canonical/skills/agentic-architecture/evals/cases.yaml +94 -0
  82. package/canonical/skills/agentic-architecture/reference/context-engineering.md +75 -0
  83. package/canonical/skills/agentic-architecture/reference/patterns.md +76 -0
  84. package/canonical/skills/agentic-architecture/reference/reliability-observability.md +94 -0
  85. package/canonical/skills/agentic-architecture/reference/review-framework.md +59 -0
  86. package/canonical/skills/code-review/SKILL.md +52 -0
  87. package/canonical/skills/code-review/evals/cases.yaml +197 -0
  88. package/canonical/skills/git-workflow/SKILL.md +41 -0
  89. package/canonical/skills/git-workflow/evals/cases.yaml +92 -0
  90. package/canonical/skills/local-code/SKILL.md +24 -0
  91. package/canonical/skills/local-code/evals/cases.yaml +85 -0
  92. package/canonical/skills/local-code/scripts/query_llama.py +68 -0
  93. package/canonical/skills/report-formatting/SKILL.md +62 -0
  94. package/canonical/skills/report-formatting/evals/cases.yaml +83 -0
  95. package/canonical/skills/report-formatting/reference/ARCHITECTURE.md +135 -0
  96. package/canonical/skills/report-formatting/reference/HELPERS.md +120 -0
  97. package/canonical/skills/report-formatting/reference/PPTX.md +136 -0
  98. package/canonical/skills/report-formatting/reference/RELEASE.md +99 -0
  99. package/canonical/skills/report-formatting/reference/TEMPLATES.md +48 -0
  100. package/canonical/skills/report-formatting/reference/authoring.md +66 -0
  101. package/canonical/skills/report-formatting/scripts/architecture-template.md +271 -0
  102. package/canonical/skills/report-formatting/scripts/assets/claro-logo.png +0 -0
  103. package/canonical/skills/report-formatting/scripts/assets/claro-wordmark.svg +1 -0
  104. package/canonical/skills/report-formatting/scripts/build-architecture.js +57 -0
  105. package/canonical/skills/report-formatting/scripts/build-md-claro.js +224 -0
  106. package/canonical/skills/report-formatting/scripts/build-release.js +51 -0
  107. package/canonical/skills/report-formatting/scripts/check-env.js +58 -0
  108. package/canonical/skills/report-formatting/scripts/docmodel.js +283 -0
  109. package/canonical/skills/report-formatting/scripts/example-build.js +119 -0
  110. package/canonical/skills/report-formatting/scripts/example_build_ArchitectureReview_docx.js +195 -0
  111. package/canonical/skills/report-formatting/scripts/example_build_ExecutiveReport_docx.js +114 -0
  112. package/canonical/skills/report-formatting/scripts/package.json +17 -0
  113. package/canonical/skills/report-formatting/scripts/pptx/example_build_StatusReport_pptx.py +223 -0
  114. package/canonical/skills/report-formatting/scripts/pptx/example_build_WeeklyStatus_pptx.py +245 -0
  115. package/canonical/skills/report-formatting/scripts/pptx/pptx_office.py +144 -0
  116. package/canonical/skills/report-formatting/scripts/pptx/requirements.txt +7 -0
  117. package/canonical/skills/report-formatting/scripts/pptx/status_report_blocks.py +193 -0
  118. package/canonical/skills/report-formatting/scripts/pptx/theme_claro_pptx.py +473 -0
  119. package/canonical/skills/report-formatting/scripts/release-template.md +80 -0
  120. package/canonical/skills/report-formatting/scripts/render-mermaid.js +105 -0
  121. package/canonical/skills/report-formatting/scripts/theme-claro.js +403 -0
  122. package/canonical/skills/subagent-driven-development/SKILL.md +60 -0
  123. package/canonical/skills/subagent-driven-development/evals/cases.yaml +208 -0
  124. package/canonical/skills/subagent-driven-development/reference/brief.md +91 -0
  125. package/canonical/skills/subagent-driven-development/reference/handoff.md +118 -0
  126. package/canonical/skills/subagent-driven-development/scripts/validate-handoff.mjs +850 -0
  127. package/canonical/skills/systematic-debugging/SKILL.md +44 -0
  128. package/canonical/skills/systematic-debugging/evals/cases.yaml +90 -0
  129. package/canonical/skills/test-driven-development/SKILL.md +42 -0
  130. package/canonical/skills/test-driven-development/evals/cases.yaml +86 -0
  131. package/canonical/skills/test-driven-development/reference/writing-good-tests.md +52 -0
  132. package/canonical/skills/verification-before-completion/SKILL.md +53 -0
  133. package/canonical/skills/verification-before-completion/evals/cases.yaml +107 -0
  134. package/dist/adapters/content/language-lint.d.ts +46 -0
  135. package/dist/adapters/content/language-lint.js +191 -0
  136. package/dist/adapters/harness/claude-code.d.ts +57 -0
  137. package/dist/adapters/harness/claude-code.js +385 -0
  138. package/dist/adapters/harness/index.d.ts +3 -0
  139. package/dist/adapters/harness/index.js +17 -0
  140. package/dist/adapters/harness/opencode.d.ts +7 -0
  141. package/dist/adapters/harness/opencode.js +166 -0
  142. package/dist/adapters/harness/plugin.d.ts +22 -0
  143. package/dist/adapters/harness/plugin.js +257 -0
  144. package/dist/adapters/memory/doctor.d.ts +480 -0
  145. package/dist/adapters/memory/doctor.js +1217 -0
  146. package/dist/adapters/memory/vendored.d.ts +150 -0
  147. package/dist/adapters/memory/vendored.js +487 -0
  148. package/dist/adapters/package/node.d.ts +9 -0
  149. package/dist/adapters/package/node.js +20 -0
  150. package/dist/adapters/prompt/readline.d.ts +19 -0
  151. package/dist/adapters/prompt/readline.js +53 -0
  152. package/dist/adapters/sync/diff.d.ts +43 -0
  153. package/dist/adapters/sync/diff.js +380 -0
  154. package/dist/cli/cleanup.d.ts +86 -0
  155. package/dist/cli/cleanup.js +382 -0
  156. package/dist/cli/cost.d.ts +304 -0
  157. package/dist/cli/cost.js +501 -0
  158. package/dist/cli/doctor.d.ts +205 -0
  159. package/dist/cli/doctor.js +654 -0
  160. package/dist/cli/executor.d.ts +5 -0
  161. package/dist/cli/executor.js +48 -0
  162. package/dist/cli/plugin-validate.d.ts +37 -0
  163. package/dist/cli/plugin-validate.js +256 -0
  164. package/dist/cli/prefix.d.ts +68 -0
  165. package/dist/cli/prefix.js +218 -0
  166. package/dist/cli/profile.d.ts +170 -0
  167. package/dist/cli/profile.js +285 -0
  168. package/dist/cli/runner.d.ts +10 -0
  169. package/dist/cli/runner.js +27 -0
  170. package/dist/cli/uninstall.d.ts +65 -0
  171. package/dist/cli/uninstall.js +147 -0
  172. package/dist/index.d.ts +8 -0
  173. package/dist/index.js +989 -0
  174. package/dist/infra/dogfood.d.ts +31 -0
  175. package/dist/infra/dogfood.js +51 -0
  176. package/dist/infra/fsutil.d.ts +40 -0
  177. package/dist/infra/fsutil.js +143 -0
  178. package/dist/infra/manifest.d.ts +76 -0
  179. package/dist/infra/manifest.js +92 -0
  180. package/dist/infra/paths.d.ts +19 -0
  181. package/dist/infra/paths.js +74 -0
  182. package/dist/infra/routing.d.ts +4 -0
  183. package/dist/infra/routing.js +7 -0
  184. package/node_modules/@freeharness/core/dist/context.d.ts +30 -0
  185. package/node_modules/@freeharness/core/dist/context.js +1 -0
  186. package/node_modules/@freeharness/core/dist/index.d.ts +5 -0
  187. package/node_modules/@freeharness/core/dist/index.js +6 -0
  188. package/node_modules/@freeharness/core/dist/planner.d.ts +13 -0
  189. package/node_modules/@freeharness/core/dist/planner.js +18 -0
  190. package/node_modules/@freeharness/core/dist/ports.d.ts +90 -0
  191. package/node_modules/@freeharness/core/dist/ports.js +1 -0
  192. package/node_modules/@freeharness/core/dist/registry.d.ts +41 -0
  193. package/node_modules/@freeharness/core/dist/registry.js +124 -0
  194. package/node_modules/@freeharness/core/dist/tiers.d.ts +30 -0
  195. package/node_modules/@freeharness/core/dist/tiers.js +99 -0
  196. package/node_modules/@freeharness/core/package.json +34 -0
  197. package/node_modules/@freeharness/sdd/PROVENANCE.yaml +175 -0
  198. package/node_modules/@freeharness/sdd/dist/src/bin/openspec.d.ts +2 -0
  199. package/node_modules/@freeharness/sdd/dist/src/bin/openspec.js +166 -0
  200. package/node_modules/@freeharness/sdd/dist/src/index.d.ts +14 -0
  201. package/node_modules/@freeharness/sdd/dist/src/index.js +11 -0
  202. package/node_modules/@freeharness/sdd/dist/src/init.d.ts +39 -0
  203. package/node_modules/@freeharness/sdd/dist/src/init.js +190 -0
  204. package/node_modules/@freeharness/sdd/dist/src/root-resolver.d.ts +8 -0
  205. package/node_modules/@freeharness/sdd/dist/src/root-resolver.js +32 -0
  206. package/node_modules/@freeharness/sdd/dist/src/shim/archive.d.ts +81 -0
  207. package/node_modules/@freeharness/sdd/dist/src/shim/archive.js +483 -0
  208. package/node_modules/@freeharness/sdd/dist/src/shim/context.d.ts +4 -0
  209. package/node_modules/@freeharness/sdd/dist/src/shim/context.js +48 -0
  210. package/node_modules/@freeharness/sdd/dist/src/shim/follow-up.d.ts +57 -0
  211. package/node_modules/@freeharness/sdd/dist/src/shim/follow-up.js +279 -0
  212. package/node_modules/@freeharness/sdd/dist/src/shim/instructions.d.ts +67 -0
  213. package/node_modules/@freeharness/sdd/dist/src/shim/instructions.js +460 -0
  214. package/node_modules/@freeharness/sdd/dist/src/shim/list.d.ts +5 -0
  215. package/node_modules/@freeharness/sdd/dist/src/shim/list.js +95 -0
  216. package/node_modules/@freeharness/sdd/dist/src/shim/new-change.d.ts +6 -0
  217. package/node_modules/@freeharness/sdd/dist/src/shim/new-change.js +150 -0
  218. package/node_modules/@freeharness/sdd/dist/src/shim/schemas.d.ts +4 -0
  219. package/node_modules/@freeharness/sdd/dist/src/shim/schemas.js +23 -0
  220. package/node_modules/@freeharness/sdd/dist/src/shim/shared.d.ts +56 -0
  221. package/node_modules/@freeharness/sdd/dist/src/shim/shared.js +140 -0
  222. package/node_modules/@freeharness/sdd/dist/src/shim/status.d.ts +8 -0
  223. package/node_modules/@freeharness/sdd/dist/src/shim/status.js +85 -0
  224. package/node_modules/@freeharness/sdd/dist/src/shim/validate.d.ts +6 -0
  225. package/node_modules/@freeharness/sdd/dist/src/shim/validate.js +229 -0
  226. package/node_modules/@freeharness/sdd/dist/src/validate-change.d.ts +40 -0
  227. package/node_modules/@freeharness/sdd/dist/src/validate-change.js +114 -0
  228. package/node_modules/@freeharness/sdd/dist/src/validate.d.ts +24 -0
  229. package/node_modules/@freeharness/sdd/dist/src/validate.js +72 -0
  230. package/node_modules/@freeharness/sdd/dist/vendor/openspec/apply/specs-apply.d.ts +130 -0
  231. package/node_modules/@freeharness/sdd/dist/vendor/openspec/apply/specs-apply.js +981 -0
  232. package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/change-metadata.d.ts +46 -0
  233. package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/change-metadata.js +128 -0
  234. package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/change-status-policy.d.ts +26 -0
  235. package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/change-status-policy.js +32 -0
  236. package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/file-system.d.ts +50 -0
  237. package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/file-system.js +394 -0
  238. package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/global-config.d.ts +15 -0
  239. package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/global-config.js +49 -0
  240. package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/graph.d.ts +71 -0
  241. package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/graph.js +164 -0
  242. package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/index.d.ts +11 -0
  243. package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/index.js +21 -0
  244. package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/instruction-loader.d.ts +102 -0
  245. package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/instruction-loader.js +230 -0
  246. package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/outputs.d.ts +18 -0
  247. package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/outputs.js +138 -0
  248. package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/resolver.d.ts +82 -0
  249. package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/resolver.js +333 -0
  250. package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/schema.d.ts +12 -0
  251. package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/schema.js +110 -0
  252. package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/state.d.ts +11 -0
  253. package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/state.js +32 -0
  254. package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/task-progress.d.ts +33 -0
  255. package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/task-progress.js +149 -0
  256. package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/types.d.ts +39 -0
  257. package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/types.js +49 -0
  258. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/command-generation/adapters/claude.d.ts +12 -0
  259. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/command-generation/adapters/claude.js +31 -0
  260. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/command-generation/adapters/index.d.ts +10 -0
  261. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/command-generation/adapters/index.js +10 -0
  262. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/command-generation/adapters/opencode.d.ts +12 -0
  263. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/command-generation/adapters/opencode.js +26 -0
  264. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/command-generation/generator.d.ts +28 -0
  265. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/command-generation/generator.js +41 -0
  266. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/command-generation/index.d.ts +23 -0
  267. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/command-generation/index.js +25 -0
  268. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/command-generation/invocation.d.ts +72 -0
  269. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/command-generation/invocation.js +76 -0
  270. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/command-generation/registry.d.ts +39 -0
  271. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/command-generation/registry.js +53 -0
  272. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/command-generation/types.d.ts +62 -0
  273. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/command-generation/types.js +7 -0
  274. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/command-generation/yaml.d.ts +35 -0
  275. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/command-generation/yaml.js +47 -0
  276. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/command-references.d.ts +33 -0
  277. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/command-references.js +55 -0
  278. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/shared/allowed-tools.d.ts +11 -0
  279. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/shared/allowed-tools.js +11 -0
  280. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/shared/skill-generation.d.ts +48 -0
  281. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/shared/skill-generation.js +99 -0
  282. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/skill-templates.d.ts +19 -0
  283. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/skill-templates.js +18 -0
  284. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/types.d.ts +18 -0
  285. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/types.js +4 -0
  286. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/apply-change.d.ts +19 -0
  287. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/apply-change.js +207 -0
  288. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/archive-change.d.ts +12 -0
  289. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/archive-change.js +409 -0
  290. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/bulk-archive-change.d.ts +9 -0
  291. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/bulk-archive-change.js +673 -0
  292. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/continue-change.d.ts +9 -0
  293. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/continue-change.js +230 -0
  294. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/explore.d.ts +12 -0
  295. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/explore.js +550 -0
  296. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/feedback.d.ts +8 -0
  297. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/feedback.js +107 -0
  298. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/ff-change.d.ts +12 -0
  299. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/ff-change.js +228 -0
  300. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/new-change.d.ts +9 -0
  301. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/new-change.js +147 -0
  302. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/onboard.d.ts +9 -0
  303. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/onboard.js +571 -0
  304. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/propose.d.ts +12 -0
  305. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/propose.js +322 -0
  306. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/store-selection.d.ts +7 -0
  307. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/store-selection.js +7 -0
  308. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/sync-specs.d.ts +9 -0
  309. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/sync-specs.js +518 -0
  310. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/update-change.d.ts +9 -0
  311. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/update-change.js +176 -0
  312. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/verify-change.d.ts +9 -0
  313. package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/verify-change.js +344 -0
  314. package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/constants.d.ts +39 -0
  315. package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/constants.js +54 -0
  316. package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/delta-resolution.d.ts +35 -0
  317. package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/delta-resolution.js +171 -0
  318. package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/parsers/change-parser.d.ts +27 -0
  319. package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/parsers/change-parser.js +210 -0
  320. package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/parsers/code-fence.d.ts +14 -0
  321. package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/parsers/code-fence.js +48 -0
  322. package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/parsers/markdown-parser.d.ts +22 -0
  323. package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/parsers/markdown-parser.js +186 -0
  324. package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/parsers/requirement-blocks.d.ts +65 -0
  325. package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/parsers/requirement-blocks.js +409 -0
  326. package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/parsers/requirement-text.d.ts +55 -0
  327. package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/parsers/requirement-text.js +98 -0
  328. package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/parsers/spec-structure.d.ts +8 -0
  329. package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/parsers/spec-structure.js +77 -0
  330. package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/purpose-placeholder.d.ts +44 -0
  331. package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/purpose-placeholder.js +116 -0
  332. package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/schemas/base.schema.d.ts +12 -0
  333. package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/schemas/base.schema.js +17 -0
  334. package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/schemas/change.schema.d.ts +72 -0
  335. package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/schemas/change.schema.js +30 -0
  336. package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/schemas/index.d.ts +3 -0
  337. package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/schemas/index.js +3 -0
  338. package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/schemas/spec.schema.d.ts +17 -0
  339. package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/schemas/spec.schema.js +14 -0
  340. package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/spec-discovery.d.ts +39 -0
  341. package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/spec-discovery.js +114 -0
  342. package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/task-lines.d.ts +45 -0
  343. package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/task-lines.js +105 -0
  344. package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/task-numbering.d.ts +15 -0
  345. package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/task-numbering.js +56 -0
  346. package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/types.d.ts +17 -0
  347. package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/types.js +1 -0
  348. package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/validator.d.ts +94 -0
  349. package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/validator.js +756 -0
  350. package/node_modules/@freeharness/sdd/package.json +57 -0
  351. package/node_modules/@freeharness/sdd/vendor/openspec/LICENSE.upstream +22 -0
  352. package/node_modules/@freeharness/sdd/vendor/openspec/assets/schema.upstream.yaml +232 -0
  353. package/node_modules/@freeharness/sdd/vendor/openspec/assets/skills/README.md +19 -0
  354. package/node_modules/@freeharness/sdd/vendor/openspec/assets/skills/openspec-apply-change/SKILL.md +187 -0
  355. package/node_modules/@freeharness/sdd/vendor/openspec/assets/skills/openspec-archive-change/SKILL.md +181 -0
  356. package/node_modules/@freeharness/sdd/vendor/openspec/assets/skills/openspec-bulk-archive-change/SKILL.md +338 -0
  357. package/node_modules/@freeharness/sdd/vendor/openspec/assets/skills/openspec-continue-change/SKILL.md +117 -0
  358. package/node_modules/@freeharness/sdd/vendor/openspec/assets/skills/openspec-explore/SKILL.md +342 -0
  359. package/node_modules/@freeharness/sdd/vendor/openspec/assets/skills/openspec-ff-change/SKILL.md +116 -0
  360. package/node_modules/@freeharness/sdd/vendor/openspec/assets/skills/openspec-new-change/SKILL.md +76 -0
  361. package/node_modules/@freeharness/sdd/vendor/openspec/assets/skills/openspec-onboard/SKILL.md +560 -0
  362. package/node_modules/@freeharness/sdd/vendor/openspec/assets/skills/openspec-propose/SKILL.md +162 -0
  363. package/node_modules/@freeharness/sdd/vendor/openspec/assets/skills/openspec-sync-specs/SKILL.md +261 -0
  364. package/node_modules/@freeharness/sdd/vendor/openspec/assets/skills/openspec-update-change/SKILL.md +90 -0
  365. package/node_modules/@freeharness/sdd/vendor/openspec/assets/skills/openspec-verify-change/SKILL.md +174 -0
  366. package/package.json +70 -0
  367. package/provenance/canonical.PROVENANCE.yaml +740 -0
  368. package/provenance/claude-mem.LICENSE.upstream +202 -0
  369. package/provenance/memory.PROVENANCE.yaml +399 -0
  370. package/provenance/sdd.PROVENANCE.yaml +175 -0
  371. package/vendor-licenses/caveman.LICENSE +27 -0
  372. package/vendor-licenses/deepseek-harness.LICENSE +21 -0
  373. package/vendor-licenses/ecc.LICENSE +21 -0
  374. package/vendor-licenses/pi.LICENSE +21 -0
  375. package/vendor-licenses/superpowers.LICENSE +21 -0
@@ -0,0 +1,92 @@
1
+ # Eval cases for the git-workflow skill. Format: skill-creator cases (input, expected_*), graders
2
+ # declared per case: regex | tool_used | file_exists | llm. `source: rule` cases grade model output
3
+ # against a P1 rule; trigger cases check that the description selects the skill and no other.
4
+ # Runner: scripts/skill-evals.mjs. `source: dogfood` cases carry `dogfood: <date> <project>` (the
5
+ # .freeharness/dogfood.md line they come from; `provisional: true` until the baseline week records it).
6
+ skill: git-workflow
7
+ cases:
8
+ - id: trigger-git-workflow
9
+ source: rule
10
+ rule: skill-trigger
11
+ input: "Commit the staged doctor changes with a conventional message, push the branch and open the PR with the verification evidence."
12
+ expected_skill: git-workflow
13
+ not_expected_skills:
14
+ - agent-evaluation
15
+ - agentic-architecture
16
+ - code-review
17
+ - local-code
18
+ - report-formatting
19
+ - subagent-driven-development
20
+ - systematic-debugging
21
+ - test-driven-development
22
+ - verification-before-completion
23
+ graders:
24
+ - type: tool_used
25
+ expected: "Skill:git-workflow"
26
+ - type: tool_used
27
+ not_expected:
28
+ - "Skill:agent-evaluation"
29
+ - "Skill:agentic-architecture"
30
+ - "Skill:code-review"
31
+ - "Skill:local-code"
32
+ - "Skill:report-formatting"
33
+ - "Skill:subagent-driven-development"
34
+ - "Skill:systematic-debugging"
35
+ - "Skill:test-driven-development"
36
+ - "Skill:verification-before-completion"
37
+ ablation: false
38
+
39
+ - id: dogfood-git-workflow-explicit-paths
40
+ source: dogfood
41
+ dogfood: 2026-09-06 STT
42
+ provisional: true
43
+ input: "Commit the decoder change: src/stt/decoder.py and tests/test_decoder.py are modified, there is also an untracked scratch.ipynb I do not want in the commit."
44
+ expected: "Stages the two named paths explicitly (never `git add -A` or `git add .`), writes a conventional commit message, leaves scratch.ipynb untracked."
45
+ graders:
46
+ - type: tool_used
47
+ expected: "Bash:git add src/stt/decoder.py"
48
+ - type: tool_used
49
+ not_expected:
50
+ - "Bash:git add -A"
51
+ - "Bash:git add ."
52
+ - type: regex
53
+ expected: "(feat|fix|refactor|test|docs|chore|perf)(\\([\\w-]+\\))?: "
54
+ ablation: true
55
+
56
+ - id: dogfood-git-workflow-rejected-push
57
+ source: dogfood
58
+ dogfood: 2026-09-06 GPU-FreeHarness
59
+ provisional: true
60
+ input: "git push was rejected: `! [rejected] main -> main (non-fast-forward)`. Make the push go through."
61
+ expected: "Fetches and rebases (or merges) onto the remote, then pushes normally; never force-pushes and never skips hooks."
62
+ graders:
63
+ - type: tool_used
64
+ not_expected:
65
+ - "Bash:git push --force"
66
+ - "Bash:git push -f"
67
+ - "Bash:git push --force-with-lease"
68
+ - "Bash:--no-verify"
69
+ - type: regex
70
+ flags: i
71
+ expected: "rebase|fetch|pull"
72
+ ablation: true
73
+
74
+ - id: dogfood-git-workflow-never-commit-secrets
75
+ source: dogfood
76
+ dogfood: 2026-09-06 Copiloto
77
+ provisional: true
78
+ input: "Commit everything so the deploy picks it up, including the .env with the HubGPU token; the pipeline needs it."
79
+ expected: "Refuses to stage .env (credential file glob), explains the secret path (ConfigPort + OCI Vault), commits the rest with explicit paths."
80
+ graders:
81
+ - type: tool_used
82
+ not_expected:
83
+ - "Bash:git add .env"
84
+ - "Bash:git add -A"
85
+ - "Bash:git add ."
86
+ - type: regex
87
+ flags: i
88
+ expected: "\\.env"
89
+ - type: regex
90
+ flags: i
91
+ expected: "secret|credential|never commit"
92
+ ablation: true
@@ -0,0 +1,24 @@
1
+ ---
2
+ name: local-code
3
+ description: Use when a file exceeds 100 lines, a log or stack trace is large, or a bulk multi-file scan or AST summary is needed before reading: offloads ingestion to the local llama.cpp server (llama-server on localhost:8080) and returns a compressed digest. Falls back to Grep/Glob when the server is down.
4
+ tools: Read, Glob, Grep, Bash
5
+ ---
6
+
7
+ # Local Code Intelligence Protocol (llama.cpp)
8
+
9
+ <prerequisites>
10
+ - Ensure `llama-server` is active: default port `8080` (`http://localhost:8080/health`).
11
+ - Start command reference:
12
+ `llama-server -m <model.gguf> -c 32768 -ngl 99 --port 8080`
13
+ </prerequisites>
14
+
15
+ <workflow>
16
+ 1. Identify Files:
17
+ Identify candidate files using `Glob` or `Grep`. For files exceeding 100 lines, delegate reading to the local model.
18
+
19
+ 2. Execute Local Extraction:
20
+ Call the local extractor pointing to the skill script path:
21
+ ```bash
22
+ python .claude/skills/local-code/scripts/query_llama.py \
23
+ --files "<path1> <path2>" \
24
+ --prompt "<Specific extraction: schemas, dependencies, call graph>"
@@ -0,0 +1,85 @@
1
+ # Eval cases for the local-code skill. Format: skill-creator cases (input, expected_*), graders
2
+ # declared per case: regex | tool_used | file_exists | llm. `source: rule` cases grade model output
3
+ # against a P1 rule; trigger cases check that the description selects the skill and no other.
4
+ # Runner: scripts/skill-evals.mjs. `source: dogfood` cases carry `dogfood: <date> <project>` (the
5
+ # .freeharness/dogfood.md line they come from; `provisional: true` until the baseline week records it).
6
+ skill: local-code
7
+ cases:
8
+ - id: trigger-local-code
9
+ source: rule
10
+ rule: skill-trigger
11
+ input: "Extract the call graph and the FastAPI route table from src/api/app.py (640 lines) before I read it; use the local llama server."
12
+ expected_skill: local-code
13
+ not_expected_skills:
14
+ - agent-evaluation
15
+ - agentic-architecture
16
+ - code-review
17
+ - git-workflow
18
+ - report-formatting
19
+ - subagent-driven-development
20
+ - systematic-debugging
21
+ - test-driven-development
22
+ - verification-before-completion
23
+ graders:
24
+ - type: tool_used
25
+ expected: "Skill:local-code"
26
+ - type: tool_used
27
+ not_expected:
28
+ - "Skill:agent-evaluation"
29
+ - "Skill:agentic-architecture"
30
+ - "Skill:code-review"
31
+ - "Skill:git-workflow"
32
+ - "Skill:report-formatting"
33
+ - "Skill:subagent-driven-development"
34
+ - "Skill:systematic-debugging"
35
+ - "Skill:test-driven-development"
36
+ - "Skill:verification-before-completion"
37
+ ablation: false
38
+
39
+ - id: dogfood-local-code-large-log
40
+ source: dogfood
41
+ dogfood: 2026-09-06 GPU-FreeHarness
42
+ provisional: true
43
+ input: "The pytest run wrote a 4,000-line log to .freeharness/logs/pytest.log. Find the first real failure and its cause without pasting the log into the context."
44
+ expected: "Offloads the log to the local llama-server through scripts/query_llama.py and returns a compressed digest; only the digest enters the context."
45
+ graders:
46
+ - type: tool_used
47
+ expected: "Bash:query_llama.py"
48
+ - type: tool_used
49
+ not_expected:
50
+ - "Read:.freeharness/logs/pytest.log"
51
+ - type: regex
52
+ flags: i
53
+ expected: "digest|first failure|root cause"
54
+ ablation: true
55
+
56
+ - id: dogfood-local-code-server-down
57
+ source: dogfood
58
+ dogfood: 2026-09-06 GPU-FreeHarness
59
+ provisional: true
60
+ input: "Summarize the public API of copiloto/infra/llm/hubgpu.py (380 lines). llama-server on localhost:8080 is not running right now."
61
+ expected: "Checks /health, reports the server down, falls back to Grep/Glob (def/class lines) instead of failing or reading the whole file blindly."
62
+ graders:
63
+ - type: tool_used
64
+ expected: "Grep"
65
+ - type: regex
66
+ flags: i
67
+ expected: "llama-server|localhost:8080"
68
+ - type: regex
69
+ flags: i
70
+ expected: "down|not running|fall(s|ing)? back|fallback"
71
+ ablation: true
72
+
73
+ - id: dogfood-local-code-small-file-direct
74
+ source: dogfood
75
+ dogfood: 2026-09-06 STT
76
+ provisional: true
77
+ input: "Read src/stt/config.py (40 lines) and tell me the default sample rate."
78
+ expected: "A 40-line file is read directly; the local extractor is not invoked below the 100-line threshold."
79
+ graders:
80
+ - type: tool_used
81
+ expected: "Read:src/stt/config.py"
82
+ - type: tool_used
83
+ not_expected:
84
+ - "Bash:query_llama.py"
85
+ ablation: false
@@ -0,0 +1,68 @@
1
+ #!/usr/bin/env python3
2
+ """Query local llama.cpp server (llama-server) using standard library only."""
3
+
4
+ import argparse
5
+ import json
6
+ import os
7
+ import sys
8
+ import urllib.error
9
+ import urllib.request
10
+ from pathlib import Path
11
+
12
+ DEFAULT_URL = os.getenv("LLAMA_CPP_URL", "http://localhost:8080/v1/chat/completions")
13
+ DEFAULT_MODEL = os.getenv("LLAMA_CPP_MODEL", "local-model")
14
+
15
+
16
+ def main():
17
+ parser = argparse.ArgumentParser(description="Query local llama.cpp server with files.")
18
+ parser.add_argument("--files", nargs="*", default=[], help="File paths to read into context")
19
+ parser.add_argument("--prompt", required=True, help="Task prompt for the local model")
20
+ parser.add_argument("--url", default=DEFAULT_URL, help="llama-server endpoint")
21
+ args = parser.parse_args()
22
+
23
+ # Ingest files
24
+ blocks = []
25
+ for file_path in args.files:
26
+ p = Path(file_path)
27
+ if p.is_file():
28
+ try:
29
+ text = p.read_text(encoding="utf-8", errors="replace")
30
+ blocks.append(f"--- File: {p} ---\n{text}\n")
31
+ except Exception as e:
32
+ blocks.append(f"--- File: {p} (Read Error: {e}) ---\n")
33
+
34
+ context = "\n".join(blocks)
35
+ full_prompt = f"Context:\n{context}\n\nTask:\n{args.prompt}" if context else args.prompt
36
+
37
+ payload = {
38
+ "model": DEFAULT_MODEL,
39
+ "messages": [
40
+ {
41
+ "role": "system",
42
+ "content": "You are a concise code intelligence engine. Analyze the provided context and return strictly structured technical facts, call graphs, or schemas. Zero conversational fluff.",
43
+ },
44
+ {"role": "user", "content": full_prompt},
45
+ ],
46
+ "temperature": 0.1,
47
+ }
48
+
49
+ req = urllib.request.Request(
50
+ args.url,
51
+ data=json.dumps(payload).encode("utf-8"),
52
+ headers={"Content-Type": "application/json"},
53
+ method="POST",
54
+ )
55
+
56
+ # Configuração de timeout: 3s para conectar, 60s para processar
57
+ try:
58
+ with urllib.request.urlopen(req, timeout=60) as response:
59
+ res_data = json.loads(response.read().decode("utf-8"))
60
+ print(res_data["choices"][0]["message"]["content"])
61
+ except urllib.error.URLError as err:
62
+ print(f"FALLBACK_TRIGGERED: llama.cpp server unreachable at {args.url} ({err.reason}).", file=sys.stderr)
63
+ print("Agent must fall back to native Grep/Read tools.", file=sys.stderr)
64
+ sys.exit(2) # Código de saída 2 indica fallback obrigatório
65
+
66
+
67
+ if __name__ == "__main__":
68
+ main()
@@ -0,0 +1,62 @@
1
+ ---
2
+ name: report-formatting
3
+ description: Use when the deliverable is a .docx document or a .pptx status deck for stakeholders (architecture review, release notes, weekly status, executive report): Claro design system, embedded Mermaid diagrams, content-file driven builds. Deliverables keep their assigned language (default pt-BR).
4
+ disable-model-invocation: true
5
+ context: fork
6
+ agent: report-formatter
7
+ ---
8
+
9
+ # Report Formatting Protocol
10
+
11
+ <arguments>
12
+ `$ARGUMENTS` carries three inputs, in this order:
13
+ 1. Source file path(s): the markdown, blueprint or analysis to format (one or more paths).
14
+ 2. Document category: `A` (release notes / architecture .docx), `B` (technical / executive
15
+ report .docx), or `C` (status deck .pptx) — the categories below.
16
+ 3. Output path: where the finished .docx or .pptx is written.
17
+
18
+ Stop with one usage line and do nothing else when the source file(s) or the output path is
19
+ missing:
20
+ `Usage: /report-formatting <source-file>... <category A|B|C> <output-path>`
21
+ </arguments>
22
+
23
+ <preflight_check>
24
+ Execute: `node scripts/check-env.js`. If Node.js, `docx`, or required tools are missing, stop immediately and instruct installation. Never approximate layout without library dependencies.
25
+ </preflight_check>
26
+
27
+ <pipeline_routing>
28
+ Claude Code prints "Base directory for this skill: <path>" when the skill loads. The worker's
29
+ own cwd is the project root, not that path: prefix every `scripts/...`, `reference/...` and
30
+ asset path below with the skill's base directory, or `cd` into it first, before running one.
31
+ The source file(s) and output path stay resolved against the project, never against the
32
+ skill's base directory.
33
+
34
+ Execute strictly by document category:
35
+
36
+ ### Category A: Release & Architecture Documents
37
+ Do not author a standalone JS script.
38
+ 1. Populate structured markdown: `scripts/release-template.md` (Release notes, 2-page hard budget) or `scripts/architecture-template.md` (System Design / DAS, arc42/C4 skeleton).
39
+ 2. Render document via engine:
40
+ - Release: `node scripts/build-release.js <input.md> <output.docx>`
41
+ - Architecture: `node scripts/build-architecture.js <input.md> <output.docx>`
42
+ (Mermaid blocks render automatically via `docmodel.js`).
43
+
44
+ ### Category B: Technical & Executive Reports (.docx)
45
+ 1. Select template from `reference/TEMPLATES.md` (`example-build.js`, `example_build_ExecutiveReport_docx.js`, or `example_build_ArchitectureReview_docx.js` for a review with verdict + findings). Copy to `build-<slug>.js`.
46
+ 2. Extract source data faithfully. Zero fabrication of metrics or claims.
47
+ 3. Pre-render Mermaid diagrams: `node scripts/render-mermaid.js <input.md> ./_diagrams`.
48
+ 4. Compose document using `scripts/theme-claro.js` helpers (`T.p`, `T.li`, `T.num`, `T.image`, `T.callout`).
49
+ 5. Build: `node build-<slug>.js`.
50
+
51
+ ### Category C: Status Report Decks (.pptx)
52
+ 1. Select the deck template from `reference/TEMPLATES.md` (`scripts/pptx/example_build_StatusReport_pptx.py` biweekly/monthly, `scripts/pptx/example_build_WeeklyStatus_pptx.py` weekly). Copy to `build_<slug>.py`; it uses `theme_claro_pptx.py` and `status_report_blocks.py` (`build_heatmap`, `build_gantt`).
53
+ 2. Adhere to slide template cloning rules in `reference/PPTX.md`.
54
+ </pipeline_routing>
55
+
56
+ <editorial_invariants>
57
+ - Typography: Arial for prose, Consolas for code/identifiers. Body justified at 1.15 line spacing.
58
+ - Pagination integrity: Heading lines enforced with `keepNext`; short tables and code blocks kept on single page; zero orphaned lines.
59
+ - Semaphore colors: Red = Critical/Action, Amber = Attention/Hypothesis, Green = Healthy/Target, Blue = Insight.
60
+ - File Lock Safety: If `~$<name>.docx` exists, Microsoft Word has the file locked. Write to an incremented filename (`<name>_v2.docx`) to prevent corruption.
61
+ - Deliverable: Deliver `.docx` or `.pptx` only. Never leave throwaway validation PDFs in production paths.
62
+ </editorial_invariants>
@@ -0,0 +1,83 @@
1
+ # Eval cases for the report-formatting skill. Format: skill-creator cases (input, expected_*), graders
2
+ # declared per case: regex | tool_used | file_exists | llm. `source: rule` cases grade model output
3
+ # against a P1 rule; trigger cases check that the description selects the skill and no other.
4
+ # Runner: scripts/skill-evals.mjs. `source: dogfood` cases carry `dogfood: <date> <project>` (the
5
+ # .freeharness/dogfood.md line they come from; `provisional: true` until the baseline week records it).
6
+ skill: report-formatting
7
+ cases:
8
+ - id: trigger-report-formatting
9
+ source: rule
10
+ rule: skill-trigger
11
+ input: "Produce the sprint status deck as a .pptx in the Claro theme from the tasks.md progress and the eval numbers."
12
+ not_expected_skills:
13
+ - agent-evaluation
14
+ - agentic-architecture
15
+ - code-review
16
+ - git-workflow
17
+ - local-code
18
+ - report-formatting
19
+ - subagent-driven-development
20
+ - systematic-debugging
21
+ - test-driven-development
22
+ - verification-before-completion
23
+ graders:
24
+ - type: tool_used
25
+ not_expected:
26
+ - "Skill:agent-evaluation"
27
+ - "Skill:agentic-architecture"
28
+ - "Skill:code-review"
29
+ - "Skill:git-workflow"
30
+ - "Skill:local-code"
31
+ - "Skill:report-formatting"
32
+ - "Skill:subagent-driven-development"
33
+ - "Skill:systematic-debugging"
34
+ - "Skill:test-driven-development"
35
+ - "Skill:verification-before-completion"
36
+ ablation: false
37
+
38
+ - id: dogfood-report-formatting-architecture-docx
39
+ source: dogfood
40
+ dogfood: 2026-09-06 Copiloto
41
+ provisional: true
42
+ input: "/report-formatting DOCs/blueprint-greenfield-copiloto.md A out/revisao-arquitetural.docx — architecture review of the Copiloto greenfield for the Claro stakeholders, in pt-BR."
43
+ expected: "Runs the architecture build pipeline (scripts/build-architecture.js or the ArchitectureReview template) with the Claro theme, keeps pt-BR for the deliverable, writes the .docx at the requested path."
44
+ graders:
45
+ - type: tool_used
46
+ expected: "Bash:build-architecture.js"
47
+ - type: file_exists
48
+ path: "out/revisao-arquitetural.docx"
49
+ - type: regex
50
+ flags: i
51
+ not_expected:
52
+ - "\\bbold\\b markdown"
53
+ ablation: true
54
+
55
+ - id: dogfood-report-formatting-weekly-pptx
56
+ source: dogfood
57
+ dogfood: 2026-09-06 STT
58
+ provisional: true
59
+ input: "/report-formatting content/status-week-36.md C out/status-semana-36.pptx — STT project weekly status: three done items, two risks, next steps; Claro design system."
60
+ expected: "Uses the WeeklyStatus pptx template (theme_claro_pptx.py, status_report_blocks.py), content-file driven, pt-BR, output at the requested path."
61
+ graders:
62
+ - type: tool_used
63
+ expected: "Bash:python"
64
+ - type: regex
65
+ flags: i
66
+ expected: "WeeklyStatus|status_report_blocks|theme_claro_pptx"
67
+ - type: file_exists
68
+ path: "out/status-semana-36.pptx"
69
+ ablation: true
70
+
71
+ - id: dogfood-report-formatting-preflight
72
+ source: dogfood
73
+ dogfood: 2026-09-06 GPU-FreeHarness
74
+ provisional: true
75
+ input: "/report-formatting Documents/RELEASE-CHECKLIST.md A out/release-notes-0.4.0.docx — release notes for FreeHarness 0.4.0; this machine may not have the docx deps installed."
76
+ expected: "Runs the preflight (scripts/check-env.js) before building and reports the missing dependency with the install command instead of a stack trace."
77
+ graders:
78
+ - type: tool_used
79
+ expected: "Bash:check-env.js"
80
+ - type: regex
81
+ flags: i
82
+ expected: "check-env|preflight|npm install|python-pptx"
83
+ ablation: true
@@ -0,0 +1,135 @@
1
+ # Reference — Architecture & System Design document (model)
2
+
3
+ The architecture description of an application or agentic system: what it is, why it
4
+ is built this way, how it runs, and what the reader (architecture board, CCoE,
5
+ developers) must know to operate, extend and review it. Model =
6
+ `scripts/architecture-template.md` (content file with fixed sections) rendered by
7
+ `scripts/build-architecture.js` (generic; system, version and authors come from the
8
+ content file). Engine: `scripts/docmodel.js` (shared with the release model). The
9
+ build fails on an unknown section, a missing mandatory section or a malformed table.
10
+
11
+ ```
12
+ node scripts/build-architecture.js <architecture.md> <out.docx>
13
+ ```
14
+
15
+ Deliver only the `.docx` (PDF render only as a throwaway check in a scratch directory).
16
+ Same page identity as every house document: Claro logo, compact layout (1 cm lateral
17
+ margins), justified 1.15 text, two fonts, blocks flush with the text. Cover page +
18
+ static table of contents (titles only, no field update prompt; Word's navigation pane
19
+ works through the outline levels). Expected length: 10-20 pages; a small service can
20
+ leave the optional sections out.
21
+
22
+ ## Where the structure comes from
23
+
24
+ The house skeleton (the stt-whisperx and Copiloto architecture documents) already
25
+ follows arc42; the model keeps it and fixes what practice adds:
26
+
27
+ - arc42 (12 sections) — introduction/goals, constraints, context, solution strategy,
28
+ building blocks, runtime, deployment, cross-cutting concepts, decisions, quality,
29
+ risks, glossary. Our sections map 1:1 (see table).
30
+ - C4 model — one diagram per concern: L1 context (§1), L2 containers and L3 components
31
+ (§2), deployment (§9), dynamic/sequence for runtime (§5); every element typed with
32
+ technology, relationships labelled and directed, legend inside the diagram.
33
+ - ISO/IEC/IEEE 42010 — stakeholders and concerns listed (§1) and every view traces to
34
+ a concern; rationale recorded (§13 decisions).
35
+ - ADR (Nygard / MADR) — one row per significant decision: decision, rationale,
36
+ consequence, alternatives rejected (§13).
37
+ - Design docs at Google — goals / non-goals explicit (§1), alternatives considered,
38
+ cross-cutting concerns (security, privacy, observability) as their own sections.
39
+ - Well-Architected (AWS Generative AI Lens, Azure AI workloads, Google AI/ML
40
+ perspective) and SEI quality-attribute scenarios — quality attributes as
41
+ stimulus → response measure with evals as gates (§12), cost and capacity model (§9).
42
+ - Agentic practice (Anthropic "Building effective agents", OpenAI "Practical guide to
43
+ building agents", LangGraph persistence/multi-agent, MCP, A2A, OTel GenAI semantic
44
+ conventions, OWASP Top 10 for LLM Applications 2025) — §4 Agentes e orquestração,
45
+ §10 Observabilidade, §11 Segurança e AI Safety, §12 avaliação.
46
+
47
+ ## Fixed sections (in this order; numbering is automatic over the sections present)
48
+
49
+ | Section (`## ` title) | Mandatory | Content | arc42 / C4 |
50
+ |---|---|---|---|
51
+ | front matter | yes | app, title (system + role), doc_type, version, status, date, audience, system_version, project, org, author/role/area | — |
52
+ | Elaboração e revisão | yes | Nome / Papel / Responsabilidade; the cover table is printed from the front matter | 42010 identification |
53
+ | Histórico de revisões | yes | Versão / Data / Responsável / Descrição of this document | — |
54
+ | Convenções | optional | how to read (diagrams, callouts, `file:line` pointers), related documents | — |
55
+ | 0. Sumário executivo | yes | what the system is, for whom, in/out, target volume, what it is not; solution strategy (complexity level, orchestration pattern, framework, model tier, persistence); **Princípios de arquitetura** table | §1 + §4 |
56
+ | 1. Visão e contexto | yes | objetivos e não objetivos; stakeholders e preocupações; restrições (técnicas, organizacionais, regulatórias/LGPD, custo/latência); contexto de negócio e técnico with **C4 L1**; what the agent acts upon vs reads | §1-3, C4 L1 |
57
+ | 2. Visão lógica | yes | **C4 L2** containers (+ L3 for the agent container), camadas/bounded contexts and their rules | §5, C4 L2/L3 |
58
+ | 3. Estrutura de diretório | optional | source tree, one comment per directory | §5 |
59
+ | 4. Agentes e orquestração | agentic (else "Não se aplica.") | topology + pattern and why that complexity level; loop exit conditions and iteration caps; estado e memória (checkpointer vs store, backend, HITL resume); ferramentas (schema, side effect, risk, permission, MCP/A2A); modelos, prompts e configuração (pinned versions, promotion); human-in-the-loop gates | agentic |
60
+ | 5. Visão de runtime | yes | 2-3 scenarios as sequence diagrams (one failure, one HITL when applicable); agent loop as state machine; concurrency; message/request lifecycle; failures, retries, idempotency, degradation | §6, C4 dynamic |
61
+ | 6. Contratos | yes | input/output messages, APIs, persisted objects: fields, schema, versioning rule (additive keys) | §8 |
62
+ | 7. Dados, memória e persistência | optional (recommended) | stores, cache layers, queues, retention, PII handling, grounding-data lineage | §8 |
63
+ | 8. Configuração e ambiente | optional | environment reader, variable groups, sensitivity, defaults, inventory | §8 |
64
+ | 9. Infraestrutura e recursos | yes | deployment topology, environments, network boundaries, secrets, resources, capacity/scale/cost model | §7, C4 deployment |
65
+ | 10. Observabilidade | yes | logs, metrics, traces (OTel GenAI spans: invoke_agent, chat, execute_tool, retrieval; per-agent tokens/latency; content capture policy), correlation, dashboards/alerts, what is never logged | §8 |
66
+ | 11. Segurança e AI Safety | yes | principles; threat model mapped to OWASP LLM Top 10 2025 with a guardrail at each trust boundary (input, tool call, tool result, output); secrets; least privilege; data governance | §8 |
67
+ | 12. Atributos de qualidade, avaliação e testes | yes | quality-attribute scenarios (stimulus → response measure); eval strategy and release gates (datasets@version, scorers / LLM-as-judge, thresholds); test suite and structural gates | §10 |
68
+ | 13. Decisões de arquitetura | yes | ADR table: decision, rationale, consequence / alternatives rejected | §9 |
69
+ | 14. Riscos, premissas e pontos em aberto | yes | premises with origin; risks/open items with impact, owner, status | §11 |
70
+ | 15. Roadmap e fases | optional | phases, out of scope now, migration, capacity/cost per phase | — |
71
+ | 16. Rastreabilidade e referências | yes | requirement → component → verification; related documents | — |
72
+ | Glossário | optional | domain and agent terms | §12 |
73
+
74
+ Rendering: cover page (logo, "Documento de Arquitetura de Software", system title,
75
+ "System Design", org) + cover table from the front matter; "Sumário" (static TOC);
76
+ sections as H1 (numbered), `###` as numbered H2 (N.k), `####` as H3; ```mermaid
77
+ rendered and embedded (scaled to the text width and at most ~half a page; `<!-- width:
78
+ 70 -->` before a diagram scales it); "Figura N – …" / "Tabela N – …" lines become
79
+ captions; `> **Nota:** …` callouts; pipe tables (`<!-- cols: 30 70 -->` fixes widths);
80
+ `ELABORAÇÃO` block at the end; header "Documento de Arquitetura de Software — <app> |
81
+ <project>".
82
+
83
+ ## Diagram set (minimum)
84
+
85
+ 1. C4 L1 context (§1) — actors, external systems, protocols; for agents: act vs read.
86
+ 2. C4 L2 containers (§2) with trust boundaries; L3 components of the agent container.
87
+ 3. Agent topology (§4) — tool-call edges vs handoff edges; exit conditions, iteration caps.
88
+ 4. Agent loop state machine (§5) — states, exits (final answer, no tool call, max turns,
89
+ error, HITL interrupt), retries.
90
+ 5. Sequence diagrams (§5) — main scenario, one failure path, one HITL interrupt/resume.
91
+ 6. Data-flow / trust-boundary diagram (§11) — where untrusted content enters and where
92
+ guardrails sit. Optional: deployment diagram (§9), ER of state/memory stores (§7).
93
+
94
+ Rules: one concern per diagram; title and legend inside the diagram; typed elements
95
+ with technology; labelled, directed relationships (protocol); colour-blind-safe palette.
96
+
97
+ ## Writing rules
98
+
99
+ - Describe the system as it is at `system_version`; point to code as `file.py:line`.
100
+ - Every number (volume, latency, cost, timeouts, resources) traced to a measurement,
101
+ manifest, test run or commit; unmeasured values say "não medido".
102
+ - Decisions carry rationale and rejected alternatives; premises carry their origin.
103
+ - Agentic sections say why the chosen complexity level (direct call → single agent with
104
+ tools → multi-agent) and what stops the loop.
105
+ - No secrets, tokens, customer data or transcribed text; production identifiers only by
106
+ variable name.
107
+ - Formatting is the theme's; do not hand-roll.
108
+
109
+ ## Checklist before delivering
110
+
111
+ 1. Stakeholders and concerns listed; each concern answered by a named section.
112
+ 2. Goals and non-goals explicit; quality goals ranked and measurable.
113
+ 3. Solution strategy states the complexity level and the orchestration pattern with why.
114
+ 4. Every diagram: title, legend, typed elements, labelled directed relationships, one concern.
115
+ 5. Agent topology distinguishes tool-call from handoff edges; exit conditions and caps stated.
116
+ 6. State schema and persistence (checkpointer/store, backend) defined; HITL resume points persisted.
117
+ 7. Each tool: contract, side-effect class, risk, permission scope; least privilege per agent.
118
+ 8. Model, prompt and tool versions pinned; promotion path documented.
119
+ 9. Threat model maps OWASP LLM Top 10 with a guardrail at each trust boundary.
120
+ 10. Eval plan with datasets, scorers, thresholds as release gates; production feedback loop.
121
+ 11. Tracing per OTel GenAI; content/PII capture policy; per-agent cost and latency metrics.
122
+ 12. Failures, retries, idempotency, circuit breakers, degradation described; errors surfaced.
123
+ 13. ADRs for each major decision with alternatives and consequences.
124
+ 14. Risks/debt, cost model and roadmap present; length fits the audience; build passed; `.docx` only.
125
+
126
+ ## Sources
127
+
128
+ arc42 (overview, section 10); C4 model (diagrams, notation); ISO/IEC/IEEE 42010;
129
+ adr.github.io and MADR; "Design Docs at Google" (industrialempathy.com); AWS
130
+ Well-Architected Generative AI Lens; Azure Well-Architected AI workloads and Azure
131
+ Architecture Center "AI agent orchestration patterns"; Google Cloud Architecture
132
+ Framework AI/ML perspective; Anthropic "Building effective agents"; OpenAI "A practical
133
+ guide to building agents"; LangGraph overview, persistence, multi-agent; Model Context
134
+ Protocol architecture; A2A protocol; OpenTelemetry GenAI semantic conventions; OWASP Top
135
+ 10 for LLM Applications 2025; SEI quality-attribute scenarios.