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,102 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: agent-evaluation
|
|
3
|
+
description: Use when benchmarking a GenAI agent or RAG pipeline: retrieval quality, tool-call accuracy, response quality, regression between prompt or model versions. Builds MLflow 3.8+ eval datasets, scorers and tracing, and reads the resulting metrics. Not for unit tests of plain code.
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
context: fork
|
|
6
|
+
agent: general-purpose
|
|
7
|
+
model: standard
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Agent Evaluation Protocol (MLflow)
|
|
11
|
+
|
|
12
|
+
<role>
|
|
13
|
+
Autonomous evaluation worker running as a fork: no conversation history, no access to the
|
|
14
|
+
caller's context. Execute one MLflow GenAI evaluation end to end from `$ARGUMENTS` alone and
|
|
15
|
+
return a compact result. Never echo raw JSON dumps, individual trace payloads or CLI logs
|
|
16
|
+
into the reply; write extensive payloads to disk instead.
|
|
17
|
+
</role>
|
|
18
|
+
|
|
19
|
+
<arguments>
|
|
20
|
+
`$ARGUMENTS` carries three required inputs and one optional, in this order:
|
|
21
|
+
1. Entry point: the agent or pipeline's module and function (`package.module:function`).
|
|
22
|
+
2. Dataset: an existing dataset name, or a test-cases file/source to build one from.
|
|
23
|
+
3. Output directory: where the raw results and the report are written, resolved against the
|
|
24
|
+
project root before any `cd`.
|
|
25
|
+
4. Eval-plan (optional): path to an `eval-plan.md` holding the Pass/Fail thresholds. Without
|
|
26
|
+
it, every metric reports `threshold: none` and `n/a` in place of Pass/Fail; never invent a
|
|
27
|
+
threshold.
|
|
28
|
+
|
|
29
|
+
Stop with one usage line and do nothing else when the entry point or the output directory
|
|
30
|
+
is missing:
|
|
31
|
+
`Usage: /agent-evaluation <entry-point> <dataset-name-or-source> <output-dir> [eval-plan.md]`
|
|
32
|
+
</arguments>
|
|
33
|
+
|
|
34
|
+
<prerequisites>
|
|
35
|
+
- Environment: MLflow >= 3.8.0.
|
|
36
|
+
- Execution standard: run every command via `uv run`.
|
|
37
|
+
- Output hygiene: redirect stderr when capturing structured output (`2>/dev/null > file.json`).
|
|
38
|
+
- Docs access: query `https://mlflow.org/docs/latest/llms.txt` via WebFetch for current APIs;
|
|
39
|
+
never invent a signature.
|
|
40
|
+
</prerequisites>
|
|
41
|
+
|
|
42
|
+
<workflow>
|
|
43
|
+
Claude Code prints "Base directory for this skill: <path>" when the skill loads. The
|
|
44
|
+
worker's own cwd is the project root, not that path: prefix every `scripts/*.py` command
|
|
45
|
+
below with the skill's base directory, or `cd` into it first, before running one. The
|
|
46
|
+
output-directory argument stays resolved against the project before that `cd`, never
|
|
47
|
+
against the skill's base directory; every result and the report are written there.
|
|
48
|
+
|
|
49
|
+
## Phase 1: Environment and Tracing Verification
|
|
50
|
+
1. `uv run python scripts/validate_environment.py` runs `mlflow doctor` plus the version, env
|
|
51
|
+
var and connectivity checks. Below MLflow 3.8.0, install with the version spec quoted so
|
|
52
|
+
the shell does not read `>=3.8.0` as a redirect: `uv pip install 'mlflow>=3.8.0'`.
|
|
53
|
+
2. `uv run python scripts/validate_auth.py` checks Databricks or LLM-provider credentials
|
|
54
|
+
before any expensive call; on failure, `references/setup-guide.md` has the manual setup.
|
|
55
|
+
3. `uv run python scripts/setup_mlflow.py` auto-detects Databricks or a local server, finds
|
|
56
|
+
or creates the experiment, and prints `MLFLOW_TRACKING_URI` / `MLFLOW_EXPERIMENT_ID` to
|
|
57
|
+
export; `references/setup-guide.md` covers the manual fallback for the remaining cases.
|
|
58
|
+
4. Confirm the entry point is instrumented (`mlflow.<library>.autolog()` before its imports,
|
|
59
|
+
`@mlflow.trace` on the entry point). Run `uv run python scripts/validate_tracing_runtime.py
|
|
60
|
+
--module <module> --entry-point <function>` for an auto-detected check, or fill in the
|
|
61
|
+
TODOs of `scripts/validate_agent_tracing.py` and run it for a single-query check.
|
|
62
|
+
`references/tracing-integration.md` is authoritative for adding tracing; if traces are
|
|
63
|
+
still missing after following it, stop and read `references/troubleshooting.md`.
|
|
64
|
+
|
|
65
|
+
## Phase 2: Dataset and Scorer Preparation
|
|
66
|
+
1. `uv run python scripts/list_datasets.py --format json` checks for a reusable dataset
|
|
67
|
+
before creating one; `references/dataset-preparation.md` covers diversity and sizing.
|
|
68
|
+
2. When no suitable dataset exists, `uv run python scripts/create_dataset_template.py
|
|
69
|
+
--test-cases-file <file>` (add `--catalog --schema --table` on Databricks Unity Catalog).
|
|
70
|
+
The generated `inputs` dict keys must match the entry point's parameter names exactly.
|
|
71
|
+
3. Discover scorers through the documentation protocol (WebFetch llms.txt), never
|
|
72
|
+
`mlflow scorers list -b`; `references/scorers.md` covers built-in versus custom scorers
|
|
73
|
+
and registration. A custom judge follows `references/scorers-constraints.md`: `{{trace}}`
|
|
74
|
+
cannot mix with `{{inputs}}`/`{{outputs}}`, return values are "yes"/"no", and the
|
|
75
|
+
instructions carry at least one template variable.
|
|
76
|
+
|
|
77
|
+
## Phase 3: Evaluation Run and Analysis
|
|
78
|
+
1. `uv run python scripts/run_evaluation_template.py --module <module> --entry-point
|
|
79
|
+
<function> --dataset-name <dataset>` generates the run script from the template; execute
|
|
80
|
+
the generated script, then run the `mlflow traces evaluate` command it prints, redirecting
|
|
81
|
+
its output to `<output-dir>/evaluation_results.json` (the output-dir argument, not cwd).
|
|
82
|
+
2. `uv run python scripts/analyze_results.py <output-dir>/evaluation_results.json --output
|
|
83
|
+
<output-dir>/evaluation_report.md` computes the pass rate per scorer and writes the report
|
|
84
|
+
following `assets/evaluation_report_template.md`.
|
|
85
|
+
3. On a null or unexpected scorer output, or a high failure rate, read
|
|
86
|
+
`references/troubleshooting.md` before treating the run as final.
|
|
87
|
+
</workflow>
|
|
88
|
+
|
|
89
|
+
<output_contract>
|
|
90
|
+
Write every extensive payload to disk under the output directory (resolved against the
|
|
91
|
+
project root, never the skill's base directory), never into the reply:
|
|
92
|
+
- Raw results: `<output-dir>/evaluation_results.json`
|
|
93
|
+
- Final report: `<output-dir>/evaluation_report.md`
|
|
94
|
+
|
|
95
|
+
Each metric's threshold comes only from the eval-plan argument; with no eval-plan, report
|
|
96
|
+
`threshold: none` and `n/a` in place of Pass/Fail, never an invented threshold.
|
|
97
|
+
|
|
98
|
+
Reply in under 4,000 characters: the report path, then one line per scorer naming its
|
|
99
|
+
metric, threshold and Pass/Fail (for example `Correctness: 82% (threshold 80%) - Pass`, or
|
|
100
|
+
`Correctness: 82% (threshold: none) - n/a` with no eval-plan).
|
|
101
|
+
Never include raw JSON, individual trace payloads or CLI log output in the reply.
|
|
102
|
+
</output_contract>
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
# Agent Evaluation Report
|
|
2
|
+
|
|
3
|
+
**Agent**: [Agent Name]
|
|
4
|
+
**Date**: [YYYY-MM-DD]
|
|
5
|
+
**Evaluator**: [Name]
|
|
6
|
+
**Dataset**: [Dataset Name] ([N] queries)
|
|
7
|
+
|
|
8
|
+
## Executive Summary
|
|
9
|
+
|
|
10
|
+
[1-2 paragraph summary of key findings, overall performance, and main recommendations]
|
|
11
|
+
|
|
12
|
+
## Evaluation Setup
|
|
13
|
+
|
|
14
|
+
**Configuration**:
|
|
15
|
+
|
|
16
|
+
- **Tracking URI**: [URI]
|
|
17
|
+
- **Experiment ID**: [ID]
|
|
18
|
+
- **Dataset**: [Name] ([N] queries)
|
|
19
|
+
- **MLflow Version**: [version]
|
|
20
|
+
|
|
21
|
+
**Scorers Used**:
|
|
22
|
+
|
|
23
|
+
1. **[Scorer 1 Name]**: [Brief description of what it evaluates]
|
|
24
|
+
2. **[Scorer 2 Name]**: [Brief description]
|
|
25
|
+
3. **[Scorer 3 Name]**: [Brief description]
|
|
26
|
+
4. ...
|
|
27
|
+
|
|
28
|
+
## Results Overview
|
|
29
|
+
|
|
30
|
+
### Overall Performance
|
|
31
|
+
|
|
32
|
+
| Scorer | Pass Rate | Passed/Total | Grade |
|
|
33
|
+
| ------------------- | --------- | ------------ | ----------- |
|
|
34
|
+
| [Scorer 1] | [X]% | [Y]/[Z] | [A/B/C/F] |
|
|
35
|
+
| [Scorer 2] | [X]% | [Y]/[Z] | [A/B/C/F] |
|
|
36
|
+
| [Scorer 3] | [X]% | [Y]/[Z] | [A/B/C/F] |
|
|
37
|
+
| **Overall Average** | **[X]%** | **-** | **[Grade]** |
|
|
38
|
+
|
|
39
|
+
**Grading Scale**: A (90-100%), B (80-89%), C (70-79%), D (60-69%), F (<60%)
|
|
40
|
+
|
|
41
|
+
### Performance Distribution
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
█████████░░ 90% [Scorer 1]
|
|
45
|
+
███████░░░░ 70% [Scorer 2]
|
|
46
|
+
████████░░░ 80% [Scorer 3]
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Detailed Findings
|
|
50
|
+
|
|
51
|
+
### [Scorer 1 Name]
|
|
52
|
+
|
|
53
|
+
**Performance**: [Pass rate]% ([Passed]/[Total])
|
|
54
|
+
**Grade**: [A/B/C/D/F]
|
|
55
|
+
|
|
56
|
+
**Strengths**:
|
|
57
|
+
|
|
58
|
+
- [What worked well - specific examples]
|
|
59
|
+
- [Another strength]
|
|
60
|
+
|
|
61
|
+
**Issues**:
|
|
62
|
+
|
|
63
|
+
- [What didn't work - specific examples]
|
|
64
|
+
- [Another issue]
|
|
65
|
+
|
|
66
|
+
**Example Failures**:
|
|
67
|
+
|
|
68
|
+
1. **Query**: "[failing query]"
|
|
69
|
+
|
|
70
|
+
- **Issue**: [Why it failed]
|
|
71
|
+
- **Trace**: [trace_id or link]
|
|
72
|
+
|
|
73
|
+
2. **Query**: "[another failing query]"
|
|
74
|
+
- **Issue**: [Why it failed]
|
|
75
|
+
- **Trace**: [trace_id or link]
|
|
76
|
+
|
|
77
|
+
### [Scorer 2 Name]
|
|
78
|
+
|
|
79
|
+
[Same structure as above]
|
|
80
|
+
|
|
81
|
+
### [Scorer 3 Name]
|
|
82
|
+
|
|
83
|
+
[Same structure as above]
|
|
84
|
+
|
|
85
|
+
## Failure Pattern Analysis
|
|
86
|
+
|
|
87
|
+
### Pattern 1: [Pattern Name]
|
|
88
|
+
|
|
89
|
+
**Description**: [What is the pattern]
|
|
90
|
+
|
|
91
|
+
**Frequency**: [N queries affected] ([X]% of failures)
|
|
92
|
+
|
|
93
|
+
**Affected Queries**:
|
|
94
|
+
|
|
95
|
+
- "[example query 1]"
|
|
96
|
+
- "[example query 2]"
|
|
97
|
+
- "[example query 3]"
|
|
98
|
+
|
|
99
|
+
**Root Cause**: [Why this pattern occurs]
|
|
100
|
+
|
|
101
|
+
**Impact**: [Severity/importance]
|
|
102
|
+
|
|
103
|
+
### Pattern 2: [Pattern Name]
|
|
104
|
+
|
|
105
|
+
[Same structure as above]
|
|
106
|
+
|
|
107
|
+
### Pattern 3: [Pattern Name]
|
|
108
|
+
|
|
109
|
+
[Same structure as above]
|
|
110
|
+
|
|
111
|
+
## Recommendations
|
|
112
|
+
|
|
113
|
+
### Immediate Actions (High Priority)
|
|
114
|
+
|
|
115
|
+
1. **[Action Item 1]**
|
|
116
|
+
|
|
117
|
+
- **Issue**: [What problem this addresses]
|
|
118
|
+
- **Expected Impact**: [What will improve]
|
|
119
|
+
- **Effort**: [Low/Medium/High]
|
|
120
|
+
|
|
121
|
+
2. **[Action Item 2]**
|
|
122
|
+
- **Issue**: [What problem this addresses]
|
|
123
|
+
- **Expected Impact**: [What will improve]
|
|
124
|
+
- **Effort**: [Low/Medium/High]
|
|
125
|
+
|
|
126
|
+
### Short-Term Improvements (Medium Priority)
|
|
127
|
+
|
|
128
|
+
1. **[Action Item 3]**
|
|
129
|
+
|
|
130
|
+
- **Issue**: [What problem this addresses]
|
|
131
|
+
- **Expected Impact**: [What will improve]
|
|
132
|
+
- **Effort**: [Low/Medium/High]
|
|
133
|
+
|
|
134
|
+
2. **[Action Item 4]**
|
|
135
|
+
- **Issue**: [What problem this addresses]
|
|
136
|
+
- **Expected Impact**: [What will improve]
|
|
137
|
+
- **Effort**: [Low/Medium/High]
|
|
138
|
+
|
|
139
|
+
### Long-Term Enhancements (Low Priority)
|
|
140
|
+
|
|
141
|
+
1. **[Enhancement 1]**: [Description and expected impact]
|
|
142
|
+
2. **Enhancement 2]**: [Description and expected impact]
|
|
143
|
+
|
|
144
|
+
## Dataset Analysis
|
|
145
|
+
|
|
146
|
+
**Size**: [N] queries
|
|
147
|
+
**Diversity**: [High/Medium/Low]
|
|
148
|
+
|
|
149
|
+
**Query Distribution**:
|
|
150
|
+
|
|
151
|
+
- Short queries (<10 words): [N] ([X]%)
|
|
152
|
+
- Medium queries (10-20 words): [N] ([X]%)
|
|
153
|
+
- Long queries (>20 words): [N] ([X]%)
|
|
154
|
+
|
|
155
|
+
**Coverage Assessment**:
|
|
156
|
+
|
|
157
|
+
- ✓ [Covered capability 1]
|
|
158
|
+
- ✓ [Covered capability 2]
|
|
159
|
+
- ✗ [Missing capability 1] - **Consider adding queries for this**
|
|
160
|
+
- ✗ [Missing capability 2] - **Consider adding queries for this**
|
|
161
|
+
|
|
162
|
+
## Next Steps
|
|
163
|
+
|
|
164
|
+
1. **Address immediate actions** listed above
|
|
165
|
+
2. **Re-evaluate** after implementing fixes
|
|
166
|
+
3. **Expand dataset** to cover identified gaps
|
|
167
|
+
4. **Monitor production** for similar failure patterns
|
|
168
|
+
|
|
169
|
+
## Appendix
|
|
170
|
+
|
|
171
|
+
### Evaluation Run Details
|
|
172
|
+
|
|
173
|
+
**Run ID**: [mlflow_run_id]
|
|
174
|
+
**Run Name**: [run_name]
|
|
175
|
+
**Timestamp**: [timestamp]
|
|
176
|
+
**Duration**: [execution_time]
|
|
177
|
+
|
|
178
|
+
### Evaluation Command
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
mlflow traces evaluate \
|
|
182
|
+
--trace-ids [comma_separated_trace_ids] \
|
|
183
|
+
--scorers [comma_separated_scorers] \
|
|
184
|
+
--output json
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### All Trace IDs
|
|
188
|
+
|
|
189
|
+
```
|
|
190
|
+
[trace_id_1]
|
|
191
|
+
[trace_id_2]
|
|
192
|
+
[trace_id_3]
|
|
193
|
+
...
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
### Environment
|
|
197
|
+
|
|
198
|
+
- **Python Version**: [version]
|
|
199
|
+
- **MLflow Version**: [version]
|
|
200
|
+
- **Agent Library**: [library and version]
|
|
201
|
+
- **LLM Model**: [model used by agent]
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
**Report Generated**: [timestamp]
|
|
206
|
+
**Evaluation Framework**: MLflow Agent Evaluation
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# Eval cases for the agent-evaluation skill. Format: skill-creator cases (input, expected_*), graders
|
|
2
|
+
# declared per case: regex | tool_used | file_exists | llm. `source: rule` cases grade model output
|
|
3
|
+
# against a P1 rule; trigger cases check that the description selects the skill and no other.
|
|
4
|
+
# Runner: scripts/skill-evals.mjs. `source: dogfood` cases carry `dogfood: <date> <project>` (the
|
|
5
|
+
# .freeharness/dogfood.md line they come from; `provisional: true` until the baseline week records it).
|
|
6
|
+
skill: agent-evaluation
|
|
7
|
+
cases:
|
|
8
|
+
- id: trigger-agent-evaluation
|
|
9
|
+
source: rule
|
|
10
|
+
rule: skill-trigger
|
|
11
|
+
input: "Run the eval dataset for the transcription agent against the MLflow scorers and report WER per model; the eval-plan.md thresholds are the gate."
|
|
12
|
+
not_expected_skills:
|
|
13
|
+
- agent-evaluation
|
|
14
|
+
- agentic-architecture
|
|
15
|
+
- code-review
|
|
16
|
+
- git-workflow
|
|
17
|
+
- local-code
|
|
18
|
+
- report-formatting
|
|
19
|
+
- subagent-driven-development
|
|
20
|
+
- systematic-debugging
|
|
21
|
+
- test-driven-development
|
|
22
|
+
- verification-before-completion
|
|
23
|
+
graders:
|
|
24
|
+
- type: tool_used
|
|
25
|
+
not_expected:
|
|
26
|
+
- "Skill:agent-evaluation"
|
|
27
|
+
- "Skill:agentic-architecture"
|
|
28
|
+
- "Skill:code-review"
|
|
29
|
+
- "Skill:git-workflow"
|
|
30
|
+
- "Skill:local-code"
|
|
31
|
+
- "Skill:report-formatting"
|
|
32
|
+
- "Skill:subagent-driven-development"
|
|
33
|
+
- "Skill:systematic-debugging"
|
|
34
|
+
- "Skill:test-driven-development"
|
|
35
|
+
- "Skill:verification-before-completion"
|
|
36
|
+
ablation: false
|
|
37
|
+
|
|
38
|
+
- id: dogfood-agent-evaluation-ct-dataset
|
|
39
|
+
source: dogfood
|
|
40
|
+
dogfood: 2026-09-06 Copiloto
|
|
41
|
+
provisional: true
|
|
42
|
+
input: "/agent-evaluation copiloto.assistant:respond DOCs/US_Copiloto out/evals/ccda-43-44 out/evals/ccda-43-44/eval-plan.md — build the dataset for CCDA-43 and CCDA-44 from the acceptance criteria and add a scorer for the recommendation phrase; the engine decision itself is deterministic and must not be judged by an LLM."
|
|
43
|
+
expected: "Creates an MLflow 3.x GenAI dataset from the CT rows, one scorer per criterion with a judge only for the phrase, and replies with the report path and each scorer's metric with either Pass/Fail against the eval-plan thresholds or threshold: none / n/a naming the eval-plan as not found, never the dataset content itself."
|
|
44
|
+
fixtures:
|
|
45
|
+
eval_plan: |
|
|
46
|
+
# Eval plan: CCDA-43/44
|
|
47
|
+
- recommendation-phrase: threshold 0.9
|
|
48
|
+
graders:
|
|
49
|
+
- type: file_exists
|
|
50
|
+
path: "out/evals/ccda-43-44/evaluation_report.md"
|
|
51
|
+
- type: regex
|
|
52
|
+
expected: "out/evals/ccda-43-44/evaluation_report\\.md"
|
|
53
|
+
- type: regex
|
|
54
|
+
flags: i
|
|
55
|
+
expected: "threshold"
|
|
56
|
+
- type: llm
|
|
57
|
+
rubric: "Pass when the reply names the evaluation_report.md path under out/evals/ccda-43-44/ and lists each scorer's metric with either Pass/Fail against the eval-plan thresholds or threshold: none / n/a naming the eval-plan file as not found; fail when the reply carries dataset rows, raw JSON or trace payloads, or states a threshold the eval-plan does not name."
|
|
58
|
+
ablation: true
|
|
59
|
+
|
|
60
|
+
- id: dogfood-agent-evaluation-regression-delta
|
|
61
|
+
source: dogfood
|
|
62
|
+
dogfood: 2026-09-06 STT
|
|
63
|
+
provisional: true
|
|
64
|
+
input: "/agent-evaluation stt.diarization:transcribe stt-diarization-eval out/evals/diarization-v2-v3 out/evals/diarization-v2-v3/eval-plan.md — we changed the diarization prompt from v2 to v3; run the retrieval and transcript-quality evals for both versions on the same dataset and flag any scorer that dropped more than 2 points."
|
|
65
|
+
expected: "Runs both versions on the same dataset, writes the per-scorer delta and each regression above the 2-point threshold into the report, and replies with only the report path and, per metric, either the threshold/Pass-Fail line against the eval-plan or threshold: none / n/a naming the eval-plan as not found."
|
|
66
|
+
fixtures:
|
|
67
|
+
eval_plan: |
|
|
68
|
+
# Eval plan: diarization v2/v3
|
|
69
|
+
- retrieval: threshold 0.85
|
|
70
|
+
- transcript-quality: threshold 0.8
|
|
71
|
+
graders:
|
|
72
|
+
- type: file_exists
|
|
73
|
+
path: "out/evals/diarization-v2-v3/evaluation_report.md"
|
|
74
|
+
- type: regex
|
|
75
|
+
expected: "out/evals/diarization-v2-v3/evaluation_report\\.md"
|
|
76
|
+
- type: regex
|
|
77
|
+
flags: i
|
|
78
|
+
expected: "threshold"
|
|
79
|
+
- type: llm
|
|
80
|
+
rubric: "Pass when the reply names the evaluation_report.md path under out/evals/diarization-v2-v3/ and lists each scorer's metric with either Pass/Fail against the eval-plan thresholds or threshold: none / n/a naming the eval-plan file as not found; the v2/v3 delta and regression detail belong in the report file, so the reply is not graded on carrying them; fail when the reply states a threshold the eval-plan does not name."
|
|
81
|
+
ablation: true
|
|
82
|
+
|
|
83
|
+
- id: dogfood-agent-evaluation-retrieval-quality
|
|
84
|
+
source: dogfood
|
|
85
|
+
dogfood: 2026-09-06 GPU-FreeHarness
|
|
86
|
+
provisional: true
|
|
87
|
+
input: "/agent-evaluation rag.retriever:search out/evals/retrieval-cases.jsonl out/evals/retrieval-quality out/evals/retrieval-quality/eval-plan.md — benchmark retrieval quality (recall@5, precision@5) for the local pgvector index against the retrieval-cases dataset; the eval-plan.md thresholds are the gate."
|
|
88
|
+
expected: "Runs the retrieval scorers (recall@5, precision@5) and replies with the report path and, per scorer, either the threshold/Pass-Fail line against the eval-plan.md thresholds or threshold: none / n/a naming the eval-plan as not found, never a raw JSON dump."
|
|
89
|
+
fixtures:
|
|
90
|
+
eval_plan: |
|
|
91
|
+
# Eval plan: retrieval quality
|
|
92
|
+
- recall@5: threshold 0.75
|
|
93
|
+
- precision@5: threshold 0.7
|
|
94
|
+
graders:
|
|
95
|
+
- type: file_exists
|
|
96
|
+
path: "out/evals/retrieval-quality/evaluation_report.md"
|
|
97
|
+
- type: regex
|
|
98
|
+
expected: "out/evals/retrieval-quality/evaluation_report\\.md"
|
|
99
|
+
- type: regex
|
|
100
|
+
flags: i
|
|
101
|
+
expected: "threshold"
|
|
102
|
+
- type: tool_used
|
|
103
|
+
expected: "Bash:uv run"
|
|
104
|
+
- type: llm
|
|
105
|
+
rubric: "Pass when the reply names the report path and lists recall@5 and precision@5, each with either Pass/Fail against the eval-plan thresholds or threshold: none / n/a naming the eval-plan file as not found, and carries no raw JSON or trace payload; fail when the reply states a threshold the eval-plan does not name."
|
|
106
|
+
ablation: true
|