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,129 @@
|
|
|
1
|
+
# Giving CI read access to the telemetry repo
|
|
2
|
+
|
|
3
|
+
To make the cost-regression gate (#171) — and any future rollup-based gate —
|
|
4
|
+
enforce against **real** data, CI needs to **read** the private `agent-telemetry`
|
|
5
|
+
repo and build the cross-machine rollup. This doc sets that up with least
|
|
6
|
+
privilege: **read-only, single-repo, revocable**, and with no write access to
|
|
7
|
+
your data.
|
|
8
|
+
|
|
9
|
+
Companion docs: [`telemetry-repo-security.md`](telemetry-repo-security.md) (how
|
|
10
|
+
machines *write* digests) and the watermark/sync flow in `/session-review`.
|
|
11
|
+
|
|
12
|
+
## Principle
|
|
13
|
+
|
|
14
|
+
- CI only ever **reads** the digest database — it never writes telemetry.
|
|
15
|
+
- The credential is scoped to the **one** `agent-telemetry` repo, **read-only**,
|
|
16
|
+
and can be revoked without touching anything else.
|
|
17
|
+
- The raw `~/.claude/projects` transcripts are never involved; CI consumes the
|
|
18
|
+
already-sanitized, metrics-only digest.
|
|
19
|
+
|
|
20
|
+
## Recommended: a read-only deploy key
|
|
21
|
+
|
|
22
|
+
A deploy key authorizes an SSH key for a **single repository**. The credential
|
|
23
|
+
model — why per-repo, per-machine keys over account-wide SSH keys or classic
|
|
24
|
+
PATs — is documented canonically in
|
|
25
|
+
[`telemetry-repo-security.md`](telemetry-repo-security.md); the one difference
|
|
26
|
+
here is that CI's key is **read-only** so it can clone but never push.
|
|
27
|
+
|
|
28
|
+
### 1. Generate a dedicated keypair (locally)
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
ssh-keygen -t ed25519 -f ./telemetry-ci -N "" -C "agentic-dev-team CI read-only"
|
|
32
|
+
# produces: telemetry-ci (private) telemetry-ci.pub (public)
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### 2. Add the PUBLIC key to `agent-telemetry` as a read-only deploy key
|
|
36
|
+
|
|
37
|
+
GitHub → `agent-telemetry` → Settings → Deploy keys → **Add deploy key**:
|
|
38
|
+
|
|
39
|
+
- Title: `agentic-dev-team CI (read-only)`
|
|
40
|
+
- Key: contents of `telemetry-ci.pub`
|
|
41
|
+
- **Leave "Allow write access" UNCHECKED** ← this is what keeps CI read-only.
|
|
42
|
+
|
|
43
|
+
### 3. Add the PRIVATE key to `agentic-dev-team` as an Actions secret
|
|
44
|
+
|
|
45
|
+
GitHub → `agentic-dev-team` → Settings → Secrets and variables → Actions →
|
|
46
|
+
**New repository secret**:
|
|
47
|
+
|
|
48
|
+
- Name: `TELEMETRY_DEPLOY_KEY`
|
|
49
|
+
- Value: contents of `telemetry-ci` (the private key)
|
|
50
|
+
|
|
51
|
+
Then delete the local key files (`rm telemetry-ci telemetry-ci.pub`) — GitHub now
|
|
52
|
+
holds both halves where they belong.
|
|
53
|
+
|
|
54
|
+
### 4. Consume it in the workflow
|
|
55
|
+
|
|
56
|
+
This wiring is **already in place** — see the `cost-regression` job in
|
|
57
|
+
[`.github/workflows/plugin-tests.yml`](https://github.com/bdfinst/agentic-dev-team/blob/main/.github/workflows/plugin-tests.yml).
|
|
58
|
+
The job loads the key, clones the data repo read-only, builds a per-session cost
|
|
59
|
+
series from the digests, and runs the regression check against it. The
|
|
60
|
+
credential steps are gated so fork PRs and Dependabot PRs (neither of which get
|
|
61
|
+
secret access) skip them and fall back to the blocking self-test:
|
|
62
|
+
|
|
63
|
+
```yaml
|
|
64
|
+
cost-regression:
|
|
65
|
+
runs-on: ubuntu-latest
|
|
66
|
+
steps:
|
|
67
|
+
- uses: actions/checkout@v6
|
|
68
|
+
- name: Install python3 + jq
|
|
69
|
+
run: sudo apt-get update && sudo apt-get install -y jq python3
|
|
70
|
+
# Secrets are NOT exposed to forked-PR runs, nor to Dependabot-triggered
|
|
71
|
+
# runs even when the PR isn't from a fork (see caveat) — gate on both:
|
|
72
|
+
- name: Load telemetry deploy key (read-only)
|
|
73
|
+
if: ${{ github.event_name != 'pull_request' || (github.event.pull_request.head.repo.fork == false && github.actor != 'dependabot[bot]') }}
|
|
74
|
+
uses: webfactory/ssh-agent@v0.9.0
|
|
75
|
+
with:
|
|
76
|
+
ssh-private-key: ${{ secrets.TELEMETRY_DEPLOY_KEY }}
|
|
77
|
+
- name: Clone telemetry (read-only) and build the cross-machine cost baseline
|
|
78
|
+
if: ${{ github.event_name != 'pull_request' || (github.event.pull_request.head.repo.fork == false && github.actor != 'dependabot[bot]') }}
|
|
79
|
+
run: |
|
|
80
|
+
git clone --depth 1 git@github.com:bdfinst/agent-telemetry.git /tmp/telemetry
|
|
81
|
+
python3 plugins/dev-team/scripts/session_report.py --profile maintainer \
|
|
82
|
+
--cost-log /tmp/telemetry/digests -o /tmp/telemetry-cost-log.jsonl
|
|
83
|
+
echo "COST_BASELINE_LOG=/tmp/telemetry-cost-log.jsonl" >> "$GITHUB_ENV"
|
|
84
|
+
- name: Run cost-regression check (via ci-local)
|
|
85
|
+
run: bash scripts/ci-local.sh --only=chk_cost_regression
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
> Why `--cost-log` and not `--rollup`? The regression meter
|
|
89
|
+
> (`cost_meter.py regression`) compares the **latest** session against the
|
|
90
|
+
> rolling mean of priors, so it needs a *time-ordered per-session series*, not a
|
|
91
|
+
> single aggregate. `session_report.py --profile maintainer --cost-log <digests>` emits exactly that
|
|
92
|
+
> (`{"total":{"cost_usd":..}}` records, oldest→newest, deduped on `session_id`).
|
|
93
|
+
> The real cross-machine check is **warn-only** — a non-deterministic meter must
|
|
94
|
+
> not hard-fail an unrelated code PR.
|
|
95
|
+
|
|
96
|
+
## Alternative: a fine-grained PAT (read-only)
|
|
97
|
+
|
|
98
|
+
If you prefer HTTPS, use a **fine-grained** PAT — same credential model as
|
|
99
|
+
[`telemetry-repo-security.md`](telemetry-repo-security.md) Option B, but scoped
|
|
100
|
+
**Contents: Read-only** since CI never writes. Store it as the
|
|
101
|
+
`TELEMETRY_DEPLOY_KEY` (or `TELEMETRY_TOKEN`) secret and clone via
|
|
102
|
+
`https://x-access-token:${TOKEN}@github.com/bdfinst/agent-telemetry.git`. Prefer
|
|
103
|
+
the deploy key — tightest scope (one repo, read-only) and no account-level
|
|
104
|
+
token.
|
|
105
|
+
|
|
106
|
+
## Security notes and caveats
|
|
107
|
+
|
|
108
|
+
- **Read-only, by construction.** The deploy key has no write access, so a leak
|
|
109
|
+
exposes *read* of one private metrics repo — never write, never your account.
|
|
110
|
+
- **Fork-PR and Dependabot-PR caveat (important).** GitHub does not expose
|
|
111
|
+
secrets to workflows triggered by pull requests from forks, and it withholds
|
|
112
|
+
the same secrets from Dependabot-triggered runs even when the PR's head
|
|
113
|
+
branch is not a fork (Dependabot PRs are treated as untrusted for this
|
|
114
|
+
purpose). So the cost gate runs on branches in this repo and on internal
|
|
115
|
+
human PRs, but **not** on fork PRs or Dependabot PRs — those fall back to the
|
|
116
|
+
mechanism self-test. For a solo/private setup this is a non-issue; documented so
|
|
117
|
+
the coverage boundary is honest.
|
|
118
|
+
- **Rotation.** To rotate: generate a new key, add it, update the secret, delete
|
|
119
|
+
the old deploy key. To revoke entirely: delete the deploy key on
|
|
120
|
+
`agent-telemetry` — CI loses read access immediately, nothing else affected.
|
|
121
|
+
- **Never echo the key** in workflow logs; `ssh-agent` keeps it out of the
|
|
122
|
+
environment dump.
|
|
123
|
+
|
|
124
|
+
## What this unblocks
|
|
125
|
+
|
|
126
|
+
- **#171** — the cost-regression gate compares each run against the real
|
|
127
|
+
cross-machine baseline instead of only self-testing the mechanism.
|
|
128
|
+
- Any future gate that wants cross-machine rollup data in CI (the same clone +
|
|
129
|
+
`--rollup` pattern).
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# Telemetry repository — security & setup
|
|
2
|
+
|
|
3
|
+
The cross-machine telemetry repo (Delta D, #178) is a **private append-only
|
|
4
|
+
database**, not a code repo. This doc explains how to wire it up so machines can
|
|
5
|
+
write to it directly — **no pull-request toil for data** — while keeping access
|
|
6
|
+
least-privilege and revocable.
|
|
7
|
+
|
|
8
|
+
## The model: treat the repo like a database
|
|
9
|
+
|
|
10
|
+
- **One writer-owned file per machine:** `digests/<host>/session-digest.jsonl`.
|
|
11
|
+
Because no two machines touch the same file, concurrent writes never conflict —
|
|
12
|
+
the same property a per-shard append log gives a database.
|
|
13
|
+
- **Direct writes to the default branch.** Each machine does
|
|
14
|
+
`extract → commit → pull --rebase → push`. There is **no PR**, because review
|
|
15
|
+
adds toil with no security value over append-only, non-executable metric rows.
|
|
16
|
+
- **Producer-enforced privacy.** The extractor emits metrics only — counts,
|
|
17
|
+
ratios, token numbers, model ids, and a project **basename** (never a path,
|
|
18
|
+
prompt, command, or code). The repo is a sink for already-sanitized data.
|
|
19
|
+
|
|
20
|
+
## Repository settings
|
|
21
|
+
|
|
22
|
+
Configure the data repo (e.g. `agent-telemetry`) like this:
|
|
23
|
+
|
|
24
|
+
| Setting | Value | Why |
|
|
25
|
+
|---|---|---|
|
|
26
|
+
| Visibility | **Private** | It holds your usage metrics; never make it public. |
|
|
27
|
+
| Branch protection on default branch | **Off** (no "Require a pull request before merging", no required reviews, no required status checks) | Machines push data directly; a PR gate would block every sync. |
|
|
28
|
+
| Push access | **Only you / your machines** (see deploy keys below) | Least privilege. |
|
|
29
|
+
| Contents | **Metrics JSONL only** | No code runs from here; keep it that way. |
|
|
30
|
+
|
|
31
|
+
There is intentionally **no CI and no merge queue** on this repo — it is data, so
|
|
32
|
+
the dev-team quality gates (which guard *code*) do not apply.
|
|
33
|
+
|
|
34
|
+
## Authentication — least privilege, per machine
|
|
35
|
+
|
|
36
|
+
Do **not** point this at your account-wide SSH key or a classic personal access
|
|
37
|
+
token with `repo` scope: either would grant every machine access to *all* your
|
|
38
|
+
repositories. Use one of these, scoped to **this repo only**:
|
|
39
|
+
|
|
40
|
+
### Option A — per-host deploy key (recommended)
|
|
41
|
+
|
|
42
|
+
A deploy key is an SSH key authorized for a **single repository**, so a machine
|
|
43
|
+
that can write telemetry cannot touch anything else.
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
# On each machine:
|
|
47
|
+
ssh-keygen -t ed25519 -f ~/.ssh/agent-telemetry -N "" -C "telemetry-$(hostname -s)"
|
|
48
|
+
cat ~/.ssh/agent-telemetry.pub
|
|
49
|
+
# GitHub → agent-telemetry repo → Settings → Deploy keys → Add deploy key
|
|
50
|
+
# - paste the public key
|
|
51
|
+
# - CHECK "Allow write access"
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Point git at that key for this repo (so it isn't used for anything else):
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
# ~/.ssh/config
|
|
58
|
+
Host agent-telemetry.github.com
|
|
59
|
+
HostName github.com
|
|
60
|
+
IdentityFile ~/.ssh/agent-telemetry
|
|
61
|
+
IdentitiesOnly yes
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
…and set the remote to that host alias:
|
|
65
|
+
`git@agent-telemetry.github.com:<owner>/agent-telemetry.git`.
|
|
66
|
+
|
|
67
|
+
**Revocation:** lose a laptop → delete that one deploy key. Other machines are
|
|
68
|
+
unaffected, and nothing else of yours was ever exposed.
|
|
69
|
+
|
|
70
|
+
### Option B — fine-grained personal access token
|
|
71
|
+
|
|
72
|
+
If you prefer HTTPS: create a **fine-grained** PAT scoped to **only** the
|
|
73
|
+
`agent-telemetry` repository with **Repository permissions → Contents: Read and
|
|
74
|
+
write** and nothing else. Store it in a credential helper (macOS Keychain, git
|
|
75
|
+
credential manager) — never in plaintext or in the repo. Prefer one token per
|
|
76
|
+
machine so tokens are individually revocable.
|
|
77
|
+
|
|
78
|
+
> Avoid classic PATs and broad SSH keys. The whole point is that a compromised
|
|
79
|
+
> telemetry credential leaks *metrics for one repo*, not your code or account.
|
|
80
|
+
|
|
81
|
+
## Configure dev-team to use it
|
|
82
|
+
|
|
83
|
+
Tell the plugin where the repo is (the `/session-review` skill will prompt and
|
|
84
|
+
write this for you on first run):
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
# Env var (highest precedence):
|
|
88
|
+
export DEV_TEAM_TELEMETRY_REMOTE="git@agent-telemetry.github.com:<owner>/agent-telemetry.git"
|
|
89
|
+
|
|
90
|
+
# …or the config file ~/.claude/.dev-team/telemetry.json:
|
|
91
|
+
{ "remote": "git@agent-telemetry.github.com:<owner>/agent-telemetry.git" }
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Optional keys / env vars: `clone` / `DEV_TEAM_TELEMETRY_CLONE` (local working
|
|
95
|
+
clone, default `~/.claude/.dev-team/agent-telemetry`) and `host` /
|
|
96
|
+
`DEV_TEAM_TELEMETRY_HOST` (label, default `hostname -s`).
|
|
97
|
+
|
|
98
|
+
Then sync:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
scripts/telemetry-sync.sh --check # validate config (no network)
|
|
102
|
+
scripts/telemetry-sync.sh # extract -> commit -> pull --rebase -> push
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## What is and isn't protected
|
|
106
|
+
|
|
107
|
+
- **Protected by design:** access is per-repo and per-machine (revocable); writes
|
|
108
|
+
are conflict-free; the repo is private; only sanitized metrics ever leave a
|
|
109
|
+
machine; raw `~/.claude/projects/**` transcripts never leave.
|
|
110
|
+
- **Your responsibility:** keep the repo private, keep deploy keys/tokens scoped
|
|
111
|
+
and rotated, and don't add collaborators who shouldn't see your usage metrics.
|
|
112
|
+
|
|
113
|
+
## Why no PR gate is the right call here
|
|
114
|
+
|
|
115
|
+
PRs exist to review *changes to code that will execute*. This repo stores
|
|
116
|
+
append-only, non-executable metric rows in per-host files. A PR per sync would be
|
|
117
|
+
pure toil — it cannot catch a "bug" (there is no logic), and the privacy boundary
|
|
118
|
+
is enforced upstream by the extractor, not by a reviewer. So: gate the **code**
|
|
119
|
+
that produces the data (the dev-team repo's CI does), and let the **data** flow
|
|
120
|
+
directly into its database.
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
# Test Evaluation and Architecture
|
|
2
|
+
|
|
3
|
+
This document explains how to evaluate how an existing application is tested and design a path toward a fast, deterministic, config-free CI gate that fully validates behavior — including cross-service interaction — without standing up the rest of the system.
|
|
4
|
+
|
|
5
|
+
**On this page:** [Purpose](#purpose) ·
|
|
6
|
+
[Tools and Their Altitudes](#tools-and-their-altitudes) ·
|
|
7
|
+
[The Evaluation Workflow](#the-evaluation-workflow) ·
|
|
8
|
+
[When the Tests Aren't in the Repo](#when-the-tests-arent-in-the-repo) ·
|
|
9
|
+
[Key Principles](#key-principles) · [Sample Invocations](#sample-invocations) ·
|
|
10
|
+
[Reference Files](#reference-files).
|
|
11
|
+
|
|
12
|
+
## Purpose
|
|
13
|
+
|
|
14
|
+
The test evaluation workflow answers two questions: "how well is this application tested today?" and "what would a CD-aligned test architecture look like?" The result is an assessed gap list and a concrete migration path, not generated test code. Implementation of the migration goes to `/plan` or `/build`.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Tools and Their Altitudes
|
|
19
|
+
|
|
20
|
+
Four tools operate at different scopes. Use the one that matches what you need.
|
|
21
|
+
|
|
22
|
+
| What you want | Tool | Altitude | Direction |
|
|
23
|
+
|---|---|---|---|
|
|
24
|
+
| Advise on how to test a specific module or hard-to-test unit | `test-design-advisor` skill | Unit / module | Forward (design) |
|
|
25
|
+
| Review test files in a changeset for smells, quality, and a suite-wide Farley Score | `/test-design` | Per-file / changeset | Backward (review) |
|
|
26
|
+
| Audit the whole test suite's strategy, quadrant coverage, and automation maturity | `test-health` skill | Whole suite | Strategic rollup |
|
|
27
|
+
| Assess the application's test strategy against CD: per-component types, pre-merge gate determinism | `cd-test-architecture` skill | Whole application | Architecture |
|
|
28
|
+
| Consolidated analyze-then-improve orchestrator — lightweight by default, opts into heavier capabilities (Gherkin, mutation, refactor-for-testability) only when asked; always baselines before changing tests; ships a 10-section executive-summary report | `/test-improve` | Whole repository | Remediation |
|
|
29
|
+
|
|
30
|
+
**`test-design-advisor`** works at the module level: assess testability blockers, place each behavior on the pyramid, choose the right test double, and produce a behavior-preserving refactor sequence to introduce seams. It does not write tests. **Vocabulary is locked to MinimumCD** (static analysis / unit / component / contract / integration / E2E); prefer "contract test" over "narrow integration test" and gloss the alias once if it must be used. **The pyramid is a cost heuristic, not a target shape** — the advisor never emits "current shape vs recommended shape" tables or per-layer target counts; placements are per-behavior with a two-direction justification (why not the layer above or below). Any E2E placement must satisfy the [E2E justification gate](#the-e2e-justification-gate).
|
|
31
|
+
|
|
32
|
+
**`/test-design`** is the orchestrator command for the changeset-level workflow. It dispatches `test-review` (tactical quality: missing assertions, non-determinism mechanics, mock hygiene) and `test-smell-review` (design-level smells: xUnit smell taxonomy, double selection, pyramid placement) in parallel, scores **every existing test in the suite** with the **Farley Score** (via the `farley-score` skill — 8 properties, weighted 1–10), then optionally runs `test-design-advisor` for production code that has no tests or hard-to-test units. The aggregated report carries the headline Farley score independent of the changeset scope.
|
|
33
|
+
|
|
34
|
+
**`test-health`** is the **strategic-altitude** rollup over the whole repository. It maps coverage to the Agile Testing Quadrants, evaluates the suite's shape against the architecture, rolls up automation maturity and flaky-test signals, and produces an ordered improvement plan. It **delegates rather than re-derives**: CD-determinism + pipeline placement come from `cd-test-architecture`, per-file findings + Farley Score come from `/test-design`, assertion strength on critical-logic modules comes from `mutation-testing`. Use this for "audit our tests" / "test strategy review" / "is our testing healthy?".
|
|
35
|
+
|
|
36
|
+
**`cd-test-architecture`** works at the application level: inventory components and test suites, classify against the six MinimumCD test types, identify CD-fitness gaps, recommend a per-component target architecture (with the [E2E justification gate](#the-e2e-justification-gate) applied to every E2E recommendation), and produce a migration path. It does not write tests or edit code.
|
|
37
|
+
|
|
38
|
+
**`/test-improve`** is the **consolidated remediation altitude** — a ten-phase (0-9) orchestrator (approach contract → baseline → optional Gherkin → analyze → plan fixes → improve-without-refactoring → refactor decision → optional refactor-for-testability → validate → executive-summary report). It defaults to lightweight ceremony (mutation off, BDD `none`, no-refactor) and prompts for heavier capabilities on demand. Phase 1 (Analyze) delegates the entire analysis to `/test-health`, which in turn folds in `cd-test-architecture` (advisory), `/test-design`, and `mutation-testing` — Phase 1 runs after Baseline and Derive Gherkin so `/test-health` can use documented-but-untested Gherkin scenarios as a coverage signal. See the workflow diagram in [Architecture](agent-architecture.md#test-improvement-workflow-test-improve).
|
|
39
|
+
|
|
40
|
+
**How they compose.** Start at the altitude that matches the question. `test-health` calls `/test-design`, `cd-test-architecture`, and `mutation-testing` internally — when the question is strategic, do not dispatch the lower-altitude tools yourself. `/test-design` calls `test-design-advisor` internally when `--advise` applies. `/test-improve` delegates its entire Phase 1 (analyze) to `/test-health` — when the question is "how do we get from this assessment to passing CD gates?", start with `/test-improve` and let it dispatch the analysis itself. When two altitudes plausibly fit, prefer the higher one and let it delegate down.
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## The Evaluation Workflow
|
|
45
|
+
|
|
46
|
+
The `cd-test-architecture` skill follows these steps. Run it with `/cd-test-architecture <path>`.
|
|
47
|
+
|
|
48
|
+
### Step 1: Inventory the application's components
|
|
49
|
+
|
|
50
|
+
Map each deployable or testable surface and assign it a pattern from `knowledge/component-test-patterns.md`:
|
|
51
|
+
|
|
52
|
+
- **UI** — User Interface
|
|
53
|
+
- **Services** — API Provider, API Consumer, Event Consumer, Event Producer, Stateful Service, CLI/Library
|
|
54
|
+
- **Batch** — Scheduled Job
|
|
55
|
+
|
|
56
|
+
A real system is usually several of these. Each surface is assessed separately.
|
|
57
|
+
|
|
58
|
+
### Step 2: Inventory and classify existing tests
|
|
59
|
+
|
|
60
|
+
Find every test suite in the repo. For each, record: MinimumCD type, what it actually exercises, whether it is deterministic, and what it requires to run (DB URL, broker, downstream service, secrets, sleep, real clock).
|
|
61
|
+
|
|
62
|
+
If in-repo tests are sparse, the application is not necessarily untested — see Step 2b (locate and harvest out-of-repo tests) before concluding.
|
|
63
|
+
|
|
64
|
+
### Step 2b: Locate and harvest out-of-repo tests
|
|
65
|
+
|
|
66
|
+
When `--external-tests <path-or-repo-or-description>` is given, treat the external location as the current specification of intended behavior:
|
|
67
|
+
|
|
68
|
+
- **Other-repo suites** — read and classify just like in-repo tests; note they can't gate this component's merges.
|
|
69
|
+
- **Postman/Insomnia/`.http` collections** — extract each request + assertion as an API contract and scenario.
|
|
70
|
+
- **Manual scripts or spreadsheets** — extract each step as a behavior to automate.
|
|
71
|
+
|
|
72
|
+
This produces a behavior inventory that becomes the basis for improvement, not the destination.
|
|
73
|
+
|
|
74
|
+
### Step 3: Diagnose CD-fitness gaps
|
|
75
|
+
|
|
76
|
+
Flag, with evidence:
|
|
77
|
+
|
|
78
|
+
- Out-of-repo or third-party-runner testing (anti-pattern — see below)
|
|
79
|
+
- Manual / non-repeatable testing
|
|
80
|
+
- Tests mistyped as "unit" that require real dependencies
|
|
81
|
+
- Configured-dependency tests that can't run in a clean CI gate
|
|
82
|
+
- Coverage gaps (success + failure modes not covered at any deterministic layer)
|
|
83
|
+
- Doubles with no validation loop (drift risk)
|
|
84
|
+
- No consumer resilience tests (the component assumes the provider holds)
|
|
85
|
+
- Inverted pyramid shape (integration/E2E doing what component tests should)
|
|
86
|
+
|
|
87
|
+
### Step 4: Recommend the target architecture
|
|
88
|
+
|
|
89
|
+
Per component: which test types cover which layers, what to double to run pre-merge without configuration, which success scenarios and failure modes to cover, the double-validation loop, and the pipeline stage for each test type (pre-merge gate, Stage 1/2, out-of-band, or post-deploy).
|
|
90
|
+
|
|
91
|
+
The recommendation applies the [E2E justification gate](#the-e2e-justification-gate) to every E2E test. The pyramid is treated as a cost heuristic — no per-layer target counts are recommended; if the shape is pathological (ice-cream cone, hourglass, cupcake), the pathology and the behaviors that suffer from it are named, not a numeric redistribution.
|
|
92
|
+
|
|
93
|
+
### Step 5: Produce a migration path
|
|
94
|
+
|
|
95
|
+
Ordered lowest-risk first, each step independently shippable. The spine is **baseline before refactor**: get behavior under test at existing seams *without changing code*, then refactor under that green baseline. When tests are out-of-repo, the harvested behaviors feed that baseline. Typical full sequence:
|
|
96
|
+
|
|
97
|
+
1. **Characterization baseline (no refactoring)** — outside-in tests at the outermost reachable seam that lock in current behavior; reproduce any harvested out-of-repo/manual behaviors here. Get green.
|
|
98
|
+
2. Introduce owned adapters and seams **under the baseline** (DDD skills suggest where boundaries belong)
|
|
99
|
+
3. Add in-memory doubles + component tests reproducing the baselined behaviors
|
|
100
|
+
4. Add contract tests pinning request/response boundaries
|
|
101
|
+
5. Add consumer resilience tests (verify the component survives a provider break)
|
|
102
|
+
6. Add scheduled provider-contract verification against a test environment
|
|
103
|
+
7. Move real-dependency tests off the gate to adapter integration or out-of-band
|
|
104
|
+
8. Add post-deploy checks
|
|
105
|
+
9. Decommission out-of-repo/manual suites and the coarse characterization tests as their behaviors land in the deterministic gate
|
|
106
|
+
|
|
107
|
+
### Step 6: Report
|
|
108
|
+
|
|
109
|
+
Output goes to `.dev-team-reports/cd-test-architecture-<app>.md`. Tables, not prose: components and patterns, current tests and their CD-fitness, gaps, target architecture, pre-merge gate composition, migration path, next steps.
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## When the Tests Aren't in the Repo
|
|
114
|
+
|
|
115
|
+
An application may have little or no in-repo testing and instead be covered by suites in another repo, a third-party runner, Postman or Insomnia collections, or manual scripts. This is an **anti-pattern** regardless of how thorough the external coverage is:
|
|
116
|
+
|
|
117
|
+
- The tests **cannot gate the component's own merges** — the build can go green while behavior is broken.
|
|
118
|
+
- The tests are **not versioned with the code** they verify; a code change and its test change can't move together.
|
|
119
|
+
- External suites are usually **non-deterministic and environment-coupled**, so they could never serve as a pre-merge gate anyway.
|
|
120
|
+
- **Manual scripts are not repeatable** — they're a checklist, not a regression net.
|
|
121
|
+
|
|
122
|
+
This does not mean the external coverage is worthless. It is the **current specification of intended behavior** — the best available basis for improvement.
|
|
123
|
+
|
|
124
|
+
To include it in the assessment, point the skill at it:
|
|
125
|
+
|
|
126
|
+
```
|
|
127
|
+
/cd-test-architecture <path> --external-tests <postman-collection.json>
|
|
128
|
+
/cd-test-architecture <path> --external-tests <path-to-other-repo>
|
|
129
|
+
/cd-test-architecture <path> --external-tests "manual regression scripts in Confluence, linked here: ..."
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
The skill harvests those sources as a behavior inventory (Step 2b — locate and harvest out-of-repo tests) and builds the migration path around re-expressing each behavior as a deterministic, in-repo, gated test:
|
|
133
|
+
|
|
134
|
+
| External source | Re-expressed as |
|
|
135
|
+
|---|---|
|
|
136
|
+
| Postman request + assertion | Component or contract test |
|
|
137
|
+
| Manual UI script | UI component test (real browser, network stubbed) |
|
|
138
|
+
| Other-repo E2E covering this component | In-repo component test + thin post-deploy smoke |
|
|
139
|
+
|
|
140
|
+
Each external case is decommissioned once its behavior lands in the gate.
|
|
141
|
+
|
|
142
|
+
If in-repo tests are sparse but no `--external-tests` location is given, the skill will **ask** where the application is actually tested before drawing any conclusions.
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Key Principles
|
|
147
|
+
|
|
148
|
+
### Pre-merge gate: deterministic tests only
|
|
149
|
+
|
|
150
|
+
The gate that blocks a merge may contain **only** static analysis, unit, component, and contract tests. These are deterministic and need nothing configured. Integration and end-to-end tests are non-deterministic by nature and never gate a merge. A test that needs a database URL, broker, downstream service, or environment secrets to run is mis-typed — re-classify or convert it.
|
|
151
|
+
|
|
152
|
+
The corollary is that E2E is the last resort, not a quota. The [E2E justification gate](#the-e2e-justification-gate) ensures recommendations don't propose E2E "for completeness" or "to round out the pyramid" — if a contract, component, or resilience test can cover a behavior, that's where it goes.
|
|
153
|
+
|
|
154
|
+
### The E2E justification gate
|
|
155
|
+
|
|
156
|
+
This is the single rule every tool and workflow step below applies to any E2E recommendation. An E2E test is recommended **only** when all four conditions hold:
|
|
157
|
+
|
|
158
|
+
1. A contract test cannot pin the boundary.
|
|
159
|
+
2. A component test with doubles cannot exercise the behavior.
|
|
160
|
+
3. A resilience test cannot cover the failure mode.
|
|
161
|
+
4. The behavior is a critical multi-component user journey.
|
|
162
|
+
|
|
163
|
+
An E2E recommendation that fails any of (1)–(3) is replaced with the cheaper layer that *can* cover it. **E2E is never a pre-merge gate.**
|
|
164
|
+
|
|
165
|
+
### Run CI without configuring dependencies
|
|
166
|
+
|
|
167
|
+
The component test is the workhorse of a CD gate. The pattern is consistent across every component type:
|
|
168
|
+
|
|
169
|
+
1. Assemble the **real component** — actual handlers, domain logic, orchestration — in-process.
|
|
170
|
+
2. Replace only what the team doesn't control with **in-memory doubles**: in-memory repository for the database, in-memory bus for the broker, stubbed adapter for downstream services, injected fixed clock.
|
|
171
|
+
3. Drive it through its **public interface** — HTTP handlers, message handler, job entrypoint, UI via a real browser with the network stubbed.
|
|
172
|
+
4. Assert **observable outcomes** — status, persisted state, emitted event, rendered output — never internal call sequences.
|
|
173
|
+
|
|
174
|
+
The result: fast (no I/O), deterministic (no real systems, controlled clock), zero configuration of the surrounding system — while still validating real behavior end-to-end within the component boundary.
|
|
175
|
+
|
|
176
|
+
### The adapter rule
|
|
177
|
+
|
|
178
|
+
Wrap every third-party client (SDK, HTTP client, broker client, DB driver) in a thin adapter the team owns. Double the adapter in component tests — never mock the third-party SDK directly. Adapter integration tests then exercise the real adapter against a real container to confirm the adapter's correctness.
|
|
179
|
+
|
|
180
|
+
### Do not depend on provider cooperation
|
|
181
|
+
|
|
182
|
+
Consumer-driven contract verification where the provider runs your contract in their pipeline only works with close collaboration and enforced tooling. Assume you do not have that. The defense you own:
|
|
183
|
+
|
|
184
|
+
1. **Contract tests** (pre-merge) pin the request you send and the response shape you depend on, against the adapter double.
|
|
185
|
+
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, owned by your team. This detects a provider break when it happens, not at your next unrelated deploy.
|
|
186
|
+
3. **Resilience component tests** (pre-merge) verify the consumer survives a broken contract: timeouts enforce, retries and circuit breakers behave, malformed responses are handled, the caller gets a documented response with no partial state.
|
|
187
|
+
|
|
188
|
+
Provider-side verification of your contract is a bonus if they offer it — not the mechanism to rely on.
|
|
189
|
+
|
|
190
|
+
### Baseline before refactor (legacy code)
|
|
191
|
+
|
|
192
|
+
Legacy code is code without tests (regardless of age). When a component is poorly tested, **do not lead with refactoring**:
|
|
193
|
+
|
|
194
|
+
1. **Find the testable seams** — places where behavior can be observed or substituted without editing the code (HTTP handler, CLI entrypoint, message handler, exported function, existing injection points).
|
|
195
|
+
2. **Write the best outside-in tests achievable now, without refactoring** — characterization tests at the outermost reachable seam that lock in current behavior. This is a behavior baseline, not yet a clean gate.
|
|
196
|
+
3. **Get the baseline green** — your safety net.
|
|
197
|
+
4. **Refactor to improve testability under green** — introduce adapters and seams, push checks down to deterministic component/unit tests. Never change behavior and structure in the same step.
|
|
198
|
+
5. **Let the domain guide the target** — the `domain-driven-design` and `domain-analysis` skills suggest where boundaries and seams should land.
|
|
199
|
+
|
|
200
|
+
The mechanics live in the [`legacy-code`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/legacy-code/SKILL.md) skill; this workflow places it in the CD test architecture. An assessment of an under-tested component therefore returns two things: the outside-in baseline writable today, and the refactor sequence that improves testability afterward.
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
## Sample Invocations
|
|
205
|
+
|
|
206
|
+
```bash
|
|
207
|
+
# Full application assessment
|
|
208
|
+
/cd-test-architecture ./src
|
|
209
|
+
|
|
210
|
+
# Scope to one component
|
|
211
|
+
/cd-test-architecture ./src --component payment-service
|
|
212
|
+
|
|
213
|
+
# Include existing CI config in the assessment
|
|
214
|
+
/cd-test-architecture ./src --ci .github/workflows/ci.yml
|
|
215
|
+
|
|
216
|
+
# Application tested primarily via Postman collections
|
|
217
|
+
/cd-test-architecture ./src --external-tests ./test-collections/api-tests.postman_collection.json
|
|
218
|
+
|
|
219
|
+
# Application tested in another repo
|
|
220
|
+
/cd-test-architecture ./src --external-tests "../qa-repo/e2e/payment-service"
|
|
221
|
+
|
|
222
|
+
# Per-file / changeset review + suite-wide Farley Score (current working tree or staged changes)
|
|
223
|
+
/test-design
|
|
224
|
+
|
|
225
|
+
# Per-file review scoped to a directory
|
|
226
|
+
/test-design --path src/payments
|
|
227
|
+
|
|
228
|
+
# Per-file review of changes since a branch
|
|
229
|
+
/test-design --since main
|
|
230
|
+
|
|
231
|
+
# Force the advisor to run (also auto-triggers when production code has few/no tests)
|
|
232
|
+
/test-design --advise
|
|
233
|
+
|
|
234
|
+
# Unit/module design advice (advisory — does not write tests)
|
|
235
|
+
# The test-design-advisor worker skill is dispatched via /test-design; a
|
|
236
|
+
# single-file target auto-fires the advisor.
|
|
237
|
+
/test-design --advise --path src/payments/PaymentProcessor.ts
|
|
238
|
+
|
|
239
|
+
# Strategic suite-wide audit — delegates to cd-test-architecture, /test-design, and mutation-testing
|
|
240
|
+
/test-health
|
|
241
|
+
/test-health --path src/payments
|
|
242
|
+
|
|
243
|
+
# Assertion strength on critical-logic modules
|
|
244
|
+
/mutation-testing
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
---
|
|
248
|
+
|
|
249
|
+
## Reference Files
|
|
250
|
+
|
|
251
|
+
| File | What it defines |
|
|
252
|
+
|---|---|
|
|
253
|
+
| [`agents/qa-engineer.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/agents/qa-engineer.md) | The Senior SDET agent that routes strategic test requests to these skills |
|
|
254
|
+
| [`agents/test-review.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/agents/test-review.md) | The tactical per-file test-quality review agent |
|
|
255
|
+
| [`agents/test-smell-review.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/agents/test-smell-review.md) | The smell-detection review agent |
|
|
256
|
+
| [`knowledge/cd-test-architecture.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/knowledge/cd-test-architecture.md) | Six MinimumCD test types, the pre-merge gate rule, out-of-repo anti-pattern, component test pattern, adapter rule, double validation, determinism techniques |
|
|
257
|
+
| [`knowledge/component-test-patterns.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/knowledge/component-test-patterns.md) | Per-component patterns: UI, API Provider, API Consumer, Event Consumer, Event Producer, Stateful Service, CLI/Library, Scheduled Job |
|
|
258
|
+
| [`knowledge/database-test-patterns.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/knowledge/database-test-patterns.md) | Database test isolation + teardown: Database Sandbox, Transaction Rollback / Table Truncation Teardown, Fake-first rule for data-logic tests |
|
|
259
|
+
| [`knowledge/dependency-breaking-techniques.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/knowledge/dependency-breaking-techniques.md) | Feathers' full 24-technique catalog for getting legacy code under test (behavior-preserving seams, seam type + risk) |
|
|
260
|
+
| [`knowledge/legacy-test-strategy.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/knowledge/legacy-test-strategy.md) | Where to test legacy code: effect reasoning, effect sketches, interception/pinch points; plus editing-safety techniques |
|
|
261
|
+
| [`knowledge/microservice-testing.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/knowledge/microservice-testing.md) | Contract and CDC testing across independently-deployable services |
|
|
262
|
+
| [`knowledge/test-automation-maturity.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/knowledge/test-automation-maturity.md) | Maturity ladder consumed by `test-health` for the strategic rollup |
|
|
263
|
+
| [`knowledge/test-automation-principles.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/knowledge/test-automation-principles.md) | Goals + named Principles of Test Automation — the rubric for *why* a test is good or bad; grounds smell severity |
|
|
264
|
+
| [`knowledge/test-doubles.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/knowledge/test-doubles.md) | Dummy / stub / spy / mock / fake selection, Configurable vs. Hard-Coded form, Test-Specific Subclass, state-vs-behavior verification |
|
|
265
|
+
| [`knowledge/test-matrix-examples/`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/knowledge/test-matrix-examples/) | Worked, stack-specific placement matrices the advisor adapts (Spring Boot, Django batch, React/Node SPA, SSR + HTMX, .NET API fronting gRPC) |
|
|
266
|
+
| [`knowledge/test-pyramid.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/knowledge/test-pyramid.md) | Pyramid layer responsibilities and shape anti-patterns |
|
|
267
|
+
| [`knowledge/test-smells.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/knowledge/test-smells.md) | xUnit smell taxonomy: code, behavior, and project smells |
|
|
268
|
+
| [`knowledge/testing-quadrants.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/knowledge/testing-quadrants.md) | Agile Testing Quadrants — what each quadrant protects; consumed by `test-health` |
|
|
269
|
+
| [`knowledge/value-patterns.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/knowledge/value-patterns.md) | Test-data sourcing: Literal / Derived / Generated Value + Dummy Object |
|
|
270
|
+
| [`skills/cd-test-architecture/SKILL.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/cd-test-architecture/SKILL.md) | The application-level assessment skill |
|
|
271
|
+
| [`skills/domain-driven-design/SKILL.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/domain-driven-design/SKILL.md) | Suggests target boundaries/seams for the post-baseline refactor |
|
|
272
|
+
| [`skills/legacy-code/SKILL.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/legacy-code/SKILL.md) | Characterization testing + dependency-breaking: the baseline-before-refactor procedure |
|
|
273
|
+
| [`skills/mutation-testing/SKILL.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/mutation-testing/SKILL.md) | Assertion-strength check (do tests catch real bugs?); folded into `test-health` |
|
|
274
|
+
| [`skills/test-design/SKILL.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/test-design/SKILL.md) | The `/test-design` orchestrator skill — dispatches review agents, scores with Farley, optionally invokes the advisor |
|
|
275
|
+
| [`skills/test-design-advisor/SKILL.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/test-design-advisor/SKILL.md) | The unit/module design advisor skill |
|
|
276
|
+
| [`skills/farley-score/SKILL.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/farley-score/SKILL.md) | Farley Score — Dave Farley's 8 properties scored 1–10, called by `/test-design` Step 3 (Score the in-scope tests via Farley Score) |
|
|
277
|
+
| [`skills/test-health/SKILL.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/test-health/SKILL.md) | Strategic suite-wide rollup; delegates to `cd-test-architecture`, `/test-design`, `mutation-testing` |
|