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,120 @@
1
+ # Reference — theme-claro.js API
2
+
3
+ Import: `const T = require("./theme-claro");`
4
+
5
+ ## House typography (applied by default)
6
+
7
+ - Two fonts only: Arial (prose) and Consolas (commands, identifiers, logs). Never a third.
8
+ - Body text justified with automatic hyphenation (pt-BR), line spacing 1.15 (`line: 276`)
9
+ everywhere, widow/orphan control. `T.configure({ justify: false, hyphenate: false })`
10
+ opts out for one build.
11
+ - Headings keep with the next paragraph (`keepNext` + `keepLines`); table rows never
12
+ split across pages (`cantSplit`); header rows repeat on each page; tables with up to
13
+ 12 rows, meta tables, code blocks, callouts and the authorship block stay on one page.
14
+ - Lead-in sentences before a code block or table take `{ keepNext: true }` so the
15
+ sentence and the block never separate.
16
+ - Page geometry by layout — select it with `T.configure({ layout })` **before building
17
+ any block**, because the usable width derives from it: `report` (2 cm all round,
18
+ header/footer at 1.25 cm) and `compact` (release documents: 1 cm left/right, top
19
+ 1.35 cm, bottom 1.03 cm, header 0.31 cm, footer 0.29 cm from the page edge).
20
+ `T.configure({ page: { left, right, top, bottom, header, footer } })` overrides in DXA
21
+ ("personalizado"). `T.contentWidth()` is the usable width; tables, code blocks,
22
+ callouts, stat cards and images span exactly that width and are centered, so their
23
+ edges meet the justified text. Column widths given to `makeTable` are scaled to it
24
+ (`T.fitCols`), so 9640-based tables from older scripts stay aligned.
25
+
26
+ ## Design tokens — T.C (Claro palette)
27
+
28
+ | Token | Hex | Use |
29
+ | --- | --- | --- |
30
+ | title / h1 | B8000D | cover title, H1 |
31
+ | subtitle / h2 | 333333 | subtitle, H2, highlighted names |
32
+ | h3 | 666666 | H3 |
33
+ | accent / rule / red | E2000F | emphasis labels, cover rule, critical |
34
+ | deepRed | B8000D | blocker |
35
+ | muted | 666666 | secondary text, captions |
36
+ | body | 333333 | body text |
37
+ | green | 2E7D32 | healthy / recommendation |
38
+ | amber | B36B00 | attention / hypothesis |
39
+ | tblHeadFill / tblHeadText | B8000D / FFFFFF | table header |
40
+ | tblBorder / zebra | E5D3D3 / F7F1F1 | table borders, alternating rows |
41
+ | noteFill / dangerFill / successFill / infoFill | FFF2CC / FFE0E0 / E2EFDA / FBEDED | callout fills |
42
+ | codeFill / codeText / codeBar | F5F5F5 / 1F1F1F / 555555 | code block |
43
+
44
+ `T.contentWidth()` = usable width in DXA for the configured layout (`T.CONTENT_W` = 9640 is the legacy report constant; column widths are scaled to the real width).
45
+ `T.SZ` = `{ body: 22, mono: 18, cell: 20, cellMono: 17 }` (half-points).
46
+ `T.LAYOUTS` = the two page geometries; `T.DEFAULTS` = `{ layout, page, justify, hyphenate, line, lang }`; `T.geometry()` = the effective one.
47
+
48
+ ## Runs
49
+
50
+ - `T.t(text, opts)` — Arial TextRun. Common opts: `{ size: 22, bold: true, italics: true, color: T.C.red }`.
51
+ - `T.mono(text, sz=18)` — Consolas TextRun for code identifiers.
52
+ - `T.cap(label, color)` — bold "Label " run to start callouts/paragraphs.
53
+ - `T.rich(text, { size, monoSize, color })` — markdown-lite inline: `` `code` `` -> mono,
54
+ `**bold**` (may wrap code), `*italic*`. Returns runs. `T.rc(text)` = rich at cell sizes.
55
+
56
+ ## Text blocks
57
+
58
+ - `T.h1("1. Title", o)`, `T.h2(...)`, `T.h3(...)` — `o` e.g. `{ pageBreakBefore: true }`.
59
+ - `T.body(runs, o)` — body paragraph from text or runs; `o` = Paragraph options plus
60
+ `before` (DXA), e.g. `{ keepNext: true }`, `{ before: 100 }` after a code block.
61
+ - `T.p(text, o)` — `body(rich(text), o)`. Preferred for prose with inline code/bold.
62
+ - `T.bullet(runs, lvl=0, o)` / `T.li(text, lvl=0, o)` — bullets (rich for `li`).
63
+ - `T.numItem(runs, instance|{instance,lvl}, o)` / `T.num(text, instance, o)` — numbered
64
+ items; each distinct `instance` restarts at 1 (one instance per section).
65
+ `T.numbered(["a","b"], instance)` -> array of items.
66
+ - `T.caption("Tabela 1 – ...", { center: true })` — italic grey caption.
67
+ - `T.spacer(after=120)`, `T.pageBreak()`.
68
+
69
+ ## Tables
70
+
71
+ - `T.makeTable(cols, head, rows, { keepTogether, rich })`
72
+ - cols: DXA widths (e.g. `[3200, 1600, 4840]`, summing ~9640).
73
+ - head: `["Col1", "Col2", ...]` (red header row, repeats on each page).
74
+ - rows: array of rows; each cell is a string or
75
+ `{ runs: "txt" | [T.t(...)], align: AlignmentType.RIGHT, fill: T.C.noteFill }`.
76
+ - `rich: true` parses string cells with `T.rc` (`code`, **bold**).
77
+ - `keepTogether` holds the whole table on one page (default: rows <= 12). Rows never split.
78
+ - `T.metaTable(rows, col1=2500)` — memo layout; `rows = [["Aplicação","..."],["Data","..."]]`;
79
+ string values go through `T.rc`. Always held on one page.
80
+
81
+ ## Highlights
82
+
83
+ - `T.callout(paras | "rich text", kind)` — kind: `"info"|"note"|"danger"|"success"`. Never splits.
84
+ - `T.calloutLine(label, text, kind)` — one-line shortcut; text accepts rich syntax.
85
+ - `T.codeBlock(["line1","line2"])` — Consolas block with a grey bar (commands, logs,
86
+ trees); held on one page. Put `{ keepNext: true }` on the sentence that introduces it.
87
+ - `T.statCards([{ value:"99.9%", label:"...", color:T.C.red, fill:"FFEDED" }])` — metrics strip.
88
+
89
+ ## Media and structure
90
+
91
+ - `T.image(pngPath, maxWidthEmu, { keepNext, maxHeightEmu })` — centered, auto-sized to the
92
+ text width and at most ~half a page tall by default; glued to its caption.
93
+ - `T.coverBlock({ title, subtitle, tagline, org, metaLines, rule })` -> paragraphs
94
+ (spread: `children.push(...T.coverBlock({...}))`). `rule: false` for the compact
95
+ release front page (title + metaTable, no cover rule).
96
+ - `T.authorBlock({ heading, name, role, area, project })` -> array; heading defaults to
97
+ "ELABORAÇÃO E ANÁLISE" ("ELABORAÇÃO" for release docs).
98
+ - `T.buildDocument({ children, headerText, footerAuthor, footerNote, layout, page })` ->
99
+ Document for `Packer.toBuffer`. `footerNote` defaults to "Confidencial – Uso Interno".
100
+ Prefer `T.configure({ layout })` at the top of the script; passing `layout`/`page` here
101
+ applies them to the page only and warns (blocks were already sized).
102
+
103
+ ## Semaphore cell example
104
+
105
+ ```js
106
+ [{ runs: "Row A" },
107
+ { runs: [T.t("12,775", { size: 20, bold: true, color: T.C.red })], align: AlignmentType.RIGHT },
108
+ { runs: [T.t("ok", { size: 20, color: T.C.green })] }]
109
+ ```
110
+
111
+ ## Content-file models (docmodel.js)
112
+
113
+ `scripts/docmodel.js` renders a .docx from a Markdown content file with fixed sections
114
+ declared by a model script: `build-release.js` (release-template.md) and
115
+ `build-architecture.js` (architecture-template.md). Blocks: paragraphs, bullets,
116
+ numbered steps (restart per list), pipe tables (`<!-- cols: 30 70 -->`), fenced code,
117
+ ```mermaid (rendered via render-mermaid.js; `<!-- width: 70 -->`), `![caption](img.png)`,
118
+ `> ` callouts, `###`/`####` sub-headings, "Figura N –" captions, HTML comments ignored.
119
+ The build fails on unknown/missing sections and malformed tables; it never overwrites a
120
+ .docx that Word holds open (writes `-new.docx`).
@@ -0,0 +1,136 @@
1
+ # Reference — .pptx presentations / status reports (Claro theme)
2
+
3
+ Methodology for creating, editing, and updating .pptx decks (default theme:
4
+ Claro). Library: scripts/pptx/theme_claro_pptx.py (import as `T`). Self-contained
5
+ office ops: scripts/pptx/pptx_office.py (unpack/pack/clean/render) — no Anthropic
6
+ container dependency.
7
+
8
+ ## Environment
9
+
10
+ ```bash
11
+ python3 -m pip install -r scripts/pptx/requirements.txt --break-system-packages
12
+ # python-pptx, lxml, Pillow, defusedxml
13
+ # System tools for QA render: soffice (LibreOffice headless) + pdftoppm (poppler).
14
+ ```
15
+
16
+ Use Calibri/Arial only. Non-safe fonts (Aptos, Georgia, Trebuchet) render with
17
+ different widths under LibreOffice and break QA.
18
+
19
+ ## Two build strategies (pick per slide)
20
+
21
+ - Rebuild with python-pptx: for custom slides (summary tables, Gantt, heatmap,
22
+ ROAM map). `clear_slide_shapes(slide)` then build with the T helpers. Guarantees
23
+ visual consistency across versions.
24
+ - Clone + edit via lxml: for complex template slides (the Claro timeline has ~150
25
+ shapes — cylinder, gears, custom forms). Do NOT rebuild these from scratch;
26
+ duplicate the model slide and edit text/positions by cNvPr id with the lxml
27
+ helpers (set_text, set_pos, set_fill, clone_shape).
28
+
29
+ ## Workflow
30
+
31
+ 1. Analyze the template: render a thumbnail/PDF, extract text, unpack the .pptx
32
+ (`python scripts/pptx/pptx_office.py unpack in.pptx unpacked/`).
33
+ 2. Parse the input activity report: extract activities + dates, group into 3
34
+ tracks/fronts, detect the period (earliest/latest date). Never invent dates;
35
+ label inferred ones.
36
+ 3. Plan the structure (cover + historical timelines kept + summary + current
37
+ timeline + detail timelines + Gantt + heatmap + ROAM).
38
+ 4. Manipulate slide order in ppt/presentation.xml `sldIdLst` (see rules below);
39
+ then `pptx_office.py clean unpacked/`.
40
+ 5. Edit each slide: cover date (lxml), timelines (reposition diamonds + edit
41
+ labels via lxml paired by X), custom slides (clear + rebuild via python-pptx),
42
+ page numbers.
43
+ 6. Pack once: `python scripts/pptx/pptx_office.py pack unpacked/ out.pptx`.
44
+ Do ALL edits in unpacked/ first, then a single pack (re-packing over a stale
45
+ unpacked/ overwrites edits).
46
+ 7. QA render: `python scripts/pptx/pptx_office.py render out.pptx ./_qa` -> inspect
47
+ each slide jpg; fix and re-pack. Limit to 1-2 correction cycles.
48
+ 8. Deliver the .pptx + a short summary (structure, inferred dates to validate).
49
+
50
+ ## sldIdLst rules (ppt/presentation.xml)
51
+
52
+ - Each `<p:sldId>` needs a unique id (use ids > 2_147_480_300 for new slides) and
53
+ an `r:id` that references a Relationship in ppt/_rels/presentation.xml.rels.
54
+ - Reorder = reorder the `<p:sldId>` entries. Remove = delete the entry. Add =
55
+ create the slide part + a rel, then insert the entry at the desired position.
56
+ - Always run `pptx_office.py clean unpacked/` after editing sldIdLst (sweep orphans).
57
+
58
+ ## Reusable status-report blocks (status_report_blocks.py)
59
+
60
+ For the two recurring status-report slides, prefer the generic builders in
61
+ scripts/pptx/status_report_blocks.py over hand-rebuilding — they encode the refined
62
+ Claro layout and carry no project data. Both CLEAR and rebuild the given slide, so
63
+ they work for new blank slides and in-place rebuilds.
64
+
65
+ ```python
66
+ import status_report_blocks as B
67
+ B.build_heatmap(slide, title=..., subtitle=..., banner=..., rows=[(label, [keys], data)],
68
+ stages=[...], backlog_col=True, data_header="Backlog (TIDs)", page=n, total=N)
69
+ B.build_gantt(slide, title=..., subtitle=..., activities=[{name,cat,start,end,prio}],
70
+ week_labels=[...], page=n, total=N)
71
+ ```
72
+
73
+ - build_heatmap: período × estágio grid with status keys done/inprogress/pending/
74
+ parcial/backlog (note the Parcial gold category), an optional trailing data column,
75
+ and a full legend. `rows` = list of (label, [status_key per stage], data_str|None).
76
+ - build_gantt: Claro "Cronograma / Próximos Passos" — red header, dark week columns,
77
+ per-row accent + category chip + priority bar sharing CAT_COLOR[cat], category
78
+ legend. `activities` use 1-based start/end week indices and prio in Alta/Média/Baixa.
79
+
80
+ ## Slide patterns (built with theme_claro_pptx)
81
+
82
+ - Summary of deliverables: red header + zebra rows; columns = strategic delivery
83
+ (red accent + bold title + italic subtitle) / deliveries (bullets) / maturity
84
+ (colored status) / business impact (bullets).
85
+ - Timeline ("Status até DD/MM"): cloned template slide; banner, executive note,
86
+ observations cylinder, current-date label aligned to the dashed line, month
87
+ labels, 3 tracks of diamond+label pairs positioned via `day_to_x`. Unused
88
+ markers: del_shape or park at OFF_SLIDE_Y. Enrich by cloning pairs with
89
+ `max_shape_id + 1`.
90
+ - Gantt (weekly): week columns x activity rows. Use B.build_gantt; chip + accent bar
91
+ + Gantt bar share CAT_COLOR[category] (the builder keeps them in sync).
92
+ - Heatmap: período x estágio grid with status icons + optional data column. Use
93
+ B.build_heatmap (handles header, rows, legend, and row sizing for n>8).
94
+ - ROAM risk map: 7-column table; ROAM badge is a (circle + letter) pair — on a
95
+ ROAM change update both set_fill and set_text.
96
+
97
+ ## QA checklist
98
+
99
+ No overflow; no overlapping timeline labels; elements within 0.45in of edges;
100
+ correct page numbering X/N; chips/bars/accents/badges share the category color;
101
+ title/current-date/axis dates aligned; table zebra preserved; status badge fill
102
+ matches its letter.
103
+
104
+ ## Anti-patterns
105
+
106
+ - Rebuilding the timeline from scratch with python-pptx (loses fidelity) — clone
107
+ + edit via lxml instead.
108
+ - Editing the final .pptx with python-pptx then re-running pack over unpacked/ —
109
+ do all edits in unpacked/, pack once.
110
+ - str_replace on XML with repeated texts — identify shapes by unique cNvPr id and
111
+ edit via lxml xpath.
112
+ - Crowding markers in a short window (gap < 2 days) — consolidate near events.
113
+ - Updating a chip color but not the accent/bar — one function updates all.
114
+
115
+ ## EMU glossary
116
+
117
+ 914_400 EMU = 1 inch. 16:9 slide = 12_192_000 x 6_858_000 EMU. cNvPr = unique
118
+ shape id. sldIdLst = slide order. txBody/rPr/pPr = text body / run / paragraph
119
+ properties. srgbClr = hex RGB. xfrm/off = position; xfrm/ext = size.
120
+
121
+ ## Logo (Claro brand)
122
+
123
+ `add_page_header` already places the Claro logo (scripts/assets/claro-logo.png) small
124
+ in the top-right of every content slide. On the cover, call `T.add_logo(slide,
125
+ x=Inches(0.5), y=Inches(0.7), height=Inches(1.3))` for a prominent mark. `add_logo`
126
+ preserves aspect and right-aligns by default; it returns None if the asset is missing
127
+ (so builds degrade cleanly). Replace scripts/assets/claro-logo.png to rebrand.
128
+
129
+ ## Palette (T.* constants)
130
+
131
+ CLARO_RED E2000F, CLARO_RED_DARK B8000D; DARK_GRAY 333333, MID_GRAY 666666,
132
+ LIGHT_GRAY E8E8E8, VERY_LIGHT_GRAY F5F5F5; STATUS_DONE 2E7D32 (green),
133
+ STATUS_INPROGRESS F9A825 (amber), STATUS_PENDING E67E22 (orange), STATUS_BACKLOG
134
+ 95A5A6 (grey), STATUS_RISK C0392B; CAT_COLOR per track (Pipeline blue, WhisperX
135
+ purple, Data Core teal, Backlog orange, Infra grey-blue, Documentação red,
136
+ Análises violet). ROAM: R green, O blue, A amber, M teal.
@@ -0,0 +1,99 @@
1
+ # Reference — Release document (model)
2
+
3
+ What the market calls release notes for a versioned deploy of an application or
4
+ agentic system, handed to the team that operates it. The document answers one
5
+ question — **what changed in this version and what it means for whoever runs it** —
6
+ and nothing else: no history of earlier releases (they have their own documents), no
7
+ deploy or installation guide (link it under "Referências"). Target length: two pages.
8
+
9
+ Model = `scripts/release-template.md` (content file with fixed sections) rendered by
10
+ `scripts/build-release.js` (generic; application and version come from the content
11
+ file). The build fails on an unknown section, a missing mandatory section or an
12
+ unknown change category — the structure is the model, not a suggestion.
13
+
14
+ ```
15
+ node scripts/build-release.js <release.md> <out.docx>
16
+ ```
17
+
18
+ Deliver only the `.docx`. A PDF render (soffice) is allowed only as a throwaway visual
19
+ check in a scratch directory; it is never written next to the deliverable.
20
+
21
+ ## Where the structure comes from (2024-2026 practice)
22
+
23
+ - Keep a Changelog 1.1.0: for humans, not a commit dump; one entry per version, dated;
24
+ changes grouped by type — Added, Changed, Deprecated, Removed, Fixed, Security.
25
+ - Semantic Versioning 2.0: the version number states the kind of change (MAJOR breaks,
26
+ MINOR adds, PATCH fixes); a released artefact is immutable — reference it by
27
+ `<version>-<commit>` tag **and** digest; if the platform pins a floating tag, say which
28
+ release it resolves to (Kubernetes: avoid `:latest` alone — harder to track and roll back).
29
+ - Conventional Commits / release-please / GitHub release notes: breaking changes called
30
+ out first, each change linked to its commit/PR.
31
+ - Google SRE (Release Engineering, Canarying): a release is a rollout — how it enters,
32
+ the few signals that prove it is healthy, and a rollback path that does not depend on
33
+ the new version working.
34
+ - ITIL 4 change record: rationale, risk × impact, window/approval, rollback plan, owner —
35
+ a change without rollback plan or impact statement should not advance.
36
+ - Agentic / LLM / ASR systems: pinned model id or snapshot, quantization/compute type,
37
+ prompt/tool/guardrail versions, the eval gate that released the build (dataset@version,
38
+ metric, threshold, result vs previous — FP32 golden for quantization changes),
39
+ telemetry deltas (OpenTelemetry GenAI: content/PII never captured), model fallback.
40
+
41
+ ## Fixed sections (in this order)
42
+
43
+ | Section (`## ` title) | Mandatory | Content |
44
+ |---|---|---|
45
+ | front matter | yes | app, version, type (patch/minor/major + why), artifact (immutable tag), digest, date, status, previous, audience, risk/window, author/role/area/project |
46
+ | Resumo | yes | 2-3 sentences: what this release delivers and why now |
47
+ | Mudanças incompatíveis | yes | `Nenhuma.` or one bullet per break with the mandatory operator action |
48
+ | Mudanças | yes | `### Adicionado | Alterado | Corrigido | Removido | Obsoleto | Segurança` — only the categories that apply; one bullet per change: what, why, operational impact, commit/PR |
49
+ | Modelos, prompts e avaliação | agentic systems | table Componente / Nesta release / Evidência — model, prompt/tools/guardrails, telemetry, image/build validation; "inalterado" + evidence when nothing moved |
50
+ | Configuração | when anything changed | table Variável / Antes / Depois / Onde-efeito — delta only; Secret keys by name, never values |
51
+ | Rollout e rollback | yes | Entrada (single action, who executes), Em andamento (in-flight work), Rollback (immutable target and step — or why there is none and the path) |
52
+ | Verificação | yes | 2-4 objective signals: pod/probe/digest, expected log event and what must not appear, functional result |
53
+ | Problemas conhecidos e pendências | optional | open items with owner and closing condition |
54
+ | Referências | optional | commits, PRs, deploy guide, previous release document, changelog |
55
+
56
+ Rendering: title `<app> — Release <version>`, memo table from the front matter,
57
+ sections as H1, categories as H3, `Nenhuma.` as a green callout, `> ` as a callout
58
+ (info; `**Atenção/Risco/Não…**` note; `**Quebra/Incompatível…**` danger), pipe tables
59
+ as theme tables (`<!-- cols: 30 20 50 -->` before a table fixes widths), fenced code
60
+ as code blocks, `ELABORAÇÃO` block at the end, header `<app> — Release`, compact layout
61
+ (1 cm left/right margins; every block spans the text width, centered).
62
+
63
+ ## Writing rules
64
+
65
+ - Only this version. Previous releases are named once (front matter `previous`,
66
+ "Referências") — never re-described.
67
+ - One sentence per change, with its operational impact; the commit id in parentheses.
68
+ - Commands, keys, values, file names and log events in `code` — also inline; **bold**
69
+ only for the single thing the reader must not miss (e.g. `**não alterar**`).
70
+ - Exact, copy-pasteable commands; placeholders only for reader-owned values.
71
+ - No secrets, tokens, customer data or transcribed text; production identifiers only as
72
+ needed; every number traced to a commit, test run, manifest or measurement.
73
+ - Formatting is the theme's (two fonts, justified 1.15 with hyphenation, headings kept
74
+ with text, tables and code never split, lists restart per section); do not hand-roll.
75
+
76
+ ## Checklist before delivering
77
+
78
+ 1. Immutable artefact: tag + digest; floating tag, if any, says which release it resolves to.
79
+ 2. Type and version agree (patch/minor/major); date present; previous release named.
80
+ 3. Breaking changes first, or `Nenhuma.` stated.
81
+ 4. Every change: what, why, impact, commit — grouped by category; nothing from earlier versions.
82
+ 5. Agentic systems: model/prompt/guardrail versions, eval gate result, telemetry delta.
83
+ 6. Configuration delta key by key; Secret keys by name only.
84
+ 7. Rollout: single entry action and owner; in-flight work; rollback target or its absence.
85
+ 8. Verification: objective signals, including what must not appear.
86
+ 9. Pending items with owner; references to the deploy guide and previous release.
87
+ 10. Two pages; build passed (fixed sections); `.docx` only delivered.
88
+
89
+ ## Sources
90
+
91
+ Keep a Changelog 1.1.0; Semantic Versioning 2.0.0; Conventional Commits 1.0.0;
92
+ release-please; GitHub automatically generated release notes; Google SRE Book —
93
+ Release Engineering, Launch Checklist; SRE Workbook — Canarying Releases; Kubernetes
94
+ docs — Images (tags, digests, pull policy), Deployments (rollout/undo); Bitnami charts
95
+ "Upgrading" convention; ITIL 4 change enablement (AWS Well-Architected guide);
96
+ OpenTelemetry GenAI semantic conventions; Hugging Face model cards; MLflow Model
97
+ Registry (versions, aliases); Anthropic model overview / release notes (pinned
98
+ snapshots); Microsoft Writing Style Guide and Google developer documentation style
99
+ guide (code in text, code samples, placeholders); Butterick, Practical Typography.
@@ -0,0 +1,48 @@
1
+ # Template catalog
2
+
3
+ One theme library per format (theme-claro.js for .docx, theme_claro_pptx.py for
4
+ .pptx) + one executable template per document type. Pick the template that
5
+ matches the document type, copy it to build-<slug>, fill it with real content,
6
+ and generate. Add new templates here as new types arise (one engine, many bases).
7
+
8
+ ## .docx (Node, theme-claro.js)
9
+
10
+ | Document type | Template | When to use |
11
+ |---|---|---|
12
+ | Technical report | scripts/example-build.js | Technical/analytical reports: memo metadata, dense tables, evidence, code blocks, captions. The detailed, audit-oriented base. |
13
+ | Executive report | scripts/example_build_ExecutiveReport_docx.js | Leadership readers with little time and no technical background: high-level storytelling (tension -> evidence -> resolution), stats translated to business language, decision panel (semaphore), one-page closing. |
14
+ | Release | scripts/build-release.js + scripts/release-template.md | Release notes of a versioned deploy for the operating team: what changed in THIS version only (fixed sections: Resumo, Mudanças incompatíveis, Mudanças by Keep a Changelog category, Modelos/prompts/avaliação, Configuração, Rollout e rollback, Verificação, Pendências, Referências). Content-file driven — copy release-template.md, fill it, run `node scripts/build-release.js <release.md> <out.docx>`; the build enforces the structure. Two pages, compact layout. Guide: reference/RELEASE.md. |
15
+ | Architecture review | scripts/example_build_ArchitectureReview_docx.js | A review that JUDGES an existing system or agentic design (phase gate, post-incident, audit, PR-level architecture review): verdict first (PASS / FAIL / CONDITIONAL + severity cards), review context (object, motivation, criteria, method, out of scope), current architecture with deviations from the blueprint, findings table ranked by severity with evidence, decision records (compact ADR), residual risks, remediation roadmap in waves, re-verification rule. Not for describing a system — that is the Architecture & System Design model below. |
16
+ | Architecture & System Design | scripts/build-architecture.js + scripts/architecture-template.md | Architecture description of an application or agentic system (arc42 + C4 + 42010 + ADR + agentic sections): cover page + Sumário, Elaboração/Histórico, 0 Sumário executivo, 1 Visão e contexto, 2 Visão lógica, 3 Estrutura de diretório, 4 Agentes e orquestração, 5 Visão de runtime, 6 Contratos, 7 Dados, 8 Configuração, 9 Infraestrutura, 10 Observabilidade, 11 Segurança e AI Safety, 12 Qualidade/avaliação/testes, 13 Decisões (ADR), 14 Riscos, 15 Roadmap, 16 Rastreabilidade, Glossário. Content-file driven; Mermaid rendered; `node scripts/build-architecture.js <arch.md> <out.docx>`. Guide: reference/ARCHITECTURE.md. |
17
+
18
+ Markdown source, faithful render (no template to fill): `node scripts/build-md-claro.js
19
+ <input.md> <output.docx> [--diagrams DIR] [--title T] [--subtitle S] [--header H]
20
+ [--author NAME] [--role ROLE] [--project P] [--meta "Key=Value;Key=Value"] [--skip-h1]`.
21
+ Every Markdown block maps to one theme helper (`##` -> h1, pipe tables -> makeTable,
22
+ fenced code -> codeBlock, ```mermaid -> pre-rendered diagram, blockquote -> callout);
23
+ numbered lists restart per block. Use it when the source is already a finished .md and
24
+ the job is formatting, not authoring.
25
+
26
+ ## .pptx (Python, theme_claro_pptx.py)
27
+
28
+ | Document type | Template | When to use |
29
+ |---|---|---|
30
+ | Status report deck | scripts/pptx/example_build_StatusReport_pptx.py | Biweekly/monthly status report: cover, deliverables summary, Gantt, processing heatmap, ROAM risk map. Rich timeline slides are cloned from the Claro template via lxml (see PPTX.md), not rebuilt by the template. |
31
+ | Weekly status deck | scripts/pptx/example_build_WeeklyStatus_pptx.py | Short weekly squad update (six slides): cover, week highlights in three lanes (done / in progress / blocked, with counts), processing heatmap and execution Gantt built by status_report_blocks.build_heatmap / build_gantt, ROAM risks of the week, next-week plan + decisions needed. No deliverables table, no cloned timeline slides; use the Status report deck for the biweekly/monthly view. |
32
+
33
+ For the heatmap and Gantt slides of a status report, use the reusable builders in
34
+ scripts/pptx/status_report_blocks.py (build_heatmap, build_gantt) — generic, no
35
+ project data, clear + rebuild a slide. Preferred over rebuilding by hand; see PPTX.md.
36
+
37
+ All .docx templates share the house typography (reference/HELPERS.md, "House
38
+ typography"): two fonts, justified 1.15 text, headings kept with their text, tables and
39
+ code blocks never cut by a page break. The release and architecture models use `layout: "compact"` (1 cm lateral margins);
40
+ the others keep the default `report` geometry.
41
+
42
+ ## Adding a new template
43
+
44
+ 1. Reuse the theme library (do not fork the palette/helpers).
45
+ 2. Create scripts/<...>example_build_<Type>_<ext>.{js,py} from the closest
46
+ existing template.
47
+ 3. Register it in the table above with a clear "when to use".
48
+ 4. Keep the same authorship/footer defaults (reference/authoring.md).
@@ -0,0 +1,66 @@
1
+ # Authoring defaults
2
+
3
+ Defaults for the authorship block and footer. Override if the user names another
4
+ author/project. These are house defaults, not hardcoded — pass different values
5
+ to the helpers when needed.
6
+
7
+ ## Default author
8
+
9
+ - Name: André Negrelli
10
+ - Role: Tech Lead — AI Data Engineer
11
+ - Area: DADOS & IA | Tech Dados & IA — Aquisição e Transformação de Dados & IA
12
+ - Project: configurable per document (e.g. "Projeto STT — Claro")
13
+
14
+ ```js
15
+ T.authorBlock({
16
+ name: "André Negrelli",
17
+ role: "Tech Lead — AI Data Engineer",
18
+ area: "DADOS & IA | Tech Dados & IA — Aquisição e Transformação de Dados & IA",
19
+ project: "<Project> — <Client> · <DATE>",
20
+ });
21
+ ```
22
+
23
+ Footer:
24
+
25
+ ```js
26
+ T.buildDocument({
27
+ children,
28
+ headerText: "<Title> | <Project>",
29
+ footerAuthor: "André Negrelli — DADOS & IA",
30
+ });
31
+ ```
32
+
33
+ ## Release documents
34
+
35
+ Shorter identity, measured from the reference release document
36
+ (stt-whisperx — Release 0.4.2): header `"<app> — Release"`, footer author
37
+ `"André Negrelli — Tech Lead AI Data Engineer | DADOS & IA"`, authorship heading
38
+ `"ELABORAÇÃO"` with name, role and `"<Project> — Claro / <app>"`, `T.configure({ layout: "compact" })`.
39
+
40
+ ```js
41
+ T.authorBlock({ heading: "ELABORAÇÃO", name: "André Negrelli", role: "Tech Lead AI Data Engineer", project: "Speech-to-text Claro / stt-whisperx" });
42
+ T.configure({ layout: "compact" }); // first line of the build
43
+ T.buildDocument({ children, headerText: "stt-whisperx — Release", footerAuthor: "André Negrelli — Tech Lead AI Data Engineer | DADOS & IA" });
44
+ ```
45
+
46
+ ## Document identity (Claro theme)
47
+
48
+ - A4 page, Arial for prose + Consolas for code (no third font); geometry per layout
49
+ (`report`: 2 cm all round; `compact` for release documents: 1 cm left/right, tight
50
+ top/bottom, header/footer close to the edge). Blocks span the text width, centered.
51
+ - Body text justified, 1.15 line spacing; headings keep with the next paragraph;
52
+ tables, code blocks and callouts are never cut by a page break.
53
+ - Claro institutional palette (red anchors, gray hierarchy): red headings, red
54
+ table headers with white text — defined in the C token object, aligned with
55
+ theme_claro_pptx.py. Do not reintroduce the old blue palette.
56
+ - Claro logo (scripts/assets/claro-logo.png): centered on the cover (via
57
+ coverBlock) and small in the top-right of every page header (via buildDocument).
58
+ Both degrade cleanly if the asset is missing. Use `T.logoRun({height})` to place
59
+ it elsewhere.
60
+ - Italic grey header with a bottom rule + logo; footer with author on the left and
61
+ "Confidencial – Uso Interno | Página X de Y" on the right.
62
+ - Centered "ELABORAÇÃO E ANÁLISE" authorship block at the end.
63
+ - Output language: PT-BR by default (client-facing); change per request.
64
+
65
+ The logo asset is shared by both formats at scripts/assets/claro-logo.png (pptx uses
66
+ it via T.add_logo / add_page_header). Replace that file to rebrand both tracks.