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,43 @@
|
|
|
1
|
+
# Resolving the Gherkin persistence decision
|
|
2
|
+
|
|
3
|
+
Procedure for `/plan` step 3: decide where each slice's Gherkin will
|
|
4
|
+
additionally be persisted as `.feature` files. The plan file remains the
|
|
5
|
+
authoring surface; the `.feature` files are derived copies, written only
|
|
6
|
+
after approval (step 6 of `SKILL.md`).
|
|
7
|
+
|
|
8
|
+
1. **Re-run?** If a plan file already exists at the resolved output path and
|
|
9
|
+
already records a `**Gherkin persistence**:` decision in its metadata block,
|
|
10
|
+
honor it — skip detection and every prompt below.
|
|
11
|
+
Editing that line is the supported way to change the decision before a re-run.
|
|
12
|
+
2. **Detect the target project's BDD convention** — from the repo root, run:
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
python3 "${CLAUDE_PLUGIN_ROOT}/scripts/detect_bdd_convention.py"
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Precedence is conservative — feature-files > manifest > none: existing
|
|
19
|
+
`.feature` files beat a manifest dependency, and any ambiguity (multiple
|
|
20
|
+
roots, conflicting destinations, or a single existing root whose directory
|
|
21
|
+
name is not a conventional BDD scenario directory name — issue #1462)
|
|
22
|
+
reports `none`. A non-zero exit is treated as no-signal: surface the
|
|
23
|
+
script's stderr in the run output and continue — planning never dies on a
|
|
24
|
+
detection failure.
|
|
25
|
+
3. **Detected signal** → record the reported `dir` as the destination.
|
|
26
|
+
4. **No signal + interactive** → prompt the operator once:
|
|
27
|
+
*"Persist Gherkin as .feature files? [y = features/<plan-slug>/ | n = plan file only | c = custom path]"*.
|
|
28
|
+
Validate a `c` answer before recording it: the path must be repo-relative
|
|
29
|
+
(not absolute, not outside the repository) and not under a vendored tree
|
|
30
|
+
(`node_modules/`, `vendor/`, `dist/`, `build/`, virtualenvs). On an invalid
|
|
31
|
+
path, state the rejection reason and re-prompt;
|
|
32
|
+
the re-prompt accepts `y` or `n` as an escape from retrying a custom path.
|
|
33
|
+
5. **No signal + non-interactive** (the same triad step 6 uses: `--yes`,
|
|
34
|
+
`DEV_TEAM_AUTO_APPROVE=1`, or no usable TTY) → do **not** block: log
|
|
35
|
+
*"skipping the Gherkin persistence prompt (non-interactive) — plan file only"*
|
|
36
|
+
and record `plan-file-only`.
|
|
37
|
+
6. **Record and echo.** Write the resolved decision into the plan's
|
|
38
|
+
`**Gherkin persistence**:` metadata line and echo the recorded decision in the
|
|
39
|
+
run output. The line records the destination **directory only** — the
|
|
40
|
+
export script appends `<plan-slug>/` itself, so a `y` answer records `features`
|
|
41
|
+
(files land in `features/<plan-slug>/`), never `features/<plan-slug>/`
|
|
42
|
+
verbatim (that would double-nest). Echo example:
|
|
43
|
+
`Recorded Gherkin persistence: features (files land in features/<plan-slug>/)`.
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
# Plan File Template
|
|
2
|
+
|
|
3
|
+
Use this structure when writing the plan file (step 3 of `SKILL.md`).
|
|
4
|
+
|
|
5
|
+
````markdown
|
|
6
|
+
# Plan: <Task Title>
|
|
7
|
+
|
|
8
|
+
**Created**: <date>
|
|
9
|
+
**Branch**: <current branch>
|
|
10
|
+
**Status**: draft
|
|
11
|
+
**Gherkin persistence**: <destination dir | plan-file-only | custom: <path>>
|
|
12
|
+
<!-- Recorded once at plan creation (detected convention, operator answer, or
|
|
13
|
+
headless default). Re-runs honor this line without re-prompting; editing
|
|
14
|
+
it is the supported way to change the decision. -->
|
|
15
|
+
**Scope enforcement**: <freeze | none> <!-- OPTIONAL. Omit or set `none` for
|
|
16
|
+
today's behavior. `freeze` opts every slice declaring `**Files:**` into
|
|
17
|
+
`/build` auto-freezing its worktree to the declared scope at dispatch
|
|
18
|
+
(see Slice 2's `**Files:**` line below) — declared Files alone, without
|
|
19
|
+
this line, only feeds `plan_waves.py`'s scope-mismatch warnings, never
|
|
20
|
+
freeze. -->
|
|
21
|
+
|
|
22
|
+
## Goal
|
|
23
|
+
|
|
24
|
+
<One paragraph describing what this plan achieves and why.>
|
|
25
|
+
|
|
26
|
+
## Acceptance Criteria
|
|
27
|
+
|
|
28
|
+
- [ ] <Criterion 1 — observable, testable>
|
|
29
|
+
- [ ] <Criterion 2>
|
|
30
|
+
- [ ] <Criterion 3>
|
|
31
|
+
|
|
32
|
+
## Slices
|
|
33
|
+
|
|
34
|
+
A slice is a vertically deliverable increment. Each slice carries the Gherkin
|
|
35
|
+
scenario(s) that define its behavior, followed by the TDD steps that satisfy them.
|
|
36
|
+
Steps are numbered `<slice>.<step>` (1.1, 1.2, 2.1, …).
|
|
37
|
+
|
|
38
|
+
### Slice 1: <Slice Name>
|
|
39
|
+
|
|
40
|
+
**Depends-on:** none
|
|
41
|
+
**Files:** `path/to/file.ts`, `path/to/file.test.ts`
|
|
42
|
+
|
|
43
|
+
**Behavior:**
|
|
44
|
+
|
|
45
|
+
```gherkin
|
|
46
|
+
Feature: <feature name>
|
|
47
|
+
|
|
48
|
+
Scenario: <happy path>
|
|
49
|
+
Given <precondition>
|
|
50
|
+
When <action>
|
|
51
|
+
Then <observable outcome>
|
|
52
|
+
|
|
53
|
+
Scenario: <negative / edge / error case>
|
|
54
|
+
Given <precondition>
|
|
55
|
+
When <action>
|
|
56
|
+
Then <observable outcome>
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
**Steps:**
|
|
60
|
+
|
|
61
|
+
#### Step 1.1: <Description>
|
|
62
|
+
|
|
63
|
+
**Complexity**: <trivial | standard | complex>
|
|
64
|
+
**IMPLEMENT**: Write <the one behavior this step adds>
|
|
65
|
+
**TEST**: Write test covering <scenario / behavior>; full suite green
|
|
66
|
+
**REFACTOR**: <What to clean up — runs every cycle; never "skip">
|
|
67
|
+
**Files**: `path/to/file.ts`, `path/to/file.test.ts`
|
|
68
|
+
**Commit**: `<draft commit message>`
|
|
69
|
+
|
|
70
|
+
#### Step 1.2: <Description>
|
|
71
|
+
|
|
72
|
+
...
|
|
73
|
+
|
|
74
|
+
### Slice 2: <Slice Name>
|
|
75
|
+
|
|
76
|
+
**Depends-on:** 1
|
|
77
|
+
**Files:** `path/to/other.ts`
|
|
78
|
+
**Invariants:** `<runnable shell command>`, `<another command>`
|
|
79
|
+
**Rollback point:** slice-start
|
|
80
|
+
<!-- All three of Files/Invariants/Rollback point are OPTIONAL — a slice
|
|
81
|
+
that omits them parses, reviews, and builds exactly as today.
|
|
82
|
+
- **Files**: declared write scope for the slice (glob patterns
|
|
83
|
+
accepted, e.g. `src/auth/**`). Feeds `plan_waves.py`'s
|
|
84
|
+
declared-vs-inferred scope-mismatch check; only auto-freezes when
|
|
85
|
+
the plan sets `**Scope enforcement:** freeze` above.
|
|
86
|
+
- **Invariants**: runnable shell commands (exit 0 = green) that must
|
|
87
|
+
stay green *beyond* this slice's own new acceptance tests — run by
|
|
88
|
+
`/build`'s slice gate after the slice's own suite passes.
|
|
89
|
+
- **Rollback point**: the commit boundary to revert to if the slice
|
|
90
|
+
dead-ends — `slice-start` (default: HEAD at slice dispatch),
|
|
91
|
+
`wave-start`, `plan-start`, or an explicit ref. `/build` resolves it
|
|
92
|
+
to a concrete SHA at dispatch and records it. -->
|
|
93
|
+
|
|
94
|
+
**Behavior:**
|
|
95
|
+
|
|
96
|
+
```gherkin
|
|
97
|
+
...
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
**Steps:**
|
|
101
|
+
|
|
102
|
+
#### Step 2.1: <Description>
|
|
103
|
+
|
|
104
|
+
...
|
|
105
|
+
|
|
106
|
+
## Parallelization
|
|
107
|
+
|
|
108
|
+
Each slice declares `Depends-on` (slice ids it must follow, or `none`). The build
|
|
109
|
+
**waves** are derived from those declarations by `scripts/plan_waves.py` — do not
|
|
110
|
+
hand-maintain them. Independent slices in the same wave can be built concurrently
|
|
111
|
+
(`/build` dispatches them to isolated worktrees).
|
|
112
|
+
|
|
113
|
+
```mermaid
|
|
114
|
+
graph TD
|
|
115
|
+
S1[Slice 1] --> S2[Slice 2]
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
| Wave | Slices (parallel) |
|
|
119
|
+
|------|-------------------|
|
|
120
|
+
| 1 | 1 |
|
|
121
|
+
| 2 | 2 |
|
|
122
|
+
|
|
123
|
+
If `scripts/plan_waves.py` reports a cycle, a missing `Depends-on`, an unknown reference,
|
|
124
|
+
or a **same-wave file collision** (two slices in one wave declaring the same file —
|
|
125
|
+
now computed conservatively over each slice's declared **and** inferred files),
|
|
126
|
+
fix the plan before the human gate — those break safe concurrent delivery.
|
|
127
|
+
|
|
128
|
+
A `scope_mismatches` entry (a slice's declared `Files` disagreeing with the union
|
|
129
|
+
of its steps' `**Files**:` lines) is **fix-or-acknowledge, not fix-before-gate**:
|
|
130
|
+
shown as a warning at the human gate (step 6), and recorded in `## Risks & Open
|
|
131
|
+
Questions` if the author proceeds without reconciling it.
|
|
132
|
+
|
|
133
|
+
## Complexity Classification
|
|
134
|
+
|
|
135
|
+
Each step must include a complexity rating that controls review depth during `/build`:
|
|
136
|
+
|
|
137
|
+
| Rating | Criteria | Review depth |
|
|
138
|
+
|--------|----------|--------------|
|
|
139
|
+
| `trivial` | Single-file rename, config change, typo fix, documentation-only | Skip inline review; covered by final `/code-review` |
|
|
140
|
+
| `standard` | New function, test, module, or behavioral change within existing patterns | Spec-compliance + relevant quality agents |
|
|
141
|
+
| `complex` | Architectural change, security-sensitive, cross-cutting concern, new abstraction | Full agent suite including opus-tier agents |
|
|
142
|
+
|
|
143
|
+
When in doubt, classify up (standard rather than trivial, complex rather than standard).
|
|
144
|
+
|
|
145
|
+
## Pre-PR Quality Gate
|
|
146
|
+
|
|
147
|
+
- [ ] All tests pass
|
|
148
|
+
- [ ] Type check passes (if applicable)
|
|
149
|
+
- [ ] Linter passes
|
|
150
|
+
- [ ] `/code-review` passes
|
|
151
|
+
- [ ] Documentation updated (if applicable)
|
|
152
|
+
|
|
153
|
+
## Skipped (low value)
|
|
154
|
+
|
|
155
|
+
Findings classified `LOW_VALUE` — feasible but no signal (no branching logic, no
|
|
156
|
+
observable outcome, coverage already provided by a higher-layer test). These are
|
|
157
|
+
**skipped, not deferred**: they never appear in a slice or a work stream. Omit this
|
|
158
|
+
section when there are none.
|
|
159
|
+
|
|
160
|
+
| Finding | Rationale (one line) |
|
|
161
|
+
|---|---|
|
|
162
|
+
| <finding> | <why it delivers no signal> |
|
|
163
|
+
|
|
164
|
+
## Risks & Open Questions
|
|
165
|
+
|
|
166
|
+
- <Risk or question, with mitigation or who should answer>
|
|
167
|
+
|
|
168
|
+
## Build Progress
|
|
169
|
+
|
|
170
|
+
This section is the machine-parseable recovery handle. `/build` updates checkboxes here via Edit tool so progress survives a `/clear` or session restart. `/continue` reads this section to determine the resume point.
|
|
171
|
+
|
|
172
|
+
### Slices (grouped by wave)
|
|
173
|
+
|
|
174
|
+
#### Wave 1
|
|
175
|
+
- [ ] Slice 1: <title>
|
|
176
|
+
- [ ] Step 1.1: <title>
|
|
177
|
+
- [ ] Step 1.2: <title>
|
|
178
|
+
|
|
179
|
+
#### Wave 2
|
|
180
|
+
- [ ] Slice 2: <title>
|
|
181
|
+
- [ ] Step 2.1: <title>
|
|
182
|
+
````
|
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pr
|
|
3
|
+
description: >-
|
|
4
|
+
Run a pre-PR quality gate (tests, typecheck, lint, code review) and then
|
|
5
|
+
create a pull request with a structured summary. Use when the user says
|
|
6
|
+
"create a PR", "open a PR", "submit for review", or "I'm done with this
|
|
7
|
+
feature".
|
|
8
|
+
argument-hint: "[--skip-review] [--draft] [--base <branch>]"
|
|
9
|
+
user-invocable: true
|
|
10
|
+
allowed-tools: Read, Write, Edit, Glob, Grep, Bash(git *), Bash(gh *), Bash(npm *), Bash(npx *), Bash(pnpm *), Bash(yarn *), Bash(make *), Bash(pytest *), Bash(go *), Bash(cargo *), Bash(dotnet *), Skill(code-review *)
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Pull Request
|
|
14
|
+
|
|
15
|
+
<!-- pi-port-notes -->
|
|
16
|
+
## pi port notes (read first)
|
|
17
|
+
|
|
18
|
+
- Write the title and body in the "GitHub text style" from the system prompt. The extension blocks a `gh pr create` whose title or body breaks it, once.
|
|
19
|
+
- Body order: one sentence that says what changes and why, then `## Summary` (at most 3 bullets), then `## Test Plan`, then `## Quality Gate` with its results on one line (`Tests 42 passed · types clean · lint clean · review clean`).
|
|
20
|
+
- Put `## Decisions & Assumptions` and the four Evidence Bundle headers at the end, inside one `<details><summary>Decisions and evidence</summary>` block. Keep all of their content. Only the place changes.
|
|
21
|
+
- If the repository has `.github/PULL_REQUEST_TEMPLATE.md`, its sections come first and the same `<details>` block goes at the end.
|
|
22
|
+
- End the visible part with one next step for the reviewer, for example "Review: start at `src/auth.ts:42`."
|
|
23
|
+
<!-- pi-port-notes -->
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
Role: orchestrator. This command enforces quality gates before creating a PR.
|
|
27
|
+
|
|
28
|
+
You have been invoked with the `/pr` command.
|
|
29
|
+
|
|
30
|
+
## Orchestrator constraints
|
|
31
|
+
|
|
32
|
+
1. Run the quality gate and open the PR; do not bypass failing gates.
|
|
33
|
+
2. Delegate review to the review agents; do not review code yourself.
|
|
34
|
+
3. **Be concise.** Report gate results and the PR URL, no preamble.
|
|
35
|
+
|
|
36
|
+
## Parse Arguments
|
|
37
|
+
|
|
38
|
+
Arguments: $ARGUMENTS
|
|
39
|
+
|
|
40
|
+
- `--skip-review`: Skip the `/code-review` step (not recommended)
|
|
41
|
+
- `--draft`: Create a draft PR
|
|
42
|
+
- `--base <branch>`: Target branch (default: `main`)
|
|
43
|
+
- `--no-auto-merge`: Do not enable auto-merge (the default is to enable it; see Step 5)
|
|
44
|
+
|
|
45
|
+
## Steps
|
|
46
|
+
|
|
47
|
+
### 1. Pre-flight checks
|
|
48
|
+
|
|
49
|
+
Verify:
|
|
50
|
+
|
|
51
|
+
- Current branch is not `main` or `master`
|
|
52
|
+
- There are commits ahead of the base branch
|
|
53
|
+
- Working tree is clean (no uncommitted changes) — if dirty, ask whether to commit or stash
|
|
54
|
+
|
|
55
|
+
If a plan file is present (check `plans/` for the most recently modified approved or implemented plan), run the plan completion gate:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
python3 "${CLAUDE_PLUGIN_ROOT}/scripts/progress_guardian.py" --pre-pr --plan <plan-file>
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
A non-zero exit means incomplete steps remain; stop and surface the findings — do not open the PR until all steps are `[x]`.
|
|
62
|
+
|
|
63
|
+
### 2. Run quality gate
|
|
64
|
+
|
|
65
|
+
Run each check sequentially. Stop on first failure:
|
|
66
|
+
|
|
67
|
+
1. **Tests**: Detect and run the project's test suite
|
|
68
|
+
- `package.json` scripts: `npm test` or `pnpm test` or `yarn test`
|
|
69
|
+
- `pytest.ini` / `pyproject.toml`: `pytest`
|
|
70
|
+
- `go.mod`: `go test ./...`
|
|
71
|
+
- `Cargo.toml`: `cargo test`
|
|
72
|
+
- `*.csproj`: `dotnet test`
|
|
73
|
+
- `Makefile` with `test` target: `make test`
|
|
74
|
+
|
|
75
|
+
2. **Type check** (if applicable):
|
|
76
|
+
- `tsconfig.json`: `npx tsc --noEmit`
|
|
77
|
+
- `mypy.ini` / pyproject.toml with mypy: `mypy .`
|
|
78
|
+
|
|
79
|
+
3. **Lint** (if applicable):
|
|
80
|
+
- `eslint` in deps: `npx eslint .`
|
|
81
|
+
- `ruff` available: `ruff check .`
|
|
82
|
+
- `golangci-lint` available: `golangci-lint run`
|
|
83
|
+
|
|
84
|
+
4. **Code review** (unless `--skip-review`):
|
|
85
|
+
- Scope the review to this branch's diff against the base branch, not the whole repo. At PR time the working tree is clean (Step 1 requires it), so a bare `/code-review --json` would auto-scope to the **full repository** — expensive, wrongly scoped, and on a large repo it can trigger the sliced-review path. Compute the merge base:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
BASE=$(git merge-base HEAD "origin/<base>") # <base> defaults to main, or the --base arg
|
|
89
|
+
HEAD_SHA=$(git rev-parse HEAD)
|
|
90
|
+
BRANCH=$(git branch --show-current)
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
- **Gate-retry scoping (#2087).** `/code-review`'s own round ledger (`finding_signature.py`, see `../code-review/SKILL.md` step 6a) only scopes findings *within* a single `/code-review` invocation — every fresh top-level call restarts at round 1 with the full branch diff. Left unmanaged, a second `/pr` run after a human fixes findings from the first pays full review cost again, even though only the fix delta is unreviewed. `${CLAUDE_PLUGIN_ROOT}/skills/pr/scripts/gate_retry_state.py` is the deterministic transition function that closes that gap by persisting phase/round state across `/pr` invocations. Drive it with this bounded loop — **never more than two `/code-review` calls in one `/pr` invocation**:
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
# Call 1: decide this call's scope (no --last-outcome yet).
|
|
97
|
+
DECISION=$(python3 "${CLAUDE_PLUGIN_ROOT}/skills/pr/scripts/gate_retry_state.py" \
|
|
98
|
+
--state .claude/memory/pr-gate-state.json \
|
|
99
|
+
--branch "$BRANCH" --base-sha "$BASE" --head-sha "$HEAD_SHA")
|
|
100
|
+
SINCE_REF=$(echo "$DECISION" | jq -r '.since_ref')
|
|
101
|
+
ESCALATE=$(echo "$DECISION" | jq -r '.escalate')
|
|
102
|
+
|
|
103
|
+
if [ "$ESCALATE" = "true" ]; then
|
|
104
|
+
# Retry budget exhausted for this PR's gate — stop, do not call
|
|
105
|
+
# /code-review again. Surface this and fall into the same
|
|
106
|
+
# proceed-anyway-or-fix branching as a `fail` below, noting that
|
|
107
|
+
# further retries need `--reset` (a fresh look), since automatic
|
|
108
|
+
# narrow-scoping is exhausted.
|
|
109
|
+
else
|
|
110
|
+
RESULT=$(/code-review --since "$SINCE_REF" --json)
|
|
111
|
+
# gate_retry_state.py only knows pass|warn|fail; a doc-only
|
|
112
|
+
# short-circuit (`status: "skipped"`) converges the round exactly
|
|
113
|
+
# like a pass — map it before recording.
|
|
114
|
+
OVERALL=$(echo "$RESULT" | jq -r 'if .status == "skipped" then "pass" else .overall end')
|
|
115
|
+
|
|
116
|
+
# Call 2: record the outcome and get the next scope.
|
|
117
|
+
DECISION=$(python3 "${CLAUDE_PLUGIN_ROOT}/skills/pr/scripts/gate_retry_state.py" \
|
|
118
|
+
--state .claude/memory/pr-gate-state.json \
|
|
119
|
+
--branch "$BRANCH" --base-sha "$BASE" --head-sha "$HEAD_SHA" \
|
|
120
|
+
--last-outcome "$OVERALL")
|
|
121
|
+
SINCE_REF=$(echo "$DECISION" | jq -r '.since_ref')
|
|
122
|
+
|
|
123
|
+
# Only the fix-diff -> confirm transition returns a non-null
|
|
124
|
+
# since_ref here (one mandatory full-branch pass before the gate can
|
|
125
|
+
# close, issue #2087 requirement 3) — run it once, immediately, in
|
|
126
|
+
# this same invocation, then record it. Do not loop: this is the
|
|
127
|
+
# ONLY place a third /code-review call can happen, and it never
|
|
128
|
+
# triggers a fourth.
|
|
129
|
+
if [ "$SINCE_REF" != "null" ]; then
|
|
130
|
+
RESULT=$(/code-review --since "$SINCE_REF" --json)
|
|
131
|
+
OVERALL=$(echo "$RESULT" | jq -r 'if .status == "skipped" then "pass" else .overall end')
|
|
132
|
+
DECISION=$(python3 "${CLAUDE_PLUGIN_ROOT}/skills/pr/scripts/gate_retry_state.py" \
|
|
133
|
+
--state .claude/memory/pr-gate-state.json \
|
|
134
|
+
--branch "$BRANCH" --base-sha "$BASE" --head-sha "$HEAD_SHA" \
|
|
135
|
+
--last-outcome "$OVERALL")
|
|
136
|
+
fi
|
|
137
|
+
fi
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
`/code-review --since <ref> --json` itself is unchanged: `/pr` owns the human gate, so code-review still runs non-interactively (skips its own "fix or report?" prompt, applies its fix loop automatically up to 5 iterations) and returns an aggregated status — only the `--since` ref is now computed by the gate-retry decision above instead of always being `$BASE`.
|
|
141
|
+
|
|
142
|
+
- Read `DECISION`'s final `phase` and the last `OVERALL` computed:
|
|
143
|
+
|
|
144
|
+
| `phase` / outcome | Meaning | Action |
|
|
145
|
+
| --- | --- | --- |
|
|
146
|
+
| `phase: "done"` | Gate closed — either a full-branch pass on round 1, or the mandatory confirm pass after a narrowed fix-diff pass | Continue to step 3 |
|
|
147
|
+
| `escalate: true` | Retry budget (`PR_GATE_MAX_ROUNDS`) exhausted across `/pr` invocations for this PR | Stop; do not call `/code-review` again this invocation. Surface that the retry budget is exhausted and further retries need `--reset` for a fresh full-branch look |
|
|
148
|
+
| last `OVERALL` is `fail`, not escalated | Actionable findings remain after code-review's own internal fix loop | Show the remaining findings and ask the user whether to proceed anyway or stop and fix — and tell them re-running `/pr` will scope the next check to only what changed since this attempt (the fix delta), not the whole branch, unless the base moved |
|
|
149
|
+
| last `OVERALL` is `pass` / `warn`, or `status` is `skipped` (doc-only short-circuit, checked before any of the above) | Nothing further to review | Continue to step 3 |
|
|
150
|
+
|
|
151
|
+
Report results as a checklist:
|
|
152
|
+
|
|
153
|
+
```
|
|
154
|
+
## Quality Gate
|
|
155
|
+
- [x] Tests pass (42 passed, 0 failed)
|
|
156
|
+
- [x] Type check clean
|
|
157
|
+
- [x] Lint clean
|
|
158
|
+
- [ ] Code review: 2 warnings (see below)
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### 3. Generate PR summary
|
|
162
|
+
|
|
163
|
+
Analyze the diff against the base branch (`git diff <base>...HEAD`) and commit history to generate:
|
|
164
|
+
|
|
165
|
+
- **Title**: Short, imperative (<70 chars)
|
|
166
|
+
- **Summary**: 1-3 bullet points of what changed and why
|
|
167
|
+
- **Test plan**: How to verify the changes
|
|
168
|
+
- **Decisions & assumptions**: Collect everything decided without a human in the
|
|
169
|
+
loop, from the run's artifacts: the plan's `## Approval` auto-approval record and
|
|
170
|
+
any auto-passed gate lines from the build output; the plan's stated stances on
|
|
171
|
+
`knowledge/decision-defaults.md` axes; the spec's `## Ambiguity Log` entries
|
|
172
|
+
classified `inferable`; `assumptions` entries from software-engineer step outputs;
|
|
173
|
+
auto-applied review fixes with `confidence: medium`; and deferred follow-ups.
|
|
174
|
+
Omit the section only when every gate had an interactive human approval.
|
|
175
|
+
- **Evidence bundle**: Assemble per `${CLAUDE_PLUGIN_ROOT}/knowledge/evidence-bundle.md`
|
|
176
|
+
from the Step 2 quality-gate results plus on-disk pipeline data — **no new
|
|
177
|
+
checks, no re-execution**:
|
|
178
|
+
- **Checks run**: the exact Step 2 commands (test/typecheck/lint/`/code-review
|
|
179
|
+
--since <base> --json`) and their results.
|
|
180
|
+
- **Scope notes**: gates skipped as not-applicable in Step 2 (e.g. no
|
|
181
|
+
`tsconfig.json` → type check skipped), plus `--skip-review` if passed.
|
|
182
|
+
- **Untested regions**: read `baseline-coverage.json` / `coverage-history.json`
|
|
183
|
+
if present; otherwise "not measured — no coverage tool detected."
|
|
184
|
+
- **Residual risks**: derived-first from `.claude/metrics/review-value.jsonl` entries
|
|
185
|
+
with `outcome: "escalated"`, gate-bypass audit lines, and negative coverage
|
|
186
|
+
deltas; "None identified" only when all derived sources are empty.
|
|
187
|
+
- This command assembles from its own runtime's live data — it never reads a
|
|
188
|
+
handoff file from a prior `/build` run, so running `/pr` standalone still
|
|
189
|
+
produces a complete (possibly more-degraded) bundle.
|
|
190
|
+
|
|
191
|
+
### 4. Create the PR
|
|
192
|
+
|
|
193
|
+
**Never phrase a non-closing issue reference with a closing keyword, even
|
|
194
|
+
negated.** GitHub's closing-keyword parser is a dumb regex over the PR body:
|
|
195
|
+
`(close|closes|closed|fix|fixes|fixed|resolve|resolves|resolved)\s+#\d+`. It
|
|
196
|
+
fires on that pattern regardless of grammar — "does not close #123", "won't
|
|
197
|
+
fix #123", and "this doesn't resolve #123" all still auto-close #123 on
|
|
198
|
+
merge (issue #977). If an issue is only partially addressed or deferred,
|
|
199
|
+
write around the keyword instead: "leaves #123 open", "the remaining scope
|
|
200
|
+
is deferred to #124", "see #123 for the rest of this work" — never
|
|
201
|
+
`<closing-keyword> #123` in any form, negated or not.
|
|
202
|
+
|
|
203
|
+
Before calling `gh pr create`, lint the drafted body for accidental matches:
|
|
204
|
+
|
|
205
|
+
```bash
|
|
206
|
+
python3 "${CLAUDE_PLUGIN_ROOT}/scripts/pr_close_keyword_lint.py" --body-file <body-file>
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
This is advisory only (always exits 0). If it prints warnings, rephrase the
|
|
210
|
+
flagged sentence per the guidance above before creating the PR — do not
|
|
211
|
+
proceed with a body the linter flagged without fixing the phrasing.
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
gh pr create --title "<title>" --body "<body>" [--draft] --base <base>
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
**Check for a repo-provided template first**: `.github/PULL_REQUEST_TEMPLATE.md`
|
|
218
|
+
(the canonical GitHub location). If it exists, use it as the body's base
|
|
219
|
+
structure instead of this skill's own hardcoded template below:
|
|
220
|
+
|
|
221
|
+
- Fill each of the template's existing sections with the corresponding
|
|
222
|
+
generated content where an obvious semantic match exists — a
|
|
223
|
+
"Summary"/"What"/"Description"-shaped heading gets the summary bullets; a
|
|
224
|
+
"Test(ing) Plan"/"How to test"/"Verification"-shaped heading gets the test
|
|
225
|
+
plan steps; a "Checklist" heading that already lists gate-shaped items gets
|
|
226
|
+
the Quality Gate results.
|
|
227
|
+
- Preserve every section the template defines, in its own order, even when
|
|
228
|
+
nothing here auto-fills it — leave the template's own placeholder/comment
|
|
229
|
+
text for the operator rather than deleting the section.
|
|
230
|
+
- Append this skill's own **Decisions & Assumptions** and **Evidence
|
|
231
|
+
Bundle** sections at the end, under their own headings, whenever the
|
|
232
|
+
template has no equivalent section for them. Never drop that content
|
|
233
|
+
silently just because the repo's template didn't ask for it.
|
|
234
|
+
- Preserve the template's own HTML comments (`<!-- ... -->`) — they are
|
|
235
|
+
operator-facing instructions (e.g. "PR title must be conventional"), not
|
|
236
|
+
placeholders to strip.
|
|
237
|
+
|
|
238
|
+
If no such file exists, fall back to this skill's own structured template
|
|
239
|
+
exactly as before:
|
|
240
|
+
|
|
241
|
+
```markdown
|
|
242
|
+
## Summary
|
|
243
|
+
- <bullet 1>
|
|
244
|
+
- <bullet 2>
|
|
245
|
+
|
|
246
|
+
## Quality Gate
|
|
247
|
+
- [x] Tests: <N> passed
|
|
248
|
+
- [x] Type check: clean
|
|
249
|
+
- [x] Lint: clean
|
|
250
|
+
- [x] Code review: <status>
|
|
251
|
+
|
|
252
|
+
## Decisions & Assumptions
|
|
253
|
+
<!-- Everything decided without a human in the loop. An empty section means a fully human-gated run. -->
|
|
254
|
+
- <axis or assumption> — <stance taken> — <one-line rationale / recommended-default basis>
|
|
255
|
+
|
|
256
|
+
## Test Plan
|
|
257
|
+
- [ ] <verification step 1>
|
|
258
|
+
- [ ] <verification step 2>
|
|
259
|
+
|
|
260
|
+
## Evidence Bundle
|
|
261
|
+
<!-- Per ${CLAUDE_PLUGIN_ROOT}/knowledge/evidence-bundle.md. All four headers always appear; a section with no data states why instead of being omitted. -->
|
|
262
|
+
**Checks run**
|
|
263
|
+
- `<command>` — <result>
|
|
264
|
+
|
|
265
|
+
**Scope notes**
|
|
266
|
+
- <what this gate does not cover for this diff>
|
|
267
|
+
|
|
268
|
+
**Untested regions**
|
|
269
|
+
- <coverage % + delta, or "not measured — <reason>">
|
|
270
|
+
|
|
271
|
+
**Residual risks**
|
|
272
|
+
- <deferred/escalated finding, waiver, or bypass line — or "None identified">
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
### 5. Enable auto-merge (default)
|
|
276
|
+
|
|
277
|
+
Unless `--no-auto-merge` or `--draft` was given, enable auto-merge so the PR lands automatically once checks pass and any required reviews are in — rather than merging directly to trunk. This is the default integration stance in `knowledge/decision-defaults.md` (auto-merge vs. direct-to-trunk).
|
|
278
|
+
|
|
279
|
+
```bash
|
|
280
|
+
gh pr merge --auto --squash
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
If the repository does not have auto-merge enabled (the command errors), report that and leave the PR open for manual merge — do **not** merge directly to trunk to work around it.
|
|
284
|
+
|
|
285
|
+
### 6. Report
|
|
286
|
+
|
|
287
|
+
Display the PR URL and a summary of the quality gate results.
|
|
288
|
+
|
|
289
|
+
If any gate failed and the user chose to proceed anyway, note this in the PR body as a caveat.
|