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,111 @@
|
|
|
1
|
+
# Context Management
|
|
2
|
+
|
|
3
|
+
How the plugin keeps a session's context in check: the harness compacts at a
|
|
4
|
+
percentage `/dev-team:setup` configures, a pair of small SessionStart hooks
|
|
5
|
+
nudge and restore state, and `/handoff` stays available by hand. For the
|
|
6
|
+
runtime procedure (what to load, when), see [Context Loading
|
|
7
|
+
Protocol](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/context-loading-protocol/SKILL.md);
|
|
8
|
+
for manual compression and side-task forks, see
|
|
9
|
+
[Handoff](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/handoff/SKILL.md).
|
|
10
|
+
|
|
11
|
+
The design record is [ADR 0043](../../../docs/adr/0043-replace-the-context-ceiling-guard-with-harness-autocompact.md),
|
|
12
|
+
which replaced the former context-ceiling hook (ADRs 0011, 0016, 0037-0039).
|
|
13
|
+
|
|
14
|
+
## How it works
|
|
15
|
+
|
|
16
|
+
1. **Harness autocompact, configured per repo.** `/dev-team:setup` writes
|
|
17
|
+
`CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` into the repo's `.claude/settings.json`
|
|
18
|
+
`env` block (default `40`). The harness then compacts the conversation
|
|
19
|
+
when it reaches that percentage of its auto-compact window. It applies to
|
|
20
|
+
subagents as well as the main session.
|
|
21
|
+
2. **A setup nudge.** On `startup`, `resume` and `clear`, the SessionStart
|
|
22
|
+
hook `autocompact_setup_nudge.py` prints one line recommending
|
|
23
|
+
`/dev-team:setup` when the key is absent or invalid in the process env,
|
|
24
|
+
`.claude/settings.local.json`, `.claude/settings.json` and user settings.
|
|
25
|
+
It is advisory, never blocks, and never fires on `compact`.
|
|
26
|
+
3. **State restore after compaction.** A SessionStart hook with matcher
|
|
27
|
+
`compact`, `post_compact_state_reinject.py`, re-injects the active `/build`
|
|
28
|
+
phase, step, plan path and unchecked `## Build Progress` items as
|
|
29
|
+
`additionalContext` (at most 10,000 characters; phase and step survive
|
|
30
|
+
truncation first). It reads `.claude/memory/build-phase.json`, so it only
|
|
31
|
+
has something to restore while a build is in progress (a step, or
|
|
32
|
+
between steps). It is
|
|
33
|
+
best-effort and fail-open.
|
|
34
|
+
4. **`/handoff` is manual.** Run it yourself to compress the conversation
|
|
35
|
+
(continue mode) or split off a side task (fork mode).
|
|
36
|
+
Write a full summary to `.claude/memory/` so the next phase starts from a
|
|
37
|
+
file. Nothing forces or blocks on it.
|
|
38
|
+
|
|
39
|
+
## Configuring the threshold
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
python3 "${CLAUDE_PLUGIN_ROOT}/scripts/set_autocompact_env.py" --project-dir . --yes
|
|
43
|
+
python3 "${CLAUDE_PLUGIN_ROOT}/scripts/set_autocompact_env.py" --project-dir . --autocompact-pct 30
|
|
44
|
+
python3 "${CLAUDE_PLUGIN_ROOT}/scripts/set_autocompact_env.py" --project-dir . --no-autocompact
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
`/dev-team:setup` runs the same script (Step 9b). The value is an integer
|
|
48
|
+
1-100 written as a string, merged into existing `env` entries. The harness
|
|
49
|
+
can only lower its threshold; values above its default (about 83%, reported)
|
|
50
|
+
have no effect, and the script warns when you pick one. It also warns when a
|
|
51
|
+
process-env or `settings.local.json` entry shadows the project value.
|
|
52
|
+
|
|
53
|
+
There is no absolute token cap: the percentage applies to the window, so 40%
|
|
54
|
+
of a 1M window is 400K. The former 350K cap was deliberately dropped.
|
|
55
|
+
|
|
56
|
+
To silence the nudge without configuring autocompact, set
|
|
57
|
+
`DEV_TEAM_AUTOCOMPACT_NUDGE=0` or create `.claude/memory/autocompact-nudge-off`
|
|
58
|
+
(`--no-autocompact` creates it).
|
|
59
|
+
|
|
60
|
+
## What to expect
|
|
61
|
+
|
|
62
|
+
- **Coverage is per repo.** A repo that never runs `/setup` keeps the harness
|
|
63
|
+
default, which is much later than 40%. The nudge advises; it does not
|
|
64
|
+
enforce.
|
|
65
|
+
- **Compaction is generic.** The harness summary can drop plan-step state,
|
|
66
|
+
file:line anchors and acceptance criteria. The re-inject hook restores
|
|
67
|
+
`/build` phase/step and plan progress only; for anything else, write a
|
|
68
|
+
structured summary with `/handoff` before you need it.
|
|
69
|
+
- **Timing.** The threshold is checked between turns (reported, not
|
|
70
|
+
verified), so one long tool loop can overshoot it.
|
|
71
|
+
- **`compact` SessionStart firing is unconfirmed.** That it fires after a
|
|
72
|
+
real compaction and reaches the model is tracked in
|
|
73
|
+
[#2233](https://github.com/bdfinst/agentic-dev-team/issues/2233).
|
|
74
|
+
|
|
75
|
+
## Why a low threshold
|
|
76
|
+
|
|
77
|
+
The 40% default is a conservative planning target, not a claimed accuracy
|
|
78
|
+
cliff:
|
|
79
|
+
|
|
80
|
+
- Chroma's [Context Rot study](https://www.trychroma.com/research/context-rot)
|
|
81
|
+
found degradation across 18 models (including Claude 4) is gradual, not a
|
|
82
|
+
sharp drop at any single percentage.
|
|
83
|
+
- Needle-in-a-haystack benchmarks like RULER and NoLiMa show a model's
|
|
84
|
+
*effective* context is often only about half its advertised window.
|
|
85
|
+
- Anthropic's [effective context engineering
|
|
86
|
+
guidance](https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents)
|
|
87
|
+
recommends proactive compaction well ahead of the limit.
|
|
88
|
+
|
|
89
|
+
## Troubleshooting
|
|
90
|
+
|
|
91
|
+
**"The nudge keeps firing after I ran setup."** A process-env or
|
|
92
|
+
`settings.local.json` value can shadow the project one; the nudge names the
|
|
93
|
+
source of an invalid value. Fix or remove that entry.
|
|
94
|
+
|
|
95
|
+
**"Nothing restored after compaction."** `build-phase.json` is deleted when the plan
|
|
96
|
+
completes, and records older than four hours are ignored; with no active
|
|
97
|
+
build there is nothing to restore. Also check #2233.
|
|
98
|
+
|
|
99
|
+
**"The setup script refuses to write."** It aborts, leaving the file
|
|
100
|
+
untouched, when `.claude/settings.json` is malformed, is a symlink, is not a
|
|
101
|
+
JSON object, or has a non-object `env`. Fix the file and re-run.
|
|
102
|
+
|
|
103
|
+
## Source
|
|
104
|
+
|
|
105
|
+
- `plugins/dev-team/scripts/set_autocompact_env.py` (writer),
|
|
106
|
+
`plugins/dev-team/hooks/lib/autocompact_config.py` (shared detector).
|
|
107
|
+
- `plugins/dev-team/hooks/autocompact_setup_nudge.py`,
|
|
108
|
+
`plugins/dev-team/hooks/post_compact_state_reinject.py`,
|
|
109
|
+
`plugins/dev-team/hooks/lib/build_state.py`.
|
|
110
|
+
- Registered in `plugins/dev-team/hooks/hooks.json` and
|
|
111
|
+
`plugins/dev-team/settings.json` under `SessionStart`.
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
# Developer notes — extending and maintaining the plugin
|
|
2
|
+
|
|
3
|
+
This page is for people working **on** the dev-team plugin: adding a tool,
|
|
4
|
+
agent, or skill, maintaining the eval corpus, or extending the static-analysis
|
|
5
|
+
suite to a new language. If you are *using* the plugin for your own
|
|
6
|
+
development work, you want the [skills reference](skills.md) and the
|
|
7
|
+
[workflows guide](workflows.md) instead — nothing here changes how the plugin
|
|
8
|
+
behaves in your project.
|
|
9
|
+
|
|
10
|
+
## Where plugin-development knowledge lives
|
|
11
|
+
|
|
12
|
+
Plugin-development documentation is spread across a few focused files. This
|
|
13
|
+
table is the jumping-off point; each doc stays the authority for its own
|
|
14
|
+
topic.
|
|
15
|
+
|
|
16
|
+
| Topic | Doc | What it covers |
|
|
17
|
+
|---|---|---|
|
|
18
|
+
| Agent architecture | [`agent-architecture.md`](agent-architecture.md) | How agents are structured, routed, and dispatched. |
|
|
19
|
+
| Agent authoring | [`agent_info.md`](agent_info.md) | The per-agent file format and required sections. |
|
|
20
|
+
| Eval architecture | [`eval-system.md`](eval-system.md) | How the agent-eval system is built and gated. |
|
|
21
|
+
| Running evals | [`eval-running-guide.md`](eval-running-guide.md) | The operational procedure for eval runs and variance batches. |
|
|
22
|
+
| Eval upkeep | [`eval-maintenance.md`](eval-maintenance.md) | Grading rules, the calibration trap, and corpus discipline. |
|
|
23
|
+
| Adapter & ruleset lifecycle | [`static-analysis-integration/maintenance.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/static-analysis-integration/maintenance.md) | Ownership, drift detection, and deprecation for shipped adapters and rulesets. |
|
|
24
|
+
| Adding agents, skills, or hooks | [root `CLAUDE.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/CLAUDE.md) § "Adding agents, skills, or hooks" | Where each artifact type lives and the structural audit to run afterwards. |
|
|
25
|
+
| Code knowledge graphs | [`codegraph-vs-graphify.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/knowledge/codegraph-vs-graphify.md) | When to use CodeGraph vs Graphify, how `/project-init` installs each, and the CLAUDE.md-preservation guard. |
|
|
26
|
+
| Script conventions | [ADR 0014](../../../docs/adr/0014-python-for-cross-os-scripts.md), [ADR 0015](../../../docs/adr/0015-bash-removal-complete.md), [ADR 0031](../../../docs/adr/0031-raise-shipped-python-floor-to-3-10.md) | Why every shipped script is Python 3.10+ stdlib-only, the completed bash removal, and the floor's move off EOL 3.8. |
|
|
27
|
+
|
|
28
|
+
## Hooks
|
|
29
|
+
|
|
30
|
+
`PreToolUse`/`PostToolUse` guard hooks are documented in
|
|
31
|
+
[`agent-architecture.md` § Governance](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/docs/agent-architecture.md#governance).
|
|
32
|
+
`SubagentStop` hooks aren't yet indexed there; this section is the entry
|
|
33
|
+
point for them.
|
|
34
|
+
|
|
35
|
+
### Subagent Completion Guard
|
|
36
|
+
|
|
37
|
+
A `SubagentStop` hook (`hooks/subagent_completion_guard.py`, #2188)
|
|
38
|
+
classifies each dispatched subagent's own transcript tail into `clean`,
|
|
39
|
+
`empty-final-turn`, `truncated-final-turn`, or `unreadable`, and emits a
|
|
40
|
+
`boundary-events.jsonl` "warn" record for the two non-clean, explainable
|
|
41
|
+
outcomes (`empty-final-turn`, `truncated-final-turn`) via
|
|
42
|
+
`hooks/lib/boundary_events.emit_boundary_event`; `clean` and `unreadable`
|
|
43
|
+
stay silent — record-only, never blocking. It runs alongside the plugin's
|
|
44
|
+
other `SubagentStop` hooks, `hooks/cost_meter.py` and
|
|
45
|
+
`hooks/task_completion_metrics.py` (both undocumented as of this entry).
|
|
46
|
+
Classification reads the last JSON row of the subagent's own transcript file
|
|
47
|
+
directly — no sidechain filtering needed, since every row in a subagent's
|
|
48
|
+
own `subagents/agent-<hash>.jsonl` file already belongs to it — and checks
|
|
49
|
+
`message.stop_reason == "max_tokens"` (→ `truncated-final-turn`, checked
|
|
50
|
+
first since a token-limit cutoff can itself produce empty content) before
|
|
51
|
+
falling back to empty/whitespace-only content (→ `empty-final-turn`).
|
|
52
|
+
Fail-open throughout: a missing/unreadable transcript, or a last row missing
|
|
53
|
+
`message`/`content` entirely, classifies as `unreadable` and emits nothing.
|
|
54
|
+
Tests: `tests/hooks/test_subagent_completion_guard.py`.
|
|
55
|
+
|
|
56
|
+
The rest of this page covers the one extension path that touches several of
|
|
57
|
+
these files at once and has no other single writeup: adding a new language to
|
|
58
|
+
the static-analysis suite.
|
|
59
|
+
|
|
60
|
+
## Playbook: adding a static-analysis language
|
|
61
|
+
|
|
62
|
+
The static-analysis suite has two consumption sites that share one registry:
|
|
63
|
+
|
|
64
|
+
- **`/code-review`'s full-repo pre-pass** — the
|
|
65
|
+
[static-analysis-integration skill](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/static-analysis-integration/SKILL.md)
|
|
66
|
+
runs every detected tool over the target set, normalizes output to the
|
|
67
|
+
unified finding envelope, deduplicates, and hands confirmed findings to the
|
|
68
|
+
review agents.
|
|
69
|
+
- **`/build`'s static self-heal pass** — at each review checkpoint, language
|
|
70
|
+
**lanes** fix or surface mechanical findings in the changed files before
|
|
71
|
+
semantic review. The mechanism (scoping, the shared fix loop, the 2-attempt
|
|
72
|
+
cap, detection and provider binding, the degradation ladder) is specified
|
|
73
|
+
once in [`static-self-heal.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/build/references/static-self-heal.md);
|
|
74
|
+
lanes are registered in
|
|
75
|
+
[`tool-configs.md` § Build-time lanes](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/static-analysis-integration/references/tool-configs.md#build-time-lanes).
|
|
76
|
+
|
|
77
|
+
Adding a language means wiring both sites plus the user-facing setup docs.
|
|
78
|
+
The four landed lanes are the worked examples this playbook generalizes from:
|
|
79
|
+
|
|
80
|
+
| Lane | Issue | Autofix slot | Diagnostic slot | Notable shape |
|
|
81
|
+
|---|---|---|---|---|
|
|
82
|
+
| Python | #807 | ruff (SARIF-native) → black + flake8 | mypy (Tier 3 JSON adapter) → pyright (gated) | Two independent slots, each with a recognized-equivalent fallback. |
|
|
83
|
+
| JS/TS | #808 | oxlint → biome → eslint (demoted) | none — verify via autofix check mode | A slow-but-qualified provider bound with granularity demotion. |
|
|
84
|
+
| C# | #809 | `dotnet format` (SDK-builtin) | Roslyn ErrorLog SARIF from the GREEN-confirming build | Diagnostics ride a build the pipeline already pays for. |
|
|
85
|
+
| Java | #810 | none — no fast Java autofixer exists | PMD (SARIF-native) → checkstyle | Diagnostic-only lane; standalone installer (the exception). |
|
|
86
|
+
|
|
87
|
+
**Audience boundary.** This playbook is for plugin maintainers wiring a new
|
|
88
|
+
language *into the plugin*. The
|
|
89
|
+
[per-language setup guide](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/static-analysis-integration/references/language-setup.md)
|
|
90
|
+
is for end users configuring their own repo's toolchain, and it remains the
|
|
91
|
+
single source of truth for install/config/verification commands. The two
|
|
92
|
+
cross-link and never duplicate: your job here includes *adding* that guide's
|
|
93
|
+
new section, not restating its content anywhere else.
|
|
94
|
+
|
|
95
|
+
### First, classify the candidate tool — two independent questions
|
|
96
|
+
|
|
97
|
+
Every candidate tool gets sorted by two axes, and they are genuinely
|
|
98
|
+
independent — knowing one tells you nothing about the other:
|
|
99
|
+
|
|
100
|
+
1. **Output format: SARIF-native, or needs an adapter?** This decides the
|
|
101
|
+
tool's tier in `tool-configs.md`. A tool that emits SARIF is consumed raw
|
|
102
|
+
by the [shared SARIF parser](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/static-analysis-integration/references/sarif-parser.md)
|
|
103
|
+
(Tier 1/2). A tool with only JSON or line-based output needs a bespoke
|
|
104
|
+
adapter (Tier 3), and the budget is hard: **≤ 40 LOC**. If an adapter
|
|
105
|
+
wants to be bigger than that, the tool is fighting the pipeline —
|
|
106
|
+
reconsider the candidate.
|
|
107
|
+
2. **Capability: autofix-capable, or diagnostic-only?** This decides which
|
|
108
|
+
lane **slot** the tool can provide. An autofix tool runs the mechanical
|
|
109
|
+
pre-fix and can double as its own verifier in check mode; a
|
|
110
|
+
diagnostic-only tool feeds findings to the coding agent inside the shared
|
|
111
|
+
fix loop.
|
|
112
|
+
|
|
113
|
+
The worked examples cover all four quadrants: ruff is SARIF-native *and*
|
|
114
|
+
autofix-capable; PMD is SARIF-native but diagnostic-only; mypy needs an
|
|
115
|
+
adapter and is diagnostic-only; `dotnet format` is autofix-capable and needs
|
|
116
|
+
no output format at all, because verification comes from its own
|
|
117
|
+
`--verify-no-changes` mode and from the Roslyn ErrorLog SARIF.
|
|
118
|
+
|
|
119
|
+
Version-pin early, and re-check the format question against the pinned
|
|
120
|
+
version: oxlint was specced as a Tier 3 JSON adapter, but by implementation
|
|
121
|
+
time the pinned release had gained native SARIF, so it landed adapter-free.
|
|
122
|
+
Upstream SARIF support arriving is the cheapest adapter deletion you will
|
|
123
|
+
ever do.
|
|
124
|
+
|
|
125
|
+
### Wiring the `/code-review` side
|
|
126
|
+
|
|
127
|
+
A new tool becomes visible to `/code-review` through an entry in
|
|
128
|
+
[`tool-configs.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/static-analysis-integration/references/tool-configs.md),
|
|
129
|
+
under the tier its output format earned. The existing entries define the
|
|
130
|
+
house metadata shape; a complete entry carries:
|
|
131
|
+
|
|
132
|
+
- **Invocation** — the exact command, SARIF-first.
|
|
133
|
+
- **Install** — the repo-level form (see the install conventions below).
|
|
134
|
+
- **Install hint** — in the skill's fixed format:
|
|
135
|
+
`<tool-name> — <capability-tier>. install: <command>`. This exact string
|
|
136
|
+
is what users see when the tool is missing, so it names the repo-level
|
|
137
|
+
install, never a global one.
|
|
138
|
+
- **Detection** — how presence is probed. Repo-local locations come first,
|
|
139
|
+
then PATH: a project-local `node_modules/.bin` binary or a gitignored tool
|
|
140
|
+
directory must be found even when nothing is user-installed.
|
|
141
|
+
- **Language-conditional dispatch** — the tool is probed, dispatched, and
|
|
142
|
+
its missing-tool hint surfaced *only when matching files are in the target
|
|
143
|
+
set*. A non-Java repo must never see a "pmd missing" warning. Absence is
|
|
144
|
+
never a pipeline failure.
|
|
145
|
+
- **Adapter** — "none" for SARIF-native tools; otherwise the ≤ 40 LOC
|
|
146
|
+
adapter under the skill's `adapters/`, with its field-mapping table in the
|
|
147
|
+
entry. Per the [maintenance policy](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/static-analysis-integration/maintenance.md),
|
|
148
|
+
a SARIF adapter comes first — bespoke JSON only when upstream genuinely
|
|
149
|
+
has no SARIF plan.
|
|
150
|
+
- **Exit-code semantics** — when the tool distinguishes "findings exist"
|
|
151
|
+
from "tool broke" by exit code (PMD exits 4 on violations), the entry says
|
|
152
|
+
so, because the degradation ladder treats the two very differently.
|
|
153
|
+
|
|
154
|
+
Two more pieces ride along with the entry:
|
|
155
|
+
|
|
156
|
+
- **A fixture pair** under `evals/static-analysis-tools/tier1-mocks/<tool>/`
|
|
157
|
+
— a mock tool output plus the expected unified findings. This is the
|
|
158
|
+
regression harness proving the parser (or adapter) reads the tool
|
|
159
|
+
correctly, and the maintenance policy makes it a precondition for adding
|
|
160
|
+
any tool.
|
|
161
|
+
- **A dedup-chain decision.** The pre-pass deduplicates findings across
|
|
162
|
+
tools and keeps the higher-priority source; the chain lives in the skill's
|
|
163
|
+
step 4. Most language-specific tools need no new thought — semgrep already
|
|
164
|
+
outranks them all, and the precedent (recorded on the pmd and Roslyn
|
|
165
|
+
entries) is to revisit only if a *second* source for the same language is
|
|
166
|
+
added. A tool that genuinely overlaps an existing one, as oxlint overlaps
|
|
167
|
+
legacy ESLint, gets an explicit ranking.
|
|
168
|
+
|
|
169
|
+
### Wiring the build-time lane
|
|
170
|
+
|
|
171
|
+
The self-heal pass never gains per-language logic. Everything a lane does —
|
|
172
|
+
how changed files are scoped, how the fix loop retries, when it escalates,
|
|
173
|
+
how providers bind — is specified once in
|
|
174
|
+
[`static-self-heal.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/build/references/static-self-heal.md), and a
|
|
175
|
+
new language plugs in as pure registry data: one subsection under
|
|
176
|
+
`tool-configs.md` § Build-time lanes. If you find yourself writing loop or
|
|
177
|
+
scoping logic for your language, stop — the mechanism doc forbids restating
|
|
178
|
+
it, and an accommodation belongs in the mechanism doc (as with C#'s
|
|
179
|
+
post-hoc SARIF filtering), not in the lane row.
|
|
180
|
+
|
|
181
|
+
A lane row declares:
|
|
182
|
+
|
|
183
|
+
- **Extensions** — the file patterns that route changed files into the lane.
|
|
184
|
+
- **Up to two capability slots** — an **autofix** slot and a **diagnostic**
|
|
185
|
+
slot, either of which may be absent. Missing slots are normal, not
|
|
186
|
+
deficiencies: the degradation ladder runs Java diagnostic-only (no fast
|
|
187
|
+
Java autofixer exists), and JS/TS verifies with the autofix tool's own
|
|
188
|
+
check mode rather than carrying a diagnostic slot.
|
|
189
|
+
- **An ordered provider list per slot** — the default provider first. The
|
|
190
|
+
default doubles as the **last-resort provider**: the one install hints
|
|
191
|
+
name and `/project-init` installs, chosen only when the probe finds no
|
|
192
|
+
recognized provider already configured. This is the bind-don't-replace
|
|
193
|
+
rule — a project that arrives with black + flake8, or checkstyle, or an
|
|
194
|
+
ESLint config keeps its own tool.
|
|
195
|
+
- **A detection probe per provider** — repo-local install locations first,
|
|
196
|
+
then PATH, matching the `/code-review` detection convention.
|
|
197
|
+
- **Scoped invocations** — the fix and verify commands as run against the
|
|
198
|
+
checkpoint's changed-file list, plus any wrapper contract the tool needs
|
|
199
|
+
(PMD requires a `--file-list` temp file and must never be invoked with an
|
|
200
|
+
empty set; `dotnet format` treats an empty `--include` as "format
|
|
201
|
+
everything", which is why the mechanism's empty-partition guarantee is
|
|
202
|
+
load-bearing).
|
|
203
|
+
|
|
204
|
+
Every provider you list must satisfy the mechanism's **provider
|
|
205
|
+
qualification contract**: scoped invocation, machine-readable output within
|
|
206
|
+
the adapter budget, checkpoint-compatible latency, deterministic exit codes.
|
|
207
|
+
A tool that fails the latency item can still bind with its lane demoted to
|
|
208
|
+
slice-boundary granularity — that is how a project's existing ESLint config
|
|
209
|
+
is honored without slowing the per-step loop. Keep provider lists short and
|
|
210
|
+
explicit: every recognized provider is an adapter and a registry row someone
|
|
211
|
+
maintains, and this is deliberately not an open-ended plugin system.
|
|
212
|
+
|
|
213
|
+
### The user-facing setup section and `/project-init`
|
|
214
|
+
|
|
215
|
+
Two more places make the lane usable by people who did not read any of the
|
|
216
|
+
above:
|
|
217
|
+
|
|
218
|
+
- **A language section in [`language-setup.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/static-analysis-integration/references/language-setup.md)**,
|
|
219
|
+
following that guide's "Per-lane section contract": tools and roles,
|
|
220
|
+
repo-level install, configuration, verification, opt-out, and recognized
|
|
221
|
+
equivalent providers, in that order. This is where the actual install and
|
|
222
|
+
verification commands live — the lane row and this playbook link to it
|
|
223
|
+
rather than repeating them.
|
|
224
|
+
- **A `/project-init` lane**, so the one-command scaffold performs the same
|
|
225
|
+
repo-level install the setup section documents manually. Each
|
|
226
|
+
`language-setup.md` section carries the one-line pointer to
|
|
227
|
+
`/project-init`; the guide stays the source of truth for the manual
|
|
228
|
+
commands.
|
|
229
|
+
|
|
230
|
+
### Install conventions
|
|
231
|
+
|
|
232
|
+
The four landed lanes established conventions that new lanes inherit:
|
|
233
|
+
|
|
234
|
+
- **Shipped scripts are Python 3.10+ stdlib-only.** No bash, no Git Bash
|
|
235
|
+
requirement; Windows portability comes from the Python stdlib. See
|
|
236
|
+
[ADR 0014](../../../docs/adr/0014-python-for-cross-os-scripts.md) and
|
|
237
|
+
[ADR 0015](../../../docs/adr/0015-bash-removal-complete.md).
|
|
238
|
+
- **Repo-level over user-level, always.** The install lands in the project's
|
|
239
|
+
own dependency mechanism so the toolchain is versioned with the repo and
|
|
240
|
+
reproducible for every contributor and CI: an npm devDependency (oxlint),
|
|
241
|
+
a venv / dev-requirements entry (ruff, mypy), a `global.json` SDK pin
|
|
242
|
+
(dotnet), or a repo-local gitignored tool directory (`.pmd/`). Never
|
|
243
|
+
`npm install -g`, `pip install --user`, or a global toolchain assumption.
|
|
244
|
+
- **A standalone installer is the exception, not the rule.** Of the four
|
|
245
|
+
lanes, only Java needed one (`plugins/dev-team/scripts/install-java-static-analysis.py`),
|
|
246
|
+
because PMD has no project-level dependency mechanism to ride. Prefer the
|
|
247
|
+
project's own mechanism; write an installer only when none exists.
|
|
248
|
+
- **Idempotent re-runs.** Running the install twice must be safe and cheap —
|
|
249
|
+
an existing install is detected and nothing is re-downloaded.
|
|
250
|
+
- **Single-source version pinning.** The pinned version lives in exactly one
|
|
251
|
+
place (the lockfile, `global.json`, or one constant in the installer), so
|
|
252
|
+
a bump is a one-line change.
|
|
253
|
+
|
|
254
|
+
### Retiring an older tool
|
|
255
|
+
|
|
256
|
+
Bind-don't-replace means older tools do not disappear when a better one
|
|
257
|
+
lands: a project configured for ESLint keeps ESLint, and legacy tools stay
|
|
258
|
+
in the provider list and dedup chain as long as real projects arrive with
|
|
259
|
+
them. Retirement is therefore a deliberate decision, and the precedent to
|
|
260
|
+
copy is the oxlint/ESLint checklist ("When a project may drop ESLint
|
|
261
|
+
entirely" in [`tool-configs.md`](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/static-analysis-integration/references/tool-configs.md))
|
|
262
|
+
— a **decidable** test, not a vibe:
|
|
263
|
+
|
|
264
|
+
1. Every rule the old tool enforces in this project is either covered by the
|
|
265
|
+
new tool's pinned version or explicitly acknowledged as not relied on.
|
|
266
|
+
2. No plugin/extension of the old tool contributes an enabled rule the new
|
|
267
|
+
tool lacks (framework ESLint plugins were the real blocker there).
|
|
268
|
+
3. A one-time dual run over the repo shows the old tool reporting nothing
|
|
269
|
+
the new tool misses.
|
|
270
|
+
|
|
271
|
+
Until all three hold, both tools run, with overlap suppressed (the
|
|
272
|
+
`eslint-plugin-oxlint` pattern) and the dedup chain ranking the newer tool
|
|
273
|
+
higher. The same shape applies to any successor pair — Ruff replacing
|
|
274
|
+
pylint/flake8 followed it: the legacy Python entry was retired outright only
|
|
275
|
+
once ruff covered the surface, while black + flake8 remain a recognized
|
|
276
|
+
*provider pair* for projects that arrive with them. Retiring a tool from the
|
|
277
|
+
plugin (deleting its entry and adapter) additionally follows the
|
|
278
|
+
[adapter deprecation policy](https://github.com/bdfinst/agentic-dev-team/blob/main/plugins/dev-team/skills/static-analysis-integration/maintenance.md):
|
|
279
|
+
demote, warn, then remove at the next major contract version — never a
|
|
280
|
+
silent deletion.
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 600 520" font-family="system-ui, -apple-system, 'Segoe UI', sans-serif">
|
|
2
|
+
<defs>
|
|
3
|
+
<filter id="shadow" x="-4%" y="-4%" width="108%" height="116%">
|
|
4
|
+
<feDropShadow dx="0" dy="2" stdDeviation="3" flood-color="#000" flood-opacity="0.07"/>
|
|
5
|
+
</filter>
|
|
6
|
+
<marker id="arrow" viewBox="0 0 10 8" refX="9" refY="4" markerWidth="8" markerHeight="6" orient="auto-start-reverse">
|
|
7
|
+
<path d="M0,0 L10,4 L0,8 Z" fill="#94A3B8"/>
|
|
8
|
+
</marker>
|
|
9
|
+
<marker id="arrow-red" viewBox="0 0 10 8" refX="9" refY="4" markerWidth="8" markerHeight="6" orient="auto-start-reverse">
|
|
10
|
+
<path d="M0,0 L10,4 L0,8 Z" fill="#F43F5E"/>
|
|
11
|
+
</marker>
|
|
12
|
+
</defs>
|
|
13
|
+
|
|
14
|
+
<!-- Light background so the diagram stays readable in dark-mode docs -->
|
|
15
|
+
<rect width="600" height="520" fill="#ffffff"/>
|
|
16
|
+
|
|
17
|
+
<!-- User Request -->
|
|
18
|
+
<g filter="url(#shadow)">
|
|
19
|
+
<rect x="215" y="12" width="170" height="44" rx="22" fill="#F8FAFC" stroke="#CBD5E1" stroke-width="1.5"/>
|
|
20
|
+
<text x="300" y="39" text-anchor="middle" font-size="13" font-weight="500" fill="#475569">User Request</text>
|
|
21
|
+
</g>
|
|
22
|
+
|
|
23
|
+
<!-- Arrow -->
|
|
24
|
+
<line x1="300" y1="56" x2="300" y2="78" stroke="#94A3B8" stroke-width="2" marker-end="url(#arrow)"/>
|
|
25
|
+
|
|
26
|
+
<!-- Orchestrator -->
|
|
27
|
+
<g filter="url(#shadow)">
|
|
28
|
+
<rect x="195" y="82" width="210" height="52" rx="12" fill="#EEF2FF" stroke="#6366F1" stroke-width="1.5"/>
|
|
29
|
+
<rect x="195" y="82" width="5" height="52" rx="2.5" fill="#6366F1"/>
|
|
30
|
+
<text x="300" y="113" text-anchor="middle" font-size="14" font-weight="600" fill="#1E293B">Orchestrator</text>
|
|
31
|
+
</g>
|
|
32
|
+
|
|
33
|
+
<!-- Branches from Orchestrator -->
|
|
34
|
+
<line x1="258" y1="134" x2="158" y2="166" stroke="#94A3B8" stroke-width="2" marker-end="url(#arrow)"/>
|
|
35
|
+
<line x1="342" y1="134" x2="358" y2="166" stroke="#94A3B8" stroke-width="2" marker-end="url(#arrow)"/>
|
|
36
|
+
|
|
37
|
+
<!-- Model Tier Resolution (PreToolUse hook) -->
|
|
38
|
+
<g filter="url(#shadow)">
|
|
39
|
+
<rect x="65" y="170" width="170" height="48" rx="12" fill="#F5F3FF" stroke="#8B5CF6" stroke-width="1.5"/>
|
|
40
|
+
<rect x="65" y="170" width="5" height="48" rx="2.5" fill="#8B5CF6"/>
|
|
41
|
+
<text x="150" y="194" text-anchor="middle" font-size="12" font-weight="600" fill="#1E293B">Model Tier Resolution</text>
|
|
42
|
+
<text x="150" y="208" text-anchor="middle" font-size="10" font-weight="400" fill="#475569">(PreToolUse hook)</text>
|
|
43
|
+
</g>
|
|
44
|
+
|
|
45
|
+
<!-- Agent Selection -->
|
|
46
|
+
<g filter="url(#shadow)">
|
|
47
|
+
<rect x="275" y="170" width="170" height="48" rx="12" fill="#EFF6FF" stroke="#3B82F6" stroke-width="1.5"/>
|
|
48
|
+
<rect x="275" y="170" width="5" height="48" rx="2.5" fill="#3B82F6"/>
|
|
49
|
+
<text x="360" y="199" text-anchor="middle" font-size="13" font-weight="600" fill="#1E293B">Agent Selection</text>
|
|
50
|
+
</g>
|
|
51
|
+
|
|
52
|
+
<!-- Merge arrows down -->
|
|
53
|
+
<line x1="150" y1="218" x2="300" y2="248" stroke="#94A3B8" stroke-width="2"/>
|
|
54
|
+
<line x1="360" y1="218" x2="300" y2="248" stroke="#94A3B8" stroke-width="2" marker-end="url(#arrow)"/>
|
|
55
|
+
|
|
56
|
+
<!-- Task Execution -->
|
|
57
|
+
<g filter="url(#shadow)">
|
|
58
|
+
<rect x="190" y="252" width="220" height="52" rx="12" fill="#ECFDF5" stroke="#10B981" stroke-width="1.5"/>
|
|
59
|
+
<rect x="190" y="252" width="5" height="52" rx="2.5" fill="#10B981"/>
|
|
60
|
+
<text x="300" y="274" text-anchor="middle" font-size="13" font-weight="600" fill="#1E293B">Task Execution</text>
|
|
61
|
+
<text x="300" y="292" text-anchor="middle" font-size="11" fill="#64748B">Coding Agent</text>
|
|
62
|
+
</g>
|
|
63
|
+
|
|
64
|
+
<!-- Arrow down -->
|
|
65
|
+
<line x1="300" y1="304" x2="300" y2="330" stroke="#94A3B8" stroke-width="2" marker-end="url(#arrow)"/>
|
|
66
|
+
|
|
67
|
+
<!-- Inline Review -->
|
|
68
|
+
<g filter="url(#shadow)">
|
|
69
|
+
<rect x="170" y="334" width="260" height="52" rx="12" fill="#FDF2F8" stroke="#EC4899" stroke-width="1.5"/>
|
|
70
|
+
<rect x="170" y="334" width="5" height="52" rx="2.5" fill="#EC4899"/>
|
|
71
|
+
<text x="300" y="356" text-anchor="middle" font-size="13" font-weight="600" fill="#1E293B">Inline Review Checkpoint</text>
|
|
72
|
+
<text x="300" y="374" text-anchor="middle" font-size="11" fill="#64748B">Targeted Review Agents</text>
|
|
73
|
+
</g>
|
|
74
|
+
|
|
75
|
+
<!-- Fail loop back -->
|
|
76
|
+
<path d="M170,360 C100,360 100,278 190,278" stroke="#F43F5E" stroke-width="2" fill="none" stroke-dasharray="6,3" marker-end="url(#arrow-red)"/>
|
|
77
|
+
<text x="95" y="315" text-anchor="middle" font-size="10" fill="#F43F5E">fail</text>
|
|
78
|
+
<text x="95" y="328" text-anchor="middle" font-size="9" fill="#F43F5E">(max 5x)</text>
|
|
79
|
+
|
|
80
|
+
<!-- Escalate -->
|
|
81
|
+
<line x1="430" y1="360" x2="490" y2="360" stroke="#F43F5E" stroke-width="2" stroke-dasharray="6,3" marker-end="url(#arrow-red)"/>
|
|
82
|
+
<g filter="url(#shadow)">
|
|
83
|
+
<rect x="490" y="340" width="100" height="40" rx="20" fill="#FEF2F2" stroke="#F43F5E" stroke-width="1.5"/>
|
|
84
|
+
<text x="540" y="365" text-anchor="middle" font-size="11" font-weight="500" fill="#DC2626">Escalate</text>
|
|
85
|
+
</g>
|
|
86
|
+
<text x="460" y="352" text-anchor="middle" font-size="9" fill="#F43F5E">still fail</text>
|
|
87
|
+
|
|
88
|
+
<!-- Pass arrow down -->
|
|
89
|
+
<line x1="300" y1="386" x2="300" y2="415" stroke="#94A3B8" stroke-width="2" marker-end="url(#arrow)"/>
|
|
90
|
+
<text x="320" y="404" font-size="10" fill="#10B981">pass / warn</text>
|
|
91
|
+
|
|
92
|
+
<!-- Learning Loop -->
|
|
93
|
+
<g filter="url(#shadow)">
|
|
94
|
+
<rect x="195" y="420" width="210" height="48" rx="12" fill="#F8FAFC" stroke="#64748B" stroke-width="1.5"/>
|
|
95
|
+
<rect x="195" y="420" width="5" height="48" rx="2.5" fill="#64748B"/>
|
|
96
|
+
<text x="300" y="449" text-anchor="middle" font-size="13" font-weight="600" fill="#1E293B">Learning Loop</text>
|
|
97
|
+
</g>
|
|
98
|
+
|
|
99
|
+
<!-- Loop back to orchestrator -->
|
|
100
|
+
<path d="M405,444 C520,444 520,108 405,108" stroke="#94A3B8" stroke-width="2" fill="none" marker-end="url(#arrow)"/>
|
|
101
|
+
</svg>
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 900 480" font-family="system-ui, -apple-system, 'Segoe UI', sans-serif">
|
|
2
|
+
<defs>
|
|
3
|
+
<filter id="shadow" x="-4%" y="-4%" width="108%" height="116%">
|
|
4
|
+
<feDropShadow dx="0" dy="2" stdDeviation="3" flood-color="#000" flood-opacity="0.07"/>
|
|
5
|
+
</filter>
|
|
6
|
+
<marker id="arrow" viewBox="0 0 10 8" refX="9" refY="4" markerWidth="8" markerHeight="6" orient="auto-start-reverse">
|
|
7
|
+
<path d="M0,0 L10,4 L0,8 Z" fill="#94A3B8"/>
|
|
8
|
+
</marker>
|
|
9
|
+
<marker id="arrow-green" viewBox="0 0 10 8" refX="9" refY="4" markerWidth="8" markerHeight="6" orient="auto-start-reverse">
|
|
10
|
+
<path d="M0,0 L10,4 L0,8 Z" fill="#10B981"/>
|
|
11
|
+
</marker>
|
|
12
|
+
<marker id="arrow-red" viewBox="0 0 10 8" refX="9" refY="4" markerWidth="8" markerHeight="6" orient="auto-start-reverse">
|
|
13
|
+
<path d="M0,0 L10,4 L0,8 Z" fill="#F43F5E"/>
|
|
14
|
+
</marker>
|
|
15
|
+
</defs>
|
|
16
|
+
|
|
17
|
+
<!-- Light background so the diagram stays readable in dark-mode docs -->
|
|
18
|
+
<rect width="900" height="480" fill="#ffffff"/>
|
|
19
|
+
|
|
20
|
+
<!-- Orchestrator -->
|
|
21
|
+
<g filter="url(#shadow)">
|
|
22
|
+
<rect x="16" y="190" width="160" height="52" rx="12" fill="#6366F1" stroke="#4F46E5" stroke-width="1"/>
|
|
23
|
+
<text x="96" y="213" text-anchor="middle" font-size="13" font-weight="600" fill="#FFF">Orchestrator</text>
|
|
24
|
+
<text x="96" y="229" text-anchor="middle" font-size="10" fill="#C7D2FE">Agent Dispatch</text>
|
|
25
|
+
</g>
|
|
26
|
+
|
|
27
|
+
<!-- Arrow to spec-compliance -->
|
|
28
|
+
<line x1="176" y1="216" x2="210" y2="216" stroke="#94A3B8" stroke-width="2" marker-end="url(#arrow)"/>
|
|
29
|
+
<text x="193" y="208" text-anchor="middle" font-size="9" fill="#64748B">all</text>
|
|
30
|
+
|
|
31
|
+
<!-- Spec Compliance (first gate) -->
|
|
32
|
+
<g filter="url(#shadow)">
|
|
33
|
+
<rect x="214" y="190" width="180" height="52" rx="12" fill="#EEF2FF" stroke="#6366F1" stroke-width="1.5"/>
|
|
34
|
+
<rect x="214" y="190" width="5" height="52" rx="2.5" fill="#6366F1"/>
|
|
35
|
+
<text x="304" y="213" text-anchor="middle" font-size="12" font-weight="600" fill="#1E293B">spec-compliance</text>
|
|
36
|
+
<text x="304" y="229" text-anchor="middle" font-size="10" fill="#6366F1">sonnet</text>
|
|
37
|
+
</g>
|
|
38
|
+
|
|
39
|
+
<!-- Pass arrow to Quality Gate -->
|
|
40
|
+
<line x1="394" y1="216" x2="430" y2="216" stroke="#10B981" stroke-width="2" marker-end="url(#arrow-green)"/>
|
|
41
|
+
<text x="412" y="208" text-anchor="middle" font-size="9" fill="#10B981">pass</text>
|
|
42
|
+
|
|
43
|
+
<!-- Quality Gate label -->
|
|
44
|
+
<g filter="url(#shadow)">
|
|
45
|
+
<rect x="434" y="190" width="120" height="52" rx="12" fill="#ECFDF5" stroke="#10B981" stroke-width="1.5"/>
|
|
46
|
+
<text x="494" y="221" text-anchor="middle" font-size="13" font-weight="600" fill="#065F46">Quality Gate</text>
|
|
47
|
+
</g>
|
|
48
|
+
|
|
49
|
+
<!-- Fail arrow back -->
|
|
50
|
+
<path d="M304,242 L304,262 L96,262 L96,242" stroke="#F43F5E" stroke-width="1.5" fill="none" stroke-dasharray="5,3" marker-end="url(#arrow-red)"/>
|
|
51
|
+
<text x="200" y="276" text-anchor="middle" font-size="9" fill="#F43F5E">fail → correction</text>
|
|
52
|
+
|
|
53
|
+
<!-- Fan-out lines from Quality Gate to agents -->
|
|
54
|
+
<line x1="554" y1="200" x2="630" y2="42" stroke="#CBD5E1" stroke-width="1.5"/>
|
|
55
|
+
<line x1="554" y1="206" x2="630" y2="102" stroke="#CBD5E1" stroke-width="1.5"/>
|
|
56
|
+
<line x1="554" y1="213" x2="630" y2="162" stroke="#CBD5E1" stroke-width="1.5"/>
|
|
57
|
+
<line x1="554" y1="219" x2="630" y2="222" stroke="#CBD5E1" stroke-width="1.5"/>
|
|
58
|
+
<line x1="554" y1="226" x2="630" y2="282" stroke="#CBD5E1" stroke-width="1.5"/>
|
|
59
|
+
<line x1="554" y1="232" x2="630" y2="342" stroke="#CBD5E1" stroke-width="1.5"/>
|
|
60
|
+
|
|
61
|
+
<!-- Trigger labels (left of agents) -->
|
|
62
|
+
<text x="588" y="40" text-anchor="middle" font-size="8" fill="#94A3B8">JS/TS</text>
|
|
63
|
+
<text x="588" y="100" text-anchor="middle" font-size="8" fill="#94A3B8">Tests</text>
|
|
64
|
+
<text x="588" y="160" text-anchor="middle" font-size="8" fill="#94A3B8">API/auth</text>
|
|
65
|
+
<text x="588" y="220" text-anchor="middle" font-size="8" fill="#94A3B8">Domain</text>
|
|
66
|
+
<text x="588" y="280" text-anchor="middle" font-size="8" fill="#94A3B8">UI</text>
|
|
67
|
+
<text x="588" y="340" text-anchor="middle" font-size="8" fill="#94A3B8">All</text>
|
|
68
|
+
|
|
69
|
+
<!-- Review agents (right column) -->
|
|
70
|
+
<!-- naming-review (haiku) -->
|
|
71
|
+
<g filter="url(#shadow)">
|
|
72
|
+
<rect x="630" y="20" width="180" height="44" rx="10" fill="#F8FAFC" stroke="#94A3B8" stroke-width="1"/>
|
|
73
|
+
<rect x="630" y="20" width="4" height="44" rx="2" fill="#94A3B8"/>
|
|
74
|
+
<text x="720" y="40" text-anchor="middle" font-size="11" font-weight="600" fill="#1E293B">naming-review</text>
|
|
75
|
+
<text x="720" y="54" text-anchor="middle" font-size="9" fill="#94A3B8">haiku</text>
|
|
76
|
+
</g>
|
|
77
|
+
|
|
78
|
+
<!-- test-review (sonnet) -->
|
|
79
|
+
<g filter="url(#shadow)">
|
|
80
|
+
<rect x="630" y="80" width="180" height="44" rx="10" fill="#EFF6FF" stroke="#3B82F6" stroke-width="1"/>
|
|
81
|
+
<rect x="630" y="80" width="4" height="44" rx="2" fill="#3B82F6"/>
|
|
82
|
+
<text x="720" y="100" text-anchor="middle" font-size="11" font-weight="600" fill="#1E293B">test-review</text>
|
|
83
|
+
<text x="720" y="114" text-anchor="middle" font-size="9" fill="#3B82F6">sonnet</text>
|
|
84
|
+
</g>
|
|
85
|
+
|
|
86
|
+
<!-- security-review (opus) -->
|
|
87
|
+
<g filter="url(#shadow)">
|
|
88
|
+
<rect x="630" y="140" width="180" height="44" rx="10" fill="#FEF2F2" stroke="#EF4444" stroke-width="1"/>
|
|
89
|
+
<rect x="630" y="140" width="4" height="44" rx="2" fill="#EF4444"/>
|
|
90
|
+
<text x="720" y="160" text-anchor="middle" font-size="11" font-weight="600" fill="#1E293B">security-review</text>
|
|
91
|
+
<text x="720" y="174" text-anchor="middle" font-size="9" fill="#EF4444">opus</text>
|
|
92
|
+
</g>
|
|
93
|
+
|
|
94
|
+
<!-- domain-review (opus) -->
|
|
95
|
+
<g filter="url(#shadow)">
|
|
96
|
+
<rect x="630" y="200" width="180" height="44" rx="10" fill="#FEF2F2" stroke="#EF4444" stroke-width="1"/>
|
|
97
|
+
<rect x="630" y="200" width="4" height="44" rx="2" fill="#EF4444"/>
|
|
98
|
+
<text x="720" y="220" text-anchor="middle" font-size="11" font-weight="600" fill="#1E293B">domain-review</text>
|
|
99
|
+
<text x="720" y="234" text-anchor="middle" font-size="9" fill="#EF4444">opus</text>
|
|
100
|
+
</g>
|
|
101
|
+
|
|
102
|
+
<!-- a11y-review (sonnet) -->
|
|
103
|
+
<g filter="url(#shadow)">
|
|
104
|
+
<rect x="630" y="260" width="180" height="44" rx="10" fill="#EFF6FF" stroke="#3B82F6" stroke-width="1"/>
|
|
105
|
+
<rect x="630" y="260" width="4" height="44" rx="2" fill="#3B82F6"/>
|
|
106
|
+
<text x="720" y="280" text-anchor="middle" font-size="11" font-weight="600" fill="#1E293B">a11y-review</text>
|
|
107
|
+
<text x="720" y="294" text-anchor="middle" font-size="9" fill="#3B82F6">sonnet</text>
|
|
108
|
+
</g>
|
|
109
|
+
|
|
110
|
+
<!-- structure-review (sonnet) -->
|
|
111
|
+
<g filter="url(#shadow)">
|
|
112
|
+
<rect x="630" y="320" width="180" height="44" rx="10" fill="#EFF6FF" stroke="#3B82F6" stroke-width="1"/>
|
|
113
|
+
<rect x="630" y="320" width="4" height="44" rx="2" fill="#3B82F6"/>
|
|
114
|
+
<text x="720" y="340" text-anchor="middle" font-size="11" font-weight="600" fill="#1E293B">structure-review</text>
|
|
115
|
+
<text x="720" y="354" text-anchor="middle" font-size="9" fill="#3B82F6">sonnet</text>
|
|
116
|
+
</g>
|
|
117
|
+
|
|
118
|
+
<!-- Aggregate -->
|
|
119
|
+
<line x1="810" y1="42" x2="850" y2="216" stroke="#CBD5E1" stroke-width="1"/>
|
|
120
|
+
<line x1="810" y1="102" x2="850" y2="216" stroke="#CBD5E1" stroke-width="1"/>
|
|
121
|
+
<line x1="810" y1="162" x2="850" y2="216" stroke="#CBD5E1" stroke-width="1"/>
|
|
122
|
+
<line x1="810" y1="222" x2="850" y2="216" stroke="#CBD5E1" stroke-width="1"/>
|
|
123
|
+
<line x1="810" y1="282" x2="850" y2="216" stroke="#CBD5E1" stroke-width="1"/>
|
|
124
|
+
<line x1="810" y1="342" x2="850" y2="216" stroke="#CBD5E1" stroke-width="1"/>
|
|
125
|
+
|
|
126
|
+
<!-- Aggregate diamond -->
|
|
127
|
+
<polygon points="850,196 870,216 850,236 830,216" fill="#FFF7ED" stroke="#F97316" stroke-width="1.5" filter="url(#shadow)"/>
|
|
128
|
+
<text x="850" y="220" text-anchor="middle" font-size="8" font-weight="600" fill="#C2410C">AGG</text>
|
|
129
|
+
|
|
130
|
+
<!-- Legend -->
|
|
131
|
+
<g transform="translate(16, 440)">
|
|
132
|
+
<rect x="0" y="0" width="12" height="12" rx="3" fill="#F8FAFC" stroke="#94A3B8" stroke-width="1"/>
|
|
133
|
+
<text x="18" y="10" font-size="10" fill="#64748B">haiku (fast, pattern-matching)</text>
|
|
134
|
+
<rect x="220" y="0" width="12" height="12" rx="3" fill="#EFF6FF" stroke="#3B82F6" stroke-width="1"/>
|
|
135
|
+
<text x="238" y="10" font-size="10" fill="#64748B">sonnet (semantic analysis)</text>
|
|
136
|
+
<rect x="440" y="0" width="12" height="12" rx="3" fill="#FEF2F2" stroke="#EF4444" stroke-width="1"/>
|
|
137
|
+
<text x="458" y="10" font-size="10" fill="#64748B">opus (cross-file reasoning)</text>
|
|
138
|
+
</g>
|
|
139
|
+
</svg>
|