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,124 @@
|
|
|
1
|
+
# Artifact migration guide (upgrading an existing project)
|
|
2
|
+
|
|
3
|
+
Audience: **operators** — anyone upgrading an existing project's `dev-team` plugin
|
|
4
|
+
install across the `.claude/`-scoped runtime artifact change (issue #1406, plan
|
|
5
|
+
`opt-in-metrics-and-claude-scoped-artifacts.md`). This is not a maintainer doc —
|
|
6
|
+
see [`developer-notes.md`](developer-notes.md) for plugin-development docs.
|
|
7
|
+
|
|
8
|
+
## What changed
|
|
9
|
+
|
|
10
|
+
Two coordinated changes:
|
|
11
|
+
|
|
12
|
+
1. **Consent flips from on-by-default to off-by-default**, gated by a single
|
|
13
|
+
user-level config file: `~/.claude/telemetry.json`. `telemetry.jsonl` and
|
|
14
|
+
`artifact-usage.json` move to `~/.claude/metrics/`.
|
|
15
|
+
2. **Every other project-scoped runtime artifact directory** (`metrics/`,
|
|
16
|
+
`memory/`, `plans/`) moves under the project's own `.claude/` instead of the
|
|
17
|
+
repo root, and the reports domain (`reports/` + `DEV_TEAM_REPORTS/`)
|
|
18
|
+
consolidates into a new top-level `.dev-team-reports/`.
|
|
19
|
+
|
|
20
|
+
Each pre-existing file falls into exactly one of three treatments below —
|
|
21
|
+
**never assume a file you rely on was auto-migrated; check which bucket it's in.**
|
|
22
|
+
|
|
23
|
+
## 1. One-time move (writers with a real Python touchpoint)
|
|
24
|
+
|
|
25
|
+
These files are moved — not copied — from their old bare path into
|
|
26
|
+
`.claude/<category>/` **the first time their owning hook/script writes (or, for
|
|
27
|
+
one case, reads) after upgrade**. The move is per-file, never a directory
|
|
28
|
+
sweep, and skips any file that is git-tracked (a tracked legacy file is left in
|
|
29
|
+
place rather than silently moved out from under version control).
|
|
30
|
+
|
|
31
|
+
| File | Old path | New path |
|
|
32
|
+
| --- | --- | --- |
|
|
33
|
+
| `cost-metering.jsonl` | `metrics/cost-metering.jsonl` | `.claude/metrics/cost-metering.jsonl` |
|
|
34
|
+
| `{date}-task-log.jsonl` | `metrics/{date}-task-log.jsonl` | `.claude/metrics/{date}-task-log.jsonl` |
|
|
35
|
+
| `config-changelog.jsonl` | `metrics/config-changelog.jsonl` | `.claude/metrics/config-changelog.jsonl` |
|
|
36
|
+
| `pending-review.jsonl` | `metrics/pending-review.jsonl` | `.claude/metrics/pending-review.jsonl` |
|
|
37
|
+
| `learning-loop-state.json` | `metrics/learning-loop-state.json` | `.claude/metrics/learning-loop-state.json` |
|
|
38
|
+
| boundary-events log | `metrics/boundary-events.jsonl` | `.claude/metrics/boundary-events.jsonl` |
|
|
39
|
+
| `/test-improve`'s phase-state tree | `memory/test-improve/<slug>/` | `.claude/memory/test-improve/<slug>/` (directory-migrated file-by-file on the next resume; `refactor-backlog.md` is excluded — see § 2) |
|
|
40
|
+
|
|
41
|
+
The shared mechanism is `hooks/lib/artifact_paths.py`'s `resolve_file()` (single
|
|
42
|
+
file) and `migrate_dir()` (whole subtree, one call per invocation, still
|
|
43
|
+
file-by-file — never overwrites an existing destination). Both are fail-open:
|
|
44
|
+
a failed move logs one diagnostic line to stderr and the calling operation
|
|
45
|
+
proceeds unaffected — it never blocks or raises.
|
|
46
|
+
|
|
47
|
+
`verify-log.jsonl` is a deliberate exception: it stays at the bare
|
|
48
|
+
`metrics/verify-log.jsonl` and is **not** part of this migration at all (it
|
|
49
|
+
was never moved, gated, or relocated).
|
|
50
|
+
|
|
51
|
+
## 2. Documented clean break (agent-instruction-driven writers, no Python write call site)
|
|
52
|
+
|
|
53
|
+
These files are written by agent *instructions* (skill/agent markdown telling
|
|
54
|
+
Claude where to `Write`), not by a Python hook. There is no code path that can
|
|
55
|
+
migrate them, so pre-existing top-level content is **left in place
|
|
56
|
+
permanently** — it is not moved, and new writes after upgrade go straight to
|
|
57
|
+
the new location, meaning old and new content end up split across two paths
|
|
58
|
+
with no automatic reconciliation.
|
|
59
|
+
|
|
60
|
+
| File / tree | Old path | New path (new writes only) |
|
|
61
|
+
| --- | --- | --- |
|
|
62
|
+
| `review-value.jsonl` | `metrics/review-value.jsonl` | `.claude/metrics/review-value.jsonl` |
|
|
63
|
+
| `build-phase.json` | `memory/build-phase.json` | `.claude/memory/build-phase.json` (read side uses `migrate=False` deliberately — it never moves the legacy file) |
|
|
64
|
+
| `refactor-backlog.md` (`/test-improve`) | `memory/test-improve/<slug>/refactor-backlog.md` | `.dev-team-reports/test-improve/<slug>/refactor-backlog.md` (a report, not runtime state — explicitly excluded from `migrate_dir()`'s `.claude/memory/` sweep; see the reports-domain row below) |
|
|
65
|
+
| `/test-improve` reports output | `reports/test-improve/<slug>/` | `.dev-team-reports/test-improve/<slug>/` |
|
|
66
|
+
| `/test-improve` plan artifacts | `plans/test-improve/` | `.claude/plans/test-improve/` |
|
|
67
|
+
| `DEV_TEAM_REPORTS/`-domain writers (`/review-agent`, `/code-review` interactive, `/triage`, `/report-pdf`, `/ship`, `/exploratory-testing`, `/session-review`) | `DEV_TEAM_REPORTS/...` / `reports/...` | `.dev-team-reports/...` |
|
|
68
|
+
|
|
69
|
+
**Practical consequence:** if a project has an in-flight `/build` session (a
|
|
70
|
+
recorded `build-phase.json`) or unresolved review-value/reports content at the
|
|
71
|
+
moment it crosses the upgrade boundary, that in-flight state is effectively
|
|
72
|
+
orphaned at the old path — `/build`'s phase tracking for that session will
|
|
73
|
+
behave as if no phase is recorded. There is no data-loss risk (nothing is
|
|
74
|
+
deleted), but the record will not be picked up post-upgrade.
|
|
75
|
+
|
|
76
|
+
## 3. Dual-read fallback (transition-window self-healing)
|
|
77
|
+
|
|
78
|
+
Three reader commands tolerate the split between old and new locations
|
|
79
|
+
without any manual step:
|
|
80
|
+
|
|
81
|
+
- **`/cost-report`** and **`/harness-audit`** read `cost-metering.jsonl`,
|
|
82
|
+
`review-value.jsonl`, and `config-changelog.jsonl` by preferring
|
|
83
|
+
`.claude/metrics/<file>`, falling back to the bare `metrics/<file>` if the
|
|
84
|
+
new path doesn't exist yet. This self-heals during the transition window —
|
|
85
|
+
no operator action needed.
|
|
86
|
+
- **`/artifact-lifecycle`** reads `artifact-usage.json` exclusively from
|
|
87
|
+
`~/.claude/metrics/artifact-usage.json` (home-scoped). This file was already
|
|
88
|
+
home-scoped as of the telemetry-consent change, so there is no legacy
|
|
89
|
+
project-scoped fallback to read — any older doc reference to a
|
|
90
|
+
project-scoped path was a documentation bug, now corrected to point at the
|
|
91
|
+
one location the file has ever actually been written to.
|
|
92
|
+
|
|
93
|
+
## Consent-file migration is manual — not automatic
|
|
94
|
+
|
|
95
|
+
If a project previously had a `.claude/telemetry.json` (or, pre-this-change,
|
|
96
|
+
any project-level telemetry consent setting) with `{"enabled": true}`, **that
|
|
97
|
+
setting is not carried forward.** Consent is now resolved exclusively from
|
|
98
|
+
`~/.claude/telemetry.json` (home-scoped). `DEV_TEAM_TELEMETRY` also has no
|
|
99
|
+
effect any more.
|
|
100
|
+
|
|
101
|
+
**Action required:** if you want telemetry after upgrading, re-opt-in at the
|
|
102
|
+
new location:
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
mkdir -p ~/.claude
|
|
106
|
+
echo '{"enabled": true}' > ~/.claude/telemetry.json
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Nothing reads or migrates a project's old consent file automatically — an
|
|
110
|
+
un-migrated project simply defaults to telemetry disabled (fail-open), which
|
|
111
|
+
is the deliberate new default posture, not a bug.
|
|
112
|
+
|
|
113
|
+
## Quick reference: what to check after upgrading
|
|
114
|
+
|
|
115
|
+
- [ ] If you rely on telemetry, artifact-usage, or cost data: re-opt-in via
|
|
116
|
+
`~/.claude/telemetry.json` (see above) — nothing carries over.
|
|
117
|
+
- [ ] If you have an in-flight `/build` session across the upgrade: expect its
|
|
118
|
+
phase-tracking state to reset (§ 2, `build-phase.json`).
|
|
119
|
+
- [ ] Old top-level `reports/`, `DEV_TEAM_REPORTS/`, `memory/`,
|
|
120
|
+
`plans/test-improve/` content stays exactly where it is — read it from
|
|
121
|
+
the old path, or move it by hand if you want it under the new tree.
|
|
122
|
+
- [ ] `.gitignore` rules for these directories were rewritten to match the new
|
|
123
|
+
paths; if you have local overrides, re-check them against the new
|
|
124
|
+
`.claude/`-scoped and `.dev-team-reports/`-scoped paths.
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# code-intelligence-nudge
|
|
2
|
+
|
|
3
|
+
A PreToolUse hook that recommends whichever of **CodeGraph**, **Repowise**,
|
|
4
|
+
and **Graphify** are indexed in the project over multi-file `Read` / `Grep` /
|
|
5
|
+
`Glob` exploration. Renamed and generalized from `codegraph-nudge` (#1368):
|
|
6
|
+
the original only ever recommended CodeGraph, even on projects where
|
|
7
|
+
Repowise and/or Graphify were also indexed, pushing agents toward the
|
|
8
|
+
narrowest tool even when the question called for a different one.
|
|
9
|
+
|
|
10
|
+
## What it does
|
|
11
|
+
|
|
12
|
+
The hook fires on every `Read`, `Grep`, and `Glob` tool call. It exits 0
|
|
13
|
+
silently unless **all** of the following are true:
|
|
14
|
+
|
|
15
|
+
1. The tool call looks like multi-file exploration:
|
|
16
|
+
- `Grep` with `path` unset, or `path` pointing to a directory, or `path` containing glob metacharacters.
|
|
17
|
+
- `Glob` with a `pattern` containing `*`, `?`, or `[`.
|
|
18
|
+
- (Single-file `Read` calls are always silent; `Read` is one path.)
|
|
19
|
+
2. At least one of `.codegraph/`, `.repowise/`, or `graphify-out/graph.json`
|
|
20
|
+
is present in the project's cwd.
|
|
21
|
+
3. That tool hasn't already been used earlier in the current turn (see
|
|
22
|
+
"Sentinel mechanism" below) — Graphify is the one exception; see
|
|
23
|
+
"Known asymmetry: Graphify never suppresses" below.
|
|
24
|
+
|
|
25
|
+
Detection is independent per tool: `.codegraph/` must be a directory,
|
|
26
|
+
`.repowise/` must be a directory, and `graphify-out/graph.json` must be a
|
|
27
|
+
regular file. A path that exists but is the wrong type (e.g. `.repowise` as
|
|
28
|
+
a plain file, or `graphify-out/graph.json` as a directory) is treated as
|
|
29
|
+
"not present," never as a crash. `graphify-out/` existing without
|
|
30
|
+
`graph.json` inside it produces no Graphify nudge.
|
|
31
|
+
|
|
32
|
+
**One tool present** — the hook prints a single-tool nudge to stderr, e.g.:
|
|
33
|
+
|
|
34
|
+
```text
|
|
35
|
+
[code-intelligence-nudge] CodeGraph is initialized in this project. Prefer codegraph_explore — structure, call graph, blast radius (not risk, rationale, or non-code content) for multi-file exploration; Grep/Glob/Read for confirming a specific detail.
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
**Two or more tools present** — the hook composes one combined message
|
|
39
|
+
naming each present-and-unused tool, in a **fixed precedence order**
|
|
40
|
+
(Graphify, then Repowise, then CodeGraph — never the order in which the
|
|
41
|
+
filesystem checks happened to run), each with a short differentiator clause
|
|
42
|
+
so a reader knows *why* to pick one tool over another, not just its name:
|
|
43
|
+
|
|
44
|
+
```text
|
|
45
|
+
[code-intelligence-nudge] Multiple code-intelligence indexes found. Pick whichever matches your question:
|
|
46
|
+
- graphify query "<question>" — cross-artifact: code + docs + schemas + infra (non-code content; not a faster CodeGraph/Repowise)
|
|
47
|
+
- repowise get_context / get_risk / get_why — risk, rationale, code health, dead code (not raw call-graph structure)
|
|
48
|
+
- codegraph_explore — structure, call graph, blast radius (not risk, rationale, or non-code content)
|
|
49
|
+
Grep/Glob/Read for confirming a specific detail.
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Only the present-and-not-yet-used-this-turn tools appear in the bulleted
|
|
53
|
+
list — a tool already used this turn (per the sentinel) drops out of the
|
|
54
|
+
message entirely; if that leaves zero qualifying tools, the hook is fully
|
|
55
|
+
silent (no output at all, not an empty bulleted list).
|
|
56
|
+
|
|
57
|
+
The hook **always exits 0** unless `/careful` mode is active, in which
|
|
58
|
+
case it exits 2 (blocking the tool call) and appends `[blocked by /careful]`
|
|
59
|
+
to the message. This matches the precedent set by `hooks/destructive_guard.py`.
|
|
60
|
+
|
|
61
|
+
## Fail-open
|
|
62
|
+
|
|
63
|
+
Any internal error — malformed JSON on stdin, an unreadable transcript, a
|
|
64
|
+
missing or corrupt sentinel, a wrong-type `.codegraph/`/`.repowise/`
|
|
65
|
+
directory or `graphify-out/graph.json` file — exits 0 without output. The
|
|
66
|
+
hook is a nudge, never a gate. A broken hook must never block legitimate
|
|
67
|
+
`Read` / `Grep` / `Glob` calls, and a malformed sentinel is always read as
|
|
68
|
+
"no tool used this turn" rather than raised.
|
|
69
|
+
|
|
70
|
+
## Sentinel mechanism
|
|
71
|
+
|
|
72
|
+
A companion hook, `hooks/code_intelligence_turn_mark.py`, runs as a
|
|
73
|
+
`PostToolUse` hook on two matchers: `mcp__codegraph__.*` and
|
|
74
|
+
`mcp__plugin_repowise_repowise__.*`. Each time a recognized CodeGraph or
|
|
75
|
+
Repowise MCP tool completes, it writes a small JSON sentinel to
|
|
76
|
+
`${CLAUDE_PROJECT_DIR}/.claude/code-intelligence-turn-state.json`:
|
|
77
|
+
|
|
78
|
+
```json
|
|
79
|
+
{ "transcript_id": "<basename of transcript_path minus extension>",
|
|
80
|
+
"turn_counter": <count of `"type":"user"` markers in the last ~1 MiB of the transcript>,
|
|
81
|
+
"tools_used": ["codegraph", "repowise"] }
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
`tools_used` **accumulates** rather than overwrites within the same turn —
|
|
85
|
+
if a `codegraph_*` tool ran earlier this turn and a `repowise` tool runs
|
|
86
|
+
next, the sentinel ends up listing both families, deduplicated, in
|
|
87
|
+
first-used order. A new turn (the transcript's `turn_counter` incremented,
|
|
88
|
+
i.e. the user sent another message) or a new `transcript_id` resets the
|
|
89
|
+
list to just the family that triggered the write — the accumulation never
|
|
90
|
+
carries across a turn boundary.
|
|
91
|
+
|
|
92
|
+
The nudge hook reads this sentinel on each invocation and re-computes the
|
|
93
|
+
current `transcript_id` and `turn_counter` from the live transcript. If
|
|
94
|
+
both match the sentinel, every family listed in `tools_used` is subtracted
|
|
95
|
+
from the set of qualifying tools before composing the message — so a
|
|
96
|
+
two-tool project where CodeGraph was already used this turn shows only the
|
|
97
|
+
Repowise line (or is fully silent if Repowise was used too). If the sentinel
|
|
98
|
+
is missing, unparseable, has no `tools_used` field at all (the pre-upgrade
|
|
99
|
+
schema), or has a `tools_used` field that isn't a list, it's treated as an
|
|
100
|
+
empty list — "no tool used this turn" — never a crash.
|
|
101
|
+
|
|
102
|
+
This avoids walking the full transcript on every `Read` / `Grep` / `Glob`
|
|
103
|
+
call (the mark hook does the lookup once, after the CodeGraph/Repowise tool
|
|
104
|
+
runs).
|
|
105
|
+
|
|
106
|
+
### Known asymmetry: Graphify never suppresses
|
|
107
|
+
|
|
108
|
+
Graphify has no MCP surface — it's conventionally invoked via `Bash`
|
|
109
|
+
(`graphify query "<question>"`, `graphify explain "<concept>"`, etc.), and
|
|
110
|
+
no `Bash` matcher was added to write into the sentinel (a deliberate
|
|
111
|
+
scope decision — see the plan's "Decision-defaults stances" section, not an
|
|
112
|
+
oversight). CodeGraph's and Repowise's nudge lines drop out of the combined
|
|
113
|
+
message once either tool has actually been used this turn; Graphify's line
|
|
114
|
+
cannot be suppressed the same way and can re-fire immediately after a
|
|
115
|
+
CLI-based `graphify query` call, even within the same turn. This is an
|
|
116
|
+
accepted tradeoff, not an unfixed bug — flagging it here so a future
|
|
117
|
+
contributor doesn't mistake the asymmetry for a regression.
|
|
118
|
+
|
|
119
|
+
## How to silence it
|
|
120
|
+
|
|
121
|
+
1. Run a `codegraph_*` MCP tool and/or a `repowise` MCP tool first in the
|
|
122
|
+
same turn — the rest of the turn's `Read` / `Grep` / `Glob` calls omit
|
|
123
|
+
that tool's line (or go fully silent if every present tool has been used).
|
|
124
|
+
Graphify is the exception — see "Known asymmetry" above.
|
|
125
|
+
2. Use single-file shapes when you really do want raw file IO:
|
|
126
|
+
- `Read` is always silent.
|
|
127
|
+
- `Grep` with `path` set to an explicit file is silent.
|
|
128
|
+
- `Glob` with a literal `pattern` (no metacharacters) is silent.
|
|
129
|
+
3. Remove `.codegraph/`, `.repowise/`, and/or `graphify-out/` from the
|
|
130
|
+
project — the hook is project-scoped and only nudges for tools it
|
|
131
|
+
detects as present.
|
|
132
|
+
|
|
133
|
+
## How to escalate it
|
|
134
|
+
|
|
135
|
+
`/careful` makes the nudge a hard block (`exit 2`). Useful for
|
|
136
|
+
production-critical sessions where you want to force use of an available
|
|
137
|
+
code-intelligence tool.
|
|
138
|
+
|
|
139
|
+
## Source
|
|
140
|
+
|
|
141
|
+
- `plugins/dev-team/hooks/code_intelligence_nudge.py`
|
|
142
|
+
- `plugins/dev-team/hooks/code_intelligence_turn_mark.py`
|
|
143
|
+
- `plugins/dev-team/hooks/lib/turn_identity.py` (shared `transcript_id`/
|
|
144
|
+
`count_user_lines` computation used by both hooks)
|
|
145
|
+
- Registered in `plugins/dev-team/settings.json` under PreToolUse
|
|
146
|
+
(`Read`, `Grep`, `Glob`) and PostToolUse (`mcp__codegraph__.*`,
|
|
147
|
+
`mcp__plugin_repowise_repowise__.*`).
|
|
148
|
+
- Tests: `plugins/dev-team/tests/hooks/test_code_intelligence_nudge.py` and
|
|
149
|
+
`plugins/dev-team/tests/hooks/test_code_intelligence_turn_mark.py`.
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
# Code Review Process
|
|
2
|
+
|
|
3
|
+
How `/code-review` (and its alias `/review`) works end-to-end: from invocation to final report, including the auto-fix loop and the artifacts it produces.
|
|
4
|
+
|
|
5
|
+
> **Authoritative source**: the skill spec at [`skills/code-review/SKILL.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/code-review/SKILL.md). This document is a reader-friendly walkthrough that links to the spec, rubric, template, and output format for details.
|
|
6
|
+
|
|
7
|
+
**On this page**: [What it does](#what-it-does) · [Invocation](#invocation) · [Pipeline](#pipeline) · [Artifacts](#artifacts) · [Customization points](#customization-points) · [Relationship to other workflows](#relationship-to-other-workflows) · [Concurrent use](#concurrent-use) · [References](#references)
|
|
8
|
+
|
|
9
|
+
## What it does
|
|
10
|
+
|
|
11
|
+
`/code-review` is an **orchestrator-only** workflow. It does not review code itself — it dispatches a suite of focused review agents in parallel, aggregates their structured findings, optionally auto-fixes actionable issues in a bounded loop, and produces a health-scored report.
|
|
12
|
+
|
|
13
|
+
It follows the [Minimum CD agent configuration](https://migration.minimumcd.org/docs/agentic-cd/agent-configuration/) pattern: delegate all semantic analysis, minimize context passed to each agent, run cheap deterministic checks before spending tokens on AI, and return structured results.
|
|
14
|
+
|
|
15
|
+
## Invocation
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
/code-review # auto-scope
|
|
19
|
+
/code-review --path src/auth # targeted directory
|
|
20
|
+
/code-review --since main # everything changed since ref
|
|
21
|
+
/code-review --all # full repository
|
|
22
|
+
/code-review --agent test-review # single agent (delegates to /review-agent)
|
|
23
|
+
/code-review --json # machine-readable output (CI)
|
|
24
|
+
/code-review --background # drift review (no gates, structural agents only)
|
|
25
|
+
/code-review --force --reason "release freeze" # skip gates, logged
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
See the [skill spec](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/code-review/SKILL.md#parse-arguments) for the full argument list.
|
|
29
|
+
|
|
30
|
+
## Pipeline
|
|
31
|
+
|
|
32
|
+
```mermaid
|
|
33
|
+
%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#dbeafe', 'primaryTextColor': '#1e3a5f', 'primaryBorderColor': '#3b82f6', 'lineColor': '#64748b', 'secondaryColor': '#f1f5f9', 'tertiaryColor': '#e0f2fe', 'background': '#ffffff', 'mainBkg': '#dbeafe', 'nodeBorder': '#2563eb', 'clusterBkg': '#eff6ff', 'clusterBorder': '#bfdbfe', 'titleColor': '#1e3a5f', 'edgeLabelBackground': '#f8fafc'}}}%%
|
|
34
|
+
flowchart TD
|
|
35
|
+
A[/code-review invoked/] --> B[1. Determine target files]
|
|
36
|
+
B --> C{Auto-scope}
|
|
37
|
+
C -->|dirty tree| D1[Uncommitted files]
|
|
38
|
+
C -->|clean tree| D2[Full repo]
|
|
39
|
+
D1 --> DC{1a. All files docs-only?}
|
|
40
|
+
D2 --> DC
|
|
41
|
+
DC -->|yes — no --force/--agent/--background| SC[Short-circuit: notice +<br/>write .pr-review-passed if auto-scoped + stop]
|
|
42
|
+
DC -->|no| E[1b. REVIEW-CONTEXT.md]
|
|
43
|
+
E --> F[1c. Probe MCP tools]
|
|
44
|
+
F --> G[2. Pre-flight gates]
|
|
45
|
+
G -->|fail| X1[Stop — no agents run]
|
|
46
|
+
G -->|pass| H[2b. Static analysis pre-pass]
|
|
47
|
+
H --> I[3. Select enabled agents]
|
|
48
|
+
I --> J[4. Dispatch agents in parallel]
|
|
49
|
+
J --> K[5. Apply ACCEPTED-RISKS suppression]
|
|
50
|
+
K --> L[5b. Compute health score]
|
|
51
|
+
L --> M{Actionable issues?}
|
|
52
|
+
M -->|no| R[7. Generate report]
|
|
53
|
+
M -->|yes| N[6. Ask: fix or report only?]
|
|
54
|
+
N -->|report only| R
|
|
55
|
+
N -->|fix| O[6a. Review-fix loop<br/>max 5 iterations]
|
|
56
|
+
O --> P{Converged?}
|
|
57
|
+
P -->|yes| R
|
|
58
|
+
P -->|no| Q[Escalate remaining to human]
|
|
59
|
+
Q --> R
|
|
60
|
+
R --> S[8. Save correction prompts]
|
|
61
|
+
S --> T[9. Write .pr-review-passed if applicable]
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### 1. Determine target files
|
|
65
|
+
|
|
66
|
+
File scope is resolved with this priority: `--path` → `--since` → `--all` → **auto-scope**.
|
|
67
|
+
|
|
68
|
+
Auto-scope (the default) runs `git diff --name-only` plus `git diff --cached --name-only`. If either shows changes, only those files are reviewed. If the working tree is clean, the full repository is reviewed.
|
|
69
|
+
|
|
70
|
+
| File count (full-repo mode) | Behavior |
|
|
71
|
+
| ----------------------------- | ---------- |
|
|
72
|
+
| ≤ 200 | Proceed |
|
|
73
|
+
| 201–500 | Warn, proceed |
|
|
74
|
+
| > 500 | Warn and request confirmation |
|
|
75
|
+
|
|
76
|
+
### 1a. Documentation-only short-circuit
|
|
77
|
+
|
|
78
|
+
After the target set is known, if **every** file is documentation, `/code-review` short-circuits: it emits `Documentation-only changeset — skipping code review`, writes the `.pr-review-passed` gate file when auto-scoped to uncommitted changes (so the eventual `gh pr create` isn't blocked, #1886), and stops before any gate or agent runs. In `--json` mode it emits `{"status": "skipped", "reason": "documentation-only"}`.
|
|
79
|
+
|
|
80
|
+
Documentation = `.md`/`.mdx`/`.rst`/`.txt`/`.adoc`, `docs/**`, and root docs (`README*`, `CHANGELOG*`, `LICENSE*`, …) — **except functional Claude-config markdown** (`.claude/**`, `agents/`, `skills/`, `prompts/`, `knowledge/`, `templates/agents/`, `CLAUDE.md`, `AGENTS.md`), which is always reviewed. `--force --reason`, `--agent`, and `--background` bypass the short-circuit.
|
|
81
|
+
|
|
82
|
+
### 1b. Institutional context
|
|
83
|
+
|
|
84
|
+
If `REVIEW-CONTEXT.md` exists at the repo root, its contents are read and passed to every agent as "Institutional context provided for this review". This is where a team records domain knowledge, related services, known quirks, or architectural history that agents cannot discover from code alone. The file is optional.
|
|
85
|
+
|
|
86
|
+
### 1c. Optional MCP tools
|
|
87
|
+
|
|
88
|
+
The orchestrator probes for enhanced analysis tools (RoslynMCP, code knowledge graph, documentation MCP, Semgrep) and records availability. Agents fall back to Glob/Grep/Read when a tool is unavailable — all agents work without them. Tool availability appears in the final report.
|
|
89
|
+
|
|
90
|
+
### 2. Pre-flight gates (fail fast, fail cheap)
|
|
91
|
+
|
|
92
|
+
Deterministic checks run before any AI agent is invoked. Cheaper checks block expensive ones.
|
|
93
|
+
|
|
94
|
+
| # | Gate | Tool | Stops on |
|
|
95
|
+
| --- | ------ | ------ | ---------- |
|
|
96
|
+
| 1 | Lint | `npx eslint` (or project's lint) | errors |
|
|
97
|
+
| 2 | Type check | `npx tsc --noEmit` (if `tsconfig.json` exists) | errors |
|
|
98
|
+
| 3 | Secret scan | grep for common secret patterns | any match |
|
|
99
|
+
| 4 | Semgrep SAST | `semgrep scan --config auto` | ERROR-severity findings |
|
|
100
|
+
| 5 | Pipeline-red check | `gh run list` on current branch | failing CI (warn only) |
|
|
101
|
+
|
|
102
|
+
Missing tools are skipped silently. Gate failures stop the pipeline — no agents run. `--force --reason "<text>"` skips all gates (and the step-1a documentation-only short-circuit) and logs an entry to `.claude/metrics/override-audit.jsonl`. `--background` skips gates entirely.
|
|
103
|
+
|
|
104
|
+
### 2b. Static analysis pre-pass
|
|
105
|
+
|
|
106
|
+
If static analysis tools are available (Semgrep, ESLint, TypeScript, Ruff, mypy), they run against the target files and collect structured findings. Results are **deduplicated across tools** and injected into each agent's prompt as pre-confirmed context:
|
|
107
|
+
|
|
108
|
+
> "These issues were detected by static analysis tools. Do not re-report them. Focus on semantic and architectural concerns."
|
|
109
|
+
|
|
110
|
+
Unlike pre-flight gates, the pre-pass never stops the pipeline — its purpose is to give agents a head start. If Semgrep already ran in gate 4, findings are reused rather than re-collected. See [`skills/static-analysis-integration/SKILL.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/static-analysis-integration/SKILL.md) for detection, execution, and deduplication rules.
|
|
111
|
+
|
|
112
|
+
### 3. Select enabled agents
|
|
113
|
+
|
|
114
|
+
All review agents in `agents/*.md` that declare an `effort:` band are enabled by default. Two language-agnostic agents always run regardless of tech stack:
|
|
115
|
+
|
|
116
|
+
- `doc-review` — README, API docs, inline comments, ADRs
|
|
117
|
+
- `arch-review` — layer boundaries, dependency direction, pattern consistency
|
|
118
|
+
|
|
119
|
+
`claude-setup-review`, `token-efficiency-review`, and `ai-provenance-review` are deliberately absent (#1733). `claude-setup-review` reviews the **harness** rather than the changeset, so it had nothing to say about a diff — `Scope: always` put it in an 18-lens panel for a two-file JavaScript change in a project with no Claude configuration at all. `token-efficiency-review` (CLAUDE.md/rule verbosity, file-size drift) and `ai-provenance-review` (AI-provenance verification debt) are properties of the whole tree, not any single diff, for the same reason. All three are now dispatched instead by the whole-tree `/repo-review` command — `claude-setup-review` also stays reachable on demand via `/claude-setup-review`.
|
|
120
|
+
|
|
121
|
+
A project-local `review-config.json` can disable specific agents. `--background` mode restricts the run to `doc-review`, `arch-review`, `naming-review`, and `structure-review`.
|
|
122
|
+
|
|
123
|
+
### 4. Dispatch agents in parallel
|
|
124
|
+
|
|
125
|
+
Each enabled agent is spawned as a sub-agent via the Agent tool, all in a single message for maximum parallelism. Each sub-agent:
|
|
126
|
+
|
|
127
|
+
- Runs in isolation (context is **not** shared with the parent)
|
|
128
|
+
- Receives only the files matching its declared scope (e.g., `js-fp-review` gets JS/TS only)
|
|
129
|
+
- Receives the minimum context its `Context needs` field requires
|
|
130
|
+
|
|
131
|
+
| `Context needs` | Input | When to use |
|
|
132
|
+
| ----------------- | ------- | ------------- |
|
|
133
|
+
| `diff-only` | Git diff output only | Pattern-matching agents (naming, FP) |
|
|
134
|
+
| `full-file` | Complete file contents | Agents needing function-level context |
|
|
135
|
+
| `project-structure` | Full files + directory tree | Agents reasoning about architecture |
|
|
136
|
+
|
|
137
|
+
When the target is the full repository (`--all`, `--path`, or clean auto-scope), agents always receive full files regardless of `Context needs`.
|
|
138
|
+
|
|
139
|
+
**Model selection** is declared per agent, not orchestrator-controlled. Each
|
|
140
|
+
agent declares `model:` (an alias, a full model ID, or `inherit`) and
|
|
141
|
+
`effort:` directly in its frontmatter — the native Claude Code sub-agent
|
|
142
|
+
contract, resolved by the harness itself before dispatch (ADR 0026).
|
|
143
|
+
|
|
144
|
+
Each agent returns a JSON result: `{agentName, status, modelTier, issues[], summary}`. See [`skills/code-review/output-format.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/code-review/output-format.md).
|
|
145
|
+
|
|
146
|
+
### 5. Aggregate results
|
|
147
|
+
|
|
148
|
+
**5a. ACCEPTED-RISKS suppression.** If `ACCEPTED-RISKS.md` exists at the repo root, its YAML rules are applied in declaration order. The first matching rule suppresses a finding and emits a one-line audit entry. Expired rules become inert and emit a WARN. Broad rules (wildcard `rule_id` or multi-file globs) emit an informational notice. Schema-invalid rules fail the run. Suppressed findings bypass the fix loop and appear in a dedicated report section grouped by rule id. See [`knowledge/accepted-risks-schema.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/knowledge/accepted-risks-schema.md).
|
|
149
|
+
|
|
150
|
+
**5b. Health scoring** per [`knowledge/review-rubric.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/knowledge/review-rubric.md):
|
|
151
|
+
|
|
152
|
+
| Score | Condition |
|
|
153
|
+
| ------- | ----------- |
|
|
154
|
+
| 🟢 HEALTHY | 0 fail AND ≤ 2 warn |
|
|
155
|
+
| 🟠 NEEDS ATTENTION | 1–2 fail OR 3+ warn |
|
|
156
|
+
| 🔴 CRITICAL | 3+ fail OR any `security-review` fail |
|
|
157
|
+
|
|
158
|
+
**Actionability classification** determines what the fix loop touches:
|
|
159
|
+
error/warning findings at high or medium confidence are auto-applied, and
|
|
160
|
+
everything else (any `confidence: none`, and all suggestions) is report-only.
|
|
161
|
+
The canonical rubric — severity × confidence → actionable — lives in the
|
|
162
|
+
[review-corrections flow](triage-workflow.md#4-the-review-corrections-flow).
|
|
163
|
+
|
|
164
|
+
### 6. Fix or report only?
|
|
165
|
+
|
|
166
|
+
If there are zero actionable issues, skip to report generation. Otherwise the orchestrator presents a summary and asks the user:
|
|
167
|
+
|
|
168
|
+
> **"Fix these issues automatically, or save as report only?"**
|
|
169
|
+
|
|
170
|
+
- **Fix** → enter the review-fix loop
|
|
171
|
+
- **Report only** → skip to report generation with all findings intact
|
|
172
|
+
|
|
173
|
+
**Exception — non-interactive mode**: when `/code-review` runs inside `/build` or `/pr`, the prompt is skipped and the fix loop runs automatically. The caller already owns the human gate — the orchestrator's Phase 3 approval for `/build`, and the pre-PR confirmation for `/pr`.
|
|
174
|
+
|
|
175
|
+
### 6a. Review-fix loop
|
|
176
|
+
|
|
177
|
+
```
|
|
178
|
+
iteration = 1
|
|
179
|
+
while actionable_issues > 0 and iteration ≤ 5:
|
|
180
|
+
1. Apply fixes (file-by-file, top-to-bottom by line number)
|
|
181
|
+
2. Run tests; if tests fail, revert the last fix and mark it human-required
|
|
182
|
+
3. Re-run only the agents that reported actionable issues, against only the modified files
|
|
183
|
+
4. Re-aggregate: merge new results with carry-forward passes
|
|
184
|
+
5. iteration += 1
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
**Exit conditions**:
|
|
188
|
+
|
|
189
|
+
| Condition | Outcome |
|
|
190
|
+
| ----------- | --------- |
|
|
191
|
+
| Zero actionable issues | Converged → generate report |
|
|
192
|
+
| Iteration limit (5) reached | Escalate remaining issues to human |
|
|
193
|
+
| Same issues persist after fix attempt | Not converging → exit and escalate |
|
|
194
|
+
| Test failure after fix + revert | Mark issue human-required, continue |
|
|
195
|
+
|
|
196
|
+
The final report includes a loop table showing iterations, issues fixed, and agents re-run.
|
|
197
|
+
|
|
198
|
+
### 7. Generate report
|
|
199
|
+
|
|
200
|
+
Output format depends on the `--json` flag:
|
|
201
|
+
|
|
202
|
+
- **JSON** — a single aggregated object with overall status, per-agent results, totals, fix summary, and token estimate. Consumable by CI.
|
|
203
|
+
- **Prose** — a markdown report following [`knowledge/review-template.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/knowledge/review-template.md): summary table, pre-flight status, institutional context, issues by file (sorted by severity), loop iteration table, recommendations, tool availability.
|
|
204
|
+
|
|
205
|
+
Remaining issues (not auto-fixed) are tagged `[confidence: none]`, `[auto-fix failed — human review required]`, or `[suggestion]`.
|
|
206
|
+
|
|
207
|
+
### 8. Correction prompts
|
|
208
|
+
|
|
209
|
+
For every unfixed actionable issue — plus suggestions worth addressing — a correction prompt JSON is written to `corrections/`. Each prompt includes priority, confidence, category, instruction, context, affected files, and `autoFixResult`. These can be addressed manually or with [`/apply-fixes`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/apply-fixes/SKILL.md).
|
|
210
|
+
|
|
211
|
+
The full lifecycle of these files — discovery to applied fix, including who owns a `corrections/*.json` after its branch merges — is documented in [triage-workflow.md](triage-workflow.md).
|
|
212
|
+
|
|
213
|
+
### 9. Pre-PR gate file
|
|
214
|
+
|
|
215
|
+
When the review was auto-scoped to uncommitted changes, the final status is `pass` or `warn`, and step 6a's fix loop (if it ran) did not exit with actionable issues still outstanding, the orchestrator writes `.pr-review-passed` to `.claude/memory/` (#1886) — a SHA-256 hash of the branch's diff against its base (`git diff <base>...HEAD`), not just the staged patch — an edit or commit after review changes this hash and invalidates the gate:
|
|
216
|
+
|
|
217
|
+
```bash
|
|
218
|
+
HASH=$(python3 "${CLAUDE_PLUGIN_ROOT}/hooks/lib/review_gate_hash.py" --branch-diff)
|
|
219
|
+
mkdir -p .claude/memory && echo "$HASH" > .claude/memory/.pr-review-passed
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
Always use this shared helper, not a hand-rolled `git diff | shasum` pipeline — the helper pins several git config overrides (relative-path scoping, external diff drivers, submodule visibility) that a raw pipeline would not.
|
|
223
|
+
|
|
224
|
+
**#1886: the gate moved from `git commit` to `gh pr create`.** `hooks/pre_pr_review.py` reads `.claude/memory/.pr-review-passed` at PR-creation time, bound to the branch's diff vs. its base (`branch_diff_gate_hash()`), not the staged-patch hash (`review_gate_hash()`) the retired `.review-passed` used. `hooks/pre_commit_review.py` (the former reader of `.review-passed`) is now a documented no-op, and `.review-passed` itself is no longer written by this step or read by anything.
|
|
225
|
+
|
|
226
|
+
**Known limitation.** `agent_dispatch_ledger.py` still stamps every dispatch's corroborating evidence with the staged-patch hash, never the branch-diff hash. The two are identical only in the common single-commit-then-PR shape (branch cut from base, reviewed once while staged, committed, then a PR opened immediately) — a branch with multiple separate review-and-commit cycles will correctly fail this gate at `gh pr create` time and need a fresh `/code-review` run against its current diff. Closing this for every shape is tracked as a follow-up, not fixed here.
|
|
227
|
+
|
|
228
|
+
### Reasoned bypass (`PR_GATE_BYPASS_REASON`)
|
|
229
|
+
|
|
230
|
+
**#1886:** `git commit --no-verify`/`-n` + `GATE_BYPASS_REASON` was the
|
|
231
|
+
historical bypass for the commit-time gate — both still work as ordinary git
|
|
232
|
+
flags/env vars, but `hooks/pre_commit_review.py` no longer reads either, so
|
|
233
|
+
they no longer gate anything at commit time.
|
|
234
|
+
|
|
235
|
+
The current gate (`hooks/pre_pr_review.py`, triggered by `gh pr create`)
|
|
236
|
+
requires a non-empty `PR_GATE_BYPASS_REASON` environment variable to bypass
|
|
237
|
+
— `gh` has no native `--no-verify`-shaped flag, so the env var alone is both
|
|
238
|
+
the trigger and the reason:
|
|
239
|
+
|
|
240
|
+
```bash
|
|
241
|
+
PR_GATE_BYPASS_REASON="hotfix, review to follow" gh pr create ...
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
With it set, the hook allows the PR to open and appends an accountability
|
|
245
|
+
line — timestamp, branch, which mechanism triggered it, the reason,
|
|
246
|
+
branch-diff file count, and plugin version — to
|
|
247
|
+
`.claude/metrics/gate-bypass-audit.jsonl`, unconditionally (this log is not
|
|
248
|
+
gated by `DEV_TEAM_TELEMETRY`). Same accountability posture as the original
|
|
249
|
+
commit-time bypass (#709), relocated to the new trigger point (#1886).
|
|
250
|
+
|
|
251
|
+
## Artifacts
|
|
252
|
+
|
|
253
|
+
| Artifact | When | Purpose |
|
|
254
|
+
| ---------- | ------ | --------- |
|
|
255
|
+
| Stdout report (markdown or JSON) | Every run | Human or CI consumption |
|
|
256
|
+
| `corrections/*.json` | When unfixed actionable or suggestion issues remain | Feeds `/apply-fixes` |
|
|
257
|
+
| `.pr-review-passed` | Auto-scoped clean/warn runs | Read by `hooks/pre_pr_review.py` at `gh pr create` time (#1886 — see § 9 above) |
|
|
258
|
+
| `.claude/metrics/override-audit.jsonl` | `--force --reason ...` | Audit trail for skipped gates |
|
|
259
|
+
| `.claude/metrics/gate-bypass-audit.jsonl` | `gh pr create` with `PR_GATE_BYPASS_REASON` set (#1886) | Audit trail for reasoned pre-PR-gate bypasses |
|
|
260
|
+
|
|
261
|
+
## Customization points
|
|
262
|
+
|
|
263
|
+
| File | Location | Effect |
|
|
264
|
+
| ------ | ---------- | -------- |
|
|
265
|
+
| `review-config.json` | Project root | Disables specific agents per project |
|
|
266
|
+
| `REVIEW-CONTEXT.md` | Project root | Injects institutional knowledge into every agent's prompt |
|
|
267
|
+
| `ACCEPTED-RISKS.md` | Project root | Suppresses known findings with audit trail and expiry |
|
|
268
|
+
|
|
269
|
+
All three are optional and project-local — they are not part of the plugin.
|
|
270
|
+
|
|
271
|
+
## Relationship to other workflows
|
|
272
|
+
|
|
273
|
+
- **Inline review checkpoints** (Phase 3 of `/build`) use the same review-fix loop mechanics, but the orchestrator selects a **targeted** subset of agents based on what changed in the unit of work. `/code-review` is the **final gate** before commit and runs the full enabled suite.
|
|
274
|
+
- **[`/review-agent`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/review-agent/SKILL.md)** runs a single agent — used for targeted checks and as the worker for inline checkpoints.
|
|
275
|
+
- **[`/apply-fixes`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/apply-fixes/SKILL.md)** consumes the `corrections/` directory produced here.
|
|
276
|
+
- **[`/pr`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/pr/SKILL.md)** runs `/code-review --json` as part of its pre-PR quality gate. It runs non-interactively (fix loop auto-applies, no "fix or report?" prompt) and `/pr` branches on the returned status — `overall: pass/warn` or `status: skipped` proceeds, `overall: fail` re-engages the user.
|
|
277
|
+
|
|
278
|
+
## Concurrent use
|
|
279
|
+
|
|
280
|
+
The `.pr-review-passed` gate is a single, gitignored file per working tree, so two
|
|
281
|
+
agents sharing **one** checkout overwrite each other's gate. Give each
|
|
282
|
+
concurrent agent its own git worktree — the full rationale and setup are in
|
|
283
|
+
[concurrent-use.md](concurrent-use.md).
|
|
284
|
+
|
|
285
|
+
## References
|
|
286
|
+
|
|
287
|
+
- [Skill spec](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/code-review/SKILL.md) — operational detail for the orchestrator
|
|
288
|
+
- [Triage workflow](triage-workflow.md) — the discovery-to-applied-fix lifecycle: `/triage`, correction prompts, `/apply-fixes`, and leftover-corrections ownership
|
|
289
|
+
- [Concurrent use](concurrent-use.md) — one worktree per agent; why the gate is per-checkout
|
|
290
|
+
- [Output format](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/code-review/output-format.md) — per-agent JSON, aggregated JSON, correction prompts
|
|
291
|
+
- [Report template](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/knowledge/review-template.md) — prose report structure
|
|
292
|
+
- [Scoring rubric](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/knowledge/review-rubric.md) — health scoring and severity mapping
|
|
293
|
+
- [Agent catalog](agent_info.md) — list of review agents and what each checks
|
|
294
|
+
- [Architecture](agent-architecture.md) — where `/code-review` fits in the three-phase workflow
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Concurrent use — multiple agents or people on one repo
|
|
2
|
+
|
|
3
|
+
Short version: **the normal team workflow is safe; for two *agents* on one
|
|
4
|
+
machine, give each its own git worktree.**
|
|
5
|
+
|
|
6
|
+
This resolves the concurrency question (#109) for the per-checkout state in
|
|
7
|
+
the table below: the plugin **documents** a safe pattern rather than
|
|
8
|
+
enforcing locks there, because git worktrees already solve the problem
|
|
9
|
+
cleanly. Separately, a handful of small on-disk state files that a single
|
|
10
|
+
worktree's own hooks read-modify-write or append to — session/retry counters
|
|
11
|
+
(`bash_retry_guard.py`, `session_learning_trigger.py`), and four of the
|
|
12
|
+
`.claude/metrics/*.jsonl` telemetry streams (`boundary-events.jsonl`,
|
|
13
|
+
`workflow-states.jsonl`, `iteration-journal.jsonl`, and an `/autoship`
|
|
14
|
+
round log) — *are* lock-serialized (`hooks/lib/atomic_state.py`,
|
|
15
|
+
#1501/#1874/#1889). Those races are within one worktree, between concurrent
|
|
16
|
+
tool calls or sliced-mode parallel dispatches, not the cross-worktree case
|
|
17
|
+
this doc is about. Other `.claude/metrics/*.jsonl` streams are not yet
|
|
18
|
+
converted (#1896).
|
|
19
|
+
|
|
20
|
+
## Why the normal case is already safe
|
|
21
|
+
|
|
22
|
+
The plugin's local coordination state is per-checkout, not shared:
|
|
23
|
+
|
|
24
|
+
| State | Where | Shared across checkouts? |
|
|
25
|
+
| --- | --- | --- |
|
|
26
|
+
| Review gate `.pr-review-passed` | `.claude/memory/`, **gitignored** | No — local to each working tree |
|
|
27
|
+
| Plan / build progress | `plans/<name>.md` (**tracked**) | Merges through normal git |
|
|
28
|
+
|
|
29
|
+
So two developers, each with their **own clone**, never collide on these — and
|
|
30
|
+
plan files reconcile the way any tracked file does. "Designed for teams" holds
|
|
31
|
+
for the standard one-checkout-per-person workflow.
|
|
32
|
+
|
|
33
|
+
## The unsafe case: two agents sharing ONE working tree
|
|
34
|
+
|
|
35
|
+
Two background agents, two terminals in the same directory, or a human and an
|
|
36
|
+
agent in the same checkout share **one** `.git/index` and **one** set of local
|
|
37
|
+
state files. That is where collisions occur (reproduced in
|
|
38
|
+
[`../../../tests/repo/test_multiplayer_collision.py`](https://github.com/bdfinst/agentic-dev-team/blob/main/tests/repo/test_multiplayer_collision.py),
|
|
39
|
+
characterized in issue #109):
|
|
40
|
+
the shared `.pr-review-passed` gets overwritten (false blocks) and the staged
|
|
41
|
+
set interleaves.
|
|
42
|
+
|
|
43
|
+
## The rule: one worktree per agent
|
|
44
|
+
|
|
45
|
+
Use a separate [git worktree](https://git-scm.com/docs/git-worktree) for each
|
|
46
|
+
concurrent agent. Each worktree has its own working directory, its own index,
|
|
47
|
+
and its own gitignored local state — so the agents never share a gate or a
|
|
48
|
+
staging area, while still sharing one clone's history and branches.
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
# From your main checkout, create an isolated worktree per task/agent:
|
|
52
|
+
git worktree add ../myrepo-feature-a feature-a
|
|
53
|
+
git worktree add ../myrepo-feature-b feature-b
|
|
54
|
+
|
|
55
|
+
# Run each agent in its own worktree directory. When done:
|
|
56
|
+
git worktree remove ../myrepo-feature-a
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Guidance:
|
|
60
|
+
|
|
61
|
+
- **One agent (or session) per worktree.** Don't point two agents at the same
|
|
62
|
+
directory.
|
|
63
|
+
- Worktrees are cheap (they share the object store) — make one per parallel task.
|
|
64
|
+
- The review gate, model overrides, and staged set are now per-worktree, so the
|
|
65
|
+
collisions above cannot occur.
|
|
66
|
+
|
|
67
|
+
## Known limitation (separate from concurrency)
|
|
68
|
+
|
|
69
|
+
The review gate currently binds to staged **paths**, not **content**, so editing
|
|
70
|
+
a file's content after review can commit it unreviewed even for a single user.
|
|
71
|
+
That is an independent correctness bug tracked in **#193** — fixing it (hash the
|
|
72
|
+
staged patch) also hardens the shared-tree case, but the worktree rule above is
|
|
73
|
+
the recommended isolation regardless.
|