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,62 @@
|
|
|
1
|
+
Produce a stable executive-summary report from the shipped template. Every
|
|
2
|
+
section is present in every run; empty sections **do not disappear** — they
|
|
3
|
+
render `_Not applicable — <reason>._` so the shape of the report never changes
|
|
4
|
+
between runs.
|
|
5
|
+
|
|
6
|
+
**Template source.** Copy
|
|
7
|
+
`plugins/dev-team/skills/test-improve/templates/executive-summary.md` to the
|
|
8
|
+
output path.
|
|
9
|
+
|
|
10
|
+
**Output path.** `.dev-team-reports/test-improve/<slug>/report-<date>.md` —
|
|
11
|
+
the file is always relative to the invocation directory, whether the run used
|
|
12
|
+
a tracker sink or local-files mode. Its git-tracked `data/` sibling is
|
|
13
|
+
`.dev-team-reports/test-improve/<slug>/data/`.
|
|
14
|
+
|
|
15
|
+
**Interpolation.** Every placeholder is **interpolated** from two sources:
|
|
16
|
+
the git-tracked `.dev-team-reports/test-improve/<slug>/data/` directory
|
|
17
|
+
(`test-counts-before.json`, `test-counts-after.json` if Phase 8 ran,
|
|
18
|
+
`baseline-coverage.json`, `baseline-mutation.json` in `baseline+kill-loop`
|
|
19
|
+
mode, and `coverage-history.json` — each already current there, written
|
|
20
|
+
directly at the point of capture by Phase 2 and Phase 5 respectively), and the
|
|
21
|
+
process/audit state still under `.claude/memory/test-improve/<slug>/`
|
|
22
|
+
(`phase-0.md`, `phase-1.md`, `phase-4.md`, `phase-5-review.json`,
|
|
23
|
+
`phase-7-review.json` if Phase 7 ran, `waivers.json`, `phase-8.md`), plus
|
|
24
|
+
`.dev-team-reports/test-improve/<slug>/refactor-backlog.md` if Phase 6 chose
|
|
25
|
+
`[b]` or Phase 8 wrote a no-refactor-mode entry to it. `mutation-history.json`
|
|
26
|
+
is outside this interpolation set — and always has been; it is consumed by
|
|
27
|
+
`/coverage-delta` and `/quality-targets-converge`, not by the
|
|
28
|
+
executive-summary report, so its absence from this list is not the bug this
|
|
29
|
+
plan fixes. `coverage-gap-ranking.json` (issue #1786) is outside it for the
|
|
30
|
+
same reason: it is a targeting input read by Phases 1, 4, and 5, not a number
|
|
31
|
+
the report interpolates. No placeholder is left literal.
|
|
32
|
+
|
|
33
|
+
**Empty-section rule.** Sections with no data render `_Not applicable —
|
|
34
|
+
<reason>._` (e.g. § 6 when Phase 7 was declined reads "*Phase 7 not run —
|
|
35
|
+
operator chose to backlog REFACTOR_REQUIRED items at Phase 6.*"). Sections
|
|
36
|
+
are never omitted or hidden — this keeps the report shape stable across runs.
|
|
37
|
+
|
|
38
|
+
**Mutation row shape (per Phase-0 mutation mode).**
|
|
39
|
+
|
|
40
|
+
- `off`: `_Not applicable — mutation disabled at Phase 0._`
|
|
41
|
+
- `kill-loop`, non-Go: final surviving-mutant count from the Phase-5 kill loop;
|
|
42
|
+
the baseline and Δ cells read `_Not applicable — no baseline run (kill-loop
|
|
43
|
+
mode)._` since no Phase-2 baseline was taken.
|
|
44
|
+
- `baseline+kill-loop`, non-Go: honest baseline-to-achieved score (hard kills /
|
|
45
|
+
effective total; timeouts reported separately) with the Δ column populated.
|
|
46
|
+
- Go stack (`kill-loop` or `baseline+kill-loop`): honest numbers with the
|
|
47
|
+
"advisory only — go-mutesting is alpha" footnote.
|
|
48
|
+
|
|
49
|
+
**Parent-issue-or-FEATURE.md link update.** When the run used a **parent
|
|
50
|
+
tracker** (Phase 0 selected `--parent <url>`), the parent issue is updated
|
|
51
|
+
with a link to `.dev-team-reports/test-improve/<slug>/report-<date>.md`. When
|
|
52
|
+
the run was **local-files-only**, `.claude/plans/test-improve/FEATURE.md` is
|
|
53
|
+
updated with the same link.
|
|
54
|
+
|
|
55
|
+
**Regeneratable-from-tracked-data contract.** The report is a **pure
|
|
56
|
+
function** of the git-tracked `.dev-team-reports/test-improve/<slug>/data/`
|
|
57
|
+
directory (the numbers, already current by construction — each file was
|
|
58
|
+
written directly there at the point of capture) plus the process/audit
|
|
59
|
+
narrative still under `.claude/memory/test-improve/<slug>/`. Deleting the
|
|
60
|
+
report file and re-invoking Phase 9 reproduces the report byte-for-byte —
|
|
61
|
+
there is no copy step to re-run, and always exactly one place to read the
|
|
62
|
+
numbers from; Phase 9 always reads `data/` directly, unconditionally.
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
Shared end-of-phase review loop: dispatch the `/code-review` panel once
|
|
2
|
+
against the phase's diff, score the in-scope tests, apply fixes, confirm
|
|
3
|
+
them, and iterate to a capped round count before escalating to the operator.
|
|
4
|
+
Phase 5 and Phase 7 both invoke this loop verbatim against their own diff and
|
|
5
|
+
write their own phase-numbered evidence file using the fixed schema below.
|
|
6
|
+
|
|
7
|
+
1. **Dispatch the review panel — one panel per round (#1959).** Run
|
|
8
|
+
`/code-review --since <base-sha> --internal` against the diff between the
|
|
9
|
+
phase's base commit and HEAD. `--internal` (not `--json`) mirrors
|
|
10
|
+
`/build`'s Step 6 backstop-review flag choice: it suppresses the
|
|
11
|
+
`.dev-team-reports/code-review.md` write (this is a diff-scoped,
|
|
12
|
+
phase-internal review, not a human-invoked top-level run —
|
|
13
|
+
`knowledge/report-output-location.md`) while keeping the prose/
|
|
14
|
+
`corrections/` output sub-step 3 depends on — `--json` would skip that
|
|
15
|
+
output entirely.
|
|
16
|
+
|
|
17
|
+
**This loop no longer dispatches `/test-design` alongside the panel.**
|
|
18
|
+
`/test-design`'s two review agents — `test-review` and
|
|
19
|
+
`test-smell-review` — are both already in `/code-review`'s own roster for
|
|
20
|
+
this loop's changesets: `test-review` declares `Scope: always`, and
|
|
21
|
+
`test-smell-review` declares `Scope: test-files` (#1978), which
|
|
22
|
+
`scripts/select_lenses.py` resolves against
|
|
23
|
+
`knowledge/test-file-indicators.md`. A phase diff that adds or edits
|
|
24
|
+
tests — which is what this loop reviews, and what `refactor-mode:
|
|
25
|
+
no-refactor` guarantees — matches that scope by construction. Dispatching both skills against one
|
|
26
|
+
diff paid for the same two agents, over the same files, twice per round.
|
|
27
|
+
The panel still runs them; only the duplicate dispatch (and
|
|
28
|
+
`/test-design`'s own orchestration/aggregation layer) is gone.
|
|
29
|
+
|
|
30
|
+
**Confirm the two test lenses actually ran — do not assume the roster
|
|
31
|
+
kept them.** `/code-review`'s change-size gate (#1339) drops every
|
|
32
|
+
`Scope: always` agent outside its `keepAgents` floor on a small diff, and
|
|
33
|
+
`test-review`/`test-smell-review` are not in that floor. Read the panel's
|
|
34
|
+
reported roster (it names every gate-driven drop). If either lens was
|
|
35
|
+
dropped by a gate, dispatch it directly —
|
|
36
|
+
`/review-agent test-review --internal` and/or
|
|
37
|
+
`/review-agent test-smell-review --internal` — before proceeding. A
|
|
38
|
+
test-improvement phase whose review skipped both test lenses has reviewed
|
|
39
|
+
the wrong thing; this is the one lens pair this loop guarantees.
|
|
40
|
+
|
|
41
|
+
`/test-design`'s forward-design worker (`test-design-advisor`) is not lost
|
|
42
|
+
here either: it auto-fires only for untested production code or a
|
|
43
|
+
single-production-file target, and a Phase-5/7 diff under this loop is
|
|
44
|
+
test-and-seam-scoped, so it would not have fired. Reach for `/test-design`
|
|
45
|
+
directly when you want forward design for a specific module — it is
|
|
46
|
+
unchanged as a standalone skill and still runs inside `/test-health`.
|
|
47
|
+
2. **Score the in-scope tests.** Invoke `Skill(farley-score ...)` scoped to
|
|
48
|
+
the phase diff's test files (indicators in
|
|
49
|
+
`knowledge/test-file-indicators.md`). This is the one input the evidence
|
|
50
|
+
schema needs that the panel does not produce; it is a direct worker call,
|
|
51
|
+
not an orchestrator dispatch.
|
|
52
|
+
3. **Apply fixes, then confirm them narrowly (#1960).** Run
|
|
53
|
+
`/apply-fixes corrections/`. To confirm the fixes landed, **do not re-run
|
|
54
|
+
the full panel** — a whole-roster re-dispatch re-pays discovery cost to
|
|
55
|
+
answer a confirmation question. Confirm the way `/code-review` step 6a
|
|
56
|
+
and `/build`'s checkpoints already do:
|
|
57
|
+
|
|
58
|
+
- **Deterministic-first triage (#1610).** When a fix is mechanical and the
|
|
59
|
+
claim is deterministically checkable, close it with the project's own
|
|
60
|
+
stack tooling — its linter/type-checker (`ruff`/`mypy`, ESLint/`tsc`,
|
|
61
|
+
`pmd`, `dotnet format`/`dotnet build`, …), its test suite, or `grep` —
|
|
62
|
+
never an agent.
|
|
63
|
+
- **Verification-mode re-dispatch for the rest.** Re-dispatch **only the
|
|
64
|
+
agents whose findings were fixed**, with the narrowed payload and the
|
|
65
|
+
mandatory `insufficient-context` escape, resolving each agent's tier via
|
|
66
|
+
`python3 "$CLAUDE_PLUGIN_ROOT/scripts/verify_tier.py" --agent <name>`.
|
|
67
|
+
The payload contract, the escape's escalation path (an
|
|
68
|
+
`insufficient-context` reply earns a **full-context** re-dispatch of
|
|
69
|
+
that same agent at its discovery tier — never a shrug), and the
|
|
70
|
+
declared-never-inferred tier-down rule are stated once in
|
|
71
|
+
[`../../../knowledge/verification-mode.md`](../../../knowledge/verification-mode.md)
|
|
72
|
+
and are not restated here.
|
|
73
|
+
|
|
74
|
+
Discovery of *new* problems remains the initial panel's job (sub-step 1),
|
|
75
|
+
which is unchanged — this sub-step only cheapens confirming what was just
|
|
76
|
+
fixed.
|
|
77
|
+
4. **Iterate at most 2 rounds.** After **2 iterations** without clean
|
|
78
|
+
`/code-review`, prompt the operator with **`[r]evise / [w]aive / [q]uit`**
|
|
79
|
+
(shape `[r/w/q]`).
|
|
80
|
+
- `[r]` triggers one more revise pass (may exceed the cap by operator
|
|
81
|
+
consent).
|
|
82
|
+
- `[w]` writes the outstanding finding set to
|
|
83
|
+
`.claude/memory/test-improve/<slug>/waivers.json`, **tagged** with the
|
|
84
|
+
finding list, and closes the phase.
|
|
85
|
+
- `[q]` quits the phase with the loop unresolved.
|
|
86
|
+
5. **Evidence.** Write the calling phase's own review-evidence file with the
|
|
87
|
+
fixed schema — fields: `base_sha`, `head_sha`, `farley_score`, `smells`,
|
|
88
|
+
`code_review`, `iterations`, `escalated`. `farley_score` comes from
|
|
89
|
+
sub-step 2. `smells` comes from the panel's own `test-smell-review`
|
|
90
|
+
findings (sub-step 1) — the same agent's findings the removed
|
|
91
|
+
`/test-design` dispatch used to aggregate, read from the panel result
|
|
92
|
+
instead of from a second dispatch of it.
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# /test-improve executive summary — {{repo_slug}} ({{run_date}})
|
|
2
|
+
|
|
3
|
+
> Generated by `/test-improve` Phase 9 from the git-tracked `.dev-team-reports/test-improve/{{slug}}/data/` directory (see §3) plus the process/audit state under `.claude/memory/test-improve/{{slug}}/`. Regeneratable: delete this file and re-run Phase 9 against those persisted artifacts to reproduce it byte-for-byte.
|
|
4
|
+
|
|
5
|
+
## 1. Bottom line
|
|
6
|
+
|
|
7
|
+
{{bottom_line_narrative}}
|
|
8
|
+
|
|
9
|
+
| Metric | Baseline | Achieved | Δ |
|
|
10
|
+
| --- | --- | --- | --- |
|
|
11
|
+
| Line coverage | {{baseline_line_cov}} | {{achieved_line_cov}} | {{delta_line_cov}} |
|
|
12
|
+
| Branch coverage | {{baseline_branch_cov}} | {{achieved_branch_cov}} | {{delta_branch_cov}} |
|
|
13
|
+
| Mutation score (hard kills) | {{baseline_mutation_hard}} | {{achieved_mutation_hard}} | {{delta_mutation_hard}} |
|
|
14
|
+
| Mutation timeouts (reported separately) | {{baseline_mutation_timeouts}} | {{achieved_mutation_timeouts}} | {{delta_mutation_timeouts}} |
|
|
15
|
+
| Determinism | {{baseline_determinism}} | {{achieved_determinism}} | {{delta_determinism}} |
|
|
16
|
+
| Wall-clock (full suite) | {{baseline_wallclock}} | {{achieved_wallclock}} | {{delta_wallclock}} |
|
|
17
|
+
|
|
18
|
+
_When mutation was disabled at Phase 0 (mode `off`), the mutation rows read **"Not applicable — mutation disabled at Phase 0."**_
|
|
19
|
+
|
|
20
|
+
_When mutation mode was `kill-loop` (mutant-kill loop with no Phase-2 baseline), the Baseline and Δ cells read **"Not applicable — no baseline run (kill-loop mode)."** and Achieved carries the final surviving-mutant count. Only `baseline+kill-loop` populates the baseline and Δ cells._
|
|
21
|
+
|
|
22
|
+
_When the stack is Go, the mutation row carries the footnote: **"Advisory only — go-mutesting is alpha; survivor count is not a gate for this run."**_
|
|
23
|
+
|
|
24
|
+
### Tests by type
|
|
25
|
+
|
|
26
|
+
| Type | Baseline | Achieved | Δ |
|
|
27
|
+
| --- | --- | --- | --- |
|
|
28
|
+
| Static analysis | {{baseline_static_analysis}} | {{achieved_static_analysis}} | {{delta_static_analysis}} |
|
|
29
|
+
| Unit | {{baseline_unit}} | {{achieved_unit}} | {{delta_unit}} |
|
|
30
|
+
| Component | {{baseline_component}} | {{achieved_component}} | {{delta_component}} |
|
|
31
|
+
| Contract | {{baseline_contract}} | {{achieved_contract}} | {{delta_contract}} |
|
|
32
|
+
| Integration | {{baseline_integration}} | {{achieved_integration}} | {{delta_integration}} |
|
|
33
|
+
| End-to-end | {{baseline_end_to_end}} | {{achieved_end_to_end}} | {{delta_end_to_end}} |
|
|
34
|
+
|
|
35
|
+
_Counts are test suites/files, not individual test cases. A type with zero
|
|
36
|
+
suites still renders its row (`0 / 0 / 0`) — never omitted._
|
|
37
|
+
|
|
38
|
+
_When `test-counts-after.json` does not exist (the operator quit before
|
|
39
|
+
Phase 8 ran), every row's Achieved and Δ cells read **"Not applicable —
|
|
40
|
+
Phase 8 not run."**; Baseline still renders from `test-counts-before.json`._
|
|
41
|
+
|
|
42
|
+
## 2. What was done this run
|
|
43
|
+
|
|
44
|
+
{{phase_summary}}
|
|
45
|
+
|
|
46
|
+
- Phase 0 — approach contract resolved
|
|
47
|
+
- Phase 1 — analysis via `/test-health`
|
|
48
|
+
- Phase 2 — coverage {{mutation_baseline_phrase}} baseline captured
|
|
49
|
+
- Phase 3 — {{gherkin_phrase}}
|
|
50
|
+
- Phase 4 — {{triage_summary}}
|
|
51
|
+
- Phase 5 — improve without refactoring
|
|
52
|
+
- Phase 6 — refactor decision: `{{phase_6_choice}}`
|
|
53
|
+
- Phase 7 — refactor-for-testability {{phase_7_phrase}}
|
|
54
|
+
- Phase 8 — quality targets: {{targets_summary}}
|
|
55
|
+
|
|
56
|
+
## 3. What was measured
|
|
57
|
+
|
|
58
|
+
{{measurement_narrative}}
|
|
59
|
+
|
|
60
|
+
Baseline artifacts (git-tracked under `.dev-team-reports/test-improve/{{slug}}/data/` — copied there unconditionally by Phase 9 from their canonical `.claude/memory/test-improve/{{slug}}/` working copy):
|
|
61
|
+
|
|
62
|
+
- `baseline-coverage.json`
|
|
63
|
+
- `baseline-mutation.json` — _Not applicable in `off` and `kill-loop` modes (no baseline run); advisory-only on Go `baseline+kill-loop`._
|
|
64
|
+
|
|
65
|
+
Per-Story deltas:
|
|
66
|
+
|
|
67
|
+
- `coverage-history.json`
|
|
68
|
+
|
|
69
|
+
## 4. Findings from `/test-health`
|
|
70
|
+
|
|
71
|
+
{{findings_summary}}
|
|
72
|
+
|
|
73
|
+
Full analysis: `.claude/memory/test-improve/{{slug}}/phase-1.md`.
|
|
74
|
+
|
|
75
|
+
## 5. Work completed (Phase 5 — no refactoring)
|
|
76
|
+
|
|
77
|
+
{{phase_5_completed}}
|
|
78
|
+
|
|
79
|
+
Review evidence: `.claude/memory/test-improve/{{slug}}/phase-5-review.json`.
|
|
80
|
+
|
|
81
|
+
## 6. Work completed (Phase 7 — refactor-for-testability)
|
|
82
|
+
|
|
83
|
+
{{phase_7_completed}}
|
|
84
|
+
|
|
85
|
+
_When Phase 7 was declined: **"Phase 7 not run — operator chose to backlog REFACTOR_REQUIRED items at Phase 6."**_
|
|
86
|
+
|
|
87
|
+
Review evidence: `.claude/memory/test-improve/{{slug}}/phase-7-review.json` — _Not applicable when Phase 7 did not run._
|
|
88
|
+
|
|
89
|
+
## 7. Deferred work — areas requiring refactoring to add tests
|
|
90
|
+
|
|
91
|
+
{{deferred_summary}}
|
|
92
|
+
|
|
93
|
+
| Seam needed | Behavior gained | Estimated risk |
|
|
94
|
+
| --- | --- | --- |
|
|
95
|
+
| {{refactor_backlog_rows}} | | |
|
|
96
|
+
|
|
97
|
+
_When `refactor-backlog.md` does not exist (no items were backlogged this run), this section reads **"Not applicable — no REFACTOR_REQUIRED items were backlogged this run."** instead of a table._
|
|
98
|
+
|
|
99
|
+
Backlog file: `.dev-team-reports/test-improve/{{slug}}/refactor-backlog.md` — _Not applicable when no items were backlogged._
|
|
100
|
+
|
|
101
|
+
## 8. Waivers
|
|
102
|
+
|
|
103
|
+
{{waivers_summary}}
|
|
104
|
+
|
|
105
|
+
Waivers file: `.claude/memory/test-improve/{{slug}}/waivers.json` — _Not applicable when no waivers were captured._
|
|
106
|
+
|
|
107
|
+
## 9. Next actions
|
|
108
|
+
|
|
109
|
+
{{next_actions}}
|
|
110
|
+
|
|
111
|
+
## 10. Provenance
|
|
112
|
+
|
|
113
|
+
- Repository: `{{repo_path}}`
|
|
114
|
+
- Slug: `{{slug}}`
|
|
115
|
+
- Branch / base SHA: `{{branch}}` / `{{base_sha}}`
|
|
116
|
+
- Head SHA: `{{head_sha}}`
|
|
117
|
+
- Run started: `{{run_started}}`
|
|
118
|
+
- Run completed: `{{run_completed}}`
|
|
119
|
+
- Phase-0 settings: `{{phase_0_recap}}`
|
|
120
|
+
- Sink: `{{sink_description}}`
|
|
121
|
+
- `/test-improve` version: `{{plugin_version}}`
|
|
122
|
+
|
|
123
|
+
_This report is regeneratable from the git-tracked `.dev-team-reports/test-improve/{{slug}}/data/` directory (with baseline artifacts under it; see §3) plus the process/audit state under `.claude/memory/test-improve/{{slug}}/`. Delete and re-run Phase 9 to reproduce it._
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: threat-modeling
|
|
3
|
+
description: Structured STRIDE security analysis for identifying threats, attack surfaces, and mitigations. Use before implementing any new API, service, authentication change, or data flow crossing trust boundaries — security analysis belongs in the design phase, not after.
|
|
4
|
+
role: worker
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Threat Modeling
|
|
9
|
+
|
|
10
|
+
Role: worker. This command performs STRIDE analysis directly and documents
|
|
11
|
+
threats/mitigations — it does not implement the mitigations it identifies.
|
|
12
|
+
|
|
13
|
+
## Overview
|
|
14
|
+
|
|
15
|
+
Structured security analysis for identifying threats, attack surfaces, and mitigations during design or review phases. Ensures security considerations are addressed before implementation, not after.
|
|
16
|
+
|
|
17
|
+
## Constraints
|
|
18
|
+
- Focus on trust boundaries, not implementation details
|
|
19
|
+
- Every mitigation must map to a verifiable test or verification method
|
|
20
|
+
- Document accepted risks explicitly with rationale; do not silently ignore threats
|
|
21
|
+
- Revisit the threat model when architecture, authentication, or data flows change
|
|
22
|
+
|
|
23
|
+
## Core Concepts
|
|
24
|
+
|
|
25
|
+
### STRIDE Classification
|
|
26
|
+
|
|
27
|
+
| Category | Definition | Example Threats |
|
|
28
|
+
| --- | --- | --- |
|
|
29
|
+
| **S**poofing | Pretending to be something or someone else | Forged authentication tokens, impersonated services |
|
|
30
|
+
| **T**ampering | Modifying data or code without authorization | Altered request payloads, modified configuration files |
|
|
31
|
+
| **R**epudiation | Denying an action was performed | Unlogged administrative actions, unsigned transactions |
|
|
32
|
+
| **I**nformation Disclosure | Exposing data to unauthorized parties | Leaked credentials in logs, verbose error messages |
|
|
33
|
+
| **D**enial of Service | Making a system unavailable | Resource exhaustion, unbounded queries |
|
|
34
|
+
| **E**levation of Privilege | Gaining access beyond authorization | Broken access control, privilege escalation via injection |
|
|
35
|
+
|
|
36
|
+
### Trust Boundaries
|
|
37
|
+
|
|
38
|
+
Points where data crosses privilege levels. Every trust boundary is a potential attack surface. Common boundaries:
|
|
39
|
+
|
|
40
|
+
- Client to server
|
|
41
|
+
- Service to service (internal)
|
|
42
|
+
- Application to database
|
|
43
|
+
- System to external dependency
|
|
44
|
+
- User role transitions
|
|
45
|
+
|
|
46
|
+
### Attack Surface
|
|
47
|
+
|
|
48
|
+
Entry points exposed to untrusted input: API endpoints, file uploads, message queues, configuration inputs, user-supplied queries. Smaller attack surface means fewer threats to mitigate.
|
|
49
|
+
|
|
50
|
+
## Patterns
|
|
51
|
+
|
|
52
|
+
### Threat Identification Procedure
|
|
53
|
+
|
|
54
|
+
1. **Enumerate assets** — identify what needs protection (data, services, credentials, infrastructure)
|
|
55
|
+
2. **Draw trust boundaries** — map where data crosses privilege levels
|
|
56
|
+
3. **Identify entry points** — list all inputs exposed to untrusted sources
|
|
57
|
+
4. **Classify threats per STRIDE** — for each entry point, apply each STRIDE category and document applicable threats
|
|
58
|
+
5. **Rate severity** — assess impact (critical/high/medium/low) and likelihood for each threat
|
|
59
|
+
|
|
60
|
+
### Mitigation Mapping
|
|
61
|
+
|
|
62
|
+
| Threat Category | Standard Mitigations | Verification Method |
|
|
63
|
+
| --- | --- | --- |
|
|
64
|
+
| Spoofing | Authentication, mutual TLS, token validation | Auth integration tests, certificate verification |
|
|
65
|
+
| Tampering | Input validation, integrity checks, signed payloads | Tampering test cases, checksum validation |
|
|
66
|
+
| Repudiation | Audit logging, event sourcing, digital signatures | Log completeness review, signature verification |
|
|
67
|
+
| Information Disclosure | Encryption at rest/in transit, access controls, log scrubbing | Security scan, log audit, access control tests |
|
|
68
|
+
| Denial of Service | Rate limiting, resource quotas, circuit breakers | Load tests, resource monitoring |
|
|
69
|
+
| Elevation of Privilege | Least privilege, role-based access, input sanitization | Authorization test matrix, penetration tests |
|
|
70
|
+
|
|
71
|
+
### Threat Model Review Triggers
|
|
72
|
+
|
|
73
|
+
Revisit the threat model when any of the following occur:
|
|
74
|
+
|
|
75
|
+
- New external dependency added
|
|
76
|
+
- New API endpoint or entry point exposed
|
|
77
|
+
- Authentication or authorization changes
|
|
78
|
+
- Data flow changes crossing trust boundaries
|
|
79
|
+
- Infrastructure topology changes
|
|
80
|
+
|
|
81
|
+
## When to Apply
|
|
82
|
+
|
|
83
|
+
| Scenario | Apply? |
|
|
84
|
+
| --- | --- |
|
|
85
|
+
| New service or API endpoint | Yes |
|
|
86
|
+
| New external integration | Yes |
|
|
87
|
+
| Authentication or authorization changes | Yes |
|
|
88
|
+
| Data flow crossing trust boundaries | Yes |
|
|
89
|
+
| Internal refactoring with no boundary changes | No |
|
|
90
|
+
| UI-only cosmetic changes | No |
|
|
91
|
+
|
|
92
|
+
## Guidelines
|
|
93
|
+
|
|
94
|
+
1. **Focus on trust boundaries, not implementation details.** Threats exist at boundaries where privilege levels change.
|
|
95
|
+
2. **Mitigations must be verifiable.** Every mitigation maps to a test or verification method; unverifiable mitigations are theater.
|
|
96
|
+
3. **Document accepted risks explicitly.** When a threat is acknowledged but not mitigated, record the rationale, severity, and conditions for revisiting.
|
|
97
|
+
4. **Review when architecture changes.** The threat model is a living document that stays current with the system it describes.
|
|
98
|
+
5. **Severity drives priority.** Critical and high-severity threats block implementation; medium and low are tracked and scheduled.
|
|
99
|
+
6. **Threat models are collaborative.** Security analysis improves with input from architects, developers, and operations engineers.
|
|
100
|
+
|
|
101
|
+
## Output
|
|
102
|
+
STRIDE threat table with severity ratings, mitigation mapping, and verification methods. Explicitly list accepted risks with rationale. Be concise — table format; group by STRIDE category.
|
|
103
|
+
|
|
104
|
+
## Integration
|
|
105
|
+
|
|
106
|
+
- **Agent-Assisted Specification** — invoke during the Architecture Specification stage to identify security constraints before implementation
|
|
107
|
+
- **Governance & Compliance** — threat documentation feeds compliance audit trails and security review records
|
|
108
|
+
- **Accuracy Validation** — verify threat assessments against actual system state, not assumed state
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: triage
|
|
3
|
+
description: >-
|
|
4
|
+
Investigate a bug, find its root cause, and write a portable triage record to
|
|
5
|
+
.dev-team-reports/triage/<slug>.md with a TDD fix plan. Use when the user
|
|
6
|
+
reports a bug and wants it triaged, says "triage this", "investigate and
|
|
7
|
+
write it up", or wants a hands-off bug investigation that produces an
|
|
8
|
+
actionable record.
|
|
9
|
+
argument-hint: "<bug description or error message> [--pdf]"
|
|
10
|
+
user-invocable: true
|
|
11
|
+
allowed-tools: Read, Glob, Grep, Bash, Write, Agent
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Bug Triage
|
|
15
|
+
|
|
16
|
+
Role: worker.
|
|
17
|
+
|
|
18
|
+
Investigate a bug hands-off, find root cause, and write a TDD fix plan to a
|
|
19
|
+
portable triage record at `.dev-team-reports/triage/<slug>.md` — no
|
|
20
|
+
issue-tracker dependency.
|
|
21
|
+
|
|
22
|
+
## Worker constraints
|
|
23
|
+
|
|
24
|
+
1. Investigate and record; do not fix the bug.
|
|
25
|
+
2. Find root cause before recording; do not record on symptoms alone — and do
|
|
26
|
+
not record an unverified, unrelated finding as if it were the root cause;
|
|
27
|
+
use the `unconfirmed` outcome instead.
|
|
28
|
+
3. **Be concise.** The record is structured; chat is the `triage-record:` line
|
|
29
|
+
plus a one-line root-cause summary — not the full body.
|
|
30
|
+
|
|
31
|
+
## Process
|
|
32
|
+
|
|
33
|
+
### 1. Capture the Problem
|
|
34
|
+
|
|
35
|
+
Get the bug description from the arguments or conversation. If no description is
|
|
36
|
+
given, ask EXACTLY one question: `What's the problem you're seeing?` and stop.
|
|
37
|
+
If a description is given, ask nothing — start investigating immediately.
|
|
38
|
+
|
|
39
|
+
**Scoped exception:** if the description signals a cross-service or
|
|
40
|
+
intermittent symptom (it names multiple repos/services, or uses language like
|
|
41
|
+
"intermittent", "sometimes", or "inconsistently"), ask ONE additional targeted
|
|
42
|
+
question before investigating: `Do you have any of the following: logs, a
|
|
43
|
+
sample request/response pair, trace/audit IDs, or a config/pipeline export?`
|
|
44
|
+
This is a narrow exception for that signal only — the "ask nothing" rule above
|
|
45
|
+
still applies to every other description, and the no-description fallback
|
|
46
|
+
question above is unchanged.
|
|
47
|
+
|
|
48
|
+
Arguments: $ARGUMENTS
|
|
49
|
+
|
|
50
|
+
### 2. Investigate
|
|
51
|
+
|
|
52
|
+
Apply the systematic debugging protocol from `skills/systematic-debugging/SKILL.md`:
|
|
53
|
+
|
|
54
|
+
1. **Reproduce**: Run the failing test or trigger the error
|
|
55
|
+
2. **Investigate**: Trace data flow, check recent changes, find working reference code
|
|
56
|
+
3. **Root cause**: Form and test a hypothesis
|
|
57
|
+
|
|
58
|
+
Use the `dev_team_subagent` tool with `agent: "Explore"` to deeply investigate the codebase:
|
|
59
|
+
related source files and dependencies, existing tests (covered vs missing),
|
|
60
|
+
recent changes to affected files (`git log`), error handling in the code path,
|
|
61
|
+
and similar patterns elsewhere that work correctly.
|
|
62
|
+
|
|
63
|
+
**Boundary dead-end:** if static tracing (grep/`codegraph_explore`) returns
|
|
64
|
+
zero hits for the relevant identifiers across all checked-out repos, name this
|
|
65
|
+
explicitly as **"producer not located in scope"** — do not keep searching
|
|
66
|
+
until an unrelated bug-shaped pattern turns up nearby. Carry this named
|
|
67
|
+
outcome into the Verification Checkpoint (Step 4), which routes it to the
|
|
68
|
+
`unconfirmed` outcome.
|
|
69
|
+
|
|
70
|
+
### 3. Design TDD Fix Plan
|
|
71
|
+
|
|
72
|
+
Create an ordered list of RED-GREEN cycles, each a vertical slice:
|
|
73
|
+
|
|
74
|
+
- **RED**: A specific test capturing broken/missing behavior
|
|
75
|
+
- **GREEN**: The minimal code change to make that test pass
|
|
76
|
+
|
|
77
|
+
Tests verify behavior at the public interface, not implementation details.
|
|
78
|
+
|
|
79
|
+
### 4. Verification Checkpoint
|
|
80
|
+
|
|
81
|
+
**Hard gate — cannot be skipped implicitly.** Before writing a `confirmed`
|
|
82
|
+
record, state in one sentence what concrete evidence (a log line, a
|
|
83
|
+
reproduced failure, an observed value in the actual data path) ties the
|
|
84
|
+
hypothesized cause to the *reported symptom*. A boundary dead-end from Step 2
|
|
85
|
+
("producer not located in scope") counts as inadequate evidence.
|
|
86
|
+
|
|
87
|
+
If that evidence exists, proceed to Step 5 with `confidence: confirmed`.
|
|
88
|
+
If it does not, do not write a confirmed root-cause section — route to the
|
|
89
|
+
`unconfirmed` outcome in Step 5 instead. There is no silent pass-through: a
|
|
90
|
+
missing or hand-waved evidence statement means `unconfirmed`, not `confirmed`.
|
|
91
|
+
|
|
92
|
+
### 5. Write the Triage Record
|
|
93
|
+
|
|
94
|
+
**Resolve the slug** from the bug title/description with this 8-step algorithm:
|
|
95
|
+
|
|
96
|
+
1. Lowercase.
|
|
97
|
+
2. Strip non-ASCII characters.
|
|
98
|
+
3. Replace spaces and underscores with hyphens.
|
|
99
|
+
4. Strip every character that is not `[a-z0-9-]`.
|
|
100
|
+
5. Collapse consecutive hyphens to one.
|
|
101
|
+
6. If longer than 60 characters, truncate to 60, then cut back to the last
|
|
102
|
+
hyphen (so no word is split).
|
|
103
|
+
7. Strip leading/trailing hyphens.
|
|
104
|
+
8. If the result is empty, fall back to `triage-YYYYMMDD` (today's UTC date).
|
|
105
|
+
|
|
106
|
+
**Resolve collisions:** if `.dev-team-reports/triage/<slug>.md` exists, append
|
|
107
|
+
`-2`, `-3`, … up to `-99` until a free name is found. **Never overwrite** an
|
|
108
|
+
existing record.
|
|
109
|
+
|
|
110
|
+
**Write the file:** (see `knowledge/report-output-location.md` for the
|
|
111
|
+
shared `.dev-team-reports/` convention this follows)
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
mkdir -p .dev-team-reports/triage/
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
If `.dev-team-reports/triage/` cannot be created or written (permission/read-only):
|
|
118
|
+
report `Cannot write .dev-team-reports/triage/<slug>.md: <error>`, write the
|
|
119
|
+
same content to a temp file (`tmp/triage-<slug>.md` or `$TMPDIR`), and print
|
|
120
|
+
the full record content to chat so nothing is lost.
|
|
121
|
+
|
|
122
|
+
When `--pdf` was passed and the record was written to disk, render **that
|
|
123
|
+
resolved path** (the exact `<slug>` chosen after collision resolution) to a
|
|
124
|
+
sibling PDF per `knowledge/report-pdf-integration.md` (additive; non-fatal if
|
|
125
|
+
no engine):
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
sh "$CLAUDE_PLUGIN_ROOT/hooks/py.sh" "$CLAUDE_PLUGIN_ROOT/hooks/lib/report_pdf.py" .dev-team-reports/triage/<resolved-slug>.md
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
The record is YAML frontmatter followed by four sections. Three outcomes are
|
|
132
|
+
possible, and they are mutually distinct — not variants of one another:
|
|
133
|
+
|
|
134
|
+
- **`confirmed`** — the Verification Checkpoint (Step 4) found concrete
|
|
135
|
+
evidence tying the cause to the reported symptom. Full Root Cause Analysis
|
|
136
|
+
and TDD Fix Plan, no banner.
|
|
137
|
+
- **`unconfirmed`** — a contributing factor was identified, but the
|
|
138
|
+
checkpoint found no evidence linking it to the reported symptom (including
|
|
139
|
+
a Step 2 boundary dead-end). Banner required; fix plan reframed as
|
|
140
|
+
addressing the contributing factor, not the confirmed cause.
|
|
141
|
+
- **not determined** — no plausible cause was found at all. `## TDD Fix Plan`
|
|
142
|
+
is replaced with the fixed string below; there is no `confidence` field
|
|
143
|
+
distinction because there is nothing to mark as confirmed or unconfirmed.
|
|
144
|
+
|
|
145
|
+
```markdown
|
|
146
|
+
---
|
|
147
|
+
id: <resolved-slug>
|
|
148
|
+
created: <YYYY-MM-DDThh:mm:ssZ>
|
|
149
|
+
status: open
|
|
150
|
+
confidence: confirmed
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
# <concise bug title>
|
|
154
|
+
|
|
155
|
+
## Problem
|
|
156
|
+
|
|
157
|
+
- **Actual behavior**: [what happens]
|
|
158
|
+
- **Expected behavior**: [what should happen]
|
|
159
|
+
- **Reproduction**: [how to trigger it]
|
|
160
|
+
|
|
161
|
+
## Root Cause Analysis
|
|
162
|
+
|
|
163
|
+
[What code path is involved, why it fails, contributing factors. Describe
|
|
164
|
+
modules and behaviors, not file paths — the record should survive refactors.]
|
|
165
|
+
|
|
166
|
+
## TDD Fix Plan
|
|
167
|
+
|
|
168
|
+
1. **RED**: Write a test that [expected behavior]
|
|
169
|
+
**GREEN**: [Minimal change to pass]
|
|
170
|
+
|
|
171
|
+
2. **RED**: Write a test that [next behavior]
|
|
172
|
+
**GREEN**: [Minimal change to pass]
|
|
173
|
+
|
|
174
|
+
**REFACTOR**: [Any cleanup after all tests pass]
|
|
175
|
+
|
|
176
|
+
## Acceptance Criteria
|
|
177
|
+
|
|
178
|
+
- [ ] Root cause is addressed (not just symptom)
|
|
179
|
+
- [ ] All new tests pass
|
|
180
|
+
- [ ] Existing tests still pass
|
|
181
|
+
- [ ] No regressions introduced
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
**`confidence` field:** omitted/absent defaults to `confirmed` — no migration
|
|
185
|
+
needed for historical triage records predating this schema. Set
|
|
186
|
+
`confidence: unconfirmed`
|
|
187
|
+
when the Verification Checkpoint routed here without evidence. When
|
|
188
|
+
`unconfirmed`, `## Root Cause Analysis` must open with:
|
|
189
|
+
|
|
190
|
+
```
|
|
191
|
+
> **UNCONFIRMED** — contributing factor identified; not verified against the reported symptom.
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
and `## TDD Fix Plan` must explicitly frame the plan as addressing "the
|
|
195
|
+
identified contributing factor," not the confirmed root cause.
|
|
196
|
+
|
|
197
|
+
At least one RED/GREEN cycle is required. **If no root cause was determined,**
|
|
198
|
+
the entire `## TDD Fix Plan` body is exactly:
|
|
199
|
+
|
|
200
|
+
```
|
|
201
|
+
Root cause not determined — manual investigation required
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### 6. Present Results
|
|
205
|
+
|
|
206
|
+
Print exactly two lines:
|
|
207
|
+
|
|
208
|
+
1. `triage-record: .dev-team-reports/triage/<resolved-slug>.md` (the actual resolved path)
|
|
209
|
+
2. A root-cause summary of at most 120 characters.
|
|
210
|
+
|
|
211
|
+
Do not repeat the full record body in chat.
|