@harness-engineering/cli 1.23.1 → 1.23.2
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/harness/add-harness-component/SKILL.md +21 -12
- package/dist/agents/commands/codex/harness/cleanup-dead-code/SKILL.md +9 -0
- package/dist/agents/commands/codex/harness/detect-doc-drift/SKILL.md +9 -0
- package/dist/agents/commands/codex/harness/enforce-architecture/SKILL.md +5 -15
- package/dist/agents/commands/codex/harness/harness-architecture-advisor/SKILL.md +5 -15
- package/dist/agents/commands/codex/harness/harness-autopilot/SKILL.md +10 -0
- package/dist/agents/commands/codex/harness/harness-brainstorming/SKILL.md +9 -0
- package/dist/agents/commands/codex/harness/harness-code-review/SKILL.md +5 -15
- package/dist/agents/commands/codex/harness/harness-codebase-cleanup/SKILL.md +9 -0
- package/dist/agents/commands/codex/harness/harness-debugging/SKILL.md +9 -0
- package/dist/agents/commands/codex/harness/harness-dependency-health/SKILL.md +8 -0
- package/dist/agents/commands/codex/harness/harness-docs-pipeline/SKILL.md +9 -0
- package/dist/agents/commands/codex/harness/harness-execution/SKILL.md +9 -0
- package/dist/agents/commands/codex/harness/harness-hotspot-detector/SKILL.md +8 -0
- package/dist/agents/commands/codex/harness/harness-impact-analysis/SKILL.md +8 -0
- package/dist/agents/commands/codex/harness/harness-integrity/SKILL.md +8 -0
- package/dist/agents/commands/codex/harness/harness-onboarding/SKILL.md +18 -10
- package/dist/agents/commands/codex/harness/harness-perf/SKILL.md +9 -0
- package/dist/agents/commands/codex/harness/harness-planning/SKILL.md +10 -0
- package/dist/agents/commands/codex/harness/harness-refactoring/SKILL.md +9 -0
- package/dist/agents/commands/codex/harness/harness-release-readiness/SKILL.md +9 -0
- package/dist/agents/commands/codex/harness/harness-roadmap/SKILL.md +10 -1
- package/dist/agents/commands/codex/harness/harness-security-scan/SKILL.md +5 -15
- package/dist/agents/commands/codex/harness/harness-skill-authoring/SKILL.md +20 -1
- package/dist/agents/commands/codex/harness/harness-soundness-review/SKILL.md +10 -0
- package/dist/agents/commands/codex/harness/harness-supply-chain-audit/SKILL.md +8 -0
- package/dist/agents/commands/codex/harness/harness-tdd/SKILL.md +9 -0
- package/dist/agents/commands/codex/harness/harness-test-advisor/SKILL.md +8 -0
- package/dist/agents/commands/codex/harness/harness-verification/SKILL.md +9 -0
- package/dist/agents/commands/codex/harness/harness-verify/SKILL.md +8 -0
- package/dist/agents/commands/codex/harness/initialize-harness-project/SKILL.md +22 -13
- package/dist/agents/commands/cursor/harness/add-harness-component.mdc +12 -12
- package/dist/agents/commands/cursor/harness/harness-onboarding.mdc +10 -10
- package/dist/agents/commands/cursor/harness/harness-roadmap.mdc +1 -1
- package/dist/agents/commands/cursor/harness/initialize-harness-project.mdc +13 -13
- package/dist/agents/skills/claude-code/add-harness-component/SKILL.md +21 -12
- package/dist/agents/skills/claude-code/align-documentation/SKILL.md +9 -0
- package/dist/agents/skills/claude-code/check-mechanical-constraints/SKILL.md +9 -0
- package/dist/agents/skills/claude-code/cleanup-dead-code/SKILL.md +11 -0
- package/dist/agents/skills/claude-code/detect-doc-drift/SKILL.md +9 -0
- package/dist/agents/skills/claude-code/enforce-architecture/SKILL.md +5 -15
- package/dist/agents/skills/claude-code/harness-accessibility/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-api-design/SKILL.md +5 -15
- package/dist/agents/skills/claude-code/harness-architecture-advisor/SKILL.md +5 -15
- package/dist/agents/skills/claude-code/harness-auth/SKILL.md +5 -15
- package/dist/agents/skills/claude-code/harness-autopilot/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-brainstorming/SKILL.md +9 -0
- package/dist/agents/skills/claude-code/harness-caching/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-chaos/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-code-review/SKILL.md +5 -15
- package/dist/agents/skills/claude-code/harness-codebase-cleanup/SKILL.md +11 -0
- package/dist/agents/skills/claude-code/harness-compliance/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-containerization/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-data-pipeline/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-data-validation/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-database/SKILL.md +5 -15
- package/dist/agents/skills/claude-code/harness-debugging/SKILL.md +9 -0
- package/dist/agents/skills/claude-code/harness-dependency-health/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-deployment/SKILL.md +5 -15
- package/dist/agents/skills/claude-code/harness-design/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-design-mobile/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-design-system/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-design-web/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-diagnostics/SKILL.md +9 -0
- package/dist/agents/skills/claude-code/harness-docs-pipeline/SKILL.md +11 -0
- package/dist/agents/skills/claude-code/harness-dx/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-e2e/SKILL.md +9 -0
- package/dist/agents/skills/claude-code/harness-event-driven/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-execution/SKILL.md +9 -0
- package/dist/agents/skills/claude-code/harness-feature-flags/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-git-workflow/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-hotspot-detector/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-i18n/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-i18n-process/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-i18n-workflow/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-impact-analysis/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-incident-response/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-infrastructure-as-code/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-integration-test/SKILL.md +9 -0
- package/dist/agents/skills/claude-code/harness-integrity/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-knowledge-mapper/SKILL.md +9 -0
- package/dist/agents/skills/claude-code/harness-load-testing/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-ml-ops/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-mobile-patterns/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-mutation-test/SKILL.md +9 -0
- package/dist/agents/skills/claude-code/harness-observability/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-onboarding/SKILL.md +18 -10
- package/dist/agents/skills/claude-code/harness-parallel-agents/SKILL.md +9 -0
- package/dist/agents/skills/claude-code/harness-perf/SKILL.md +11 -0
- package/dist/agents/skills/claude-code/harness-perf-tdd/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-planning/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-pre-commit-review/SKILL.md +9 -0
- package/dist/agents/skills/claude-code/harness-product-spec/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-property-test/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-refactoring/SKILL.md +9 -0
- package/dist/agents/skills/claude-code/harness-release-readiness/SKILL.md +11 -0
- package/dist/agents/skills/claude-code/harness-resilience/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-roadmap/SKILL.md +10 -1
- package/dist/agents/skills/claude-code/harness-roadmap-pilot/SKILL.md +8 -0
- package/dist/agents/skills/claude-code/harness-secrets/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-security-review/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-security-scan/SKILL.md +5 -15
- package/dist/agents/skills/claude-code/harness-skill-authoring/SKILL.md +29 -1
- package/dist/agents/skills/claude-code/harness-soundness-review/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-sql-review/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-state-management/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-supply-chain-audit/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-tdd/SKILL.md +9 -0
- package/dist/agents/skills/claude-code/harness-test-advisor/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-test-data/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-ux-copy/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-verification/SKILL.md +9 -0
- package/dist/agents/skills/claude-code/harness-verify/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/harness-visual-regression/SKILL.md +10 -0
- package/dist/agents/skills/claude-code/initialize-harness-project/SKILL.md +22 -13
- package/dist/agents/skills/claude-code/validate-context-engineering/SKILL.md +9 -0
- package/dist/agents/skills/codex/add-harness-component/SKILL.md +21 -12
- package/dist/agents/skills/codex/align-documentation/SKILL.md +9 -0
- package/dist/agents/skills/codex/check-mechanical-constraints/SKILL.md +9 -0
- package/dist/agents/skills/codex/cleanup-dead-code/SKILL.md +11 -0
- package/dist/agents/skills/codex/detect-doc-drift/SKILL.md +9 -0
- package/dist/agents/skills/codex/enforce-architecture/SKILL.md +5 -15
- package/dist/agents/skills/codex/harness-accessibility/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-api-design/SKILL.md +5 -15
- package/dist/agents/skills/codex/harness-architecture-advisor/SKILL.md +5 -15
- package/dist/agents/skills/codex/harness-auth/SKILL.md +5 -15
- package/dist/agents/skills/codex/harness-autopilot/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-brainstorming/SKILL.md +9 -0
- package/dist/agents/skills/codex/harness-caching/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-chaos/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-code-review/SKILL.md +5 -15
- package/dist/agents/skills/codex/harness-codebase-cleanup/SKILL.md +11 -0
- package/dist/agents/skills/codex/harness-compliance/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-containerization/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-data-pipeline/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-data-validation/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-database/SKILL.md +5 -15
- package/dist/agents/skills/codex/harness-debugging/SKILL.md +9 -0
- package/dist/agents/skills/codex/harness-dependency-health/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-deployment/SKILL.md +5 -15
- package/dist/agents/skills/codex/harness-design/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-design-mobile/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-design-system/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-design-web/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-diagnostics/SKILL.md +9 -0
- package/dist/agents/skills/codex/harness-docs-pipeline/SKILL.md +11 -0
- package/dist/agents/skills/codex/harness-dx/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-e2e/SKILL.md +9 -0
- package/dist/agents/skills/codex/harness-event-driven/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-execution/SKILL.md +9 -0
- package/dist/agents/skills/codex/harness-feature-flags/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-git-workflow/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-hotspot-detector/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-i18n/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-i18n-process/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-i18n-workflow/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-impact-analysis/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-incident-response/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-infrastructure-as-code/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-integration-test/SKILL.md +9 -0
- package/dist/agents/skills/codex/harness-integrity/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-knowledge-mapper/SKILL.md +9 -0
- package/dist/agents/skills/codex/harness-load-testing/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-ml-ops/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-mobile-patterns/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-mutation-test/SKILL.md +9 -0
- package/dist/agents/skills/codex/harness-observability/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-onboarding/SKILL.md +18 -10
- package/dist/agents/skills/codex/harness-parallel-agents/SKILL.md +9 -0
- package/dist/agents/skills/codex/harness-perf/SKILL.md +11 -0
- package/dist/agents/skills/codex/harness-perf-tdd/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-planning/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-pre-commit-review/SKILL.md +9 -0
- package/dist/agents/skills/codex/harness-product-spec/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-property-test/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-refactoring/SKILL.md +9 -0
- package/dist/agents/skills/codex/harness-release-readiness/SKILL.md +11 -0
- package/dist/agents/skills/codex/harness-resilience/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-roadmap/SKILL.md +10 -1
- package/dist/agents/skills/codex/harness-roadmap-pilot/SKILL.md +8 -0
- package/dist/agents/skills/codex/harness-secrets/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-security-review/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-security-scan/SKILL.md +5 -15
- package/dist/agents/skills/codex/harness-skill-authoring/SKILL.md +29 -1
- package/dist/agents/skills/codex/harness-soundness-review/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-sql-review/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-state-management/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-supply-chain-audit/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-tdd/SKILL.md +9 -0
- package/dist/agents/skills/codex/harness-test-advisor/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-test-data/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-ux-copy/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-verification/SKILL.md +9 -0
- package/dist/agents/skills/codex/harness-verify/SKILL.md +10 -0
- package/dist/agents/skills/codex/harness-visual-regression/SKILL.md +10 -0
- package/dist/agents/skills/codex/initialize-harness-project/SKILL.md +22 -13
- package/dist/agents/skills/codex/validate-context-engineering/SKILL.md +9 -0
- package/dist/agents/skills/cursor/add-harness-component/SKILL.md +21 -12
- package/dist/agents/skills/cursor/align-documentation/SKILL.md +9 -0
- package/dist/agents/skills/cursor/check-mechanical-constraints/SKILL.md +9 -0
- package/dist/agents/skills/cursor/cleanup-dead-code/SKILL.md +11 -0
- package/dist/agents/skills/cursor/detect-doc-drift/SKILL.md +9 -0
- package/dist/agents/skills/cursor/enforce-architecture/SKILL.md +5 -15
- package/dist/agents/skills/cursor/harness-accessibility/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-api-design/SKILL.md +5 -15
- package/dist/agents/skills/cursor/harness-architecture-advisor/SKILL.md +5 -15
- package/dist/agents/skills/cursor/harness-auth/SKILL.md +5 -15
- package/dist/agents/skills/cursor/harness-autopilot/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-brainstorming/SKILL.md +9 -0
- package/dist/agents/skills/cursor/harness-caching/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-chaos/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-code-review/SKILL.md +5 -15
- package/dist/agents/skills/cursor/harness-codebase-cleanup/SKILL.md +11 -0
- package/dist/agents/skills/cursor/harness-compliance/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-containerization/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-data-pipeline/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-data-validation/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-database/SKILL.md +5 -15
- package/dist/agents/skills/cursor/harness-debugging/SKILL.md +9 -0
- package/dist/agents/skills/cursor/harness-dependency-health/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-deployment/SKILL.md +5 -15
- package/dist/agents/skills/cursor/harness-design/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-design-mobile/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-design-system/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-design-web/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-diagnostics/SKILL.md +9 -0
- package/dist/agents/skills/cursor/harness-docs-pipeline/SKILL.md +11 -0
- package/dist/agents/skills/cursor/harness-dx/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-e2e/SKILL.md +9 -0
- package/dist/agents/skills/cursor/harness-event-driven/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-execution/SKILL.md +9 -0
- package/dist/agents/skills/cursor/harness-feature-flags/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-git-workflow/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-hotspot-detector/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-i18n/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-i18n-process/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-i18n-workflow/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-impact-analysis/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-incident-response/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-infrastructure-as-code/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-integration-test/SKILL.md +9 -0
- package/dist/agents/skills/cursor/harness-integrity/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-knowledge-mapper/SKILL.md +9 -0
- package/dist/agents/skills/cursor/harness-load-testing/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-ml-ops/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-mobile-patterns/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-mutation-test/SKILL.md +9 -0
- package/dist/agents/skills/cursor/harness-observability/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-onboarding/SKILL.md +18 -10
- package/dist/agents/skills/cursor/harness-parallel-agents/SKILL.md +9 -0
- package/dist/agents/skills/cursor/harness-perf/SKILL.md +11 -0
- package/dist/agents/skills/cursor/harness-perf-tdd/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-planning/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-pre-commit-review/SKILL.md +9 -0
- package/dist/agents/skills/cursor/harness-product-spec/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-property-test/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-refactoring/SKILL.md +9 -0
- package/dist/agents/skills/cursor/harness-release-readiness/SKILL.md +11 -0
- package/dist/agents/skills/cursor/harness-resilience/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-roadmap/SKILL.md +10 -1
- package/dist/agents/skills/cursor/harness-roadmap-pilot/SKILL.md +8 -0
- package/dist/agents/skills/cursor/harness-secrets/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-security-review/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-security-scan/SKILL.md +5 -15
- package/dist/agents/skills/cursor/harness-skill-authoring/SKILL.md +29 -1
- package/dist/agents/skills/cursor/harness-soundness-review/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-sql-review/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-state-management/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-supply-chain-audit/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-tdd/SKILL.md +9 -0
- package/dist/agents/skills/cursor/harness-test-advisor/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-test-data/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-ux-copy/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-verification/SKILL.md +9 -0
- package/dist/agents/skills/cursor/harness-verify/SKILL.md +10 -0
- package/dist/agents/skills/cursor/harness-visual-regression/SKILL.md +10 -0
- package/dist/agents/skills/cursor/initialize-harness-project/SKILL.md +22 -13
- package/dist/agents/skills/cursor/validate-context-engineering/SKILL.md +9 -0
- package/dist/agents/skills/gemini-cli/add-harness-component/SKILL.md +21 -12
- package/dist/agents/skills/gemini-cli/align-documentation/SKILL.md +9 -0
- package/dist/agents/skills/gemini-cli/check-mechanical-constraints/SKILL.md +9 -0
- package/dist/agents/skills/gemini-cli/cleanup-dead-code/SKILL.md +11 -0
- package/dist/agents/skills/gemini-cli/detect-doc-drift/SKILL.md +9 -0
- package/dist/agents/skills/gemini-cli/enforce-architecture/SKILL.md +5 -15
- package/dist/agents/skills/gemini-cli/harness-accessibility/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-api-design/SKILL.md +5 -15
- package/dist/agents/skills/gemini-cli/harness-architecture-advisor/SKILL.md +5 -15
- package/dist/agents/skills/gemini-cli/harness-auth/SKILL.md +5 -15
- package/dist/agents/skills/gemini-cli/harness-autopilot/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-brainstorming/SKILL.md +9 -0
- package/dist/agents/skills/gemini-cli/harness-caching/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-chaos/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-code-review/SKILL.md +5 -15
- package/dist/agents/skills/gemini-cli/harness-codebase-cleanup/SKILL.md +11 -0
- package/dist/agents/skills/gemini-cli/harness-compliance/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-containerization/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-data-pipeline/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-data-validation/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-database/SKILL.md +5 -15
- package/dist/agents/skills/gemini-cli/harness-debugging/SKILL.md +9 -0
- package/dist/agents/skills/gemini-cli/harness-dependency-health/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-deployment/SKILL.md +5 -15
- package/dist/agents/skills/gemini-cli/harness-design/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-design-mobile/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-design-system/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-design-web/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-diagnostics/SKILL.md +9 -0
- package/dist/agents/skills/gemini-cli/harness-docs-pipeline/SKILL.md +11 -0
- package/dist/agents/skills/gemini-cli/harness-dx/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-e2e/SKILL.md +9 -0
- package/dist/agents/skills/gemini-cli/harness-event-driven/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-execution/SKILL.md +9 -0
- package/dist/agents/skills/gemini-cli/harness-feature-flags/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-git-workflow/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-hotspot-detector/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-i18n/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-i18n-process/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-i18n-workflow/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-impact-analysis/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-incident-response/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-infrastructure-as-code/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-integration-test/SKILL.md +9 -0
- package/dist/agents/skills/gemini-cli/harness-integrity/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-knowledge-mapper/SKILL.md +9 -0
- package/dist/agents/skills/gemini-cli/harness-load-testing/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-ml-ops/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-mobile-patterns/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-mutation-test/SKILL.md +9 -0
- package/dist/agents/skills/gemini-cli/harness-observability/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-onboarding/SKILL.md +18 -10
- package/dist/agents/skills/gemini-cli/harness-parallel-agents/SKILL.md +9 -0
- package/dist/agents/skills/gemini-cli/harness-perf/SKILL.md +11 -0
- package/dist/agents/skills/gemini-cli/harness-perf-tdd/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-planning/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-pre-commit-review/SKILL.md +9 -0
- package/dist/agents/skills/gemini-cli/harness-product-spec/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-property-test/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-refactoring/SKILL.md +9 -0
- package/dist/agents/skills/gemini-cli/harness-release-readiness/SKILL.md +11 -0
- package/dist/agents/skills/gemini-cli/harness-resilience/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-roadmap/SKILL.md +10 -1
- package/dist/agents/skills/gemini-cli/harness-roadmap-pilot/SKILL.md +8 -0
- package/dist/agents/skills/gemini-cli/harness-secrets/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-security-review/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-security-scan/SKILL.md +5 -15
- package/dist/agents/skills/gemini-cli/harness-skill-authoring/SKILL.md +29 -1
- package/dist/agents/skills/gemini-cli/harness-soundness-review/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-sql-review/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-state-management/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-supply-chain-audit/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-tdd/SKILL.md +9 -0
- package/dist/agents/skills/gemini-cli/harness-test-advisor/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-test-data/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-ux-copy/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-verification/SKILL.md +9 -0
- package/dist/agents/skills/gemini-cli/harness-verify/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/harness-visual-regression/SKILL.md +10 -0
- package/dist/agents/skills/gemini-cli/initialize-harness-project/SKILL.md +22 -13
- package/dist/agents/skills/gemini-cli/validate-context-engineering/SKILL.md +9 -0
- package/dist/agents-md-HCCCO5PK.js +9 -0
- package/dist/{architecture-FVERI7BQ.js → architecture-S2H624W7.js} +5 -5
- package/dist/{assess-project-UGL5KLBV.js → assess-project-XSGK44S5.js} +1 -1
- package/dist/bin/harness-mcp.js +18 -18
- package/dist/bin/harness.js +124 -35
- package/dist/{check-phase-gate-C7JPPKMX.js → check-phase-gate-UGBJ237T.js} +5 -5
- package/dist/{chunk-RQ3AKUJB.js → chunk-2DHX6TAP.js} +4 -4
- package/dist/{chunk-7XZSHTYZ.js → chunk-2GT3HO2T.js} +3 -3
- package/dist/{chunk-ZLTFDTK7.js → chunk-2YA4XRI3.js} +5 -5
- package/dist/{chunk-GZKSBLQL.js → chunk-35EQ5UEI.js} +1 -1
- package/dist/{chunk-T5QWCVGK.js → chunk-4FHBPA3E.js} +11 -3
- package/dist/{chunk-ERS5EVUZ.js → chunk-5LMZA5LZ.js} +10 -10
- package/dist/{chunk-L57RL7MC.js → chunk-BK52Z6DR.js} +869 -419
- package/dist/{chunk-EUCASOD7.js → chunk-CLD4KL7O.js} +341 -71
- package/dist/{chunk-OD3S2NHN.js → chunk-E2GTL3YS.js} +1 -1
- package/dist/{chunk-YLN34N65.js → chunk-FP53DDB5.js} +1 -1
- package/dist/{chunk-7V5Y2L67.js → chunk-I47JLISV.js} +1 -1
- package/dist/{chunk-LAKMOIU6.js → chunk-KC5CTCEL.js} +9 -9
- package/dist/{chunk-UJHNGRS6.js → chunk-KTL3PHNQ.js} +6445 -6222
- package/dist/{chunk-DBSOCI3G.js → chunk-KV4M6Y5J.js} +1 -1
- package/dist/{chunk-FIAPHX37.js → chunk-LM5Z2WCA.js} +1 -1
- package/dist/{chunk-SD3SQOZ2.js → chunk-LOUH2LIC.js} +1 -1
- package/dist/{chunk-FNVAW5NG.js → chunk-MHOO7NLG.js} +11 -11
- package/dist/{chunk-HRUCT5YX.js → chunk-MZAHE4DK.js} +12 -12
- package/dist/{chunk-WKLLNUAT.js → chunk-NKL53UBL.js} +6 -6
- package/dist/{chunk-AQN7GFKU.js → chunk-PGF44T2D.js} +6 -6
- package/dist/{chunk-H7Y5CKTM.js → chunk-Q3XYV5UC.js} +1 -1
- package/dist/{chunk-KIR5PQX5.js → chunk-S5ZXT3TZ.js} +1 -1
- package/dist/{chunk-6KWBH4EO.js → chunk-UGD37ECK.js} +5 -5
- package/dist/{chunk-QBATHQXU.js → chunk-V27WDRYV.js} +540 -490
- package/dist/{chunk-YQ6KC6TE.js → chunk-YDRB55Q4.js} +1 -1
- package/dist/{chunk-CZEPCYVX.js → chunk-ZRYDYDB2.js} +6 -6
- package/dist/{chunk-7DMF3VT5.js → chunk-ZYJJUPNE.js} +1 -1
- package/dist/ci-workflow-I3V7FZNV.js +9 -0
- package/dist/{create-skill-U3XCFRZN.js → create-skill-AO25CJFM.js} +2 -2
- package/dist/{dist-USY2C5JL.js → dist-666AAZQ6.js} +1 -1
- package/dist/{dist-DZ63LLUD.js → dist-KQSTRP36.js} +1 -1
- package/dist/{dist-LPGVPYOZ.js → dist-MKWF5CXR.js} +7 -3
- package/dist/{dist-K56VJ4UJ.js → dist-WU3TVNNG.js} +7 -1
- package/dist/{docs-CGUBALYL.js → docs-R7UVQBMQ.js} +5 -5
- package/dist/engine-JGI3MWAC.js +9 -0
- package/dist/{entropy-H5OOCI57.js → entropy-IDHIG7HS.js} +4 -4
- package/dist/{feedback-XTDR7E3R.js → feedback-JZETY4UR.js} +1 -1
- package/dist/{generate-agent-definitions-RBI7Z4RY.js → generate-agent-definitions-D7B25YTM.js} +6 -6
- package/dist/{graph-loader-GRXDUWXO.js → graph-loader-BJULJYGG.js} +1 -1
- package/dist/index.d.ts +12 -8
- package/dist/index.js +54 -54
- package/dist/loader-E4KNTOP2.js +11 -0
- package/dist/mcp-67I2DBNM.js +37 -0
- package/dist/{performance-FSXEQJYB.js → performance-744OSR6P.js} +5 -5
- package/dist/{review-pipeline-VLKL7NV2.js → review-pipeline-HIO7HBW4.js} +1 -1
- package/dist/runtime-JXQ26U4Z.js +10 -0
- package/dist/{security-B76X5RL7.js → security-GDKHVFUC.js} +1 -1
- package/dist/{validate-KN6A2GN3.js → validate-2IUR3OWX.js} +5 -5
- package/dist/validate-cross-check-AM4T6P2K.js +9 -0
- package/package.json +5 -5
- package/dist/agents-md-FJXDMZPJ.js +0 -9
- package/dist/ci-workflow-S7VY625R.js +0 -9
- package/dist/engine-PEHFAFOT.js +0 -9
- package/dist/loader-IOC5L7NL.js +0 -11
- package/dist/mcp-7RPKBGIR.js +0 -37
- package/dist/runtime-3X2MV6R4.js +0 -10
- package/dist/validate-cross-check-LITTM24O.js +0 -9
- package/dist/{chunk-CJDVBBPB.js → chunk-3ISINLYT.js} +1 -1
|
@@ -116,6 +116,15 @@ For each violation that was not auto-fixed, report:
|
|
|
116
116
|
- Auto-fixed changes are verified by running the test suite
|
|
117
117
|
- No violations are suppressed without explicit team approval and a documented reason
|
|
118
118
|
|
|
119
|
+
## Rationalizations to Reject
|
|
120
|
+
|
|
121
|
+
| Rationalization | Why It Is Wrong |
|
|
122
|
+
| ------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
|
|
123
|
+
| "This forbidden import is just for one utility function -- I will suppress it inline" | The gate says no suppressing rules without documentation. Undocumented suppressions accumulate and erode the constraint system. |
|
|
124
|
+
| "The auto-fix looks right, so I do not need to re-run tests" | The gate says no auto-fix without test verification. Even import reordering can break code that depends on module initialization order. |
|
|
125
|
+
| "This is just a Tier 2 warning -- it can wait until after merge" | Tier 2 violations must be resolved before merge to main. Warnings that accumulate on main become the new baseline. |
|
|
126
|
+
| "The linter rule does not make sense for this project, so I will just disable it" | Propose a config change with justification, do not disable the rule inline. Fix it at the configuration level. |
|
|
127
|
+
|
|
119
128
|
## Examples
|
|
120
129
|
|
|
121
130
|
### Example: Forbidden import detected
|
|
@@ -191,6 +191,17 @@ Code behind feature flags or environment checks may appear dead in the default c
|
|
|
191
191
|
- No dynamically-imported, type-only, or side-effect code was accidentally deleted
|
|
192
192
|
- Each cleanup commit is atomic and has a descriptive message explaining what was removed and why
|
|
193
193
|
|
|
194
|
+
## Rationalizations to Reject
|
|
195
|
+
|
|
196
|
+
These are common rationalizations that sound reasonable but lead to incorrect results. When you catch yourself thinking any of these, stop and follow the documented process instead.
|
|
197
|
+
|
|
198
|
+
| Rationalization | Why It Is Wrong |
|
|
199
|
+
| ------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
200
|
+
| "This export has zero static imports, so it is definitely dead and safe to remove" | Zero static imports does not mean zero consumers. Dynamic imports, type-only imports, side-effect imports, and package entry points all create false positives. |
|
|
201
|
+
| "I removed the dead code and the tests pass, so I do not need to run harness validate and check-deps" | Both harness validate and harness check-deps must pass after every cleanup. Dead code removal can introduce dependency violations. |
|
|
202
|
+
| "The convergence loop found new dead code after my fixes, but it is probably just noise from the tool" | Removing dead code creates more dead code. The convergence loop exists to catch these cascades. If the issue count decreased, loop back. |
|
|
203
|
+
| "The entropy report has 60 items but I can clean them all up in one pass to be thorough" | When the report is very large (>50 items), pick the highest-confidence dead code first. Attempting everything at once risks compound errors. |
|
|
204
|
+
|
|
194
205
|
## Examples
|
|
195
206
|
|
|
196
207
|
### Example: Removing unused utility functions
|
|
@@ -127,6 +127,15 @@ Group findings by documentation file so that fixes can be applied file-by-file.
|
|
|
127
127
|
- No documentation references deleted files, functions, or features
|
|
128
128
|
- Drift findings are prioritized and assigned to the appropriate fix cycle
|
|
129
129
|
|
|
130
|
+
## Rationalizations to Reject
|
|
131
|
+
|
|
132
|
+
| Rationalization | Why It Is Wrong |
|
|
133
|
+
| ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
|
|
134
|
+
| "The docs are close enough -- a renamed function is obvious from context" | Renamed references in AGENTS.md cause AI agents to hallucinate about non-existent code. Precision matters. |
|
|
135
|
+
| "We only changed internal code, so the docs do not need checking" | Internal API docs with wrong signatures waste developer debugging time. Changed-behavior-not-reflected drift is High priority. |
|
|
136
|
+
| "There are too many findings to deal with right now, so skip the scan" | The escalation protocol exists for this case: focus on Critical and High items, create a tracking issue for the rest. |
|
|
137
|
+
| "We can rely on code review to catch stale docs" | Code reviewers focus on code correctness, not documentation cross-references. harness check-docs catches what humans routinely miss. |
|
|
138
|
+
|
|
130
139
|
## Examples
|
|
131
140
|
|
|
132
141
|
### Example: Renamed function detected
|
|
@@ -272,21 +272,11 @@ These apply to ALL skills. If you catch yourself doing any of these, STOP.
|
|
|
272
272
|
|
|
273
273
|
## Rationalizations to Reject
|
|
274
274
|
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
- **"This is best practice"** — Best practice in what context? Cite the source and
|
|
281
|
-
confirm it applies to this codebase.
|
|
282
|
-
- **"We can fix it later"** — If it is worth flagging, it is worth documenting now
|
|
283
|
-
with a concrete follow-up plan.
|
|
284
|
-
|
|
285
|
-
### Domain-Specific
|
|
286
|
-
|
|
287
|
-
- **"The violation is minor — just one import"** — One violation sets a precedent. Enforce the constraint or document an explicit exception with rationale.
|
|
288
|
-
- **"It works, so the architecture must be fine"** — Working code with bad architecture is technical debt with compound interest. Correct function does not excuse structural violations.
|
|
289
|
-
- **"This is a legacy module, different rules apply"** — Legacy does not mean exempt. Either the constraint applies or it needs an explicit documented exception.
|
|
275
|
+
| Rationalization | Reality |
|
|
276
|
+
| ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------ |
|
|
277
|
+
| "The violation is minor — just one import" | One violation sets a precedent. Enforce the constraint or document an explicit exception with rationale. |
|
|
278
|
+
| "It works, so the architecture must be fine" | Working code with bad architecture is technical debt with compound interest. Correct function does not excuse structural violations. |
|
|
279
|
+
| "This is a legacy module, different rules apply" | Legacy does not mean exempt. Either the constraint applies or it needs an explicit documented exception. |
|
|
290
280
|
|
|
291
281
|
## Escalation
|
|
292
282
|
|
|
@@ -261,6 +261,16 @@ A11Y-030 [info] Hardcoded color value not from design token set
|
|
|
261
261
|
- `A11Y-031`: Contrast failure -- fix requires choosing a darker color. Escalate to design tokens or get human input on replacement color.
|
|
262
262
|
- `A11Y-001`: The `alt=""` fix assumes decorative. If the icon conveys meaning, human must write descriptive alt text.
|
|
263
263
|
|
|
264
|
+
## Rationalizations to Reject
|
|
265
|
+
|
|
266
|
+
| Rationalization | Reality |
|
|
267
|
+
| --------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
268
|
+
| "The contrast ratio is 4.4:1 — that's essentially 4.5:1 and the difference is imperceptible. I'll mark it passing." | WCAG AA requires exactly 4.5:1 for normal text. 4.4:1 fails. There is no rounding or visual perception exception in the standard. Flag the failure with the actual ratio and let the user decide how to remediate. |
|
|
269
|
+
| "This `<div onClick>` already has good visual styling — adding `role='button'` and a keyboard handler is unnecessary clutter." | A clickable `<div>` without `role="button"` and `onKeyDown` is inaccessible to keyboard-only users and screen reader users. Visual styling has no bearing on ARIA semantics or keyboard reachability. This is A11Y-012, always flagged. |
|
|
270
|
+
| "The automated fix for this `<img>` alt attribute is obvious — I'll apply it without showing the diff since it's just adding `alt=''`." | Every automated fix must be presented as a before/after diff before being written to disk. This is a hard gate. The correct alt value for non-decorative images requires human judgment, and even `alt=""` makes a semantic claim about decorativeness that must be confirmed. |
|
|
271
|
+
| "I18n is enabled, so I'll skip the `lang` and `dir` attribute checks entirely — harness-i18n will catch them." | Deferral to harness-i18n is conditional on `i18n.enabled: true` in config. If i18n is not configured, these checks remain part of this skill's scan. Always read the config before skipping any check category. |
|
|
272
|
+
| "There are 15 findings in this component — I'll fix the easy ones automatically and leave the rest without reporting them explicitly." | All findings must be reported, regardless of whether they are auto-fixable. The report is the primary deliverable of the REPORT phase. Selectively reporting only fixable violations hides the full accessibility debt from the team. |
|
|
273
|
+
|
|
264
274
|
## Gates
|
|
265
275
|
|
|
266
276
|
These are hard stops. Violating any gate means the process has broken down.
|
|
@@ -332,21 +332,11 @@ These apply to ALL skills. If you catch yourself doing any of these, STOP.
|
|
|
332
332
|
|
|
333
333
|
## Rationalizations to Reject
|
|
334
334
|
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
- **"This is best practice"** — Best practice in what context? Cite the source and
|
|
341
|
-
confirm it applies to this codebase.
|
|
342
|
-
- **"We can fix it later"** — If it is worth flagging, it is worth documenting now
|
|
343
|
-
with a concrete follow-up plan.
|
|
344
|
-
|
|
345
|
-
### Domain-Specific
|
|
346
|
-
|
|
347
|
-
- **"It's an internal API, breaking changes are fine"** — Internal consumers break too. Version the change or coordinate the migration explicitly.
|
|
348
|
-
- **"The field name is obvious enough"** — API field names are a public contract. Follow existing naming conventions and document the semantics.
|
|
349
|
-
- **"Nobody uses that endpoint anyway"** — Verify with access logs or usage data. Assumptions about usage without evidence lead to silent breakages.
|
|
335
|
+
| Rationalization | Reality |
|
|
336
|
+
| ------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
|
|
337
|
+
| "It's an internal API, breaking changes are fine" | Internal consumers break too. Version the change or coordinate the migration explicitly. |
|
|
338
|
+
| "The field name is obvious enough" | API field names are a public contract. Follow existing naming conventions and document the semantics. |
|
|
339
|
+
| "Nobody uses that endpoint anyway" | Verify with access logs or usage data. Assumptions about usage without evidence lead to silent breakages. |
|
|
350
340
|
|
|
351
341
|
## Escalation
|
|
352
342
|
|
|
@@ -309,21 +309,11 @@ These apply to ALL skills. If you catch yourself doing any of these, STOP.
|
|
|
309
309
|
|
|
310
310
|
## Rationalizations to Reject
|
|
311
311
|
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
- **"This is best practice"** — Best practice in what context? Cite the source and
|
|
318
|
-
confirm it applies to this codebase.
|
|
319
|
-
- **"We can fix it later"** — If it is worth flagging, it is worth documenting now
|
|
320
|
-
with a concrete follow-up plan.
|
|
321
|
-
|
|
322
|
-
### Domain-Specific
|
|
323
|
-
|
|
324
|
-
- **"This will be easier to maintain"** — Easier for whom, and compared to what? Cite the maintenance burden with evidence from the codebase.
|
|
325
|
-
- **"It's the modern approach"** — Modernity is not a design criterion. Fitness for purpose is. State the specific benefit.
|
|
326
|
-
- **"Other teams do it this way"** — Other teams have different constraints. Evaluate the option on this codebase's specific merits.
|
|
312
|
+
| Rationalization | Reality |
|
|
313
|
+
| --------------------------------- | --------------------------------------------------------------------------------------------------- |
|
|
314
|
+
| "This will be easier to maintain" | Easier for whom, and compared to what? Cite the maintenance burden with evidence from the codebase. |
|
|
315
|
+
| "It's the modern approach" | Modernity is not a design criterion. Fitness for purpose is. State the specific benefit. |
|
|
316
|
+
| "Other teams do it this way" | Other teams have different constraints. Evaluate the option on this codebase's specific merits. |
|
|
327
317
|
|
|
328
318
|
## Escalation
|
|
329
319
|
|
|
@@ -307,21 +307,11 @@ These apply to ALL skills. If you catch yourself doing any of these, STOP.
|
|
|
307
307
|
|
|
308
308
|
## Rationalizations to Reject
|
|
309
309
|
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
- **"This is best practice"** — Best practice in what context? Cite the source and
|
|
316
|
-
confirm it applies to this codebase.
|
|
317
|
-
- **"We can fix it later"** — If it is worth flagging, it is worth documenting now
|
|
318
|
-
with a concrete follow-up plan.
|
|
319
|
-
|
|
320
|
-
### Domain-Specific
|
|
321
|
-
|
|
322
|
-
- **"No one would guess this token format"** — Security by obscurity. Tokens must be cryptographically secure regardless of format predictability.
|
|
323
|
-
- **"This is an internal service, auth is less critical"** — Internal services are lateral movement targets. Authenticate all service boundaries.
|
|
324
|
-
- **"The frontend validates permissions, so the backend doesn't need to"** — Client-side checks are bypassable. Server-side authorization is the only real enforcement.
|
|
310
|
+
| Rationalization | Reality |
|
|
311
|
+
| -------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
|
|
312
|
+
| "No one would guess this token format" | Security by obscurity. Tokens must be cryptographically secure regardless of format predictability. |
|
|
313
|
+
| "This is an internal service, auth is less critical" | Internal services are lateral movement targets. Authenticate all service boundaries. |
|
|
314
|
+
| "The frontend validates permissions, so the backend doesn't need to" | Client-side checks are bypassable. Server-side authorization is the only real enforcement. |
|
|
325
315
|
|
|
326
316
|
## Escalation
|
|
327
317
|
|
|
@@ -720,6 +720,16 @@ INIT → ASSESS → PLAN → APPROVE_PLAN → EXECUTE → VERIFY → REVIEW →
|
|
|
720
720
|
- Checkpoint commits fire after every passing checkpoint; recovery commits fire on retry budget exhaustion
|
|
721
721
|
- Rigor level persists across session resume — set once during INIT, never changed mid-session
|
|
722
722
|
|
|
723
|
+
## Rationalizations to Reject
|
|
724
|
+
|
|
725
|
+
| Rationalization | Reality |
|
|
726
|
+
| --------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
727
|
+
| "This phase is low complexity, so I can skip the APPROVE_PLAN gate entirely" | Low complexity only means auto-approval when no concern signals fire. If the planner flagged concerns, produced a complexity override, or the task count exceeds 15, the gate pauses regardless of the spec annotation. |
|
|
728
|
+
| "I can write the planning logic inline instead of dispatching to the harness-planner persona agent" | The Iron Law is explicit: autopilot delegates, never reimplements. Using a general-purpose agent or inlining planning logic bypasses the harness methodology. |
|
|
729
|
+
| "The retry budget is exhausted but I can try one more approach before stopping" | The 3-attempt retry budget exists because each failed attempt degrades context and compounds risk. Exceeding the budget without human input turns a recoverable failure into an unrecoverable one. |
|
|
730
|
+
| "I will skip the scratchpad since keeping research in conversation is faster" | Scratchpad is gated by rigor level. At standard or thorough, bulky research (>500 words) must go to scratchpad to keep agent conversation focused on decisions. |
|
|
731
|
+
| "The plan auto-approved, so I can skip recording the decision in the decisions array" | Every plan approval -- auto or manual -- must be recorded with its signal evaluation. The decisions array is the audit trail that explains why a plan was approved. |
|
|
732
|
+
|
|
723
733
|
## Examples
|
|
724
734
|
|
|
725
735
|
### Example: 3-Phase Security Scanner
|
|
@@ -326,6 +326,15 @@ These patterns make requirements testable and unambiguous. Apply them when the o
|
|
|
326
326
|
- `harness validate` passes after the spec is written
|
|
327
327
|
- If scope was too large, it was decomposed into sub-projects with the human's approval
|
|
328
328
|
|
|
329
|
+
## Rationalizations to Reject
|
|
330
|
+
|
|
331
|
+
| Rationalization | Reality |
|
|
332
|
+
| ---------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
333
|
+
| "I already understand the problem well enough to skip the question phase" | The Gates section is explicit: you must ask at least one clarifying question before proposing approaches. Skipping questions means making untested assumptions. |
|
|
334
|
+
| "There is only one viable approach, so presenting alternatives would be contrived" | The gate requires at least 2 approaches with tradeoffs. A single approach is a recommendation disguised as a decision -- the human has no real choice. |
|
|
335
|
+
| "I will draft the full spec and present it for review all at once to save time" | Section-dump specs are explicitly forbidden. Presenting section by section with feedback between each catches misunderstandings early. |
|
|
336
|
+
| "This future capability is low-cost to include now, so we should build it in" | YAGNI is a gate, not a suggestion. Every capability must trace to a stated requirement. "We might need this later" is the exact rationalization that turns focused specs into bloated ones. |
|
|
337
|
+
|
|
329
338
|
## Examples
|
|
330
339
|
|
|
331
340
|
### Example: Designing a Notification System
|
|
@@ -295,6 +295,16 @@ async function getProducts(): Promise<Product[]> {
|
|
|
295
295
|
}
|
|
296
296
|
```
|
|
297
297
|
|
|
298
|
+
## Rationalizations to Reject
|
|
299
|
+
|
|
300
|
+
| Rationalization | Reality |
|
|
301
|
+
| --------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
302
|
+
| "Cache invalidation is complex — a short TTL means we're always fresh enough" | Short TTLs without event-based invalidation guarantee staleness windows proportional to the TTL. A 60-second TTL on pricing data means a price change takes up to 60 seconds to propagate. For correctness-sensitive data, TTL alone is not a strategy — it is a staleness budget. |
|
|
303
|
+
| "Redis is fast — we don't need to worry about the cache stampede, it'll resolve itself" | Cache stampedes do not resolve themselves; they resolve after they have already caused a database overload. With 200 requests per second and a 450ms rebuild time, a stampede generates ~90 concurrent database queries at once. The database can fail before a single cache entry is rebuilt. |
|
|
304
|
+
| "We cache the whole user object so we have everything in one key" | Caching composite objects creates broad invalidation requirements. A user profile update invalidates a cache entry that includes unrelated fields like payment methods or notification preferences. Cache keys scoped to specific sub-resources reduce invalidation blast radius. |
|
|
305
|
+
| "The cache failure is caught and logged — users will just get a slower response" | Catching the error is not the same as handling it. If cache failure causes a 30-second database query on every request, "slower response" becomes "timeout" becomes "circuit breaker opens" becomes "service unavailable." Failure handling must degrade to database reads within the acceptable latency budget, not unconditionally. |
|
|
306
|
+
| "We namespace by feature name — there's no collision risk" | Feature names are not unique across services. Two services that share a Redis instance and both cache `user:123` without a service prefix will corrupt each other's data silently. Namespace prefixes must include the service and the data schema version, not just the feature name. |
|
|
307
|
+
|
|
298
308
|
## Gates
|
|
299
309
|
|
|
300
310
|
- **No unbounded caches.** Every cache (in-memory, Redis, Memcached) must have either a `maxSize`/`maxmemory` limit or a TTL on every key. An unbounded cache will grow until it causes memory exhaustion. WHERE a cache has no eviction policy configured, THEN the skill must halt and require one before proceeding.
|
|
@@ -280,6 +280,16 @@ Result: PASSED - System maintained availability throughout.
|
|
|
280
280
|
Zero 5xx errors observed. No data loss.
|
|
281
281
|
```
|
|
282
282
|
|
|
283
|
+
## Rationalizations to Reject
|
|
284
|
+
|
|
285
|
+
| Rationalization | Reality |
|
|
286
|
+
| ----------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
287
|
+
| "Our circuit breakers are already tested in unit tests — we don't need chaos experiments" | Unit tests verify that circuit breaker code executes. Chaos experiments verify that the circuit breaker actually opens under real load, that the fallback produces an acceptable user-facing response, and that monitoring detects the transition. These are different things. |
|
|
288
|
+
| "We can't run chaos experiments in production — it's too risky" | Avoiding chaos experiments does not reduce risk — it defers the discovery of failure modes to real incidents. Chaos experiments in staging with defined abort criteria and short durations are lower risk than discovering failure modes at 2am during a real outage. |
|
|
289
|
+
| "The experiment passed in staging so we know it'll work in production" | Staging differences in traffic volume, data distribution, and infrastructure scale can mask failure modes. Staging experiments validate the mechanism; production experiments (with tightly scoped blast radius) validate the system under real conditions. |
|
|
290
|
+
| "We injected the fault and the system recovered — the experiment is done" | Recovery alone does not validate resilience. The experiment must also confirm: detection time (did monitoring catch it?), recovery time (did it meet the SLA?), and no data loss or corruption. A system that recovers after 10 minutes of data inconsistency has not passed. |
|
|
291
|
+
| "We have runbooks for these failure modes, so game days aren't necessary" | A runbook that has never been executed under pressure is a hypothesis, not a procedure. Game days reveal whether runbooks are complete, whether on-call engineers can execute them accurately under stress, and whether the estimated recovery times are realistic. |
|
|
292
|
+
|
|
283
293
|
## Gates
|
|
284
294
|
|
|
285
295
|
- **No chaos experiments without abort criteria.** Every experiment must define conditions under which it is immediately terminated. Running an experiment that you cannot stop is reckless, not engineering.
|
|
@@ -831,21 +831,11 @@ These apply to ALL skills. If you catch yourself doing any of these, STOP.
|
|
|
831
831
|
|
|
832
832
|
## Rationalizations to Reject
|
|
833
833
|
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
- **"This is best practice"** — Best practice in what context? Cite the source and
|
|
840
|
-
confirm it applies to this codebase.
|
|
841
|
-
- **"We can fix it later"** — If it is worth flagging, it is worth documenting now
|
|
842
|
-
with a concrete follow-up plan.
|
|
843
|
-
|
|
844
|
-
### Domain-Specific
|
|
845
|
-
|
|
846
|
-
- **"The tests pass, so the logic must be correct"** — Tests can be incomplete. Review the logic independently of test results.
|
|
847
|
-
- **"This is how it was done elsewhere in the codebase"** — Existing patterns can be wrong. Evaluate the pattern on its merits, not just its precedent.
|
|
848
|
-
- **"It's just a refactor, low risk"** — Refactors change behavior surfaces. Review them with the same rigor as feature changes.
|
|
834
|
+
| Rationalization | Reality |
|
|
835
|
+
| --------------------------------------------------- | ------------------------------------------------------------------------------------------- |
|
|
836
|
+
| "The tests pass, so the logic must be correct" | Tests can be incomplete. Review the logic independently of test results. |
|
|
837
|
+
| "This is how it was done elsewhere in the codebase" | Existing patterns can be wrong. Evaluate the pattern on its merits, not just its precedent. |
|
|
838
|
+
| "It's just a refactor, low risk" | Refactors change behavior surfaces. Review them with the same rigor as feature changes. |
|
|
849
839
|
|
|
850
840
|
## Escalation
|
|
851
841
|
|
|
@@ -187,6 +187,17 @@ Remaining findings: 3 (require human action)
|
|
|
187
187
|
Suggested: Deprecate with @deprecated JSDoc tag, remove in next major version
|
|
188
188
|
```
|
|
189
189
|
|
|
190
|
+
## Rationalizations to Reject
|
|
191
|
+
|
|
192
|
+
These are common rationalizations that sound reasonable but lead to incorrect results. When you catch yourself thinking any of these, stop and follow the documented process instead.
|
|
193
|
+
|
|
194
|
+
| Rationalization | Why It Is Wrong |
|
|
195
|
+
| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
196
|
+
| "This dead export is in a high-churn file but the removal is clearly safe" | High-churn files have more hidden consumers. Safe findings in the top 10% by churn are downgraded to probably-safe, requiring explicit approval. |
|
|
197
|
+
| "The convergence loop is not reducing findings quickly enough, so I will apply unsafe fixes to make progress" | Unsafe findings are never auto-fixed, regardless of convergence pressure. Each requires human judgment. |
|
|
198
|
+
| "The verification gate failed on a probably-safe fix, but I am confident the fix is correct" | When verification fails after a fix batch, the entire batch must be reverted and all findings reclassified as unsafe. |
|
|
199
|
+
| "I will skip the hotspot context phase since it adds time and the churn data is just supplementary" | The hotspot map drives safety classification accuracy. Without it, safe fixes in high-churn areas are not downgraded. |
|
|
200
|
+
|
|
190
201
|
## Examples
|
|
191
202
|
|
|
192
203
|
### Example: Post-Refactoring Cleanup
|
|
@@ -288,6 +288,16 @@ Phase 4: REPORT
|
|
|
288
288
|
7. Add automated HIPAA compliance regression tests to CI pipeline
|
|
289
289
|
```
|
|
290
290
|
|
|
291
|
+
## Rationalizations to Reject
|
|
292
|
+
|
|
293
|
+
| Rationalization | Reality |
|
|
294
|
+
| ------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
295
|
+
| "We're not in the EU so GDPR doesn't apply to us" | GDPR applies to any organization that processes data of EU residents, regardless of where the organization is based. If a single EU user can sign up, GDPR scope must be assessed. |
|
|
296
|
+
| "Our lawyers will handle the compliance questions — just document what we have" | Legal review and technical implementation are distinct. Lawyers cannot attest that Article 17 deletion cascades to S3 and Segment. The technical implementation must be audited separately. |
|
|
297
|
+
| "We already did a SOC2 audit last year — this codebase is the same" | SOC2 Type II assesses controls over time. Adding a new data store, third-party processor, or API endpoint can invalidate previous control attestations. Audits are point-in-time snapshots, not permanent certificates. |
|
|
298
|
+
| "The audit isn't for three months — we can fix the gaps before then" | Gaps found now require implementation, testing, and evidence collection time. Auditors expect evidence of sustained control operation, not freshly deployed fixes. A gap fixed the week before an audit is still a finding. |
|
|
299
|
+
| "That field is technically a username, not PII" | Data classification cannot be done by naming convention. A username combined with any other identifying field (email, IP, phone) is PII under GDPR. Classification must be based on the realistic re-identification risk, not the field name. |
|
|
300
|
+
|
|
291
301
|
## Gates
|
|
292
302
|
|
|
293
303
|
- **No compliance report without data classification.** A compliance audit that does not inventory and classify data fields is incomplete. The classification matrix must be produced before controls can be meaningfully assessed. Without knowing what data exists and where, control checks are theoretical.
|
|
@@ -269,6 +269,16 @@ Phase 4: VALIDATE
|
|
|
269
269
|
Result: PASS -- well-configured container setup
|
|
270
270
|
```
|
|
271
271
|
|
|
272
|
+
## Rationalizations to Reject
|
|
273
|
+
|
|
274
|
+
| Rationalization | Reality |
|
|
275
|
+
| ------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
276
|
+
| "We use `latest` in production because we always want the most recent image" | `latest` is a mutable pointer. A deployment at 9am and a rollback at 9pm may pull different image contents with the same tag. Immutable tags (semver or digest) are required for reproducible deployments and reliable rollbacks. |
|
|
277
|
+
| "The container runs as root because it needs to bind to port 80" | Binding to a privileged port requires elevated capability, not full root access. The correct solution is to run the container as a non-root user and use `--cap-add NET_BIND_SERVICE`, or to expose a high port and use a load balancer or ingress for port translation. |
|
|
278
|
+
| "We don't set resource limits because we want the container to use whatever it needs" | Containers without memory limits can exhaust node memory, triggering OOM kills of other containers on the same node. Kubernetes uses resource requests for scheduling and limits for safety; omitting limits transfers the risk of one container onto the entire node. |
|
|
279
|
+
| "Our image is 2GB but it only takes a few seconds to pull in our CI" | Image size multiplies across every developer pull, every CI run, and every Kubernetes pod startup. A 2GB image that takes 3 seconds to pull in CI with a warm cache takes 90 seconds on a cold node during an autoscaling event at peak traffic. |
|
|
280
|
+
| "We don't need liveness and readiness probes — the container exits if it crashes" | Process exit is a coarse health signal. A process that is running but deadlocked, stuck in an infinite retry loop, or unable to connect to its database will never exit. Kubernetes will continue routing traffic to it. Readiness probes prevent traffic routing to unhealthy containers that are still running. |
|
|
281
|
+
|
|
272
282
|
## Gates
|
|
273
283
|
|
|
274
284
|
- **No `latest` tag in production manifests.** Production Kubernetes manifests or compose files using `latest` image tags are blocking findings. Immutable tags or digests are required.
|
|
@@ -259,6 +259,16 @@ Phase 4: DOCUMENT
|
|
|
259
259
|
Quality Report: FAIL (2 errors requiring immediate attention)
|
|
260
260
|
```
|
|
261
261
|
|
|
262
|
+
## Rationalizations to Reject
|
|
263
|
+
|
|
264
|
+
| Rationalization | Reality |
|
|
265
|
+
| --------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
266
|
+
| "The pipeline failed halfway through — we'll just re-run it and it'll pick up where it left off." | A non-idempotent pipeline that is re-run from the middle writes duplicate records for the portion that succeeded before failure. The correct fix is to make the pipeline idempotent (MERGE, upsert, or delete-then-insert) so re-runs are always safe, not to assume partial re-runs are harmless. |
|
|
267
|
+
| "The model has no dbt tests yet, but it's only used in one dashboard — low risk." | Every untested model is a silent data quality failure waiting to reach a stakeholder. Revenue and user-facing models require test coverage regardless of how few consumers they have today. The number of consumers grows; the coverage does not add itself retroactively. |
|
|
268
|
+
| "We're still figuring out the schema — we'll add data contracts once the model stabilizes." | Contracts are most valuable during schema evolution, not after it. An unstable schema without a contract lets breaking changes propagate undetected to downstream consumers. Add the contract as the model is defined; update it explicitly as the schema changes. That explicitness is the value. |
|
|
269
|
+
| "Circular dependency detection is handled by the orchestrator — I don't need to check for it during design." | Orchestrators detect circular dependencies at runtime, after the DAG has been deployed. Static analysis during design catches them before deployment, before the pipeline fails at 3am, and before engineers have to diagnose a graph cycle under pressure. Detect them early. |
|
|
270
|
+
| "The freshness check is too strict — it keeps alerting because the upstream source is occasionally delayed. I'll just remove it." | A freshness check that fires too often has the wrong threshold. Removing it means stale data reaches analysts silently. Adjust the `warn_after` and `error_after` thresholds to match the source's actual SLA, and escalate if the source cannot meet its own SLA. |
|
|
271
|
+
|
|
262
272
|
## Gates
|
|
263
273
|
|
|
264
274
|
- **No approving non-idempotent production pipelines.** If a pipeline writes data without MERGE, upsert, or delete-then-insert patterns, it is flagged as an error. Non-idempotent pipelines cause data duplication on re-runs.
|
|
@@ -328,6 +328,16 @@ await producer.send({ topic: 'order-events', messages: [{ value: JSON.stringify(
|
|
|
328
328
|
const event = orderPlacedSchema.parse(JSON.parse(message.value));
|
|
329
329
|
```
|
|
330
330
|
|
|
331
|
+
## Rationalizations to Reject
|
|
332
|
+
|
|
333
|
+
| Rationalization | Reality |
|
|
334
|
+
| ------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
335
|
+
| "TypeScript already types the request body — we don't need runtime Zod validation on top of that." | TypeScript types are erased at runtime. `req.body as CreateUserInput` compiles fine and accepts any payload at runtime. A missing required field, a string where a number is expected, or an injected extra field bypasses TypeScript entirely. Runtime validation is not redundant with types — it is the only enforcement that exists when the application is actually running. |
|
|
336
|
+
| "We trust this internal service — we don't need to validate its message payloads." | Trust boundaries are not about intent; they are about reliability. Internal services change their schemas, deploy independently, and have bugs. A consumer that accepts payloads without validation silently processes malformed data and produces corrupted downstream records. Validate every message that crosses a process boundary, regardless of who sent it. |
|
|
337
|
+
| "The validation error message just says 'invalid input' — the developer can look at the schema to understand what failed." | Developers are not the only consumers of validation errors. Frontend applications display them, monitoring systems alert on them, and support teams diagnose them. A message that says `{"field":"email","expected":"string email","received":"null"}` is resolved in seconds. "Invalid input" creates a support ticket. |
|
|
338
|
+
| "The two services define their own schemas independently but they've been in sync so far — shared contracts are overkill." | "In sync so far" describes luck, not process. Independent schema definitions diverge at the next feature sprint when one team changes a field name. Shared contracts in a common package make schema drift a compile-time error instead of a runtime mystery. The divergence between `userId` and `customerId` in the same event is exactly what independent definitions produce. |
|
|
339
|
+
| "Environment variable validation at startup is unnecessary — if a variable is missing, the app will fail when it's first used." | Failing at the first usage of a missing variable produces a cryptic error deep in the call stack, often after the app has been running for minutes and has processed real requests. Failing at startup produces a clear error with the variable name, before any requests are served. Fast failure is always better than deferred failure. |
|
|
340
|
+
|
|
331
341
|
## Gates
|
|
332
342
|
|
|
333
343
|
- **No type assertions on external data.** WHERE `as` is used to cast data from an API response, message payload, request body, or `JSON.parse` result, THEN the skill must flag it as a trust boundary violation. Type assertions bypass runtime validation entirely. The only acceptable pattern is runtime validation followed by type inference.
|
|
@@ -286,21 +286,11 @@ These apply to ALL skills. If you catch yourself doing any of these, STOP.
|
|
|
286
286
|
|
|
287
287
|
## Rationalizations to Reject
|
|
288
288
|
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
- **"This is best practice"** — Best practice in what context? Cite the source and
|
|
295
|
-
confirm it applies to this codebase.
|
|
296
|
-
- **"We can fix it later"** — If it is worth flagging, it is worth documenting now
|
|
297
|
-
with a concrete follow-up plan.
|
|
298
|
-
|
|
299
|
-
### Domain-Specific
|
|
300
|
-
|
|
301
|
-
- **"The table is small, we don't need an index"** — Tables grow. Plan for the steady state, not the current row count.
|
|
302
|
-
- **"The ORM handles this for us"** — ORMs generate SQL that may not match your performance expectations. Review the generated queries for correctness and efficiency.
|
|
303
|
-
- **"We can always add a migration later"** — Schema changes in production have operational cost. Design the schema thoughtfully now rather than migrating repeatedly.
|
|
289
|
+
| Rationalization | Reality |
|
|
290
|
+
| -------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
|
|
291
|
+
| "The table is small, we don't need an index" | Tables grow. Plan for the steady state, not the current row count. |
|
|
292
|
+
| "The ORM handles this for us" | ORMs generate SQL that may not match your performance expectations. Review the generated queries for correctness and efficiency. |
|
|
293
|
+
| "We can always add a migration later" | Schema changes in production have operational cost. Design the schema thoughtfully now rather than migrating repeatedly. |
|
|
304
294
|
|
|
305
295
|
## Escalation
|
|
306
296
|
|
|
@@ -298,6 +298,15 @@ Update the session status to `resolved`.
|
|
|
298
298
|
- Debug session file is complete with investigation log, hypotheses, and resolution
|
|
299
299
|
- Learnings were captured for future reference
|
|
300
300
|
|
|
301
|
+
## Rationalizations to Reject
|
|
302
|
+
|
|
303
|
+
| Rationalization | Reality |
|
|
304
|
+
| --------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
305
|
+
| "I have a strong hunch about what is wrong, so I will jump straight to fixing it" | Phase 1 INVESTIGATE must be completed before ANY fix code is written. You are guessing, not debugging. |
|
|
306
|
+
| "I changed two things and the bug is gone, so the fix must be correct" | One variable at a time is a gate. Changing multiple things simultaneously means you do not know which change fixed it. |
|
|
307
|
+
| "This is my third attempt but I feel close, so one more try before escalating" | After 3 failed fix attempts, the gate requires you to question the architecture. The problem is likely not where you think it is. |
|
|
308
|
+
| "A try-catch that swallows the error prevents the crash, so the bug is fixed" | Symptom suppression is explicitly listed as a bad fix. Wrapping the failure in a try-catch addresses what the bug did, not why it happened. |
|
|
309
|
+
|
|
301
310
|
## Examples
|
|
302
311
|
|
|
303
312
|
### Example: API Endpoint Returns 500 Instead of 400
|
|
@@ -145,6 +145,16 @@ For each problem found, generate a specific, actionable recommendation:
|
|
|
145
145
|
- Report follows the structured output format
|
|
146
146
|
- All findings are backed by graph query evidence (with graph) or systematic static analysis (without graph)
|
|
147
147
|
|
|
148
|
+
## Rationalizations to Reject
|
|
149
|
+
|
|
150
|
+
These are common rationalizations that sound reasonable but lead to incorrect results. When you catch yourself thinking any of these, stop and follow the documented process instead.
|
|
151
|
+
|
|
152
|
+
| Rationalization | Why It Is Wrong |
|
|
153
|
+
| ---------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
154
|
+
| "There are a few orphan files but they are probably test fixtures or configs, so I will skip investigating them" | Orphan detection explicitly excludes entry points. Files with zero inbound imports that are not entry points must be investigated. |
|
|
155
|
+
| "The cycle is between two closely related files, so it is not really a problem" | Cycles create fragile coupling where any change in the cycle affects all members. Even "related" files should not have circular dependencies. |
|
|
156
|
+
| "The health score is a B, which is good enough -- no need to act on the recommendations" | A hub with 14 importers is a single point of failure. "Good enough" scores mask specific structural risks that compound over time. |
|
|
157
|
+
|
|
148
158
|
## Examples
|
|
149
159
|
|
|
150
160
|
### Example: Weekly Health Check on Monorepo
|
|
@@ -283,21 +283,11 @@ These apply to ALL skills. If you catch yourself doing any of these, STOP.
|
|
|
283
283
|
|
|
284
284
|
## Rationalizations to Reject
|
|
285
285
|
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
- **"This is best practice"** — Best practice in what context? Cite the source and
|
|
292
|
-
confirm it applies to this codebase.
|
|
293
|
-
- **"We can fix it later"** — If it is worth flagging, it is worth documenting now
|
|
294
|
-
with a concrete follow-up plan.
|
|
295
|
-
|
|
296
|
-
### Domain-Specific
|
|
297
|
-
|
|
298
|
-
- **"It's just a config change, not a code change"** — Config changes cause outages at the same rate as code changes. Deploy them with the same rigor and rollback strategy.
|
|
299
|
-
- **"We tested this in staging"** — Staging is not production. Traffic patterns, data volume, and edge cases differ. Staging success does not guarantee production safety.
|
|
300
|
-
- **"Downtime will be brief"** — Brief is not zero. Quantify the expected impact and communicate it to stakeholders before deploying.
|
|
286
|
+
| Rationalization | Reality |
|
|
287
|
+
| ---------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
|
|
288
|
+
| "It's just a config change, not a code change" | Config changes cause outages at the same rate as code changes. Deploy them with the same rigor and rollback strategy. |
|
|
289
|
+
| "We tested this in staging" | Staging is not production. Traffic patterns, data volume, and edge cases differ. Staging success does not guarantee production safety. |
|
|
290
|
+
| "Downtime will be brief" | Brief is not zero. Quantify the expected impact and communicate it to stakeholders before deploying. |
|
|
301
291
|
|
|
302
292
|
## Escalation
|
|
303
293
|
|
|
@@ -246,6 +246,16 @@ DESIGN-003 [info] Three font weights in one component
|
|
|
246
246
|
Fix: Consolidate font-weight values to 400 (body) and 600 (heading) only
|
|
247
247
|
```
|
|
248
248
|
|
|
249
|
+
## Rationalizations to Reject
|
|
250
|
+
|
|
251
|
+
| Rationalization | Reality |
|
|
252
|
+
| --------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
253
|
+
| "The tokens are already defined, so the aesthetic intent is obvious — I can infer it and skip Phase 1." | Tokens define values, not intent. The style, tone, and differentiator exist in the designer's head, not in a color ramp. DESIGN.md cannot be generated without explicit confirmation. |
|
|
254
|
+
| "There are only 3 violations and they're minor — I'll skip recording them in the graph to save time." | Unrecorded violations are invisible to every downstream skill. harness-impact-analysis and harness-accessibility rely on `VIOLATES_DESIGN` edges existing. Skip graph writes and the enforcement record is permanently incomplete. |
|
|
255
|
+
| "The strictness level isn't set in config, so I'll just use strict to be safe." | Defaulting to strict without reading config imposes blocking CI failures the team never agreed to. Always read `design.strictness` and default to `standard` when absent — not to the most aggressive level. |
|
|
256
|
+
| "This anti-pattern is declared, but there are 40+ instances — it would take forever to report them all, so I'll summarize." | The REVIEW phase must report every finding with file path, line number, and severity. Summarizing hides the scope from the team and makes automated tooling miss violations. |
|
|
257
|
+
| "DESIGN.md already exists from a previous run, so I can skip Phase 2 and go straight to REVIEW." | An existing DESIGN.md may be outdated or missing sections. The DIRECTION phase must verify all required sections are present and current before the REVIEW phase can rely on them. |
|
|
258
|
+
|
|
249
259
|
## Gates
|
|
250
260
|
|
|
251
261
|
These are hard stops. Violating any gate means the process has broken down.
|
|
@@ -317,6 +317,16 @@ struct WorkoutRow: View {
|
|
|
317
317
|
}
|
|
318
318
|
```
|
|
319
319
|
|
|
320
|
+
## Rationalizations to Reject
|
|
321
|
+
|
|
322
|
+
| Rationalization | Reality |
|
|
323
|
+
| --------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
324
|
+
| "The touch target is 40pt on iOS — that's close to 44pt and the designer approved the comp, so I'll leave it." | The 44pt iOS minimum and 48dp Android minimum are non-negotiable gates, not guidelines. Touch target violations are `error` severity regardless of strictness level. Designer comp approval does not override platform accessibility requirements. |
|
|
325
|
+
| "This is a cross-platform React Native component, so I only need to read the generic token mapping — platform-specific rules for iOS and Android are optional." | React Native components require both `ios.yaml` and `android.yaml` rules. Platform-specific rules govern safe areas, elevation, navigation patterns, and touch targets that differ between platforms. Missing either set produces non-compliant native behavior. |
|
|
326
|
+
| "The component uses a hardcoded shadow for iOS — `shadowColor`, `shadowOffset`, etc. Those aren't design tokens, they're platform APIs." | Shadow colors must still reference token values. `shadowColor: tokens.color.neutral[900]` is the correct form. Hardcoded shadow values like `#000` or `rgba(0,0,0,0.2)` are token binding violations the VERIFY phase will flag. |
|
|
327
|
+
| "There's no `design-system/DESIGN.md` yet, but I know the aesthetic intent from our planning discussion — I'll proceed with tokens only." | Proceeding without `DESIGN.md` means anti-pattern enforcement is disabled for the entire VERIFY phase. The anti-pattern check is what catches design intent violations beyond token correctness. Warn the user and recommend running harness-design first. |
|
|
328
|
+
| "The scaffold plan is straightforward — a simple card component. I'll skip presenting it to the user and just generate." | The scaffold plan confirmation is when the user can catch incorrect platform assumptions (wrong StyleSheet structure, wrong platform APIs) before any code is written. Mobile components are harder to refactor than web components due to platform-specific branching. |
|
|
329
|
+
|
|
320
330
|
## Gates
|
|
321
331
|
|
|
322
332
|
- **No component generation without reading tokens from harness-design-system.** The SCAFFOLD phase requires `design-system/tokens.json`. Do not generate components with hardcoded values as a fallback.
|
|
@@ -263,6 +263,16 @@ Spacing: PASS (monotonically increasing, no gaps)
|
|
|
263
263
|
Harness validate: PASS
|
|
264
264
|
```
|
|
265
265
|
|
|
266
|
+
## Rationalizations to Reject
|
|
267
|
+
|
|
268
|
+
| Rationalization | Reality |
|
|
269
|
+
| -------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
270
|
+
| "The project already has a tailwind.config with colors — I can derive the token set from that and skip the DEFINE phase." | Existing Tailwind config represents design debt, not design intent. The DEFINE phase exists to make deliberate choices about palette and typography. Deriving tokens from scattered config perpetuates the inconsistency the skill is meant to resolve. |
|
|
271
|
+
| "One of the contrast pairs is 4.3:1 — close enough to 4.5:1 to pass. I'll mark it as passing." | 4.3:1 fails WCAG AA for normal text. There is no "close enough." Flag the failure and ask the user to choose an alternative. Silently accepting sub-threshold contrast is a compliance defect. |
|
|
272
|
+
| "The user confirmed the palette in our conversation, so I can skip the formal confirmation gate and generate immediately." | The confirmation gate exists as a structural checkpoint, not a courtesy. Generate only after presenting the full palette + typography + spacing summary and receiving explicit approval. Conversation context can drift. |
|
|
273
|
+
| "There are no existing design files, so I can skip the DISCOVER phase and go straight to defining." | The DISCOVER phase also detects the CSS framework and existing color/font usage. Skipping it means the generated tokens may not map to the actual CSS strategy and the design debt assessment is lost. |
|
|
274
|
+
| "Fonts without fallback stacks are probably fine — modern browsers handle missing fonts gracefully." | A missing fallback stack is a token validation failure regardless of browser behavior. Every `fontFamily` token must include at least one generic fallback. This is a VALIDATE phase gate, not a style preference. |
|
|
275
|
+
|
|
266
276
|
## Gates
|
|
267
277
|
|
|
268
278
|
These are hard stops. Violating any gate means the process has broken down.
|