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,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"overall": "warn",
|
|
3
|
+
"timestamp": "2026-07-05T12:00:00Z",
|
|
4
|
+
"targetFiles": 8,
|
|
5
|
+
"preFlightPassed": true,
|
|
6
|
+
"agents": [
|
|
7
|
+
{
|
|
8
|
+
"agentName": "structure-review",
|
|
9
|
+
"status": "warn",
|
|
10
|
+
"modelTier": "mid",
|
|
11
|
+
"issues": [
|
|
12
|
+
{
|
|
13
|
+
"severity": "warning",
|
|
14
|
+
"confidence": "high",
|
|
15
|
+
"file": "src/api/handler.ts",
|
|
16
|
+
"line": 15,
|
|
17
|
+
"message": "God object: handler mixes routing, validation, and persistence",
|
|
18
|
+
"suggestedFix": "Split routing, validation, and persistence into focused modules"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"severity": "warning",
|
|
22
|
+
"confidence": "medium",
|
|
23
|
+
"file": "src/api/handler.ts",
|
|
24
|
+
"line": 15,
|
|
25
|
+
"message": "Nesting depth 5 in the validation branch exceeds threshold of 3",
|
|
26
|
+
"suggestedFix": "Extract guard clauses into helper predicates"
|
|
27
|
+
}
|
|
28
|
+
],
|
|
29
|
+
"summary": "2 issues found: 2 warnings"
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
"agentName": "test-review",
|
|
33
|
+
"status": "pass",
|
|
34
|
+
"modelTier": "mid",
|
|
35
|
+
"issues": [],
|
|
36
|
+
"summary": "No issues found"
|
|
37
|
+
}
|
|
38
|
+
],
|
|
39
|
+
"totals": {"errors": 0, "warnings": 2, "suggestions": 0},
|
|
40
|
+
"tokenEstimate": {
|
|
41
|
+
"totalInputFiles": 12000,
|
|
42
|
+
"agentCount": 2,
|
|
43
|
+
"contextStrategy": "full-file"
|
|
44
|
+
},
|
|
45
|
+
"dispatchFailures": [],
|
|
46
|
+
"topFindings": [
|
|
47
|
+
{
|
|
48
|
+
"severity": "warning",
|
|
49
|
+
"agents": ["structure-review"],
|
|
50
|
+
"file": "src/api/handler.ts",
|
|
51
|
+
"line": 15,
|
|
52
|
+
"message": "handler mixes too many concerns and exceeds the nesting threshold"
|
|
53
|
+
}
|
|
54
|
+
],
|
|
55
|
+
"summary": "WARN (1 agent passed, 1 warned, 0 failed). 2 total issues."
|
|
56
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Sample Code Review Report
|
|
2
|
+
|
|
3
|
+
```text
|
|
4
|
+
# Code Review Summary
|
|
5
|
+
|
|
6
|
+
| Agent | Status | Issues |
|
|
7
|
+
|--------------------|--------|--------|
|
|
8
|
+
| test-review | PASS | 0 |
|
|
9
|
+
| structure-review | FAIL | 3 |
|
|
10
|
+
| naming-review | PASS | 0 |
|
|
11
|
+
| domain-review | PASS | 0 |
|
|
12
|
+
| security-review | PASS | 0 |
|
|
13
|
+
| js-fp-review | WARN | 3 |
|
|
14
|
+
|
|
15
|
+
Overall: FAIL (4 passed, 1 warned, 1 failed)
|
|
16
|
+
Total issues: 6 (1 error, 3 warnings, 2 suggestions)
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Issues by file
|
|
20
|
+
|
|
21
|
+
### src/api/handler.ts
|
|
22
|
+
|
|
23
|
+
- **ERROR** [structure-review] Line 15: Function `processRequest` nests 5 levels deep validating input before touching business logic
|
|
24
|
+
- Fix: Extract validation, transformation, and persistence into separate functions
|
|
25
|
+
|
|
26
|
+
- **WARNING** [structure-review] Line 15: Function handles validation, business logic, and DB writes
|
|
27
|
+
- Fix: Apply SRP — separate into validate(), transform(), persist()
|
|
28
|
+
|
|
29
|
+
- **WARNING** [js-fp-review] Line 42: `results.push(item)` — array mutation
|
|
30
|
+
- Fix: Use `results = [...results, item]` or build with `.map()`
|
|
31
|
+
|
|
32
|
+
### src/utils/config.ts
|
|
33
|
+
|
|
34
|
+
- **WARNING** [js-fp-review] Line 8: `global.appConfig = merged` — global state mutation
|
|
35
|
+
- Fix: Export a module-level getter instead
|
|
36
|
+
|
|
37
|
+
- **SUGGESTION** [structure-review] Line 1: File mixes config loading and validation
|
|
38
|
+
- Fix: Split into config-loader.ts and config-validator.ts
|
|
39
|
+
|
|
40
|
+
- **SUGGESTION** [js-fp-review] Line 22: `let count` never reassigned
|
|
41
|
+
- Fix: Use `const count`
|
|
@@ -0,0 +1,478 @@
|
|
|
1
|
+
# Output Format Reference
|
|
2
|
+
|
|
3
|
+
## Per-agent JSON result
|
|
4
|
+
|
|
5
|
+
```json
|
|
6
|
+
{
|
|
7
|
+
"agentName": "structure-review",
|
|
8
|
+
"status": "pass|warn|fail|skip",
|
|
9
|
+
"modelTier": "mid",
|
|
10
|
+
"issues": [
|
|
11
|
+
{
|
|
12
|
+
"severity": "error|warning|suggestion",
|
|
13
|
+
"confidence": "high|medium|none",
|
|
14
|
+
"file": "src/auth/login.ts",
|
|
15
|
+
"line": 42,
|
|
16
|
+
"message": "God object: AuthController handles login, registration, and password reset",
|
|
17
|
+
"suggestedFix": "Split into LoginController, RegistrationController, and PasswordResetController"
|
|
18
|
+
}
|
|
19
|
+
],
|
|
20
|
+
"summary": "2 issues found: 1 error, 1 warning"
|
|
21
|
+
}
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### `confidence` field values
|
|
25
|
+
|
|
26
|
+
| Value | Meaning | `apply-fixes` behavior |
|
|
27
|
+
|-------|---------|----------------------|
|
|
28
|
+
| `high` | Mechanical fix; correct with high certainty | Auto-apply |
|
|
29
|
+
| `medium` | Direction right; tradeoffs possible | Present as suggested diff — require confirmation |
|
|
30
|
+
| `none` | Requires human judgment | Present finding only; do not generate correction prompt |
|
|
31
|
+
|
|
32
|
+
## Aggregated JSON result (`--json` flag)
|
|
33
|
+
|
|
34
|
+
```json
|
|
35
|
+
{
|
|
36
|
+
"overall": "pass|warn|fail",
|
|
37
|
+
"timestamp": "2026-03-01T12:00:00Z",
|
|
38
|
+
"targetFiles": 42,
|
|
39
|
+
"preFlightPassed": true,
|
|
40
|
+
"agents": [
|
|
41
|
+
{"agentName": "test-review", "status": "pass", "modelTier": "mid", "issues": [], "summary": "..."}
|
|
42
|
+
],
|
|
43
|
+
"totals": {"errors": 0, "warnings": 2, "suggestions": 1},
|
|
44
|
+
"tokenEstimate": {
|
|
45
|
+
"totalInputFiles": 15000,
|
|
46
|
+
"agentCount": 11,
|
|
47
|
+
"contextStrategy": "diff-only|full-file|mixed"
|
|
48
|
+
},
|
|
49
|
+
"topFindings": [
|
|
50
|
+
{
|
|
51
|
+
"severity": "error|warning|suggestion",
|
|
52
|
+
"agents": ["structure-review", "correctness-review"],
|
|
53
|
+
"file": "src/api/handler.ts",
|
|
54
|
+
"line": 15,
|
|
55
|
+
"message": "God object: handler mixes routing, validation, and persistence"
|
|
56
|
+
}
|
|
57
|
+
],
|
|
58
|
+
"dispatchFailures": [
|
|
59
|
+
{"agentName": "arch-review", "attempts": 2, "error": "Tool result missing due to internal error", "shape": null, "extraction": null}
|
|
60
|
+
],
|
|
61
|
+
"ledgerSkipped": [
|
|
62
|
+
{"lens": "doc-review", "file": "src/api/handler.ts", "verdict": {"lens": "doc-review", "file_path": "src/api/handler.ts", "ts": "2026-03-01T11:58:00Z", "file_content_hash": "9f2c...", "outcome": "pass", "plugin_version": "1.42.0"}}
|
|
63
|
+
],
|
|
64
|
+
"summary": "FAIL (N agents passed, N warned, N failed). N total issues. 1 lens never ran (dispatch failure)."
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
The `tokenEstimate` field provides rough cost observability:
|
|
69
|
+
|
|
70
|
+
- `totalInputFiles`: approximate character count of all input files passed to agents
|
|
71
|
+
- `agentCount`: number of agents that actually reviewed content this run —
|
|
72
|
+
excludes `skip` (contract-shaped, but nothing was reviewed) and
|
|
73
|
+
`dispatchFailures` (never ran)
|
|
74
|
+
- `contextStrategy`: whether diff-only, full-file, or a mix was used
|
|
75
|
+
|
|
76
|
+
The `topFindings` array is the consolidated cross-agent view — one entry per
|
|
77
|
+
distinct `file:line`, so a finding surfaced by several agents appears once:
|
|
78
|
+
|
|
79
|
+
- `severity` is the **single highest** enum (`error` > `warning` > `suggestion`)
|
|
80
|
+
for that finding — never a slash- or comma-joined string.
|
|
81
|
+
- `agents` is an explicit array of the reporting agents. Multi-agent
|
|
82
|
+
attribution lives here; never join multiple values into `severity` or an
|
|
83
|
+
`agent` scalar.
|
|
84
|
+
|
|
85
|
+
`dispatchFailures` (issue #1752, always present, empty array when none):
|
|
86
|
+
agents whose `Agent` tool dispatch failed and then failed a single individual
|
|
87
|
+
retry — the lens never actually ran. Distinct from an `agents[]` entry with
|
|
88
|
+
`status: "skip"` (agent had nothing to review this run — see
|
|
89
|
+
[`knowledge/review-agent-output-contract.md`](../../knowledge/review-agent-output-contract.md#status-values))
|
|
90
|
+
and from `status: "fail"` (agent ran and found error-severity issues). A
|
|
91
|
+
non-empty `dispatchFailures` list is never omitted because the rest of the
|
|
92
|
+
panel returned cleanly.
|
|
93
|
+
|
|
94
|
+
`ledgerSkipped` (issue #2167, always present, empty array when none): one
|
|
95
|
+
`{"lens", "file", "verdict"}` entry per `(lens, file)` pair
|
|
96
|
+
`scripts/verdict_scope.py` matched to an exact, current-content `pass` row
|
|
97
|
+
in `.claude/metrics/review-verdicts.jsonl` — that lens was never dispatched
|
|
98
|
+
against that file this run because an earlier dispatch already cleared this
|
|
99
|
+
exact content. `verdict` is the matched ledger row verbatim (its own
|
|
100
|
+
snake_case fields — `ts`/`file_content_hash`/`plugin_version`/`outcome`/
|
|
101
|
+
`lens`/`file_path`, exactly as `hooks/lib/review_verdicts.py` writes them —
|
|
102
|
+
never renamed to camelCase), named here so a reader can verify the skip
|
|
103
|
+
against the ledger directly rather than trust it blindly. An
|
|
104
|
+
agent entirely absent from `agents[]` with every one of its candidate files
|
|
105
|
+
listed here is a *fully* ledger-skipped lens (`verdict_scope.py`'s own
|
|
106
|
+
`fullySkippedLenses`) — not a coverage gap, but never silent either: `summary`
|
|
107
|
+
states the count of fully-skipped lenses whenever `ledgerSkipped` is
|
|
108
|
+
non-empty, the same way it already states dispatch-failure counts. Skipped
|
|
109
|
+
files contribute no new findings to `topFindings`/`totals`, so `overall`
|
|
110
|
+
reflects exactly the same aggregate a from-scratch full-panel run over this
|
|
111
|
+
content would reach — a fully ledger-skipped panel is never `fail`/`warn` on
|
|
112
|
+
that basis alone.
|
|
113
|
+
|
|
114
|
+
`shape`/`extraction` (issue #1998, both `null` when the dispatch never
|
|
115
|
+
returned at all — a transport failure, not a contract failure): when the
|
|
116
|
+
retry DID return but failed `validate_review_output.py`'s contract check,
|
|
117
|
+
these carry that check's classification — `shape` is one of its five failure
|
|
118
|
+
shapes (`empty`/`truncated`/`malformed-json`/`schema-drift`/`not-json`),
|
|
119
|
+
`extraction` is set alongside `shape: "schema-drift"` or `shape:
|
|
120
|
+
"malformed-json"` and names which extraction path (`clean`/`fenced`/
|
|
121
|
+
`prose-preamble`) recovered the object before it failed. `error` always
|
|
122
|
+
carries the human-readable reason either way (the transport error text, or
|
|
123
|
+
`validate_review_output.py`'s parse/schema error, redacted and capped at 256
|
|
124
|
+
characters the same way `raw_prefix` is) — `shape`/`extraction` add the
|
|
125
|
+
machine-readable classification alongside it rather than replacing it.
|
|
126
|
+
|
|
127
|
+
**A non-empty `dispatchFailures` forces `overall: "fail"`**, unconditionally,
|
|
128
|
+
regardless of what the per-agent results alone would compute — the coverage
|
|
129
|
+
gap is enforced by this DTO itself, not by each caller re-deriving it from
|
|
130
|
+
`dispatchFailures` separately. This matters because `SKILL.md` step 9 (the
|
|
131
|
+
`.pr-review-passed` gate) never runs under `--json` — without this rule, a
|
|
132
|
+
`--json` caller (e.g. `/pr`, which reads only `overall`/`status`) could see
|
|
133
|
+
`overall: "pass"` and proceed despite a lens that never ran, exactly the
|
|
134
|
+
silent-gap failure mode #1752 exists to close.
|
|
135
|
+
|
|
136
|
+
**A step 6a fix-loop exit via escalation also forces `overall: "fail"`**
|
|
137
|
+
(issue #1880), for the same reason and by the same mechanism as the
|
|
138
|
+
`dispatchFailures` rule above: `SKILL.md` step 6a's own exit-conditions table
|
|
139
|
+
already treats a round-cap exit, an iteration-limit exit, and a
|
|
140
|
+
"same issues persist" exit as fail-equivalent — but only for step 9's
|
|
141
|
+
`.pr-review-passed` gate-write condition, and step 9 never runs under `--json`.
|
|
142
|
+
Without this second rule, an escalated review whose only remaining issues are
|
|
143
|
+
`warning`-severity would compute `overall: "warn"` from the per-agent totals
|
|
144
|
+
alone and a `--json` caller (e.g. `/pr`'s internal `/code-review --since
|
|
145
|
+
<base> --json` call) would see a passing-looking `"warn"` and proceed —
|
|
146
|
+
silently missing the escalation, exactly the gap the `dispatchFailures` rule
|
|
147
|
+
above already closed for dispatch coverage. A **clean** `converged` exit
|
|
148
|
+
(zero actionable issues, or the round ledger reporting `converged`) is
|
|
149
|
+
**not** an escalation and does not trigger this rule. Apply both override
|
|
150
|
+
rules — `dispatchFailures` and fix-loop escalation — after the totals-based
|
|
151
|
+
`overall` computation, so either one always wins regardless of the per-agent
|
|
152
|
+
severity mix.
|
|
153
|
+
|
|
154
|
+
**`--json` output contract.** When `--json` is set, the object above is the
|
|
155
|
+
run's *only* output: printed to stdout, and no `corrections/*.json` files or
|
|
156
|
+
`.pr-review-passed` gate file are written — regardless of scope (`--path`,
|
|
157
|
+
`--since`, `--all`, auto-scope) or how many issues were found. This holds
|
|
158
|
+
whether `--json` was reached directly or via `/pr`'s call into `/code-review
|
|
159
|
+
--json` (see SKILL.md steps 7–9).
|
|
160
|
+
|
|
161
|
+
## Per-slice section artifact (sliced mode)
|
|
162
|
+
|
|
163
|
+
Written by `scripts/ledger.py` → `write_section` to
|
|
164
|
+
`.dev-team-reports/code-review/raw/section-<id>.json` as each slice completes,
|
|
165
|
+
then dropped from orchestrator context (persist-and-drop). `scripts/consolidate.py`
|
|
166
|
+
reads these back for the final report.
|
|
167
|
+
|
|
168
|
+
```json
|
|
169
|
+
{
|
|
170
|
+
"schema": "code-review-section/v1",
|
|
171
|
+
"id": "0001",
|
|
172
|
+
"files": ["src/auth/login.ts", "src/auth/session.ts"],
|
|
173
|
+
"is_declarative": false,
|
|
174
|
+
"panel": ["correctness-review", "structure-review"],
|
|
175
|
+
"findings": [
|
|
176
|
+
{"severity": "warning", "confidence": "medium", "agent": "structure-review", "file": "src/auth/login.ts", "line": 42, "message": "..."}
|
|
177
|
+
],
|
|
178
|
+
"dispatchFailures": []
|
|
179
|
+
}
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
- `id` is the slice id; the filename is `section-<id>.json`.
|
|
183
|
+
- `dispatchFailures` (issue #1762, always present, empty array when none): this
|
|
184
|
+
slice's own unrecovered dispatch failures — same shape as the legacy path's
|
|
185
|
+
field (below). `scripts/consolidate.py` concatenates every slice's list into
|
|
186
|
+
the consolidated aggregate's own `dispatchFailures` field (see below).
|
|
187
|
+
- `panel` lists the agents that **actually ran** for this slice — a reduced-panel
|
|
188
|
+
(declarative) slice lists only `correctness-review` and `structure-review`, so
|
|
189
|
+
a reader can tell "fewer findings" from "fewer reviewers ran".
|
|
190
|
+
- `findings` use the per-agent `issues[]` shape above **plus an `agent` field**
|
|
191
|
+
naming the review dimension that reported each one. Because a slice's whole
|
|
192
|
+
panel writes into one flat `findings[]` list, that `agent` tag is what lets
|
|
193
|
+
`consolidate.py` merge reporting agents per `file:line` and roll up recurring
|
|
194
|
+
themes — omitting it yields empty `agents[]` arrays and no themes.
|
|
195
|
+
|
|
196
|
+
### Schema-drift tolerance (#1261)
|
|
197
|
+
|
|
198
|
+
Real review-agent output drifts from this schema — agents return the native
|
|
199
|
+
`{status, issues, summary}` shape, key the list as `issues` (the per-agent key)
|
|
200
|
+
instead of `findings` (the section key), or add extra top-level keys. The
|
|
201
|
+
aggregator absorbs these variants deterministically rather than miscounting:
|
|
202
|
+
|
|
203
|
+
- `consolidate.py`'s `consolidate()` reads a section's findings from `findings`
|
|
204
|
+
**or** `issues` (canonical first), so a mis-keyed list is aggregated, never
|
|
205
|
+
silently counted as zero. A value present but not a list degrades to "no
|
|
206
|
+
findings" rather than crashing.
|
|
207
|
+
- `consolidate.normalize_agent_result(raw, agent_name=None)` is the extraction
|
|
208
|
+
contract for folding one agent's raw result into a section's flat `findings[]`:
|
|
209
|
+
it pulls the list from either key, ignores extra keys (`status`, `summary`),
|
|
210
|
+
and tags each finding with its reporting `agent` (`raw["agentName"]`, else the
|
|
211
|
+
passed `agent_name`). Non-dict input degrades to `[]`; it never raises.
|
|
212
|
+
|
|
213
|
+
This tolerance is a safety net for silent drift, **not** a licence to emit the
|
|
214
|
+
wrong shape — the per-agent contract above (`issues[]`) remains authoritative.
|
|
215
|
+
|
|
216
|
+
## Progress ledger (sliced mode)
|
|
217
|
+
|
|
218
|
+
Written by `init_ledger` to `.dev-team-reports/code-review/ledger.json`, updated to
|
|
219
|
+
`done` as each slice's section artifact lands. Inspectable/interruptible — a
|
|
220
|
+
partial ledger is always valid JSON.
|
|
221
|
+
|
|
222
|
+
```json
|
|
223
|
+
{
|
|
224
|
+
"schema": "code-review-ledger/v1",
|
|
225
|
+
"cap": 50,
|
|
226
|
+
"slices": [
|
|
227
|
+
{"id": "0001", "files": ["src/auth/login.ts"], "is_declarative": false, "status": "pending"}
|
|
228
|
+
]
|
|
229
|
+
}
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
- `cap` is the per-slice file cap the run partitioned with; `--resume` **refuses**
|
|
233
|
+
a different cap rather than silently repartitioning (see `sliced-mode.md`).
|
|
234
|
+
- `status` is `pending` until the slice's section artifact exists, then `done`.
|
|
235
|
+
The artifact on disk — not this status field — is the source of truth for
|
|
236
|
+
`--resume`.
|
|
237
|
+
|
|
238
|
+
## Consolidated aggregate (sliced mode)
|
|
239
|
+
|
|
240
|
+
Produced by `scripts/consolidate.py` → `consolidate(sections)` from all
|
|
241
|
+
`section-*.json` artifacts. It extends the aggregated `--json` object above with
|
|
242
|
+
three sliced-only fields, and reuses the same `topFindings` dedup contract
|
|
243
|
+
(one entry per distinct `file:line`, reporting agents merged into `agents[]`,
|
|
244
|
+
severity = the single highest enum).
|
|
245
|
+
|
|
246
|
+
```json
|
|
247
|
+
{
|
|
248
|
+
"sliced": true,
|
|
249
|
+
"sliceCount": 24,
|
|
250
|
+
"overall": "warn",
|
|
251
|
+
"totals": {"errors": 0, "warnings": 5, "suggestions": 3},
|
|
252
|
+
"topFindings": [
|
|
253
|
+
{"severity": "warning", "agents": ["structure-review", "correctness-review"], "file": "src/api/handler.ts", "line": 15, "message": "..."}
|
|
254
|
+
],
|
|
255
|
+
"recurringThemes": [
|
|
256
|
+
{"agent": "structure-review", "slices": ["0003", "0007", "0011"], "occurrences": 9}
|
|
257
|
+
],
|
|
258
|
+
"reducedPanelSlices": ["0002", "0019"],
|
|
259
|
+
"dispatchFailures": [
|
|
260
|
+
{"agentName": "arch-review", "attempts": 2, "error": "Tool result missing due to internal error", "shape": null, "extraction": null}
|
|
261
|
+
],
|
|
262
|
+
"summary": "WARN across 24 slices — 0 errors, 5 warnings, 3 suggestions; 1 recurring theme(s)."
|
|
263
|
+
}
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
- `summary`: a one-line roll-up (status, slice count, totals, theme count).
|
|
267
|
+
- `malformedArtifacts` (optional): present only when a `section-*.json` was
|
|
268
|
+
unreadable — an array of the offending paths; `main()` also reports each to
|
|
269
|
+
stderr and exits non-zero, so a bad artifact is never silently dropped.
|
|
270
|
+
- `recurringThemes`: review dimensions (by `agent`) whose findings recur across
|
|
271
|
+
**two or more slices** — the systemic-pattern rollup (e.g. the same god-class
|
|
272
|
+
or leak flagged in many modules). `slices` lists the affected slice ids;
|
|
273
|
+
`occurrences` is the total finding count for that dimension. A dimension
|
|
274
|
+
appearing in only one slice is **not** a theme.
|
|
275
|
+
- `reducedPanelSlices`: the ids of slices that ran the reduced (declarative)
|
|
276
|
+
panel — so a reader can tell "fewer findings" from "fewer reviewers ran".
|
|
277
|
+
- `dispatchFailures` (issue #1762, always present, empty array when none):
|
|
278
|
+
the concatenation of every slice's own `dispatchFailures` entries (per-slice
|
|
279
|
+
schema above) — agents whose `Agent` tool dispatch failed and then failed a
|
|
280
|
+
single individual retry, for that slice's panel. Same shape and same
|
|
281
|
+
`agentName`/`attempts`/`error`/`shape`/`extraction` fields as the legacy
|
|
282
|
+
aggregate's `dispatchFailures` above; consolidation only concatenates, it
|
|
283
|
+
does not re-shape. A non-empty list is never omitted because the rest of
|
|
284
|
+
the run returned cleanly.
|
|
285
|
+
- **A non-empty `dispatchFailures` forces `overall: "fail"`**, unconditionally,
|
|
286
|
+
after the totals-based `overall` computation above — the same
|
|
287
|
+
unconditional-override rule as the legacy aggregate, so a lens that never
|
|
288
|
+
ran on even one slice cannot be masked by a `pass`/`warn` computed from the
|
|
289
|
+
slices that did return.
|
|
290
|
+
|
|
291
|
+
## Correction prompt JSON
|
|
292
|
+
|
|
293
|
+
```json
|
|
294
|
+
{
|
|
295
|
+
"priority": "high|medium|low",
|
|
296
|
+
"confidence": "high|medium",
|
|
297
|
+
"category": "structure-review",
|
|
298
|
+
"instruction": "Fix: God object handles too many concerns (Suggested: Split into focused controllers)",
|
|
299
|
+
"context": "Line 42 in src/auth/login.ts",
|
|
300
|
+
"affectedFiles": ["src/auth/login.ts"]
|
|
301
|
+
}
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
Severity mapping: error→high, warning→medium, suggestion→low.
|
|
305
|
+
|
|
306
|
+
Correction prompts are only generated for issues with `confidence: high` or `confidence: medium`. Issues with `confidence: none` are included in the review report but do not produce correction prompts — they require human judgment and must be resolved manually before merging.
|
|
307
|
+
|
|
308
|
+
## Status rules
|
|
309
|
+
|
|
310
|
+
- **pass**: Zero issues
|
|
311
|
+
- **warn**: Issues found, none are errors
|
|
312
|
+
- **fail**: At least one error-severity issue
|
|
313
|
+
- **skip**: see the canonical definition in [`knowledge/review-agent-output-contract.md`](../../knowledge/review-agent-output-contract.md#status-values)
|
|
314
|
+
|
|
315
|
+
`dispatchFailures` entries carry no `status` at all — the agent never ran, so
|
|
316
|
+
none of the four values above apply. See the `dispatchFailures` field
|
|
317
|
+
description above.
|
|
318
|
+
|
|
319
|
+
## Model tier values
|
|
320
|
+
|
|
321
|
+
Each agent declares a `Model tier` field that controls which model runs it:
|
|
322
|
+
|
|
323
|
+
| Tier | Model | Use for |
|
|
324
|
+
| ------ | ------- | --------- |
|
|
325
|
+
| `small` | Haiku | Pattern matching, thresholds, naming checks |
|
|
326
|
+
| `mid` | Sonnet | Structural analysis, test quality, mutation detection |
|
|
327
|
+
| `frontier` | Opus | Security analysis, domain modeling, semantic reasoning |
|
|
328
|
+
|
|
329
|
+
## Context needs values
|
|
330
|
+
|
|
331
|
+
Each agent declares a `Context needs` field that controls what input it receives:
|
|
332
|
+
|
|
333
|
+
| Value | Input | When to use |
|
|
334
|
+
| ------- | ------- | ------------- |
|
|
335
|
+
| `diff-only` | Git diff output only | Pattern-matching agents (naming, FP) |
|
|
336
|
+
| `full-file` | Complete file contents | Agents needing function-level context |
|
|
337
|
+
| `project-structure` | Full files + directory tree | Agents reasoning about architecture |
|
|
338
|
+
|
|
339
|
+
## Review Findings prompt (interactive — step 6)
|
|
340
|
+
|
|
341
|
+
When actionable issues exist, present this prompt before any fix action. **This
|
|
342
|
+
prompt is bypassed under `--json` (or `--yes`)**: those runs are contractually
|
|
343
|
+
non-interactive and default to report-only (no code modified) — see SKILL.md
|
|
344
|
+
step 6, exception (a).
|
|
345
|
+
|
|
346
|
+
```text
|
|
347
|
+
## Review Findings
|
|
348
|
+
|
|
349
|
+
Found N actionable issues (N errors, N warnings) that can be
|
|
350
|
+
auto-fixed, plus N issues requiring human review.
|
|
351
|
+
|
|
352
|
+
Actionable issues by agent:
|
|
353
|
+
- structure-review: 3 (2 error, 1 warning)
|
|
354
|
+
- naming-review: 2 (2 warning)
|
|
355
|
+
- js-fp-review: 1 (1 error)
|
|
356
|
+
|
|
357
|
+
Options:
|
|
358
|
+
1. **Fix** — Auto-fix actionable issues and re-run review
|
|
359
|
+
(up to 5 iterations until clean)
|
|
360
|
+
2. **Report only** — Save all findings to a report without
|
|
361
|
+
modifying any code
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
## Review-Fix Loop iteration log (step 6a-iv)
|
|
365
|
+
|
|
366
|
+
```text
|
|
367
|
+
## Review-Fix Loop
|
|
368
|
+
|
|
369
|
+
| Iteration | Actionable Issues | Fixed | Remaining | Agents Re-run |
|
|
370
|
+
|-----------|-------------------|-------|-----------|---------------|
|
|
371
|
+
| 1 | 7 | 6 | 1 | 3 |
|
|
372
|
+
| 2 | 1 | 1 | 0 | 1 |
|
|
373
|
+
|
|
374
|
+
Loop converged in 2 iterations.
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
If the loop did not converge:
|
|
378
|
+
|
|
379
|
+
```text
|
|
380
|
+
Loop stopped after 5 iterations. 2 issues remain:
|
|
381
|
+
- [security-review] SQL injection at src/db/query.ts:42 [auto-fix failed — human review required]
|
|
382
|
+
- [domain-review] Abstraction leak at src/api/handler.ts:15 [confidence: none — human review required]
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
## Code Review Summary report (step 7, prose mode)
|
|
386
|
+
|
|
387
|
+
```text
|
|
388
|
+
# Code Review Summary
|
|
389
|
+
|
|
390
|
+
| Agent | Status | Issues | Fixed | Model Tier |
|
|
391
|
+
|--------------------|--------|--------|-------|------------|
|
|
392
|
+
| test-review | PASS | 0 | — | mid |
|
|
393
|
+
| structure-review | PASS | 2 | 2 | mid |
|
|
394
|
+
| security-review | WARN | 1 | 0 | frontier |
|
|
395
|
+
| ... | ... | ... | ... | ... |
|
|
396
|
+
|
|
397
|
+
Overall: WARN after 2 fix iterations (N agents passed, N warned, N failed)
|
|
398
|
+
Total issues found: N | Auto-fixed: N | Human review required: N
|
|
399
|
+
|
|
400
|
+
## Dispatch Failures
|
|
401
|
+
|
|
402
|
+
| Agent | Attempts | Error |
|
|
403
|
+
|-------|----------|-------|
|
|
404
|
+
| arch-review | 2 | Tool result missing due to internal error |
|
|
405
|
+
|
|
406
|
+
Gate NOT written: 1 lens never ran and its retry also failed. Re-run
|
|
407
|
+
/code-review to retry the missing lens(es).
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
The **Dispatch Failures** section is present only when `dispatchFailures` is
|
|
411
|
+
non-empty (issue #1752) — omit it entirely on a clean run, but never omit it
|
|
412
|
+
when there is at least one entry, regardless of how the rest of the panel
|
|
413
|
+
scored.
|
|
414
|
+
|
|
415
|
+
After the summary, render remaining issues (those not auto-fixed — no
|
|
416
|
+
confidence, auto-fix failed, or suggestion-only) with
|
|
417
|
+
`scripts/render_tiered_findings.py` (#2170) against this round's aggregated
|
|
418
|
+
finding list — the same in-memory list already assembled for the `--json`
|
|
419
|
+
branch and for step 8, no re-dispatch, no I/O beyond that list. By default
|
|
420
|
+
this renders **Tier-1 only**: one line per finding (file, line, agent,
|
|
421
|
+
severity/confidence, first sentence of the message, finding-id), followed by
|
|
422
|
+
a trailing expansion hint. This is the canonical example for this template,
|
|
423
|
+
superseding the old full-message-per-issue listing:
|
|
424
|
+
|
|
425
|
+
```text
|
|
426
|
+
src/db/query.ts:42 [security-review] error/high — SQL injection via unescaped input. (security-review:src/db/query.ts:42:error)
|
|
427
|
+
src/api/handler.ts:15 [domain-review] warning/none — Abstraction leak in handler. (domain-review:src/api/handler.ts:15:warning)
|
|
428
|
+
Expand a finding with --expand <finding-id>, or --expand all for every finding.
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
`--expand <finding-id>|all` (a `/code-review` flag — see Parse Arguments and
|
|
432
|
+
step 7 in `skills/code-review/SKILL.md`, issue #2170 Step 3.2) additionally
|
|
433
|
+
renders the matching finding's (or, with `all`, every finding's) **Tier-2**
|
|
434
|
+
block — the full message and suggested fix — appended after the Tier-1
|
|
435
|
+
report above:
|
|
436
|
+
|
|
437
|
+
```text
|
|
438
|
+
=== security-review:src/db/query.ts:42:error ===
|
|
439
|
+
SQL injection via unescaped input. User-controlled `id` is concatenated
|
|
440
|
+
directly into the query string without parameterization.
|
|
441
|
+
Suggested fix: Use a parameterized query / prepared statement instead of
|
|
442
|
+
string concatenation.
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
A zero-finding round renders a clean-pass summary line instead
|
|
446
|
+
(`render_tiered_findings.CLEAN_PASS_SUMMARY`), with no per-finding lines and
|
|
447
|
+
no expansion hint — there is nothing to expand. Confidence and
|
|
448
|
+
suggestion-vs-error status are visible directly in each Tier-1 line's
|
|
449
|
+
`severity/confidence` field (e.g. `warning/none`, `suggestion/medium`); the
|
|
450
|
+
old separate `[confidence: none]`/`[suggestion]` bracket tags are retired
|
|
451
|
+
along with the full-message listing they annotated. `[auto-fix failed]` is
|
|
452
|
+
not carried into this rendering — it is a step 6a fix-loop runtime outcome,
|
|
453
|
+
not a property of the finding itself — and remains visible in the step
|
|
454
|
+
6a-iv iteration log above when the loop did not converge. Append the
|
|
455
|
+
iteration table above.
|
|
456
|
+
|
|
457
|
+
`--json` (step 7's other branch) and `./corrections/*.json` (step 8) are
|
|
458
|
+
unaffected by this rendering path — both already read/write the full
|
|
459
|
+
finding objects independently of `render_tiered_findings.py`, which is
|
|
460
|
+
prose-path only, and neither branch is touched by it. `--expand` is
|
|
461
|
+
therefore a no-op under `--json` (nothing there ever calls this script); see
|
|
462
|
+
`skills/code-review/SKILL.md` step 7 for the exact non-interference
|
|
463
|
+
statement.
|
|
464
|
+
|
|
465
|
+
## Override audit log entry (step 2, `--force` path)
|
|
466
|
+
|
|
467
|
+
Append to `.claude/metrics/override-audit.jsonl` (create if missing):
|
|
468
|
+
|
|
469
|
+
```json
|
|
470
|
+
{
|
|
471
|
+
"timestamp": "<ISO 8601>",
|
|
472
|
+
"branch": "<current branch>",
|
|
473
|
+
"triggeredBy": "--force",
|
|
474
|
+
"reason": "<value of --reason>",
|
|
475
|
+
"targetFiles": ["<file list>"],
|
|
476
|
+
"gatesSkipped": ["lint", "type-check", "secret-scan", "semgrep", "pipeline-red"]
|
|
477
|
+
}
|
|
478
|
+
```
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Decide whether a /code-review run should engage sliced mode, and at what cap.
|
|
3
|
+
|
|
4
|
+
Pure policy — no filesystem, no globals. ``should_slice`` encodes the flag /
|
|
5
|
+
scope / threshold precedence the plan's Slice 1 Gherkin specifies;
|
|
6
|
+
``check_slice_ceiling`` is the advisory guard for extreme-scale repos. Kept in
|
|
7
|
+
its own module (not ``partition.py``) so activation *policy* can change without
|
|
8
|
+
touching the partitioning *algorithm*.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from __future__ import annotations
|
|
12
|
+
|
|
13
|
+
# Default per-slice file cap when sliced mode auto-engages (operator can
|
|
14
|
+
# override with --slice N).
|
|
15
|
+
DEFAULT_CAP = 50
|
|
16
|
+
|
|
17
|
+
# A full-repo review with more than this many files auto-engages sliced mode.
|
|
18
|
+
# Mirrors the existing ">500" scope-validation tier in code-review/SKILL.md.
|
|
19
|
+
LARGE_REPO_THRESHOLD = 500
|
|
20
|
+
|
|
21
|
+
# Above this many slices the run warns and suggests a larger cap. Advisory
|
|
22
|
+
# only — it never refuses (see the plan's Risks section).
|
|
23
|
+
SLICE_COUNT_CEILING = 200
|
|
24
|
+
|
|
25
|
+
# The one scope kind that auto-engages. --path / --since / auto-scoped
|
|
26
|
+
# uncommitted changes are never auto-sliced.
|
|
27
|
+
FULL_REPO = "full-repo"
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def _validate_cap(value: object) -> int:
|
|
31
|
+
"""Return ``value`` as a positive int cap, or raise ValueError naming it."""
|
|
32
|
+
if isinstance(value, bool) or not isinstance(value, int) or value < 1:
|
|
33
|
+
raise ValueError(
|
|
34
|
+
f"--slice must be a positive integer number of files per slice, "
|
|
35
|
+
f"got {value!r}"
|
|
36
|
+
)
|
|
37
|
+
return value
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def should_slice(
|
|
41
|
+
scope_kind: str,
|
|
42
|
+
file_count: int,
|
|
43
|
+
*,
|
|
44
|
+
threshold: int = LARGE_REPO_THRESHOLD,
|
|
45
|
+
slice_flag: int | None = None,
|
|
46
|
+
no_slice_flag: bool = False,
|
|
47
|
+
default_cap: int = DEFAULT_CAP,
|
|
48
|
+
) -> tuple[bool, int | None]:
|
|
49
|
+
"""Return ``(engage_sliced_mode, effective_cap)``.
|
|
50
|
+
|
|
51
|
+
Precedence (highest first):
|
|
52
|
+
|
|
53
|
+
1. ``--no-slice`` always wins — never slice (returns ``(False, None)``).
|
|
54
|
+
2. ``--slice N`` always slices with cap ``N`` at any size; ``N`` is
|
|
55
|
+
validated as a positive integer (raises ``ValueError`` otherwise).
|
|
56
|
+
3. Auto-engage only when ``scope_kind`` is full-repo **and**
|
|
57
|
+
``file_count`` is strictly greater than ``threshold``. Exactly at the
|
|
58
|
+
threshold does not engage.
|
|
59
|
+
4. Otherwise do not slice.
|
|
60
|
+
"""
|
|
61
|
+
if no_slice_flag:
|
|
62
|
+
return (False, None)
|
|
63
|
+
|
|
64
|
+
if slice_flag is not None:
|
|
65
|
+
return (True, _validate_cap(slice_flag))
|
|
66
|
+
|
|
67
|
+
if scope_kind == FULL_REPO and file_count > threshold:
|
|
68
|
+
return (True, default_cap)
|
|
69
|
+
|
|
70
|
+
return (False, None)
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def check_slice_ceiling(
|
|
74
|
+
slice_count: int, ceiling: int = SLICE_COUNT_CEILING
|
|
75
|
+
) -> str | None:
|
|
76
|
+
"""Return an advisory warning when ``slice_count`` exceeds ``ceiling``.
|
|
77
|
+
|
|
78
|
+
Advisory only — the caller reports it and proceeds; it never blocks. Returns
|
|
79
|
+
``None`` when the count is at or below the ceiling.
|
|
80
|
+
"""
|
|
81
|
+
if slice_count > ceiling:
|
|
82
|
+
return (
|
|
83
|
+
f"Slice count is very high ({slice_count} slices). Consider a larger "
|
|
84
|
+
f"--slice cap to reduce the number of agent panels and the run's cost."
|
|
85
|
+
)
|
|
86
|
+
return None
|