@harness-engineering/cli 1.13.0 → 1.14.0
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/dist/agents/skills/claude-code/add-harness-component/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/align-documentation/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/check-mechanical-constraints/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/cleanup-dead-code/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/detect-doc-drift/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/enforce-architecture/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-accessibility/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-api-design/SKILL.md +304 -0
- package/dist/agents/skills/claude-code/harness-api-design/skill.yaml +74 -0
- package/dist/agents/skills/claude-code/harness-architecture-advisor/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-auth/SKILL.md +279 -0
- package/dist/agents/skills/claude-code/harness-auth/skill.yaml +81 -0
- package/dist/agents/skills/claude-code/harness-autopilot/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-brainstorming/SKILL.md +39 -0
- package/dist/agents/skills/claude-code/harness-brainstorming/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-caching/SKILL.md +309 -0
- package/dist/agents/skills/claude-code/harness-caching/skill.yaml +73 -0
- package/dist/agents/skills/claude-code/harness-chaos/SKILL.md +295 -0
- package/dist/agents/skills/claude-code/harness-chaos/skill.yaml +72 -0
- package/dist/agents/skills/claude-code/harness-code-review/SKILL.md +44 -0
- package/dist/agents/skills/claude-code/harness-code-review/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-codebase-cleanup/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-compliance/SKILL.md +303 -0
- package/dist/agents/skills/claude-code/harness-compliance/skill.yaml +78 -0
- package/dist/agents/skills/claude-code/harness-containerization/SKILL.md +284 -0
- package/dist/agents/skills/claude-code/harness-containerization/skill.yaml +80 -0
- package/dist/agents/skills/claude-code/harness-data-pipeline/SKILL.md +274 -0
- package/dist/agents/skills/claude-code/harness-data-pipeline/skill.yaml +81 -0
- package/dist/agents/skills/claude-code/harness-data-validation/SKILL.md +343 -0
- package/dist/agents/skills/claude-code/harness-data-validation/skill.yaml +75 -0
- package/dist/agents/skills/claude-code/harness-database/SKILL.md +258 -0
- package/dist/agents/skills/claude-code/harness-database/skill.yaml +80 -0
- package/dist/agents/skills/claude-code/harness-debugging/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-dependency-health/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-deployment/SKILL.md +255 -0
- package/dist/agents/skills/claude-code/harness-deployment/skill.yaml +77 -0
- package/dist/agents/skills/claude-code/harness-design/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-design-mobile/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-design-system/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-design-web/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-diagnostics/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-docs-pipeline/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-dx/SKILL.md +276 -0
- package/dist/agents/skills/claude-code/harness-dx/skill.yaml +76 -0
- package/dist/agents/skills/claude-code/harness-e2e/SKILL.md +245 -0
- package/dist/agents/skills/claude-code/harness-e2e/skill.yaml +78 -0
- package/dist/agents/skills/claude-code/harness-event-driven/SKILL.md +280 -0
- package/dist/agents/skills/claude-code/harness-event-driven/skill.yaml +77 -0
- package/dist/agents/skills/claude-code/harness-execution/SKILL.md +44 -0
- package/dist/agents/skills/claude-code/harness-execution/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-feature-flags/SKILL.md +287 -0
- package/dist/agents/skills/claude-code/harness-feature-flags/skill.yaml +74 -0
- package/dist/agents/skills/claude-code/harness-git-workflow/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-hotspot-detector/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-i18n/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-i18n-process/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-i18n-workflow/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-impact-analysis/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-incident-response/SKILL.md +223 -0
- package/dist/agents/skills/claude-code/harness-incident-response/skill.yaml +78 -0
- package/dist/agents/skills/claude-code/harness-infrastructure-as-code/SKILL.md +279 -0
- package/dist/agents/skills/claude-code/harness-infrastructure-as-code/skill.yaml +80 -0
- package/dist/agents/skills/claude-code/harness-integration-test/SKILL.md +271 -0
- package/dist/agents/skills/claude-code/harness-integration-test/skill.yaml +73 -0
- package/dist/agents/skills/claude-code/harness-integrity/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-knowledge-mapper/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-load-testing/SKILL.md +274 -0
- package/dist/agents/skills/claude-code/harness-load-testing/skill.yaml +79 -0
- package/dist/agents/skills/claude-code/harness-ml-ops/SKILL.md +341 -0
- package/dist/agents/skills/claude-code/harness-ml-ops/skill.yaml +79 -0
- package/dist/agents/skills/claude-code/harness-mobile-patterns/SKILL.md +326 -0
- package/dist/agents/skills/claude-code/harness-mobile-patterns/skill.yaml +82 -0
- package/dist/agents/skills/claude-code/harness-mutation-test/SKILL.md +251 -0
- package/dist/agents/skills/claude-code/harness-mutation-test/skill.yaml +70 -0
- package/dist/agents/skills/claude-code/harness-observability/SKILL.md +283 -0
- package/dist/agents/skills/claude-code/harness-observability/skill.yaml +78 -0
- package/dist/agents/skills/claude-code/harness-onboarding/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-parallel-agents/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-perf/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-perf-tdd/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-planning/SKILL.md +39 -0
- package/dist/agents/skills/claude-code/harness-planning/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-pre-commit-review/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-product-spec/SKILL.md +285 -0
- package/dist/agents/skills/claude-code/harness-product-spec/skill.yaml +72 -0
- package/dist/agents/skills/claude-code/harness-property-test/SKILL.md +281 -0
- package/dist/agents/skills/claude-code/harness-property-test/skill.yaml +71 -0
- package/dist/agents/skills/claude-code/harness-refactoring/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-release-readiness/SKILL.md +3 -3
- package/dist/agents/skills/claude-code/harness-release-readiness/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-resilience/SKILL.md +255 -0
- package/dist/agents/skills/claude-code/harness-resilience/skill.yaml +76 -0
- package/dist/agents/skills/claude-code/harness-roadmap/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-secrets/SKILL.md +293 -0
- package/dist/agents/skills/claude-code/harness-secrets/skill.yaml +76 -0
- package/dist/agents/skills/claude-code/harness-security-review/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-security-scan/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-skill-authoring/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-soundness-review/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-sql-review/SKILL.md +315 -0
- package/dist/agents/skills/claude-code/harness-sql-review/skill.yaml +74 -0
- package/dist/agents/skills/claude-code/harness-state-management/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-tdd/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-test-advisor/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-test-data/SKILL.md +268 -0
- package/dist/agents/skills/claude-code/harness-test-data/skill.yaml +74 -0
- package/dist/agents/skills/claude-code/harness-ux-copy/SKILL.md +271 -0
- package/dist/agents/skills/claude-code/harness-ux-copy/skill.yaml +77 -0
- package/dist/agents/skills/claude-code/harness-verification/SKILL.md +35 -0
- package/dist/agents/skills/claude-code/harness-verification/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-verify/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-visual-regression/SKILL.md +257 -0
- package/dist/agents/skills/claude-code/harness-visual-regression/skill.yaml +74 -0
- package/dist/agents/skills/claude-code/initialize-harness-project/SKILL.md +11 -3
- package/dist/agents/skills/claude-code/initialize-harness-project/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/validate-context-engineering/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/add-harness-component/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/align-documentation/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/check-mechanical-constraints/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/cleanup-dead-code/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/detect-doc-drift/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/enforce-architecture/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-accessibility/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-api-design/SKILL.md +304 -0
- package/dist/agents/skills/gemini-cli/harness-api-design/skill.yaml +74 -0
- package/dist/agents/skills/gemini-cli/harness-architecture-advisor/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-auth/SKILL.md +279 -0
- package/dist/agents/skills/gemini-cli/harness-auth/skill.yaml +81 -0
- package/dist/agents/skills/gemini-cli/harness-autopilot/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-brainstorming/SKILL.md +39 -0
- package/dist/agents/skills/gemini-cli/harness-brainstorming/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-caching/SKILL.md +309 -0
- package/dist/agents/skills/gemini-cli/harness-caching/skill.yaml +73 -0
- package/dist/agents/skills/gemini-cli/harness-chaos/SKILL.md +295 -0
- package/dist/agents/skills/gemini-cli/harness-chaos/skill.yaml +72 -0
- package/dist/agents/skills/gemini-cli/harness-code-review/SKILL.md +44 -0
- package/dist/agents/skills/gemini-cli/harness-code-review/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-codebase-cleanup/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-compliance/SKILL.md +303 -0
- package/dist/agents/skills/gemini-cli/harness-compliance/skill.yaml +78 -0
- package/dist/agents/skills/gemini-cli/harness-containerization/SKILL.md +284 -0
- package/dist/agents/skills/gemini-cli/harness-containerization/skill.yaml +80 -0
- package/dist/agents/skills/gemini-cli/harness-data-pipeline/SKILL.md +274 -0
- package/dist/agents/skills/gemini-cli/harness-data-pipeline/skill.yaml +81 -0
- package/dist/agents/skills/gemini-cli/harness-data-validation/SKILL.md +343 -0
- package/dist/agents/skills/gemini-cli/harness-data-validation/skill.yaml +75 -0
- package/dist/agents/skills/gemini-cli/harness-database/SKILL.md +258 -0
- package/dist/agents/skills/gemini-cli/harness-database/skill.yaml +80 -0
- package/dist/agents/skills/gemini-cli/harness-debugging/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-dependency-health/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-deployment/SKILL.md +255 -0
- package/dist/agents/skills/gemini-cli/harness-deployment/skill.yaml +77 -0
- package/dist/agents/skills/gemini-cli/harness-design/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-design-mobile/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-design-system/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-design-web/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-diagnostics/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-docs-pipeline/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-dx/SKILL.md +276 -0
- package/dist/agents/skills/gemini-cli/harness-dx/skill.yaml +76 -0
- package/dist/agents/skills/gemini-cli/harness-e2e/SKILL.md +245 -0
- package/dist/agents/skills/gemini-cli/harness-e2e/skill.yaml +78 -0
- package/dist/agents/skills/gemini-cli/harness-event-driven/SKILL.md +280 -0
- package/dist/agents/skills/gemini-cli/harness-event-driven/skill.yaml +77 -0
- package/dist/agents/skills/gemini-cli/harness-execution/SKILL.md +44 -0
- package/dist/agents/skills/gemini-cli/harness-execution/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-feature-flags/SKILL.md +287 -0
- package/dist/agents/skills/gemini-cli/harness-feature-flags/skill.yaml +74 -0
- package/dist/agents/skills/gemini-cli/harness-git-workflow/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-hotspot-detector/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-i18n/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-i18n-process/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-i18n-workflow/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-impact-analysis/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-incident-response/SKILL.md +223 -0
- package/dist/agents/skills/gemini-cli/harness-incident-response/skill.yaml +78 -0
- package/dist/agents/skills/gemini-cli/harness-infrastructure-as-code/SKILL.md +279 -0
- package/dist/agents/skills/gemini-cli/harness-infrastructure-as-code/skill.yaml +80 -0
- package/dist/agents/skills/gemini-cli/harness-integration-test/SKILL.md +271 -0
- package/dist/agents/skills/gemini-cli/harness-integration-test/skill.yaml +73 -0
- package/dist/agents/skills/gemini-cli/harness-integrity/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-knowledge-mapper/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-load-testing/SKILL.md +274 -0
- package/dist/agents/skills/gemini-cli/harness-load-testing/skill.yaml +79 -0
- package/dist/agents/skills/gemini-cli/harness-ml-ops/SKILL.md +341 -0
- package/dist/agents/skills/gemini-cli/harness-ml-ops/skill.yaml +79 -0
- package/dist/agents/skills/gemini-cli/harness-mobile-patterns/SKILL.md +326 -0
- package/dist/agents/skills/gemini-cli/harness-mobile-patterns/skill.yaml +82 -0
- package/dist/agents/skills/gemini-cli/harness-mutation-test/SKILL.md +251 -0
- package/dist/agents/skills/gemini-cli/harness-mutation-test/skill.yaml +70 -0
- package/dist/agents/skills/gemini-cli/harness-observability/SKILL.md +283 -0
- package/dist/agents/skills/gemini-cli/harness-observability/skill.yaml +78 -0
- package/dist/agents/skills/gemini-cli/harness-onboarding/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-parallel-agents/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-perf/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-perf-tdd/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-planning/SKILL.md +39 -0
- package/dist/agents/skills/gemini-cli/harness-planning/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-pre-commit-review/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-product-spec/SKILL.md +285 -0
- package/dist/agents/skills/gemini-cli/harness-product-spec/skill.yaml +72 -0
- package/dist/agents/skills/gemini-cli/harness-property-test/SKILL.md +281 -0
- package/dist/agents/skills/gemini-cli/harness-property-test/skill.yaml +71 -0
- package/dist/agents/skills/gemini-cli/harness-refactoring/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-release-readiness/SKILL.md +3 -3
- package/dist/agents/skills/gemini-cli/harness-release-readiness/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-resilience/SKILL.md +255 -0
- package/dist/agents/skills/gemini-cli/harness-resilience/skill.yaml +76 -0
- package/dist/agents/skills/gemini-cli/harness-roadmap/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-secrets/SKILL.md +293 -0
- package/dist/agents/skills/gemini-cli/harness-secrets/skill.yaml +76 -0
- package/dist/agents/skills/gemini-cli/harness-security-review/SKILL.md +240 -0
- package/dist/agents/skills/gemini-cli/harness-security-review/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-security-scan/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-skill-authoring/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-soundness-review/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-sql-review/SKILL.md +315 -0
- package/dist/agents/skills/gemini-cli/harness-sql-review/skill.yaml +74 -0
- package/dist/agents/skills/gemini-cli/harness-state-management/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-tdd/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-test-advisor/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-test-data/SKILL.md +268 -0
- package/dist/agents/skills/gemini-cli/harness-test-data/skill.yaml +74 -0
- package/dist/agents/skills/gemini-cli/harness-ux-copy/SKILL.md +271 -0
- package/dist/agents/skills/gemini-cli/harness-ux-copy/skill.yaml +77 -0
- package/dist/agents/skills/gemini-cli/harness-verification/SKILL.md +35 -0
- package/dist/agents/skills/gemini-cli/harness-verification/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-verify/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-visual-regression/SKILL.md +257 -0
- package/dist/agents/skills/gemini-cli/harness-visual-regression/skill.yaml +74 -0
- package/dist/agents/skills/gemini-cli/initialize-harness-project/SKILL.md +11 -3
- package/dist/agents/skills/gemini-cli/initialize-harness-project/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/validate-context-engineering/skill.yaml +1 -0
- package/dist/agents-md-YTYQDA3P.js +8 -0
- package/dist/{architecture-ESOOE26S.js → architecture-JQZYM4US.js} +4 -4
- package/dist/bin/harness-mcp.js +16 -15
- package/dist/bin/harness.js +31 -30
- package/dist/{check-phase-gate-S2MZKLFQ.js → check-phase-gate-L3RADYWO.js} +4 -3
- package/dist/{chunk-WPPDRIJL.js → chunk-3C2MLBPJ.js} +4 -4
- package/dist/chunk-6KTUUFRN.js +217 -0
- package/dist/{chunk-MI5XJQDY.js → chunk-7IP4JIFL.js} +24 -10
- package/dist/{chunk-C2ERUR3L.js → chunk-7MJAPE3Z.js} +165 -49
- package/dist/{chunk-KELT6K6M.js → chunk-ABQHQ6I5.js} +1861 -1418
- package/dist/{chunk-L2KLU56K.js → chunk-AOZRDOIP.js} +2 -2
- package/dist/{chunk-QPEH2QPG.js → chunk-DBSOCI3G.js} +53 -54
- package/dist/{chunk-MHBMTPW7.js → chunk-ERS5EVUZ.js} +9 -0
- package/dist/{chunk-JSTQ3AWB.js → chunk-FIAPHX37.js} +1 -1
- package/dist/{chunk-2YPZKGAG.js → chunk-FTMXDOR6.js} +1 -1
- package/dist/{chunk-72GHBOL2.js → chunk-GZKSBLQL.js} +1 -1
- package/dist/{chunk-K6XAPGML.js → chunk-H7Y5CKTM.js} +1 -1
- package/dist/{chunk-HD4IBGLA.js → chunk-N5G5QMS3.js} +24 -1
- package/dist/{chunk-LD3DKUK5.js → chunk-NLVUVUGD.js} +1 -1
- package/dist/{chunk-3KOLLWWE.js → chunk-O5OJVPL6.js} +26 -211
- package/dist/{chunk-NKDM3FMH.js → chunk-OD3S2NHN.js} +1 -1
- package/dist/{chunk-5VY23YK3.js → chunk-OSXBPAMK.js} +2 -2
- package/dist/{chunk-MACVXDZK.js → chunk-OXLLOSSR.js} +45 -47
- package/dist/{chunk-GNGELAXY.js → chunk-RCWZBSK5.js} +2 -2
- package/dist/{chunk-PSNN4LWX.js → chunk-S2FXOWOR.js} +3 -3
- package/dist/{chunk-VUCPTQ6G.js → chunk-SD3SQOZ2.js} +1 -1
- package/dist/{chunk-7PZWR4LI.js → chunk-TPOTOBR7.js} +9 -9
- package/dist/{chunk-RZSUJBZZ.js → chunk-XKECDXJS.js} +452 -353
- package/dist/{chunk-VRFZWGMS.js → chunk-XYLGHKG6.js} +5 -1
- package/dist/{chunk-6N4R6FVX.js → chunk-YBJ262QL.js} +1 -1
- package/dist/{chunk-2VU4MFM3.js → chunk-YPYGXRDR.js} +7 -7
- package/dist/{chunk-Q6AB7W5Z.js → chunk-YQ6KC6TE.js} +1 -1
- package/dist/{chunk-7KQSUZVG.js → chunk-YZD2MRNQ.js} +1528 -1010
- package/dist/ci-workflow-EQZFVX3P.js +8 -0
- package/dist/{create-skill-WPXHSLX2.js → create-skill-XSWHMSM5.js} +2 -2
- package/dist/{dist-M6BQODWC.js → dist-B26DFXMP.js} +573 -480
- package/dist/{dist-L7LAAQAS.js → dist-DZ63LLUD.js} +1 -1
- package/dist/{dist-WF4C7A4A.js → dist-HWXF2C3R.js} +18 -2
- package/dist/{dist-D4RYGUZE.js → dist-USY2C5JL.js} +3 -1
- package/dist/{docs-BPYCN2DR.js → docs-7ECGYMAV.js} +5 -3
- package/dist/engine-EG4EH4IX.js +8 -0
- package/dist/{entropy-4VDVV5CR.js → entropy-5USWKLVS.js} +3 -3
- package/dist/{feedback-63QB5RCA.js → feedback-UTBXZZHF.js} +1 -1
- package/dist/{generate-agent-definitions-QABOJG56.js → generate-agent-definitions-3PM5EU7V.js} +5 -5
- package/dist/{glob-helper-5OHBUQAI.js → glob-helper-R5FXNUPS.js} +1 -1
- package/dist/{graph-loader-KO4GJ5N2.js → graph-loader-2M2HXDQI.js} +1 -1
- package/dist/index.d.ts +183 -17
- package/dist/index.js +32 -30
- package/dist/loader-ZPALXIVR.js +10 -0
- package/dist/mcp-362EZHF4.js +35 -0
- package/dist/{performance-26BH47O4.js → performance-OQAFMJUD.js} +3 -3
- package/dist/{review-pipeline-GHR3WFBI.js → review-pipeline-C4GCFVGP.js} +1 -1
- package/dist/runtime-7YLVK453.js +9 -0
- package/dist/{security-UQFUZXEN.js → security-PZOX7AQS.js} +1 -1
- package/dist/skill-executor-XZLYZYAK.js +8 -0
- package/dist/templates/axum/Cargo.toml.hbs +8 -0
- package/dist/templates/axum/src/main.rs +12 -0
- package/dist/templates/axum/template.json +16 -0
- package/dist/templates/django/manage.py.hbs +19 -0
- package/dist/templates/django/requirements.txt.hbs +1 -0
- package/dist/templates/django/src/settings.py.hbs +44 -0
- package/dist/templates/django/src/urls.py +6 -0
- package/dist/templates/django/src/wsgi.py.hbs +9 -0
- package/dist/templates/django/template.json +21 -0
- package/dist/templates/express/package.json.hbs +15 -0
- package/dist/templates/express/src/app.ts +12 -0
- package/dist/templates/express/src/lib/.gitkeep +0 -0
- package/dist/templates/express/template.json +16 -0
- package/dist/templates/fastapi/requirements.txt.hbs +2 -0
- package/dist/templates/fastapi/src/main.py +8 -0
- package/dist/templates/fastapi/template.json +20 -0
- package/dist/templates/gin/go.mod.hbs +5 -0
- package/dist/templates/gin/main.go +15 -0
- package/dist/templates/gin/template.json +19 -0
- package/dist/templates/go-base/.golangci.yml +16 -0
- package/dist/templates/go-base/AGENTS.md.hbs +35 -0
- package/dist/templates/go-base/go.mod.hbs +3 -0
- package/dist/templates/go-base/harness.config.json.hbs +17 -0
- package/dist/templates/go-base/main.go +7 -0
- package/dist/templates/go-base/template.json +14 -0
- package/dist/templates/java-base/AGENTS.md.hbs +35 -0
- package/dist/templates/java-base/checkstyle.xml +20 -0
- package/dist/templates/java-base/harness.config.json.hbs +16 -0
- package/dist/templates/java-base/pom.xml.hbs +39 -0
- package/dist/templates/java-base/src/main/java/App.java.hbs +5 -0
- package/dist/templates/java-base/template.json +13 -0
- package/dist/templates/nestjs/nest-cli.json +5 -0
- package/dist/templates/nestjs/package.json.hbs +18 -0
- package/dist/templates/nestjs/src/app.module.ts +8 -0
- package/dist/templates/nestjs/src/lib/.gitkeep +0 -0
- package/dist/templates/nestjs/src/main.ts +11 -0
- package/dist/templates/nestjs/template.json +16 -0
- package/dist/templates/nextjs/template.json +15 -1
- package/dist/templates/python-base/.python-version +1 -0
- package/dist/templates/python-base/AGENTS.md.hbs +32 -0
- package/dist/templates/python-base/harness.config.json.hbs +16 -0
- package/dist/templates/python-base/pyproject.toml.hbs +18 -0
- package/dist/templates/python-base/ruff.toml +5 -0
- package/dist/templates/python-base/src/__init__.py +0 -0
- package/dist/templates/python-base/template.json +13 -0
- package/dist/templates/react-vite/index.html +12 -0
- package/dist/templates/react-vite/package.json.hbs +18 -0
- package/dist/templates/react-vite/src/App.tsx +7 -0
- package/dist/templates/react-vite/src/lib/.gitkeep +0 -0
- package/dist/templates/react-vite/src/main.tsx +9 -0
- package/dist/templates/react-vite/template.json +19 -0
- package/dist/templates/react-vite/vite.config.ts +6 -0
- package/dist/templates/rust-base/AGENTS.md.hbs +35 -0
- package/dist/templates/rust-base/Cargo.toml.hbs +6 -0
- package/dist/templates/rust-base/clippy.toml +2 -0
- package/dist/templates/rust-base/harness.config.json.hbs +17 -0
- package/dist/templates/rust-base/src/main.rs +3 -0
- package/dist/templates/rust-base/template.json +14 -0
- package/dist/templates/spring-boot/pom.xml.hbs +50 -0
- package/dist/templates/spring-boot/src/main/java/Application.java.hbs +19 -0
- package/dist/templates/spring-boot/template.json +15 -0
- package/dist/templates/vue/index.html +12 -0
- package/dist/templates/vue/package.json.hbs +16 -0
- package/dist/templates/vue/src/App.vue +7 -0
- package/dist/templates/vue/src/lib/.gitkeep +0 -0
- package/dist/templates/vue/src/main.ts +4 -0
- package/dist/templates/vue/template.json +19 -0
- package/dist/templates/vue/vite.config.ts +6 -0
- package/dist/{validate-N7QJOKFZ.js → validate-FD3Z6VJD.js} +4 -4
- package/dist/validate-cross-check-WNJM6H2D.js +8 -0
- package/package.json +6 -6
- package/dist/agents-md-P2RHSUV7.js +0 -8
- package/dist/ci-workflow-4NYBUG6R.js +0 -8
- package/dist/engine-LXLIWQQ3.js +0 -8
- package/dist/loader-Z2IT7QX3.js +0 -10
- package/dist/mcp-KQHEL5IF.js +0 -34
- package/dist/runtime-PDWD7UIK.js +0 -9
- package/dist/skill-executor-RG45LUO5.js +0 -8
- package/dist/validate-cross-check-EDQ5QGTM.js +0 -8
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
name: harness-mutation-test
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
description: Test quality validation through mutation testing with Stryker and mutation scoring
|
|
4
|
+
cognitive_mode: adversarial-reviewer
|
|
5
|
+
triggers:
|
|
6
|
+
- manual
|
|
7
|
+
- on_milestone
|
|
8
|
+
platforms:
|
|
9
|
+
- claude-code
|
|
10
|
+
- gemini-cli
|
|
11
|
+
tools:
|
|
12
|
+
- Bash
|
|
13
|
+
- Read
|
|
14
|
+
- Write
|
|
15
|
+
- Edit
|
|
16
|
+
- Glob
|
|
17
|
+
- Grep
|
|
18
|
+
- emit_interaction
|
|
19
|
+
cli:
|
|
20
|
+
command: harness skill run harness-mutation-test
|
|
21
|
+
args:
|
|
22
|
+
- name: path
|
|
23
|
+
description: Project root path
|
|
24
|
+
required: false
|
|
25
|
+
- name: target
|
|
26
|
+
description: "Target file or directory for mutation testing. Runs project-wide when omitted."
|
|
27
|
+
required: false
|
|
28
|
+
- name: threshold
|
|
29
|
+
description: "Minimum mutation score (0-100). Defaults to 80."
|
|
30
|
+
required: false
|
|
31
|
+
mcp:
|
|
32
|
+
tool: run_skill
|
|
33
|
+
input:
|
|
34
|
+
skill: harness-mutation-test
|
|
35
|
+
path: string
|
|
36
|
+
type: rigid
|
|
37
|
+
tier: 3
|
|
38
|
+
internal: false
|
|
39
|
+
keywords:
|
|
40
|
+
- mutation testing
|
|
41
|
+
- Stryker
|
|
42
|
+
- mutant
|
|
43
|
+
- mutation score
|
|
44
|
+
- test quality
|
|
45
|
+
- test effectiveness
|
|
46
|
+
- survived mutant
|
|
47
|
+
- killed mutant
|
|
48
|
+
- test strength
|
|
49
|
+
stack_signals:
|
|
50
|
+
- "stryker.conf.*"
|
|
51
|
+
- ".stryker-tmp/"
|
|
52
|
+
- "mutation-report/"
|
|
53
|
+
- "stryker.config.*"
|
|
54
|
+
phases:
|
|
55
|
+
- name: configure
|
|
56
|
+
description: Set up mutation testing framework, identify target modules, and define mutant operators
|
|
57
|
+
required: true
|
|
58
|
+
- name: generate
|
|
59
|
+
description: Generate mutants by applying code transformations to production source
|
|
60
|
+
required: true
|
|
61
|
+
- name: execute
|
|
62
|
+
description: Run test suite against each mutant and classify as killed or survived
|
|
63
|
+
required: true
|
|
64
|
+
- name: analyze
|
|
65
|
+
description: Calculate mutation score, identify weak tests, and recommend improvements
|
|
66
|
+
required: true
|
|
67
|
+
state:
|
|
68
|
+
persistent: false
|
|
69
|
+
files: []
|
|
70
|
+
depends_on: []
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
# Harness Observability
|
|
2
|
+
|
|
3
|
+
> Structured logging, metrics, distributed tracing, and alerting strategy. The three pillars of observability, assessed and designed for production readiness.
|
|
4
|
+
|
|
5
|
+
## When to Use
|
|
6
|
+
|
|
7
|
+
- When designing or reviewing observability instrumentation for a service
|
|
8
|
+
- When auditing logging, metrics, or tracing coverage gaps
|
|
9
|
+
- When defining SLIs, SLOs, and alerting strategies for a new feature
|
|
10
|
+
- NOT for application performance benchmarking (use harness-perf)
|
|
11
|
+
- NOT for security-focused log analysis (use harness-security-review)
|
|
12
|
+
- NOT for incident response procedures (use harness-incident-response)
|
|
13
|
+
|
|
14
|
+
## Process
|
|
15
|
+
|
|
16
|
+
### Phase 1: DETECT -- Identify Existing Instrumentation
|
|
17
|
+
|
|
18
|
+
1. **Scan for observability libraries.** Check package manifests for instrumentation dependencies:
|
|
19
|
+
- **Logging:** winston, pino, bunyan, log4js, structlog, serilog, zap, logrus
|
|
20
|
+
- **Metrics:** prom-client, micrometer, statsd-client, @opentelemetry/sdk-metrics
|
|
21
|
+
- **Tracing:** @opentelemetry/sdk-trace-node, dd-trace, jaeger-client, zipkin
|
|
22
|
+
- **Platforms:** @datadog/browser-rum, newrelic, @sentry/node, elastic-apm-node
|
|
23
|
+
|
|
24
|
+
2. **Locate instrumentation code.** Search for logger, metrics, and tracing initialization:
|
|
25
|
+
- Logger configuration files (log levels, formatters, transports)
|
|
26
|
+
- Metrics registry and custom metric definitions
|
|
27
|
+
- Tracer initialization and span creation patterns
|
|
28
|
+
- Middleware for automatic HTTP instrumentation
|
|
29
|
+
|
|
30
|
+
3. **Detect collector and exporter configuration.** Look for:
|
|
31
|
+
- OpenTelemetry Collector config (`otel-collector-config.yaml`)
|
|
32
|
+
- Prometheus scrape configuration (`prometheus.yml`)
|
|
33
|
+
- Grafana dashboards (`grafana/dashboards/`)
|
|
34
|
+
- Datadog agent configuration (`datadog.yaml`)
|
|
35
|
+
- Fluentd or Fluent Bit configuration for log forwarding
|
|
36
|
+
|
|
37
|
+
4. **Identify alerting configuration.** Search for:
|
|
38
|
+
- Prometheus alerting rules (`alert.rules.yml`)
|
|
39
|
+
- Grafana alert definitions
|
|
40
|
+
- PagerDuty, Opsgenie, or Slack integration configs
|
|
41
|
+
- SLO definitions in monitoring-as-code format
|
|
42
|
+
|
|
43
|
+
5. **Present detection summary:**
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
Observability Detection:
|
|
47
|
+
Logging: pino (structured JSON) -- 12 logger instances found
|
|
48
|
+
Metrics: prom-client -- 8 custom metrics defined
|
|
49
|
+
Tracing: @opentelemetry/sdk-trace-node -- initialized in src/tracing.ts
|
|
50
|
+
Collector: OpenTelemetry Collector -> Grafana Cloud
|
|
51
|
+
Alerting: 3 Prometheus alert rules, Slack integration
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
### Phase 2: AUDIT -- Evaluate Coverage and Quality
|
|
57
|
+
|
|
58
|
+
1. **Audit logging quality.** Evaluate each logger usage for:
|
|
59
|
+
- **Structured format:** JSON output with consistent field names, not string concatenation
|
|
60
|
+
- **Log levels:** Appropriate use of error, warn, info, debug (not everything at info)
|
|
61
|
+
- **Context fields:** Request ID, user ID, operation name included in log entries
|
|
62
|
+
- **Correlation IDs:** Trace ID propagated through log entries for cross-service correlation
|
|
63
|
+
- **Sensitive data:** No PII, credentials, or tokens logged
|
|
64
|
+
- **Error logging:** Stack traces included for errors, not just error messages
|
|
65
|
+
|
|
66
|
+
2. **Audit metrics coverage.** Check for standard metrics:
|
|
67
|
+
- **RED metrics:** Request rate, error rate, duration for every HTTP endpoint
|
|
68
|
+
- **USE metrics:** Utilization, saturation, errors for system resources
|
|
69
|
+
- **Custom business metrics:** Domain-specific counters and gauges
|
|
70
|
+
- **Histogram buckets:** Appropriate bucket boundaries for latency histograms
|
|
71
|
+
- **Label cardinality:** No high-cardinality labels (user ID, request ID as metric labels)
|
|
72
|
+
|
|
73
|
+
3. **Audit tracing implementation.** Verify:
|
|
74
|
+
- **Span creation:** Entry points create root spans, downstream calls create child spans
|
|
75
|
+
- **Context propagation:** Trace context flows across HTTP boundaries (W3C or B3 headers)
|
|
76
|
+
- **Span attributes:** Meaningful attributes set on spans (not empty spans)
|
|
77
|
+
- **Error recording:** Exceptions recorded on spans with status codes
|
|
78
|
+
- **Sampling strategy:** Configured and appropriate (not sampling 100% in production)
|
|
79
|
+
|
|
80
|
+
4. **Audit alerting effectiveness.** Check each alert for:
|
|
81
|
+
- **Actionability:** Does the alert tell the on-call engineer what to do?
|
|
82
|
+
- **Signal quality:** Based on symptoms (error rate) not causes (CPU usage)
|
|
83
|
+
- **Thresholds:** Based on SLO burn rate, not arbitrary values
|
|
84
|
+
- **Runbook link:** Each alert has a link to a runbook or troubleshooting guide
|
|
85
|
+
- **Routing:** Alerts route to the correct team and escalation path
|
|
86
|
+
|
|
87
|
+
5. **Score each pillar and identify gaps:**
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
Observability Audit:
|
|
91
|
+
Logging: 7/10 -- structured, but missing correlation IDs in 4 services
|
|
92
|
+
Metrics: 5/10 -- RED metrics partial, no business metrics
|
|
93
|
+
Tracing: 8/10 -- good coverage, sampling needs tuning
|
|
94
|
+
Alerting: 3/10 -- only 3 rules, no SLO-based alerts, no runbooks
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
### Phase 3: DESIGN -- Recommend Instrumentation Strategy
|
|
100
|
+
|
|
101
|
+
1. **Design logging strategy.** Recommend:
|
|
102
|
+
- Standard log format with required fields (timestamp, level, service, traceId, message)
|
|
103
|
+
- Logger factory that injects correlation context automatically
|
|
104
|
+
- Log level configuration per environment (debug in dev, info in production)
|
|
105
|
+
- Log aggregation pipeline (application -> collector -> storage -> query)
|
|
106
|
+
- Retention policy per environment
|
|
107
|
+
|
|
108
|
+
2. **Design metrics strategy.** Recommend:
|
|
109
|
+
- Standard RED metrics for every HTTP endpoint using middleware
|
|
110
|
+
- Custom business metrics aligned with product KPIs
|
|
111
|
+
- Histogram bucket configuration based on expected latency distribution
|
|
112
|
+
- Metric naming convention following Prometheus best practices (`http_request_duration_seconds`)
|
|
113
|
+
- Dashboard templates for standard service views
|
|
114
|
+
|
|
115
|
+
3. **Design tracing strategy.** Recommend:
|
|
116
|
+
- Automatic instrumentation for HTTP, database, and message queue operations
|
|
117
|
+
- Manual span creation for business-critical code paths
|
|
118
|
+
- Sampling strategy (head-based for development, tail-based for production)
|
|
119
|
+
- Baggage propagation for cross-cutting concerns (tenant ID, feature flags)
|
|
120
|
+
- Trace-to-log correlation via trace ID injection
|
|
121
|
+
|
|
122
|
+
4. **Define SLIs and SLOs.** For each service endpoint:
|
|
123
|
+
- **Availability SLI:** Proportion of successful requests (non-5xx)
|
|
124
|
+
- **Latency SLI:** Proportion of requests faster than threshold (p99 < 500ms)
|
|
125
|
+
- **SLO target:** 99.9% availability, 99% latency within budget
|
|
126
|
+
- **Error budget:** Calculation and burn rate alerting
|
|
127
|
+
- **SLO dashboard:** Visual budget remaining over rolling window
|
|
128
|
+
|
|
129
|
+
5. **Design alerting strategy.** Recommend:
|
|
130
|
+
- Multi-window, multi-burn-rate alerts based on SLOs
|
|
131
|
+
- Page-worthy alerts (high burn rate) vs. ticket-worthy alerts (slow burn)
|
|
132
|
+
- Alert grouping to reduce noise (one alert per service, not per instance)
|
|
133
|
+
- Escalation paths with timeouts
|
|
134
|
+
- Regular alert review cadence (monthly) to retire noisy alerts
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
### Phase 4: VALIDATE -- Verify Instrumentation Correctness
|
|
139
|
+
|
|
140
|
+
1. **Validate log output.** Check that logs from a test run:
|
|
141
|
+
- Parse as valid JSON (if structured logging is configured)
|
|
142
|
+
- Contain required fields (timestamp, level, service name)
|
|
143
|
+
- Include trace IDs when tracing is active
|
|
144
|
+
- Do not contain sensitive data (grep for common patterns: password, token, secret)
|
|
145
|
+
- Use appropriate log levels (no error-level logs for normal operations)
|
|
146
|
+
|
|
147
|
+
2. **Validate metric exposition.** Verify:
|
|
148
|
+
- Metrics endpoint (`/metrics`) is accessible and returns Prometheus format
|
|
149
|
+
- All declared custom metrics appear in the output
|
|
150
|
+
- Histogram buckets are populated with reasonable values
|
|
151
|
+
- No high-cardinality label combinations (check label count)
|
|
152
|
+
- Counter values increment correctly (not resetting unexpectedly)
|
|
153
|
+
|
|
154
|
+
3. **Validate trace propagation.** Verify end-to-end:
|
|
155
|
+
- A request to the entry service generates a trace visible in the tracing backend
|
|
156
|
+
- Child spans appear for downstream service calls
|
|
157
|
+
- Span attributes are populated with expected values
|
|
158
|
+
- Error spans have appropriate status and exception recording
|
|
159
|
+
- Sampling is working as configured (not dropping all traces or keeping all)
|
|
160
|
+
|
|
161
|
+
4. **Validate alerting rules.** Check:
|
|
162
|
+
- Alert expressions are syntactically valid (PromQL, LogQL)
|
|
163
|
+
- Alert thresholds fire on historical data that represents real incidents
|
|
164
|
+
- Alert routing sends to the correct channel or pager
|
|
165
|
+
- Runbook links resolve to actual documentation
|
|
166
|
+
|
|
167
|
+
5. **Generate observability report:**
|
|
168
|
+
|
|
169
|
+
```
|
|
170
|
+
Observability Validation: [PASS/WARN/FAIL]
|
|
171
|
+
|
|
172
|
+
Logging: PASS (structured, correlated, no PII detected)
|
|
173
|
+
Metrics: WARN (RED metrics present, missing business metrics)
|
|
174
|
+
Tracing: PASS (propagation verified, sampling at 10%)
|
|
175
|
+
Alerting: FAIL (no SLO-based alerts, 2 of 3 rules missing runbooks)
|
|
176
|
+
|
|
177
|
+
Priority actions:
|
|
178
|
+
1. Define SLOs for /api/orders and /api/payments endpoints
|
|
179
|
+
2. Add multi-burn-rate alerts based on SLO error budget
|
|
180
|
+
3. Write runbooks for existing alerts
|
|
181
|
+
4. Add order_total and payment_success_rate business metrics
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## Harness Integration
|
|
187
|
+
|
|
188
|
+
- **`harness skill run harness-observability`** -- Primary invocation for observability audit.
|
|
189
|
+
- **`harness validate`** -- Run after instrumentation changes to verify project health.
|
|
190
|
+
- **`harness check-deps`** -- Verify observability library dependencies are installed.
|
|
191
|
+
- **`emit_interaction`** -- Present audit results and SLO design recommendations.
|
|
192
|
+
|
|
193
|
+
## Success Criteria
|
|
194
|
+
|
|
195
|
+
- All three observability pillars (logging, metrics, tracing) are assessed
|
|
196
|
+
- Coverage gaps are identified with specific remediation recommendations
|
|
197
|
+
- SLI/SLO definitions are provided for critical service endpoints
|
|
198
|
+
- Alerting strategy is evaluated for actionability and signal quality
|
|
199
|
+
- No sensitive data detected in log output
|
|
200
|
+
- Correlation between logs and traces is verified
|
|
201
|
+
|
|
202
|
+
## Examples
|
|
203
|
+
|
|
204
|
+
### Example: Express.js API with OpenTelemetry
|
|
205
|
+
|
|
206
|
+
```
|
|
207
|
+
Phase 1: DETECT
|
|
208
|
+
Logging: pino with pino-http middleware
|
|
209
|
+
Metrics: @opentelemetry/sdk-metrics -> Prometheus
|
|
210
|
+
Tracing: @opentelemetry/sdk-trace-node -> Jaeger
|
|
211
|
+
Collector: OTel Collector (otel-collector-config.yaml)
|
|
212
|
+
Alerting: 5 Prometheus rules in monitoring/alerts.yml
|
|
213
|
+
|
|
214
|
+
Phase 2: AUDIT
|
|
215
|
+
Logging: 8/10 -- structured JSON, trace IDs present, missing request body size
|
|
216
|
+
Metrics: 6/10 -- http_request_duration_seconds present, missing queue depth
|
|
217
|
+
and business metrics (orders_created_total)
|
|
218
|
+
Tracing: 9/10 -- auto-instrumented HTTP + pg + Redis, manual spans on
|
|
219
|
+
checkout flow
|
|
220
|
+
Alerting: 4/10 -- static thresholds, no SLO burn rate, 2 missing runbooks
|
|
221
|
+
|
|
222
|
+
Phase 3: DESIGN
|
|
223
|
+
SLOs recommended:
|
|
224
|
+
- POST /api/orders: 99.9% availability, p99 < 800ms
|
|
225
|
+
- GET /api/products: 99.95% availability, p99 < 200ms
|
|
226
|
+
Alerting: Replace static "error rate > 5%" with multi-window burn rate
|
|
227
|
+
Metrics: Add orders_created_total, cart_abandonment_rate gauges
|
|
228
|
+
Logging: Add request/response body size for capacity planning
|
|
229
|
+
|
|
230
|
+
Phase 4: VALIDATE
|
|
231
|
+
Log output: PASS (valid JSON, no PII)
|
|
232
|
+
Metrics endpoint: PASS (all custom metrics present)
|
|
233
|
+
Trace propagation: PASS (end-to-end verified)
|
|
234
|
+
Alert rules: WARN (valid PromQL, but thresholds not SLO-based)
|
|
235
|
+
Result: WARN -- alerting strategy needs SLO alignment
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
### Example: Go Microservices with Datadog
|
|
239
|
+
|
|
240
|
+
```
|
|
241
|
+
Phase 1: DETECT
|
|
242
|
+
Logging: zap (structured) across 4 services
|
|
243
|
+
Metrics: Datadog dogstatsd client
|
|
244
|
+
Tracing: dd-trace-go with automatic HTTP/gRPC instrumentation
|
|
245
|
+
Collector: Datadog Agent (datadog.yaml in k8s/)
|
|
246
|
+
Alerting: 12 monitors in Datadog (Terraform-managed)
|
|
247
|
+
|
|
248
|
+
Phase 2: AUDIT
|
|
249
|
+
Logging: 9/10 -- consistent structured format, correlation IDs, no PII
|
|
250
|
+
Metrics: 7/10 -- RED metrics present, custom counters for business events,
|
|
251
|
+
but missing histogram for gRPC call duration
|
|
252
|
+
Tracing: 8/10 -- HTTP and gRPC instrumented, database spans present,
|
|
253
|
+
Redis spans missing
|
|
254
|
+
Alerting: 6/10 -- good coverage but static thresholds, no error budgets
|
|
255
|
+
|
|
256
|
+
Phase 3: DESIGN
|
|
257
|
+
1. Add dd-trace-go Redis integration for complete trace picture
|
|
258
|
+
2. Add grpc_server_handling_seconds histogram
|
|
259
|
+
3. Define SLOs in Datadog for top 5 endpoints
|
|
260
|
+
4. Convert 4 highest-priority monitors to SLO burn rate alerts
|
|
261
|
+
5. Add Datadog SLO dashboard for team visibility
|
|
262
|
+
|
|
263
|
+
Phase 4: VALIDATE
|
|
264
|
+
Log output: PASS
|
|
265
|
+
Metrics: WARN (missing gRPC histogram)
|
|
266
|
+
Traces: WARN (Redis spans missing)
|
|
267
|
+
Alerts: WARN (no SLO-based alerts)
|
|
268
|
+
Result: WARN -- 3 instrumentation gaps, alerting needs SLO alignment
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
## Gates
|
|
272
|
+
|
|
273
|
+
- **No sensitive data in logs.** If PII, credentials, or tokens are detected in log output, it is a blocking finding. The logging configuration must sanitize or redact sensitive fields before any other improvements are made.
|
|
274
|
+
- **No high-cardinality metric labels.** Metric labels with unbounded values (user IDs, request IDs, timestamps) cause storage explosion and query timeouts. This is a blocking finding.
|
|
275
|
+
- **No alerting without runbooks.** Production alerts that lack a runbook link are incomplete. Every page-worthy alert must have actionable documentation.
|
|
276
|
+
- **No tracing without context propagation.** Traces that do not propagate context across service boundaries provide incomplete pictures and mislead investigations. Broken propagation is a blocking finding.
|
|
277
|
+
|
|
278
|
+
## Escalation
|
|
279
|
+
|
|
280
|
+
- **When observability libraries conflict:** Some combinations (e.g., dd-trace and OTel auto-instrumentation) cause duplicate spans or metric conflicts. Recommend choosing one provider and removing the other. If migration is needed, present a phased approach.
|
|
281
|
+
- **When sampling drops critical traces:** If tail-based sampling is misconfigured, critical error traces may be dropped. Recommend always-sample rules for error responses and critical code paths, with probabilistic sampling for normal traffic.
|
|
282
|
+
- **When metric cardinality is already out of control:** Do not attempt to fix retroactively in the metrics backend. Recommend adding new metrics with correct labels and deprecating the high-cardinality ones. Set a timeline for removal.
|
|
283
|
+
- **When no observability infrastructure exists:** This is a design-from-scratch scenario. Start with structured logging (lowest barrier), then add metrics (RED for HTTP endpoints), then tracing. Do not attempt all three at once.
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
name: harness-observability
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
description: Structured logging, metrics, distributed tracing, and alerting strategies
|
|
4
|
+
cognitive_mode: advisory-guide
|
|
5
|
+
tier: 3
|
|
6
|
+
internal: false
|
|
7
|
+
keywords:
|
|
8
|
+
- logging
|
|
9
|
+
- metrics
|
|
10
|
+
- tracing
|
|
11
|
+
- observability
|
|
12
|
+
- OpenTelemetry
|
|
13
|
+
- Prometheus
|
|
14
|
+
- Grafana
|
|
15
|
+
- Datadog
|
|
16
|
+
- alerting
|
|
17
|
+
- SLI
|
|
18
|
+
- SLO
|
|
19
|
+
- structured logging
|
|
20
|
+
- correlation ID
|
|
21
|
+
- spans
|
|
22
|
+
stack_signals:
|
|
23
|
+
- "src/**/logger*"
|
|
24
|
+
- "src/**/metrics*"
|
|
25
|
+
- "src/**/tracing*"
|
|
26
|
+
- "otel-collector*"
|
|
27
|
+
- "prometheus.yml"
|
|
28
|
+
- "grafana/"
|
|
29
|
+
- "datadog.yaml"
|
|
30
|
+
triggers:
|
|
31
|
+
- manual
|
|
32
|
+
- on_new_feature
|
|
33
|
+
platforms:
|
|
34
|
+
- claude-code
|
|
35
|
+
- gemini-cli
|
|
36
|
+
tools:
|
|
37
|
+
- Bash
|
|
38
|
+
- Read
|
|
39
|
+
- Write
|
|
40
|
+
- Edit
|
|
41
|
+
- Glob
|
|
42
|
+
- Grep
|
|
43
|
+
- emit_interaction
|
|
44
|
+
cli:
|
|
45
|
+
command: harness skill run harness-observability
|
|
46
|
+
args:
|
|
47
|
+
- name: path
|
|
48
|
+
description: Project root path
|
|
49
|
+
required: false
|
|
50
|
+
- name: pillar
|
|
51
|
+
description: Observability pillar to focus on (logging, metrics, tracing, all)
|
|
52
|
+
required: false
|
|
53
|
+
- name: provider
|
|
54
|
+
description: Observability provider context (otel, datadog, prometheus)
|
|
55
|
+
required: false
|
|
56
|
+
mcp:
|
|
57
|
+
tool: run_skill
|
|
58
|
+
input:
|
|
59
|
+
skill: harness-observability
|
|
60
|
+
path: string
|
|
61
|
+
type: rigid
|
|
62
|
+
phases:
|
|
63
|
+
- name: detect
|
|
64
|
+
description: Identify existing observability instrumentation and providers
|
|
65
|
+
required: true
|
|
66
|
+
- name: audit
|
|
67
|
+
description: Evaluate coverage gaps across logging, metrics, and tracing
|
|
68
|
+
required: true
|
|
69
|
+
- name: design
|
|
70
|
+
description: Recommend instrumentation strategy and SLI/SLO definitions
|
|
71
|
+
required: true
|
|
72
|
+
- name: validate
|
|
73
|
+
description: Verify instrumentation correctness and alerting configuration
|
|
74
|
+
required: true
|
|
75
|
+
state:
|
|
76
|
+
persistent: false
|
|
77
|
+
files: []
|
|
78
|
+
depends_on: []
|
|
@@ -312,6 +312,45 @@ One sentence.
|
|
|
312
312
|
|
|
313
313
|
````
|
|
314
314
|
|
|
315
|
+
## Session State
|
|
316
|
+
|
|
317
|
+
This skill reads and writes to the following session sections via `manage_state`:
|
|
318
|
+
|
|
319
|
+
| Section | Read | Write | Purpose |
|
|
320
|
+
|---------|------|-------|---------|
|
|
321
|
+
| terminology | yes | no | Reads domain terms to use consistent language in plan |
|
|
322
|
+
| decisions | yes | yes | Reads brainstorming decisions; records planning-phase decisions |
|
|
323
|
+
| constraints | yes | yes | Reads existing constraints; adds constraints discovered during decomposition |
|
|
324
|
+
| risks | yes | yes | Reads existing risks; adds implementation risks identified during task design |
|
|
325
|
+
| openQuestions | yes | yes | Reads unresolved questions; adds new questions, resolves answered ones |
|
|
326
|
+
| evidence | yes | yes | Reads prior evidence from brainstorming; writes file:line citations for task specifications |
|
|
327
|
+
|
|
328
|
+
**When to write:** During Phase 1 (SCOPE) write newly discovered constraints and risks. During Phase 2 (DECOMPOSE) write decisions about task structure and sequencing. Mark resolved questions during Phase 4 (VALIDATE).
|
|
329
|
+
|
|
330
|
+
**When to read:** At the start of Phase 1 (SCOPE), read all sections via `gather_context` with `include: ["sessions"]` to inherit context from brainstorming. Use terminology for consistent naming in task descriptions.
|
|
331
|
+
|
|
332
|
+
## Evidence Requirements
|
|
333
|
+
|
|
334
|
+
When this skill makes claims about existing code structure, file locations, or implementation patterns in task specifications, it MUST cite evidence using one of:
|
|
335
|
+
|
|
336
|
+
1. **File reference:** `file:line` format (e.g., `src/services/index.ts:15` -- "barrel export exists, will add new export here")
|
|
337
|
+
2. **Code pattern reference:** `file:line` format with pattern description (e.g., `src/services/user-service.ts:1-30` -- "existing service follows constructor injection pattern, new service will match")
|
|
338
|
+
3. **Test output:** Include the command and its observed output when referencing current test state
|
|
339
|
+
4. **Session evidence:** Write to the `evidence` session section:
|
|
340
|
+
```json
|
|
341
|
+
manage_state({
|
|
342
|
+
action: "append_entry",
|
|
343
|
+
session: "<current-session>",
|
|
344
|
+
section: "evidence",
|
|
345
|
+
authorSkill: "harness-planning",
|
|
346
|
+
content: "src/services/index.ts:15 -- barrel export pattern confirmed for new service integration"
|
|
347
|
+
})
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
**When to cite:** During Phase 1 (SCOPE) when referencing existing files for observable truths. During Phase 2 (DECOMPOSE) when specifying exact file paths and code patterns in task instructions. When the file map references existing files for modification.
|
|
351
|
+
|
|
352
|
+
**Uncited claims:** Technical assertions about existing code without citations MUST be prefixed with `[UNVERIFIED]`. Example: `[UNVERIFIED] The service barrel exports all services`. Uncited claims are flagged during review (Wave 2.2).
|
|
353
|
+
|
|
315
354
|
## Harness Integration
|
|
316
355
|
|
|
317
356
|
- **`harness validate`** — Run during Phase 4 (before writing the plan) and included as a step in every task.
|