@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,287 @@
|
|
|
1
|
+
# Harness Feature Flags
|
|
2
|
+
|
|
3
|
+
> Flag lifecycle management, A/B testing infrastructure, and gradual rollout design. Ship features safely with controlled exposure and clean retirement.
|
|
4
|
+
|
|
5
|
+
## When to Use
|
|
6
|
+
|
|
7
|
+
- When designing feature flag architecture for a new project or feature
|
|
8
|
+
- When auditing existing flags for staleness, test coverage, or hygiene
|
|
9
|
+
- When planning gradual rollout or A/B testing strategies
|
|
10
|
+
- NOT for deployment pipeline configuration (use harness-deployment)
|
|
11
|
+
- NOT for environment variable management (use harness-secrets)
|
|
12
|
+
- NOT for application performance testing under flag variants (use harness-perf)
|
|
13
|
+
|
|
14
|
+
## Process
|
|
15
|
+
|
|
16
|
+
### Phase 1: DETECT -- Discover Flag Definitions and Usage
|
|
17
|
+
|
|
18
|
+
1. **Identify flag provider.** Scan the project for feature flag infrastructure:
|
|
19
|
+
- **Third-party SDKs:** LaunchDarkly (`launchdarkly-node-server-sdk`), Unleash (`unleash-client`), Flagsmith (`flagsmith-nodejs`), Split (`@splitsoftware/splitio`)
|
|
20
|
+
- **Custom implementations:** Files matching `*feature-flag*`, `*toggle*`, `*flags*`
|
|
21
|
+
- **Configuration-based:** `flags.json`, `features.json`, `feature-flags.yaml`
|
|
22
|
+
- **Environment-based:** Feature flags controlled via environment variables (`FEATURE_*`, `FF_*`)
|
|
23
|
+
|
|
24
|
+
2. **Catalog all flag definitions.** For each flag found, record:
|
|
25
|
+
- Flag name/key
|
|
26
|
+
- Flag type (boolean, multivariate, percentage rollout)
|
|
27
|
+
- Default value (what happens when the flag service is unreachable)
|
|
28
|
+
- Where it is defined (provider dashboard, config file, code)
|
|
29
|
+
- Creation date or first appearance in git history
|
|
30
|
+
|
|
31
|
+
3. **Map flag usage in code.** For each flag, find all evaluation points:
|
|
32
|
+
- Source files that check the flag value
|
|
33
|
+
- Conditional branches gated by the flag
|
|
34
|
+
- Components that render differently based on flag state
|
|
35
|
+
- API endpoints with flag-dependent behavior
|
|
36
|
+
- Test files that exercise flag variants
|
|
37
|
+
|
|
38
|
+
4. **Detect flag categories.** Classify each flag:
|
|
39
|
+
- **Release flag:** Gates a new feature for gradual rollout (temporary)
|
|
40
|
+
- **Experiment flag:** Controls A/B test variants (temporary)
|
|
41
|
+
- **Ops flag:** Circuit breaker or kill switch (permanent)
|
|
42
|
+
- **Permission flag:** Controls access to premium features (permanent)
|
|
43
|
+
|
|
44
|
+
5. **Present detection summary:**
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
Feature Flag Detection:
|
|
48
|
+
Provider: LaunchDarkly (SDK v7.x)
|
|
49
|
+
Flags defined: 23
|
|
50
|
+
Flags evaluated in code: 19 (4 defined but unused)
|
|
51
|
+
Categories: 12 release, 5 experiment, 4 ops, 2 permission
|
|
52
|
+
Stale candidates: 6 (release flags older than 90 days)
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
### Phase 2: DESIGN -- Recommend Flag Architecture and Rollout Strategy
|
|
58
|
+
|
|
59
|
+
1. **Evaluate flag naming convention.** Check for consistency:
|
|
60
|
+
- Recommended format: `{team}.{feature}.{variant}` (e.g., `payments.stripe-v2.enabled`)
|
|
61
|
+
- Flags should have descriptive names (not `flag_123` or `test_flag`)
|
|
62
|
+
- Naming should indicate category (prefix with `ops.` for operational flags)
|
|
63
|
+
- Temporary flags should include a target removal date in metadata
|
|
64
|
+
|
|
65
|
+
2. **Design flag evaluation architecture.** Recommend patterns for:
|
|
66
|
+
- **Server-side evaluation:** Flags evaluated on the backend, consistent behavior
|
|
67
|
+
- **Client-side evaluation:** Flags evaluated in the browser/app, real-time updates
|
|
68
|
+
- **Edge evaluation:** Flags evaluated at CDN layer for zero-latency decisions
|
|
69
|
+
- **Default values:** Every flag must have a safe default (feature off) for provider outages
|
|
70
|
+
|
|
71
|
+
3. **Design rollout strategy.** For release flags:
|
|
72
|
+
- **Percentage rollout:** Start at 1%, monitor metrics, increase to 5%, 25%, 50%, 100%
|
|
73
|
+
- **User segment targeting:** Internal users first, then beta users, then general availability
|
|
74
|
+
- **Geographic rollout:** Single region first, expand after validation
|
|
75
|
+
- **Time-based gates:** Enable during low-traffic periods for initial validation
|
|
76
|
+
- Define success criteria for each rollout stage (error rate, latency, conversion)
|
|
77
|
+
|
|
78
|
+
4. **Design A/B testing infrastructure.** For experiment flags:
|
|
79
|
+
- Consistent user assignment (same user always sees same variant)
|
|
80
|
+
- Statistical significance calculation before declaring a winner
|
|
81
|
+
- Event tracking integration for measuring experiment outcomes
|
|
82
|
+
- Guardrail metrics that auto-disable experiments if health degrades
|
|
83
|
+
- Experiment duration limits (no indefinite experiments)
|
|
84
|
+
|
|
85
|
+
5. **Design fallback behavior.** Ensure resilience:
|
|
86
|
+
- Provider SDK timeout configuration (fail fast, not block)
|
|
87
|
+
- Local cache for flag values (stale-while-revalidate)
|
|
88
|
+
- Default values that are safe (feature disabled, not enabled)
|
|
89
|
+
- Circuit breaker on flag evaluation errors
|
|
90
|
+
- Monitoring on flag evaluation latency and error rate
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
### Phase 3: VALIDATE -- Verify Flag Hygiene and Test Coverage
|
|
95
|
+
|
|
96
|
+
1. **Check test coverage per flag.** For each flag, verify:
|
|
97
|
+
- Tests exist for both the flag-on and flag-off code paths
|
|
98
|
+
- Integration tests cover the default value behavior (provider down scenario)
|
|
99
|
+
- No tests depend on a specific flag value being set in production
|
|
100
|
+
- Test utilities exist for overriding flag values in test context
|
|
101
|
+
|
|
102
|
+
2. **Validate flag consistency.** Check for common issues:
|
|
103
|
+
- Flags checked in code but not defined in the provider (will use defaults)
|
|
104
|
+
- Flags defined in the provider but never checked in code (dead flags)
|
|
105
|
+
- Same flag checked with different keys in different files (typos)
|
|
106
|
+
- Nested flag checks that create combinatorial complexity
|
|
107
|
+
|
|
108
|
+
3. **Check for flag coupling.** Identify problematic patterns:
|
|
109
|
+
- Flags that depend on other flags (if A and B, then C)
|
|
110
|
+
- Flags that must be enabled in a specific order
|
|
111
|
+
- Flags that share state or side effects
|
|
112
|
+
- Recommend decoupling or consolidating dependent flags
|
|
113
|
+
|
|
114
|
+
4. **Validate rollout configuration.** For active rollouts:
|
|
115
|
+
- Percentage values are within expected ranges
|
|
116
|
+
- Targeting rules are correctly configured
|
|
117
|
+
- Kill switch is functional (can disable the feature instantly)
|
|
118
|
+
- Rollback plan is documented
|
|
119
|
+
|
|
120
|
+
5. **Generate validation report:**
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
Flag Validation: [PASS/WARN/FAIL]
|
|
124
|
+
|
|
125
|
+
Test coverage: WARN (3 flags missing flag-off tests)
|
|
126
|
+
Consistency: PASS (all code references match definitions)
|
|
127
|
+
Coupling: WARN (2 flags have interdependencies)
|
|
128
|
+
Rollout config: PASS (active rollouts correctly configured)
|
|
129
|
+
|
|
130
|
+
Issues:
|
|
131
|
+
1. payments.stripe-v2 -- no test for flag-off fallback path
|
|
132
|
+
2. search.new-algorithm + search.reranking -- coupled flags
|
|
133
|
+
3. checkout.express -- missing kill switch test
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
### Phase 4: LIFECYCLE -- Audit Stale Flags and Plan Cleanup
|
|
139
|
+
|
|
140
|
+
1. **Identify stale flags.** Flag candidates for removal:
|
|
141
|
+
- Release flags that have been at 100% for more than 30 days
|
|
142
|
+
- Experiment flags past their declared end date
|
|
143
|
+
- Flags with no evaluation in the last 90 days (from provider analytics)
|
|
144
|
+
- Flags whose feature has been fully adopted (no rollback expected)
|
|
145
|
+
|
|
146
|
+
2. **Generate cleanup plan.** For each stale flag:
|
|
147
|
+
- List all code locations that reference the flag
|
|
148
|
+
- Identify which branch to keep (the flag-on path for graduated features)
|
|
149
|
+
- Estimate lines of code to remove (dead branch cleanup)
|
|
150
|
+
- Determine if any tests need updating after flag removal
|
|
151
|
+
- Assign a cleanup owner and deadline
|
|
152
|
+
|
|
153
|
+
3. **Assess technical debt.** Calculate flag burden:
|
|
154
|
+
- Total active flags per service (recommend under 20)
|
|
155
|
+
- Ratio of temporary to permanent flags
|
|
156
|
+
- Average flag age for temporary flags
|
|
157
|
+
- Code complexity added by flag branching (conditional paths)
|
|
158
|
+
- Estimate of test matrix growth due to flags
|
|
159
|
+
|
|
160
|
+
4. **Recommend lifecycle policies.** Design governance:
|
|
161
|
+
- Maximum lifetime for release flags (e.g., 90 days)
|
|
162
|
+
- Maximum lifetime for experiment flags (e.g., 30 days)
|
|
163
|
+
- Required metadata: owner, creation date, expiry date, cleanup ticket
|
|
164
|
+
- Automated alerting when flags exceed their lifetime
|
|
165
|
+
- Monthly flag review cadence with the team
|
|
166
|
+
|
|
167
|
+
5. **Generate lifecycle report:**
|
|
168
|
+
|
|
169
|
+
```
|
|
170
|
+
Flag Lifecycle Report:
|
|
171
|
+
|
|
172
|
+
Active flags: 23
|
|
173
|
+
Stale flags: 6 (candidates for removal)
|
|
174
|
+
Technical debt: ~340 lines of dead code across 6 stale flags
|
|
175
|
+
|
|
176
|
+
Cleanup plan:
|
|
177
|
+
1. payments.old-checkout -- at 100% for 45 days, 4 files, ~80 LOC to remove
|
|
178
|
+
2. search.v1-algorithm -- experiment ended 60 days ago, 2 files, ~40 LOC
|
|
179
|
+
3. onboarding.legacy-flow -- at 100% for 90 days, 6 files, ~120 LOC
|
|
180
|
+
4. notifications.email-v1 -- unused for 120 days, 3 files, ~50 LOC
|
|
181
|
+
5. dashboard.old-charts -- at 100% for 35 days, 2 files, ~30 LOC
|
|
182
|
+
6. auth.password-reset-v1 -- at 100% for 60 days, 1 file, ~20 LOC
|
|
183
|
+
|
|
184
|
+
Recommendations:
|
|
185
|
+
- Adopt 90-day maximum lifetime policy for release flags
|
|
186
|
+
- Add flag expiry dates to LaunchDarkly metadata
|
|
187
|
+
- Schedule monthly flag cleanup sprint
|
|
188
|
+
- Target: reduce active flag count from 23 to 17
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## Harness Integration
|
|
194
|
+
|
|
195
|
+
- **`harness skill run harness-feature-flags`** -- Primary invocation for flag analysis and lifecycle management.
|
|
196
|
+
- **`harness validate`** -- Run after flag cleanup to verify project health.
|
|
197
|
+
- **`harness check-deps`** -- Verify flag provider SDK dependencies are installed.
|
|
198
|
+
- **`emit_interaction`** -- Present lifecycle report and gather decisions on cleanup priorities.
|
|
199
|
+
|
|
200
|
+
## Success Criteria
|
|
201
|
+
|
|
202
|
+
- All feature flags in the project are discovered and cataloged
|
|
203
|
+
- Flags are categorized by type (release, experiment, ops, permission)
|
|
204
|
+
- Stale flags are identified with specific cleanup plans
|
|
205
|
+
- Test coverage for both flag-on and flag-off paths is verified
|
|
206
|
+
- Rollout configuration is validated for active flags
|
|
207
|
+
- Lifecycle policies are recommended with enforcement mechanisms
|
|
208
|
+
|
|
209
|
+
## Examples
|
|
210
|
+
|
|
211
|
+
### Example: React SPA with LaunchDarkly
|
|
212
|
+
|
|
213
|
+
```
|
|
214
|
+
Phase 1: DETECT
|
|
215
|
+
Provider: LaunchDarkly (React SDK v3.x)
|
|
216
|
+
Flags defined: 15 (in LaunchDarkly dashboard)
|
|
217
|
+
Flags in code: 13 (2 unused in dashboard)
|
|
218
|
+
Categories: 8 release, 3 experiment, 2 ops
|
|
219
|
+
|
|
220
|
+
Phase 2: DESIGN
|
|
221
|
+
Naming: WARN -- inconsistent (mix of camelCase and kebab-case)
|
|
222
|
+
Recommended convention: team.feature.variant (kebab-case)
|
|
223
|
+
Evaluation: Client-side (React SDK), 200ms init timeout
|
|
224
|
+
Default values: WARN -- 2 flags default to true (should default to false)
|
|
225
|
+
Rollout: checkout.express-pay at 25% (targeting premium users)
|
|
226
|
+
|
|
227
|
+
Phase 3: VALIDATE
|
|
228
|
+
Test coverage: WARN -- 4 flags missing useFlags mock in component tests
|
|
229
|
+
Consistency: PASS
|
|
230
|
+
Coupling: PASS (no interdependent flags)
|
|
231
|
+
Kill switch: PASS (all release flags can be instantly disabled)
|
|
232
|
+
|
|
233
|
+
Phase 4: LIFECYCLE
|
|
234
|
+
Stale: 3 flags at 100% for 30+ days
|
|
235
|
+
Cleanup estimate: 180 LOC across 8 files
|
|
236
|
+
Recommendation: Remove search.v2-results (at 100% for 65 days, 3 components)
|
|
237
|
+
Result: WARN -- 3 stale flags, 4 missing tests, 2 unsafe defaults
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
### Example: Spring Boot API with Custom Flag System
|
|
241
|
+
|
|
242
|
+
```
|
|
243
|
+
Phase 1: DETECT
|
|
244
|
+
Provider: Custom implementation (FeatureFlagService.java)
|
|
245
|
+
Flag store: PostgreSQL table (feature_flags)
|
|
246
|
+
Flags defined: 28
|
|
247
|
+
Flags in code: 24 (4 in database but unreferenced)
|
|
248
|
+
Categories: 15 release, 6 experiment, 5 ops, 2 permission
|
|
249
|
+
|
|
250
|
+
Phase 2: DESIGN
|
|
251
|
+
Architecture: Server-side evaluation with 60s cache refresh
|
|
252
|
+
Concern: No SDK resilience -- database outage disables all flags
|
|
253
|
+
Recommend: Add in-memory cache with stale-while-revalidate pattern
|
|
254
|
+
Recommend: Add health check endpoint for flag service status
|
|
255
|
+
Rollout: Using percentage field in database -- no segment targeting
|
|
256
|
+
Recommend: Add user segment support for targeted rollouts
|
|
257
|
+
|
|
258
|
+
Phase 3: VALIDATE
|
|
259
|
+
Test coverage: WARN -- @FeatureFlag annotation used but no test helper
|
|
260
|
+
to toggle flags in test context (tests rely on database state)
|
|
261
|
+
Consistency: WARN -- 4 database entries have no code references
|
|
262
|
+
Coupling: FAIL -- 3 flags form a dependency chain
|
|
263
|
+
(billing.new-pricing requires billing.tax-calc-v2 requires billing.currency-v3)
|
|
264
|
+
Recommend: Consolidate into single billing.pricing-v3 flag
|
|
265
|
+
|
|
266
|
+
Phase 4: LIFECYCLE
|
|
267
|
+
Stale: 8 flags enabled for all users for 60+ days
|
|
268
|
+
Technical debt: ~520 LOC of dead code
|
|
269
|
+
Flag count: 28 (above recommended 20 per service)
|
|
270
|
+
Recommendation: Immediate cleanup sprint targeting 8 stale flags
|
|
271
|
+
Recommendation: Enforce 60-day lifetime policy going forward
|
|
272
|
+
Result: FAIL -- flag coupling detected, high stale flag count
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
## Gates
|
|
276
|
+
|
|
277
|
+
- **No flags without default values.** Every flag evaluation must specify a default value for provider outage scenarios. Missing defaults are blocking findings.
|
|
278
|
+
- **No stale release flags beyond policy limit.** Release flags that exceed their maximum lifetime (default 90 days at 100%) are blocking warnings. They must be cleaned up or have an explicit extension with documented justification.
|
|
279
|
+
- **No coupled flag dependencies.** Flags that require other flags to be in a specific state create combinatorial complexity and are fragile. Flag coupling is a blocking finding that requires consolidation.
|
|
280
|
+
- **No flags without test coverage for both paths.** Feature flags that lack tests for the off-path leave the fallback behavior unverified. Both paths must be tested.
|
|
281
|
+
|
|
282
|
+
## Escalation
|
|
283
|
+
|
|
284
|
+
- **When flag count exceeds 30 per service:** The flag system is becoming a maintenance burden. Recommend a flag audit sprint with a target of reducing to under 20. Prioritize removing the oldest release flags first.
|
|
285
|
+
- **When a flag provider outage affects production:** If the application does not handle provider unavailability gracefully, this is an architectural issue. Recommend implementing local caching, safe defaults, and a circuit breaker pattern before adding more flags.
|
|
286
|
+
- **When experiment results are inconclusive:** Do not extend the experiment indefinitely. Recommend increasing sample size (broader targeting), simplifying the variants, or declaring the experiment inconclusive and removing it.
|
|
287
|
+
- **When flag cleanup requires database migration:** Removing flags that are stored in a database may require migration scripts. Coordinate cleanup with a release cycle and ensure rollback is possible if the migration fails.
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
name: harness-feature-flags
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
description: Flag lifecycle management, A/B testing infrastructure, and gradual rollouts
|
|
4
|
+
cognitive_mode: advisory-guide
|
|
5
|
+
tier: 3
|
|
6
|
+
internal: false
|
|
7
|
+
keywords:
|
|
8
|
+
- feature flags
|
|
9
|
+
- feature toggles
|
|
10
|
+
- LaunchDarkly
|
|
11
|
+
- Unleash
|
|
12
|
+
- Flagsmith
|
|
13
|
+
- A/B testing
|
|
14
|
+
- canary
|
|
15
|
+
- gradual rollout
|
|
16
|
+
- kill switch
|
|
17
|
+
- experiment
|
|
18
|
+
stack_signals:
|
|
19
|
+
- "src/**/flags/**"
|
|
20
|
+
- "src/**/features/**"
|
|
21
|
+
- "src/**/*feature-flag*"
|
|
22
|
+
- "src/**/*toggle*"
|
|
23
|
+
- "flags.json"
|
|
24
|
+
- "features.json"
|
|
25
|
+
triggers:
|
|
26
|
+
- manual
|
|
27
|
+
- on_new_feature
|
|
28
|
+
platforms:
|
|
29
|
+
- claude-code
|
|
30
|
+
- gemini-cli
|
|
31
|
+
tools:
|
|
32
|
+
- Bash
|
|
33
|
+
- Read
|
|
34
|
+
- Write
|
|
35
|
+
- Edit
|
|
36
|
+
- Glob
|
|
37
|
+
- Grep
|
|
38
|
+
- emit_interaction
|
|
39
|
+
cli:
|
|
40
|
+
command: harness skill run harness-feature-flags
|
|
41
|
+
args:
|
|
42
|
+
- name: path
|
|
43
|
+
description: Project root path
|
|
44
|
+
required: false
|
|
45
|
+
- name: audit
|
|
46
|
+
description: Run stale flag audit to find flags past their expiry
|
|
47
|
+
type: boolean
|
|
48
|
+
required: false
|
|
49
|
+
- name: provider
|
|
50
|
+
description: Flag provider context (launchdarkly, unleash, flagsmith, custom)
|
|
51
|
+
required: false
|
|
52
|
+
mcp:
|
|
53
|
+
tool: run_skill
|
|
54
|
+
input:
|
|
55
|
+
skill: harness-feature-flags
|
|
56
|
+
path: string
|
|
57
|
+
type: rigid
|
|
58
|
+
phases:
|
|
59
|
+
- name: detect
|
|
60
|
+
description: Discover flag definitions, providers, and usage patterns
|
|
61
|
+
required: true
|
|
62
|
+
- name: design
|
|
63
|
+
description: Recommend flag architecture, naming, and rollout strategies
|
|
64
|
+
required: true
|
|
65
|
+
- name: validate
|
|
66
|
+
description: Verify flag hygiene, test coverage, and fallback behavior
|
|
67
|
+
required: true
|
|
68
|
+
- name: lifecycle
|
|
69
|
+
description: Audit stale flags and recommend cleanup or graduation
|
|
70
|
+
required: true
|
|
71
|
+
state:
|
|
72
|
+
persistent: false
|
|
73
|
+
files: []
|
|
74
|
+
depends_on: []
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
# Harness Git Workflow
|
|
2
|
+
|
|
3
|
+
> Worktree setup, dependency installation, baseline verification, and branch finishing. Clean isolation for every workstream.
|
|
4
|
+
|
|
5
|
+
## When to Use
|
|
6
|
+
|
|
7
|
+
- When starting work that should be isolated from the main branch (new feature, experiment, multi-task plan)
|
|
8
|
+
- When finishing a branch and deciding how to land it (merge, PR, keep, discard)
|
|
9
|
+
- When `on_pr` or `on_commit` triggers fire and worktree management is needed
|
|
10
|
+
- When the human asks to "set up a branch" or "start a new workstream"
|
|
11
|
+
- NOT for simple single-file changes that do not need branch isolation
|
|
12
|
+
- NOT when work is already in progress on the correct branch
|
|
13
|
+
|
|
14
|
+
## Process
|
|
15
|
+
|
|
16
|
+
### Part A: Worktree Creation
|
|
17
|
+
|
|
18
|
+
#### Step 1: Choose Worktree Location
|
|
19
|
+
|
|
20
|
+
1. **Check for `.worktrees/` directory** in the project root. If it exists, use it — this is the preferred location.
|
|
21
|
+
|
|
22
|
+
2. **Check CLAUDE.md or AGENTS.md** for worktree preferences. Some projects specify a custom worktree directory or naming convention. Follow those instructions.
|
|
23
|
+
|
|
24
|
+
3. **If neither exists, ask the user:** "Where should I create the worktree? Options: (A) `.worktrees/<branch-name>` in the project root, (B) a sibling directory alongside the project, (C) a custom path."
|
|
25
|
+
|
|
26
|
+
4. **If placing worktrees in the project directory,** verify that the worktree directory is gitignored. Check `.gitignore` for `.worktrees/` or the chosen directory name. If not gitignored, add it before creating the worktree.
|
|
27
|
+
|
|
28
|
+
#### Step 2: Check for Existing Worktrees
|
|
29
|
+
|
|
30
|
+
1. **Run `git worktree list`** to see active worktrees.
|
|
31
|
+
|
|
32
|
+
2. **If a worktree already exists for the target branch,** do not create a duplicate. Ask: "A worktree for branch `<name>` already exists at `<path>`. Should I use it, or create a new branch?"
|
|
33
|
+
|
|
34
|
+
3. **If the target directory already exists** (but is not a worktree), do not overwrite. Ask the user how to proceed.
|
|
35
|
+
|
|
36
|
+
#### Step 3: Create Branch and Worktree
|
|
37
|
+
|
|
38
|
+
1. **Create the branch** from the current HEAD (or from the specified base):
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
git branch <branch-name> <base>
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
2. **Create the worktree:**
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
git worktree add <path> <branch-name>
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
3. **Verify the worktree was created.** Check that the directory exists and contains a `.git` file (not a `.git` directory — worktrees use a file pointing to the main repo).
|
|
51
|
+
|
|
52
|
+
#### Step 4: Auto-Detect and Run Setup
|
|
53
|
+
|
|
54
|
+
Inspect the worktree for project files and run the appropriate setup:
|
|
55
|
+
|
|
56
|
+
| File Found | Action |
|
|
57
|
+
| ---------------------------------- | ------------------------------------------------------------------------ |
|
|
58
|
+
| `package.json` | `npm install` (or `yarn install` / `pnpm install` if lockfile indicates) |
|
|
59
|
+
| `Cargo.toml` | `cargo build` |
|
|
60
|
+
| `go.mod` | `go mod download` |
|
|
61
|
+
| `requirements.txt` | `pip install -r requirements.txt` |
|
|
62
|
+
| `pyproject.toml` | `pip install -e .` or `poetry install` |
|
|
63
|
+
| `Gemfile` | `bundle install` |
|
|
64
|
+
| `Makefile` (with `install` target) | `make install` |
|
|
65
|
+
|
|
66
|
+
If multiple project files exist (monorepo), install at the root level. Do not guess which subpackages to install — follow the project's documented setup or ask.
|
|
67
|
+
|
|
68
|
+
#### Step 5: Verify Clean Baseline
|
|
69
|
+
|
|
70
|
+
Before any work begins, verify the worktree is in a clean, working state:
|
|
71
|
+
|
|
72
|
+
1. **Run the test suite.** All tests must pass on the fresh branch before any changes.
|
|
73
|
+
|
|
74
|
+
2. **Run `harness validate`.** Project health must be green before starting work.
|
|
75
|
+
|
|
76
|
+
3. **If tests fail or validation fails on the fresh branch,** stop. The base branch has issues. Report: "Baseline verification failed on fresh branch: [failure details]. The base branch needs to be fixed first."
|
|
77
|
+
|
|
78
|
+
4. **Record the baseline.** Note the test count and validation result. This is the comparison point for the branch finishing phase.
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
### Part B: Branch Finishing
|
|
83
|
+
|
|
84
|
+
When work on the branch is complete, follow this protocol to land the changes.
|
|
85
|
+
|
|
86
|
+
#### Step 1: Pre-Finish Verification
|
|
87
|
+
|
|
88
|
+
1. **Run the full test suite.** All tests must pass.
|
|
89
|
+
|
|
90
|
+
2. **Run `harness validate`.** Project health must be green.
|
|
91
|
+
|
|
92
|
+
3. **Check for uncommitted changes.** Run `git status`. All changes must be committed. If there are uncommitted changes, commit or stash them before finishing.
|
|
93
|
+
|
|
94
|
+
4. **Check the branch is up to date.** If the base branch has advanced since the worktree was created:
|
|
95
|
+
```
|
|
96
|
+
git fetch origin
|
|
97
|
+
git log HEAD..origin/main --oneline
|
|
98
|
+
```
|
|
99
|
+
If there are new commits on the base, rebase or merge before finishing:
|
|
100
|
+
```
|
|
101
|
+
git rebase origin/main
|
|
102
|
+
```
|
|
103
|
+
Re-run tests after rebasing.
|
|
104
|
+
|
|
105
|
+
#### Step 2: Choose Finishing Strategy
|
|
106
|
+
|
|
107
|
+
Present 4 options to the user:
|
|
108
|
+
|
|
109
|
+
1. **Merge locally.** Merge the branch into the base branch on the local machine.
|
|
110
|
+
- Best for: small changes, solo work, when CI is not required
|
|
111
|
+
- Command: `git checkout main && git merge <branch>`
|
|
112
|
+
|
|
113
|
+
2. **Push and create PR.** Push the branch to the remote and open a pull request.
|
|
114
|
+
- Best for: team work, changes that need review, when CI must pass
|
|
115
|
+
- Command: `git push -u origin <branch>` then create PR via `gh pr create`
|
|
116
|
+
|
|
117
|
+
3. **Keep as-is.** Leave the branch and worktree in place for continued work later.
|
|
118
|
+
- Best for: work-in-progress, experiments, paused projects
|
|
119
|
+
|
|
120
|
+
4. **Discard.** Delete the branch and worktree. All changes are lost.
|
|
121
|
+
- Best for: failed experiments, abandoned approaches
|
|
122
|
+
- Safety: Confirm with the user before discarding. List the commits that will be lost.
|
|
123
|
+
|
|
124
|
+
#### Step 3: Execute Chosen Strategy
|
|
125
|
+
|
|
126
|
+
**If merge locally:**
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
cd <main-repo-path>
|
|
130
|
+
git merge <branch-name>
|
|
131
|
+
# Run tests on main after merge
|
|
132
|
+
# Run harness validate after merge
|
|
133
|
+
git worktree remove <worktree-path>
|
|
134
|
+
git branch -d <branch-name>
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
**If push and create PR:**
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
cd <worktree-path>
|
|
141
|
+
git push -u origin <branch-name>
|
|
142
|
+
gh pr create --title "<title>" --body "<description>"
|
|
143
|
+
# Report the PR URL to the user
|
|
144
|
+
# Leave worktree in place until PR is merged
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
**If keep as-is:**
|
|
148
|
+
|
|
149
|
+
```
|
|
150
|
+
No action needed. Report the worktree path and branch name for future reference.
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
**If discard:**
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
# Confirm with user first — list commits that will be lost
|
|
157
|
+
git worktree remove <worktree-path>
|
|
158
|
+
git branch -D <branch-name>
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
#### Step 4: Clean Up
|
|
162
|
+
|
|
163
|
+
1. **Remove the worktree** (unless keeping as-is or waiting for PR merge):
|
|
164
|
+
|
|
165
|
+
```
|
|
166
|
+
git worktree remove <worktree-path>
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
2. **Prune stale worktree references:**
|
|
170
|
+
|
|
171
|
+
```
|
|
172
|
+
git worktree prune
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
3. **Verify cleanup.** Run `git worktree list` and confirm the removed worktree is no longer listed.
|
|
176
|
+
|
|
177
|
+
## Harness Integration
|
|
178
|
+
|
|
179
|
+
- **`harness validate`** — Run during baseline verification (Step 5 of Part A) and pre-finish verification (Step 1 of Part B). Ensures project health is green at both boundaries.
|
|
180
|
+
- **Test runner** — Run fresh in the worktree, not in the main repo. Tests must pass both at baseline (before work) and at finish (after work).
|
|
181
|
+
- **`.gitignore`** — Verify worktree directory is gitignored if it lives inside the project tree.
|
|
182
|
+
|
|
183
|
+
## Success Criteria
|
|
184
|
+
|
|
185
|
+
- Worktree was created in the correct location (`.worktrees/` preferred, or per project convention)
|
|
186
|
+
- Dependencies were auto-detected and installed
|
|
187
|
+
- Baseline verification passed (tests green, harness validates) before any work began
|
|
188
|
+
- Branch finishing strategy was chosen by the user (not assumed)
|
|
189
|
+
- Chosen strategy was executed correctly (merge, PR, keep, or discard)
|
|
190
|
+
- Worktree was cleaned up after finishing (unless keeping for continued work)
|
|
191
|
+
- No stale worktree references remain after cleanup
|
|
192
|
+
|
|
193
|
+
## Examples
|
|
194
|
+
|
|
195
|
+
### Example: Setting Up a Worktree for a New Feature
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
# Check for preferred location
|
|
199
|
+
ls .worktrees/ # exists — use it
|
|
200
|
+
|
|
201
|
+
# Check gitignore
|
|
202
|
+
grep '.worktrees' .gitignore # found — good, already gitignored
|
|
203
|
+
|
|
204
|
+
# Check existing worktrees
|
|
205
|
+
git worktree list
|
|
206
|
+
# /Users/dev/project abc1234 [main]
|
|
207
|
+
# No existing worktree for this feature
|
|
208
|
+
|
|
209
|
+
# Create branch and worktree
|
|
210
|
+
git branch feat/notifications main
|
|
211
|
+
git worktree add .worktrees/notifications feat/notifications
|
|
212
|
+
|
|
213
|
+
# Auto-detect setup (found package.json)
|
|
214
|
+
cd .worktrees/notifications && npm install
|
|
215
|
+
|
|
216
|
+
# Verify baseline
|
|
217
|
+
npm test # 142 tests, all pass
|
|
218
|
+
harness validate # passes
|
|
219
|
+
|
|
220
|
+
# Ready to work. Report:
|
|
221
|
+
# "Worktree created at .worktrees/notifications on branch feat/notifications.
|
|
222
|
+
# 142 tests passing. harness validate green. Ready to start."
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
### Example: Finishing a Branch with PR
|
|
226
|
+
|
|
227
|
+
```bash
|
|
228
|
+
# Pre-finish verification
|
|
229
|
+
cd .worktrees/notifications
|
|
230
|
+
npm test # 158 tests, all pass (16 new)
|
|
231
|
+
harness validate # passes
|
|
232
|
+
git status # clean — all committed
|
|
233
|
+
|
|
234
|
+
# Check if base has advanced
|
|
235
|
+
git fetch origin
|
|
236
|
+
git log HEAD..origin/main --oneline
|
|
237
|
+
# 3 new commits on main — rebase
|
|
238
|
+
|
|
239
|
+
git rebase origin/main
|
|
240
|
+
npm test # still passes after rebase
|
|
241
|
+
|
|
242
|
+
# User chooses: Push and create PR
|
|
243
|
+
git push -u origin feat/notifications
|
|
244
|
+
gh pr create --title "feat(notifications): email and in-app notifications" \
|
|
245
|
+
--body "Implements notification service with create, list, and expiry.
|
|
246
|
+
16 new tests. All passing."
|
|
247
|
+
|
|
248
|
+
# Report: "PR created: https://github.com/org/repo/pull/42
|
|
249
|
+
# Worktree at .worktrees/notifications kept until PR merges."
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
### Example: Discarding a Failed Experiment
|
|
253
|
+
|
|
254
|
+
```bash
|
|
255
|
+
# User says: "That approach didn't work, let's scrap it."
|
|
256
|
+
|
|
257
|
+
# Show what will be lost
|
|
258
|
+
git log main..HEAD --oneline
|
|
259
|
+
# a1b2c3d try websocket approach
|
|
260
|
+
# d4e5f6g add socket.io dependency
|
|
261
|
+
# "These 2 commits will be lost. Discard? (yes/no)"
|
|
262
|
+
# Human: "yes"
|
|
263
|
+
|
|
264
|
+
git worktree remove .worktrees/ws-experiment
|
|
265
|
+
git branch -D feat/ws-experiment
|
|
266
|
+
git worktree prune
|
|
267
|
+
git worktree list # ws-experiment no longer listed
|
|
268
|
+
```
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
name: harness-git-workflow
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
description: Git workflow best practices integrated with harness validation
|
|
4
|
+
cognitive_mode: meticulous-verifier
|
|
5
|
+
triggers:
|
|
6
|
+
- manual
|
|
7
|
+
- on_pr
|
|
8
|
+
- on_commit
|
|
9
|
+
platforms:
|
|
10
|
+
- claude-code
|
|
11
|
+
- gemini-cli
|
|
12
|
+
tools:
|
|
13
|
+
- Bash
|
|
14
|
+
- Read
|
|
15
|
+
- Glob
|
|
16
|
+
cli:
|
|
17
|
+
command: harness skill run harness-git-workflow
|
|
18
|
+
args:
|
|
19
|
+
- name: path
|
|
20
|
+
description: Project root path
|
|
21
|
+
required: false
|
|
22
|
+
mcp:
|
|
23
|
+
tool: run_skill
|
|
24
|
+
input:
|
|
25
|
+
skill: harness-git-workflow
|
|
26
|
+
path: string
|
|
27
|
+
type: flexible
|
|
28
|
+
tier: 3
|
|
29
|
+
state:
|
|
30
|
+
persistent: false
|
|
31
|
+
files: []
|
|
32
|
+
depends_on: []
|