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,132 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: legacy-code
|
|
3
|
+
description: Safely modify code that lacks tests. Use whenever tasked with changing code without test coverage — apply characterization tests and dependency-breaking techniques before making any behavioral changes.
|
|
4
|
+
role: worker
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Legacy Code
|
|
9
|
+
|
|
10
|
+
Role: worker. This command applies characterization-testing and
|
|
11
|
+
dependency-breaking techniques directly to the code under change.
|
|
12
|
+
|
|
13
|
+
## Overview
|
|
14
|
+
|
|
15
|
+
Techniques for safely modifying code that lacks tests or has poor structure. Based on the principle that legacy code is code without tests (Michael Feathers' definition) — regardless of age. The goal is to get code under test before changing it, then improve structure incrementally.
|
|
16
|
+
|
|
17
|
+
## Constraints
|
|
18
|
+
|
|
19
|
+
- Never change behavior and structure in the same step; refactor under green tests only
|
|
20
|
+
- Write characterization tests before modifying legacy code — not after
|
|
21
|
+
- Prefer the smallest dependency break that gets code under test
|
|
22
|
+
- Do not apply aggressive refactoring without test coverage
|
|
23
|
+
|
|
24
|
+
## Core Concepts
|
|
25
|
+
|
|
26
|
+
### Legacy Code Definition
|
|
27
|
+
|
|
28
|
+
Code without tests. A well-structured 6-month-old codebase with no tests is legacy. A messy 10-year-old codebase with comprehensive tests is not. The presence or absence of tests determines whether you can change code safely.
|
|
29
|
+
|
|
30
|
+
### The Legacy Code Change Algorithm
|
|
31
|
+
|
|
32
|
+
1. **Identify change points** — where in the code does the change need to happen?
|
|
33
|
+
2. **Find test points** — where can you observe the effects of the change?
|
|
34
|
+
3. **Break dependencies** — make the code testable without changing its behavior
|
|
35
|
+
4. **Write tests** — characterization tests that lock down existing behavior
|
|
36
|
+
5. **Make changes and refactor** — now that tests protect you, modify behavior and improve structure
|
|
37
|
+
|
|
38
|
+
### Seams
|
|
39
|
+
|
|
40
|
+
A seam is a place where behavior can be altered without editing the code under test:
|
|
41
|
+
|
|
42
|
+
- **Object seams** — use polymorphism to substitute behavior (interfaces, subclasses)
|
|
43
|
+
- **Link seams** — substitute dependencies at the linking/import level (dependency injection, module mocking)
|
|
44
|
+
- **Preprocessing seams** — alter behavior via build configuration, feature flags, or compile-time substitution
|
|
45
|
+
|
|
46
|
+
### Characterization Tests
|
|
47
|
+
|
|
48
|
+
Tests that document what the code *actually does*, not what it *should do*. They lock down existing behavior so you can detect unintended changes. Characterization tests answer: "If I make a change here, what breaks?"
|
|
49
|
+
|
|
50
|
+
## Patterns
|
|
51
|
+
|
|
52
|
+
### Characterization Test Procedure
|
|
53
|
+
|
|
54
|
+
1. Find the code area you need to change
|
|
55
|
+
2. Write a test that calls the code and lets it fail to reveal actual output
|
|
56
|
+
3. Update the test assertion to match observed behavior
|
|
57
|
+
4. Repeat until the change area and its immediate dependencies are covered
|
|
58
|
+
5. Use these tests as a safety net — any behavioral change will now show as a test failure
|
|
59
|
+
|
|
60
|
+
### Finding Test Points (effect reasoning)
|
|
61
|
+
|
|
62
|
+
Step 2 of the algorithm — *where can you observe the effects of the change?* — is its own skill in tangled code. Before writing tests, reason about effects and place verification where it has leverage. The full method (effect sketches, interception points, pinch points, and the editing-safety techniques — Lean on the Compiler, Preserve Signatures, Single-Goal Editing) is in [`knowledge/legacy-test-strategy.md`](../../knowledge/legacy-test-strategy.md). In brief:
|
|
63
|
+
|
|
64
|
+
- Trace effects outward from each change point; every place you can detect an effect is an **interception point**.
|
|
65
|
+
- Prefer a **pinch point** — a narrowing where one or two tests sense changes across many methods — to anchor characterization tests, then push verification down to narrow units once the area is malleable (don't let pinch-point tests calcify into mini-integration tests).
|
|
66
|
+
- Ask of any candidate: *"If I break this method, will I sense it here?"*
|
|
67
|
+
|
|
68
|
+
**Graph-assisted exploration.** Prefer CodeGraph/Repowise over raw `Grep` when identifying change points, tracing effects outward to interception/pinch points, and mapping the dependencies a seam needs to break — a pre-built call graph surfaces callers, callees, and blast radius faster and more completely than text search. See [`knowledge/codegraph-vs-graphify.md`](../../knowledge/codegraph-vs-graphify.md) for tool selection and the fallback contract.
|
|
69
|
+
|
|
70
|
+
### Dependency Breaking Techniques
|
|
71
|
+
|
|
72
|
+
The everyday shortlist below covers most cases. The **full 24-technique catalog** (globals/singletons, non-OO seams, hard parameters, monster methods, with seam type and risk for each) lives in [`knowledge/dependency-breaking-techniques.md`](../../knowledge/dependency-breaking-techniques.md) — read it when a break here doesn't present a seam.
|
|
73
|
+
|
|
74
|
+
| Technique | When to Use | Risk |
|
|
75
|
+
| --- | --- | --- |
|
|
76
|
+
| Extract Interface | Class has a concrete dependency you need to substitute | Low |
|
|
77
|
+
| Extract Method | Long method with embedded logic you need to isolate (safest starting point) | Low |
|
|
78
|
+
| Parameterize Constructor | Class creates its own dependencies internally | Low |
|
|
79
|
+
| Extract and Override Call / Factory Method | A specific call or `new` in a constructor blocks the test | Low–Med |
|
|
80
|
+
| Subclass and Override Method | Need to neutralize or replace specific behavior in tests | Medium |
|
|
81
|
+
| Sprout / Wrap Method or Class | Adding new behavior to untested code (see decision below) | Low–Med |
|
|
82
|
+
| Adapt Parameter | Method depends on a type you can't use in tests | Medium |
|
|
83
|
+
|
|
84
|
+
### Sprout vs. Wrap Decision
|
|
85
|
+
|
|
86
|
+
- **Sprout** (new method/class called from existing code): use when the new behavior is an addition that existing code needs to invoke at a specific point. The existing code changes minimally — it gains one call to the new method.
|
|
87
|
+
- **Wrap** (new code that calls existing code): use when existing callers must see the new behavior transparently without modification. The new code sits between callers and the original code.
|
|
88
|
+
|
|
89
|
+
### Strangler Pattern
|
|
90
|
+
|
|
91
|
+
Incrementally replace legacy components by routing new behavior through new code while old code remains operational:
|
|
92
|
+
|
|
93
|
+
1. Identify a bounded area of legacy functionality
|
|
94
|
+
2. Build new implementation alongside the old
|
|
95
|
+
3. Route new requests/features through new code
|
|
96
|
+
4. Gradually migrate existing behavior to new code
|
|
97
|
+
5. Remove old code only when fully replaced and verified
|
|
98
|
+
|
|
99
|
+
## Output
|
|
100
|
+
|
|
101
|
+
Report the legacy code analysis: identified change points, test points, dependency breaks needed, characterization test targets, and the recommended refactoring sequence. Be concise — bullet list format; skip background explanation.
|
|
102
|
+
|
|
103
|
+
## When to Apply
|
|
104
|
+
|
|
105
|
+
| Situation | Apply? |
|
|
106
|
+
| --- | --- |
|
|
107
|
+
| Modifying code without tests | Yes |
|
|
108
|
+
| Adding behavior to poorly structured code | Yes |
|
|
109
|
+
| Migrating legacy components to new architecture | Yes |
|
|
110
|
+
| Greenfield development | No |
|
|
111
|
+
| Code already well-tested and well-structured | No |
|
|
112
|
+
| Pure deletion of unused code | No |
|
|
113
|
+
|
|
114
|
+
## Guidelines
|
|
115
|
+
|
|
116
|
+
1. Never change behavior and structure in the same step. Refactor under green tests only.
|
|
117
|
+
2. Write characterization tests before modifying legacy code. The tests document current behavior, not desired behavior.
|
|
118
|
+
3. Prefer the smallest dependency break that gets code under test. Aggressive refactoring without test coverage creates risk.
|
|
119
|
+
4. Sprout when the new behavior is clearly separable; wrap when existing callers must see the new behavior transparently.
|
|
120
|
+
5. Every dependency break is temporary scaffolding — revisit and clean up once test coverage allows broader refactoring.
|
|
121
|
+
6. If you cannot find a seam, extract method first. Extract Method is the safest starting point for almost any dependency break.
|
|
122
|
+
7. Characterization tests are not a substitute for acceptance tests. They lock behavior; acceptance tests define behavior.
|
|
123
|
+
|
|
124
|
+
## Integration
|
|
125
|
+
|
|
126
|
+
- **[Specs](../specs/SKILL.md)** — when modifying legacy code to add new behavior, specify the new behavior first, then use this skill to get existing code under test before implementing
|
|
127
|
+
- **[Hexagonal Architecture](../hexagonal-architecture/SKILL.md)** — dependency breaking techniques move legacy code toward port/adapter separation incrementally
|
|
128
|
+
- **[Quality Gate Pipeline](../quality-gate-pipeline/SKILL.md)** — verify characterization tests match observed behavior (Phase 1); legacy code changes have higher defect risk, apply review-correction with increased scrutiny (Phase 3)
|
|
129
|
+
- **[Mutation Testing](../mutation-testing/SKILL.md)** — after writing characterization tests, use mutation testing to verify those tests catch behavioral changes
|
|
130
|
+
- **[Dependency-Breaking Techniques](../../knowledge/dependency-breaking-techniques.md)** — the full 24-technique catalog (Feathers Part III) behind the shortlist above; consult for globals/singletons, non-OO seams, hard parameters, and monster methods
|
|
131
|
+
- **[Legacy Test Strategy](../../knowledge/legacy-test-strategy.md)** — effect reasoning, effect sketches, interception/pinch points (where to test) and editing-safety techniques (how to edit before tests exist)
|
|
132
|
+
- **[Testability Patterns](../../knowledge/testability-patterns.md)** — constructor injection, Test Data Builder, interface extraction, the Design-for-Testability seam family (Humble Object, Dependency Lookup), and the "I Can't Test This Class" decision flow are the *target design* the dependency breaks scaffold toward; read it when the break needed is a design change rather than a temporary seam insertion
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: mermaid-diagramming
|
|
3
|
+
description: Create Mermaid diagrams using the project's blue-gray theme. Use whenever the user asks to draw a diagram, create a flowchart, visualize a process, document architecture, or add any Mermaid diagram to a markdown file. Trigger on phrases like "draw a diagram", "create a flowchart", "visualize this", "add a mermaid diagram", "document the flow", "sequence diagram", "architecture diagram", or any request to diagram a process or system.
|
|
4
|
+
role: worker
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Mermaid Diagramming
|
|
9
|
+
|
|
10
|
+
Produce Mermaid diagrams that use the project's blue-gray theme. Every diagram must include the theme init directive as its first line.
|
|
11
|
+
|
|
12
|
+
## Theme Directive
|
|
13
|
+
|
|
14
|
+
Paste this as the **first line** inside every ```` ```mermaid ```` block, before the diagram type declaration:
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#dbeafe', 'primaryTextColor': '#1e3a5f', 'primaryBorderColor': '#3b82f6', 'lineColor': '#64748b', 'secondaryColor': '#f1f5f9', 'tertiaryColor': '#e0f2fe', 'background': '#ffffff', 'mainBkg': '#dbeafe', 'nodeBorder': '#2563eb', 'clusterBkg': '#eff6ff', 'clusterBorder': '#bfdbfe', 'titleColor': '#1e3a5f', 'edgeLabelBackground': '#f8fafc'}}}%%
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
### Palette reference
|
|
21
|
+
|
|
22
|
+
| Variable | Value | Role |
|
|
23
|
+
|---|---|---|
|
|
24
|
+
| `primaryColor` / `mainBkg` | `#dbeafe` (blue-100) | Default node fill |
|
|
25
|
+
| `secondaryColor` | `#f1f5f9` (slate-100) | Secondary node fill |
|
|
26
|
+
| `tertiaryColor` | `#e0f2fe` (sky-100) | Tertiary / highlight fill |
|
|
27
|
+
| `primaryBorderColor` / `nodeBorder` | `#3b82f6` / `#2563eb` (blue-500/600) | Node border |
|
|
28
|
+
| `clusterBkg` | `#eff6ff` (blue-50) | Subgraph / cluster fill |
|
|
29
|
+
| `clusterBorder` | `#bfdbfe` (blue-200) | Subgraph border |
|
|
30
|
+
| `lineColor` | `#64748b` (slate-500) | Edge / arrow color |
|
|
31
|
+
| `primaryTextColor` / `titleColor` | `#1e3a5f` (dark navy) | Text |
|
|
32
|
+
| `edgeLabelBackground` | `#f8fafc` (slate-50) | Edge label background |
|
|
33
|
+
| `background` | `#ffffff` | Diagram background |
|
|
34
|
+
|
|
35
|
+
## Rules
|
|
36
|
+
|
|
37
|
+
1. **Always include the theme directive.** No exceptions — every ```` ```mermaid ```` block in this repo starts with the `%%{init}%%` line.
|
|
38
|
+
2. **One diagram per concept.** If a section needs multiple views, use separate fenced blocks with a heading for each.
|
|
39
|
+
3. **Keep labels short.** Node labels ≤ 6 words. Use subgraphs for grouping, not long labels.
|
|
40
|
+
4. **Decision nodes use `{...}` rhombus shape.** Action nodes use `[...]` rectangles. Terminal/IO nodes use `[/..../]` parallelograms.
|
|
41
|
+
5. **Left-to-right for pipelines, top-to-bottom for hierarchies.** Default to `LR` for data flow; `TD` for org charts, call trees, and phase sequences.
|
|
42
|
+
|
|
43
|
+
## Diagram Types
|
|
44
|
+
|
|
45
|
+
### Flowchart — processes and pipelines
|
|
46
|
+
|
|
47
|
+
```mermaid
|
|
48
|
+
%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#dbeafe', 'primaryTextColor': '#1e3a5f', 'primaryBorderColor': '#3b82f6', 'lineColor': '#64748b', 'secondaryColor': '#f1f5f9', 'tertiaryColor': '#e0f2fe', 'background': '#ffffff', 'mainBkg': '#dbeafe', 'nodeBorder': '#2563eb', 'clusterBkg': '#eff6ff', 'clusterBorder': '#bfdbfe', 'titleColor': '#1e3a5f', 'edgeLabelBackground': '#f8fafc'}}}%%
|
|
49
|
+
flowchart LR
|
|
50
|
+
A[Input] --> B{Valid?}
|
|
51
|
+
B -->|yes| C[Process]
|
|
52
|
+
B -->|no| D[Reject]
|
|
53
|
+
C --> E[Output]
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Sequence — interactions between actors/services
|
|
57
|
+
|
|
58
|
+
```mermaid
|
|
59
|
+
%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#dbeafe', 'primaryTextColor': '#1e3a5f', 'primaryBorderColor': '#3b82f6', 'lineColor': '#64748b', 'secondaryColor': '#f1f5f9', 'tertiaryColor': '#e0f2fe', 'background': '#ffffff', 'mainBkg': '#dbeafe', 'nodeBorder': '#2563eb', 'clusterBkg': '#eff6ff', 'clusterBorder': '#bfdbfe', 'titleColor': '#1e3a5f', 'edgeLabelBackground': '#f8fafc'}}}%%
|
|
60
|
+
sequenceDiagram
|
|
61
|
+
participant C as Client
|
|
62
|
+
participant S as Server
|
|
63
|
+
participant D as Database
|
|
64
|
+
C->>S: POST /resource
|
|
65
|
+
S->>D: INSERT row
|
|
66
|
+
D-->>S: OK
|
|
67
|
+
S-->>C: 201 Created
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Graph with subgraphs — architecture layers
|
|
71
|
+
|
|
72
|
+
```mermaid
|
|
73
|
+
%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#dbeafe', 'primaryTextColor': '#1e3a5f', 'primaryBorderColor': '#3b82f6', 'lineColor': '#64748b', 'secondaryColor': '#f1f5f9', 'tertiaryColor': '#e0f2fe', 'background': '#ffffff', 'mainBkg': '#dbeafe', 'nodeBorder': '#2563eb', 'clusterBkg': '#eff6ff', 'clusterBorder': '#bfdbfe', 'titleColor': '#1e3a5f', 'edgeLabelBackground': '#f8fafc'}}}%%
|
|
74
|
+
flowchart TD
|
|
75
|
+
subgraph API["API Layer"]
|
|
76
|
+
R[Router]
|
|
77
|
+
M[Middleware]
|
|
78
|
+
end
|
|
79
|
+
subgraph Domain["Domain Layer"]
|
|
80
|
+
S[Service]
|
|
81
|
+
E[Entities]
|
|
82
|
+
end
|
|
83
|
+
subgraph Infra["Infrastructure"]
|
|
84
|
+
DB[(Database)]
|
|
85
|
+
Cache[(Cache)]
|
|
86
|
+
end
|
|
87
|
+
R --> M --> S --> E
|
|
88
|
+
S --> DB
|
|
89
|
+
S --> Cache
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### State diagram — lifecycle / state machine
|
|
93
|
+
|
|
94
|
+
```mermaid
|
|
95
|
+
%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#dbeafe', 'primaryTextColor': '#1e3a5f', 'primaryBorderColor': '#3b82f6', 'lineColor': '#64748b', 'secondaryColor': '#f1f5f9', 'tertiaryColor': '#e0f2fe', 'background': '#ffffff', 'mainBkg': '#dbeafe', 'nodeBorder': '#2563eb', 'clusterBkg': '#eff6ff', 'clusterBorder': '#bfdbfe', 'titleColor': '#1e3a5f', 'edgeLabelBackground': '#f8fafc'}}}%%
|
|
96
|
+
stateDiagram-v2
|
|
97
|
+
[*] --> Pending
|
|
98
|
+
Pending --> Running : start
|
|
99
|
+
Running --> Passed : success
|
|
100
|
+
Running --> Failed : error
|
|
101
|
+
Passed --> [*]
|
|
102
|
+
Failed --> [*]
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## Procedure
|
|
106
|
+
|
|
107
|
+
1. Identify the diagram type that best fits the concept (flowchart, sequence, state, ER, etc.).
|
|
108
|
+
2. Draft the structure — nodes, edges, labels — before writing Mermaid syntax.
|
|
109
|
+
3. Open the ```` ```mermaid ```` block with the theme `%%{init}%%` directive on line 1.
|
|
110
|
+
4. Write the diagram type declaration on line 2.
|
|
111
|
+
5. Verify the diagram is syntactically valid (balanced brackets, no duplicate node IDs).
|
|
112
|
+
6. Add the diagram to the markdown file with a heading that explains what it shows.
|
|
113
|
+
|
|
114
|
+
## Adding a diagram to an existing file
|
|
115
|
+
|
|
116
|
+
When inserting a diagram into an existing markdown file:
|
|
117
|
+
|
|
118
|
+
1. Read the file first to understand the document structure and find the right insertion point.
|
|
119
|
+
2. Use a second-level heading (`##`) above the diagram block to name the concept.
|
|
120
|
+
3. Add a one-sentence caption below the closing ```` ``` ```` that describes what the diagram shows — this doubles as alt-text.
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: mutation-night-watch
|
|
3
|
+
description: Launch, schedule, and hand off an unattended, LLM-free overnight mutation night-watch run. Use when the user wants a mutation-score baseline waiting each morning without paying LLM cost or blocking a session overnight, says "run mutation testing overnight", "schedule a nightly mutation scan", "set up a mutation night watch", or asks how to get an unattended mutation baseline. Wraps mutation_nightwatch.py — report-only measurement, never generation.
|
|
4
|
+
role: worker
|
|
5
|
+
user-invocable: true
|
|
6
|
+
allowed-tools: Read, Write, Bash(python3 *), Bash(launchctl *), Bash(crontab *), Bash(schtasks *)
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Mutation Night-Watch
|
|
10
|
+
|
|
11
|
+
<!-- pi-port-notes -->
|
|
12
|
+
## pi port notes
|
|
13
|
+
|
|
14
|
+
- Where this skill schedules or runs `claude --print`, use `pi --mode json -p --no-session` (or the port's `claude` shim, which is on `PATH` inside pi sessions but not in cron). In a cron entry call `pi` directly.
|
|
15
|
+
<!-- pi-port-notes -->
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
Role: worker. Launches and schedules a report-only measurement run. It never
|
|
19
|
+
generates a test, never invokes an LLM, and never commits — that is the
|
|
20
|
+
`mutation-kill` agent's job, the next morning, reading this skill's output.
|
|
21
|
+
|
|
22
|
+
> **Naming note.** The skill is named `mutation-night-watch`; its underlying
|
|
23
|
+
> scripts, output directory (`reports/mutation-nightwatch/`), and launchd
|
|
24
|
+
> label use `mutation_nightwatch`/`mutation-nightwatch` — this is an
|
|
25
|
+
> intentional, stable naming split; do not rename the on-disk paths without a
|
|
26
|
+
> migration plan (#1856).
|
|
27
|
+
|
|
28
|
+
## Why this exists, and how it differs from `mutation-kill`
|
|
29
|
+
|
|
30
|
+
`mutation-kill` already has two modes: **interactive** (an agent generates
|
|
31
|
+
tests turn by turn) and **`--headless`** (unattended, but every round still
|
|
32
|
+
shells out to `claude --print` — LLM cost and API availability are both in
|
|
33
|
+
the loop). Neither mode is meant to run **overnight with nobody watching**:
|
|
34
|
+
a multi-hour unattended `claude --print` loop is expensive and, on a flaky
|
|
35
|
+
network, silently stalls.
|
|
36
|
+
|
|
37
|
+
Night-watch is a **third, LLM-free mode**: measurement only. It runs the real
|
|
38
|
+
mutation tool for each detected stack, scores the result with the same
|
|
39
|
+
[`mutation_report.py`](../mutation-testing/scripts/mutation_report.py) the
|
|
40
|
+
rest of the mutation-testing skill family uses, and writes the result where
|
|
41
|
+
`mutation-kill` (or a human) picks it up the next day. It does not replace
|
|
42
|
+
`mutation-kill`'s fixing modes — see [`mutation-testing/SKILL.md`](../mutation-testing/SKILL.md)
|
|
43
|
+
for those.
|
|
44
|
+
|
|
45
|
+
## Constraints
|
|
46
|
+
|
|
47
|
+
- **Report-only. Never generation.** The script
|
|
48
|
+
([`../mutation-testing/scripts/mutation_nightwatch.py`](../mutation-testing/scripts/mutation_nightwatch.py))
|
|
49
|
+
has no code path that shells to an LLM. If a stack's tool run mutates a
|
|
50
|
+
survivor count, that is the mutation tool itself running normally — nothing
|
|
51
|
+
here writes a test.
|
|
52
|
+
- **Mechanical repair only, never code.** Before measuring, the script runs
|
|
53
|
+
each stack's package-pin-sync step (`npm ci` when `node_modules` is
|
|
54
|
+
missing, `dotnet restore`) so a stale dependency tree doesn't fail the
|
|
55
|
+
whole run on a mechanical break. It never edits a production or test file,
|
|
56
|
+
and never commits — see the script's `mechanical_repair`.
|
|
57
|
+
- **Detected-but-unscored stacks are reported, not guessed.** pitest (Java)
|
|
58
|
+
and go-mutesting (Go) are detected but have no `mutation_report.py` parser
|
|
59
|
+
yet; they show up in the summary as `skipped_no_parser`, never a
|
|
60
|
+
fabricated score.
|
|
61
|
+
- **Always confirm scope before scheduling a recurring run.** A single ad hoc
|
|
62
|
+
`--detach` launch needs no extra confirmation beyond what the user already
|
|
63
|
+
asked for; wiring a scheduler entry (Task Scheduler / launchd / cron) that
|
|
64
|
+
runs unattended on a recurring cadence is a standing change to the user's
|
|
65
|
+
machine — confirm the schedule and scope before writing the scheduler
|
|
66
|
+
config.
|
|
67
|
+
|
|
68
|
+
## Step 1: Detect and preview scope
|
|
69
|
+
|
|
70
|
+
Run once without `--detach` on a small scope, or just read the detection
|
|
71
|
+
output, before committing to an overnight run:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
python3 "${CLAUDE_PLUGIN_ROOT}/skills/mutation-testing/scripts/mutation_nightwatch.py" --repo-root . --no-sleep-inhibit
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
This prints the run directory and writes `MORNING-SUMMARY.md` +
|
|
78
|
+
`SURVIVORS.json` there and into `reports/mutation-nightwatch/LATEST/`. Read
|
|
79
|
+
the summary's stack table before scheduling a longer, detached run — a stack
|
|
80
|
+
reporting `skipped` (no unique `.sln`, no `stryker-config.json`) or
|
|
81
|
+
`skipped_no_parser` needs attention first, not a repeat overnight run that
|
|
82
|
+
will report the same gap every time.
|
|
83
|
+
|
|
84
|
+
## Step 2: Launch detached (survives closing the terminal/session)
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
python3 "${CLAUDE_PLUGIN_ROOT}/skills/mutation-testing/scripts/mutation_nightwatch.py" --repo-root . --detach
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
`--detach` re-execs the script into a new session/process group (POSIX
|
|
91
|
+
`setsid`-equivalent; Windows `DETACHED_PROCESS`) and returns immediately,
|
|
92
|
+
printing the child's PID and its `detached-launch.log` path. The run
|
|
93
|
+
continues after the launching terminal or Claude Code session closes.
|
|
94
|
+
|
|
95
|
+
While running, the script holds the OS awake for the run's duration:
|
|
96
|
+
`caffeinate -dims` on macOS, `systemd-inhibit --what=sleep:idle` on Linux,
|
|
97
|
+
`SetThreadExecutionState` directly on Windows. When none of those are
|
|
98
|
+
available, the run still proceeds — but `MORNING-SUMMARY.md`'s Notes section
|
|
99
|
+
always carries an explicit `NOTE: sleep inhibition unavailable on <platform>`
|
|
100
|
+
line rather than silently risking a sleep-interrupted run. Treat that NOTE as
|
|
101
|
+
actionable: install the missing tool, or accept the machine may sleep
|
|
102
|
+
mid-run.
|
|
103
|
+
|
|
104
|
+
## Step 3: Schedule a recurring run (optional)
|
|
105
|
+
|
|
106
|
+
Per-OS recipes — Task Scheduler, launchd, and cron — live in
|
|
107
|
+
[`references/scheduling.md`](references/scheduling.md). Confirm the cadence
|
|
108
|
+
and scope with the user before writing any of these (see Constraints above);
|
|
109
|
+
they run unattended, indefinitely, until removed.
|
|
110
|
+
|
|
111
|
+
## Step 4: Morning hand-off
|
|
112
|
+
|
|
113
|
+
Read `reports/mutation-nightwatch/LATEST/MORNING-SUMMARY.md` first — it
|
|
114
|
+
carries per-stack status, the honest score, and any Notes (sleep inhibition,
|
|
115
|
+
mechanical-repair failures) from the most recent run, regardless of that
|
|
116
|
+
run's timestamped folder name. Both files are refreshed after every module
|
|
117
|
+
completes, not only when the run finishes cleanly — a mid-run kill or
|
|
118
|
+
timeout still leaves whatever finished so far, never nothing. `SURVIVORS.json` alongside it is the
|
|
119
|
+
machine-readable list (`{stack, module, file, line, mutator, change,
|
|
120
|
+
status}` per survivor) — hand it to the `mutation-kill` agent (or triage it
|
|
121
|
+
per [`mutation-testing/SKILL.md`](../mutation-testing/SKILL.md) Step 4)
|
|
122
|
+
rather than re-running the scan to rediscover the same survivors.
|
|
123
|
+
|
|
124
|
+
A stack reporting `error` in the summary table did not produce a report at
|
|
125
|
+
all this run (tool missing, timed out, or crashed before writing its native
|
|
126
|
+
report) — its prior night's `SURVIVORS.json` entries (if any) are stale, not
|
|
127
|
+
confirmed-fixed; re-run that stack before trusting a "clean" reading.
|
|
128
|
+
|
|
129
|
+
**Exclude-policy proposal, if present.** When the summary's Notes mention no
|
|
130
|
+
committed `mutation-exclude-policy.json` was found, review
|
|
131
|
+
`reports/mutation-nightwatch/LATEST/EXCLUDE-POLICY-PROPOSAL.json` — its
|
|
132
|
+
`always` entries carry a filename-convention hint (DI wiring, middleware,
|
|
133
|
+
generated code), its `propose_and_ask` entries are signal-only and need a
|
|
134
|
+
human look. Approve what you agree with:
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
python3 "${CLAUDE_PLUGIN_ROOT}/skills/mutation-testing/scripts/mutation_exclude_policy.py" --approve reports/mutation-nightwatch/LATEST/EXCLUDE-POLICY-PROPOSAL.json --repo-root .
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
This is the only code path that writes the committed policy file — the
|
|
141
|
+
night-watch run itself only ever drafts a proposal, never approves one.
|
|
142
|
+
|
|
143
|
+
## When not to apply
|
|
144
|
+
|
|
145
|
+
- No mutation tool is set up yet for any stack → run
|
|
146
|
+
[`mutation-testing`](../mutation-testing/SKILL.md) interactively first to
|
|
147
|
+
get one configured and smoke-gated; night-watch only measures, it does not
|
|
148
|
+
install or configure a tool.
|
|
149
|
+
- The repo is small enough that a mutation run finishes in a few minutes →
|
|
150
|
+
just run `mutation-testing` directly; detach/sleep-inhibition/scheduling
|
|
151
|
+
are overhead a short run doesn't need.
|
|
152
|
+
- Java (pitest) or Go (go-mutesting) is the *only* detected stack → night-
|
|
153
|
+
watch will report `skipped_no_parser`/never invoke the tool; use
|
|
154
|
+
`mutation-testing` directly for those ecosystems today.
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# Mutation Night-Watch: Scheduling Recipes
|
|
2
|
+
|
|
3
|
+
> **Naming note.** The skill is named `mutation-night-watch`; its underlying
|
|
4
|
+
> scripts, output directory (`reports/mutation-nightwatch/`), and launchd
|
|
5
|
+
> label use `mutation_nightwatch`/`mutation-nightwatch` — this is an
|
|
6
|
+
> intentional, stable naming split; do not rename the on-disk paths without a
|
|
7
|
+
> migration plan (#1856).
|
|
8
|
+
|
|
9
|
+
Each recipe runs `mutation_nightwatch.py` **without** `--detach` — the
|
|
10
|
+
scheduler itself already runs the job detached from any interactive session,
|
|
11
|
+
so re-detaching would just orphan a second process. Use `--detach` only for
|
|
12
|
+
an ad hoc manual launch (see [`../SKILL.md`](../SKILL.md) Step 2).
|
|
13
|
+
|
|
14
|
+
Confirm the cadence and scope with the user before installing any of these —
|
|
15
|
+
each one runs unattended, indefinitely, until removed (see `../SKILL.md`'s
|
|
16
|
+
Constraints).
|
|
17
|
+
|
|
18
|
+
Substitute:
|
|
19
|
+
|
|
20
|
+
- `<repo>` — absolute path to the repository root (the project being
|
|
21
|
+
measured, not the plugin's own install location).
|
|
22
|
+
- `<plugin-root>` — absolute path to the installed dev-team plugin on this
|
|
23
|
+
machine — get it by running `echo "$CLAUDE_PLUGIN_ROOT"` from an active
|
|
24
|
+
Claude Code session with the dev-team plugin loaded. Without a session,
|
|
25
|
+
derive it from `/dev-team:version`'s output (`dev-team@<marketplace>
|
|
26
|
+
v<version> (scope: <scope>)`): the installed copy lives at
|
|
27
|
+
`~/.claude/plugins/cache/<marketplace>/dev-team/<version>/`, e.g.
|
|
28
|
+
`~/.claude/plugins/cache/bfinster/dev-team/12.3.0` for `dev-team@bfinster
|
|
29
|
+
v12.3.0 (scope: user)`. `${CLAUDE_PLUGIN_ROOT}` itself is a
|
|
30
|
+
Claude-session-time environment variable and does not exist when a
|
|
31
|
+
scheduler runs the job outside any Claude session, so these recipes need
|
|
32
|
+
its resolved value substituted in ahead of time rather than the literal
|
|
33
|
+
token.
|
|
34
|
+
- `<python>` — an absolute path to the Python 3.10+ interpreter that has the
|
|
35
|
+
repo's mutation tooling on `PATH` (a venv's `python`, or the system one).
|
|
36
|
+
|
|
37
|
+
## macOS — launchd
|
|
38
|
+
|
|
39
|
+
launchd (not cron — cron does not run on a schedule reliably across macOS
|
|
40
|
+
sleep/wake cycles) via a per-user `LaunchAgent`.
|
|
41
|
+
|
|
42
|
+
`~/Library/LaunchAgents/dev.agentic-dev-team.mutation-nightwatch.plist`:
|
|
43
|
+
|
|
44
|
+
```xml
|
|
45
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
46
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
|
|
47
|
+
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
48
|
+
<plist version="1.0">
|
|
49
|
+
<dict>
|
|
50
|
+
<key>Label</key>
|
|
51
|
+
<string>dev.agentic-dev-team.mutation-nightwatch</string>
|
|
52
|
+
<key>ProgramArguments</key>
|
|
53
|
+
<array>
|
|
54
|
+
<string><python></string>
|
|
55
|
+
<string><plugin-root>/skills/mutation-testing/scripts/mutation_nightwatch.py</string>
|
|
56
|
+
<string>--repo-root</string>
|
|
57
|
+
<string><repo></string>
|
|
58
|
+
</array>
|
|
59
|
+
<key>StartCalendarInterval</key>
|
|
60
|
+
<dict>
|
|
61
|
+
<key>Hour</key>
|
|
62
|
+
<integer>1</integer>
|
|
63
|
+
<key>Minute</key>
|
|
64
|
+
<integer>0</integer>
|
|
65
|
+
</dict>
|
|
66
|
+
<key>StandardOutPath</key>
|
|
67
|
+
<string><repo>/reports/mutation-nightwatch/launchd.log</string>
|
|
68
|
+
<key>StandardErrorPath</key>
|
|
69
|
+
<string><repo>/reports/mutation-nightwatch/launchd.log</string>
|
|
70
|
+
</dict>
|
|
71
|
+
</plist>
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Load/unload:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
launchctl load ~/Library/LaunchAgents/dev.agentic-dev-team.mutation-nightwatch.plist
|
|
78
|
+
launchctl unload ~/Library/LaunchAgents/dev.agentic-dev-team.mutation-nightwatch.plist
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
launchd's own scheduling already survives the machine sleeping (it fires on
|
|
82
|
+
the next wake if the fire time was missed); `mutation_nightwatch.py`'s
|
|
83
|
+
`caffeinate`-based `SleepInhibitor` then keeps the machine **awake for the
|
|
84
|
+
run itself** once it starts, so a multi-hour run isn't interrupted mid-way.
|
|
85
|
+
|
|
86
|
+
## Linux — cron + systemd-inhibit
|
|
87
|
+
|
|
88
|
+
cron runs the job; the script's own `SleepInhibitor` calls
|
|
89
|
+
`systemd-inhibit` internally, so no extra wrapping is needed in the crontab
|
|
90
|
+
line itself.
|
|
91
|
+
|
|
92
|
+
`crontab -e`:
|
|
93
|
+
|
|
94
|
+
```cron
|
|
95
|
+
0 1 * * * <python> <plugin-root>/skills/mutation-testing/scripts/mutation_nightwatch.py --repo-root <repo> >> <repo>/reports/mutation-nightwatch/cron.log 2>&1
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Note the redirect is a direct `>>`, not a `| tee` — see
|
|
99
|
+
[`mutation-testing/SKILL.md`](../../mutation-testing/SKILL.md#capturing-run-output-safely)
|
|
100
|
+
for why a `tee` pipeline masks a startup failure's exit code. cron always
|
|
101
|
+
uses `sh`, so this is safe here regardless.
|
|
102
|
+
|
|
103
|
+
A machine that suspends (a laptop, not a server) needs an additional wake
|
|
104
|
+
trigger — cron does not wake a suspended machine. Pair with `rtcwake` or an
|
|
105
|
+
OS-level wake-on-schedule setting if the target machine sleeps outside of
|
|
106
|
+
process-level idle (systemd-inhibit only blocks *idle* suspend once the
|
|
107
|
+
process is already running, not a deeper suspend triggered before cron fires).
|
|
108
|
+
|
|
109
|
+
## Windows — Task Scheduler
|
|
110
|
+
|
|
111
|
+
```powershell
|
|
112
|
+
schtasks /create /tn "MutationNightWatch" /tr "<python> <plugin-root>\skills\mutation-testing\scripts\mutation_nightwatch.py --repo-root <repo>" /sc daily /st 01:00
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Task Scheduler's own "Wake the computer to run this task" option (in the
|
|
116
|
+
task's **Conditions** tab, or `/sc daily` plus editing the task afterward via
|
|
117
|
+
`taskschd.msc`) is the Windows equivalent of the launchd/rtcwake concerns
|
|
118
|
+
above — enable it if the target machine sleeps.
|
|
119
|
+
|
|
120
|
+
`mutation_nightwatch.py` calls `SetThreadExecutionState` directly on Windows
|
|
121
|
+
(no subprocess to hold open, unlike macOS/Linux) to keep the machine awake
|
|
122
|
+
for the run's duration once it starts.
|
|
123
|
+
|
|
124
|
+
Remove the task:
|
|
125
|
+
|
|
126
|
+
```powershell
|
|
127
|
+
schtasks /delete /tn "MutationNightWatch" /f
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## Every OS: reading the result
|
|
131
|
+
|
|
132
|
+
Regardless of scheduler, the result lands at
|
|
133
|
+
`<repo>/reports/mutation-nightwatch/LATEST/MORNING-SUMMARY.md` — the stable
|
|
134
|
+
mirror path never changes between runs. See [`../SKILL.md`](../SKILL.md)
|
|
135
|
+
Step 4 for the morning hand-off to `mutation-kill`.
|