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.
- package/LICENSE +21 -0
- package/NOTICE +108 -0
- package/README.md +134 -0
- package/canonical/HARVEST.yaml +858 -0
- package/canonical/PROVENANCE.yaml +740 -0
- package/canonical/agents/README.md +95 -0
- package/canonical/agents/agentic-architect.md +18 -0
- package/canonical/agents/database-reviewer.md +41 -0
- package/canonical/agents/explorer-ai-engineer-analyst.md +65 -0
- package/canonical/agents/pr-reviewer.md +96 -0
- package/canonical/agents/python-reviewer.md +55 -0
- package/canonical/agents/report-formatter.md +19 -0
- package/canonical/agents/security-reviewer.md +53 -0
- package/canonical/agents/test-writer.md +34 -0
- package/canonical/commands/fh-context.md +37 -0
- package/canonical/evals/promptfoo.redteam.yaml +108 -0
- package/canonical/hooks/cost-prices.json +14 -0
- package/canonical/hooks/freeharness-auto-memory.mjs +158 -0
- package/canonical/hooks/freeharness-config-guard.mjs +162 -0
- package/canonical/hooks/freeharness-context-monitor.mjs +198 -0
- package/canonical/hooks/freeharness-converge.mjs +227 -0
- package/canonical/hooks/freeharness-cost-tracker.mjs +1027 -0
- package/canonical/hooks/freeharness-memory-guard.mjs +57 -0
- package/canonical/hooks/freeharness-output-pruner.mjs +333 -0
- package/canonical/hooks/freeharness-precompact.mjs +323 -0
- package/canonical/hooks/freeharness-repeat-tool.mjs +208 -0
- package/canonical/hooks/freeharness-security-guidance.mjs +164 -0
- package/canonical/hooks/freeharness-session-start +583 -0
- package/canonical/hooks/hooks.auto-memory.claude-code.json +16 -0
- package/canonical/hooks/hooks.claude-code.json +17 -0
- package/canonical/hooks/hooks.config-guard.claude-code.json +16 -0
- package/canonical/hooks/hooks.context-monitor.claude-code.json +15 -0
- package/canonical/hooks/hooks.converge.claude-code.json +15 -0
- package/canonical/hooks/hooks.cost-tracker.claude-code.json +37 -0
- package/canonical/hooks/hooks.memory-guard.claude-code.json +16 -0
- package/canonical/hooks/hooks.output-pruner.claude-code.json +16 -0
- package/canonical/hooks/hooks.precompact.claude-code.json +15 -0
- package/canonical/hooks/hooks.repeat-tool.claude-code.json +25 -0
- package/canonical/hooks/hooks.security-guidance.claude-code.json +16 -0
- package/canonical/mcp/servers.json +20 -0
- package/canonical/openspec/config.base.yaml +89 -0
- package/canonical/openspec/schema.spec-driven.yaml +277 -0
- package/canonical/openspec/templates/data-contract.md +36 -0
- package/canonical/openspec/templates/design.md +84 -0
- package/canonical/openspec/templates/eval-plan.md +33 -0
- package/canonical/openspec/templates/follow-ups.md +2 -0
- package/canonical/openspec/templates/proposal.md +45 -0
- package/canonical/openspec/templates/spec.md +42 -0
- package/canonical/openspec/templates/tasks.md +38 -0
- package/canonical/profiles/local-llamacpp.LOCAL-MODELS.md +47 -0
- package/canonical/profiles/local-llamacpp.json +27 -0
- package/canonical/profiles/local-ollama.json +20 -0
- package/canonical/profiles/mcp.json +91 -0
- package/canonical/rules/CLAUDE.md +78 -0
- package/canonical/rules/project-CLAUDE.template.md +62 -0
- package/canonical/rules/routing.md +20 -0
- package/canonical/rules/safety.md +41 -0
- package/canonical/settings/settings.cache-hygiene.claude-code.json +5 -0
- package/canonical/skills/agent-evaluation/SKILL.md +102 -0
- package/canonical/skills/agent-evaluation/assets/evaluation_report_template.md +206 -0
- package/canonical/skills/agent-evaluation/evals/cases.yaml +106 -0
- package/canonical/skills/agent-evaluation/references/dataset-preparation.md +351 -0
- package/canonical/skills/agent-evaluation/references/scorers-constraints.md +165 -0
- package/canonical/skills/agent-evaluation/references/scorers.md +431 -0
- package/canonical/skills/agent-evaluation/references/setup-guide.md +252 -0
- package/canonical/skills/agent-evaluation/references/tracing-integration.md +164 -0
- package/canonical/skills/agent-evaluation/references/troubleshooting.md +514 -0
- package/canonical/skills/agent-evaluation/scripts/analyze_results.py +462 -0
- package/canonical/skills/agent-evaluation/scripts/create_dataset_template.py +382 -0
- package/canonical/skills/agent-evaluation/scripts/list_datasets.py +273 -0
- package/canonical/skills/agent-evaluation/scripts/run_evaluation_template.py +309 -0
- package/canonical/skills/agent-evaluation/scripts/setup_mlflow.py +353 -0
- package/canonical/skills/agent-evaluation/scripts/utils/__init__.py +27 -0
- package/canonical/skills/agent-evaluation/scripts/utils/env_validation.py +123 -0
- package/canonical/skills/agent-evaluation/scripts/utils/tracing_utils.py +108 -0
- package/canonical/skills/agent-evaluation/scripts/validate_agent_tracing.py +148 -0
- package/canonical/skills/agent-evaluation/scripts/validate_auth.py +240 -0
- package/canonical/skills/agent-evaluation/scripts/validate_environment.py +185 -0
- package/canonical/skills/agent-evaluation/scripts/validate_tracing_runtime.py +318 -0
- package/canonical/skills/agentic-architecture/SKILL.md +41 -0
- package/canonical/skills/agentic-architecture/evals/cases.yaml +94 -0
- package/canonical/skills/agentic-architecture/reference/context-engineering.md +75 -0
- package/canonical/skills/agentic-architecture/reference/patterns.md +76 -0
- package/canonical/skills/agentic-architecture/reference/reliability-observability.md +94 -0
- package/canonical/skills/agentic-architecture/reference/review-framework.md +59 -0
- package/canonical/skills/code-review/SKILL.md +52 -0
- package/canonical/skills/code-review/evals/cases.yaml +197 -0
- package/canonical/skills/git-workflow/SKILL.md +41 -0
- package/canonical/skills/git-workflow/evals/cases.yaml +92 -0
- package/canonical/skills/local-code/SKILL.md +24 -0
- package/canonical/skills/local-code/evals/cases.yaml +85 -0
- package/canonical/skills/local-code/scripts/query_llama.py +68 -0
- package/canonical/skills/report-formatting/SKILL.md +62 -0
- package/canonical/skills/report-formatting/evals/cases.yaml +83 -0
- package/canonical/skills/report-formatting/reference/ARCHITECTURE.md +135 -0
- package/canonical/skills/report-formatting/reference/HELPERS.md +120 -0
- package/canonical/skills/report-formatting/reference/PPTX.md +136 -0
- package/canonical/skills/report-formatting/reference/RELEASE.md +99 -0
- package/canonical/skills/report-formatting/reference/TEMPLATES.md +48 -0
- package/canonical/skills/report-formatting/reference/authoring.md +66 -0
- package/canonical/skills/report-formatting/scripts/architecture-template.md +271 -0
- package/canonical/skills/report-formatting/scripts/assets/claro-logo.png +0 -0
- package/canonical/skills/report-formatting/scripts/assets/claro-wordmark.svg +1 -0
- package/canonical/skills/report-formatting/scripts/build-architecture.js +57 -0
- package/canonical/skills/report-formatting/scripts/build-md-claro.js +224 -0
- package/canonical/skills/report-formatting/scripts/build-release.js +51 -0
- package/canonical/skills/report-formatting/scripts/check-env.js +58 -0
- package/canonical/skills/report-formatting/scripts/docmodel.js +283 -0
- package/canonical/skills/report-formatting/scripts/example-build.js +119 -0
- package/canonical/skills/report-formatting/scripts/example_build_ArchitectureReview_docx.js +195 -0
- package/canonical/skills/report-formatting/scripts/example_build_ExecutiveReport_docx.js +114 -0
- package/canonical/skills/report-formatting/scripts/package.json +17 -0
- package/canonical/skills/report-formatting/scripts/pptx/example_build_StatusReport_pptx.py +223 -0
- package/canonical/skills/report-formatting/scripts/pptx/example_build_WeeklyStatus_pptx.py +245 -0
- package/canonical/skills/report-formatting/scripts/pptx/pptx_office.py +144 -0
- package/canonical/skills/report-formatting/scripts/pptx/requirements.txt +7 -0
- package/canonical/skills/report-formatting/scripts/pptx/status_report_blocks.py +193 -0
- package/canonical/skills/report-formatting/scripts/pptx/theme_claro_pptx.py +473 -0
- package/canonical/skills/report-formatting/scripts/release-template.md +80 -0
- package/canonical/skills/report-formatting/scripts/render-mermaid.js +105 -0
- package/canonical/skills/report-formatting/scripts/theme-claro.js +403 -0
- package/canonical/skills/subagent-driven-development/SKILL.md +60 -0
- package/canonical/skills/subagent-driven-development/evals/cases.yaml +208 -0
- package/canonical/skills/subagent-driven-development/reference/brief.md +91 -0
- package/canonical/skills/subagent-driven-development/reference/handoff.md +118 -0
- package/canonical/skills/subagent-driven-development/scripts/validate-handoff.mjs +850 -0
- package/canonical/skills/systematic-debugging/SKILL.md +44 -0
- package/canonical/skills/systematic-debugging/evals/cases.yaml +90 -0
- package/canonical/skills/test-driven-development/SKILL.md +42 -0
- package/canonical/skills/test-driven-development/evals/cases.yaml +86 -0
- package/canonical/skills/test-driven-development/reference/writing-good-tests.md +52 -0
- package/canonical/skills/verification-before-completion/SKILL.md +53 -0
- package/canonical/skills/verification-before-completion/evals/cases.yaml +107 -0
- package/dist/adapters/content/language-lint.d.ts +46 -0
- package/dist/adapters/content/language-lint.js +191 -0
- package/dist/adapters/harness/claude-code.d.ts +57 -0
- package/dist/adapters/harness/claude-code.js +385 -0
- package/dist/adapters/harness/index.d.ts +3 -0
- package/dist/adapters/harness/index.js +17 -0
- package/dist/adapters/harness/opencode.d.ts +7 -0
- package/dist/adapters/harness/opencode.js +166 -0
- package/dist/adapters/harness/plugin.d.ts +22 -0
- package/dist/adapters/harness/plugin.js +257 -0
- package/dist/adapters/memory/doctor.d.ts +480 -0
- package/dist/adapters/memory/doctor.js +1217 -0
- package/dist/adapters/memory/vendored.d.ts +150 -0
- package/dist/adapters/memory/vendored.js +487 -0
- package/dist/adapters/package/node.d.ts +9 -0
- package/dist/adapters/package/node.js +20 -0
- package/dist/adapters/prompt/readline.d.ts +19 -0
- package/dist/adapters/prompt/readline.js +53 -0
- package/dist/adapters/sync/diff.d.ts +43 -0
- package/dist/adapters/sync/diff.js +380 -0
- package/dist/cli/cleanup.d.ts +86 -0
- package/dist/cli/cleanup.js +382 -0
- package/dist/cli/cost.d.ts +304 -0
- package/dist/cli/cost.js +501 -0
- package/dist/cli/doctor.d.ts +205 -0
- package/dist/cli/doctor.js +654 -0
- package/dist/cli/executor.d.ts +5 -0
- package/dist/cli/executor.js +48 -0
- package/dist/cli/plugin-validate.d.ts +37 -0
- package/dist/cli/plugin-validate.js +256 -0
- package/dist/cli/prefix.d.ts +68 -0
- package/dist/cli/prefix.js +218 -0
- package/dist/cli/profile.d.ts +170 -0
- package/dist/cli/profile.js +285 -0
- package/dist/cli/runner.d.ts +10 -0
- package/dist/cli/runner.js +27 -0
- package/dist/cli/uninstall.d.ts +65 -0
- package/dist/cli/uninstall.js +147 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +989 -0
- package/dist/infra/dogfood.d.ts +31 -0
- package/dist/infra/dogfood.js +51 -0
- package/dist/infra/fsutil.d.ts +40 -0
- package/dist/infra/fsutil.js +143 -0
- package/dist/infra/manifest.d.ts +76 -0
- package/dist/infra/manifest.js +92 -0
- package/dist/infra/paths.d.ts +19 -0
- package/dist/infra/paths.js +74 -0
- package/dist/infra/routing.d.ts +4 -0
- package/dist/infra/routing.js +7 -0
- package/node_modules/@freeharness/core/dist/context.d.ts +30 -0
- package/node_modules/@freeharness/core/dist/context.js +1 -0
- package/node_modules/@freeharness/core/dist/index.d.ts +5 -0
- package/node_modules/@freeharness/core/dist/index.js +6 -0
- package/node_modules/@freeharness/core/dist/planner.d.ts +13 -0
- package/node_modules/@freeharness/core/dist/planner.js +18 -0
- package/node_modules/@freeharness/core/dist/ports.d.ts +90 -0
- package/node_modules/@freeharness/core/dist/ports.js +1 -0
- package/node_modules/@freeharness/core/dist/registry.d.ts +41 -0
- package/node_modules/@freeharness/core/dist/registry.js +124 -0
- package/node_modules/@freeharness/core/dist/tiers.d.ts +30 -0
- package/node_modules/@freeharness/core/dist/tiers.js +99 -0
- package/node_modules/@freeharness/core/package.json +34 -0
- package/node_modules/@freeharness/sdd/PROVENANCE.yaml +175 -0
- package/node_modules/@freeharness/sdd/dist/src/bin/openspec.d.ts +2 -0
- package/node_modules/@freeharness/sdd/dist/src/bin/openspec.js +166 -0
- package/node_modules/@freeharness/sdd/dist/src/index.d.ts +14 -0
- package/node_modules/@freeharness/sdd/dist/src/index.js +11 -0
- package/node_modules/@freeharness/sdd/dist/src/init.d.ts +39 -0
- package/node_modules/@freeharness/sdd/dist/src/init.js +190 -0
- package/node_modules/@freeharness/sdd/dist/src/root-resolver.d.ts +8 -0
- package/node_modules/@freeharness/sdd/dist/src/root-resolver.js +32 -0
- package/node_modules/@freeharness/sdd/dist/src/shim/archive.d.ts +81 -0
- package/node_modules/@freeharness/sdd/dist/src/shim/archive.js +483 -0
- package/node_modules/@freeharness/sdd/dist/src/shim/context.d.ts +4 -0
- package/node_modules/@freeharness/sdd/dist/src/shim/context.js +48 -0
- package/node_modules/@freeharness/sdd/dist/src/shim/follow-up.d.ts +57 -0
- package/node_modules/@freeharness/sdd/dist/src/shim/follow-up.js +279 -0
- package/node_modules/@freeharness/sdd/dist/src/shim/instructions.d.ts +67 -0
- package/node_modules/@freeharness/sdd/dist/src/shim/instructions.js +460 -0
- package/node_modules/@freeharness/sdd/dist/src/shim/list.d.ts +5 -0
- package/node_modules/@freeharness/sdd/dist/src/shim/list.js +95 -0
- package/node_modules/@freeharness/sdd/dist/src/shim/new-change.d.ts +6 -0
- package/node_modules/@freeharness/sdd/dist/src/shim/new-change.js +150 -0
- package/node_modules/@freeharness/sdd/dist/src/shim/schemas.d.ts +4 -0
- package/node_modules/@freeharness/sdd/dist/src/shim/schemas.js +23 -0
- package/node_modules/@freeharness/sdd/dist/src/shim/shared.d.ts +56 -0
- package/node_modules/@freeharness/sdd/dist/src/shim/shared.js +140 -0
- package/node_modules/@freeharness/sdd/dist/src/shim/status.d.ts +8 -0
- package/node_modules/@freeharness/sdd/dist/src/shim/status.js +85 -0
- package/node_modules/@freeharness/sdd/dist/src/shim/validate.d.ts +6 -0
- package/node_modules/@freeharness/sdd/dist/src/shim/validate.js +229 -0
- package/node_modules/@freeharness/sdd/dist/src/validate-change.d.ts +40 -0
- package/node_modules/@freeharness/sdd/dist/src/validate-change.js +114 -0
- package/node_modules/@freeharness/sdd/dist/src/validate.d.ts +24 -0
- package/node_modules/@freeharness/sdd/dist/src/validate.js +72 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/apply/specs-apply.d.ts +130 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/apply/specs-apply.js +981 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/change-metadata.d.ts +46 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/change-metadata.js +128 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/change-status-policy.d.ts +26 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/change-status-policy.js +32 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/file-system.d.ts +50 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/file-system.js +394 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/global-config.d.ts +15 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/global-config.js +49 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/graph.d.ts +71 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/graph.js +164 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/index.d.ts +11 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/index.js +21 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/instruction-loader.d.ts +102 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/instruction-loader.js +230 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/outputs.d.ts +18 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/outputs.js +138 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/resolver.d.ts +82 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/resolver.js +333 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/schema.d.ts +12 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/schema.js +110 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/state.d.ts +11 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/state.js +32 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/task-progress.d.ts +33 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/task-progress.js +149 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/types.d.ts +39 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/engine/types.js +49 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/command-generation/adapters/claude.d.ts +12 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/command-generation/adapters/claude.js +31 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/command-generation/adapters/index.d.ts +10 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/command-generation/adapters/index.js +10 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/command-generation/adapters/opencode.d.ts +12 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/command-generation/adapters/opencode.js +26 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/command-generation/generator.d.ts +28 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/command-generation/generator.js +41 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/command-generation/index.d.ts +23 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/command-generation/index.js +25 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/command-generation/invocation.d.ts +72 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/command-generation/invocation.js +76 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/command-generation/registry.d.ts +39 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/command-generation/registry.js +53 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/command-generation/types.d.ts +62 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/command-generation/types.js +7 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/command-generation/yaml.d.ts +35 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/command-generation/yaml.js +47 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/command-references.d.ts +33 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/command-references.js +55 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/shared/allowed-tools.d.ts +11 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/shared/allowed-tools.js +11 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/shared/skill-generation.d.ts +48 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/shared/skill-generation.js +99 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/skill-templates.d.ts +19 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/skill-templates.js +18 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/types.d.ts +18 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/types.js +4 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/apply-change.d.ts +19 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/apply-change.js +207 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/archive-change.d.ts +12 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/archive-change.js +409 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/bulk-archive-change.d.ts +9 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/bulk-archive-change.js +673 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/continue-change.d.ts +9 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/continue-change.js +230 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/explore.d.ts +12 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/explore.js +550 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/feedback.d.ts +8 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/feedback.js +107 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/ff-change.d.ts +12 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/ff-change.js +228 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/new-change.d.ts +9 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/new-change.js +147 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/onboard.d.ts +9 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/onboard.js +571 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/propose.d.ts +12 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/propose.js +322 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/store-selection.d.ts +7 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/store-selection.js +7 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/sync-specs.d.ts +9 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/sync-specs.js +518 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/update-change.d.ts +9 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/update-change.js +176 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/verify-change.d.ts +9 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/generation/templates/workflows/verify-change.js +344 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/constants.d.ts +39 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/constants.js +54 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/delta-resolution.d.ts +35 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/delta-resolution.js +171 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/parsers/change-parser.d.ts +27 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/parsers/change-parser.js +210 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/parsers/code-fence.d.ts +14 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/parsers/code-fence.js +48 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/parsers/markdown-parser.d.ts +22 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/parsers/markdown-parser.js +186 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/parsers/requirement-blocks.d.ts +65 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/parsers/requirement-blocks.js +409 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/parsers/requirement-text.d.ts +55 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/parsers/requirement-text.js +98 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/parsers/spec-structure.d.ts +8 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/parsers/spec-structure.js +77 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/purpose-placeholder.d.ts +44 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/purpose-placeholder.js +116 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/schemas/base.schema.d.ts +12 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/schemas/base.schema.js +17 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/schemas/change.schema.d.ts +72 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/schemas/change.schema.js +30 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/schemas/index.d.ts +3 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/schemas/index.js +3 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/schemas/spec.schema.d.ts +17 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/schemas/spec.schema.js +14 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/spec-discovery.d.ts +39 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/spec-discovery.js +114 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/task-lines.d.ts +45 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/task-lines.js +105 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/task-numbering.d.ts +15 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/task-numbering.js +56 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/types.d.ts +17 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/types.js +1 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/validator.d.ts +94 -0
- package/node_modules/@freeharness/sdd/dist/vendor/openspec/validation/validator.js +756 -0
- package/node_modules/@freeharness/sdd/package.json +57 -0
- package/node_modules/@freeharness/sdd/vendor/openspec/LICENSE.upstream +22 -0
- package/node_modules/@freeharness/sdd/vendor/openspec/assets/schema.upstream.yaml +232 -0
- package/node_modules/@freeharness/sdd/vendor/openspec/assets/skills/README.md +19 -0
- package/node_modules/@freeharness/sdd/vendor/openspec/assets/skills/openspec-apply-change/SKILL.md +187 -0
- package/node_modules/@freeharness/sdd/vendor/openspec/assets/skills/openspec-archive-change/SKILL.md +181 -0
- package/node_modules/@freeharness/sdd/vendor/openspec/assets/skills/openspec-bulk-archive-change/SKILL.md +338 -0
- package/node_modules/@freeharness/sdd/vendor/openspec/assets/skills/openspec-continue-change/SKILL.md +117 -0
- package/node_modules/@freeharness/sdd/vendor/openspec/assets/skills/openspec-explore/SKILL.md +342 -0
- package/node_modules/@freeharness/sdd/vendor/openspec/assets/skills/openspec-ff-change/SKILL.md +116 -0
- package/node_modules/@freeharness/sdd/vendor/openspec/assets/skills/openspec-new-change/SKILL.md +76 -0
- package/node_modules/@freeharness/sdd/vendor/openspec/assets/skills/openspec-onboard/SKILL.md +560 -0
- package/node_modules/@freeharness/sdd/vendor/openspec/assets/skills/openspec-propose/SKILL.md +162 -0
- package/node_modules/@freeharness/sdd/vendor/openspec/assets/skills/openspec-sync-specs/SKILL.md +261 -0
- package/node_modules/@freeharness/sdd/vendor/openspec/assets/skills/openspec-update-change/SKILL.md +90 -0
- package/node_modules/@freeharness/sdd/vendor/openspec/assets/skills/openspec-verify-change/SKILL.md +174 -0
- package/package.json +70 -0
- package/provenance/canonical.PROVENANCE.yaml +740 -0
- package/provenance/claude-mem.LICENSE.upstream +202 -0
- package/provenance/memory.PROVENANCE.yaml +399 -0
- package/provenance/sdd.PROVENANCE.yaml +175 -0
- package/vendor-licenses/caveman.LICENSE +27 -0
- package/vendor-licenses/deepseek-harness.LICENSE +21 -0
- package/vendor-licenses/ecc.LICENSE +21 -0
- package/vendor-licenses/pi.LICENSE +21 -0
- 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 -->`), ``,
|
|
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.
|