@harness-engineering/cli 1.14.0 → 1.16.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/commands/codex/AGENTS.md +39 -0
- package/dist/agents/commands/codex/harness/add-harness-component/SKILL.md +195 -0
- package/dist/agents/commands/codex/harness/add-harness-component/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/cleanup-dead-code/SKILL.md +248 -0
- package/dist/agents/commands/codex/harness/cleanup-dead-code/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/detect-doc-drift/SKILL.md +182 -0
- package/dist/agents/commands/codex/harness/detect-doc-drift/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/enforce-architecture/SKILL.md +299 -0
- package/dist/agents/commands/codex/harness/enforce-architecture/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-architecture-advisor/SKILL.md +452 -0
- package/dist/agents/commands/codex/harness/harness-architecture-advisor/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-autopilot/SKILL.md +919 -0
- package/dist/agents/commands/codex/harness/harness-autopilot/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-brainstorming/SKILL.md +409 -0
- package/dist/agents/commands/codex/harness/harness-brainstorming/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-code-review/SKILL.md +860 -0
- package/dist/agents/commands/codex/harness/harness-code-review/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-codebase-cleanup/SKILL.md +227 -0
- package/dist/agents/commands/codex/harness/harness-codebase-cleanup/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-debugging/SKILL.md +369 -0
- package/dist/agents/commands/codex/harness/harness-debugging/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-dependency-health/SKILL.md +182 -0
- package/dist/agents/commands/codex/harness/harness-dependency-health/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-docs-pipeline/SKILL.md +463 -0
- package/dist/agents/commands/codex/harness/harness-docs-pipeline/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-execution/SKILL.md +513 -0
- package/dist/agents/commands/codex/harness/harness-execution/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-hotspot-detector/SKILL.md +164 -0
- package/dist/agents/commands/codex/harness/harness-hotspot-detector/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-impact-analysis/SKILL.md +187 -0
- package/dist/agents/commands/codex/harness/harness-impact-analysis/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-integrity/SKILL.md +170 -0
- package/dist/agents/commands/codex/harness/harness-integrity/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-onboarding/SKILL.md +291 -0
- package/dist/agents/commands/codex/harness/harness-onboarding/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-perf/SKILL.md +263 -0
- package/dist/agents/commands/codex/harness/harness-perf/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-planning/SKILL.md +582 -0
- package/dist/agents/commands/codex/harness/harness-planning/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-refactoring/SKILL.md +172 -0
- package/dist/agents/commands/codex/harness/harness-refactoring/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-release-readiness/SKILL.md +692 -0
- package/dist/agents/commands/codex/harness/harness-release-readiness/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-roadmap/SKILL.md +598 -0
- package/dist/agents/commands/codex/harness/harness-roadmap/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-security-scan/SKILL.md +157 -0
- package/dist/agents/commands/codex/harness/harness-security-scan/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-skill-authoring/SKILL.md +295 -0
- package/dist/agents/commands/codex/harness/harness-skill-authoring/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-soundness-review/SKILL.md +1270 -0
- package/dist/agents/commands/codex/harness/harness-soundness-review/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-supply-chain-audit/SKILL.md +247 -0
- package/dist/agents/commands/codex/harness/harness-supply-chain-audit/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-tdd/SKILL.md +180 -0
- package/dist/agents/commands/codex/harness/harness-tdd/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-test-advisor/SKILL.md +163 -0
- package/dist/agents/commands/codex/harness/harness-test-advisor/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-verification/SKILL.md +424 -0
- package/dist/agents/commands/codex/harness/harness-verification/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/harness-verify/SKILL.md +162 -0
- package/dist/agents/commands/codex/harness/harness-verify/agents/openai.yaml +3 -0
- package/dist/agents/commands/codex/harness/initialize-harness-project/SKILL.md +235 -0
- package/dist/agents/commands/codex/harness/initialize-harness-project/agents/openai.yaml +3 -0
- package/dist/agents/commands/cursor/harness/add-harness-component.mdc +200 -0
- package/dist/agents/commands/cursor/harness/cleanup-dead-code.mdc +253 -0
- package/dist/agents/commands/cursor/harness/detect-doc-drift.mdc +187 -0
- package/dist/agents/commands/cursor/harness/enforce-architecture.mdc +304 -0
- package/dist/agents/commands/cursor/harness/harness-architecture-advisor.mdc +457 -0
- package/dist/agents/commands/cursor/harness/harness-autopilot.mdc +924 -0
- package/dist/agents/commands/cursor/harness/harness-brainstorming.mdc +414 -0
- package/dist/agents/commands/cursor/harness/harness-code-review.mdc +865 -0
- package/dist/agents/commands/cursor/harness/harness-codebase-cleanup.mdc +232 -0
- package/dist/agents/commands/cursor/harness/harness-debugging.mdc +374 -0
- package/dist/agents/commands/cursor/harness/harness-dependency-health.mdc +187 -0
- package/dist/agents/commands/cursor/harness/harness-docs-pipeline.mdc +468 -0
- package/dist/agents/commands/cursor/harness/harness-execution.mdc +518 -0
- package/dist/agents/commands/cursor/harness/harness-hotspot-detector.mdc +169 -0
- package/dist/agents/commands/cursor/harness/harness-impact-analysis.mdc +192 -0
- package/dist/agents/commands/cursor/harness/harness-integrity.mdc +175 -0
- package/dist/agents/commands/cursor/harness/harness-onboarding.mdc +296 -0
- package/dist/agents/commands/cursor/harness/harness-perf.mdc +268 -0
- package/dist/agents/commands/cursor/harness/harness-planning.mdc +587 -0
- package/dist/agents/commands/cursor/harness/harness-refactoring.mdc +177 -0
- package/dist/agents/commands/cursor/harness/harness-release-readiness.mdc +697 -0
- package/dist/agents/commands/cursor/harness/harness-roadmap.mdc +603 -0
- package/dist/agents/commands/cursor/harness/harness-security-scan.mdc +162 -0
- package/dist/agents/commands/cursor/harness/harness-skill-authoring.mdc +300 -0
- package/dist/agents/commands/cursor/harness/harness-soundness-review.mdc +1275 -0
- package/dist/agents/commands/cursor/harness/harness-supply-chain-audit.mdc +252 -0
- package/dist/agents/commands/cursor/harness/harness-tdd.mdc +185 -0
- package/dist/agents/commands/cursor/harness/harness-test-advisor.mdc +168 -0
- package/dist/agents/commands/cursor/harness/harness-verification.mdc +429 -0
- package/dist/agents/commands/cursor/harness/harness-verify.mdc +167 -0
- package/dist/agents/commands/cursor/harness/initialize-harness-project.mdc +240 -0
- package/dist/agents/skills/claude-code/enforce-architecture/SKILL.md +52 -0
- package/dist/agents/skills/claude-code/harness-api-design/SKILL.md +52 -0
- package/dist/agents/skills/claude-code/harness-architecture-advisor/SKILL.md +52 -0
- package/dist/agents/skills/claude-code/harness-auth/SKILL.md +52 -0
- package/dist/agents/skills/claude-code/harness-autopilot/SKILL.md +355 -45
- package/dist/agents/skills/claude-code/harness-autopilot/skill.yaml +12 -0
- package/dist/agents/skills/claude-code/harness-code-review/SKILL.md +97 -3
- package/dist/agents/skills/claude-code/harness-code-review/skill.yaml +6 -0
- package/dist/agents/skills/claude-code/harness-codebase-cleanup/SKILL.md +2 -4
- package/dist/agents/skills/claude-code/harness-database/SKILL.md +52 -0
- package/dist/agents/skills/claude-code/harness-deployment/SKILL.md +52 -0
- package/dist/agents/skills/claude-code/harness-planning/SKILL.md +99 -3
- package/dist/agents/skills/claude-code/harness-planning/skill.yaml +6 -0
- package/dist/agents/skills/claude-code/harness-pre-commit-review/SKILL.md +1 -1
- package/dist/agents/skills/claude-code/harness-product-spec/SKILL.md +5 -5
- package/dist/agents/skills/claude-code/harness-security-review/SKILL.md +27 -7
- package/dist/agents/skills/claude-code/harness-security-scan/SKILL.md +52 -0
- package/dist/agents/skills/claude-code/harness-supply-chain-audit/SKILL.md +281 -0
- package/dist/agents/skills/claude-code/harness-supply-chain-audit/skill.yaml +51 -0
- package/dist/agents/skills/codex/add-harness-component/SKILL.md +192 -0
- package/dist/agents/skills/codex/add-harness-component/skill.yaml +33 -0
- package/dist/agents/skills/codex/align-documentation/SKILL.md +213 -0
- package/dist/agents/skills/codex/align-documentation/skill.yaml +32 -0
- package/dist/agents/skills/codex/check-mechanical-constraints/SKILL.md +191 -0
- package/dist/agents/skills/codex/check-mechanical-constraints/skill.yaml +33 -0
- package/dist/agents/skills/codex/cleanup-dead-code/SKILL.md +245 -0
- package/dist/agents/skills/codex/cleanup-dead-code/skill.yaml +34 -0
- package/dist/agents/skills/codex/detect-doc-drift/SKILL.md +179 -0
- package/dist/agents/skills/codex/detect-doc-drift/skill.yaml +31 -0
- package/dist/agents/skills/codex/enforce-architecture/SKILL.md +296 -0
- package/dist/agents/skills/codex/enforce-architecture/skill.yaml +35 -0
- package/dist/agents/skills/codex/harness-accessibility/SKILL.md +281 -0
- package/dist/agents/skills/codex/harness-accessibility/skill.yaml +52 -0
- package/dist/agents/skills/codex/harness-api-design/SKILL.md +356 -0
- package/dist/agents/skills/codex/harness-api-design/skill.yaml +74 -0
- package/dist/agents/skills/codex/harness-architecture-advisor/SKILL.md +449 -0
- package/dist/agents/skills/codex/harness-architecture-advisor/skill.yaml +49 -0
- package/dist/agents/skills/codex/harness-auth/SKILL.md +331 -0
- package/dist/agents/skills/codex/harness-auth/skill.yaml +81 -0
- package/dist/agents/skills/codex/harness-autopilot/SKILL.md +916 -0
- package/dist/agents/skills/codex/harness-autopilot/skill.yaml +67 -0
- package/dist/agents/skills/codex/harness-brainstorming/SKILL.md +406 -0
- package/dist/agents/skills/codex/harness-brainstorming/skill.yaml +50 -0
- package/dist/agents/skills/codex/harness-caching/SKILL.md +309 -0
- package/dist/agents/skills/codex/harness-caching/skill.yaml +73 -0
- package/dist/agents/skills/codex/harness-chaos/SKILL.md +295 -0
- package/dist/agents/skills/codex/harness-chaos/skill.yaml +72 -0
- package/dist/agents/skills/codex/harness-code-review/SKILL.md +857 -0
- package/dist/agents/skills/codex/harness-code-review/skill.yaml +52 -0
- package/dist/agents/skills/codex/harness-codebase-cleanup/SKILL.md +224 -0
- package/dist/agents/skills/codex/harness-codebase-cleanup/skill.yaml +65 -0
- package/dist/agents/skills/codex/harness-compliance/SKILL.md +303 -0
- package/dist/agents/skills/codex/harness-compliance/skill.yaml +78 -0
- package/dist/agents/skills/codex/harness-containerization/SKILL.md +284 -0
- package/dist/agents/skills/codex/harness-containerization/skill.yaml +80 -0
- package/dist/agents/skills/codex/harness-data-pipeline/SKILL.md +274 -0
- package/dist/agents/skills/codex/harness-data-pipeline/skill.yaml +81 -0
- package/dist/agents/skills/codex/harness-data-validation/SKILL.md +343 -0
- package/dist/agents/skills/codex/harness-data-validation/skill.yaml +75 -0
- package/dist/agents/skills/codex/harness-database/SKILL.md +310 -0
- package/dist/agents/skills/codex/harness-database/skill.yaml +80 -0
- package/dist/agents/skills/codex/harness-debugging/SKILL.md +366 -0
- package/dist/agents/skills/codex/harness-debugging/skill.yaml +48 -0
- package/dist/agents/skills/codex/harness-dependency-health/SKILL.md +179 -0
- package/dist/agents/skills/codex/harness-dependency-health/skill.yaml +42 -0
- package/dist/agents/skills/codex/harness-deployment/SKILL.md +307 -0
- package/dist/agents/skills/codex/harness-deployment/skill.yaml +77 -0
- package/dist/agents/skills/codex/harness-design/SKILL.md +265 -0
- package/dist/agents/skills/codex/harness-design/skill.yaml +54 -0
- package/dist/agents/skills/codex/harness-design-mobile/SKILL.md +336 -0
- package/dist/agents/skills/codex/harness-design-mobile/skill.yaml +50 -0
- package/dist/agents/skills/codex/harness-design-system/SKILL.md +282 -0
- package/dist/agents/skills/codex/harness-design-system/skill.yaml +51 -0
- package/dist/agents/skills/codex/harness-design-web/SKILL.md +360 -0
- package/dist/agents/skills/codex/harness-design-web/skill.yaml +53 -0
- package/dist/agents/skills/codex/harness-diagnostics/SKILL.md +318 -0
- package/dist/agents/skills/codex/harness-diagnostics/skill.yaml +51 -0
- package/dist/agents/skills/codex/harness-docs-pipeline/SKILL.md +460 -0
- package/dist/agents/skills/codex/harness-docs-pipeline/skill.yaml +70 -0
- package/dist/agents/skills/codex/harness-dx/SKILL.md +276 -0
- package/dist/agents/skills/codex/harness-dx/skill.yaml +76 -0
- package/dist/agents/skills/codex/harness-e2e/SKILL.md +245 -0
- package/dist/agents/skills/codex/harness-e2e/skill.yaml +78 -0
- package/dist/agents/skills/codex/harness-event-driven/SKILL.md +280 -0
- package/dist/agents/skills/codex/harness-event-driven/skill.yaml +77 -0
- package/dist/agents/skills/codex/harness-execution/SKILL.md +510 -0
- package/dist/agents/skills/codex/harness-execution/skill.yaml +52 -0
- package/dist/agents/skills/codex/harness-feature-flags/SKILL.md +287 -0
- package/dist/agents/skills/codex/harness-feature-flags/skill.yaml +74 -0
- package/dist/agents/skills/codex/harness-git-workflow/SKILL.md +268 -0
- package/dist/agents/skills/codex/harness-git-workflow/skill.yaml +32 -0
- package/dist/agents/skills/codex/harness-hotspot-detector/SKILL.md +161 -0
- package/dist/agents/skills/codex/harness-hotspot-detector/skill.yaml +45 -0
- package/dist/agents/skills/codex/harness-i18n/SKILL.md +484 -0
- package/dist/agents/skills/codex/harness-i18n/skill.yaml +55 -0
- package/dist/agents/skills/codex/harness-i18n-process/SKILL.md +388 -0
- package/dist/agents/skills/codex/harness-i18n-process/skill.yaml +44 -0
- package/dist/agents/skills/codex/harness-i18n-workflow/SKILL.md +512 -0
- package/dist/agents/skills/codex/harness-i18n-workflow/skill.yaml +54 -0
- package/dist/agents/skills/codex/harness-impact-analysis/SKILL.md +184 -0
- package/dist/agents/skills/codex/harness-impact-analysis/skill.yaml +45 -0
- package/dist/agents/skills/codex/harness-incident-response/SKILL.md +223 -0
- package/dist/agents/skills/codex/harness-incident-response/skill.yaml +78 -0
- package/dist/agents/skills/codex/harness-infrastructure-as-code/SKILL.md +279 -0
- package/dist/agents/skills/codex/harness-infrastructure-as-code/skill.yaml +80 -0
- package/dist/agents/skills/codex/harness-integration-test/SKILL.md +271 -0
- package/dist/agents/skills/codex/harness-integration-test/skill.yaml +73 -0
- package/dist/agents/skills/codex/harness-integrity/SKILL.md +167 -0
- package/dist/agents/skills/codex/harness-integrity/skill.yaml +48 -0
- package/dist/agents/skills/codex/harness-knowledge-mapper/SKILL.md +195 -0
- package/dist/agents/skills/codex/harness-knowledge-mapper/skill.yaml +50 -0
- package/dist/agents/skills/codex/harness-load-testing/SKILL.md +274 -0
- package/dist/agents/skills/codex/harness-load-testing/skill.yaml +79 -0
- package/dist/agents/skills/codex/harness-ml-ops/SKILL.md +341 -0
- package/dist/agents/skills/codex/harness-ml-ops/skill.yaml +79 -0
- package/dist/agents/skills/codex/harness-mobile-patterns/SKILL.md +326 -0
- package/dist/agents/skills/codex/harness-mobile-patterns/skill.yaml +82 -0
- package/dist/agents/skills/codex/harness-mutation-test/SKILL.md +251 -0
- package/dist/agents/skills/codex/harness-mutation-test/skill.yaml +70 -0
- package/dist/agents/skills/codex/harness-observability/SKILL.md +283 -0
- package/dist/agents/skills/codex/harness-observability/skill.yaml +78 -0
- package/dist/agents/skills/codex/harness-onboarding/SKILL.md +288 -0
- package/dist/agents/skills/codex/harness-onboarding/skill.yaml +31 -0
- package/dist/agents/skills/codex/harness-parallel-agents/SKILL.md +256 -0
- package/dist/agents/skills/codex/harness-parallel-agents/skill.yaml +34 -0
- package/dist/agents/skills/codex/harness-perf/SKILL.md +260 -0
- package/dist/agents/skills/codex/harness-perf/skill.yaml +51 -0
- package/dist/agents/skills/codex/harness-perf-tdd/SKILL.md +249 -0
- package/dist/agents/skills/codex/harness-perf-tdd/skill.yaml +48 -0
- package/dist/agents/skills/codex/harness-planning/SKILL.md +579 -0
- package/dist/agents/skills/codex/harness-planning/skill.yaml +56 -0
- package/dist/agents/skills/codex/harness-pre-commit-review/SKILL.md +324 -0
- package/dist/agents/skills/codex/harness-pre-commit-review/skill.yaml +34 -0
- package/dist/agents/skills/codex/harness-product-spec/SKILL.md +285 -0
- package/dist/agents/skills/codex/harness-product-spec/skill.yaml +72 -0
- package/dist/agents/skills/codex/harness-property-test/SKILL.md +281 -0
- package/dist/agents/skills/codex/harness-property-test/skill.yaml +71 -0
- package/dist/agents/skills/codex/harness-refactoring/SKILL.md +169 -0
- package/dist/agents/skills/codex/harness-refactoring/skill.yaml +34 -0
- package/dist/agents/skills/codex/harness-release-readiness/SKILL.md +689 -0
- package/dist/agents/skills/codex/harness-release-readiness/skill.yaml +58 -0
- package/dist/agents/skills/codex/harness-resilience/SKILL.md +255 -0
- package/dist/agents/skills/codex/harness-resilience/skill.yaml +76 -0
- package/dist/agents/skills/codex/harness-roadmap/SKILL.md +595 -0
- package/dist/agents/skills/codex/harness-roadmap/skill.yaml +44 -0
- package/dist/agents/skills/codex/harness-secrets/SKILL.md +293 -0
- package/dist/agents/skills/codex/harness-secrets/skill.yaml +76 -0
- package/dist/agents/skills/codex/harness-security-review/SKILL.md +260 -0
- package/dist/agents/skills/codex/harness-security-review/skill.yaml +53 -0
- package/dist/agents/skills/codex/harness-security-scan/SKILL.md +154 -0
- package/dist/agents/skills/codex/harness-security-scan/skill.yaml +42 -0
- package/dist/agents/skills/codex/harness-skill-authoring/SKILL.md +292 -0
- package/dist/agents/skills/codex/harness-skill-authoring/skill.yaml +33 -0
- package/dist/agents/skills/codex/harness-soundness-review/SKILL.md +1267 -0
- package/dist/agents/skills/codex/harness-soundness-review/skill.yaml +49 -0
- package/dist/agents/skills/codex/harness-sql-review/SKILL.md +315 -0
- package/dist/agents/skills/codex/harness-sql-review/skill.yaml +74 -0
- package/dist/agents/skills/codex/harness-state-management/SKILL.md +309 -0
- package/dist/agents/skills/codex/harness-state-management/skill.yaml +33 -0
- package/dist/agents/skills/codex/harness-supply-chain-audit/SKILL.md +281 -0
- package/dist/agents/skills/codex/harness-supply-chain-audit/skill.yaml +51 -0
- package/dist/agents/skills/codex/harness-tdd/SKILL.md +177 -0
- package/dist/agents/skills/codex/harness-tdd/skill.yaml +49 -0
- package/dist/agents/skills/codex/harness-test-advisor/SKILL.md +160 -0
- package/dist/agents/skills/codex/harness-test-advisor/skill.yaml +45 -0
- package/dist/agents/skills/codex/harness-test-data/SKILL.md +268 -0
- package/dist/agents/skills/codex/harness-test-data/skill.yaml +74 -0
- package/dist/agents/skills/codex/harness-ux-copy/SKILL.md +271 -0
- package/dist/agents/skills/codex/harness-ux-copy/skill.yaml +77 -0
- package/dist/agents/skills/codex/harness-verification/SKILL.md +421 -0
- package/dist/agents/skills/codex/harness-verification/skill.yaml +43 -0
- package/dist/agents/skills/codex/harness-verify/SKILL.md +159 -0
- package/dist/agents/skills/codex/harness-verify/skill.yaml +41 -0
- package/dist/agents/skills/codex/harness-visual-regression/SKILL.md +257 -0
- package/dist/agents/skills/codex/harness-visual-regression/skill.yaml +74 -0
- package/dist/agents/skills/codex/initialize-harness-project/SKILL.md +232 -0
- package/dist/agents/skills/codex/initialize-harness-project/skill.yaml +32 -0
- package/dist/agents/skills/codex/validate-context-engineering/SKILL.md +150 -0
- package/dist/agents/skills/codex/validate-context-engineering/skill.yaml +32 -0
- package/dist/agents/skills/cursor/add-harness-component/SKILL.md +192 -0
- package/dist/agents/skills/cursor/add-harness-component/skill.yaml +33 -0
- package/dist/agents/skills/cursor/align-documentation/SKILL.md +213 -0
- package/dist/agents/skills/cursor/align-documentation/skill.yaml +32 -0
- package/dist/agents/skills/cursor/check-mechanical-constraints/SKILL.md +191 -0
- package/dist/agents/skills/cursor/check-mechanical-constraints/skill.yaml +33 -0
- package/dist/agents/skills/cursor/cleanup-dead-code/SKILL.md +245 -0
- package/dist/agents/skills/cursor/cleanup-dead-code/skill.yaml +34 -0
- package/dist/agents/skills/cursor/detect-doc-drift/SKILL.md +179 -0
- package/dist/agents/skills/cursor/detect-doc-drift/skill.yaml +31 -0
- package/dist/agents/skills/cursor/enforce-architecture/SKILL.md +296 -0
- package/dist/agents/skills/cursor/enforce-architecture/skill.yaml +35 -0
- package/dist/agents/skills/cursor/harness-accessibility/SKILL.md +281 -0
- package/dist/agents/skills/cursor/harness-accessibility/skill.yaml +52 -0
- package/dist/agents/skills/cursor/harness-api-design/SKILL.md +356 -0
- package/dist/agents/skills/cursor/harness-api-design/skill.yaml +74 -0
- package/dist/agents/skills/cursor/harness-architecture-advisor/SKILL.md +449 -0
- package/dist/agents/skills/cursor/harness-architecture-advisor/skill.yaml +49 -0
- package/dist/agents/skills/cursor/harness-auth/SKILL.md +331 -0
- package/dist/agents/skills/cursor/harness-auth/skill.yaml +81 -0
- package/dist/agents/skills/cursor/harness-autopilot/SKILL.md +916 -0
- package/dist/agents/skills/cursor/harness-autopilot/skill.yaml +67 -0
- package/dist/agents/skills/cursor/harness-brainstorming/SKILL.md +406 -0
- package/dist/agents/skills/cursor/harness-brainstorming/skill.yaml +50 -0
- package/dist/agents/skills/cursor/harness-caching/SKILL.md +309 -0
- package/dist/agents/skills/cursor/harness-caching/skill.yaml +73 -0
- package/dist/agents/skills/cursor/harness-chaos/SKILL.md +295 -0
- package/dist/agents/skills/cursor/harness-chaos/skill.yaml +72 -0
- package/dist/agents/skills/cursor/harness-code-review/SKILL.md +857 -0
- package/dist/agents/skills/cursor/harness-code-review/skill.yaml +52 -0
- package/dist/agents/skills/cursor/harness-codebase-cleanup/SKILL.md +224 -0
- package/dist/agents/skills/cursor/harness-codebase-cleanup/skill.yaml +65 -0
- package/dist/agents/skills/cursor/harness-compliance/SKILL.md +303 -0
- package/dist/agents/skills/cursor/harness-compliance/skill.yaml +78 -0
- package/dist/agents/skills/cursor/harness-containerization/SKILL.md +284 -0
- package/dist/agents/skills/cursor/harness-containerization/skill.yaml +80 -0
- package/dist/agents/skills/cursor/harness-data-pipeline/SKILL.md +274 -0
- package/dist/agents/skills/cursor/harness-data-pipeline/skill.yaml +81 -0
- package/dist/agents/skills/cursor/harness-data-validation/SKILL.md +343 -0
- package/dist/agents/skills/cursor/harness-data-validation/skill.yaml +75 -0
- package/dist/agents/skills/cursor/harness-database/SKILL.md +310 -0
- package/dist/agents/skills/cursor/harness-database/skill.yaml +80 -0
- package/dist/agents/skills/cursor/harness-debugging/SKILL.md +366 -0
- package/dist/agents/skills/cursor/harness-debugging/skill.yaml +48 -0
- package/dist/agents/skills/cursor/harness-dependency-health/SKILL.md +179 -0
- package/dist/agents/skills/cursor/harness-dependency-health/skill.yaml +42 -0
- package/dist/agents/skills/cursor/harness-deployment/SKILL.md +307 -0
- package/dist/agents/skills/cursor/harness-deployment/skill.yaml +77 -0
- package/dist/agents/skills/cursor/harness-design/SKILL.md +265 -0
- package/dist/agents/skills/cursor/harness-design/skill.yaml +54 -0
- package/dist/agents/skills/cursor/harness-design-mobile/SKILL.md +336 -0
- package/dist/agents/skills/cursor/harness-design-mobile/skill.yaml +50 -0
- package/dist/agents/skills/cursor/harness-design-system/SKILL.md +282 -0
- package/dist/agents/skills/cursor/harness-design-system/skill.yaml +51 -0
- package/dist/agents/skills/cursor/harness-design-web/SKILL.md +360 -0
- package/dist/agents/skills/cursor/harness-design-web/skill.yaml +53 -0
- package/dist/agents/skills/cursor/harness-diagnostics/SKILL.md +318 -0
- package/dist/agents/skills/cursor/harness-diagnostics/skill.yaml +51 -0
- package/dist/agents/skills/cursor/harness-docs-pipeline/SKILL.md +460 -0
- package/dist/agents/skills/cursor/harness-docs-pipeline/skill.yaml +70 -0
- package/dist/agents/skills/cursor/harness-dx/SKILL.md +276 -0
- package/dist/agents/skills/cursor/harness-dx/skill.yaml +76 -0
- package/dist/agents/skills/cursor/harness-e2e/SKILL.md +245 -0
- package/dist/agents/skills/cursor/harness-e2e/skill.yaml +78 -0
- package/dist/agents/skills/cursor/harness-event-driven/SKILL.md +280 -0
- package/dist/agents/skills/cursor/harness-event-driven/skill.yaml +77 -0
- package/dist/agents/skills/cursor/harness-execution/SKILL.md +510 -0
- package/dist/agents/skills/cursor/harness-execution/skill.yaml +52 -0
- package/dist/agents/skills/cursor/harness-feature-flags/SKILL.md +287 -0
- package/dist/agents/skills/cursor/harness-feature-flags/skill.yaml +74 -0
- package/dist/agents/skills/cursor/harness-git-workflow/SKILL.md +268 -0
- package/dist/agents/skills/cursor/harness-git-workflow/skill.yaml +32 -0
- package/dist/agents/skills/cursor/harness-hotspot-detector/SKILL.md +161 -0
- package/dist/agents/skills/cursor/harness-hotspot-detector/skill.yaml +45 -0
- package/dist/agents/skills/cursor/harness-i18n/SKILL.md +484 -0
- package/dist/agents/skills/cursor/harness-i18n/skill.yaml +55 -0
- package/dist/agents/skills/cursor/harness-i18n-process/SKILL.md +388 -0
- package/dist/agents/skills/cursor/harness-i18n-process/skill.yaml +44 -0
- package/dist/agents/skills/cursor/harness-i18n-workflow/SKILL.md +512 -0
- package/dist/agents/skills/cursor/harness-i18n-workflow/skill.yaml +54 -0
- package/dist/agents/skills/cursor/harness-impact-analysis/SKILL.md +184 -0
- package/dist/agents/skills/cursor/harness-impact-analysis/skill.yaml +45 -0
- package/dist/agents/skills/cursor/harness-incident-response/SKILL.md +223 -0
- package/dist/agents/skills/cursor/harness-incident-response/skill.yaml +78 -0
- package/dist/agents/skills/cursor/harness-infrastructure-as-code/SKILL.md +279 -0
- package/dist/agents/skills/cursor/harness-infrastructure-as-code/skill.yaml +80 -0
- package/dist/agents/skills/cursor/harness-integration-test/SKILL.md +271 -0
- package/dist/agents/skills/cursor/harness-integration-test/skill.yaml +73 -0
- package/dist/agents/skills/cursor/harness-integrity/SKILL.md +167 -0
- package/dist/agents/skills/cursor/harness-integrity/skill.yaml +48 -0
- package/dist/agents/skills/cursor/harness-knowledge-mapper/SKILL.md +195 -0
- package/dist/agents/skills/cursor/harness-knowledge-mapper/skill.yaml +50 -0
- package/dist/agents/skills/cursor/harness-load-testing/SKILL.md +274 -0
- package/dist/agents/skills/cursor/harness-load-testing/skill.yaml +79 -0
- package/dist/agents/skills/cursor/harness-ml-ops/SKILL.md +341 -0
- package/dist/agents/skills/cursor/harness-ml-ops/skill.yaml +79 -0
- package/dist/agents/skills/cursor/harness-mobile-patterns/SKILL.md +326 -0
- package/dist/agents/skills/cursor/harness-mobile-patterns/skill.yaml +82 -0
- package/dist/agents/skills/cursor/harness-mutation-test/SKILL.md +251 -0
- package/dist/agents/skills/cursor/harness-mutation-test/skill.yaml +70 -0
- package/dist/agents/skills/cursor/harness-observability/SKILL.md +283 -0
- package/dist/agents/skills/cursor/harness-observability/skill.yaml +78 -0
- package/dist/agents/skills/cursor/harness-onboarding/SKILL.md +288 -0
- package/dist/agents/skills/cursor/harness-onboarding/skill.yaml +31 -0
- package/dist/agents/skills/cursor/harness-parallel-agents/SKILL.md +256 -0
- package/dist/agents/skills/cursor/harness-parallel-agents/skill.yaml +34 -0
- package/dist/agents/skills/cursor/harness-perf/SKILL.md +260 -0
- package/dist/agents/skills/cursor/harness-perf/skill.yaml +51 -0
- package/dist/agents/skills/cursor/harness-perf-tdd/SKILL.md +249 -0
- package/dist/agents/skills/cursor/harness-perf-tdd/skill.yaml +48 -0
- package/dist/agents/skills/cursor/harness-planning/SKILL.md +579 -0
- package/dist/agents/skills/cursor/harness-planning/skill.yaml +56 -0
- package/dist/agents/skills/cursor/harness-pre-commit-review/SKILL.md +324 -0
- package/dist/agents/skills/cursor/harness-pre-commit-review/skill.yaml +34 -0
- package/dist/agents/skills/cursor/harness-product-spec/SKILL.md +285 -0
- package/dist/agents/skills/cursor/harness-product-spec/skill.yaml +72 -0
- package/dist/agents/skills/cursor/harness-property-test/SKILL.md +281 -0
- package/dist/agents/skills/cursor/harness-property-test/skill.yaml +71 -0
- package/dist/agents/skills/cursor/harness-refactoring/SKILL.md +169 -0
- package/dist/agents/skills/cursor/harness-refactoring/skill.yaml +34 -0
- package/dist/agents/skills/cursor/harness-release-readiness/SKILL.md +689 -0
- package/dist/agents/skills/cursor/harness-release-readiness/skill.yaml +58 -0
- package/dist/agents/skills/cursor/harness-resilience/SKILL.md +255 -0
- package/dist/agents/skills/cursor/harness-resilience/skill.yaml +76 -0
- package/dist/agents/skills/cursor/harness-roadmap/SKILL.md +595 -0
- package/dist/agents/skills/cursor/harness-roadmap/skill.yaml +44 -0
- package/dist/agents/skills/cursor/harness-secrets/SKILL.md +293 -0
- package/dist/agents/skills/cursor/harness-secrets/skill.yaml +76 -0
- package/dist/agents/skills/cursor/harness-security-review/SKILL.md +260 -0
- package/dist/agents/skills/cursor/harness-security-review/skill.yaml +53 -0
- package/dist/agents/skills/cursor/harness-security-scan/SKILL.md +154 -0
- package/dist/agents/skills/cursor/harness-security-scan/skill.yaml +42 -0
- package/dist/agents/skills/cursor/harness-skill-authoring/SKILL.md +292 -0
- package/dist/agents/skills/cursor/harness-skill-authoring/skill.yaml +33 -0
- package/dist/agents/skills/cursor/harness-soundness-review/SKILL.md +1267 -0
- package/dist/agents/skills/cursor/harness-soundness-review/skill.yaml +49 -0
- package/dist/agents/skills/cursor/harness-sql-review/SKILL.md +315 -0
- package/dist/agents/skills/cursor/harness-sql-review/skill.yaml +74 -0
- package/dist/agents/skills/cursor/harness-state-management/SKILL.md +309 -0
- package/dist/agents/skills/cursor/harness-state-management/skill.yaml +33 -0
- package/dist/agents/skills/cursor/harness-supply-chain-audit/SKILL.md +281 -0
- package/dist/agents/skills/cursor/harness-supply-chain-audit/skill.yaml +51 -0
- package/dist/agents/skills/cursor/harness-tdd/SKILL.md +177 -0
- package/dist/agents/skills/cursor/harness-tdd/skill.yaml +49 -0
- package/dist/agents/skills/cursor/harness-test-advisor/SKILL.md +160 -0
- package/dist/agents/skills/cursor/harness-test-advisor/skill.yaml +45 -0
- package/dist/agents/skills/cursor/harness-test-data/SKILL.md +268 -0
- package/dist/agents/skills/cursor/harness-test-data/skill.yaml +74 -0
- package/dist/agents/skills/cursor/harness-ux-copy/SKILL.md +271 -0
- package/dist/agents/skills/cursor/harness-ux-copy/skill.yaml +77 -0
- package/dist/agents/skills/cursor/harness-verification/SKILL.md +421 -0
- package/dist/agents/skills/cursor/harness-verification/skill.yaml +43 -0
- package/dist/agents/skills/cursor/harness-verify/SKILL.md +159 -0
- package/dist/agents/skills/cursor/harness-verify/skill.yaml +41 -0
- package/dist/agents/skills/cursor/harness-visual-regression/SKILL.md +257 -0
- package/dist/agents/skills/cursor/harness-visual-regression/skill.yaml +74 -0
- package/dist/agents/skills/cursor/initialize-harness-project/SKILL.md +232 -0
- package/dist/agents/skills/cursor/initialize-harness-project/skill.yaml +32 -0
- package/dist/agents/skills/cursor/validate-context-engineering/SKILL.md +150 -0
- package/dist/agents/skills/cursor/validate-context-engineering/skill.yaml +32 -0
- package/dist/agents/skills/gemini-cli/enforce-architecture/SKILL.md +52 -0
- package/dist/agents/skills/gemini-cli/harness-api-design/SKILL.md +52 -0
- package/dist/agents/skills/gemini-cli/harness-architecture-advisor/SKILL.md +52 -0
- package/dist/agents/skills/gemini-cli/harness-auth/SKILL.md +52 -0
- package/dist/agents/skills/gemini-cli/harness-autopilot/SKILL.md +355 -45
- package/dist/agents/skills/gemini-cli/harness-autopilot/skill.yaml +12 -0
- package/dist/agents/skills/gemini-cli/harness-code-review/SKILL.md +97 -3
- package/dist/agents/skills/gemini-cli/harness-code-review/skill.yaml +6 -0
- package/dist/agents/skills/gemini-cli/harness-codebase-cleanup/SKILL.md +2 -4
- package/dist/agents/skills/gemini-cli/harness-database/SKILL.md +52 -0
- package/dist/agents/skills/gemini-cli/harness-deployment/SKILL.md +52 -0
- package/dist/agents/skills/gemini-cli/harness-planning/SKILL.md +99 -3
- package/dist/agents/skills/gemini-cli/harness-planning/skill.yaml +6 -0
- package/dist/agents/skills/gemini-cli/harness-pre-commit-review/SKILL.md +1 -1
- package/dist/agents/skills/gemini-cli/harness-product-spec/SKILL.md +5 -5
- package/dist/agents/skills/gemini-cli/harness-security-review/SKILL.md +27 -7
- package/dist/agents/skills/gemini-cli/harness-security-scan/SKILL.md +52 -0
- package/dist/agents/skills/gemini-cli/harness-supply-chain-audit/SKILL.md +281 -0
- package/dist/agents/skills/gemini-cli/harness-supply-chain-audit/skill.yaml +51 -0
- package/dist/agents/skills/package.json +1 -0
- package/dist/agents/skills/templates/discipline-template.md +49 -0
- package/dist/agents/skills/tests/schema.ts +1 -1
- package/dist/agents/skills/vitest.config.mts +5 -0
- package/dist/{agents-md-YTYQDA3P.js → agents-md-VYDFPIRW.js} +1 -1
- package/dist/{architecture-JQZYM4US.js → architecture-K5HSRBGB.js} +2 -2
- package/dist/bin/harness-mcp.js +13 -13
- package/dist/bin/harness.js +21 -19
- package/dist/{check-phase-gate-L3RADYWO.js → check-phase-gate-5AS6SXL6.js} +3 -3
- package/dist/{chunk-6KTUUFRN.js → chunk-5ZXHMCPL.js} +1 -1
- package/dist/{chunk-RCWZBSK5.js → chunk-6KWBH4EO.js} +1 -1
- package/dist/{chunk-ABQHQ6I5.js → chunk-ALFKNAZW.js} +2436 -233
- package/dist/{chunk-OXLLOSSR.js → chunk-AV6KMDO5.js} +2 -2
- package/dist/{chunk-7IP4JIFL.js → chunk-C7DTKLPW.js} +4 -4
- package/dist/{chunk-ZOAWBDWU.js → chunk-CJDVBBPB.js} +5 -1
- package/dist/{chunk-YPYGXRDR.js → chunk-DNDBFIZN.js} +18 -4
- package/dist/{chunk-XYLGHKG6.js → chunk-HKUX2X7O.js} +11 -2
- package/dist/{chunk-YZD2MRNQ.js → chunk-JOP2NDNB.js} +684 -142
- package/dist/{chunk-YBJ262QL.js → chunk-LRG3B43J.js} +1 -1
- package/dist/{chunk-AOZRDOIP.js → chunk-M6TIO6NF.js} +1 -1
- package/dist/{chunk-O5OJVPL6.js → chunk-OCDDCGDE.js} +9 -1
- package/dist/{chunk-OSXBPAMK.js → chunk-QDF7COPQ.js} +1 -1
- package/dist/{chunk-TPOTOBR7.js → chunk-RWZPHW4H.js} +3 -3
- package/dist/{chunk-3C2MLBPJ.js → chunk-SFRGPAK6.js} +1 -1
- package/dist/{chunk-XKECDXJS.js → chunk-SHYWICGA.js} +2184 -456
- package/dist/{chunk-S2FXOWOR.js → chunk-TF6ZLHJV.js} +2 -2
- package/dist/{chunk-NLVUVUGD.js → chunk-ZJMU7MEV.js} +1 -1
- package/dist/{ci-workflow-EQZFVX3P.js → ci-workflow-CRWU723U.js} +1 -1
- package/dist/{create-skill-XSWHMSM5.js → create-skill-NDXQSTIK.js} +2 -2
- package/dist/{dist-HWXF2C3R.js → dist-4LPXJYVZ.js} +105 -1
- package/dist/{docs-7ECGYMAV.js → docs-4JRHTLUZ.js} +3 -3
- package/dist/{engine-EG4EH4IX.js → engine-3G3VIM6L.js} +1 -1
- package/dist/{entropy-5USWKLVS.js → entropy-G6CZ2A6P.js} +2 -2
- package/dist/{feedback-UTBXZZHF.js → feedback-QYKQ65HB.js} +1 -1
- package/dist/{generate-agent-definitions-3PM5EU7V.js → generate-agent-definitions-SAAOAPT4.js} +3 -3
- package/dist/index.d.ts +25 -4
- package/dist/index.js +18 -18
- package/dist/{loader-ZPALXIVR.js → loader-VCOK3PF7.js} +1 -1
- package/dist/{mcp-362EZHF4.js → mcp-YENEPHBW.js} +13 -13
- package/dist/{performance-OQAFMJUD.js → performance-UBCFI2UP.js} +4 -2
- package/dist/{review-pipeline-C4GCFVGP.js → review-pipeline-IQAVCWAX.js} +1 -1
- package/dist/{runtime-7YLVK453.js → runtime-PYFFIESU.js} +1 -1
- package/dist/{security-PZOX7AQS.js → security-ZDADTPYW.js} +1 -1
- package/dist/{skill-executor-XZLYZYAK.js → skill-executor-XEVDGXUM.js} +2 -2
- package/dist/{validate-FD3Z6VJD.js → validate-VRTUHALQ.js} +2 -2
- package/dist/{validate-cross-check-WNJM6H2D.js → validate-cross-check-4Y6NHNK3.js} +1 -1
- package/package.json +8 -5
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
# Harness DX
|
|
2
|
+
|
|
3
|
+
> Audit developer experience artifacts -- README quality, API documentation coverage, getting-started guides, and example code validation. Produces a structured DX scorecard with specific improvements and scaffolds missing documentation.
|
|
4
|
+
|
|
5
|
+
## When to Use
|
|
6
|
+
|
|
7
|
+
- When preparing a library, SDK, or open-source project for release and developer adoption matters
|
|
8
|
+
- When reviewing a PR that changes public API surface and documentation should match
|
|
9
|
+
- When onboarding friction is high and you need to identify where developers get stuck
|
|
10
|
+
- NOT for internal architecture documentation (use harness-docs-pipeline)
|
|
11
|
+
- NOT for user-facing product copy (use harness-ux-copy)
|
|
12
|
+
- NOT for API design decisions like REST vs GraphQL (use harness-api-design)
|
|
13
|
+
|
|
14
|
+
## Process
|
|
15
|
+
|
|
16
|
+
### Phase 1: AUDIT -- Evaluate Documentation Quality
|
|
17
|
+
|
|
18
|
+
1. **Resolve project root.** Use provided path or cwd.
|
|
19
|
+
|
|
20
|
+
2. **Locate documentation artifacts.** Search for:
|
|
21
|
+
- README files: `README.md`, `README.rst`, `readme.md`
|
|
22
|
+
- Getting started: `GETTING_STARTED.md`, `QUICKSTART.md`, `docs/getting-started.md`
|
|
23
|
+
- API docs: `docs/api/`, `API.md`, generated docs in `docs/`, `site/`
|
|
24
|
+
- Examples: `examples/`, `demos/`, `samples/`, code blocks in README
|
|
25
|
+
- Changelog: `CHANGELOG.md`, `CHANGES.md`, `HISTORY.md`
|
|
26
|
+
- Contributing: `CONTRIBUTING.md`, `.github/CONTRIBUTING.md`
|
|
27
|
+
|
|
28
|
+
3. **Score README completeness.** Check for the presence and quality of each section:
|
|
29
|
+
- **Title and description** (what is this project?) -- 0-2 points
|
|
30
|
+
- **Installation/setup** (how do I get it?) -- 0-3 points
|
|
31
|
+
- **Quick example** (show me it working in under 30 seconds) -- 0-3 points
|
|
32
|
+
- **API reference or link** (where is the full documentation?) -- 0-2 points
|
|
33
|
+
- **Contributing guide or link** -- 0-1 point
|
|
34
|
+
- **License** -- 0-1 point
|
|
35
|
+
- Total: score out of 12, grade A (10+), B (7-9), C (4-6), D (0-3)
|
|
36
|
+
|
|
37
|
+
4. **Evaluate installation instructions.** Check:
|
|
38
|
+
- Are all package managers covered? (npm, yarn, pnpm for JS; pip, poetry for Python; cargo for Rust)
|
|
39
|
+
- Are prerequisites listed? (Node version, OS requirements, system dependencies)
|
|
40
|
+
- Is there a one-liner to get started? (copy-paste friendly)
|
|
41
|
+
- Do the instructions work on all documented platforms?
|
|
42
|
+
|
|
43
|
+
5. **Assess API documentation coverage.** For every exported function, class, or endpoint:
|
|
44
|
+
- Is it documented?
|
|
45
|
+
- Does it have parameter descriptions?
|
|
46
|
+
- Does it have a usage example?
|
|
47
|
+
- Does it have return type documentation?
|
|
48
|
+
- Calculate coverage percentage: `documented / total * 100`
|
|
49
|
+
|
|
50
|
+
6. **Check for time-to-hello-world.** Estimate the number of steps from `git clone` to seeing the project work. Fewer than 5 steps is good. More than 10 is a problem.
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
### Phase 2: EXTRACT -- Identify and Validate Examples
|
|
55
|
+
|
|
56
|
+
1. **Extract code examples from documentation.** Parse all markdown files for fenced code blocks with language annotations. Track:
|
|
57
|
+
- File location and line number
|
|
58
|
+
- Language (js, ts, python, bash, etc.)
|
|
59
|
+
- Whether it is a complete runnable example or a fragment
|
|
60
|
+
|
|
61
|
+
2. **Extract standalone examples.** Scan `examples/`, `demos/`, `samples/` for:
|
|
62
|
+
- Example projects with their own package.json/requirements.txt
|
|
63
|
+
- Single-file examples
|
|
64
|
+
- Example README files explaining what each example demonstrates
|
|
65
|
+
|
|
66
|
+
3. **Validate example syntax.** For each extracted code example:
|
|
67
|
+
- Check for syntax errors (missing imports, unclosed brackets, invalid syntax)
|
|
68
|
+
- Check for references to APIs that no longer exist (stale examples)
|
|
69
|
+
- Check that import paths match the actual package name and exports
|
|
70
|
+
|
|
71
|
+
4. **Run executable examples.** When `--validate-examples` is set:
|
|
72
|
+
- For JavaScript/TypeScript: attempt `node` or `tsx` execution
|
|
73
|
+
- For Python: attempt `python` execution
|
|
74
|
+
- For shell commands: validate they reference real scripts and flags
|
|
75
|
+
- Record pass/fail for each example with error output
|
|
76
|
+
|
|
77
|
+
5. **Check example freshness.** Compare examples against the current API surface:
|
|
78
|
+
- Are there deprecated APIs used in examples?
|
|
79
|
+
- Are there new APIs with no examples?
|
|
80
|
+
- When was each example file last modified relative to the source it demonstrates?
|
|
81
|
+
|
|
82
|
+
6. **Build coverage map.** Map examples to the APIs they demonstrate. Identify APIs with zero examples (documentation gaps).
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
### Phase 3: SCAFFOLD -- Generate Missing Documentation
|
|
87
|
+
|
|
88
|
+
1. **Generate README sections.** For any missing README section identified in Phase 1:
|
|
89
|
+
- Draft installation instructions by reading `package.json`, `setup.py`, `Cargo.toml`, or equivalent
|
|
90
|
+
- Draft a quick-start example using the project's main export
|
|
91
|
+
- Draft a features list from the project's exports and test descriptions
|
|
92
|
+
|
|
93
|
+
2. **Generate API documentation stubs.** For undocumented exports:
|
|
94
|
+
- Extract function signatures, parameter types, and return types from source
|
|
95
|
+
- Generate JSDoc/docstring stubs with parameter descriptions inferred from type names
|
|
96
|
+
- Include a usage example skeleton derived from test files when available
|
|
97
|
+
|
|
98
|
+
3. **Generate example files.** For APIs with no examples:
|
|
99
|
+
- Create a minimal working example in `examples/`
|
|
100
|
+
- Include comments explaining each step
|
|
101
|
+
- Ensure the example is self-contained (includes imports, setup, and cleanup)
|
|
102
|
+
|
|
103
|
+
4. **Generate getting-started guide.** If no quickstart exists:
|
|
104
|
+
- Write a step-by-step guide from installation through first meaningful use
|
|
105
|
+
- Include expected output at each step
|
|
106
|
+
- Target under 5 minutes to complete
|
|
107
|
+
|
|
108
|
+
5. **Propose documentation structure.** If documentation is scattered or missing:
|
|
109
|
+
- Recommend a `docs/` directory structure
|
|
110
|
+
- Map content to sections (guides, reference, examples, tutorials)
|
|
111
|
+
- Suggest a documentation site generator if the project is large enough (Docusaurus, MkDocs, mdBook)
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
### Phase 4: VALIDATE -- Verify Documentation Accuracy
|
|
116
|
+
|
|
117
|
+
1. **Check link integrity.** Verify all links in documentation:
|
|
118
|
+
- Internal links: do referenced files and anchors exist?
|
|
119
|
+
- External links: are they well-formed? (do not make HTTP requests)
|
|
120
|
+
- Badge URLs: are shields.io and similar badge URLs using the correct repo/package name?
|
|
121
|
+
|
|
122
|
+
2. **Check version consistency.** Verify documentation matches the current version:
|
|
123
|
+
- Does the installation section reference the correct package version?
|
|
124
|
+
- Do API examples use the current function signatures?
|
|
125
|
+
- Is the changelog up to date with the latest release?
|
|
126
|
+
|
|
127
|
+
3. **Check cross-references.** Verify README links to detailed docs, and detailed docs link back to the README and to each other where appropriate.
|
|
128
|
+
|
|
129
|
+
4. **Output DX scorecard.** Present the complete audit results:
|
|
130
|
+
|
|
131
|
+
```
|
|
132
|
+
DX Scorecard: [GRADE]
|
|
133
|
+
README: [score]/12 ([grade])
|
|
134
|
+
API Coverage: [N]% ([documented]/[total] exports)
|
|
135
|
+
Examples: [working]/[total] passing
|
|
136
|
+
Time to Hello World: ~[N] steps
|
|
137
|
+
Links: [valid]/[total] verified
|
|
138
|
+
|
|
139
|
+
GAPS:
|
|
140
|
+
- Missing: getting-started guide
|
|
141
|
+
- Missing: 12 undocumented exports
|
|
142
|
+
- Broken: examples/advanced.ts references removed API
|
|
143
|
+
|
|
144
|
+
GENERATED:
|
|
145
|
+
- docs/getting-started.md (draft)
|
|
146
|
+
- 4 API documentation stubs added
|
|
147
|
+
- examples/basic-usage.ts created
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
5. **Verify scaffolded content compiles.** If documentation was generated, verify:
|
|
151
|
+
- Generated code examples have valid syntax
|
|
152
|
+
- Generated markdown renders correctly (no broken formatting)
|
|
153
|
+
- Generated files are placed in the correct directories
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## Harness Integration
|
|
158
|
+
|
|
159
|
+
- **`harness skill run harness-dx`** -- Primary command for running the DX audit.
|
|
160
|
+
- **`harness validate`** -- Run after scaffolding documentation to verify project health.
|
|
161
|
+
- **`Glob`** -- Used to locate README files, documentation directories, example folders, and API docs.
|
|
162
|
+
- **`Grep`** -- Used to extract exported symbols, find documentation comments, and locate code examples in markdown.
|
|
163
|
+
- **`Read`** -- Used to read documentation files, package manifests, and source files for API extraction.
|
|
164
|
+
- **`Write`** -- Used to scaffold missing documentation, generate example files, and create getting-started guides.
|
|
165
|
+
- **`Bash`** -- Used to run example validation, check link targets, and execute code snippets.
|
|
166
|
+
- **`emit_interaction`** -- Used to present the DX scorecard and request confirmation before generating scaffolded files.
|
|
167
|
+
|
|
168
|
+
## Success Criteria
|
|
169
|
+
|
|
170
|
+
- README is scored against all 6 completeness criteria with specific gap identification
|
|
171
|
+
- API documentation coverage percentage is calculated against actual exported surface
|
|
172
|
+
- All code examples in documentation are syntax-checked
|
|
173
|
+
- Executable examples pass when `--validate-examples` is set
|
|
174
|
+
- Missing documentation is scaffolded with accurate, runnable content
|
|
175
|
+
- DX scorecard provides an at-a-glance quality grade
|
|
176
|
+
- Time-to-hello-world is estimated and actionable if too high
|
|
177
|
+
|
|
178
|
+
## Examples
|
|
179
|
+
|
|
180
|
+
### Example: Node.js SDK with Sparse Documentation
|
|
181
|
+
|
|
182
|
+
```
|
|
183
|
+
Phase 1: AUDIT
|
|
184
|
+
README score: 5/12 (C)
|
|
185
|
+
Present: title, description, license
|
|
186
|
+
Missing: installation, quick example, API reference link, contributing
|
|
187
|
+
API coverage: 23% (7/30 exports documented)
|
|
188
|
+
Time to hello world: ~14 steps (too many, target: <5)
|
|
189
|
+
|
|
190
|
+
Phase 2: EXTRACT
|
|
191
|
+
Code examples found: 3 (all in README)
|
|
192
|
+
examples/ directory: empty
|
|
193
|
+
Validation: 2/3 examples pass syntax check
|
|
194
|
+
Broken: README line 45 references `sdk.connect()` -- renamed to `sdk.init()` in v2.0
|
|
195
|
+
|
|
196
|
+
Phase 3: SCAFFOLD
|
|
197
|
+
Generated: docs/getting-started.md (5-step quickstart)
|
|
198
|
+
Generated: examples/basic-usage.ts (demonstrates init, query, cleanup)
|
|
199
|
+
Generated: 23 JSDoc stubs from TypeScript signatures
|
|
200
|
+
README patches: added installation section, updated broken example
|
|
201
|
+
|
|
202
|
+
Phase 4: VALIDATE
|
|
203
|
+
Links: 8/10 valid (2 broken anchors in README)
|
|
204
|
+
Generated examples: syntax valid
|
|
205
|
+
DX Scorecard: C -> B (projected after applying changes)
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### Example: Python Library with Comprehensive Docs (Sphinx)
|
|
209
|
+
|
|
210
|
+
```
|
|
211
|
+
Phase 1: AUDIT
|
|
212
|
+
README score: 11/12 (A)
|
|
213
|
+
Missing only: contributing guide link
|
|
214
|
+
API coverage: 89% (142/160 functions documented)
|
|
215
|
+
Sphinx docs at docs/_build/html: present, 45 pages
|
|
216
|
+
Time to hello world: ~4 steps (good)
|
|
217
|
+
|
|
218
|
+
Phase 2: EXTRACT
|
|
219
|
+
Code examples: 28 in docs, 12 in examples/
|
|
220
|
+
Validation: 37/40 pass (3 use deprecated pandas.append)
|
|
221
|
+
Stale examples: 3 files last modified 8 months ago, source changed since
|
|
222
|
+
|
|
223
|
+
Phase 3: SCAFFOLD
|
|
224
|
+
Generated: 18 docstring stubs for undocumented functions
|
|
225
|
+
Updated: 3 stale examples to use pandas.concat
|
|
226
|
+
Added: CONTRIBUTING.md link to README
|
|
227
|
+
|
|
228
|
+
Phase 4: VALIDATE
|
|
229
|
+
Links: 52/52 valid
|
|
230
|
+
DX Scorecard: A (maintained, minor freshness issues resolved)
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
### Example: Rust CLI Tool Missing Getting Started
|
|
234
|
+
|
|
235
|
+
```
|
|
236
|
+
Phase 1: AUDIT
|
|
237
|
+
README score: 7/12 (B)
|
|
238
|
+
Present: title, description, installation (cargo install), license, API link
|
|
239
|
+
Missing: quick example showing actual CLI usage, contributing
|
|
240
|
+
API coverage: N/A (CLI tool, not library)
|
|
241
|
+
CLI help text: present via clap derive
|
|
242
|
+
Time to hello world: ~6 steps
|
|
243
|
+
|
|
244
|
+
Phase 2: EXTRACT
|
|
245
|
+
Code examples: 2 in README (both installation commands)
|
|
246
|
+
examples/ directory: 1 example config file, no runnable examples
|
|
247
|
+
Missing: actual usage examples showing command output
|
|
248
|
+
|
|
249
|
+
Phase 3: SCAFFOLD
|
|
250
|
+
Generated: docs/getting-started.md with:
|
|
251
|
+
1. cargo install myctl
|
|
252
|
+
2. myctl init
|
|
253
|
+
3. myctl run --config example.toml
|
|
254
|
+
(with expected output at each step)
|
|
255
|
+
Generated: examples/basic-config.toml with annotated comments
|
|
256
|
+
Generated: README quick-example section with terminal output
|
|
257
|
+
|
|
258
|
+
Phase 4: VALIDATE
|
|
259
|
+
CLI help flags match documented flags: YES
|
|
260
|
+
Config example matches current schema: YES
|
|
261
|
+
DX Scorecard: B -> A (projected after applying changes)
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
## Gates
|
|
265
|
+
|
|
266
|
+
- **No scaffolding without human confirmation.** Generated documentation is always presented as a draft for review. Do not commit generated files automatically. Use `emit_interaction` to present scaffolded content and wait for approval.
|
|
267
|
+
- **No overwriting existing documentation.** If a README section already exists, do not replace it. Only fill gaps. Existing content may have been carefully written and should not be clobbered.
|
|
268
|
+
- **No fabricating API behavior.** Generated documentation and examples must be derived from actual source code (type signatures, test files, existing docs). Do not guess what an undocumented function does based on its name alone.
|
|
269
|
+
- **No marking stale examples as passing.** If an example references a renamed or removed API, it is broken regardless of whether it happens to still parse syntactically.
|
|
270
|
+
|
|
271
|
+
## Escalation
|
|
272
|
+
|
|
273
|
+
- **When API documentation requires domain expertise:** If function behavior cannot be inferred from types and tests alone, flag it: "These 5 functions need developer-written documentation -- their behavior is domain-specific and cannot be reliably inferred."
|
|
274
|
+
- **When examples require external services:** If running an example requires a database, API key, or external service, flag the dependency rather than failing: "This example requires a running PostgreSQL instance. Consider adding a Docker Compose file for example dependencies."
|
|
275
|
+
- **When documentation tooling is broken:** If Sphinx, TypeDoc, or other doc generators fail to build, report the error but do not attempt to fix the toolchain. That is outside this skill's scope.
|
|
276
|
+
- **When README and API docs contradict each other:** Flag the contradiction with both sources quoted. Do not choose which one is correct -- the developer must resolve the conflict: "README says `init()` accepts a string, but the TypeDoc shows it accepts `InitConfig`. Which is current?"
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
name: harness-dx
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
description: Developer experience auditing — README quality, API documentation, getting-started guides, and example validation
|
|
4
|
+
cognitive_mode: advisory-guide
|
|
5
|
+
triggers:
|
|
6
|
+
- manual
|
|
7
|
+
- on_milestone
|
|
8
|
+
- on_pr
|
|
9
|
+
platforms:
|
|
10
|
+
- claude-code
|
|
11
|
+
- gemini-cli
|
|
12
|
+
tools:
|
|
13
|
+
- Bash
|
|
14
|
+
- Read
|
|
15
|
+
- Write
|
|
16
|
+
- Edit
|
|
17
|
+
- Glob
|
|
18
|
+
- Grep
|
|
19
|
+
- emit_interaction
|
|
20
|
+
cli:
|
|
21
|
+
command: harness skill run harness-dx
|
|
22
|
+
args:
|
|
23
|
+
- name: path
|
|
24
|
+
description: Project root path
|
|
25
|
+
required: false
|
|
26
|
+
- name: focus
|
|
27
|
+
description: "Audit focus: readme, api-docs, examples, quickstart, all. Defaults to all."
|
|
28
|
+
required: false
|
|
29
|
+
- name: validate-examples
|
|
30
|
+
description: Run example code snippets to verify they execute successfully
|
|
31
|
+
required: false
|
|
32
|
+
mcp:
|
|
33
|
+
tool: run_skill
|
|
34
|
+
input:
|
|
35
|
+
skill: harness-dx
|
|
36
|
+
path: string
|
|
37
|
+
type: rigid
|
|
38
|
+
tier: 3
|
|
39
|
+
internal: false
|
|
40
|
+
keywords:
|
|
41
|
+
- developer experience
|
|
42
|
+
- DX
|
|
43
|
+
- README
|
|
44
|
+
- API docs
|
|
45
|
+
- getting started
|
|
46
|
+
- examples
|
|
47
|
+
- SDK
|
|
48
|
+
- onboarding
|
|
49
|
+
- documentation quality
|
|
50
|
+
- quickstart
|
|
51
|
+
- tutorials
|
|
52
|
+
stack_signals:
|
|
53
|
+
- "README.md"
|
|
54
|
+
- "docs/"
|
|
55
|
+
- "examples/"
|
|
56
|
+
- "GETTING_STARTED.md"
|
|
57
|
+
- "QUICKSTART.md"
|
|
58
|
+
- "docs/api/"
|
|
59
|
+
- "sdk/"
|
|
60
|
+
phases:
|
|
61
|
+
- name: audit
|
|
62
|
+
description: Evaluate README completeness, API doc coverage, and getting-started guide quality
|
|
63
|
+
required: true
|
|
64
|
+
- name: extract
|
|
65
|
+
description: Identify code examples, API references, and installation instructions for validation
|
|
66
|
+
required: true
|
|
67
|
+
- name: scaffold
|
|
68
|
+
description: Generate missing documentation, fix broken examples, and fill coverage gaps
|
|
69
|
+
required: true
|
|
70
|
+
- name: validate
|
|
71
|
+
description: Verify examples run, links resolve, and documentation matches current API surface
|
|
72
|
+
required: true
|
|
73
|
+
state:
|
|
74
|
+
persistent: false
|
|
75
|
+
files: []
|
|
76
|
+
depends_on: []
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
# Harness E2E
|
|
2
|
+
|
|
3
|
+
> End-to-end browser testing with Playwright, Cypress, or Selenium. Covers page object scaffolding, critical-path test implementation, and systematic flakiness remediation.
|
|
4
|
+
|
|
5
|
+
## When to Use
|
|
6
|
+
|
|
7
|
+
- Writing browser-level tests for critical user flows (login, checkout, onboarding)
|
|
8
|
+
- Adding E2E coverage for a new feature that touches the UI
|
|
9
|
+
- Diagnosing and remediating flaky E2E tests that block CI pipelines
|
|
10
|
+
- NOT when testing API-only behavior with no UI (use harness-integration-test instead)
|
|
11
|
+
- NOT when testing individual component rendering in isolation (use unit tests or harness-tdd instead)
|
|
12
|
+
- NOT when performing visual screenshot comparison (use harness-visual-regression instead)
|
|
13
|
+
|
|
14
|
+
## Process
|
|
15
|
+
|
|
16
|
+
### Phase 1: DETECT -- Identify Framework and Application Structure
|
|
17
|
+
|
|
18
|
+
1. **Scan for E2E configuration.** Search for `playwright.config.ts`, `playwright.config.js`, `cypress.config.ts`, `cypress.config.js`, `wdio.conf.js`, or `selenium` directories. If multiple frameworks are present, prefer the one with the most existing tests.
|
|
19
|
+
|
|
20
|
+
2. **Catalog existing E2E tests.** Glob for `*.spec.ts`, `*.e2e.ts`, `*.cy.ts`, `*.test.ts` within E2E directories. Count tests per file and identify patterns: naming conventions, folder structure, shared utilities.
|
|
21
|
+
|
|
22
|
+
3. **Map application entry points.** Identify the base URL, authentication flow, and route structure. Check for:
|
|
23
|
+
- Environment configuration (`.env.test`, `playwright.config.ts` baseURL)
|
|
24
|
+
- Authentication fixtures (stored auth state, login helpers)
|
|
25
|
+
- Route definitions (Next.js pages, React Router config, Express routes)
|
|
26
|
+
|
|
27
|
+
4. **Identify the test execution environment.** Determine whether tests run against a dev server, a preview deployment, or a Docker Compose stack. Check `package.json` scripts for `e2e`, `test:e2e`, or `playwright test` commands.
|
|
28
|
+
|
|
29
|
+
5. **Report findings.** Summarize: framework detected, number of existing tests, coverage gaps relative to application routes, and any configuration issues (missing base URL, no auth setup).
|
|
30
|
+
|
|
31
|
+
### Phase 2: SCAFFOLD -- Generate Page Objects and Test Infrastructure
|
|
32
|
+
|
|
33
|
+
1. **Create the page object directory.** Follow the project's existing conventions. If no convention exists, use `e2e/pages/` for Playwright or `cypress/pages/` for Cypress.
|
|
34
|
+
|
|
35
|
+
2. **Generate page objects for target flows.** Each page object encapsulates:
|
|
36
|
+
- Locator definitions using stable selectors (`data-testid`, `role`, `aria-label`) -- never CSS classes or XPath positional selectors
|
|
37
|
+
- Action methods (click, fill, navigate) that return the next page object for chaining
|
|
38
|
+
- Assertion helpers that verify page state without exposing DOM internals
|
|
39
|
+
|
|
40
|
+
3. **Create shared fixtures and helpers.** Generate:
|
|
41
|
+
- Authentication fixture that stores and reuses auth state across tests
|
|
42
|
+
- Test data factory integration (API calls or database seeds for prerequisite data)
|
|
43
|
+
- Custom assertions for domain-specific validations
|
|
44
|
+
|
|
45
|
+
4. **Configure test parallelization.** Set up:
|
|
46
|
+
- Worker count based on CI environment capabilities
|
|
47
|
+
- Test isolation (each test gets its own browser context)
|
|
48
|
+
- Retry configuration (1 retry for CI, 0 for local development)
|
|
49
|
+
- Screenshot and trace capture on failure
|
|
50
|
+
|
|
51
|
+
5. **Verify scaffold compiles.** Run the test command with `--list` or `--dry-run` to confirm all imports resolve and page objects instantiate without errors.
|
|
52
|
+
|
|
53
|
+
### Phase 3: IMPLEMENT -- Write E2E Tests for Critical Paths
|
|
54
|
+
|
|
55
|
+
1. **Prioritize user flows by business impact.** Order test implementation:
|
|
56
|
+
- Smoke tests: application loads, critical pages render
|
|
57
|
+
- Authentication: login, logout, session persistence
|
|
58
|
+
- Primary flows: the 3-5 flows that represent 80% of user value
|
|
59
|
+
- Error paths: form validation, 404 handling, permission denied
|
|
60
|
+
|
|
61
|
+
2. **Write each test following the Arrange-Act-Assert pattern.**
|
|
62
|
+
- Arrange: set up test data via API calls or fixtures (never through the UI for setup)
|
|
63
|
+
- Act: perform the user flow through page object methods
|
|
64
|
+
- Assert: verify the expected outcome using page object assertion helpers
|
|
65
|
+
|
|
66
|
+
3. **Use explicit waits, never arbitrary timeouts.** Where the framework provides an auto-waiting mechanism (Playwright `expect` with auto-retry, Cypress implicit waits), rely on it. Where explicit waits are needed, wait for specific network responses, DOM mutations, or URL changes -- never `page.waitForTimeout()`.
|
|
67
|
+
|
|
68
|
+
4. **Isolate tests from each other.** Each test must:
|
|
69
|
+
- Create its own test data (no shared mutable state between tests)
|
|
70
|
+
- Clean up after itself or rely on test isolation (separate browser context)
|
|
71
|
+
- Pass when run individually and when run in any order
|
|
72
|
+
|
|
73
|
+
5. **Tag tests by scope.** Apply tags or annotations:
|
|
74
|
+
- `@smoke` for tests that must pass on every deployment
|
|
75
|
+
- `@critical-path` for primary business flow coverage
|
|
76
|
+
- `@slow` for tests that exceed 30 seconds
|
|
77
|
+
|
|
78
|
+
6. **Run the full E2E suite.** Verify all tests pass locally before proceeding to validation.
|
|
79
|
+
|
|
80
|
+
### Phase 4: VALIDATE -- Execute, Detect Flakiness, and Remediate
|
|
81
|
+
|
|
82
|
+
1. **Run the suite 3 times consecutively.** Track pass/fail per test across runs. Any test that fails in at least one run but passes in another is flagged as flaky.
|
|
83
|
+
|
|
84
|
+
2. **Classify flaky tests by root cause.** Common categories:
|
|
85
|
+
- **Race condition:** test asserts before async operation completes. Fix: add explicit wait for the specific condition.
|
|
86
|
+
- **Shared state:** test depends on data from a previous test. Fix: make test data independent.
|
|
87
|
+
- **Animation/transition:** assertion fires during CSS transition. Fix: wait for animation to complete or disable animations in test mode.
|
|
88
|
+
- **Network timing:** API response arrives before or after expected. Fix: intercept and mock the network request, or wait for the specific response.
|
|
89
|
+
|
|
90
|
+
3. **Apply remediation for each flaky test.** Do not simply add retries -- fix the root cause. Retries mask problems. After remediation, rerun the previously-flaky test 5 times to confirm stability.
|
|
91
|
+
|
|
92
|
+
4. **Run `harness validate`.** Confirm the project passes all harness checks with the new E2E tests in place.
|
|
93
|
+
|
|
94
|
+
5. **Generate a coverage summary.** Report:
|
|
95
|
+
- Number of user flows covered vs. total identified
|
|
96
|
+
- Flaky tests found and remediated
|
|
97
|
+
- Remaining coverage gaps with recommended next steps
|
|
98
|
+
|
|
99
|
+
### Graph Refresh
|
|
100
|
+
|
|
101
|
+
If a knowledge graph exists at `.harness/graph/`, refresh it after code changes to keep graph queries accurate:
|
|
102
|
+
|
|
103
|
+
```
|
|
104
|
+
harness scan [path]
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Harness Integration
|
|
108
|
+
|
|
109
|
+
- **`harness validate`** -- Run in VALIDATE phase after all tests are implemented. Confirms project health including new E2E infrastructure.
|
|
110
|
+
- **`harness check-deps`** -- Run after SCAFFOLD phase to verify E2E test dependencies do not introduce forbidden imports into production code.
|
|
111
|
+
- **`emit_interaction`** -- Used at checkpoints to present flakiness findings and remediation options to the human for approval.
|
|
112
|
+
- **Glob** -- Used in DETECT phase to catalog existing test files and page objects.
|
|
113
|
+
- **Grep** -- Used to search for selector patterns, wait strategies, and anti-patterns in existing tests.
|
|
114
|
+
|
|
115
|
+
## Success Criteria
|
|
116
|
+
|
|
117
|
+
- Every critical user flow identified in DETECT has a corresponding E2E test
|
|
118
|
+
- All E2E tests pass on 3 consecutive local runs with zero flaky failures
|
|
119
|
+
- Page objects use stable selectors (`data-testid`, ARIA roles) -- no CSS class selectors or XPath positional selectors
|
|
120
|
+
- No test uses arbitrary timeouts (`waitForTimeout`, `cy.wait(N)`, `Thread.sleep`)
|
|
121
|
+
- Test data is created via API or fixtures, not through UI interactions during setup
|
|
122
|
+
- Each test is independent and passes when run in isolation
|
|
123
|
+
- `harness validate` passes after the full suite is in place
|
|
124
|
+
|
|
125
|
+
## Examples
|
|
126
|
+
|
|
127
|
+
### Example: Playwright E2E for a SaaS Dashboard
|
|
128
|
+
|
|
129
|
+
**DETECT output:**
|
|
130
|
+
|
|
131
|
+
```
|
|
132
|
+
Framework: Playwright 1.42 (playwright.config.ts found)
|
|
133
|
+
Existing tests: 12 specs in e2e/tests/
|
|
134
|
+
Base URL: http://localhost:3000
|
|
135
|
+
Auth: Cookie-based, no stored auth state found
|
|
136
|
+
Coverage gaps: settings page, billing flow, team invitation
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
**SCAFFOLD -- Page object for dashboard:**
|
|
140
|
+
|
|
141
|
+
```typescript
|
|
142
|
+
// e2e/pages/dashboard.page.ts
|
|
143
|
+
import { type Page, type Locator, expect } from '@playwright/test';
|
|
144
|
+
|
|
145
|
+
export class DashboardPage {
|
|
146
|
+
readonly page: Page;
|
|
147
|
+
readonly heading: Locator;
|
|
148
|
+
readonly projectList: Locator;
|
|
149
|
+
readonly createButton: Locator;
|
|
150
|
+
|
|
151
|
+
constructor(page: Page) {
|
|
152
|
+
this.page = page;
|
|
153
|
+
this.heading = page.getByRole('heading', { name: 'Dashboard' });
|
|
154
|
+
this.projectList = page.getByTestId('project-list');
|
|
155
|
+
this.createButton = page.getByRole('button', { name: 'New Project' });
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
async goto() {
|
|
159
|
+
await this.page.goto('/dashboard');
|
|
160
|
+
await expect(this.heading).toBeVisible();
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
async createProject(name: string) {
|
|
164
|
+
await this.createButton.click();
|
|
165
|
+
await this.page.getByLabel('Project name').fill(name);
|
|
166
|
+
await this.page.getByRole('button', { name: 'Create' }).click();
|
|
167
|
+
await expect(this.page.getByText(name)).toBeVisible();
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
async expectProjectCount(count: number) {
|
|
171
|
+
await expect(this.projectList.getByRole('listitem')).toHaveCount(count);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
**IMPLEMENT -- Critical path test:**
|
|
177
|
+
|
|
178
|
+
```typescript
|
|
179
|
+
// e2e/tests/project-creation.spec.ts
|
|
180
|
+
import { test, expect } from '@playwright/test';
|
|
181
|
+
import { DashboardPage } from '../pages/dashboard.page';
|
|
182
|
+
import { LoginPage } from '../pages/login.page';
|
|
183
|
+
|
|
184
|
+
test.describe('Project creation', () => {
|
|
185
|
+
test('user can create a project from the dashboard', async ({ page }) => {
|
|
186
|
+
// Arrange: authenticate via stored state
|
|
187
|
+
const loginPage = new LoginPage(page);
|
|
188
|
+
await loginPage.loginAs('test-user@example.com');
|
|
189
|
+
|
|
190
|
+
// Act: create a new project
|
|
191
|
+
const dashboard = new DashboardPage(page);
|
|
192
|
+
await dashboard.goto();
|
|
193
|
+
await dashboard.createProject('My Test Project');
|
|
194
|
+
|
|
195
|
+
// Assert: project appears in the list
|
|
196
|
+
await expect(page.getByText('My Test Project')).toBeVisible();
|
|
197
|
+
await expect(page).toHaveURL(/\/projects\/[\w-]+/);
|
|
198
|
+
});
|
|
199
|
+
});
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### Example: Cypress E2E for an E-Commerce Checkout
|
|
203
|
+
|
|
204
|
+
**IMPLEMENT -- Checkout flow with network interception:**
|
|
205
|
+
|
|
206
|
+
```typescript
|
|
207
|
+
// cypress/e2e/checkout.cy.ts
|
|
208
|
+
describe('Checkout flow', () => {
|
|
209
|
+
beforeEach(() => {
|
|
210
|
+
cy.intercept('POST', '/api/orders', { fixture: 'order-success.json' }).as('createOrder');
|
|
211
|
+
cy.loginByApi('customer@shop.com', 'testpass123');
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
it('completes checkout with valid payment', () => {
|
|
215
|
+
cy.visit('/cart');
|
|
216
|
+
cy.findByTestId('cart-item').should('have.length.at.least', 1);
|
|
217
|
+
|
|
218
|
+
cy.findByRole('button', { name: 'Proceed to Checkout' }).click();
|
|
219
|
+
cy.url().should('include', '/checkout');
|
|
220
|
+
|
|
221
|
+
cy.findByLabelText('Card number').type('4242424242424242');
|
|
222
|
+
cy.findByLabelText('Expiry').type('12/28');
|
|
223
|
+
cy.findByLabelText('CVC').type('123');
|
|
224
|
+
|
|
225
|
+
cy.findByRole('button', { name: 'Place Order' }).click();
|
|
226
|
+
cy.wait('@createOrder');
|
|
227
|
+
|
|
228
|
+
cy.findByRole('heading', { name: 'Order Confirmed' }).should('be.visible');
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
## Gates
|
|
234
|
+
|
|
235
|
+
- **No CSS class selectors in page objects.** If a locator uses `.btn-primary` or `[class*="header"]`, the test is brittle. Use `data-testid`, ARIA roles, or accessible labels. Rewrite before merging.
|
|
236
|
+
- **No arbitrary waits.** If any test contains `waitForTimeout`, `cy.wait(number)`, or `Thread.sleep`, it is not ready. Replace with explicit condition waits.
|
|
237
|
+
- **No shared mutable state.** If test B depends on data created by test A, both tests are broken. Each test must create its own data. Fix before proceeding.
|
|
238
|
+
- **Flaky tests block merge.** Any test that fails intermittently on 3 consecutive runs must be remediated or quarantined with a tracking issue before the suite is considered complete.
|
|
239
|
+
|
|
240
|
+
## Escalation
|
|
241
|
+
|
|
242
|
+
- **When the application requires a complex auth flow (OAuth, SSO, MFA):** Do not automate the full OAuth redirect in the browser. Use API-based authentication to obtain tokens, then inject them as cookies or headers. If API auth is not available, escalate to the team to expose a test-only auth bypass.
|
|
243
|
+
- **When tests require infrastructure not available locally (third-party APIs, payment processors):** Mock the external dependency at the network layer using Playwright route interception or Cypress intercept. If the mock is insufficient for confidence, escalate for a staging environment with sandbox credentials.
|
|
244
|
+
- **When flakiness persists after 3 remediation attempts on the same test:** The test may be exposing a real race condition in the application. Escalate the finding as a potential production bug rather than continuing to patch the test.
|
|
245
|
+
- **When the E2E suite exceeds 10 minutes on CI:** Triage tests into smoke (must run on every commit) and full (runs on PR merge or nightly). Do not simply accept slow pipelines.
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
name: harness-e2e
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
description: End-to-end testing with Playwright, Cypress, and Selenium including page objects and flakiness remediation
|
|
4
|
+
cognitive_mode: meticulous-implementer
|
|
5
|
+
triggers:
|
|
6
|
+
- manual
|
|
7
|
+
- on_new_feature
|
|
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-e2e
|
|
21
|
+
args:
|
|
22
|
+
- name: path
|
|
23
|
+
description: Project root path
|
|
24
|
+
required: false
|
|
25
|
+
- name: framework
|
|
26
|
+
description: "E2E framework: playwright, cypress, or selenium. Auto-detected when omitted."
|
|
27
|
+
required: false
|
|
28
|
+
- name: scope
|
|
29
|
+
description: "Test scope: smoke, critical-path, or full. Defaults to critical-path."
|
|
30
|
+
required: false
|
|
31
|
+
mcp:
|
|
32
|
+
tool: run_skill
|
|
33
|
+
input:
|
|
34
|
+
skill: harness-e2e
|
|
35
|
+
path: string
|
|
36
|
+
type: rigid
|
|
37
|
+
tier: 3
|
|
38
|
+
internal: false
|
|
39
|
+
keywords:
|
|
40
|
+
- e2e
|
|
41
|
+
- end-to-end
|
|
42
|
+
- Playwright
|
|
43
|
+
- Cypress
|
|
44
|
+
- Selenium
|
|
45
|
+
- page object
|
|
46
|
+
- browser testing
|
|
47
|
+
- UI testing
|
|
48
|
+
- flaky test
|
|
49
|
+
- smoke test
|
|
50
|
+
- critical path
|
|
51
|
+
- user flow
|
|
52
|
+
- WebDriver
|
|
53
|
+
stack_signals:
|
|
54
|
+
- "e2e/"
|
|
55
|
+
- "tests/e2e/"
|
|
56
|
+
- "cypress/"
|
|
57
|
+
- "playwright.config.*"
|
|
58
|
+
- "cypress.config.*"
|
|
59
|
+
- "selenium/"
|
|
60
|
+
- "tests/browser/"
|
|
61
|
+
- "*.spec.ts"
|
|
62
|
+
phases:
|
|
63
|
+
- name: detect
|
|
64
|
+
description: Identify E2E framework, existing test structure, and application entry points
|
|
65
|
+
required: true
|
|
66
|
+
- name: scaffold
|
|
67
|
+
description: Generate page objects, test fixtures, and configuration for the target framework
|
|
68
|
+
required: true
|
|
69
|
+
- name: implement
|
|
70
|
+
description: Write E2E tests for critical user flows with proper waits and assertions
|
|
71
|
+
required: true
|
|
72
|
+
- name: validate
|
|
73
|
+
description: Execute tests, identify flakiness, and apply remediation patterns
|
|
74
|
+
required: true
|
|
75
|
+
state:
|
|
76
|
+
persistent: false
|
|
77
|
+
files: []
|
|
78
|
+
depends_on: []
|