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,116 @@
|
|
|
1
|
+
# Dependency-Breaking Techniques
|
|
2
|
+
|
|
3
|
+
Reference file for the `legacy-code` skill, the `test-design-advisor` skill, and the `test-smell-review` agent. When code can't be placed in a test harness, you need a **seam** — a place to substitute a collaborator or behavior without rewriting the code. This is the full catalog of behavior-preserving moves that *create* such a seam, so you can get legacy code under test before changing it.
|
|
4
|
+
|
|
5
|
+
Source: Michael Feathers, *Working Effectively with Legacy Code* (2005), Ch. 25 *Dependency-Breaking Techniques* (plus the Sprout/Wrap moves from Ch. 6). Language-agnostic; some techniques are specific to a language family and are marked.
|
|
6
|
+
|
|
7
|
+
Core principle: **break the smallest dependency that gets the code under test, and preserve behavior while doing it.** Every break is temporary scaffolding — once tests exist, refactor toward a real design (constructor injection, ports). Prefer the lowest-risk technique that works; reach for `Extract Method` first when nothing else presents a seam.
|
|
8
|
+
|
|
9
|
+
See `legacy-code` (the procedure: Legacy Code Change Algorithm, seam types, characterization tests), `legacy-test-strategy.md` (where to test — effect reasoning, pinch points), and `testability-patterns.md` (the *target* design these scaffold toward).
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## How to choose
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
What is blocking the test?
|
|
17
|
+
├─ A collaborator created INSIDE the class/method
|
|
18
|
+
│ ├─ created in the constructor → Parameterize Constructor / Supersede Instance Variable
|
|
19
|
+
│ ├─ created in a method → Parameterize Method / Extract and Override Factory Method
|
|
20
|
+
│ └─ obtained via a call → Extract and Override Call / Extract and Override Getter
|
|
21
|
+
│
|
|
22
|
+
├─ A concrete TYPE you can't substitute
|
|
23
|
+
│ └─ Extract Interface / Extract Implementer, then Subclass and Override Method
|
|
24
|
+
│
|
|
25
|
+
├─ A GLOBAL / singleton / static
|
|
26
|
+
│ └─ Encapsulate Global References · Replace Global Reference with Getter ·
|
|
27
|
+
│ Introduce Static Setter · Introduce Instance Delegator
|
|
28
|
+
│
|
|
29
|
+
├─ The class is too big / method too long to instantiate or run
|
|
30
|
+
│ └─ Sprout Method/Class · Wrap Method/Class · Break Out Method Object · Expose Static Method
|
|
31
|
+
│
|
|
32
|
+
├─ A parameter you can't construct or sense through
|
|
33
|
+
│ └─ Adapt Parameter · Primitivize Parameter · Pull Up Feature · Push Down Dependency
|
|
34
|
+
│
|
|
35
|
+
└─ Procedural / compiled / interpreted language with few OO seams
|
|
36
|
+
└─ Link Substitution · Replace Function with Function Pointer ·
|
|
37
|
+
Definition Completion · Template Redefinition · Text Redefinition
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## The catalog
|
|
43
|
+
|
|
44
|
+
### Add behavior without touching the untested code (Ch. 6)
|
|
45
|
+
|
|
46
|
+
| Technique | What it does | Seam | Risk |
|
|
47
|
+
|-----------|-------------|------|------|
|
|
48
|
+
| **Sprout Method** | Put new behavior in a new method, call it from the existing one | object | low |
|
|
49
|
+
| **Sprout Class** | Put new behavior (needing its own state/logic) in a new class, call into it | object | low–med |
|
|
50
|
+
| **Wrap Method** | Rename the original, add a new method that calls it plus the new behavior | object | low |
|
|
51
|
+
| **Wrap Class** | A new class (decorator) wraps the original; callers see the new behavior transparently | object | medium |
|
|
52
|
+
|
|
53
|
+
### Break a created/obtained collaborator
|
|
54
|
+
|
|
55
|
+
| Technique | What it does | Seam | Risk |
|
|
56
|
+
|-----------|-------------|------|------|
|
|
57
|
+
| **Parameterize Constructor** | Move a constructor-created dependency to a constructor parameter | object | low |
|
|
58
|
+
| **Parameterize Method** | Pass in an object a method creates internally, rather than `new`-ing it | object | low |
|
|
59
|
+
| **Extract and Override Call** | Move a problem call into its own method, override it in a test subclass | object | low |
|
|
60
|
+
| **Extract and Override Factory Method** | Move `new` out of a constructor into an overridable factory method | object | medium |
|
|
61
|
+
| **Extract and Override Getter** | Serve a dependency through a getter, override it to return a fake (C++ where factory-method override is unsafe) | object | medium |
|
|
62
|
+
| **Supersede Instance Variable** | Add a setter to replace an instance variable built in the constructor (when override isn't viable) | object | medium |
|
|
63
|
+
|
|
64
|
+
### Substitute a type
|
|
65
|
+
|
|
66
|
+
| Technique | What it does | Seam | Risk |
|
|
67
|
+
|-----------|-------------|------|------|
|
|
68
|
+
| **Extract Interface** | Pull an interface off a concrete class so a fake can implement it. The safest OO break — the compiler catches missteps | object | low |
|
|
69
|
+
| **Extract Implementer** | The inverse rename: keep the interface name, rename the class to the implementer | object | low |
|
|
70
|
+
| **Subclass and Override Method** | Subclass the real class in the test and override the seam method. The core OO technique — many others are variations | object | medium |
|
|
71
|
+
|
|
72
|
+
### Tame globals, singletons, and statics
|
|
73
|
+
|
|
74
|
+
| Technique | What it does | Seam | Risk |
|
|
75
|
+
|-----------|-------------|------|------|
|
|
76
|
+
| **Encapsulate Global References** | Gather references to a global behind a class you can fake or relink | object/link | medium |
|
|
77
|
+
| **Replace Global Reference with Getter** | Read a global through an overridable getter instead of directly | object | low |
|
|
78
|
+
| **Introduce Static Setter** | Add a setter so a singleton's instance can be replaced in tests | object | medium |
|
|
79
|
+
| **Introduce Instance Delegator** | Add instance methods that delegate to static ones, so callers can be given a fake | object | low |
|
|
80
|
+
| **Expose Static Method** | Promote logic that uses no instance state to a static method you can test without instantiating | — | low |
|
|
81
|
+
|
|
82
|
+
### Work around hard parameters and big methods
|
|
83
|
+
|
|
84
|
+
| Technique | What it does | Seam | Risk |
|
|
85
|
+
|-----------|-------------|------|------|
|
|
86
|
+
| **Adapt Parameter** | Wrap a hard-to-fake parameter type behind a narrow interface you control | object | medium |
|
|
87
|
+
| **Primitivize Parameter** | Add a free function that does the work against primitive data, called by a thin method — a temporary step toward a real test | object | medium |
|
|
88
|
+
| **Break Out Method Object** | Move a long method into its own class whose fields are the locals/params, so it can be instantiated and tested | object | medium |
|
|
89
|
+
| **Pull Up Feature** | Pull the cluster you need to test into an abstract superclass, away from the problem dependencies | object | medium |
|
|
90
|
+
| **Push Down Dependency** | Push the problem dependencies down into a new subclass, leaving a testable abstract parent | object | medium |
|
|
91
|
+
|
|
92
|
+
### Non-OO / compiled / interpreted seams
|
|
93
|
+
|
|
94
|
+
| Technique | What it does | Seam | Risk |
|
|
95
|
+
|-----------|-------------|------|------|
|
|
96
|
+
| **Link Substitution** | Link the test against an alternative implementation of a library/object | link | medium |
|
|
97
|
+
| **Replace Function with Function Pointer** | Indirect a function call through a pointer you can repoint in tests (C) | link | medium |
|
|
98
|
+
| **Definition Completion** | Provide a test-only definition for a header-declared function/class (C/C++) | preprocessing | high |
|
|
99
|
+
| **Template Redefinition** | Substitute a dependency's type via a template parameter at compile time (C++) | preprocessing | medium |
|
|
100
|
+
| **Text Redefinition** | Redefine a method's body at run time in a dynamic language (Ruby, etc.) | preprocessing | medium |
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Most common in practice
|
|
105
|
+
|
|
106
|
+
The legacy-code skill keeps a shortlist for the day-to-day cases; the rest of the catalog is here when those don't fit. The everyday set: **Extract Interface**, **Parameterize Constructor**, **Subclass and Override Method**, **Extract and Override Call/Factory Method**, **Sprout/Wrap Method**, and **Adapt Parameter**. Reach into the long tail (globals, non-OO, parameter, and big-method groups) when the everyday break doesn't present a seam.
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## How this connects to the rest of the toolkit
|
|
111
|
+
|
|
112
|
+
- **`legacy-code` skill** — owns the procedure (Change Algorithm, seam types, characterization tests); this file is its technique reference.
|
|
113
|
+
- **`legacy-test-strategy.md`** — *where* to place the test (effect reasoning, interception/pinch points) once a seam exists.
|
|
114
|
+
- **`testability-patterns.md`** — the production-code *target* design (constructor injection, interface extraction, Humble Object) these temporary breaks scaffold toward; a break is a means, the seam family there is the end.
|
|
115
|
+
- **`test-doubles.md`** — once a seam exists, the double that fills it (Stub/Spy/Mock/Fake), including Test-Specific Subclass (the double form of Subclass and Override Method).
|
|
116
|
+
- **`test-automation-principles.md`** — *Design for Testability* and *Don't Modify the SUT*: override only the seam, never behavior the test is verifying.
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Deployment Pipeline Anatomy
|
|
2
|
+
|
|
3
|
+
Reference for the structure of a deployment pipeline and the configuration and
|
|
4
|
+
environment discipline it depends on. Source: *Continuous Delivery* (Humble &
|
|
5
|
+
Farley) Ch.5 (anatomy), Ch.2 (configuration management), Ch.11 (infrastructure
|
|
6
|
+
and environments). Advisory — the plugin designs and assesses pipelines; the
|
|
7
|
+
test-gate mechanics live in `cd-test-architecture.md`.
|
|
8
|
+
|
|
9
|
+
A deployment pipeline is the automated manifestation of the process for getting
|
|
10
|
+
software from version control to the user. Each change enters once and is either
|
|
11
|
+
proven releasable or rejected.
|
|
12
|
+
|
|
13
|
+
## The stages
|
|
14
|
+
|
|
15
|
+
A change flows through ordered stages; success in one triggers the next.
|
|
16
|
+
|
|
17
|
+
| Stage | Purpose | Gate |
|
|
18
|
+
|-------|---------|------|
|
|
19
|
+
| **Commit** | Compile, unit + component + contract tests, static analysis. Fast (minutes). | Blocks merge — see `cd-test-architecture.md` |
|
|
20
|
+
| **Acceptance** | Automated acceptance tests against a production-like deploy of the built artifact | Behavior matches the executable spec |
|
|
21
|
+
| **Capacity / nonfunctional** | Performance, load, and resilience tests as a stage, not an afterthought | Meets the agreed budgets |
|
|
22
|
+
| **Manual / UAT** | Exploratory testing, demos, showcases — on demand | Human judgment |
|
|
23
|
+
| **Release** | Push-button deploy of the *same* artifact to production | Approved; smoke test green |
|
|
24
|
+
|
|
25
|
+
## The pipeline principles
|
|
26
|
+
|
|
27
|
+
- **Build your binaries only once.** Compile and package in the commit stage,
|
|
28
|
+
store the artifact in a repository (not in version control), and **promote the
|
|
29
|
+
same binary** through every stage. Never rebuild from source per environment —
|
|
30
|
+
a rebuilt binary is a different binary.
|
|
31
|
+
- **Binaries are environment-agnostic.** Separate code (constant across
|
|
32
|
+
environments) from configuration (varies per environment). A binary that only
|
|
33
|
+
runs in one environment is a defect.
|
|
34
|
+
- **Deploy the same way to every environment.** Dev, test, and production use the
|
|
35
|
+
identical automated deploy process, so it is rehearsed hundreds of times before
|
|
36
|
+
a production release.
|
|
37
|
+
- **Smoke-test every deployment.** An automated post-deploy check confirms the app
|
|
38
|
+
and its dependencies (DB, message bus, external services) are up. After unit
|
|
39
|
+
tests, this is the most valuable test you have.
|
|
40
|
+
- **Deploy into a copy of production.** Test/CI environments match production in
|
|
41
|
+
infrastructure, OS config/patches, app stack, and relevant data state.
|
|
42
|
+
- **Each change propagates instantly.** The first stage triggers on every
|
|
43
|
+
check-in; each stage triggers the next on success — no nightly batching. When
|
|
44
|
+
busy, build off the most recent set of changes.
|
|
45
|
+
- **Cycle time is the primary global metric** (commit → releasable). Apply the
|
|
46
|
+
Theory of Constraints: find the bottleneck stage and elevate it. Coverage,
|
|
47
|
+
defect counts, and build duration are secondary diagnostics. Radiate them.
|
|
48
|
+
- **The pipeline is part of the product.** Build it incrementally; version,
|
|
49
|
+
test, and refactor it with the same care as the application.
|
|
50
|
+
|
|
51
|
+
## Configuration management (Ch.2)
|
|
52
|
+
|
|
53
|
+
| Practice | What it means |
|
|
54
|
+
|----------|---------------|
|
|
55
|
+
| **One version-controlled source per environment** | Deploy-time config lives in a single source (properties files / directory service / database), selected per environment by hostname or env var. One source for all apps in all environments. |
|
|
56
|
+
| **No config in the binary** | The same artifact reads its config from the environment; no per-environment builds. |
|
|
57
|
+
| **Secrets are not in version control** | Inject secrets at deploy/runtime (a secret store / vault / sealed env); never bake credentials into the image or commit them. (See `docker-image-audit` for image-level checks.) |
|
|
58
|
+
| **Config is testable** | A wrong or missing config value should fail fast at startup (a smoke test), not silently. |
|
|
59
|
+
|
|
60
|
+
## Infrastructure and environments (Ch.11)
|
|
61
|
+
|
|
62
|
+
- **Specify desired state as version-controlled configuration** — OS install
|
|
63
|
+
definitions, middleware, network, data-center automation. Provisioning is
|
|
64
|
+
automated so any environment can be re-created from scratch to a known-good
|
|
65
|
+
state in a predictable time.
|
|
66
|
+
- **All environments are production-like** and managed with the *identical*
|
|
67
|
+
techniques used for production.
|
|
68
|
+
- **Know the actual state** through instrumentation and monitoring; infrastructure
|
|
69
|
+
should self-correct toward the desired state.
|
|
70
|
+
- **Lock down production.** Only the pipeline changes it — giving a complete audit
|
|
71
|
+
trail of who changed what, when. No manual changes on production.
|
|
72
|
+
|
|
73
|
+
## Scope note (advisory boundary)
|
|
74
|
+
|
|
75
|
+
This plugin **designs and assesses** pipelines and **plans** changes to fit them.
|
|
76
|
+
It does not author IaC stacks (Terraform/Helm), operate artifact repositories, or
|
|
77
|
+
execute deployments. Recommend those; don't simulate them.
|
|
78
|
+
|
|
79
|
+
## How this connects to the rest of the toolkit
|
|
80
|
+
|
|
81
|
+
- **`cd-test-architecture.md`** — the commit-stage gate's test types and
|
|
82
|
+
determinism rules; this file places that gate inside the whole pipeline.
|
|
83
|
+
- **`release-strategies.md`** — what the release stage actually does (blue-green,
|
|
84
|
+
canary, rollback, decouple deploy from release).
|
|
85
|
+
- **`cd-maturity-model.md`** — cycle time, traceability (build-once + hash), and
|
|
86
|
+
production lock-down are scored there as you move up the model.
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# Design Smells
|
|
2
|
+
|
|
3
|
+
Reference file for structure-review and naming-review agents. Use the smell → pattern table to make findings actionable: every finding should name the smell, quote the code, name the remediation pattern, and include a refactor sketch.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Design Smells → Pattern Mapping
|
|
8
|
+
|
|
9
|
+
| Smell | Signature in code | Remediation pattern |
|
|
10
|
+
|---|---|---|
|
|
11
|
+
| **Switch on type discriminator** | `switch (type) { case A: ...; case B: ...; }` or `if (x is A) ... else if (x is B) ...` repeated across multiple methods | **Replace Conditional with Polymorphism** → Strategy (behavior-driven) or State (lifecycle-driven) |
|
|
12
|
+
| **If/else cascade on type/state** | Same shape as above in `if`/`elif` form | Same: Replace Conditional with Polymorphism |
|
|
13
|
+
| **Long parameter list** | Function with 5+ parameters; reader can't recall positional meanings | **Introduce Parameter Object** — bundle related params into a named request/options type |
|
|
14
|
+
| **Data clumps** | Same group of 3+ parameters or fields travels together everywhere (`firstName, lastName, dob`) | **Extract Class / Value Object** — the clump is an unnamed concept |
|
|
15
|
+
| **Primitive obsession** | Business concepts modeled as raw strings/numbers (`string customerId`, `int amount`) | **Value Object** — typed wrapper with validation and equality |
|
|
16
|
+
| **Magic number / magic string** | Literals like `if (retries > 3)` or `if (status == "PND")` | **Replace Magic Literal** — extract named constant or enum; promote to Value Object when it carries business meaning |
|
|
17
|
+
| **Flag argument** | `process(true, false)` — boolean params that switch method behavior | **Split Method** — one method per branch; the flag is hiding two operations |
|
|
18
|
+
| **Long method** | Method >20 lines, often readable only with sub-section comments | **Extract Method** — each sub-section comment becomes a named method call |
|
|
19
|
+
| **Feature envy** | Method on class A reaches deeply into class B's data (`b.x.y.z`) | **Move Method** — relocate to class B where the data lives |
|
|
20
|
+
| **Shotgun surgery** | One conceptual change requires edits in 5+ unrelated classes | **Move Method / Move Field** — consolidate responsibility into one class |
|
|
21
|
+
| **Divergent change** | One class changes for many different reasons (auth, persistence, formatting) | **Extract Class** along the change axes — one class per reason-to-change |
|
|
22
|
+
| **Refused bequest** | Subclass overrides many parent methods to no-op or throw "not supported" | **Replace Inheritance with Composition** — the subclass needs *some* of the parent API; expose those via a member |
|
|
23
|
+
| **Speculative generality** | Abstract base classes or interfaces with only one implementation and no near-term plan for a second | **Inline Class** — collapse the abstraction; re-introduce when a second implementation appears |
|
|
24
|
+
| **Megaclass** | Class with 30+ public methods, multiple responsibilities, `*Manager`/`*Service`/`*Helper` suffix | **Extract Class** along responsibility lines; apply SRP |
|
|
25
|
+
| **Reinvented built-in / helper** | A hand-written loop or expression recomputes a standard-library operation (min, max, sum, copy, reverse, clamp) or duplicates a named helper that already exists in the module | **Use the platform** — replace with the built-in / existing helper so the algorithm reads top-down (see cheat-sheet below) |
|
|
26
|
+
| **Open-coded idiom** | The same non-trivial boolean or arithmetic expression (e.g. `Math.abs(x - y) > tol`) appears 3+ times inline instead of behind a named predicate | **Extract Method** — name the idiom (`withinTolerance`) so each call site states intent, not mechanics |
|
|
27
|
+
|
|
28
|
+
## Reinvented Built-in Cheat-Sheet
|
|
29
|
+
|
|
30
|
+
The "use the platform" smell is **language-agnostic** — recognize the *concept*
|
|
31
|
+
(a hand-rolled standard operation), then map it to the project's language. Flag
|
|
32
|
+
only as a `suggestion`; this is a readability call, not a correctness bug.
|
|
33
|
+
|
|
34
|
+
| Language | Hand-rolled → built-in (examples) |
|
|
35
|
+
|---|---|
|
|
36
|
+
| JS/TS | min/max scan → `Math.min(...xs)` / `Math.max(...xs)`; accumulator loop → `reduce`; `0 - x` → unary `-x`; copy loop → spread / `slice` |
|
|
37
|
+
| Python | min/max scan → `min()` / `max()`; accumulator loop → `sum()`; reimplemented `itertools` / `collections` helper |
|
|
38
|
+
| Java | loop → `Stream.min/max`, `Collectors`, `Math.max` |
|
|
39
|
+
| C# | loop → LINQ `Min` / `Max` / `Sum` / `Aggregate` |
|
|
40
|
+
| Go | loop → `min` / `max` **built-ins (Go 1.21+ only)**, `slices` / `maps` packages |
|
|
41
|
+
|
|
42
|
+
### What NOT to flag (reinvented built-in)
|
|
43
|
+
|
|
44
|
+
- A manual min/max (or similar) loop in a language/version that lacks the
|
|
45
|
+
built-in — e.g. **Go before 1.21** has no `min`/`max`; the loop is idiomatic.
|
|
46
|
+
Confirm the built-in exists for the project's language *and version* first.
|
|
47
|
+
- A hand-rolled form with a comment or context marking it a deliberate hot-path
|
|
48
|
+
optimization (avoiding intermediate allocation, the spread argument-count
|
|
49
|
+
limit, etc.) — confidence `none`, do not flag.
|
|
50
|
+
- C or other environments with no standard library for the operation.
|
|
51
|
+
|
|
52
|
+
## What NOT to Flag
|
|
53
|
+
|
|
54
|
+
- A `switch` over a closed enumeration where adding a case is rare (e.g., `DayOfWeek`, `HttpMethod`) — polymorphism adds ceremony without benefit
|
|
55
|
+
- A method whose extraction would only add a name without reducing cognitive load
|
|
56
|
+
- A 6-parameter constructor in a DI-injected class where all 6 are collaborators (not data clumps) — Parameter Object applies to *data* clumps, not dependency lists
|
|
57
|
+
- Speculative generality concerns on code that *will* gain a second adapter this sprint (per the team's roadmap)
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Finding Format
|
|
62
|
+
|
|
63
|
+
When surfacing a design smell as a finding:
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
Severity: error (blocks testing or hides a bug) | warning (impedes change) | suggestion (stylistic)
|
|
67
|
+
Smell: <smell name from table above>
|
|
68
|
+
File: path/to/file.ext:LINE
|
|
69
|
+
Code: <2-5 line quote of actual code>
|
|
70
|
+
Pattern: <recommended pattern>
|
|
71
|
+
Fix: <refactor sketch — 1-3 sentences on what the change looks like>
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## Naming Offender Catalog
|
|
77
|
+
|
|
78
|
+
### Abbreviations that obscure intent
|
|
79
|
+
|
|
80
|
+
| Offender | Fix | Notes |
|
|
81
|
+
|---|---|---|
|
|
82
|
+
| `getEffDate` | `getEffectiveDate` | `Eff` is an internal abbreviation |
|
|
83
|
+
| `calcAmt` | `calculateAmount` | Two abbreviations + missing what amount |
|
|
84
|
+
| `OrderMgr` | `OrderRepository` or `OrderShippingService` | `Mgr` is vacuous — replace with the actual role |
|
|
85
|
+
| `tmpResult` | `intermediateTotal` | `tmp` reveals nothing about what it holds |
|
|
86
|
+
| `proc` / `Proc` | `processor` / `PaymentProcessor` | Spell out domain roles |
|
|
87
|
+
| `m_orderId` / `g_orderId` | `_orderId` (private) / `orderId` (local) | Hungarian prefix residue |
|
|
88
|
+
|
|
89
|
+
### Generic verbs that hide intent
|
|
90
|
+
|
|
91
|
+
| Offender | Fix | Reason |
|
|
92
|
+
|---|---|---|
|
|
93
|
+
| `processOrder` | `submitOrder` / `confirmOrder` / `cancelOrder` | "Process" hides which lifecycle step |
|
|
94
|
+
| `handleException` | `logAndSwallow` / `rethrowAsFault` / `retryWithBackoff` | "Handle" hides the actual policy |
|
|
95
|
+
| `doWork` | (the verb that names the work) | "Do" reveals nothing |
|
|
96
|
+
| `manage*` (`manageCart`, `manageInventory`) | Split into named operations: `addItem`, `removeItem` | "Manage" at class level is a smell; split into named methods |
|
|
97
|
+
| `update*` without qualifier | `markAsShipped` / `recordPayment` | "Update" hides which fields change and why |
|
|
98
|
+
| `execute` (outside Command/Strategy pattern) | The specific action | OK on `ICommand.execute()`; suspect elsewhere |
|
|
99
|
+
|
|
100
|
+
### Misleading names
|
|
101
|
+
|
|
102
|
+
| Offender | Why it misleads | Fix |
|
|
103
|
+
|---|---|---|
|
|
104
|
+
| `getCustomerOrThrow` returning null | Name says throw, code says null | Use `tryGetCustomer(out)` or actually throw |
|
|
105
|
+
| `isValid` that mutates state | "is" implies pure query | Split: `validate()` (mutates) + `isValid` (pure) |
|
|
106
|
+
| `save()` that may no-op | Name implies always-persists | `persistIfDirty()` or `flushPendingChanges()` |
|
|
107
|
+
| `cancel*` that emits an event but doesn't cancel state | Misnamed | `requestCancellation()` |
|
|
108
|
+
|
|
109
|
+
### Type-encoded names
|
|
110
|
+
|
|
111
|
+
| Offender | Fix |
|
|
112
|
+
|---|---|
|
|
113
|
+
| `stringList`, `intCount`, `boolIsActive` | `names` / `list`, `count`, `isActive` |
|
|
114
|
+
| `ICustomerInterface`, `OrderClass` | `ICustomer`, `Order` |
|
|
115
|
+
|
|
116
|
+
### What NOT to flag
|
|
117
|
+
|
|
118
|
+
- Loop counters: `i`, `j`, `k` are conventional
|
|
119
|
+
- Lambda parameters with single use: `x => x.id` doesn't need `customer => customer.id`
|
|
120
|
+
- Industry-standard acronyms: `HttpClient`, `XmlReader`, `JsonSerializer`, `SqlConnection`, `JWT`
|
|
121
|
+
- Domain-standard acronyms defined in the project's glossary (`.plans/domain/`)
|
|
122
|
+
- Test method names following `MethodName_Scenario_ExpectedResult` convention
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Directory Enumeration
|
|
2
|
+
|
|
3
|
+
## The rule
|
|
4
|
+
|
|
5
|
+
**Never `Read` a directory path to check whether something exists or to see
|
|
6
|
+
what it contains.** `Read` expects a file; pointed at a directory it throws
|
|
7
|
+
`EISDIR`. This hazard fires whenever an instruction says *what* to detect
|
|
8
|
+
("no plan files exist in `plans/`", "no spec artifacts found", "no `agents/`
|
|
9
|
+
directory") without saying *how* — the model reaches for the nearest tool
|
|
10
|
+
(`Read`) instead of the correct one.
|
|
11
|
+
|
|
12
|
+
**Use `Glob` for existence checks and enumeration:**
|
|
13
|
+
|
|
14
|
+
- Existence of a known directory: `Glob(".claude/**")`, `Glob("plans/**")`.
|
|
15
|
+
- Enumerating a directory's contents: `Glob("agents/*.md")`,
|
|
16
|
+
`Glob("docs/specs/**/*.md")`.
|
|
17
|
+
- Checking for one specific candidate file: a targeted `Read` of that exact
|
|
18
|
+
path is fine (e.g. `Read("docs/specs/foo/spec.md")`) — the hazard is only
|
|
19
|
+
`Read`-ing the *directory itself*, not a known filename inside it.
|
|
20
|
+
|
|
21
|
+
An empty `Glob` result means "not present" — no directory read is needed to
|
|
22
|
+
reach that conclusion.
|
|
23
|
+
|
|
24
|
+
## Why this is shared, not local
|
|
25
|
+
|
|
26
|
+
This same hazard has been independently discovered and locally patched three
|
|
27
|
+
times (agent-roster enumeration, `--path` target resolution, `## Skip`
|
|
28
|
+
existence probing) before this file existed. Citing this file from any
|
|
29
|
+
Skip/detection section that implies "check whether X exists" prevents a
|
|
30
|
+
fourth local fix.
|
|
31
|
+
|
|
32
|
+
## How this connects to the rest of the toolkit
|
|
33
|
+
|
|
34
|
+
Cited by `skills/code-review/SKILL.md` and by review-agent/skill Skip or
|
|
35
|
+
detection sections that probe for a directory's presence or contents
|
|
36
|
+
(`claude-setup-review`, `progress-guardian`, `spec-compliance-review`, the
|
|
37
|
+
`continue` skill) — add a citation here rather than re-explaining the
|
|
38
|
+
mechanism inline.
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# Domain Modeling Patterns
|
|
2
|
+
|
|
3
|
+
Reference file for the domain-review agent. Read this before starting
|
|
4
|
+
analysis to apply DDD assessment patterns.
|
|
5
|
+
|
|
6
|
+
## Exploration Patterns
|
|
7
|
+
|
|
8
|
+
Map the project structure before detecting issues.
|
|
9
|
+
|
|
10
|
+
### Entity / Model discovery
|
|
11
|
+
|
|
12
|
+
| Glob pattern | What it finds |
|
|
13
|
+
|--------------|---------------|
|
|
14
|
+
| `**/domain/**`, `**/entities/**`, `**/models/**`, `**/aggregates/**` | Domain layer |
|
|
15
|
+
| `**/services/**`, `**/application/**`, `**/usecases/**`, `**/handlers/**` | Application layer |
|
|
16
|
+
| `**/repositories/**`, `**/dal/**`, `**/persistence/**`, `**/infrastructure/**` | Data access layer |
|
|
17
|
+
| `**/dto/**`, `**/dtos/**`, `**/responses/**`, `**/contracts/**`, `**/api/**`, `**/viewmodels/**` | Transfer objects |
|
|
18
|
+
|
|
19
|
+
### ORM marker detection
|
|
20
|
+
|
|
21
|
+
| Language | Grep patterns |
|
|
22
|
+
|----------|---------------|
|
|
23
|
+
| JS/TS | `@Entity`, `@Table`, `@Column`, `@Document` |
|
|
24
|
+
| C# | `[Table]`, `[Key]`, `[Column]`, `DbContext`, `DbSet<` |
|
|
25
|
+
| Java | `@Entity`, `@Table`, `@MappedSuperclass`, `@Repository` |
|
|
26
|
+
|
|
27
|
+
### Boundary entry point detection
|
|
28
|
+
|
|
29
|
+
| Language | Grep patterns |
|
|
30
|
+
|----------|---------------|
|
|
31
|
+
| JS/TS | `express`, `fastify`, `Request, Response` |
|
|
32
|
+
| C# | `ControllerBase`, `[ApiController]`, `IActionResult` |
|
|
33
|
+
| Java | `@RestController`, `@Controller`, `@RequestMapping` |
|
|
34
|
+
|
|
35
|
+
### Application service detection
|
|
36
|
+
|
|
37
|
+
| Language | Grep patterns |
|
|
38
|
+
|----------|---------------|
|
|
39
|
+
| JS/TS | `@Injectable`, `@Service`, class names ending in `Service` |
|
|
40
|
+
| C# | Class names ending in `Service`, `Handler`, `UseCase` |
|
|
41
|
+
| Java | `@Service`, `@Component`, class names ending in `Service`, `Handler` |
|
|
42
|
+
|
|
43
|
+
If none of these patterns yield files, return skip.
|
|
44
|
+
|
|
45
|
+
## Anti-Pattern Recognition
|
|
46
|
+
|
|
47
|
+
### Business Logic Misplacement
|
|
48
|
+
|
|
49
|
+
Logic belongs in the domain layer. Flag when found in:
|
|
50
|
+
|
|
51
|
+
| Wrong location | Signal |
|
|
52
|
+
|---------------|--------|
|
|
53
|
+
| Controllers/routes | Discount calculations, validation rules, authorization logic in route handlers |
|
|
54
|
+
| Repositories/DAL | Business rules in SQL queries, computed columns, trigger-like logic |
|
|
55
|
+
| Application services | Rules that should be on an entity or domain service (application services orchestrate, they don't own rules) |
|
|
56
|
+
|
|
57
|
+
Exception: domain services legitimately own rules that span multiple entities.
|
|
58
|
+
|
|
59
|
+
### Anemic Domain Model
|
|
60
|
+
|
|
61
|
+
Entities that are pure data holders (only getters/setters) while services
|
|
62
|
+
contain all behavior. Signs:
|
|
63
|
+
|
|
64
|
+
- Entity has 10+ properties but 0 methods beyond accessors
|
|
65
|
+
- Service methods that take an entity, inspect its state, and return a decision
|
|
66
|
+
- External callers setting status fields directly instead of calling intention-revealing methods (`order.status = 'paid'` vs `order.markPaid()`)
|
|
67
|
+
|
|
68
|
+
### Abstraction Leaks
|
|
69
|
+
|
|
70
|
+
| Leak type | Signal |
|
|
71
|
+
|-----------|--------|
|
|
72
|
+
| ORM in domain | Domain objects with `@Column`, `[Table]`, persistence annotations |
|
|
73
|
+
| HTTP in domain | Domain objects importing `Request`, `Response`, HTTP status codes |
|
|
74
|
+
| Infrastructure in domain | Domain layer importing database clients, message queues, file I/O |
|
|
75
|
+
|
|
76
|
+
### Boundary Violations
|
|
77
|
+
|
|
78
|
+
| Violation | Signal |
|
|
79
|
+
|-----------|--------|
|
|
80
|
+
| Missing DTOs | Domain entities returned directly from API endpoints |
|
|
81
|
+
| Cross-context coupling | Direct imports between bounded contexts instead of events/shared kernel |
|
|
82
|
+
| Aggregate boundary bypass | Reaching into an aggregate's child entities directly |
|
|
83
|
+
|
|
84
|
+
### Implicit Concepts (missing Specification / Policy)
|
|
85
|
+
|
|
86
|
+
A named business rule hiding inside scattered conditionals. Surface it as a Specification or Policy object.
|
|
87
|
+
|
|
88
|
+
| Signal | What it implies |
|
|
89
|
+
|--------|-----------------|
|
|
90
|
+
| The same multi-clause boolean (`if a && b && !c`) duplicated in 2+ places | A domain rule with a name the experts already use — extract to a specification/policy object |
|
|
91
|
+
| A rule expressed as a comment (`// orders over $X to a new address need review`) but enforced ad hoc | The concept exists in language but not in the model |
|
|
92
|
+
| A boolean-returning method on a service that inspects another object's fields | Tell-don't-ask + a candidate specification owned by the domain |
|
|
93
|
+
|
|
94
|
+
Only flag duplication or comment-encoded rules you can point to. A single, local condition is not a missing specification.
|
|
95
|
+
|
|
96
|
+
### Construction Without Invariants (missing Factory)
|
|
97
|
+
|
|
98
|
+
| Signal | What it implies |
|
|
99
|
+
|--------|-----------------|
|
|
100
|
+
| Public constructor / object literal that lets a caller build an invalid aggregate (required field unset, two fields that must agree set independently) | Construction invariant is unenforced — a factory or a guarding constructor should make the object valid-on-creation |
|
|
101
|
+
| The same multi-step assembly of an aggregate repeated across call sites | Creation logic belongs in one factory, not copied into clients |
|
|
102
|
+
|
|
103
|
+
Do not flag simple objects that are valid by plain construction — a factory there is overhead.
|
|
104
|
+
|
|
105
|
+
### Supple Design Smells (domain model only)
|
|
106
|
+
|
|
107
|
+
Scope these to **domain entities, value objects, and domain services** — general purity/coupling elsewhere belongs to `js-fp-review` and `structure-review`, not here.
|
|
108
|
+
|
|
109
|
+
| Smell | Signal | Fix direction |
|
|
110
|
+
|-------|--------|---------------|
|
|
111
|
+
| Not intention-revealing | A domain method named for *how* not *what* (`recalc`, `doProcess`), or a boolean flag parameter that switches behavior (`price(true)`) | Rename to the domain verb; split the two behaviors |
|
|
112
|
+
| Side effect in a query | A method on a value object or entity that both mutates state and returns a value (violates command-query separation) | Separate the command from the query; value objects expose only side-effect-free operations |
|
|
113
|
+
| Mutable value object | A type used as a value (money, range, coordinate) with public setters or in-place mutation | Make it immutable; return new instances |
|
|
114
|
+
| Unenforced invariant | An entity/aggregate whose invariant is asserted by callers rather than guarded internally | Move the invariant into the type (constructor, factory, or guarded mutator) |
|
|
115
|
+
|
|
116
|
+
### Ubiquitous Language Drift
|
|
117
|
+
|
|
118
|
+
Flag only internal inconsistency observable in code:
|
|
119
|
+
|
|
120
|
+
- Same concept with different names across modules (`Order` / `Purchase` / `Transaction`)
|
|
121
|
+
- Generic names where domain terms exist (`process`, `handle`, `data`, `info`, `manager`)
|
|
122
|
+
|
|
123
|
+
Do not flag terminology as wrong based on assumed business language.
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# Evidence Bundle
|
|
2
|
+
|
|
3
|
+
A structured "what was checked, and what wasn't" statement carried by `/build`'s
|
|
4
|
+
final output and `/pr`'s PR body. Verification here is a stack of scoped
|
|
5
|
+
verifiers — unit suite, type check, lint, review agents, coverage delta,
|
|
6
|
+
runtime verification (sub-step 4.9), Farley score — not one boolean. A green checkmark alone
|
|
7
|
+
over-claims: it says checks passed but not what each one actually verified,
|
|
8
|
+
what it structurally cannot verify for this diff, which regions remain
|
|
9
|
+
untested, or what risk was consciously accepted. The bundle closes that gap.
|
|
10
|
+
|
|
11
|
+
**Reporting only — no new checks.** The bundle is assembled entirely from data
|
|
12
|
+
the pipeline already produces: quality-gate outputs, `.claude/metrics/review-value.jsonl`,
|
|
13
|
+
`metrics/verify-log.jsonl`, coverage baseline/delta files, and gate-bypass audit
|
|
14
|
+
lines already written to the build/PR output. Assembling it never re-runs a
|
|
15
|
+
check, never invokes a tool "just to build the bundle."
|
|
16
|
+
|
|
17
|
+
Reference form: `${CLAUDE_PLUGIN_ROOT}/knowledge/evidence-bundle.md`.
|
|
18
|
+
|
|
19
|
+
## The four fixed sections
|
|
20
|
+
|
|
21
|
+
Always present, in this order, with these exact headers. **Degradation rule**:
|
|
22
|
+
when a section has no data, it states why (e.g. "not measured — no coverage
|
|
23
|
+
tool detected") — it is never dropped. All four headers always appear even on
|
|
24
|
+
a run with nothing to report in one of them.
|
|
25
|
+
|
|
26
|
+
| Section | Content | Data source (already produced) |
|
|
27
|
+
|---|---|---|
|
|
28
|
+
| Checks run | One row per verifier: exact command executed + result summary | `/pr` Step 2 gate commands/output; `/build` Step 5 suite output, Step 6 review status, Step 7 Farley score |
|
|
29
|
+
| Scope notes | What the executed suite does NOT verify for this diff | Review agents dispatched vs. skipped; gate steps reported "not applicable"; `metrics/verify-log.jsonl` `skipped` reasons; absent tools (coverage, mutation) |
|
|
30
|
+
| Untested regions | Coverage-derived statement of what the diff leaves unexercised | `baseline-coverage.json` + `coverage-history.json` line/branch % and delta; diff-scoped uncovered files from a coverage report artifact when one exists; "not measured" when none exists |
|
|
31
|
+
| Residual risks | Consciously accepted risk, derived-first | Deferred/escalated findings (`.claude/metrics/review-value.jsonl`), gate-bypass audit lines, structural-review waivers, negative coverage-delta warnings; author-judged prose may be appended but never substitutes for the derived rows |
|
|
32
|
+
|
|
33
|
+
## Skeleton
|
|
34
|
+
|
|
35
|
+
```markdown
|
|
36
|
+
## Evidence Bundle
|
|
37
|
+
|
|
38
|
+
**Checks run**
|
|
39
|
+
- `<exact command>` — <result summary>
|
|
40
|
+
- `<exact command>` — <result summary>
|
|
41
|
+
(N checks total; showing top N — see full log at <pointer> if truncated)
|
|
42
|
+
|
|
43
|
+
**Scope notes**
|
|
44
|
+
- <what this suite does not cover for this diff, one line each>
|
|
45
|
+
|
|
46
|
+
**Untested regions**
|
|
47
|
+
- <line/branch % + delta, or diff-scoped uncovered files, or "not measured — <reason>">
|
|
48
|
+
|
|
49
|
+
**Residual risks**
|
|
50
|
+
- <deferred/escalated finding, waiver, or bypass line — or "None identified" only when every derived source is empty>
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Degradation examples
|
|
54
|
+
|
|
55
|
+
- No coverage tool detected:
|
|
56
|
+
`Untested regions: not measured — no coverage tool detected in this repo.`
|
|
57
|
+
paired with a matching Scope note: `Scope notes: coverage delta unavailable — no coverage baseline exists for this repo.`
|
|
58
|
+
- No deferred/escalated findings, no waivers, no bypass lines, no negative
|
|
59
|
+
coverage delta: `Residual risks: None identified — no deferred findings, waivers, or bypass lines this run.`
|
|
60
|
+
- Non-interactive bypass recorded during the run: fold the audit line in verbatim,
|
|
61
|
+
e.g. `Residual risks: Acceptance-criteria gate auto-passed with 1 flagged criterion (non-interactive) — no human gate.`
|
|
62
|
+
|
|
63
|
+
## Line budget
|
|
64
|
+
|
|
65
|
+
Target **under ~40 lines** in a PR body. When a section's data would exceed
|
|
66
|
+
that, collapse to counts plus a pointer to the full log rather than growing
|
|
67
|
+
unbounded — e.g. `12 checks run, 12 passed (full command log in build output above)`
|
|
68
|
+
instead of listing all 12 rows.
|
|
69
|
+
|
|
70
|
+
## Assembly is per-command, not handed off
|
|
71
|
+
|
|
72
|
+
`/build` assembles its bundle from its own run's Step 5/6/7 outputs at Step 8.
|
|
73
|
+
`/pr` assembles its bundle from its own Step 2 quality-gate results plus
|
|
74
|
+
on-disk pipeline data (metrics files, coverage files) at its own runtime —
|
|
75
|
+
never from a handoff file written by `/build`. Running `/pr` standalone (no
|
|
76
|
+
preceding `/build` in the session) still produces a complete bundle; sections
|
|
77
|
+
degrade per the rule above wherever the on-disk data doesn't cover a source
|
|
78
|
+
that only `/build`'s in-session steps would have (e.g. Farley score).
|
|
79
|
+
|
|
80
|
+
## Boundaries
|
|
81
|
+
|
|
82
|
+
- Does not persist to `.claude/metrics/` or `.claude/memory/` — every underlying datum already
|
|
83
|
+
persists in its own source file; a persisted bundle would duplicate that
|
|
84
|
+
audit trail.
|
|
85
|
+
- `/code-review`'s own report keeps its existing contract
|
|
86
|
+
(`knowledge/review-template.md`); it is one **input** to the bundle's Checks
|
|
87
|
+
run section, not a carrier of the bundle itself.
|
|
88
|
+
- Never displaces the PR body's closing keywords (`Closes #N` / `Part of #`)
|
|
89
|
+
or its other sections (`## Summary`, `## Quality Gate`, `## Decisions &
|
|
90
|
+
Assumptions`, `## Test Plan`) — it is added alongside them.
|