hatch3r 1.8.0 → 2.0.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/README.md +68 -178
- package/dist/cli/index.js +26966 -15942
- package/{agents → dist/content/agents}/hatch3r-architect.md +39 -9
- package/dist/content/agents/hatch3r-brownfield-spec.md +254 -0
- package/{agents → dist/content/agents}/hatch3r-ci-watcher.md +10 -3
- package/{agents → dist/content/agents}/hatch3r-context-rules.md +24 -6
- package/{agents → dist/content/agents}/hatch3r-creator.md +78 -39
- package/dist/content/agents/hatch3r-dependency-drafter.md +162 -0
- package/{agents → dist/content/agents}/hatch3r-devops.md +14 -4
- package/{agents → dist/content/agents}/hatch3r-docs-writer.md +11 -1
- package/dist/content/agents/hatch3r-edge-case-analyst.md +134 -0
- package/dist/content/agents/hatch3r-enhancability.md +192 -0
- package/{agents → dist/content/agents}/hatch3r-fixer.md +61 -10
- package/dist/content/agents/hatch3r-greenfield-spec.md +256 -0
- package/{agents → dist/content/agents}/hatch3r-handoff-loader.md +40 -14
- package/{agents → dist/content/agents}/hatch3r-handoff-preparer.md +17 -8
- package/dist/content/agents/hatch3r-implementer.md +409 -0
- package/dist/content/agents/hatch3r-incident-responder.md +96 -0
- package/dist/content/agents/hatch3r-learnings-loader.md +377 -0
- package/{agents → dist/content/agents}/hatch3r-lint-fixer.md +16 -4
- package/dist/content/agents/hatch3r-maintainability.md +183 -0
- package/dist/content/agents/hatch3r-pack-installer.md +113 -0
- package/dist/content/agents/hatch3r-performance.md +179 -0
- package/dist/content/agents/hatch3r-reliability.md +193 -0
- package/{agents → dist/content/agents}/hatch3r-researcher.md +30 -7
- package/dist/content/agents/hatch3r-reviewer.md +364 -0
- package/dist/content/agents/hatch3r-scalability.md +162 -0
- package/dist/content/agents/hatch3r-security.md +197 -0
- package/dist/content/agents/hatch3r-testability.md +204 -0
- package/dist/content/agents/hatch3r-ui.md +175 -0
- package/dist/content/agents/hatch3r-ux.md +160 -0
- package/{agents → dist/content/agents}/modes/requirements-elicitation.md +1 -1
- package/{agents → dist/content/agents}/modes/user-flows.md +2 -2
- package/dist/content/agents/shared/clarification-default-block.md +44 -0
- package/dist/content/agents/shared/confidence-gate.md +42 -0
- package/dist/content/agents/shared/cq-specialist-roster.md +26 -0
- package/{agents → dist/content/agents}/shared/efficiency-patterns.md +32 -1
- package/{agents → dist/content/agents}/shared/external-knowledge.md +1 -1
- package/{agents → dist/content/agents}/shared/injection-patterns.md +19 -8
- package/dist/content/agents/shared/principles.md +60 -0
- package/{agents → dist/content/agents}/shared/prompt-structure.md +7 -1
- package/{agents → dist/content/agents}/shared/quality-charter.md +73 -9
- package/dist/content/agents/shared/quality-specialist-frame.md +141 -0
- package/dist/content/agents/shared/rigor-contract.md +151 -0
- package/dist/content/agents/shared/severity-mapping.md +92 -0
- package/dist/content/agents/shared/triage-vocabulary.md +46 -0
- package/{agents → dist/content/agents}/shared/user-content-templates.md +40 -14
- package/dist/content/agents/shared/user-question-protocol.md +139 -0
- package/{checks → dist/content/checks}/README.md +5 -0
- package/{checks → dist/content/checks}/accessibility.md +14 -7
- package/{checks → dist/content/checks}/code-quality.md +1 -1
- package/{checks → dist/content/checks}/performance.md +7 -4
- package/{checks → dist/content/checks}/security.md +6 -6
- package/{checks → dist/content/checks}/testing.md +1 -1
- package/{commands → dist/content/commands}/board/pickup-azure-devops.md +1 -1
- package/{commands → dist/content/commands}/board/pickup-delegation-multi.md +41 -14
- package/{commands → dist/content/commands}/board/pickup-delegation.md +10 -8
- package/{commands → dist/content/commands}/board/pickup-github.md +1 -1
- package/{commands → dist/content/commands}/board/pickup-gitlab.md +1 -1
- package/{commands → dist/content/commands}/board/pickup-modes.md +1 -0
- package/{commands → dist/content/commands}/board/pickup-post-impl.md +2 -2
- package/{commands → dist/content/commands}/board/shared-azure-devops.md +1 -1
- package/{commands → dist/content/commands}/board/shared-github.md +2 -2
- package/{commands → dist/content/commands}/board/shared-gitlab.md +1 -1
- package/{commands → dist/content/commands}/hatch3r-api-spec.md +80 -3
- package/dist/content/commands/hatch3r-auth-scaffold.md +250 -0
- package/{commands → dist/content/commands}/hatch3r-benchmark.md +91 -8
- package/{commands → dist/content/commands}/hatch3r-board-fill.md +104 -18
- package/{commands → dist/content/commands}/hatch3r-board-pickup.md +99 -15
- package/dist/content/commands/hatch3r-bug-pipeline.md +240 -0
- package/{commands → dist/content/commands}/hatch3r-bug-plan.md +84 -8
- package/{commands → dist/content/commands}/hatch3r-codebase-map.md +82 -6
- package/{commands → dist/content/commands}/hatch3r-create.md +116 -18
- package/{commands → dist/content/commands}/hatch3r-debug.md +112 -24
- package/dist/content/commands/hatch3r-diagnose.md +238 -0
- package/{commands → dist/content/commands}/hatch3r-feature-plan.md +130 -10
- package/dist/content/commands/hatch3r-handoff.md +213 -0
- package/{commands → dist/content/commands}/hatch3r-healthcheck.md +106 -6
- package/dist/content/commands/hatch3r-incident-response.md +228 -0
- package/{commands → dist/content/commands}/hatch3r-migration-plan.md +81 -5
- package/{commands → dist/content/commands}/hatch3r-onboard.md +100 -9
- package/dist/content/commands/hatch3r-pack-install.md +243 -0
- package/{commands → dist/content/commands}/hatch3r-pr-resolve.md +114 -31
- package/{commands → dist/content/commands}/hatch3r-project-spec.md +85 -9
- package/{commands → dist/content/commands}/hatch3r-quick-change.md +115 -20
- package/{commands → dist/content/commands}/hatch3r-refactor-plan.md +82 -6
- package/dist/content/commands/hatch3r-release.md +401 -0
- package/{commands → dist/content/commands}/hatch3r-revision.md +104 -18
- package/{commands → dist/content/commands}/hatch3r-roadmap.md +94 -12
- package/{commands → dist/content/commands}/hatch3r-security-audit.md +107 -7
- package/dist/content/commands/hatch3r-slo-scaffold.md +246 -0
- package/dist/content/commands/hatch3r-spec.md +216 -0
- package/{commands → dist/content/commands}/hatch3r-test-plan.md +90 -14
- package/dist/content/commands/hatch3r-workflow.md +628 -0
- package/{commands → dist/content/commands}/revision/revision-delegation.md +8 -7
- package/{commands → dist/content/commands}/revision/revision-modes.md +49 -4
- package/{commands → dist/content/commands}/revision/revision-quality.md +12 -9
- package/dist/content/commands/shared/orchestration-frame.md +119 -0
- package/{github-agents → dist/content/github-agents}/hatch3r-docs-agent.md +22 -2
- package/dist/content/github-agents/hatch3r-lint-agent.md +66 -0
- package/{github-agents → dist/content/github-agents}/hatch3r-security-agent.md +22 -2
- package/{github-agents → dist/content/github-agents}/hatch3r-test-agent.md +22 -2
- package/{hooks → dist/content/hooks}/hatch3r-ci-failure.md +3 -3
- package/{hooks → dist/content/hooks}/hatch3r-file-save.md +4 -4
- package/{hooks → dist/content/hooks}/hatch3r-post-merge.md +1 -1
- package/{hooks → dist/content/hooks}/hatch3r-pre-commit.md +1 -1
- package/{hooks → dist/content/hooks}/hatch3r-pre-push.md +7 -7
- package/dist/content/hooks/hatch3r-review-loop-cap.md +52 -0
- package/{hooks → dist/content/hooks}/hatch3r-session-start.md +3 -3
- package/{mcp → dist/content/mcp}/mcp.json +7 -5
- package/{rules → dist/content/rules}/hatch3r-accessibility-standards.md +16 -3
- package/{rules → dist/content/rules}/hatch3r-accessibility-standards.mdc +13 -1
- package/dist/content/rules/hatch3r-agent-orchestration-detail.md +250 -0
- package/dist/content/rules/hatch3r-agent-orchestration-detail.mdc +245 -0
- package/dist/content/rules/hatch3r-agent-orchestration.md +250 -0
- package/dist/content/rules/hatch3r-agent-orchestration.mdc +245 -0
- package/{rules → dist/content/rules}/hatch3r-ai-evals.md +7 -5
- package/{rules → dist/content/rules}/hatch3r-ai-evals.mdc +5 -4
- package/{rules → dist/content/rules}/hatch3r-ai-ux-patterns.md +7 -3
- package/{rules → dist/content/rules}/hatch3r-ai-ux-patterns.mdc +4 -1
- package/dist/content/rules/hatch3r-android-patterns.md +107 -0
- package/dist/content/rules/hatch3r-android-patterns.mdc +102 -0
- package/dist/content/rules/hatch3r-anti-duplication.md +115 -0
- package/dist/content/rules/hatch3r-anti-duplication.mdc +115 -0
- package/{rules → dist/content/rules}/hatch3r-api-design.md +5 -1
- package/{rules → dist/content/rules}/hatch3r-api-design.mdc +3 -0
- package/{rules → dist/content/rules}/hatch3r-api-versioning.md +3 -1
- package/{rules → dist/content/rules}/hatch3r-api-versioning.mdc +1 -0
- package/{rules → dist/content/rules}/hatch3r-auth-patterns.md +5 -2
- package/{rules → dist/content/rules}/hatch3r-auth-patterns.mdc +2 -0
- package/{rules → dist/content/rules}/hatch3r-browser-verification.md +8 -10
- package/{rules → dist/content/rules}/hatch3r-browser-verification.mdc +8 -10
- package/dist/content/rules/hatch3r-capability-matrix.md +108 -0
- package/dist/content/rules/hatch3r-capability-matrix.mdc +108 -0
- package/{rules → dist/content/rules}/hatch3r-ci-cd.md +9 -1
- package/{rules → dist/content/rules}/hatch3r-ci-cd.mdc +7 -0
- package/dist/content/rules/hatch3r-clarification-default.md +73 -0
- package/dist/content/rules/hatch3r-clarification-default.mdc +73 -0
- package/{rules → dist/content/rules}/hatch3r-code-standards.md +23 -47
- package/{rules → dist/content/rules}/hatch3r-code-standards.mdc +22 -46
- package/{rules → dist/content/rules}/hatch3r-component-conventions.md +4 -1
- package/{rules → dist/content/rules}/hatch3r-component-conventions.mdc +3 -0
- package/{rules → dist/content/rules}/hatch3r-container-hardening.md +13 -3
- package/{rules → dist/content/rules}/hatch3r-container-hardening.mdc +10 -1
- package/{rules → dist/content/rules}/hatch3r-contract-testing.md +3 -1
- package/{rules → dist/content/rules}/hatch3r-contract-testing.mdc +1 -0
- package/dist/content/rules/hatch3r-cost-visibility.md +135 -0
- package/dist/content/rules/hatch3r-cost-visibility.mdc +135 -0
- package/dist/content/rules/hatch3r-cq-rule-frame.md +54 -0
- package/dist/content/rules/hatch3r-cq-rule-frame.mdc +49 -0
- package/{rules → dist/content/rules}/hatch3r-data-classification.md +5 -2
- package/{rules → dist/content/rules}/hatch3r-data-classification.mdc +3 -1
- package/{rules → dist/content/rules}/hatch3r-deep-context.md +14 -14
- package/{rules → dist/content/rules}/hatch3r-deep-context.mdc +13 -13
- package/{rules → dist/content/rules}/hatch3r-dependency-management.md +18 -4
- package/{rules → dist/content/rules}/hatch3r-dependency-management.mdc +16 -3
- package/{rules → dist/content/rules}/hatch3r-design-system-detection.md +4 -2
- package/{rules → dist/content/rules}/hatch3r-design-system-detection.mdc +1 -0
- package/dist/content/rules/hatch3r-dotnet-patterns.md +104 -0
- package/dist/content/rules/hatch3r-dotnet-patterns.mdc +99 -0
- package/dist/content/rules/hatch3r-edge-case-discipline.md +65 -0
- package/dist/content/rules/hatch3r-edge-case-discipline.mdc +65 -0
- package/dist/content/rules/hatch3r-enhancability.md +147 -0
- package/dist/content/rules/hatch3r-enhancability.mdc +142 -0
- package/{rules → dist/content/rules}/hatch3r-event-schema-evolution.md +3 -1
- package/{rules → dist/content/rules}/hatch3r-event-schema-evolution.mdc +1 -0
- package/dist/content/rules/hatch3r-fan-out-discipline.md +91 -0
- package/dist/content/rules/hatch3r-fan-out-discipline.mdc +91 -0
- package/{rules → dist/content/rules}/hatch3r-feature-flags.md +2 -0
- package/{rules → dist/content/rules}/hatch3r-feature-flags.mdc +2 -0
- package/dist/content/rules/hatch3r-flutter-patterns.md +88 -0
- package/dist/content/rules/hatch3r-flutter-patterns.mdc +83 -0
- package/{rules → dist/content/rules}/hatch3r-git-conventions.md +5 -2
- package/{rules → dist/content/rules}/hatch3r-git-conventions.mdc +2 -0
- package/dist/content/rules/hatch3r-go-patterns.md +98 -0
- package/dist/content/rules/hatch3r-go-patterns.mdc +93 -0
- package/{rules → dist/content/rules}/hatch3r-handoff-readiness.md +14 -4
- package/{rules → dist/content/rules}/hatch3r-handoff-readiness.mdc +13 -3
- package/{rules → dist/content/rules}/hatch3r-i18n.md +3 -1
- package/{rules → dist/content/rules}/hatch3r-i18n.mdc +2 -0
- package/dist/content/rules/hatch3r-iteration-summary.md +108 -0
- package/dist/content/rules/hatch3r-iteration-summary.mdc +108 -0
- package/dist/content/rules/hatch3r-learning-system.md +202 -0
- package/dist/content/rules/hatch3r-learning-system.mdc +202 -0
- package/dist/content/rules/hatch3r-maintainability.md +157 -0
- package/dist/content/rules/hatch3r-maintainability.mdc +152 -0
- package/{rules → dist/content/rules}/hatch3r-migrations.md +4 -2
- package/{rules → dist/content/rules}/hatch3r-migrations.mdc +1 -0
- package/{rules → dist/content/rules}/hatch3r-observability-logging.md +2 -1
- package/{rules → dist/content/rules}/hatch3r-observability-logging.mdc +1 -0
- package/{rules → dist/content/rules}/hatch3r-observability-metrics.md +2 -1
- package/{rules → dist/content/rules}/hatch3r-observability-metrics.mdc +1 -0
- package/{rules → dist/content/rules}/hatch3r-observability-tracing.md +46 -36
- package/{rules → dist/content/rules}/hatch3r-observability-tracing.mdc +45 -35
- package/{rules → dist/content/rules}/hatch3r-operability.md +3 -1
- package/{rules → dist/content/rules}/hatch3r-operability.mdc +1 -0
- package/{rules → dist/content/rules}/hatch3r-passkey-server.md +4 -2
- package/{rules → dist/content/rules}/hatch3r-passkey-server.mdc +1 -0
- package/{rules → dist/content/rules}/hatch3r-performance-budgets.md +3 -1
- package/{rules → dist/content/rules}/hatch3r-performance-budgets.mdc +3 -1
- package/dist/content/rules/hatch3r-php-laravel-patterns.md +109 -0
- package/dist/content/rules/hatch3r-php-laravel-patterns.mdc +104 -0
- package/{rules → dist/content/rules}/hatch3r-progressive-delivery.md +5 -1
- package/{rules → dist/content/rules}/hatch3r-progressive-delivery.mdc +3 -0
- package/dist/content/rules/hatch3r-proof-model.md +131 -0
- package/dist/content/rules/hatch3r-proof-model.mdc +131 -0
- package/dist/content/rules/hatch3r-python-patterns.md +70 -0
- package/dist/content/rules/hatch3r-python-patterns.mdc +65 -0
- package/dist/content/rules/hatch3r-react-native-patterns.md +83 -0
- package/dist/content/rules/hatch3r-react-native-patterns.mdc +78 -0
- package/{rules → dist/content/rules}/hatch3r-resilience-patterns.md +3 -1
- package/{rules → dist/content/rules}/hatch3r-resilience-patterns.mdc +1 -0
- package/dist/content/rules/hatch3r-reviewer-calibration.md +84 -0
- package/dist/content/rules/hatch3r-reviewer-calibration.mdc +84 -0
- package/dist/content/rules/hatch3r-right-sizing.md +68 -0
- package/dist/content/rules/hatch3r-right-sizing.mdc +66 -0
- package/dist/content/rules/hatch3r-ruby-rails-patterns.md +111 -0
- package/dist/content/rules/hatch3r-ruby-rails-patterns.mdc +106 -0
- package/dist/content/rules/hatch3r-rust-patterns.md +107 -0
- package/dist/content/rules/hatch3r-rust-patterns.mdc +102 -0
- package/dist/content/rules/hatch3r-scalability.md +137 -0
- package/dist/content/rules/hatch3r-scalability.mdc +132 -0
- package/{rules → dist/content/rules}/hatch3r-secrets-management.md +12 -2
- package/{rules → dist/content/rules}/hatch3r-secrets-management.mdc +9 -0
- package/{rules → dist/content/rules}/hatch3r-security-patterns.md +38 -35
- package/{rules → dist/content/rules}/hatch3r-security-patterns.mdc +36 -34
- package/dist/content/rules/hatch3r-security.md +97 -0
- package/dist/content/rules/hatch3r-security.mdc +92 -0
- package/dist/content/rules/hatch3r-swiftui-patterns.md +98 -0
- package/dist/content/rules/hatch3r-swiftui-patterns.mdc +93 -0
- package/dist/content/rules/hatch3r-testability.md +115 -0
- package/dist/content/rules/hatch3r-testability.mdc +110 -0
- package/{rules → dist/content/rules}/hatch3r-testing.md +6 -2
- package/{rules → dist/content/rules}/hatch3r-testing.mdc +3 -0
- package/{rules → dist/content/rules}/hatch3r-theming.md +3 -1
- package/{rules → dist/content/rules}/hatch3r-theming.mdc +2 -0
- package/dist/content/rules/hatch3r-tool-currency.md +91 -0
- package/dist/content/rules/hatch3r-tool-currency.mdc +86 -0
- package/{rules → dist/content/rules}/hatch3r-tooling-hierarchy.md +30 -32
- package/{rules → dist/content/rules}/hatch3r-tooling-hierarchy.mdc +28 -31
- package/dist/content/rules/hatch3r-typescript-patterns.md +58 -0
- package/dist/content/rules/hatch3r-typescript-patterns.mdc +53 -0
- package/{rules → dist/content/rules}/hatch3r-ux-states-and-flows.md +13 -5
- package/{rules → dist/content/rules}/hatch3r-ux-states-and-flows.mdc +10 -3
- package/{skills → dist/content/skills}/hatch3r-a11y-audit/SKILL.md +11 -9
- package/{skills → dist/content/skills}/hatch3r-a11y-audit/references/manual-audit-checklist.md +7 -5
- package/dist/content/skills/hatch3r-adhoc-orchestrate/SKILL.md +131 -0
- package/{skills → dist/content/skills}/hatch3r-ai-feature/SKILL.md +4 -6
- package/{skills → dist/content/skills}/hatch3r-api-spec/SKILL.md +27 -2
- package/{skills → dist/content/skills}/hatch3r-architecture-review/SKILL.md +5 -8
- package/{commands/hatch3r-board-groom.md → dist/content/skills/hatch3r-board-groom/SKILL.md} +16 -18
- package/{commands/hatch3r-board-init.md → dist/content/skills/hatch3r-board-init/SKILL.md} +34 -31
- package/{commands/hatch3r-board-refresh.md → dist/content/skills/hatch3r-board-refresh/SKILL.md} +17 -19
- package/{commands/hatch3r-board-shared.md → dist/content/skills/hatch3r-board-shared/SKILL.md} +45 -15
- package/dist/content/skills/hatch3r-browser-verify/SKILL.md +307 -0
- package/{skills → dist/content/skills}/hatch3r-bug-fix/SKILL.md +16 -3
- package/{skills → dist/content/skills}/hatch3r-ci-pipeline/SKILL.md +17 -7
- package/{skills → dist/content/skills}/hatch3r-cli-fd/SKILL.md +34 -2
- package/{skills → dist/content/skills}/hatch3r-cli-fzf/SKILL.md +34 -2
- package/dist/content/skills/hatch3r-cli-gh/SKILL.md +139 -0
- package/{skills → dist/content/skills}/hatch3r-cli-jq/SKILL.md +43 -9
- package/{skills → dist/content/skills}/hatch3r-cli-ripgrep/SKILL.md +36 -4
- package/dist/content/skills/hatch3r-cli-toolbox/SKILL.md +376 -0
- package/dist/content/skills/hatch3r-containerize/SKILL.md +157 -0
- package/{skills → dist/content/skills}/hatch3r-context-health/SKILL.md +27 -9
- package/dist/content/skills/hatch3r-cost-tracking/SKILL.md +164 -0
- package/{skills → dist/content/skills}/hatch3r-customize/SKILL.md +9 -13
- package/{skills → dist/content/skills}/hatch3r-dep-audit/SKILL.md +29 -9
- package/{skills → dist/content/skills}/hatch3r-design-system-detect/SKILL.md +4 -8
- package/dist/content/skills/hatch3r-docs-writing/SKILL.md +159 -0
- package/dist/content/skills/hatch3r-enhancability-verify/SKILL.md +152 -0
- package/{skills → dist/content/skills}/hatch3r-feature/SKILL.md +54 -4
- package/dist/content/skills/hatch3r-feedback/SKILL.md +103 -0
- package/{skills → dist/content/skills}/hatch3r-gh-agentic-workflows/SKILL.md +14 -12
- package/{skills → dist/content/skills}/hatch3r-gh-agentic-workflows/references/azure-devops.md +2 -2
- package/{skills → dist/content/skills}/hatch3r-gh-agentic-workflows/references/gitlab-ci.md +1 -1
- package/{skills → dist/content/skills}/hatch3r-handoff-prepare/SKILL.md +12 -15
- package/{skills → dist/content/skills}/hatch3r-handoff-resume/SKILL.md +5 -8
- package/{commands/hatch3r-hooks.md → dist/content/skills/hatch3r-hooks/SKILL.md} +59 -148
- package/dist/content/skills/hatch3r-incident-response/SKILL.md +174 -0
- package/{skills → dist/content/skills}/hatch3r-issue-workflow/SKILL.md +15 -4
- package/dist/content/skills/hatch3r-learn/SKILL.md +317 -0
- package/{skills → dist/content/skills}/hatch3r-logical-refactor/SKILL.md +6 -7
- package/dist/content/skills/hatch3r-maintainability-verify/SKILL.md +146 -0
- package/{skills → dist/content/skills}/hatch3r-migration/SKILL.md +9 -8
- package/{skills → dist/content/skills}/hatch3r-observability-verify/SKILL.md +17 -13
- package/{skills → dist/content/skills}/hatch3r-perf-audit/SKILL.md +14 -10
- package/{skills → dist/content/skills}/hatch3r-pr-creation/SKILL.md +8 -11
- package/{skills → dist/content/skills}/hatch3r-qa-validation/SKILL.md +8 -7
- package/dist/content/skills/hatch3r-recipe/SKILL.md +174 -0
- package/{skills → dist/content/skills}/hatch3r-refactor/SKILL.md +7 -8
- package/dist/content/skills/hatch3r-release/SKILL.md +265 -0
- package/{skills → dist/content/skills}/hatch3r-reliability-verify/SKILL.md +9 -5
- package/{commands/hatch3r-report.md → dist/content/skills/hatch3r-report/SKILL.md} +21 -18
- package/dist/content/skills/hatch3r-scalability-verify/SKILL.md +145 -0
- package/dist/content/skills/hatch3r-security-verify/SKILL.md +144 -0
- package/dist/content/skills/hatch3r-team-convention-author/SKILL.md +126 -0
- package/dist/content/skills/hatch3r-testability-verify/SKILL.md +147 -0
- package/{skills → dist/content/skills}/hatch3r-ui-ux-verify/SKILL.md +20 -12
- package/{skills → dist/content/skills}/hatch3r-visual-refactor/SKILL.md +12 -8
- package/package.json +53 -46
- package/agents/hatch3r-a11y-auditor.md +0 -159
- package/agents/hatch3r-dependency-auditor.md +0 -219
- package/agents/hatch3r-implementer.md +0 -278
- package/agents/hatch3r-learnings-loader.md +0 -343
- package/agents/hatch3r-perf-profiler.md +0 -166
- package/agents/hatch3r-reviewer.md +0 -314
- package/agents/hatch3r-security-auditor.md +0 -180
- package/agents/hatch3r-test-writer.md +0 -171
- package/agents/shared/user-question-protocol.md +0 -95
- package/commands/hatch3r-agent-customize.md +0 -201
- package/commands/hatch3r-command-customize.md +0 -113
- package/commands/hatch3r-context-health.md +0 -147
- package/commands/hatch3r-cost-tracking.md +0 -163
- package/commands/hatch3r-dep-audit.md +0 -188
- package/commands/hatch3r-handoff.md +0 -133
- package/commands/hatch3r-learn.md +0 -312
- package/commands/hatch3r-recipe.md +0 -194
- package/commands/hatch3r-release.md +0 -350
- package/commands/hatch3r-rule-customize.md +0 -133
- package/commands/hatch3r-skill-customize.md +0 -112
- package/commands/hatch3r-workflow.md +0 -504
- package/dist/cli/index.d.ts +0 -2
- package/dist/cli/index.js.map +0 -1
- package/github-agents/hatch3r-lint-agent.md +0 -46
- package/prompts/hatch3r-bug-triage.md +0 -158
- package/prompts/hatch3r-code-review.md +0 -134
- package/prompts/hatch3r-pr-description.md +0 -176
- package/rules/hatch3r-agent-orchestration-detail.md +0 -211
- package/rules/hatch3r-agent-orchestration-detail.mdc +0 -206
- package/rules/hatch3r-agent-orchestration.md +0 -376
- package/rules/hatch3r-agent-orchestration.mdc +0 -371
- package/rules/hatch3r-iteration-summary.md +0 -90
- package/rules/hatch3r-iteration-summary.mdc +0 -85
- package/rules/hatch3r-learning-consult.md +0 -42
- package/rules/hatch3r-learning-consult.mdc +0 -38
- package/rules/hatch3r-observability-tracing-detail.md +0 -20
- package/rules/hatch3r-observability-tracing-detail.mdc +0 -14
- package/rules/hatch3r-observability.md +0 -20
- package/rules/hatch3r-observability.mdc +0 -14
- package/skills/hatch3r-agent-customize/SKILL.md +0 -23
- package/skills/hatch3r-cli-aichat/SKILL.md +0 -84
- package/skills/hatch3r-cli-ast-grep/SKILL.md +0 -85
- package/skills/hatch3r-cli-az-devops/SKILL.md +0 -89
- package/skills/hatch3r-cli-bat/SKILL.md +0 -85
- package/skills/hatch3r-cli-comby/SKILL.md +0 -85
- package/skills/hatch3r-cli-csvkit/SKILL.md +0 -84
- package/skills/hatch3r-cli-delta/SKILL.md +0 -86
- package/skills/hatch3r-cli-difftastic/SKILL.md +0 -84
- package/skills/hatch3r-cli-docker/SKILL.md +0 -89
- package/skills/hatch3r-cli-duckdb/SKILL.md +0 -84
- package/skills/hatch3r-cli-gh/SKILL.md +0 -90
- package/skills/hatch3r-cli-glab/SKILL.md +0 -89
- package/skills/hatch3r-cli-lazygit/SKILL.md +0 -78
- package/skills/hatch3r-cli-llm/SKILL.md +0 -84
- package/skills/hatch3r-cli-miller/SKILL.md +0 -84
- package/skills/hatch3r-cli-mods/SKILL.md +0 -84
- package/skills/hatch3r-cli-overview/SKILL.md +0 -60
- package/skills/hatch3r-cli-playwright/SKILL.md +0 -89
- package/skills/hatch3r-cli-podman/SKILL.md +0 -84
- package/skills/hatch3r-cli-qsv/SKILL.md +0 -91
- package/skills/hatch3r-cli-rtk/SKILL.md +0 -91
- package/skills/hatch3r-cli-sd/SKILL.md +0 -85
- package/skills/hatch3r-cli-stagehand/SKILL.md +0 -111
- package/skills/hatch3r-cli-taplo/SKILL.md +0 -84
- package/skills/hatch3r-cli-yq/SKILL.md +0 -85
- package/skills/hatch3r-cli-zstd/SKILL.md +0 -85
- package/skills/hatch3r-command-customize/SKILL.md +0 -23
- package/skills/hatch3r-cost-tracking/SKILL.md +0 -92
- package/skills/hatch3r-incident-response/SKILL.md +0 -115
- package/skills/hatch3r-recipe/SKILL.md +0 -91
- package/skills/hatch3r-release/SKILL.md +0 -120
- package/skills/hatch3r-rule-customize/SKILL.md +0 -23
- package/skills/hatch3r-skill-customize/SKILL.md +0 -23
- /package/{agents → dist/content/agents}/modes/architecture.md +0 -0
- /package/{agents → dist/content/agents}/modes/boundary-analysis.md +0 -0
- /package/{agents → dist/content/agents}/modes/codebase-impact.md +0 -0
- /package/{agents → dist/content/agents}/modes/complexity-risk.md +0 -0
- /package/{agents → dist/content/agents}/modes/coverage-analysis.md +0 -0
- /package/{agents → dist/content/agents}/modes/current-state.md +0 -0
- /package/{agents → dist/content/agents}/modes/feature-design.md +0 -0
- /package/{agents → dist/content/agents}/modes/impact-analysis.md +0 -0
- /package/{agents → dist/content/agents}/modes/library-docs.md +0 -0
- /package/{agents → dist/content/agents}/modes/migration-path.md +0 -0
- /package/{agents → dist/content/agents}/modes/prior-art.md +0 -0
- /package/{agents → dist/content/agents}/modes/refactoring-strategy.md +0 -0
- /package/{agents → dist/content/agents}/modes/regression.md +0 -0
- /package/{agents → dist/content/agents}/modes/risk-assessment.md +0 -0
- /package/{agents → dist/content/agents}/modes/risk-prioritization.md +0 -0
- /package/{agents → dist/content/agents}/modes/root-cause.md +0 -0
- /package/{agents → dist/content/agents}/modes/similar-implementation.md +0 -0
- /package/{agents → dist/content/agents}/modes/symptom-trace.md +0 -0
- /package/{agents → dist/content/agents}/modes/test-pattern.md +0 -0
- /package/{commands → dist/content/commands}/board/shared-board-overview.md +0 -0
- /package/{commands → dist/content/commands}/revision/revision-board-integration.md +0 -0
- /package/{skills → dist/content/skills}/hatch3r-issue-workflow/references/delegation-patterns.md +0 -0
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
description: Distributed tracing, OpenTelemetry conventions, and AI agent instrumentation for the project
|
|
3
3
|
globs: ["**/*trac*", "**/*span*", "**/*telemetry*", "**/*otel*", "**/*agent*", "**/observability/**", "**/routes/**", "**/handlers/**", "**/services/**", "**/api/**", "**/middleware/**", "**/controllers/**", "**/lib/**"]
|
|
4
4
|
alwaysApply: false
|
|
5
|
+
precedence: high
|
|
5
6
|
---
|
|
6
7
|
# Observability -- Distributed Tracing & OpenTelemetry
|
|
7
8
|
|
|
@@ -29,7 +30,7 @@ Distributed tracing, OpenTelemetry semantic conventions, AI agent instrumentatio
|
|
|
29
30
|
|
|
30
31
|
## OpenTelemetry Semantic Conventions
|
|
31
32
|
|
|
32
|
-
Follow the [OpenTelemetry Semantic Conventions](https://opentelemetry.io/docs/specs/semconv/) (v1.
|
|
33
|
+
Follow the [OpenTelemetry Semantic Conventions](https://opentelemetry.io/docs/specs/semconv/) (v1.41.1) for consistent attribute naming across all telemetry signals.
|
|
33
34
|
|
|
34
35
|
### Standard Attribute Namespaces
|
|
35
36
|
|
|
@@ -79,43 +80,46 @@ Every telemetry-producing service must declare resource attributes at startup:
|
|
|
79
80
|
|
|
80
81
|
## AI Agent Instrumentation
|
|
81
82
|
|
|
82
|
-
Follow the [OpenTelemetry GenAI Semantic Conventions](https://opentelemetry.io/docs/specs/semconv/gen-ai/) for AI/LLM agent instrumentation.
|
|
83
|
+
Follow the [OpenTelemetry GenAI Semantic Conventions](https://opentelemetry.io/docs/specs/semconv/gen-ai/) for AI/LLM agent instrumentation. The GenAI conventions are Development status — gate any opt-in alias emission on `OTEL_SEMCONV_STABILITY_OPT_IN` and re-check the spec each P3 currency cycle.
|
|
83
84
|
|
|
84
85
|
### GenAI Span Attributes
|
|
85
86
|
|
|
86
87
|
Use these attributes on all spans representing interactions with generative AI models:
|
|
87
88
|
|
|
88
|
-
| Attribute | Type | Description | Example |
|
|
89
|
-
|
|
90
|
-
| `gen_ai.
|
|
91
|
-
| `gen_ai.
|
|
92
|
-
| `gen_ai.
|
|
93
|
-
| `gen_ai.
|
|
94
|
-
| `gen_ai.request.
|
|
95
|
-
| `gen_ai.
|
|
96
|
-
| `gen_ai.
|
|
97
|
-
| `gen_ai.usage.
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
-
|
|
89
|
+
| Attribute | Type | Requirement | Description | Example |
|
|
90
|
+
|-----------|------|-------------|-------------|---------|
|
|
91
|
+
| `gen_ai.operation.name` | string | Required | Operation kind: `chat`, `generate_content`, `embeddings`, `create_agent`, `invoke_agent`, `execute_tool` | `chat`, `invoke_agent` |
|
|
92
|
+
| `gen_ai.provider.name` | string | Required | GenAI provider name | `openai`, `anthropic`, `azure.ai.openai` |
|
|
93
|
+
| `gen_ai.request.model` | string | Required | Model name as specified in the request | `gpt-4o`, `claude-sonnet-4-20250514` |
|
|
94
|
+
| `gen_ai.response.model` | string | Recommended | Model name as returned in the response | `gpt-4o-2024-08-06` |
|
|
95
|
+
| `gen_ai.request.max_tokens` | int | Recommended | Maximum tokens requested for generation | `4096` |
|
|
96
|
+
| `gen_ai.request.temperature` | float | Recommended | Temperature parameter | `0.7` |
|
|
97
|
+
| `gen_ai.response.finish_reasons` | string[] | Recommended | Reasons the model stopped generating | `["stop"]`, `["length"]` |
|
|
98
|
+
| `gen_ai.usage.input_tokens` | int | Recommended | Tokens in the input/prompt | `1250` |
|
|
99
|
+
| `gen_ai.usage.output_tokens` | int | Recommended | Tokens in the generated output | `530` |
|
|
100
|
+
|
|
101
|
+
- Always set `gen_ai.operation.name`, `gen_ai.provider.name`, and `gen_ai.request.model` on every GenAI span.
|
|
102
|
+
- Record `gen_ai.usage.input_tokens` and `gen_ai.usage.output_tokens` from the API response for cost dashboards. `gen_ai.operation.name` + `gen_ai.provider.name` are the required label pair on GenAI metrics (`gen_ai.client.token.usage`, `gen_ai.client.operation.duration`).
|
|
101
103
|
- Use `gen_ai.response.finish_reasons` to detect truncated outputs (`length`) and trigger re-prompting.
|
|
104
|
+
- **Migration (SemConv v1.37.0, 2025-07-05):** `gen_ai.system` is renamed to `gen_ai.provider.name`; emit the new key. Instrumentations bridging older collectors may dual-emit the legacy `gen_ai.system` alias only under `OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_latest_experimental`.
|
|
102
105
|
|
|
103
106
|
### Agent Invocation Spans
|
|
104
107
|
|
|
105
108
|
Instrument the full lifecycle of an agent invocation with a dedicated span. This span is the parent for all LLM calls, tool executions, and sub-agent delegations.
|
|
106
109
|
|
|
107
|
-
- **Span name pattern:** `agent.
|
|
108
|
-
- **Required attributes:** `
|
|
110
|
+
- **Span name pattern:** `invoke_agent {gen_ai.agent.name}` (OTel GenAI agent span naming).
|
|
111
|
+
- **Required attributes:** `gen_ai.operation.name` = `invoke_agent`, `gen_ai.agent.id`, `gen_ai.agent.name`. Use `create_agent` for the agent-construction span.
|
|
112
|
+
- **Project-namespaced extras:** `app.agent.parent_id`, `app.agent.task` carry hatch3r-specific context the GenAI namespace does not define (prefix custom attributes per the Attribute Naming Guidelines above).
|
|
109
113
|
- **Span events for state transitions:** `agent.planning`, `agent.tool_selection`, `agent.awaiting_human`, `agent.delegating`, `agent.completed`, `agent.error`
|
|
110
114
|
|
|
111
115
|
```typescript
|
|
112
|
-
const agentSpan = tracer.startSpan('
|
|
116
|
+
const agentSpan = tracer.startSpan('invoke_agent code_reviewer', {
|
|
113
117
|
attributes: {
|
|
114
|
-
'
|
|
115
|
-
'agent.
|
|
116
|
-
'agent.
|
|
117
|
-
'agent.
|
|
118
|
-
'agent.
|
|
118
|
+
'gen_ai.operation.name': 'invoke_agent',
|
|
119
|
+
'gen_ai.agent.id': invocationId,
|
|
120
|
+
'gen_ai.agent.name': 'code_reviewer',
|
|
121
|
+
'app.agent.parent_id': parentAgentId ?? '',
|
|
122
|
+
'app.agent.task': `review PR #${prNumber}`,
|
|
119
123
|
},
|
|
120
124
|
});
|
|
121
125
|
agentSpan.addEvent('agent.planning');
|
|
@@ -128,26 +132,32 @@ agentSpan.end();
|
|
|
128
132
|
|
|
129
133
|
Every tool invocation by an agent creates a child span of the agent invocation span.
|
|
130
134
|
|
|
131
|
-
- **Span name pattern:** `tool.
|
|
132
|
-
- **Required attributes:** `
|
|
133
|
-
-
|
|
135
|
+
- **Span name pattern:** `execute_tool {gen_ai.tool.name}` (OTel GenAI tool span naming).
|
|
136
|
+
- **Required attributes:** `gen_ai.operation.name` = `execute_tool`, `gen_ai.tool.name`.
|
|
137
|
+
- **Project-namespaced extras:** `app.tool.input_hash` (SHA-256), `app.tool.output_status`, `app.tool.duration_ms`, `app.tool.parameters_count` — hatch3r audit-trail fields the GenAI namespace does not define.
|
|
138
|
+
- Tool spans must be children of the invoking agent span. Set span status to `ERROR` when `app.tool.output_status` is `error` or `timeout`.
|
|
134
139
|
- For tools performing I/O, create nested child spans using appropriate semantic conventions (`http.*`, `db.*`).
|
|
135
140
|
|
|
136
141
|
```typescript
|
|
137
142
|
const toolSpan = tracer.startSpan(
|
|
138
|
-
'
|
|
139
|
-
{
|
|
143
|
+
'execute_tool git_diff',
|
|
144
|
+
{
|
|
145
|
+
attributes: {
|
|
146
|
+
'gen_ai.operation.name': 'execute_tool',
|
|
147
|
+
'gen_ai.tool.name': 'git_diff',
|
|
148
|
+
},
|
|
149
|
+
},
|
|
140
150
|
trace.setSpan(context.active(), agentSpan),
|
|
141
151
|
);
|
|
142
152
|
try {
|
|
143
153
|
const result = await tools.gitDiff(params);
|
|
144
154
|
toolSpan.setAttributes({
|
|
145
|
-
'tool.output_status': 'success',
|
|
146
|
-
'tool.duration_ms': performance.now() - startTime,
|
|
147
|
-
'tool.input_hash': hashInput(params),
|
|
155
|
+
'app.tool.output_status': 'success',
|
|
156
|
+
'app.tool.duration_ms': performance.now() - startTime,
|
|
157
|
+
'app.tool.input_hash': hashInput(params),
|
|
148
158
|
});
|
|
149
159
|
} catch (err) {
|
|
150
|
-
toolSpan.setAttributes({ 'tool.output_status': 'error' });
|
|
160
|
+
toolSpan.setAttributes({ 'app.tool.output_status': 'error' });
|
|
151
161
|
toolSpan.setStatus({ code: SpanStatusCode.ERROR, message: err.message });
|
|
152
162
|
toolSpan.recordException(err);
|
|
153
163
|
throw err;
|
|
@@ -158,8 +168,8 @@ try {
|
|
|
158
168
|
|
|
159
169
|
### LLM Request/Response Tracing
|
|
160
170
|
|
|
161
|
-
- **Span name pattern:** `gen_ai.
|
|
162
|
-
- **Token tracking:** Capture `gen_ai.usage.input_tokens` and `gen_ai.usage.output_tokens`. Aggregate in metrics:
|
|
171
|
+
- **Span name pattern:** `{gen_ai.operation.name} {gen_ai.request.model}` (e.g., `chat gpt-4o`, `generate_content claude-sonnet-4-20250514`)
|
|
172
|
+
- **Token tracking:** Capture `gen_ai.usage.input_tokens` and `gen_ai.usage.output_tokens`. Aggregate in the registered GenAI metrics: Histogram `gen_ai.client.token.usage` (attribute `gen_ai.token.type` = `input`/`output`), Histogram `gen_ai.client.operation.duration`.
|
|
163
173
|
- **Model version tracking:** Record both `gen_ai.request.model` and `gen_ai.response.model` for drift detection.
|
|
164
174
|
- **Retry spans:** Each retry attempt is a separate child span. Set `gen_ai.request.retries` on the final span. Record `http.response.status_code` on failed spans (429 vs 500+).
|
|
165
175
|
- Never log raw prompt content or full model responses as span attributes. Use token counts for cost tracking and correlated logs for prompt debugging in non-production environments.
|
|
@@ -167,7 +177,7 @@ try {
|
|
|
167
177
|
|
|
168
178
|
### Tool Call Audit Trail
|
|
169
179
|
|
|
170
|
-
Maintain a structured audit log for every tool invocation in agentic workflows, separate from tracing spans.
|
|
180
|
+
Maintain a structured audit log for every tool invocation in agentic workflows, separate from tracing spans. These are hatch3r log-schema field names (not OTel span attributes); on the tool span itself, emit the OTel GenAI keys (`gen_ai.tool.name`, `gen_ai.operation.name`) plus the `app.tool.*` extras from "Tool Call Spans" above.
|
|
171
181
|
|
|
172
182
|
| Field | Type | Description |
|
|
173
183
|
|-------|------|-------------|
|
|
@@ -2,8 +2,10 @@
|
|
|
2
2
|
id: hatch3r-operability
|
|
3
3
|
type: rule
|
|
4
4
|
description: Operability patterns in user code — liveness / readiness / startup probes, graceful shutdown, feature flags, runbook URL annotations, health endpoints
|
|
5
|
-
scope:
|
|
5
|
+
scope: conditional
|
|
6
|
+
globs: "**/services/**,**/handlers/**,**/health*,**/probes/**,**/k8s/**,**/manifests/**,**/charts/**,**/feature*,**/flags/**"
|
|
6
7
|
tags: [implementation, devops]
|
|
8
|
+
precedence: high
|
|
7
9
|
quality_charter: agents/shared/quality-charter.md
|
|
8
10
|
cache_friendly: true
|
|
9
11
|
---
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
description: Operability patterns in user code — liveness / readiness / startup probes, graceful shutdown, feature flags, runbook URL annotations, health endpoints
|
|
3
3
|
globs: ["**/services/**", "**/handlers/**", "**/health*", "**/probes/**", "**/k8s/**", "**/manifests/**", "**/charts/**", "**/feature*", "**/flags/**"]
|
|
4
4
|
alwaysApply: false
|
|
5
|
+
precedence: high
|
|
5
6
|
---
|
|
6
7
|
# Operability
|
|
7
8
|
|
|
@@ -2,8 +2,10 @@
|
|
|
2
2
|
id: hatch3r-passkey-server
|
|
3
3
|
type: rule
|
|
4
4
|
description: Server-side WebAuthn / passkey ceremony — registration, authentication, attestation, counter, RP-ID, recovery, FIDO CXP/CXF awareness
|
|
5
|
-
scope:
|
|
6
|
-
|
|
5
|
+
scope: conditional
|
|
6
|
+
globs: "**/auth/**,**/passkey*,**/webauthn*,**/fido*,**/credentials/**,**/api/**,**/handlers/**"
|
|
7
|
+
tags: [implementation, floor:security]
|
|
8
|
+
precedence: high
|
|
7
9
|
quality_charter: agents/shared/quality-charter.md
|
|
8
10
|
cache_friendly: true
|
|
9
11
|
---
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
description: Server-side WebAuthn / passkey ceremony — registration, authentication, attestation, counter, RP-ID, recovery, FIDO CXP/CXF awareness
|
|
3
3
|
globs: ["**/auth/**", "**/passkey*", "**/webauthn*", "**/fido*", "**/credentials/**", "**/api/**", "**/handlers/**"]
|
|
4
4
|
alwaysApply: false
|
|
5
|
+
precedence: high
|
|
5
6
|
---
|
|
6
7
|
# Passkey Server — WebAuthn Ceremony
|
|
7
8
|
|
|
@@ -10,6 +10,8 @@ cache_friendly: true
|
|
|
10
10
|
---
|
|
11
11
|
# Performance Budgets
|
|
12
12
|
|
|
13
|
+
**Pillars:** P2 (Scientific & Practical Quality), CQ7 (Performance Quality)
|
|
14
|
+
|
|
13
15
|
## Application Budgets
|
|
14
16
|
|
|
15
17
|
| Metric | Budget |
|
|
@@ -111,5 +113,5 @@ Targets align with Google's "Good" thresholds (measured at p75 from real user da
|
|
|
111
113
|
| Memory / CPU | Chrome DevTools, profiler | Infrastructure metrics (Prometheus) |
|
|
112
114
|
| Visual regression | Playwright screenshot diffing | RUM CLS tracking |
|
|
113
115
|
|
|
114
|
-
- Automated regression detection: compare each PR's metrics against the default branch baseline (`board.defaultBranch` from `.
|
|
116
|
+
- Automated regression detection: compare each PR's metrics against the default branch baseline (`board.defaultBranch` from `.hatch3r/hatch.json`; fallback: `"main"`). Flag regressions > 5% in any budget metric.
|
|
115
117
|
- Review performance budgets quarterly and tighten thresholds as the application matures.
|
|
@@ -5,6 +5,8 @@ alwaysApply: false
|
|
|
5
5
|
---
|
|
6
6
|
# Performance Budgets
|
|
7
7
|
|
|
8
|
+
**Pillars:** P2 (Scientific & Practical Quality), CQ7 (Performance Quality)
|
|
9
|
+
|
|
8
10
|
## Application Budgets
|
|
9
11
|
|
|
10
12
|
| Metric | Budget |
|
|
@@ -106,5 +108,5 @@ Targets align with Google's "Good" thresholds (measured at p75 from real user da
|
|
|
106
108
|
| Memory / CPU | Chrome DevTools, profiler | Infrastructure metrics (Prometheus) |
|
|
107
109
|
| Visual regression | Playwright screenshot diffing | RUM CLS tracking |
|
|
108
110
|
|
|
109
|
-
- Automated regression detection: compare each PR's metrics against the default branch baseline (`board.defaultBranch` from `.
|
|
111
|
+
- Automated regression detection: compare each PR's metrics against the default branch baseline (`board.defaultBranch` from `.hatch3r/hatch.json`; fallback: `"main"`). Flag regressions > 5% in any budget metric.
|
|
110
112
|
- Review performance budgets quarterly and tighten thresholds as the application matures.
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: hatch3r-php-laravel-patterns
|
|
3
|
+
type: rule
|
|
4
|
+
description: PHP 8.3+ and Laravel 11.x conventions covering typed properties, attributes, Eloquent ORM, Service Container DI, Pest testing, queue workers, and Laravel Pint formatting
|
|
5
|
+
scope: conditional
|
|
6
|
+
globs: "**/*.php,**/composer.json,**/composer.lock,**/artisan,**/phpunit.xml,**/phpunit.xml.dist,**/phpstan.neon,**/phpstan.neon.dist,**/pint.json,**/.php-cs-fixer.php,**/app/**,**/bootstrap/**,**/config/**,**/database/migrations/**,**/routes/**,**/tests/**"
|
|
7
|
+
tags: [implementation]
|
|
8
|
+
quality_charter: agents/shared/quality-charter.md
|
|
9
|
+
cache_friendly: true
|
|
10
|
+
---
|
|
11
|
+
# PHP / Laravel Patterns
|
|
12
|
+
|
|
13
|
+
**Pillars:** P2 (Scientific & Practical Quality), CQ8 (Maintainability Quality)
|
|
14
|
+
|
|
15
|
+
> Applies when the project ships a PHP application. Detection signals: `composer.json` at repo root, `artisan` script (Laravel), or any `*.php` source file. Symfony and Symfony-based projects also follow most of the language-level guidance here.
|
|
16
|
+
|
|
17
|
+
## PHP Language Floor
|
|
18
|
+
|
|
19
|
+
- Target PHP 8.3+ (8.4 recommended for new projects). Use typed properties, constructor property promotion, enums, readonly classes, first-class callable syntax. Avoid PHP 7.x patterns in new code.
|
|
20
|
+
- Enable strict types in every file (`declare(strict_types=1);` as the first statement after `<?php`). The IDE / Pint config enforces presence.
|
|
21
|
+
- Static analysis: PHPStan level 8 or Psalm level 1 in CI. Treat warnings as errors. Configure via `phpstan.neon` with project-specific baselines for legacy code.
|
|
22
|
+
- Format with Laravel Pint (Laravel projects) or PHP-CS-Fixer with PER 2.0 / PSR-12 ruleset. Run in CI; reformat-on-save in editors.
|
|
23
|
+
|
|
24
|
+
## Project Layout (Laravel)
|
|
25
|
+
|
|
26
|
+
- Default Laravel structure:
|
|
27
|
+
- `app/Models/` — Eloquent models.
|
|
28
|
+
- `app/Http/Controllers/` — controllers (HTTP only, thin orchestration).
|
|
29
|
+
- `app/Services/<Domain>/` — domain services and business logic.
|
|
30
|
+
- `app/Actions/` — single-purpose action classes (one public `execute()` method).
|
|
31
|
+
- `app/Jobs/` — queue jobs.
|
|
32
|
+
- `app/Policies/` — authorization policies.
|
|
33
|
+
- Keep controllers thin: receive request → call action / service → return response. Business logic in services or action classes, not controllers.
|
|
34
|
+
- Public API of the app: HTTP routes (`routes/api.php`, `routes/web.php`), Artisan commands (`app/Console/Commands/`), broadcast channels (`routes/channels.php`).
|
|
35
|
+
|
|
36
|
+
## Laravel 11.x
|
|
37
|
+
|
|
38
|
+
- Laravel 11 is the floor (Feb 2024 release, supported through 2026). Migrate from earlier versions via the official upgrade guide; do not skip major versions.
|
|
39
|
+
- Use the streamlined application skeleton: `bootstrap/app.php` with `withRouting`, `withMiddleware`, `withExceptions` configuration callbacks. Avoid restoring the legacy `kernel.php` files for new projects.
|
|
40
|
+
- Configuration: `config/*.php` returns arrays; access via `config('key.path')`. Never call `env()` outside `config/*.php` — `php artisan config:cache` invalidates direct `env()` calls in app code.
|
|
41
|
+
- Environment-specific config: `.env.local`, `.env.production`. Never commit `.env` files to VCS.
|
|
42
|
+
|
|
43
|
+
## Eloquent ORM
|
|
44
|
+
|
|
45
|
+
- Define models with explicit `$fillable` (allowlist) — never `$guarded = []`. Mass-assignment vulnerabilities are real.
|
|
46
|
+
- Type-hint relationship return types: `public function orders(): HasMany { ... }`. The static analyzer catches relationship typos.
|
|
47
|
+
- N+1 query prevention: eager-load relationships explicitly (`User::with('orders.items')->...`). Use the Laravel debug bar or `LazyEagerLoad::enforce()` in tests to catch N+1 violations in CI.
|
|
48
|
+
- Avoid mass operations through Eloquent (`Model::all()`, then iterating). Use the query builder, chunked queries (`->chunk(100, function ($users) { ... })`), or lazy collections for large result sets.
|
|
49
|
+
- Migrations are forward-only in production. Never `php artisan migrate:rollback` against production. For destructive schema changes, write a forward-only migration that achieves the same outcome.
|
|
50
|
+
|
|
51
|
+
## Service Container & DI
|
|
52
|
+
|
|
53
|
+
- Constructor injection via type-hinted parameters. The container auto-resolves bindings declared in service providers.
|
|
54
|
+
- Define bindings in `app/Providers/AppServiceProvider.php` (or feature-specific providers). Use `bind` for transient services, `singleton` for app-wide singletons, `scoped` for request-scoped.
|
|
55
|
+
- Contextual bindings via `$this->app->when(MyController::class)->needs(LoggerInterface::class)->give(...)`. Stops type-hint hacks.
|
|
56
|
+
- Avoid `app()` and `resolve()` helpers in app code — they obscure dependencies. Reserve for service providers and one-off scripts.
|
|
57
|
+
|
|
58
|
+
## HTTP Layer
|
|
59
|
+
|
|
60
|
+
- Form Requests (`php artisan make:request StoreUserRequest`) for input validation. Define `rules()`, `authorize()`, and `messages()` methods. Controllers receive the validated request, never `$request->all()` blindly.
|
|
61
|
+
- Resource classes (`php artisan make:resource UserResource`) for API responses. Stop returning raw Eloquent models — Resources control the shape and protect against accidental field leaks.
|
|
62
|
+
- Use route model binding (`Route::get('/users/{user}', [UserController::class, 'show'])` with type-hinted `User $user`). Automatic 404s and stable URL conventions.
|
|
63
|
+
- Middleware: composable via `bootstrap/app.php` `withMiddleware()`. Avoid global middleware unless it applies to all routes — prefer route groups.
|
|
64
|
+
|
|
65
|
+
## Queues & Jobs
|
|
66
|
+
|
|
67
|
+
- Use Laravel queues for any work over 200ms: emails, third-party API calls, image processing, report generation. Synchronous handling blocks the HTTP response.
|
|
68
|
+
- Job classes implement `ShouldQueue`. Configure retry counts (`public int $tries = 3`) and backoff (`public function backoff(): array { return [60, 300, 1800]; }`). Idempotency keys for jobs touching external APIs.
|
|
69
|
+
- Driver choice: Redis (`predis/predis` or `phpredis`) for high throughput, Database for low-volume / dev. Avoid Beanstalkd / SQS unless infrastructure requires it.
|
|
70
|
+
- Run workers via Horizon (`laravel/horizon`) for production observability and balanced auto-scaling. Configure tags, supervisors, and memory limits in `config/horizon.php`.
|
|
71
|
+
|
|
72
|
+
## Testing
|
|
73
|
+
|
|
74
|
+
- Use Pest (`pestphp/pest`) for new test suites — terser syntax than PHPUnit, runs on top of PHPUnit. PHPUnit alone is acceptable for legacy projects.
|
|
75
|
+
- Test types under `tests/`:
|
|
76
|
+
- `tests/Unit/` — pure logic, no Laravel bootstrap.
|
|
77
|
+
- `tests/Feature/` — full HTTP / queue / database flows with `RefreshDatabase` trait.
|
|
78
|
+
- `tests/Browser/` — Dusk for end-to-end browser tests.
|
|
79
|
+
- Database tests: `RefreshDatabase` trait wraps each test in a transaction and rolls back. Never use `DatabaseMigrations` in CI — too slow.
|
|
80
|
+
- Mock external services with Laravel's HTTP facade (`Http::fake([...])`). Never hit real network in tests.
|
|
81
|
+
- Coverage: `php artisan test --coverage --min=80`. Floor: 80% line coverage; 90% in critical modules (auth, billing, persistence).
|
|
82
|
+
|
|
83
|
+
## Security
|
|
84
|
+
|
|
85
|
+
- Validate every user input via Form Requests. Never trust `$request->all()` direct to a model.
|
|
86
|
+
- Authorization via Policies (`app/Policies/`) registered in `AuthServiceProvider`. Controllers call `$this->authorize('update', $post)`. Never authorize in views — too late.
|
|
87
|
+
- CSRF protection: Laravel adds it by default to web routes. Do not disable globally.
|
|
88
|
+
- Mass-assignment: `$fillable` allowlist on every model. Audit `$guarded = []` patterns and migrate.
|
|
89
|
+
- Encryption: `Crypt::encryptString()` for sensitive at-rest data. Never reinvent symmetric encryption.
|
|
90
|
+
|
|
91
|
+
## Composer & Dependency Hygiene
|
|
92
|
+
|
|
93
|
+
- Pin versions in `composer.json` to caret ranges (`^11.0` for Laravel itself, `^1.2` for stable libraries). Avoid `*` and `dev-` requirements in production.
|
|
94
|
+
- Lock file (`composer.lock`) committed for applications. Library packages typically omit the lock.
|
|
95
|
+
- Vulnerability scanning: `composer audit` (PHP 8.2+, Composer 2.4+) in CI against the FriendsOfPHP/security-advisories database. Block merge on advisories.
|
|
96
|
+
- License compliance: `composer-license-checker` with an allowlist. Block GPL contamination.
|
|
97
|
+
|
|
98
|
+
## References
|
|
99
|
+
|
|
100
|
+
- PHP 8.3 release notes: https://www.php.net/releases/8.3/en.php (accessed 2026-05-27, official-docs)
|
|
101
|
+
- Laravel 11 upgrade guide: https://laravel.com/docs/11.x/upgrade (accessed 2026-05-27, official-docs)
|
|
102
|
+
- Laravel docs: https://laravel.com/docs/11.x (accessed 2026-05-27, official-docs)
|
|
103
|
+
- Pest: https://pestphp.com/docs/installation (accessed 2026-05-27, official-docs)
|
|
104
|
+
|
|
105
|
+
## Cross-References
|
|
106
|
+
|
|
107
|
+
- `rules/hatch3r-api-design.md` — REST/GraphQL/gRPC contract floors apply to Laravel API endpoints.
|
|
108
|
+
- `rules/hatch3r-testing.md` — coverage thresholds carry over to `php artisan test --coverage`.
|
|
109
|
+
- `rules/hatch3r-secrets-management.md` — `.env` handling and secret rotation patterns.
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: PHP 8.3+ and Laravel 11.x conventions covering typed properties, attributes, Eloquent ORM, Service Container DI, Pest testing, queue workers, and Laravel Pint formatting
|
|
3
|
+
globs: ["**/*.php", "**/composer.json", "**/composer.lock", "**/artisan", "**/phpunit.xml", "**/phpunit.xml.dist", "**/phpstan.neon", "**/phpstan.neon.dist", "**/pint.json", "**/.php-cs-fixer.php", "**/app/**", "**/bootstrap/**", "**/config/**", "**/database/migrations/**", "**/routes/**", "**/tests/**"]
|
|
4
|
+
alwaysApply: false
|
|
5
|
+
---
|
|
6
|
+
# PHP / Laravel Patterns
|
|
7
|
+
|
|
8
|
+
**Pillars:** P2 (Scientific & Practical Quality), CQ8 (Maintainability Quality)
|
|
9
|
+
|
|
10
|
+
> Applies when the project ships a PHP application. Detection signals: `composer.json` at repo root, `artisan` script (Laravel), or any `*.php` source file. Symfony and Symfony-based projects also follow most of the language-level guidance here.
|
|
11
|
+
|
|
12
|
+
## PHP Language Floor
|
|
13
|
+
|
|
14
|
+
- Target PHP 8.3+ (8.4 recommended for new projects). Use typed properties, constructor property promotion, enums, readonly classes, first-class callable syntax. Avoid PHP 7.x patterns in new code.
|
|
15
|
+
- Enable strict types in every file (`declare(strict_types=1);` as the first statement after `<?php`). The IDE / Pint config enforces presence.
|
|
16
|
+
- Static analysis: PHPStan level 8 or Psalm level 1 in CI. Treat warnings as errors. Configure via `phpstan.neon` with project-specific baselines for legacy code.
|
|
17
|
+
- Format with Laravel Pint (Laravel projects) or PHP-CS-Fixer with PER 2.0 / PSR-12 ruleset. Run in CI; reformat-on-save in editors.
|
|
18
|
+
|
|
19
|
+
## Project Layout (Laravel)
|
|
20
|
+
|
|
21
|
+
- Default Laravel structure:
|
|
22
|
+
- `app/Models/` — Eloquent models.
|
|
23
|
+
- `app/Http/Controllers/` — controllers (HTTP only, thin orchestration).
|
|
24
|
+
- `app/Services/<Domain>/` — domain services and business logic.
|
|
25
|
+
- `app/Actions/` — single-purpose action classes (one public `execute()` method).
|
|
26
|
+
- `app/Jobs/` — queue jobs.
|
|
27
|
+
- `app/Policies/` — authorization policies.
|
|
28
|
+
- Keep controllers thin: receive request → call action / service → return response. Business logic in services or action classes, not controllers.
|
|
29
|
+
- Public API of the app: HTTP routes (`routes/api.php`, `routes/web.php`), Artisan commands (`app/Console/Commands/`), broadcast channels (`routes/channels.php`).
|
|
30
|
+
|
|
31
|
+
## Laravel 11.x
|
|
32
|
+
|
|
33
|
+
- Laravel 11 is the floor (Feb 2024 release, supported through 2026). Migrate from earlier versions via the official upgrade guide; do not skip major versions.
|
|
34
|
+
- Use the streamlined application skeleton: `bootstrap/app.php` with `withRouting`, `withMiddleware`, `withExceptions` configuration callbacks. Avoid restoring the legacy `kernel.php` files for new projects.
|
|
35
|
+
- Configuration: `config/*.php` returns arrays; access via `config('key.path')`. Never call `env()` outside `config/*.php` — `php artisan config:cache` invalidates direct `env()` calls in app code.
|
|
36
|
+
- Environment-specific config: `.env.local`, `.env.production`. Never commit `.env` files to VCS.
|
|
37
|
+
|
|
38
|
+
## Eloquent ORM
|
|
39
|
+
|
|
40
|
+
- Define models with explicit `$fillable` (allowlist) — never `$guarded = []`. Mass-assignment vulnerabilities are real.
|
|
41
|
+
- Type-hint relationship return types: `public function orders(): HasMany { ... }`. The static analyzer catches relationship typos.
|
|
42
|
+
- N+1 query prevention: eager-load relationships explicitly (`User::with('orders.items')->...`). Use the Laravel debug bar or `LazyEagerLoad::enforce()` in tests to catch N+1 violations in CI.
|
|
43
|
+
- Avoid mass operations through Eloquent (`Model::all()`, then iterating). Use the query builder, chunked queries (`->chunk(100, function ($users) { ... })`), or lazy collections for large result sets.
|
|
44
|
+
- Migrations are forward-only in production. Never `php artisan migrate:rollback` against production. For destructive schema changes, write a forward-only migration that achieves the same outcome.
|
|
45
|
+
|
|
46
|
+
## Service Container & DI
|
|
47
|
+
|
|
48
|
+
- Constructor injection via type-hinted parameters. The container auto-resolves bindings declared in service providers.
|
|
49
|
+
- Define bindings in `app/Providers/AppServiceProvider.php` (or feature-specific providers). Use `bind` for transient services, `singleton` for app-wide singletons, `scoped` for request-scoped.
|
|
50
|
+
- Contextual bindings via `$this->app->when(MyController::class)->needs(LoggerInterface::class)->give(...)`. Stops type-hint hacks.
|
|
51
|
+
- Avoid `app()` and `resolve()` helpers in app code — they obscure dependencies. Reserve for service providers and one-off scripts.
|
|
52
|
+
|
|
53
|
+
## HTTP Layer
|
|
54
|
+
|
|
55
|
+
- Form Requests (`php artisan make:request StoreUserRequest`) for input validation. Define `rules()`, `authorize()`, and `messages()` methods. Controllers receive the validated request, never `$request->all()` blindly.
|
|
56
|
+
- Resource classes (`php artisan make:resource UserResource`) for API responses. Stop returning raw Eloquent models — Resources control the shape and protect against accidental field leaks.
|
|
57
|
+
- Use route model binding (`Route::get('/users/{user}', [UserController::class, 'show'])` with type-hinted `User $user`). Automatic 404s and stable URL conventions.
|
|
58
|
+
- Middleware: composable via `bootstrap/app.php` `withMiddleware()`. Avoid global middleware unless it applies to all routes — prefer route groups.
|
|
59
|
+
|
|
60
|
+
## Queues & Jobs
|
|
61
|
+
|
|
62
|
+
- Use Laravel queues for any work over 200ms: emails, third-party API calls, image processing, report generation. Synchronous handling blocks the HTTP response.
|
|
63
|
+
- Job classes implement `ShouldQueue`. Configure retry counts (`public int $tries = 3`) and backoff (`public function backoff(): array { return [60, 300, 1800]; }`). Idempotency keys for jobs touching external APIs.
|
|
64
|
+
- Driver choice: Redis (`predis/predis` or `phpredis`) for high throughput, Database for low-volume / dev. Avoid Beanstalkd / SQS unless infrastructure requires it.
|
|
65
|
+
- Run workers via Horizon (`laravel/horizon`) for production observability and balanced auto-scaling. Configure tags, supervisors, and memory limits in `config/horizon.php`.
|
|
66
|
+
|
|
67
|
+
## Testing
|
|
68
|
+
|
|
69
|
+
- Use Pest (`pestphp/pest`) for new test suites — terser syntax than PHPUnit, runs on top of PHPUnit. PHPUnit alone is acceptable for legacy projects.
|
|
70
|
+
- Test types under `tests/`:
|
|
71
|
+
- `tests/Unit/` — pure logic, no Laravel bootstrap.
|
|
72
|
+
- `tests/Feature/` — full HTTP / queue / database flows with `RefreshDatabase` trait.
|
|
73
|
+
- `tests/Browser/` — Dusk for end-to-end browser tests.
|
|
74
|
+
- Database tests: `RefreshDatabase` trait wraps each test in a transaction and rolls back. Never use `DatabaseMigrations` in CI — too slow.
|
|
75
|
+
- Mock external services with Laravel's HTTP facade (`Http::fake([...])`). Never hit real network in tests.
|
|
76
|
+
- Coverage: `php artisan test --coverage --min=80`. Floor: 80% line coverage; 90% in critical modules (auth, billing, persistence).
|
|
77
|
+
|
|
78
|
+
## Security
|
|
79
|
+
|
|
80
|
+
- Validate every user input via Form Requests. Never trust `$request->all()` direct to a model.
|
|
81
|
+
- Authorization via Policies (`app/Policies/`) registered in `AuthServiceProvider`. Controllers call `$this->authorize('update', $post)`. Never authorize in views — too late.
|
|
82
|
+
- CSRF protection: Laravel adds it by default to web routes. Do not disable globally.
|
|
83
|
+
- Mass-assignment: `$fillable` allowlist on every model. Audit `$guarded = []` patterns and migrate.
|
|
84
|
+
- Encryption: `Crypt::encryptString()` for sensitive at-rest data. Never reinvent symmetric encryption.
|
|
85
|
+
|
|
86
|
+
## Composer & Dependency Hygiene
|
|
87
|
+
|
|
88
|
+
- Pin versions in `composer.json` to caret ranges (`^11.0` for Laravel itself, `^1.2` for stable libraries). Avoid `*` and `dev-` requirements in production.
|
|
89
|
+
- Lock file (`composer.lock`) committed for applications. Library packages typically omit the lock.
|
|
90
|
+
- Vulnerability scanning: `composer audit` (PHP 8.2+, Composer 2.4+) in CI against the FriendsOfPHP/security-advisories database. Block merge on advisories.
|
|
91
|
+
- License compliance: `composer-license-checker` with an allowlist. Block GPL contamination.
|
|
92
|
+
|
|
93
|
+
## References
|
|
94
|
+
|
|
95
|
+
- PHP 8.3 release notes: https://www.php.net/releases/8.3/en.php (accessed 2026-05-27, official-docs)
|
|
96
|
+
- Laravel 11 upgrade guide: https://laravel.com/docs/11.x/upgrade (accessed 2026-05-27, official-docs)
|
|
97
|
+
- Laravel docs: https://laravel.com/docs/11.x (accessed 2026-05-27, official-docs)
|
|
98
|
+
- Pest: https://pestphp.com/docs/installation (accessed 2026-05-27, official-docs)
|
|
99
|
+
|
|
100
|
+
## Cross-References
|
|
101
|
+
|
|
102
|
+
- `rules/hatch3r-api-design.md` — REST/GraphQL/gRPC contract floors apply to Laravel API endpoints.
|
|
103
|
+
- `rules/hatch3r-testing.md` — coverage thresholds carry over to `php artisan test --coverage`.
|
|
104
|
+
- `rules/hatch3r-secrets-management.md` — `.env` handling and secret rotation patterns.
|
|
@@ -2,13 +2,17 @@
|
|
|
2
2
|
id: hatch3r-progressive-delivery
|
|
3
3
|
type: rule
|
|
4
4
|
description: Progressive delivery — canary, blue-green, feature-flag rollout with auto-rollback on SLO burn; staged rollout to prevent CrowdStrike-class incidents
|
|
5
|
-
scope:
|
|
5
|
+
scope: conditional
|
|
6
|
+
globs: "**/.github/workflows/**,**/deploy/**,**/k8s/**,**/manifests/**,**/argo/**,**/flagger/**,**/spinnaker/**,**/rollout*"
|
|
6
7
|
tags: [devops]
|
|
8
|
+
precedence: high
|
|
7
9
|
quality_charter: agents/shared/quality-charter.md
|
|
8
10
|
cache_friendly: true
|
|
9
11
|
---
|
|
10
12
|
# Progressive Delivery
|
|
11
13
|
|
|
14
|
+
**Pillars:** P2 (Scientific & Practical Quality), CQ4 (Reliability Quality)
|
|
15
|
+
|
|
12
16
|
## Three Rollout Strategies
|
|
13
17
|
|
|
14
18
|
Choose one per service based on risk profile and resource budget:
|
|
@@ -2,9 +2,12 @@
|
|
|
2
2
|
description: Progressive delivery — canary, blue-green, feature-flag rollout with auto-rollback on SLO burn; staged rollout to prevent CrowdStrike-class incidents
|
|
3
3
|
globs: ["**/.github/workflows/**", "**/deploy/**", "**/k8s/**", "**/manifests/**", "**/argo/**", "**/flagger/**", "**/spinnaker/**", "**/rollout*"]
|
|
4
4
|
alwaysApply: false
|
|
5
|
+
precedence: high
|
|
5
6
|
---
|
|
6
7
|
# Progressive Delivery
|
|
7
8
|
|
|
9
|
+
**Pillars:** P2 (Scientific & Practical Quality), CQ4 (Reliability Quality)
|
|
10
|
+
|
|
8
11
|
## Three Rollout Strategies
|
|
9
12
|
|
|
10
13
|
Choose one per service based on risk profile and resource budget:
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: hatch3r-proof-model
|
|
3
|
+
type: rule
|
|
4
|
+
description: Mandatory citation per factual claim + pre-execution verification gates + proof_trace block schema. Hallucination prevention via verifiable proof, not citation alone.
|
|
5
|
+
tags: [proof, verification, citation, floor:content-quality]
|
|
6
|
+
precedence: high
|
|
7
|
+
scope: always
|
|
8
|
+
---
|
|
9
|
+
# hatch3r Proof Model
|
|
10
|
+
|
|
11
|
+
**Pillars:** P2 (Scientific Quality), P5 (Governance Self-Quality)
|
|
12
|
+
|
|
13
|
+
This rule operationalises Decision #19 (CONSTITUTION §6): hallucination prevention via verifiable proof, not citation alone. It defines WHEN proof is required, WHAT schema each proof emits, and WHICH gates a hatch3r-driven agent must pass before issuing a factual assertion.
|
|
14
|
+
|
|
15
|
+
## When Proof Trace Is Required
|
|
16
|
+
|
|
17
|
+
Emit a `proof_trace:` block under any state-dependent claim:
|
|
18
|
+
- File existence or absence
|
|
19
|
+
- File content matching a pattern (specific bytes, frontmatter field, exported symbol)
|
|
20
|
+
- grep match presence/count (zero matches is itself a state-dependent claim)
|
|
21
|
+
- Type-check pass/fail (`npx tsc --noEmit` exit code)
|
|
22
|
+
- Test exit code + output (`npm test` per-suite pass/fail counts)
|
|
23
|
+
- Command exit code + output (any shell invocation whose result the agent is about to cite)
|
|
24
|
+
- Web fetch success + content matching (URL resolves AND target string present)
|
|
25
|
+
|
|
26
|
+
State-independent claims (definitional, axiomatic, design-rationale) do NOT require proof_trace — citing the file:line where the definition lives is sufficient.
|
|
27
|
+
|
|
28
|
+
## Proof Trace Schema
|
|
29
|
+
|
|
30
|
+
```yaml
|
|
31
|
+
proof_trace:
|
|
32
|
+
claim: <one-sentence assertion>
|
|
33
|
+
command: <bash invocation OR Read tool call OR grep pattern>
|
|
34
|
+
expected: <pattern OR quoted output>
|
|
35
|
+
actual: <verbatim ≤200 chars from command output>
|
|
36
|
+
verdict: matched | mismatched
|
|
37
|
+
accessed: YYYY-MM-DD
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Field rules:
|
|
41
|
+
- `claim` — one sentence; what the proof verifies. Never a multi-clause assertion.
|
|
42
|
+
- `command` — runnable verbatim by a reviewer. No paraphrase.
|
|
43
|
+
- `expected` — either a regex/pattern OR the verbatim string the command should emit.
|
|
44
|
+
- `actual` — verbatim slice of the command output, truncated to 200 characters with `…` suffix if longer.
|
|
45
|
+
- `verdict` — `matched` when actual satisfies expected; `mismatched` otherwise. A `mismatched` verdict still belongs in the proof trace — it documents that verification was attempted.
|
|
46
|
+
- `accessed` — ISO-8601 date when the command was run.
|
|
47
|
+
|
|
48
|
+
## Pre-Execution Verification Gates
|
|
49
|
+
|
|
50
|
+
Before issuing any agent-generated assertion that affects a downstream decision, the agent passes these gates in order:
|
|
51
|
+
|
|
52
|
+
1. **State-dependent claim?** If yes, prepare a `proof_trace` block — do not emit the claim without it.
|
|
53
|
+
2. **External dependency claim** (library version, API behavior, platform feature)? Verify against current documentation per `agents/shared/quality-charter.md` §15 Currency Verification (≤180 days). Cite URL + access date + trust tier per `agents/shared/rigor-contract.md` §Web Research Mandate.
|
|
54
|
+
3. **Cross-file claim** (file X imports file Y, function A calls function B)? Run grep + cite file:line. Do not infer from filename or directory.
|
|
55
|
+
4. **Behavioral claim** (function does X under condition Y)? Either point to a test that exercises Y → X, or write one before asserting.
|
|
56
|
+
5. **Negative claim** (X does NOT exist, Y does NOT happen)? Run the search command and emit the zero-match output in `actual:`. Absence is harder to prove than presence — make the search command explicit.
|
|
57
|
+
|
|
58
|
+
A claim that fails its gate is either dropped, or downgraded to confidence `low` per `agents/shared/quality-charter.md` §1 with the gap explicitly named.
|
|
59
|
+
|
|
60
|
+
## Citation Alone Is Insufficient
|
|
61
|
+
|
|
62
|
+
Per CONSTITUTION §6 Decision #19: "Citation alone insufficient — verification commands close the loop." Documents become stale; commands return current state. A citation without a verification command is a Medium-minimum finding under D24 self-audit.
|
|
63
|
+
|
|
64
|
+
Concrete failure modes citation-alone leaves open:
|
|
65
|
+
- File path moved or renamed since the cited revision
|
|
66
|
+
- Section heading rewritten such that the citation refers to absent content
|
|
67
|
+
- Behavior changed in a way the prose has not yet caught up to
|
|
68
|
+
- Reviewer reading the citation does not have the cited file open
|
|
69
|
+
|
|
70
|
+
A proof_trace defeats all four — the command runs against current state at review time.
|
|
71
|
+
|
|
72
|
+
## Acceptable Failure Modes
|
|
73
|
+
|
|
74
|
+
- **Verification impossible at write time** (e.g., production database state from local dev) — explicitly state the verification gap + lower confidence to medium per quality-charter §1.
|
|
75
|
+
- **Verification cost prohibitive** (e.g., 30-minute integration suite for a docs typo) — log a `verification_skipped: <reason>` field; flag for downstream check. The skip must be documented, not silent.
|
|
76
|
+
- **Source 404 / withdrawn** — re-research before relying; do not cite a dead URL per rigor-contract.md §Web Research Mandate. Re-running the fetch with a `accessed:` date earlier than the 404 does not rescue the citation.
|
|
77
|
+
- **Verification command itself unreliable** (flaky test, intermittent network) — note the unreliability + run the command N≥3 times + cite the majority outcome.
|
|
78
|
+
|
|
79
|
+
## Examples
|
|
80
|
+
|
|
81
|
+
State-dependent claim WITH proof_trace:
|
|
82
|
+
|
|
83
|
+
```yaml
|
|
84
|
+
proof_trace:
|
|
85
|
+
claim: rigor-contract.md defines a Proof Trace Contract section
|
|
86
|
+
command: grep -n "Proof Trace Contract" agents/shared/rigor-contract.md
|
|
87
|
+
expected: line-numbered match referencing "Proof Trace Contract"
|
|
88
|
+
actual: "84:## Proof Trace Contract (Decision 9 — added 2026-05-26)"
|
|
89
|
+
verdict: matched
|
|
90
|
+
accessed: 2026-05-26
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Negative claim WITH proof_trace:
|
|
94
|
+
|
|
95
|
+
```yaml
|
|
96
|
+
proof_trace:
|
|
97
|
+
claim: no occurrences of "TODO" remain in src/content/contentRoot.ts
|
|
98
|
+
command: grep -c "TODO" src/content/contentRoot.ts
|
|
99
|
+
expected: "0"
|
|
100
|
+
actual: "0"
|
|
101
|
+
verdict: matched
|
|
102
|
+
accessed: 2026-05-26
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
External dependency claim WITH proof_trace:
|
|
106
|
+
|
|
107
|
+
```yaml
|
|
108
|
+
proof_trace:
|
|
109
|
+
claim: Commander.js 12.x supports async action handlers
|
|
110
|
+
command: WebFetch https://github.com/tj/commander.js/blob/master/Readme.md#action-handler
|
|
111
|
+
expected: section "Action handler" describes async support
|
|
112
|
+
actual: "Action handler functions can also be async. Use parseAsync()…"
|
|
113
|
+
verdict: matched
|
|
114
|
+
accessed: 2026-05-26
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Enforcement
|
|
118
|
+
|
|
119
|
+
The audit prompt's Behavioral Charter directive 20 (added 2.0.0) and `agents/shared/rigor-contract.md` §Proof Trace Contract (added 2026-05-26) operationalise this rule at audit time. Findings missing proof_trace on state-dependent claims are dropped at SA output time per the charter's directive 20 + rigor-contract §Schema Enforcement.
|
|
120
|
+
|
|
121
|
+
Reviewer-class artifacts (`agents/hatch3r-reviewer.md`, future Reviewer Pass 1.5 per rigor-contract §Proof Trace Contract) read proof_trace blocks to verify implementation against documented runtime state. Implementer-class artifacts (`agents/hatch3r-implementer.md`) emit proof_trace blocks before declaring task completion.
|
|
122
|
+
|
|
123
|
+
## Pillar Service
|
|
124
|
+
- P2 — every factual claim becomes verifiable; placeholder findings are detectable and retryable.
|
|
125
|
+
- P5 — governance system applies proof to itself; the rule that mandates proof is itself bound by proof at audit time.
|
|
126
|
+
|
|
127
|
+
## Cross-References
|
|
128
|
+
- Decision #19 — proof-trace + mandatory citation as 2.0.0 hallucination-prevention floor
|
|
129
|
+
- `agents/shared/rigor-contract.md` §Proof Trace Contract — schema canonical location + Shallow Finding Detector linkage
|
|
130
|
+
- The audit prompt's Behavioral Charter directive 20 — audit-time enforcement at SA output time
|
|
131
|
+
- `agents/shared/quality-charter.md` §15 Currency Verification — external-dependency claim freshness window (≤180 days)
|