pi-dev-team 0.2.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/LICENSE +21 -0
- package/PORTING.md +134 -0
- package/README.md +207 -0
- package/UPSTREAM.json +64 -0
- package/agents/Explore.md +15 -0
- package/agents/a11y-review.md +118 -0
- package/agents/adr-author.md +70 -0
- package/agents/ai-provenance-review.md +120 -0
- package/agents/angular-reactivity-review.md +95 -0
- package/agents/arch-review.md +135 -0
- package/agents/architect.md +78 -0
- package/agents/autoship-batch-proposer.md +69 -0
- package/agents/claude-setup-review.md +136 -0
- package/agents/codebase-recon.md +184 -0
- package/agents/component-architecture-review.md +119 -0
- package/agents/concurrency-review.md +109 -0
- package/agents/correctness-review.md +290 -0
- package/agents/data-flow-tracer.md +120 -0
- package/agents/doc-review.md +165 -0
- package/agents/domain-review.md +136 -0
- package/agents/general-purpose.md +10 -0
- package/agents/gherkin-quality-critic.md +113 -0
- package/agents/js-fp-review.md +114 -0
- package/agents/mutation-kill.md +684 -0
- package/agents/naming-review.md +142 -0
- package/agents/orchestrator.md +339 -0
- package/agents/performance-review.md +105 -0
- package/agents/plan-review-acceptance.md +115 -0
- package/agents/plan-review-design.md +90 -0
- package/agents/plan-review-parallelization.md +84 -0
- package/agents/plan-review-strategic.md +96 -0
- package/agents/plan-review-ux.md +110 -0
- package/agents/platform-engineer.md +64 -0
- package/agents/product-manager.md +68 -0
- package/agents/progress-guardian.md +79 -0
- package/agents/qa-engineer.md +289 -0
- package/agents/quality-reviewer.md +132 -0
- package/agents/react-reactivity-review.md +102 -0
- package/agents/refactor-opportunity-review.md +128 -0
- package/agents/security-engineer.md +60 -0
- package/agents/security-review.md +218 -0
- package/agents/session-analysis.md +95 -0
- package/agents/software-engineer.md +105 -0
- package/agents/spec-compliance-review.md +100 -0
- package/agents/spec-reviewer.md +114 -0
- package/agents/structure-review.md +146 -0
- package/agents/tech-writer.md +84 -0
- package/agents/test-review.md +246 -0
- package/agents/test-smell-review.md +188 -0
- package/agents/token-efficiency-review.md +139 -0
- package/agents/ui-ux-designer.md +54 -0
- package/agents/vue-reactivity-review.md +95 -0
- package/bin/__pycache__/claudecpython-314.pyc +0 -0
- package/bin/claude +258 -0
- package/docs/upstream/.pages +1 -0
- package/docs/upstream/CHANGELOG.md +2586 -0
- package/docs/upstream/README.md +155 -0
- package/docs/upstream/agent-architecture.md +214 -0
- package/docs/upstream/agent_info.md +187 -0
- package/docs/upstream/artifact-migration.md +124 -0
- package/docs/upstream/code-intelligence-nudge.md +149 -0
- package/docs/upstream/code-review-process.md +294 -0
- package/docs/upstream/concurrent-use.md +73 -0
- package/docs/upstream/context-management.md +111 -0
- package/docs/upstream/developer-notes.md +280 -0
- package/docs/upstream/diagrams/architecture-overview.svg +101 -0
- package/docs/upstream/diagrams/review-dispatch.svg +139 -0
- package/docs/upstream/diagrams/team-agents.svg +128 -0
- package/docs/upstream/diagrams/test-improve-flow.svg +166 -0
- package/docs/upstream/diagrams/workflow-linear.svg +66 -0
- package/docs/upstream/diagrams/workflow-three-phase.svg +200 -0
- package/docs/upstream/eval-maintenance.md +95 -0
- package/docs/upstream/eval-running-guide.md +147 -0
- package/docs/upstream/eval-system.md +291 -0
- package/docs/upstream/session-review-oss-complements.md +75 -0
- package/docs/upstream/session-review.md +212 -0
- package/docs/upstream/skills.md +188 -0
- package/docs/upstream/team-structure.md +21 -0
- package/docs/upstream/telemetry-ci-access.md +129 -0
- package/docs/upstream/telemetry-repo-security.md +120 -0
- package/docs/upstream/test-evaluation.md +277 -0
- package/docs/upstream/test-improve.md +154 -0
- package/docs/upstream/triage-workflow.md +282 -0
- package/docs/upstream/workflows.md +289 -0
- package/extensions/dev-team/index.ts +539 -0
- package/extensions/dev-team/lib/agents.ts +272 -0
- package/extensions/dev-team/lib/ai-credits.ts +92 -0
- package/extensions/dev-team/lib/autocompact.ts +81 -0
- package/extensions/dev-team/lib/child-run.ts +102 -0
- package/extensions/dev-team/lib/config.ts +236 -0
- package/extensions/dev-team/lib/gh-command.ts +103 -0
- package/extensions/dev-team/lib/github-style.ts +307 -0
- package/extensions/dev-team/lib/hooks.ts +350 -0
- package/extensions/dev-team/lib/metrics.ts +115 -0
- package/extensions/dev-team/lib/safe-read.ts +49 -0
- package/extensions/dev-team/lib/session-files.ts +57 -0
- package/extensions/dev-team/lib/session-spend.ts +123 -0
- package/extensions/dev-team/lib/shell-scan.ts +205 -0
- package/extensions/dev-team/lib/skills.ts +213 -0
- package/extensions/dev-team/lib/subagent-render.ts +245 -0
- package/extensions/dev-team/lib/subagent-types.ts +164 -0
- package/extensions/dev-team/lib/subagent.ts +596 -0
- package/extensions/dev-team/lib/terminal-text.ts +54 -0
- package/extensions/dev-team/lib/tools-misc.ts +152 -0
- package/extensions/dev-team/lib/transcript.ts +110 -0
- package/extensions/dev-team/lib/trust.ts +52 -0
- package/extensions/dev-team/lib/usage-breakdown.ts +176 -0
- package/extensions/dev-team/lib/usage-chart.ts +153 -0
- package/extensions/dev-team/lib/usage-command.ts +107 -0
- package/extensions/dev-team/lib/usage-history.ts +203 -0
- package/extensions/dev-team/lib/usage-render.ts +225 -0
- package/extensions/dev-team/lib/usage-split-bar.ts +127 -0
- package/extensions/dev-team/lib/usage-state.ts +116 -0
- package/extensions/dev-team/lib/usage-text.ts +159 -0
- package/extensions/dev-team/lib/usage-view.ts +109 -0
- package/hooks/__pycache__/refactor_test_freeze_guard.cpython-314.pyc +0 -0
- package/hooks/agent_dispatch_ledger.py +190 -0
- package/hooks/autocompact_setup_nudge.py +99 -0
- package/hooks/bash_retry_guard.py +228 -0
- package/hooks/boundary_events_write_guard.py +352 -0
- package/hooks/code_intelligence_nudge.py +293 -0
- package/hooks/code_intelligence_turn_mark.py +317 -0
- package/hooks/codegraph_bootstrap.py +139 -0
- package/hooks/contract_version_guard.py +362 -0
- package/hooks/cost_meter.py +106 -0
- package/hooks/destructive-commands.json +62 -0
- package/hooks/destructive_guard.py +477 -0
- package/hooks/eval_compliance_check.py +440 -0
- package/hooks/guards.json +17 -0
- package/hooks/hooks.json +323 -0
- package/hooks/internal_double_gate.py +296 -0
- package/hooks/js_fp_review.py +212 -0
- package/hooks/knowledge_index.py +119 -0
- package/hooks/lib/__pycache__/artifact_paths.cpython-314.pyc +0 -0
- package/hooks/lib/__pycache__/atomic_state.cpython-314.pyc +0 -0
- package/hooks/lib/__pycache__/autocompact_config.cpython-314.pyc +0 -0
- package/hooks/lib/__pycache__/boundary_events.cpython-314.pyc +0 -0
- package/hooks/lib/__pycache__/doc_classification.cpython-314.pyc +0 -0
- package/hooks/lib/__pycache__/gh_pr_create_detect.cpython-314.pyc +0 -0
- package/hooks/lib/__pycache__/git_safe_diff.cpython-314.pyc +0 -0
- package/hooks/lib/__pycache__/instrument_log.cpython-314.pyc +0 -0
- package/hooks/lib/__pycache__/metrics_query.cpython-314.pyc +0 -0
- package/hooks/lib/__pycache__/plugin_version.cpython-314.pyc +0 -0
- package/hooks/lib/__pycache__/pre_commit_doc_classifier.cpython-314.pyc +0 -0
- package/hooks/lib/__pycache__/review_agent_registry.cpython-314.pyc +0 -0
- package/hooks/lib/__pycache__/review_gate_corroboration.cpython-314.pyc +0 -0
- package/hooks/lib/__pycache__/review_gate_hash.cpython-314.pyc +0 -0
- package/hooks/lib/__pycache__/review_verdicts.cpython-314.pyc +0 -0
- package/hooks/lib/__pycache__/stdin_json.cpython-314.pyc +0 -0
- package/hooks/lib/__pycache__/stryker_invocation.cpython-314.pyc +0 -0
- package/hooks/lib/__pycache__/telemetry_consent.cpython-314.pyc +0 -0
- package/hooks/lib/__pycache__/test_file_classify.cpython-314.pyc +0 -0
- package/hooks/lib/__pycache__/token_efficiency_limits.cpython-314.pyc +0 -0
- package/hooks/lib/__pycache__/verify_guard_state.cpython-314.pyc +0 -0
- package/hooks/lib/__pycache__/xunit_v3_operator_gate.cpython-314.pyc +0 -0
- package/hooks/lib/agent_skill_hints.py +74 -0
- package/hooks/lib/artifact_paths.py +263 -0
- package/hooks/lib/atomic_state.py +557 -0
- package/hooks/lib/autocompact_config.py +103 -0
- package/hooks/lib/autoship_log.py +106 -0
- package/hooks/lib/banned_scripts_policy.py +51 -0
- package/hooks/lib/boundary_events.py +436 -0
- package/hooks/lib/build_knowledge_index.py +504 -0
- package/hooks/lib/build_skills_index.py +361 -0
- package/hooks/lib/build_state.py +116 -0
- package/hooks/lib/classify_ship_outcome.py +126 -0
- package/hooks/lib/config_changelog_schema.py +115 -0
- package/hooks/lib/cost_meter.py +955 -0
- package/hooks/lib/doc_classification.py +116 -0
- package/hooks/lib/gh_pr_create_detect.py +136 -0
- package/hooks/lib/git_safe_diff.py +123 -0
- package/hooks/lib/instrument_log.py +66 -0
- package/hooks/lib/iteration_journal_gate.py +197 -0
- package/hooks/lib/knowledge_index_paths.py +88 -0
- package/hooks/lib/mcp_json_repowise.py +177 -0
- package/hooks/lib/metrics_query.py +202 -0
- package/hooks/lib/minimal_yaml.py +434 -0
- package/hooks/lib/plugin_version.py +142 -0
- package/hooks/lib/pre_commit_detect.py +537 -0
- package/hooks/lib/pre_commit_doc_classifier.py +126 -0
- package/hooks/lib/pricing.py +118 -0
- package/hooks/lib/report_pdf.py +371 -0
- package/hooks/lib/review_agent_registry.py +142 -0
- package/hooks/lib/review_dispatch_ledger.py +101 -0
- package/hooks/lib/review_gate_corroboration.py +521 -0
- package/hooks/lib/review_gate_hash.py +252 -0
- package/hooks/lib/review_gate_normalized_hash.py +1115 -0
- package/hooks/lib/review_verdicts.py +301 -0
- package/hooks/lib/run_report.py +160 -0
- package/hooks/lib/skill_categories.yaml +125 -0
- package/hooks/lib/stdin_json.py +57 -0
- package/hooks/lib/stryker_invocation.py +102 -0
- package/hooks/lib/telemetry_consent.py +41 -0
- package/hooks/lib/telemetry_report.py +108 -0
- package/hooks/lib/test_file_classify.py +160 -0
- package/hooks/lib/token_efficiency_limits.py +51 -0
- package/hooks/lib/turn_identity.py +77 -0
- package/hooks/lib/verify_guard_state.py +110 -0
- package/hooks/lib/workflow_state.py +206 -0
- package/hooks/lib/xunit_v3_operator_gate.py +596 -0
- package/hooks/mcp_json_repowise_nudge.py +74 -0
- package/hooks/mutation_adapters/__init__.py +7 -0
- package/hooks/mutation_adapters/__pycache__/__init__.cpython-314.pyc +0 -0
- package/hooks/mutation_adapters/__pycache__/lib.cpython-314.pyc +0 -0
- package/hooks/mutation_adapters/__pycache__/mutmut.cpython-314.pyc +0 -0
- package/hooks/mutation_adapters/__pycache__/pitest.cpython-314.pyc +0 -0
- package/hooks/mutation_adapters/__pycache__/stryker.cpython-314.pyc +0 -0
- package/hooks/mutation_adapters/__pycache__/stryker_net.cpython-314.pyc +0 -0
- package/hooks/mutation_adapters/lib.py +478 -0
- package/hooks/mutation_adapters/mutmut.py +188 -0
- package/hooks/mutation_adapters/pitest.py +266 -0
- package/hooks/mutation_adapters/stryker.py +157 -0
- package/hooks/mutation_adapters/stryker_net.py +264 -0
- package/hooks/mutation_gate.py +193 -0
- package/hooks/mutation_testing_smoke_gate.py +371 -0
- package/hooks/pending_review_notify.py +121 -0
- package/hooks/phase_marker.py +138 -0
- package/hooks/post_compact_state_reinject.py +180 -0
- package/hooks/post_format.py +115 -0
- package/hooks/pre_commit_knowledge_index.py +128 -0
- package/hooks/pre_commit_review.py +66 -0
- package/hooks/pre_pr_review.py +694 -0
- package/hooks/pre_tool_guard.py +405 -0
- package/hooks/py.sh +73 -0
- package/hooks/refactor-bash-write-patterns.json +29 -0
- package/hooks/refactor_test_bash_guard.py +253 -0
- package/hooks/refactor_test_freeze_guard.py +139 -0
- package/hooks/refactor_test_revert_guard.py +186 -0
- package/hooks/repo_review_nudge.py +287 -0
- package/hooks/review_verdict_recorder.py +464 -0
- package/hooks/scan_bash_command_for_banned_scripts.py +428 -0
- package/hooks/scan_worktree_for_banned_scripts.py +238 -0
- package/hooks/session_learning_trigger.py +248 -0
- package/hooks/skills_index.py +126 -0
- package/hooks/stryker_xunit_shim_guard.py +571 -0
- package/hooks/subagent_completion_guard.py +309 -0
- package/hooks/subagent_skill_context.py +139 -0
- package/hooks/task_completion_metrics.py +216 -0
- package/hooks/tdd_guard.py +229 -0
- package/hooks/telemetry.py +341 -0
- package/hooks/token_efficiency_review.py +194 -0
- package/hooks/verify_guard.py +183 -0
- package/hooks/verify_guard_edit_marker.py +73 -0
- package/hooks/version_check.py +173 -0
- package/knowledge/accepted-risks-schema.md +98 -0
- package/knowledge/adr-decision-criteria.md +64 -0
- package/knowledge/adversarial-review-protocol.md +139 -0
- package/knowledge/agent-registry.md +228 -0
- package/knowledge/agent-review-methodology.md +80 -0
- package/knowledge/ai-friendly-repo-guidelines.md +67 -0
- package/knowledge/architecture-assessment.md +96 -0
- package/knowledge/artifact-lifecycle.md +57 -0
- package/knowledge/cd-maturity-model.md +82 -0
- package/knowledge/cd-test-architecture.md +190 -0
- package/knowledge/ci-cd-file-scope.md +24 -0
- package/knowledge/codegraph-vs-graphify.md +192 -0
- package/knowledge/component-test-patterns.md +139 -0
- package/knowledge/database-change-management.md +80 -0
- package/knowledge/database-test-patterns.md +79 -0
- package/knowledge/decision-defaults.md +88 -0
- package/knowledge/dependency-breaking-techniques.md +116 -0
- package/knowledge/deployment-pipeline.md +86 -0
- package/knowledge/design-smells.md +122 -0
- package/knowledge/directory-enumeration.md +38 -0
- package/knowledge/domain-modeling.md +123 -0
- package/knowledge/evidence-bundle.md +90 -0
- package/knowledge/exploratory-testing-field-guide.md +122 -0
- package/knowledge/failure-routing.md +28 -0
- package/knowledge/fixture-construction.md +56 -0
- package/knowledge/frontend-component-architecture.md +139 -0
- package/knowledge/gherkin-quality-review-dispatch.md +135 -0
- package/knowledge/index.json +6766 -0
- package/knowledge/internal-collaborator-doubling.md +101 -0
- package/knowledge/legacy-test-strategy.md +71 -0
- package/knowledge/long-run-waiting.md +66 -0
- package/knowledge/microservice-testing.md +71 -0
- package/knowledge/model-pricing.json +23 -0
- package/knowledge/mutation-score-formulas.md +60 -0
- package/knowledge/object-calisthenics.md +147 -0
- package/knowledge/oracle-provenance.md +94 -0
- package/knowledge/orchestrator-script-implementation.md +185 -0
- package/knowledge/owasp-detection.md +148 -0
- package/knowledge/plan-review-rubric.md +56 -0
- package/knowledge/proxy-connectivity.md +62 -0
- package/knowledge/reactive-effect-patterns.md +73 -0
- package/knowledge/recon-inventory-excludes.txt +32 -0
- package/knowledge/references/bdd-value-guide.md +61 -0
- package/knowledge/references/csharp-http-client-testing.md +264 -0
- package/knowledge/release-strategies.md +74 -0
- package/knowledge/report-output-location.md +117 -0
- package/knowledge/report-pdf-integration.md +63 -0
- package/knowledge/report-print.css +129 -0
- package/knowledge/report-template.md +114 -0
- package/knowledge/report-to-pdf.md +69 -0
- package/knowledge/request-processing-flow.md +63 -0
- package/knowledge/result-verification.md +52 -0
- package/knowledge/review-agent-output-contract.md +121 -0
- package/knowledge/review-lens-classification.md +113 -0
- package/knowledge/review-rubric.md +62 -0
- package/knowledge/review-template.md +104 -0
- package/knowledge/rule-fixtures/A02.insecure-random-js/negative.js +1 -0
- package/knowledge/rule-fixtures/A02.insecure-random-js/positive.js +1 -0
- package/knowledge/rule-fixtures/A02.weak-hashing-md5/negative.py +1 -0
- package/knowledge/rule-fixtures/A02.weak-hashing-md5/positive.py +1 -0
- package/knowledge/rule-fixtures/A03.command-injection/negative.js +1 -0
- package/knowledge/rule-fixtures/A03.command-injection/positive.js +1 -0
- package/knowledge/rule-fixtures/A03.sql-injection/negative.js +1 -0
- package/knowledge/rule-fixtures/A03.sql-injection/positive.js +1 -0
- package/knowledge/rule-fixtures/A03.xss-innerhtml/negative.js +1 -0
- package/knowledge/rule-fixtures/A03.xss-innerhtml/positive.js +1 -0
- package/knowledge/rule-fixtures/A05.cors-wildcard/negative.js +1 -0
- package/knowledge/rule-fixtures/A05.cors-wildcard/positive.js +1 -0
- package/knowledge/rule-fixtures/A05.default-credentials/negative.js +1 -0
- package/knowledge/rule-fixtures/A05.default-credentials/positive.js +1 -0
- package/knowledge/rule-fixtures/A07.jwt-alg-none/negative.js +1 -0
- package/knowledge/rule-fixtures/A07.jwt-alg-none/positive.js +1 -0
- package/knowledge/rule-fixtures/A08.binary-formatter/negative.cs +1 -0
- package/knowledge/rule-fixtures/A08.binary-formatter/positive.cs +1 -0
- package/knowledge/rule-fixtures/A08.js-eval/negative.js +1 -0
- package/knowledge/rule-fixtures/A08.js-eval/positive.js +1 -0
- package/knowledge/rule-fixtures/A08.object-input-stream/negative.java +1 -0
- package/knowledge/rule-fixtures/A08.object-input-stream/positive.java +1 -0
- package/knowledge/schemas/disposition-register-v1.json +65 -0
- package/knowledge/schemas/recon-envelope-v1.json +198 -0
- package/knowledge/schemas/unified-finding-v1.json +72 -0
- package/knowledge/security-primitives-contract.md +301 -0
- package/knowledge/security-review-rule-map.yaml +107 -0
- package/knowledge/skills-registry.md +72 -0
- package/knowledge/task-size-classifier.md +103 -0
- package/knowledge/telemetry-schema.md +881 -0
- package/knowledge/test-automation-maturity.md +56 -0
- package/knowledge/test-automation-principles.md +71 -0
- package/knowledge/test-cadence-tradeoffs.md +68 -0
- package/knowledge/test-doubles.md +105 -0
- package/knowledge/test-file-indicators.md +22 -0
- package/knowledge/test-layer-gates.md +35 -0
- package/knowledge/test-matrix-examples/django-batch.md +24 -0
- package/knowledge/test-matrix-examples/dotnet-grpc-fronting-api.md +90 -0
- package/knowledge/test-matrix-examples/dotnet-http-consumer.md +131 -0
- package/knowledge/test-matrix-examples/react-node-spa.md +24 -0
- package/knowledge/test-matrix-examples/spring-boot-service.md +25 -0
- package/knowledge/test-matrix-examples/ssr-htmx.md +24 -0
- package/knowledge/test-organization.md +70 -0
- package/knowledge/test-pyramid.md +84 -0
- package/knowledge/test-refactoring.md +67 -0
- package/knowledge/test-review-division-of-labor.md +85 -0
- package/knowledge/test-smells.md +80 -0
- package/knowledge/test-stack-profiles/bdd-frameworks.md +235 -0
- package/knowledge/test-stack-profiles/django.md +13 -0
- package/knowledge/test-stack-profiles/dotnet.md +18 -0
- package/knowledge/test-stack-profiles/go.md +16 -0
- package/knowledge/test-stack-profiles/node.md +16 -0
- package/knowledge/test-stack-profiles/react.md +12 -0
- package/knowledge/test-stack-profiles/spring-boot.md +16 -0
- package/knowledge/test-stack-profiles/ssr-htmx.md +14 -0
- package/knowledge/test-stack-profiles/vue.md +12 -0
- package/knowledge/test-strategy.md +70 -0
- package/knowledge/testability-patterns.md +240 -0
- package/knowledge/testing-quadrants.md +44 -0
- package/knowledge/testing-techniques/approval.md +15 -0
- package/knowledge/testing-techniques/chaos.md +17 -0
- package/knowledge/testing-techniques/fuzz.md +15 -0
- package/knowledge/testing-techniques/property-based.md +15 -0
- package/knowledge/testing-techniques/schema-validation.md +15 -0
- package/knowledge/testing-techniques/screenshot.md +15 -0
- package/knowledge/three-phase-workflow.md +198 -0
- package/knowledge/value-patterns.md +55 -0
- package/knowledge/verification-mode.md +116 -0
- package/knowledge/virtual-service-libraries.md +75 -0
- package/knowledge/wave-consolidation-guidance.md +21 -0
- package/overrides/agents/Explore.md +15 -0
- package/overrides/agents/general-purpose.md +10 -0
- package/overrides/notes/autoship.md +6 -0
- package/overrides/notes/issues-from-assessment.md +3 -0
- package/overrides/notes/issues-from-plan.md +3 -0
- package/overrides/notes/mutation-night-watch.md +3 -0
- package/overrides/notes/mutation-testing.md +3 -0
- package/overrides/notes/pr.md +7 -0
- package/overrides/notes/project-init.md +6 -0
- package/overrides/notes/setup.md +13 -0
- package/overrides/notes/specs.md +3 -0
- package/overrides/skills/headless-run/SKILL.md +45 -0
- package/overrides/skills/upgrade/SKILL.md +30 -0
- package/overrides/skills/version/SKILL.md +25 -0
- package/package.json +36 -0
- package/scripts/authoring_digest.py +93 -0
- package/scripts/autoship_discover.py +121 -0
- package/scripts/autoship_group.py +409 -0
- package/scripts/autoship_proposals.py +494 -0
- package/scripts/autoship_queue.py +291 -0
- package/scripts/autoship_reclaim.py +495 -0
- package/scripts/build_jobs.py +108 -0
- package/scripts/build_rollback_point.py +240 -0
- package/scripts/build_slice_scope.py +157 -0
- package/scripts/build_wave.py +109 -0
- package/scripts/build_wave_reconcile.py +252 -0
- package/scripts/build_worktree_baseref.py +113 -0
- package/scripts/check_agent_scope.py +117 -0
- package/scripts/check_agent_tool_mapping.py +213 -0
- package/scripts/check_review_agent_mcp_tools.py +317 -0
- package/scripts/check_security_assessment_mcp_tools.py +165 -0
- package/scripts/checkpoint_abort.py +502 -0
- package/scripts/claude_setup_review.py +438 -0
- package/scripts/codebase_recon.py +556 -0
- package/scripts/coverage_config.py +623 -0
- package/scripts/coverage_delta_steering.py +330 -0
- package/scripts/coverage_discovery_dotnet.py +315 -0
- package/scripts/coverage_discovery_java.py +742 -0
- package/scripts/coverage_discovery_js.py +546 -0
- package/scripts/coverage_gap_ranking.py +556 -0
- package/scripts/coverage_readiness.py +455 -0
- package/scripts/coverage_report_parse.py +521 -0
- package/scripts/detect_bdd_convention.py +252 -0
- package/scripts/eval_ablation.py +376 -0
- package/scripts/gherkin_analysis_coverage_gate.py +306 -0
- package/scripts/gherkin_cross_feature_duplicate_titles_gate.py +173 -0
- package/scripts/gherkin_effectiveness_rollup.py +238 -0
- package/scripts/gherkin_failure_path_gate.py +206 -0
- package/scripts/gherkin_feature_merge.py +720 -0
- package/scripts/gherkin_stub_gate.py +163 -0
- package/scripts/gherkin_stub_merge.py +479 -0
- package/scripts/git_origin_host.py +88 -0
- package/scripts/install-java-static-analysis.py +110 -0
- package/scripts/issue_deps.py +74 -0
- package/scripts/lib/_bdd_markers.py +28 -0
- package/scripts/lib/_gherkin_text.py +93 -0
- package/scripts/lib/_vendored_tree.py +70 -0
- package/scripts/lib/autoship_state.py +397 -0
- package/scripts/lib/claude_md_guard.py +226 -0
- package/scripts/lib/deterministic_recon.py +446 -0
- package/scripts/lib/mcp_tool_grants.py +211 -0
- package/scripts/lib/plan_parse.py +386 -0
- package/scripts/lib/review_result.py +84 -0
- package/scripts/lib/review_roster.py +86 -0
- package/scripts/lib/session_log/__init__.py +34 -0
- package/scripts/lib/session_log/__pycache__/__init__.cpython-314.pyc +0 -0
- package/scripts/lib/session_log/__pycache__/records.cpython-314.pyc +0 -0
- package/scripts/lib/session_log/classify.py +231 -0
- package/scripts/lib/session_log/corrections.py +194 -0
- package/scripts/lib/session_log/discovery.py +108 -0
- package/scripts/lib/session_log/records.py +218 -0
- package/scripts/lib/session_log/redact.py +76 -0
- package/scripts/lib/session_log/signals.py +373 -0
- package/scripts/lib/session_report_downstream.py +614 -0
- package/scripts/lib/session_report_maintainer.py +1273 -0
- package/scripts/lib/session_report_shared.py +262 -0
- package/scripts/lib/settings_hook_guard.py +157 -0
- package/scripts/lib/slug.py +33 -0
- package/scripts/lib/stub_extractors/__init__.py +82 -0
- package/scripts/lib/stub_extractors/_common.py +328 -0
- package/scripts/lib/stub_extractors/csharp.py +19 -0
- package/scripts/lib/stub_extractors/go.py +173 -0
- package/scripts/lib/stub_extractors/java.py +18 -0
- package/scripts/lib/stub_extractors/jsts.py +126 -0
- package/scripts/mutation_stack_sections.py +149 -0
- package/scripts/mutation_yield_steering.py +345 -0
- package/scripts/orchestrator.py +895 -0
- package/scripts/plan_gherkin_export.py +227 -0
- package/scripts/plan_waves.py +208 -0
- package/scripts/pr_close_keyword_lint.py +108 -0
- package/scripts/progress_guardian.py +888 -0
- package/scripts/recon_inventory.py +273 -0
- package/scripts/review_findings_log.py +93 -0
- package/scripts/run_invariants.py +124 -0
- package/scripts/select_lenses.py +640 -0
- package/scripts/session_report.py +486 -0
- package/scripts/set_autocompact_env.py +221 -0
- package/scripts/ship_resume_guard.py +135 -0
- package/scripts/ship_review_gate.py +63 -0
- package/scripts/specs_convention_marker.py +103 -0
- package/scripts/test_improve_resume.py +277 -0
- package/scripts/test_review_mechanics.py +958 -0
- package/scripts/token_efficiency_review.py +322 -0
- package/scripts/verdict_scope.py +285 -0
- package/scripts/verify_gherkin_quality_critic_isolation.py +296 -0
- package/scripts/verify_tier.py +157 -0
- package/skills/adr-tools/SKILL.md +118 -0
- package/skills/agent-readiness/SKILL.md +105 -0
- package/skills/agent-readiness/ai_friendly_analyzers.py +326 -0
- package/skills/agent-readiness/scanner.py +441 -0
- package/skills/agent-readiness/scorecard.yaml +88 -0
- package/skills/api-design/SKILL.md +115 -0
- package/skills/apply-fixes/SKILL.md +171 -0
- package/skills/apply-test-doubles/SKILL.md +321 -0
- package/skills/artifact-lifecycle/SKILL.md +127 -0
- package/skills/autoship/SKILL.md +1124 -0
- package/skills/benchmark/SKILL.md +105 -0
- package/skills/branch-workflow/SKILL.md +89 -0
- package/skills/browse/SKILL.md +184 -0
- package/skills/browser-testing/SKILL.md +62 -0
- package/skills/browser-testing/references/playwright-patterns.md +216 -0
- package/skills/build/SKILL.md +422 -0
- package/skills/build/references/static-self-heal.md +245 -0
- package/skills/careful/SKILL.md +72 -0
- package/skills/cd-test-architecture/SKILL.md +371 -0
- package/skills/ci-debugging/SKILL.md +105 -0
- package/skills/co-evolution-audit/SKILL.md +269 -0
- package/skills/code-review/SKILL.md +1015 -0
- package/skills/code-review/examples/aggregated-sample.json +56 -0
- package/skills/code-review/examples/sample-report.md +41 -0
- package/skills/code-review/output-format.md +478 -0
- package/skills/code-review/scripts/activation.py +86 -0
- package/skills/code-review/scripts/change_impact.py +357 -0
- package/skills/code-review/scripts/change_shape.py +372 -0
- package/skills/code-review/scripts/change_size.py +212 -0
- package/skills/code-review/scripts/changed_file_list.py +141 -0
- package/skills/code-review/scripts/closing_pass.py +187 -0
- package/skills/code-review/scripts/consolidate.py +277 -0
- package/skills/code-review/scripts/contract_failure_report.py +185 -0
- package/skills/code-review/scripts/dispatch_reconcile.py +66 -0
- package/skills/code-review/scripts/dispatch_waves.py +164 -0
- package/skills/code-review/scripts/finding_signature.py +446 -0
- package/skills/code-review/scripts/ledger.py +283 -0
- package/skills/code-review/scripts/partition.py +169 -0
- package/skills/code-review/scripts/render_tiered_findings.py +274 -0
- package/skills/code-review/scripts/repo_invariants.py +1066 -0
- package/skills/code-review/scripts/review_context_pack.py +306 -0
- package/skills/code-review/scripts/review_round_log.py +345 -0
- package/skills/code-review/scripts/review_value_coverage.py +297 -0
- package/skills/code-review/scripts/validate_review_output.py +467 -0
- package/skills/code-review/sliced-mode.md +205 -0
- package/skills/competitive-analysis/SKILL.md +191 -0
- package/skills/context-loading-protocol/SKILL.md +157 -0
- package/skills/continue/SKILL.md +90 -0
- package/skills/cost-report/SKILL.md +178 -0
- package/skills/coverage-baseline/SKILL.md +335 -0
- package/skills/coverage-baseline/references/multi-project-discovery.md +202 -0
- package/skills/coverage-delta/SKILL.md +181 -0
- package/skills/coverage-delta/references/mutation-gate.md +70 -0
- package/skills/design-doc/SKILL.md +95 -0
- package/skills/design-interrogation/SKILL.md +89 -0
- package/skills/design-it-twice/SKILL.md +91 -0
- package/skills/docker-image-audit/SKILL.md +108 -0
- package/skills/docker-image-audit/references/install-guide.md +64 -0
- package/skills/docker-image-audit/references/report-template.md +73 -0
- package/skills/docker-image-create/SKILL.md +185 -0
- package/skills/domain-analysis/SKILL.md +183 -0
- package/skills/domain-driven-design/SKILL.md +194 -0
- package/skills/exploratory-testing/SKILL.md +108 -0
- package/skills/explore/SKILL.md +51 -0
- package/skills/farley-score/SKILL.md +165 -0
- package/skills/feature-file-validation/SKILL.md +78 -0
- package/skills/feature-file-validation/references/validation-rules.md +115 -0
- package/skills/feedback-learning/SKILL.md +414 -0
- package/skills/fix/SKILL.md +450 -0
- package/skills/freeze/SKILL.md +68 -0
- package/skills/frontend-architecture/SKILL.md +113 -0
- package/skills/gherkin-derive/SKILL.md +630 -0
- package/skills/gherkin-public/SKILL.md +266 -0
- package/skills/governance-compliance/SKILL.md +150 -0
- package/skills/guard/SKILL.md +75 -0
- package/skills/handoff/SKILL.md +139 -0
- package/skills/handoff/references/summary-templates.md +242 -0
- package/skills/harness-audit/SKILL.md +751 -0
- package/skills/harness-audit/scripts/lesson_validate.py +386 -0
- package/skills/harness-audit/scripts/redundancy_criterion.py +188 -0
- package/skills/headless-run/SKILL.md +45 -0
- package/skills/headless-run/scripts/isolated_dispatch.py +381 -0
- package/skills/help/SKILL.md +72 -0
- package/skills/hexagonal-architecture/SKILL.md +85 -0
- package/skills/human-oversight-protocol/SKILL.md +224 -0
- package/skills/issues-from-assessment/SKILL.md +223 -0
- package/skills/issues-from-plan/SKILL.md +133 -0
- package/skills/legacy-code/SKILL.md +132 -0
- package/skills/mermaid-diagramming/SKILL.md +120 -0
- package/skills/mutation-night-watch/SKILL.md +154 -0
- package/skills/mutation-night-watch/references/scheduling.md +135 -0
- package/skills/mutation-testing/SKILL.md +396 -0
- package/skills/mutation-testing/references/languages/csharp-stryker-net.md +676 -0
- package/skills/mutation-testing/references/languages/go-go-mutesting.md +95 -0
- package/skills/mutation-testing/references/languages/java-pitest.md +77 -0
- package/skills/mutation-testing/references/languages/javascript-stryker.md +188 -0
- package/skills/mutation-testing/references/languages/python-mutmut.md +97 -0
- package/skills/mutation-testing/references/time-estimation.md +34 -0
- package/skills/mutation-testing/references/tool-detection.md +15 -0
- package/skills/mutation-testing/references/workflow-callers.md +23 -0
- package/skills/mutation-testing/scripts/__pycache__/xunit_v3_feature_detector.cpython-314.pyc +0 -0
- package/skills/mutation-testing/scripts/csharp_stryker_net_slice_runner.py +635 -0
- package/skills/mutation-testing/scripts/csharp_stryker_net_status_loop.py +525 -0
- package/skills/mutation-testing/scripts/csharp_stryker_net_wrapper.py +681 -0
- package/skills/mutation-testing/scripts/mutation_baseline_reuse.py +292 -0
- package/skills/mutation-testing/scripts/mutation_exclude_policy.py +268 -0
- package/skills/mutation-testing/scripts/mutation_feasibility_gate.py +463 -0
- package/skills/mutation-testing/scripts/mutation_kill_headless.py +331 -0
- package/skills/mutation-testing/scripts/mutation_kill_insert.py +199 -0
- package/skills/mutation-testing/scripts/mutation_kill_insert_python.py +150 -0
- package/skills/mutation-testing/scripts/mutation_kill_loop.py +869 -0
- package/skills/mutation-testing/scripts/mutation_kill_loop_python.py +949 -0
- package/skills/mutation-testing/scripts/mutation_kill_retry.py +592 -0
- package/skills/mutation-testing/scripts/mutation_kill_shared.py +620 -0
- package/skills/mutation-testing/scripts/mutation_nightwatch.py +462 -0
- package/skills/mutation-testing/scripts/mutation_nightwatch_stacks.py +425 -0
- package/skills/mutation-testing/scripts/mutation_report.py +743 -0
- package/skills/mutation-testing/scripts/mutation_report_cli.py +175 -0
- package/skills/mutation-testing/scripts/mutation_safety_gate.py +69 -0
- package/skills/mutation-testing/scripts/stryker_shard_pipeline.py +847 -0
- package/skills/mutation-testing/scripts/stryker_shard_setup.py +440 -0
- package/skills/mutation-testing/scripts/stryker_timeout_retry.py +142 -0
- package/skills/mutation-testing/scripts/xunit_v3_feature_detector.py +341 -0
- package/skills/performance-benchmark/SKILL.md +174 -0
- package/skills/performance-benchmark/examples/report-format.md +43 -0
- package/skills/performance-benchmark/references/benchmark-script.md +169 -0
- package/skills/performance-metrics/SKILL.md +265 -0
- package/skills/plan/SKILL.md +199 -0
- package/skills/plan/references/gherkin-persistence.md +43 -0
- package/skills/plan/references/plan-template.md +182 -0
- package/skills/pr/SKILL.md +289 -0
- package/skills/pr/scripts/gate_retry_state.py +368 -0
- package/skills/project-init/README.md +141 -0
- package/skills/project-init/SKILL.md +1197 -0
- package/skills/project-init/evals/evals.json +200 -0
- package/skills/project-init/references/capability-tools.md +55 -0
- package/skills/project-init/references/configs.md +221 -0
- package/skills/property-based-testing/SKILL.md +121 -0
- package/skills/property-based-testing/fixtures/invariant_fixture.py +15 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/README.md +42 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/LICENSE +21 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/README.md +263 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/lib/cjs/fast-check.d.ts +5165 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/lib/cjs/fast-check.js +12147 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/lib/cjs/package.json +3 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/lib/cjs/types57/fast-check.d.ts +5165 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/lib/fast-check.d.ts +5165 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/lib/fast-check.js +12011 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/lib/rolldown-runtime-D7D4PA-g.js +13 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/lib/types57/fast-check.d.ts +5165 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/package.json +94 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/LICENSE +21 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/README.md +168 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/RandomGenerator-DcXj09Ch.d.ts +14 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/distribution/uniformBigInt.d.ts +15 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/distribution/uniformBigInt.js +38 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/distribution/uniformFloat32.d.ts +15 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/distribution/uniformFloat32.js +18 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/distribution/uniformFloat64.d.ts +15 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/distribution/uniformFloat64.js +22 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/distribution/uniformInt.d.ts +15 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/distribution/uniformInt.js +134 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/RandomGenerator-DcXj09Ch.d.ts +14 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/distribution/uniformBigInt.d.ts +15 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/distribution/uniformBigInt.js +37 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/distribution/uniformFloat32.d.ts +15 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/distribution/uniformFloat32.js +17 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/distribution/uniformFloat64.d.ts +15 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/distribution/uniformFloat64.js +21 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/distribution/uniformInt.d.ts +15 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/distribution/uniformInt.js +133 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/generator/congruential32.d.ts +7 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/generator/congruential32.js +44 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/generator/mersenne.d.ts +7 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/generator/mersenne.js +90 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/generator/xoroshiro128plus.d.ts +7 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/generator/xoroshiro128plus.js +80 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/generator/xorshift128plus.d.ts +7 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/generator/xorshift128plus.js +78 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/package.json +3 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/types/JumpableRandomGenerator.d.ts +16 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/types/JumpableRandomGenerator.js +0 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/types/RandomGenerator.d.ts +2 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/types/RandomGenerator.js +0 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/utils/generateN.d.ts +6 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/utils/generateN.js +8 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/utils/purify.d.ts +12 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/utils/purify.js +9 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/utils/skipN.d.ts +6 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/utils/skipN.js +6 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/generator/congruential32.d.ts +7 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/generator/congruential32.js +46 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/generator/mersenne.d.ts +7 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/generator/mersenne.js +92 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/generator/xoroshiro128plus.d.ts +7 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/generator/xoroshiro128plus.js +82 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/generator/xorshift128plus.d.ts +7 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/generator/xorshift128plus.js +80 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/types/JumpableRandomGenerator.d.ts +16 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/types/JumpableRandomGenerator.js +0 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/types/RandomGenerator.d.ts +2 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/types/RandomGenerator.js +0 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/utils/generateN.d.ts +6 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/utils/generateN.js +9 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/utils/purify.d.ts +12 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/utils/purify.js +10 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/utils/skipN.d.ts +6 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/utils/skipN.js +7 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/package.json +133 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/package-lock.json +1179 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/package.json +14 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/roundtrip.js +29 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/roundtrip.properties.test.js +16 -0
- package/skills/property-based-testing/fixtures/no_property_fixture.py +10 -0
- package/skills/property-based-testing/fixtures/roundtrip_fixture.py +16 -0
- package/skills/property-based-testing/references/languages/javascript.md +54 -0
- package/skills/property-based-testing/scripts/detect_and_dispatch.py +80 -0
- package/skills/property-based-testing/scripts/hypothesis_scaffold.py +276 -0
- package/skills/proxy-resilience/SKILL.md +84 -0
- package/skills/quality-gate-pipeline/SKILL.md +184 -0
- package/skills/quality-targets-converge/SKILL.md +254 -0
- package/skills/repo-review/SKILL.md +159 -0
- package/skills/report-pdf/SKILL.md +66 -0
- package/skills/review/SKILL.md +47 -0
- package/skills/review-agent/SKILL.md +152 -0
- package/skills/review-summary/SKILL.md +73 -0
- package/skills/run-report/SKILL.md +70 -0
- package/skills/semantic-duplication-scan/SKILL.md +337 -0
- package/skills/semantic-scan/SKILL.md +53 -0
- package/skills/semgrep-analyze/SKILL.md +139 -0
- package/skills/setup/SKILL.md +1122 -0
- package/skills/ship/SKILL.md +240 -0
- package/skills/source-verification/SKILL.md +210 -0
- package/skills/source-verification/scripts/claim_extractor.py +155 -0
- package/skills/specs/.size-baseline.json +4 -0
- package/skills/specs/SKILL.md +243 -0
- package/skills/specs/references/completeness-checklist.md +83 -0
- package/skills/specs/references/extraction.md +58 -0
- package/skills/specs/references/glossary.md +59 -0
- package/skills/specs/references/persistence.md +115 -0
- package/skills/specs/references/predictability-check.md +77 -0
- package/skills/static-analysis-integration/SKILL.md +235 -0
- package/skills/static-analysis-integration/adapters/_envelope.py +26 -0
- package/skills/static-analysis-integration/adapters/jscpd-adapter.py +66 -0
- package/skills/static-analysis-integration/adapters/lizard-adapter.py +81 -0
- package/skills/static-analysis-integration/adapters/mypy-adapter.py +50 -0
- package/skills/static-analysis-integration/adapters/mypy-src-layout.py +93 -0
- package/skills/static-analysis-integration/adapters/security-review-adapter.py +212 -0
- package/skills/static-analysis-integration/maintenance.md +23 -0
- package/skills/static-analysis-integration/references/language-setup.md +228 -0
- package/skills/static-analysis-integration/references/sarif-parser.md +124 -0
- package/skills/static-analysis-integration/references/security-review-adapter.md +118 -0
- package/skills/static-analysis-integration/references/tool-configs.md +617 -0
- package/skills/static-analysis-integration/rulesets/pmd-quickstart.xml +24 -0
- package/skills/stryker-xunit-v2-shim/SKILL.md +274 -0
- package/skills/stryker-xunit-v2-shim/references/shim-howto.md +256 -0
- package/skills/stryker-xunit-v2-shim/scripts/generate_shim.py +143 -0
- package/skills/systematic-debugging/SKILL.md +130 -0
- package/skills/telemetry/SKILL.md +75 -0
- package/skills/test-audit-disable/SKILL.md +129 -0
- package/skills/test-design/SKILL.md +177 -0
- package/skills/test-design/scripts/__pycache__/internal_double_detector.cpython-314.pyc +0 -0
- package/skills/test-design/scripts/internal_double_detector.py +631 -0
- package/skills/test-design-advisor/SKILL.md +166 -0
- package/skills/test-driven-development/SKILL.md +169 -0
- package/skills/test-health/SKILL.md +262 -0
- package/skills/test-improve/SKILL.md +239 -0
- package/skills/test-improve/references/phase-0-approach-contract.md +228 -0
- package/skills/test-improve/references/phase-1-analyze.md +131 -0
- package/skills/test-improve/references/phase-2-baseline.md +121 -0
- package/skills/test-improve/references/phase-3-derive-gherkin.md +53 -0
- package/skills/test-improve/references/phase-4-plan-fixes.md +34 -0
- package/skills/test-improve/references/phase-5-improve.md +215 -0
- package/skills/test-improve/references/phase-6-refactor-decision.md +45 -0
- package/skills/test-improve/references/phase-7-refactor.md +44 -0
- package/skills/test-improve/references/phase-8-validate.md +66 -0
- package/skills/test-improve/references/phase-9-close-out-prompt.md +11 -0
- package/skills/test-improve/references/phase-9-report.md +62 -0
- package/skills/test-improve/references/review-loop.md +92 -0
- package/skills/test-improve/templates/executive-summary.md +123 -0
- package/skills/threat-modeling/SKILL.md +108 -0
- package/skills/triage/SKILL.md +211 -0
- package/skills/ubiquitous-language/SKILL.md +192 -0
- package/skills/ubiquitous-language/scripts/collect_domain_signals.py +300 -0
- package/skills/unfreeze/SKILL.md +37 -0
- package/skills/upgrade/SKILL.md +31 -0
- package/skills/upgrade/scripts/check_version_drift.py +113 -0
- package/skills/upgrade/scripts/enable_autoupdate.py +149 -0
- package/skills/version/SKILL.md +25 -0
- package/sync/__pycache__/sync_upstream.cpython-314.pyc +0 -0
- package/sync/sync_upstream.py +293 -0
- package/templates/ACCEPTED-RISKS.md.tmpl +46 -0
- package/templates/agents/agent-template.md +151 -0
- package/templates/agents/angular-testing.md +66 -0
- package/templates/agents/csharp-quality.md +63 -0
- package/templates/agents/esm-enforcer.md +52 -0
- package/templates/agents/front-end-testing.md +65 -0
- package/templates/agents/go-quality.md +65 -0
- package/templates/agents/python-quality.md +62 -0
- package/templates/agents/react-testing.md +61 -0
- package/templates/agents/ts-enforcer.md +60 -0
- package/templates/agents/twelve-factor-audit.md +49 -0
- package/tools/entropy-check.py +250 -0
- package/tools/model-hash-verify.py +213 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# AI-Friendly Repository Guidelines
|
|
2
|
+
|
|
3
|
+
Rubric of repo conventions that improve Claude Code's effectiveness. Canonical
|
|
4
|
+
source for the `/agent-readiness` criteria `D5_claude_md_size`,
|
|
5
|
+
`D6_layered_context`, `D7_reference_implementation` and
|
|
6
|
+
`B5_composite_check_command`; the scanner's evidence strings link to the anchors
|
|
7
|
+
below. Other agents (`claude-setup-review`, `setup`) can cite this file instead
|
|
8
|
+
of re-describing the rubric.
|
|
9
|
+
|
|
10
|
+
These conventions are heuristics: they measure how cheaply an agent can load the
|
|
11
|
+
right context and verify its own work, not code quality. The scanner audits only;
|
|
12
|
+
it never edits the target repo.
|
|
13
|
+
|
|
14
|
+
## Layered Context Architecture
|
|
15
|
+
|
|
16
|
+
Agents pay for every line of always-loaded context and for every wrong guess made
|
|
17
|
+
without it. Keep the always-loaded layer small and push detail down to where it
|
|
18
|
+
applies.
|
|
19
|
+
|
|
20
|
+
- **Keep the root `CLAUDE.md` short (about 200 lines or fewer).** Every session
|
|
21
|
+
loads it in full; past the ceiling, rules compete for attention and later ones
|
|
22
|
+
are followed less reliably. Scored by `D5_claude_md_size`.
|
|
23
|
+
- **Layer context hierarchically.** Put directory-specific rules in nested
|
|
24
|
+
`CLAUDE.md` files or `.claude/rules/*.md` so they load only when that area is
|
|
25
|
+
touched. Scored by `D6_layered_context`.
|
|
26
|
+
- **Move procedures and reference material out of `CLAUDE.md`.** Link to skills,
|
|
27
|
+
knowledge files or docs loaded on demand rather than inlining them.
|
|
28
|
+
- **Name a canonical reference implementation.** Point at one well-made module or
|
|
29
|
+
test as the pattern to copy; agents imitate what they are shown. Flagged for
|
|
30
|
+
human review as `D7_reference_implementation` because whether the pointer is
|
|
31
|
+
well chosen is a judgment call.
|
|
32
|
+
|
|
33
|
+
## Deterministic Verification & Fast Feedback Loops
|
|
34
|
+
|
|
35
|
+
An agent can only converge on a correct change if it can check its work quickly
|
|
36
|
+
and get the same answer every time.
|
|
37
|
+
|
|
38
|
+
- **Expose one composite check command.** A single `check`, `verify`, `ci` or
|
|
39
|
+
`all` target that runs lint and tests lets the agent verify in one step and
|
|
40
|
+
matches what CI runs. Scored by `B5_composite_check_command`.
|
|
41
|
+
- **Make single-target test runs possible.** Running one test file or test by
|
|
42
|
+
name keeps the inner loop seconds long (deferred criterion
|
|
43
|
+
`T4_single_command`).
|
|
44
|
+
- **Prefer deterministic checks over model judgment.** A linter, type checker or
|
|
45
|
+
test suite gives a binary answer; use them as the gate before any review agent.
|
|
46
|
+
- **Keep the loop fast.** Slow suites get skipped or truncated by agents;
|
|
47
|
+
split slow integration tests from the fast default path.
|
|
48
|
+
|
|
49
|
+
## Navigable Repository Layout
|
|
50
|
+
|
|
51
|
+
Agents find code by searching names and paths. A predictable layout reduces the
|
|
52
|
+
reads needed to locate the right file.
|
|
53
|
+
|
|
54
|
+
- **Colocate or mirror tests with source.** A test next to (or at a mirrored path
|
|
55
|
+
of) the code it covers is found in one lookup (follow-up criterion, not yet
|
|
56
|
+
scored).
|
|
57
|
+
- **Keep directory depth shallow.** Deep nesting hides files and inflates path
|
|
58
|
+
tokens (follow-up criterion, not yet scored).
|
|
59
|
+
- **Use descriptive, conventional names** for files and directories so a grep on
|
|
60
|
+
the domain term lands on the right module.
|
|
61
|
+
- **Exclude generated and vendored trees** from search paths so agents do not
|
|
62
|
+
wander into build output.
|
|
63
|
+
|
|
64
|
+
## Source
|
|
65
|
+
|
|
66
|
+
Synthesized from Anthropic's published Claude Code guidance on memory files and
|
|
67
|
+
verification loops and from this repo's own conventions. Tracked in issue #2178.
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Architecture Assessment Patterns
|
|
2
|
+
|
|
3
|
+
Reference file for the arch-review agent. Read this before starting
|
|
4
|
+
analysis to apply architectural compliance patterns.
|
|
5
|
+
|
|
6
|
+
## Exploration Patterns
|
|
7
|
+
|
|
8
|
+
Map the architectural landscape before detecting issues.
|
|
9
|
+
|
|
10
|
+
### Discovery sequence
|
|
11
|
+
|
|
12
|
+
1. **ADRs**: Glob for `**/adr/**`, `**/adrs/**`, `**/decisions/**`, `docs/adr*`
|
|
13
|
+
2. **Architecture docs**: Glob for `docs/architecture.md`, `docs/arch*.md`, `ARCHITECTURE.md`, `README.md`
|
|
14
|
+
3. **Layer definitions**: Glob for `**/domain/**`, `**/application/**`, `**/infrastructure/**`, `**/presentation/**`, `**/api/**`, `**/ui/**`
|
|
15
|
+
4. **Import patterns**: Grep for cross-layer imports
|
|
16
|
+
|
|
17
|
+
If no architecture documentation and no discernible layered structure exists, return skip.
|
|
18
|
+
|
|
19
|
+
## ADR Compliance Checks
|
|
20
|
+
|
|
21
|
+
| Check | How to detect |
|
|
22
|
+
|-------|---------------|
|
|
23
|
+
| Prohibited library | ADR says "do not use X"; code imports X |
|
|
24
|
+
| Mandated pattern bypass | ADR requires event sourcing/hexagonal ports; code uses direct calls |
|
|
25
|
+
| Unreflected reversal | ADR decision reversed in code but ADR status not `Superseded` |
|
|
26
|
+
|
|
27
|
+
## Layer Boundary Rules
|
|
28
|
+
|
|
29
|
+
Standard layered architecture enforces dependency direction:
|
|
30
|
+
`presentation → application → domain ← infrastructure`
|
|
31
|
+
|
|
32
|
+
| Violation | Signal |
|
|
33
|
+
|-----------|--------|
|
|
34
|
+
| Infrastructure → Domain | ORM entity imported by domain service |
|
|
35
|
+
| Domain → Application | Domain layer importing application service types |
|
|
36
|
+
| Domain → Infrastructure | Domain importing database clients, HTTP clients |
|
|
37
|
+
| Presentation → Domain direct | UI importing domain internals, bypassing use cases |
|
|
38
|
+
| Cross-context direct | One bounded context importing domain types from another |
|
|
39
|
+
|
|
40
|
+
Flag: the specific import statement, source file, target file, and which boundary is crossed.
|
|
41
|
+
|
|
42
|
+
## Dependency Direction Checks
|
|
43
|
+
|
|
44
|
+
| Check | Signal |
|
|
45
|
+
|-------|--------|
|
|
46
|
+
| New circular dependency | Module A imports B, B imports A (where previously unidirectional) |
|
|
47
|
+
| Leaf node violation | A utility/shared module now depends on core business logic |
|
|
48
|
+
| Unwrapped third-party | Third-party library used directly in domain/application layer without interface |
|
|
49
|
+
|
|
50
|
+
## Pattern Consistency Checks
|
|
51
|
+
|
|
52
|
+
Flag when new code diverges from established patterns for the same concern:
|
|
53
|
+
|
|
54
|
+
| Concern | Inconsistency signal |
|
|
55
|
+
|---------|---------------------|
|
|
56
|
+
| Data access | Repository pattern used elsewhere, direct DB access in new code |
|
|
57
|
+
| Cross-context communication | Events used elsewhere, direct calls in new code |
|
|
58
|
+
| Error handling | Result types used elsewhere, exceptions in new code (or vice versa) |
|
|
59
|
+
| Duplicate abstractions | Two repository base classes, two HTTP client wrappers |
|
|
60
|
+
|
|
61
|
+
## Prohibited Practice Detection
|
|
62
|
+
|
|
63
|
+
Grep for patterns that architecture docs explicitly ban:
|
|
64
|
+
|
|
65
|
+
| Pattern | When prohibited |
|
|
66
|
+
|---------|----------------|
|
|
67
|
+
| `new` infrastructure objects in domain | If docs prohibit constructor coupling |
|
|
68
|
+
| Direct `fetch`/`axios`/`HttpClient` outside adapter layer | If docs mandate HTTP abstraction |
|
|
69
|
+
| Direct DB client calls outside repository layer | If docs mandate repository pattern |
|
|
70
|
+
|
|
71
|
+
## Database Change Safety
|
|
72
|
+
|
|
73
|
+
When the changeset includes schema migrations or DDL, a change must keep every release deployable and reversible. Fuller treatment: `knowledge/database-change-management.md`.
|
|
74
|
+
|
|
75
|
+
| Signal | Risk | Fix direction |
|
|
76
|
+
|--------|------|---------------|
|
|
77
|
+
| `DROP`/`RENAME` of a column/table the same release's app still reads or writes | Breaks running instances mid-rollout; blocks rollback | Split into expand/contract across releases (add new, dual-write, switch reads, drop later) |
|
|
78
|
+
| Roll-forward migration with no paired roll-back script | The release cannot be rolled back | Author and test the reversal |
|
|
79
|
+
| New `NOT NULL` column or constraint added without a backfill step | Migration fails or long-locks on real data | Add nullable → backfill → enforce in a later release |
|
|
80
|
+
| App code and schema assumed to deploy atomically | Old app instances error mid-rollout | Make the change backward-compatible (expand first) |
|
|
81
|
+
| Manual SQL in a runbook instead of a versioned migration script | No audit trail; not reproducible; drifts across environments | Move into a versioned migration in version control |
|
|
82
|
+
|
|
83
|
+
Flag the migration file and the coupled application code. Scope to migration/DDL changes only; ordinary data-access code is out of scope here.
|
|
84
|
+
|
|
85
|
+
## MCP-Enhanced Analysis
|
|
86
|
+
|
|
87
|
+
If a code knowledge graph MCP is available (e.g., GitNexus):
|
|
88
|
+
|
|
89
|
+
| Tool | Purpose |
|
|
90
|
+
|------|---------|
|
|
91
|
+
| `list_repos` | Discover ecosystem — what other repos exist |
|
|
92
|
+
| `query` | Map cross-repo dependencies — who calls this service |
|
|
93
|
+
| `context` | 360-degree view of key entry points |
|
|
94
|
+
| `impact` | Quantify blast radius of architectural changes |
|
|
95
|
+
|
|
96
|
+
Fall back to local Grep/Read if unavailable.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Artifact Lifecycle States
|
|
2
|
+
|
|
3
|
+
This file defines the lifecycle state model for tracked plugin artifacts (skills,
|
|
4
|
+
agents). States are maintained in `~/.claude/metrics/artifact-usage.json`
|
|
5
|
+
(home-scoped, never a project-scoped path) and consumed by the
|
|
6
|
+
`/artifact-lifecycle` skill to report and propose transitions.
|
|
7
|
+
|
|
8
|
+
## States
|
|
9
|
+
|
|
10
|
+
### active
|
|
11
|
+
An artifact used within the last 30 days. No lifecycle transition is needed.
|
|
12
|
+
|
|
13
|
+
### stale
|
|
14
|
+
An artifact **not used in more than 30 days** (i.e., `days_since_used >= 30` and
|
|
15
|
+
`< 90`). Stale artifacts are candidates for disabling — add them to
|
|
16
|
+
`## Disabled Skills` in project `CLAUDE.md` so they do not load into context
|
|
17
|
+
until deliberately re-enabled.
|
|
18
|
+
|
|
19
|
+
### archived
|
|
20
|
+
An artifact **not used in more than 90 days** (i.e., `days_since_used >= 90`).
|
|
21
|
+
Archive candidates should be evaluated for permanent removal from the active set.
|
|
22
|
+
|
|
23
|
+
## Lifecycle Thresholds
|
|
24
|
+
|
|
25
|
+
| State | Threshold |
|
|
26
|
+
|-------|-----------|
|
|
27
|
+
| active | `last_used_at` < 30 days ago |
|
|
28
|
+
| stale | `last_used_at` >= 30 days ago (and < 90 days) |
|
|
29
|
+
| archived | `last_used_at` >= 90 days ago |
|
|
30
|
+
|
|
31
|
+
Both boundaries are **inclusive**: an artifact last used exactly 30 days ago is
|
|
32
|
+
stale; an artifact last used exactly 90 days ago is an archive candidate.
|
|
33
|
+
|
|
34
|
+
## Pinned Exemption
|
|
35
|
+
|
|
36
|
+
Artifacts listed under `## Pinned Skills` in `CLAUDE.md` are exempt from all
|
|
37
|
+
lifecycle transitions regardless of `last_used_at`. A pinned artifact is excluded
|
|
38
|
+
from the Stale Skills and Archive Candidates sections of `/artifact-lifecycle`
|
|
39
|
+
output and is never proposed for disabling or removal.
|
|
40
|
+
|
|
41
|
+
## ~/.claude/metrics/artifact-usage.json Schema
|
|
42
|
+
|
|
43
|
+
```json
|
|
44
|
+
{
|
|
45
|
+
"<artifact-name>": {
|
|
46
|
+
"use_count": 5,
|
|
47
|
+
"last_used_at": "2026-06-01T12:00:00Z",
|
|
48
|
+
"lifecycle": "active"
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
The `lifecycle` field is initialised to `"active"` on first write and preserved
|
|
54
|
+
on subsequent upserts — a manually-set `"stale"` value is not overwritten when
|
|
55
|
+
the artifact is next used. The `/artifact-lifecycle` skill computes effective
|
|
56
|
+
lifecycle from `last_used_at` rather than from this stored field, so the stored
|
|
57
|
+
value is informational only.
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Continuous Delivery Maturity Model
|
|
2
|
+
|
|
3
|
+
Reference for assessing and improving an organization's delivery capability.
|
|
4
|
+
Source: *Continuous Delivery* (Humble & Farley) Ch.15. Use it to locate where a
|
|
5
|
+
team is, pick the one area worth improving next, and define the outcome that
|
|
6
|
+
proves the improvement landed.
|
|
7
|
+
|
|
8
|
+
This measures **delivery capability** (can this team release small changes safely
|
|
9
|
+
and often?). It is a *different axis* from the agent-readiness scorecard
|
|
10
|
+
(`skills/agent-readiness/`), which measures how ready a repo is for AI-agent
|
|
11
|
+
work. A repo can score high on one and low on the other; assess them separately.
|
|
12
|
+
|
|
13
|
+
## The six practice areas
|
|
14
|
+
|
|
15
|
+
Maturity is read per area, not as a single number — a team is usually uneven.
|
|
16
|
+
|
|
17
|
+
| Practice area | What it covers |
|
|
18
|
+
|---------------|----------------|
|
|
19
|
+
| **Build management & CI** | Build automation, trunk-based CI, fast feedback, build discipline |
|
|
20
|
+
| **Environments & deployment** | Automated provisioning, identical deploy everywhere, release strategies, rollback |
|
|
21
|
+
| **Release management & compliance** | Change/approval flow, traceability, audit through the pipeline |
|
|
22
|
+
| **Testing** | Automated test strategy across the pyramid, deterministic gates |
|
|
23
|
+
| **Data management** | Scripted, versioned, reversible migrations; managed test data |
|
|
24
|
+
| **Configuration management** | Everything in version control; config per environment; secrets handling |
|
|
25
|
+
|
|
26
|
+
## The five levels
|
|
27
|
+
|
|
28
|
+
| Level | Name | Signal |
|
|
29
|
+
|-------|------|--------|
|
|
30
|
+
| **3** | Optimizing | Teams continuously improve the process; cycle time and stability are measured and trending down/up |
|
|
31
|
+
| **2** | Quantitatively managed | Process metrics gathered and used to make decisions; risk understood |
|
|
32
|
+
| **1** | Consistent | Automated processes applied across the whole lifecycle, used by everyone |
|
|
33
|
+
| **0** | Repeatable | Process documented and partly automated; results repeatable |
|
|
34
|
+
| **−1** | Regressive | Processes ad hoc, manual, unrepeatable; results unpredictable |
|
|
35
|
+
|
|
36
|
+
Score each of the six areas against the five levels to get a profile, not a grade.
|
|
37
|
+
|
|
38
|
+
## How to improve (the Deming cycle)
|
|
39
|
+
|
|
40
|
+
1. **Map the value stream** — commit to release — and find the most painful /
|
|
41
|
+
slowest area. Improve *that*, not everything at once.
|
|
42
|
+
2. **Define acceptance criteria** for the improvement (a measurable outcome).
|
|
43
|
+
3. **Implement** the smallest change that moves the area up a level.
|
|
44
|
+
4. **Measure** against the criteria; **retrospect**; roll the change out
|
|
45
|
+
incrementally. Repeat. Never try to jump all areas to the top level at once.
|
|
46
|
+
|
|
47
|
+
## The outcomes to target
|
|
48
|
+
|
|
49
|
+
The model is a means; these are the ends. Track them directly:
|
|
50
|
+
|
|
51
|
+
| Metric | What it tells you |
|
|
52
|
+
|--------|-------------------|
|
|
53
|
+
| **Cycle time** (commit → releasable) | The primary global signal; the Theory-of-Constraints lens for finding the bottleneck |
|
|
54
|
+
| **Deployment frequency** | How small and frequent changes are |
|
|
55
|
+
| **Change failure rate** | Quality of the gate; stability of releases |
|
|
56
|
+
| **Mean time to restore (MTTR)** | Strength of rollback / recovery |
|
|
57
|
+
|
|
58
|
+
The last three plus lead time are the DORA four key metrics; cycle time is the
|
|
59
|
+
internal lens that explains them.
|
|
60
|
+
|
|
61
|
+
## Guiding principles
|
|
62
|
+
|
|
63
|
+
- **Prefer automation over documentation.** An automated script is executable
|
|
64
|
+
documentation that must work and stays current; a document proving you did
|
|
65
|
+
something doesn't guarantee you did.
|
|
66
|
+
- **Compliance *through* the pipeline, not against it.** The pipeline is the best
|
|
67
|
+
audit trail — lock down privileged environments, require approvals, and build
|
|
68
|
+
authorization/auditing into the deploy path. Build binaries once and hash them
|
|
69
|
+
to prove production matches source.
|
|
70
|
+
- **Release as often as possible** — at least every iteration, even with no users
|
|
71
|
+
yet. "If it hurts, do it more frequently." Iterative, incremental delivery is
|
|
72
|
+
the core of risk management.
|
|
73
|
+
- **Don't work in silos.** Favor cross-functional teams; treat change management
|
|
74
|
+
as risk management with a remediation (back-out) plan and an acceptance test per
|
|
75
|
+
change.
|
|
76
|
+
|
|
77
|
+
## How this connects to the rest of the toolkit
|
|
78
|
+
|
|
79
|
+
- **`deployment-pipeline.md`** / **`release-strategies.md`** / **`database-change-management.md`**
|
|
80
|
+
— the practices that move the environments, deployment, and data areas up the model.
|
|
81
|
+
- **`cd-test-architecture.md`** — the testing area's gate.
|
|
82
|
+
- **`skills/agent-readiness/`** — the orthogonal axis (AI-agent readiness); cross-reference, don't conflate.
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
# CD Test Architecture
|
|
2
|
+
|
|
3
|
+
Reference file for the `cd-test-architecture` skill and the `test-design-advisor` skill. Defines a test architecture aligned to a Continuous Delivery pipeline: **fast, deterministic tests, with minimal tooling, that fully validate behavior — including how a component interacts with other services — and run in CI without configuring the rest of the system the component depends on.**
|
|
4
|
+
|
|
5
|
+
Source vocabulary: MinimumCD Practice Guide — Test Types (beyond.minimumcd.org/docs/testing/test-types/) and Applied Testing Strategies (beyond.minimumcd.org/docs/testing/applied-testing-strategies/). Component-specific patterns are in `component-test-patterns.md`.
|
|
6
|
+
|
|
7
|
+
Core principle: **a pre-merge gate may contain only deterministic tests.** A test that depends on a system the team doesn't control — or that must be configured to run — is non-deterministic and belongs out of the merge path. The way to keep behavior coverage in the gate anyway is to replace uncontrolled systems with test doubles, and to keep those doubles honest with a separate validation loop.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## The Six Test Types
|
|
12
|
+
|
|
13
|
+
| Type | Verifies | Dependencies | Deterministic? | Pre-merge gate? | Pipeline stage |
|
|
14
|
+
|------|----------|--------------|----------------|-----------------|----------------|
|
|
15
|
+
| **Static analysis** | Non-running code: security, complexity, best-practice | none | yes | **yes** | Stage 1 |
|
|
16
|
+
| **Unit** | A unit of behavior through its public interface (what it does, not how) | isolated (doubles) | yes | **yes** | Stage 1 |
|
|
17
|
+
| **Component** | A single component through its public interface, with systems the team doesn't control replaced by doubles | doubles for uncontrolled systems | yes | **yes** | Stage 1 |
|
|
18
|
+
| **Contract** | Interface boundaries with external systems, using doubles (a.k.a. narrow integration). Pins the request sent + response shape depended on | doubles; *validated by integration* | yes | **yes** | Stage 1 |
|
|
19
|
+
| **Integration** | That the contract's doubles still match the real system. Exercises real external dependencies | real systems | **no** | **never** | Out-of-band / scheduled, regardless of ownership |
|
|
20
|
+
| **End-to-end** | Two or more real components up to the full system | real components | **no** | **never** | Post-deploy smoke; never gates the build |
|
|
21
|
+
|
|
22
|
+
**Unit** has two shapes: *solitary* (all collaborators doubled) and *sociable* (real in-process collaborators, only true boundaries doubled). Both are deterministic and pre-merge, but **sociable is the default**: a solitary unit test is one whose every double names a blocker (B1/B2/B3), not a free choice — see `internal-collaborator-doubling.md` for the full rule.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## The Pre-Merge Gate Rule
|
|
27
|
+
|
|
28
|
+
Pre-merge (the gate that blocks a merge) contains **only**: static analysis, unit, component, and contract tests. These are deterministic and need nothing configured.
|
|
29
|
+
|
|
30
|
+
Integration and end-to-end tests are non-deterministic by nature (real systems, real network, shared state) and **never gate a merge**. They run:
|
|
31
|
+
|
|
32
|
+
- **Out-of-band / scheduled, always** — regardless of whether the dependency is a team-controlled container (a testcontainers-hosted real engine or broker) the build could spin up itself, or a third-party API, managed broker, or another team's service. A locally-run container running the real dependency is still a real system: real network, real state, non-deterministic — ownership of the dependency changes nothing about that, so it never earns an in-band exception. This is distinct from a record-and-replay virtual-service double *of* that dependency (WireMock, WireMock.Net, Nock, VCR.py, go-vcr — per `virtual-service-libraries.md`): a virtual-service double replays canned interactions with no real network call to the dependency, so it is deterministic and pre-merge-gate-eligible — only a container or instance running the real dependency itself is out-of-band/scheduled.
|
|
33
|
+
- **Post-deploy** for end-to-end smoke of critical journeys against real backends — blocking rollout, not the build.
|
|
34
|
+
|
|
35
|
+
If a "unit test" needs a database URL, a broker, a downstream service, or environment secrets to run, it is mis-typed — it's an integration test wearing a unit test's name. Re-type it or convert it to a component test with doubles.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Tests Must Live With the Code (out-of-repo testing is an anti-pattern)
|
|
40
|
+
|
|
41
|
+
A component's tests belong **in the component's repository and pipeline**. When a component has little or no in-repo testing and is instead verified by suites in another repo, a separate QA runner, Postman/Insomnia collections, or manual scripts, that is an **anti-pattern — regardless of how thorough the external coverage is** — because:
|
|
42
|
+
|
|
43
|
+
- It **cannot gate the component's own merges** — the build can go green while the behavior is broken.
|
|
44
|
+
- It is **not versioned with the code** it verifies, so the two drift; a code change and its test change can't move together.
|
|
45
|
+
- It is usually **non-deterministic and environment-coupled** (shared environments, real dependencies, human steps), so it could never be a pre-merge gate anyway.
|
|
46
|
+
- **Manual scripts are not repeatable** — they're a checklist, not a regression net.
|
|
47
|
+
|
|
48
|
+
This does not mean the external coverage is worthless — it is the **current specification of intended behavior** and the best available basis for improvement. The move is:
|
|
49
|
+
|
|
50
|
+
1. **Harvest** the external coverage into an in-repo behavior inventory: each Postman request → an API contract + scenario; each manual step → a behavior to automate; each other-repo test → a behavior to reproduce locally.
|
|
51
|
+
2. **Re-express** each behavior as the lowest-layer deterministic in-repo test that covers it (see `component-test-patterns.md`), running in the component's own gate.
|
|
52
|
+
3. **Decommission** the external/manual case once its behavior is covered in the gate.
|
|
53
|
+
|
|
54
|
+
A user should be able to point the assessment at where the external tests live (`--external-tests`); treat that location as source material, not as the destination.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## How Component Tests Run Without Configuring Dependencies
|
|
59
|
+
|
|
60
|
+
The component test is the workhorse of a CD gate. The pattern, consistent across every component type:
|
|
61
|
+
|
|
62
|
+
1. **Assemble the real component** — the actual handlers, domain logic, and orchestration — in-process.
|
|
63
|
+
2. **Replace only what the team doesn't control** with in-memory doubles: the database (in-memory repository), the message broker (in-memory bus), downstream services (stubbed adapter), the clock (injected fixed clock), the scheduler.
|
|
64
|
+
3. **Drive it through its public interface** — HTTP handlers, the message handler, the job entrypoint, the UI via a real browser with the network stubbed.
|
|
65
|
+
4. **Assert on observable outcomes** — status, persisted state, emitted event, rendered output — never on internal call sequences or private methods.
|
|
66
|
+
|
|
67
|
+
This yields tests that are fast (no I/O, no network), deterministic (no real systems, controlled clock), and need zero configuration of the surrounding system — while still validating real behavior end to end *within the component boundary*, including how it would interact with its collaborators (verified by contract, made real by integration).
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## The Adapter Rule (own your boundaries)
|
|
72
|
+
|
|
73
|
+
Wrap every third-party client (SDK, HTTP client, broker client, DB driver) in **a thin adapter the team owns**, then double the *adapter* in component tests — never mock the third-party SDK directly. The adapter is the seam:
|
|
74
|
+
|
|
75
|
+
- **Component tests** double the adapter → fast, deterministic, no real dependency.
|
|
76
|
+
- **Adapter integration tests** exercise the real adapter against a real container → assert the *adapter's* correctness (it speaks the protocol, builds the right request), not the dependency's behavior.
|
|
77
|
+
|
|
78
|
+
This keeps the mock surface small, stable, and owned, and localizes every "the real thing changed" failure to one place.
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Outside-In First: Baseline Before Refactor
|
|
83
|
+
|
|
84
|
+
You rarely start from a clean slate. When a component is poorly tested or untested ("legacy" = code without tests, regardless of age), **do not lead with refactoring.** The sequence that protects behavior:
|
|
85
|
+
|
|
86
|
+
1. **Find the testable seams.** A seam is a place where behavior can be observed or substituted *without editing the code under test* — an HTTP handler, a CLI entrypoint, a message handler, an exported function, an existing injection point (object seams via interfaces/polymorphism; link seams via DI/module substitution). The outermost seam you can drive is usually the best starting point.
|
|
87
|
+
2. **Write the best outside-in tests achievable now, without refactoring.** At the outermost reachable seam, write characterization tests that exercise the component as fully as possible and lock in its *current* observable behavior — even if you must tolerate some real dependencies or coarse assertions at first. The goal is a **behavior baseline**, not yet a clean CD gate.
|
|
88
|
+
3. **Get the baseline green.** This is the safety net.
|
|
89
|
+
4. **Now refactor to improve testability — under green.** Introduce adapters and seams (the Adapter Rule, `testability-patterns.md`), push checks down to deterministic component/unit tests, and tighten assertions. **Never change behavior and structure in the same step** (`legacy-code` skill). The baseline catches regressions the refactor might introduce.
|
|
90
|
+
5. **Let the domain guide the target structure.** Use the DDD skills (`domain-driven-design`, `domain-analysis`) to suggest where boundaries, ports, and seams *should* go — so the refactor moves toward a sound domain model, not just toward testability.
|
|
91
|
+
|
|
92
|
+
So an assessment recommends two things per under-tested component: **(a) the best outside-in test we can write today without touching the code** (immediate baseline), and **(b) the refactor sequence that improves testability afterward**, gated by that baseline. The full procedure lives in the `legacy-code` skill; this is its place in the CD test architecture.
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Double Validation (keeping doubles honest)
|
|
97
|
+
|
|
98
|
+
A double that drifts from reality gives false confidence — the central risk of double-based isolation. Keeping a double honest has two independent jobs: **detect** when reality diverges, and **survive** the divergence when it happens.
|
|
99
|
+
|
|
100
|
+
### Do not depend on provider cooperation
|
|
101
|
+
|
|
102
|
+
Consumer-driven contract verification — where the *provider* runs your contract in *their* pipeline and is blocked from deploying a breaking change — only works when teams collaborate closely and use tooling that enforces it. **Assume you do not have that.** Design the strategy for the realistic case:
|
|
103
|
+
|
|
104
|
+
- The provider can break the contract **without versioning**, at any time, with no notice.
|
|
105
|
+
- Their production contract is **assumed broken until proven otherwise** — and you typically discover the break during your *next unrelated deploy*, which then wrongly implicates your change and burns an incident investigating the wrong thing.
|
|
106
|
+
|
|
107
|
+
So provider-side verification is a *nice-to-have if the provider offers it* — never the mechanism you rely on.
|
|
108
|
+
|
|
109
|
+
### The defense you own
|
|
110
|
+
|
|
111
|
+
1. **Contract test** (pre-merge) pins the request the consumer sends and the response shape it depends on, against the adapter double. Blocks the build. This keeps *your* side stable and documents exactly what you assume of the provider.
|
|
112
|
+
2. **Scheduled provider-contract verification in a test environment** — *you* run your pinned contract against the provider's real (non-prod) endpoint **on a schedule, out-of-band**, decoupled from your deploy cadence. This is the primary defense: it detects a provider break **when it happens**, not when you next ship, so the break is attributed to the provider and not to your undelivered changes. Owned and run by your team; requires no provider cooperation.
|
|
113
|
+
3. **Adapter integration test** (out-of-band, on a schedule — never in-band, regardless of ownership) runs the adapter against a real container of the production engine/broker (matching version + extensions) to confirm the double's protocol assumptions hold — see The Pre-Merge Gate Rule above.
|
|
114
|
+
4. **Resilience verified by component tests** (pre-merge) — because you assume the provider *will* break, the consumer must be tested to **survive** it: timeouts enforce, retries/backoff/circuit-breaker behave, malformed or drifted responses are handled per Postel's Law, and the caller gets a documented response with no partial state. Detection (step 2) tells you it broke; resilience keeps you up until it's fixed.
|
|
115
|
+
|
|
116
|
+
Doubles without steps 2 and 4 are a smell (see `microservice-testing.md` → "Stubs that lie", `test-smells.md` → behavior smells). The classic failure is a hand-written double that the team *assumes* still matches a provider nobody is checking.
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## Determinism Techniques (minimal tooling)
|
|
121
|
+
|
|
122
|
+
- **Inject the clock.** Replace system time with a fixed clock in every time-dependent test (`Clock.fixed(...)`). Keep exactly one out-of-band real-clock check to confirm production wiring (catches "tests use UTC, prod uses container local time").
|
|
123
|
+
- **Inject randomness.** Same discipline for RNG and ID generation.
|
|
124
|
+
- **No sleeps.** Never `sleep` to await; drive time and async deterministically.
|
|
125
|
+
- **Real browser, stubbed network (UI).** Run UI component tests in a real engine (Chromium/Firefox/WebKit) with the backend stubbed at the network layer — not an in-memory DOM shim, which trades accuracy for speed and produces false positives on layout/timing.
|
|
126
|
+
- **In-memory doubles over heavyweight test infra** for the gate. Reserve containers for adapter integration, off the merge path.
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## Terminology Reconciliation (read this if you also use the Fowler files)
|
|
131
|
+
|
|
132
|
+
This file uses **MinimumCD vocabulary**, which differs from the Fowler-based `test-pyramid.md` and `microservice-testing.md`:
|
|
133
|
+
|
|
134
|
+
| Term | MinimumCD (this file) | Fowler (`test-pyramid.md`) |
|
|
135
|
+
|------|----------------------|----------------------------|
|
|
136
|
+
| **Component test** | Whole component through its public interface, uncontrolled systems doubled, **deterministic, pre-merge** | "Component / Service" — similar intent |
|
|
137
|
+
| **Contract test** | Doubles that pin the boundary, **pre-merge**, validated by integration | Consumer-driven contract — same idea |
|
|
138
|
+
| **Integration test** | Exercises real deps **specifically to validate the doubles**, non-deterministic, **post-merge only** | Broader: any test of a unit + one real external |
|
|
139
|
+
| **Pre-merge gate** | Determinism is the gating criterion | Implicit in "fast tests at the base" |
|
|
140
|
+
|
|
141
|
+
When advising for a CD pipeline, **prefer this file's framing** — the determinism→pre-merge axis is the organizing principle. Use the Fowler files for the general layering heuristic and the doubles taxonomy (`test-doubles.md`).
|
|
142
|
+
|
|
143
|
+
## Boundaries
|
|
144
|
+
|
|
145
|
+
- "Minimal tooling" means prefer in-memory doubles + a real browser + testcontainers for adapter checks — not a sprawl of test frameworks. Don't recommend heavyweight orchestration (full docker-compose of the system) for the gate; that's exactly the configured-dependency dependency this architecture removes.
|
|
146
|
+
- These are starting points, not mandates. Real components have details these layers don't capture; drop items that don't apply and add what a component clearly needs.
|
|
147
|
+
- This file defines the *architecture*. Per-component specifics (what to double, which failure modes) are in `component-test-patterns.md`.
|
|
148
|
+
|
|
149
|
+
## The Pyramid Is a Cost Heuristic, Not a Target Shape
|
|
150
|
+
|
|
151
|
+
The pyramid expresses that tests get more expensive — slower, flakier, longer
|
|
152
|
+
feedback — as scope grows. It is not a silhouette to match.
|
|
153
|
+
|
|
154
|
+
- **Never** produce "current shape vs recommended shape" tables or per-layer
|
|
155
|
+
target counts ("200 unit, 80 contract, 20 E2E"). The pyramid is not a quota.
|
|
156
|
+
- The only valid framing is **per-behavior**: "this behavior is verified at
|
|
157
|
+
layer X; the lowest layer that could verify it is Y; here is why X." Justify
|
|
158
|
+
in both directions — a unit/component pick states why a higher layer would be
|
|
159
|
+
redundant; an integration/E2E pick states why a contract or component test
|
|
160
|
+
cannot cover the behavior.
|
|
161
|
+
- If a suite shape is genuinely pathological (ice-cream cone, hourglass,
|
|
162
|
+
cupcake — see `test-pyramid.md#anti-patterns`), name the pathology and the
|
|
163
|
+
behaviors it harms. Do not propose a numeric redistribution.
|
|
164
|
+
|
|
165
|
+
This is the canonical statement of the rule. Agents and skills cite this
|
|
166
|
+
section rather than restating it.
|
|
167
|
+
|
|
168
|
+
## The E2E Justification Gate
|
|
169
|
+
|
|
170
|
+
E2E tests are non-deterministic and never gate a pre-merge build (see
|
|
171
|
+
[The Pre-Merge Gate Rule](#the-pre-merge-gate-rule)). Never recommend an E2E
|
|
172
|
+
test "for completeness" or "to round out the pyramid." Before recommending E2E
|
|
173
|
+
for any behavior, document that **all four** conditions hold:
|
|
174
|
+
|
|
175
|
+
1. A **contract test** cannot pin the boundary that catches this behavior.
|
|
176
|
+
2. A **component test** with doubles cannot exercise it via the component's
|
|
177
|
+
public interface.
|
|
178
|
+
3. A **resilience test** (timeout / retry / circuit-breaker / malformed
|
|
179
|
+
response) cannot cover the failure mode.
|
|
180
|
+
4. The behavior is a **critical user journey across multiple real components**
|
|
181
|
+
that cannot be decomposed.
|
|
182
|
+
|
|
183
|
+
If conditions 1–3 can cover the behavior, recommend that test instead and record
|
|
184
|
+
one sentence on why E2E was *not* chosen. If only condition 4 applies, the
|
|
185
|
+
recommendation must name the user journey, why contract + component + resilience
|
|
186
|
+
together are insufficient, and the pipeline stage (post-deploy smoke, **never**
|
|
187
|
+
pre-merge).
|
|
188
|
+
|
|
189
|
+
This is the canonical statement of the gate. Agents and skills cite this section
|
|
190
|
+
rather than restating the four conditions.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# CI/CD file scope
|
|
2
|
+
|
|
3
|
+
## Glob list
|
|
4
|
+
|
|
5
|
+
The canonical glob list for "files that carry CI/CD pipeline configuration."
|
|
6
|
+
Security-relevant content in these files (leaked secrets, `continue-on-error`
|
|
7
|
+
on a security gate, overly broad `permissions:`) often escapes a normal
|
|
8
|
+
`src/` tree walk, so any scan that claims to cover CI/CD must walk these
|
|
9
|
+
paths explicitly — including up to the repo root in a monorepo, since a
|
|
10
|
+
workflow file can live outside the scanned subtree.
|
|
11
|
+
|
|
12
|
+
- `.github/workflows/*.{yml,yaml}` (GitHub Actions)
|
|
13
|
+
- `.gitlab-ci.yml` + `.gitlab/**/*.{yml,yaml}` (GitLab CI)
|
|
14
|
+
- `.circleci/config.yml` (CircleCI)
|
|
15
|
+
- `azure-pipelines.yml` + `.azure-pipelines/**/*.{yml,yaml}` (Azure Pipelines)
|
|
16
|
+
- `bitbucket-pipelines.yml`
|
|
17
|
+
- `Jenkinsfile` + `jenkinsfile.d/**/*` (Jenkins)
|
|
18
|
+
|
|
19
|
+
## Empty-scan reporting
|
|
20
|
+
|
|
21
|
+
If a target has no files in any of these classes, record an empty scan
|
|
22
|
+
result (e.g. `"ci_dirs_scanned": []`) rather than silently omitting the
|
|
23
|
+
field — a reader must be able to tell "no CI files in scope" from "CI scope
|
|
24
|
+
wasn't checked."
|