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,122 @@
|
|
|
1
|
+
# Exploratory Testing Field Guide
|
|
2
|
+
|
|
3
|
+
Source: *Explore It!* by Elisabeth Hendrickson (Pragmatic Programmers, 2013).
|
|
4
|
+
Reference for `skills/exploratory-testing/SKILL.md`. Protocol lives in the skill; frameworks live here.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 1. Charter Quality (§2.3–2.4)
|
|
9
|
+
|
|
10
|
+
**Format**: `Explore [target] with [approach] to discover [concern]`
|
|
11
|
+
|
|
12
|
+
**Anti-patterns**:
|
|
13
|
+
|
|
14
|
+
| Anti-pattern | Example |
|
|
15
|
+
|-------------|---------|
|
|
16
|
+
| Too specific — becomes a test case | "Explore editing with value O'Malley to check apostrophe handling" |
|
|
17
|
+
| Too broad — infinite scope, never done | "Explore system security with all hacking tools to find any holes" |
|
|
18
|
+
| Missing "with" — no approach specified | "Explore /payments to find bugs" |
|
|
19
|
+
| Missing "to discover" — no risk hypothesis | "Explore auth with boundary inputs" |
|
|
20
|
+
|
|
21
|
+
Fix for too-broad charters: split into multiple focused charters, one area or concern each.
|
|
22
|
+
|
|
23
|
+
**Charter generation sources**:
|
|
24
|
+
|
|
25
|
+
| Source | Signal | Example |
|
|
26
|
+
|--------|--------|---------|
|
|
27
|
+
| Requirements discussions | Ambiguity, "I'll have to think about that" | "Explore username editing with invalid characters to discover if constraints are enforced" |
|
|
28
|
+
| Implicit expectations | Security model, performance, reliability — never stated | "Explore the new feature with high-volume inputs to discover performance regressions" |
|
|
29
|
+
| Stakeholder questions | Risk questions raised during design | "Explore billing with sequence variations to discover double-billing conditions" |
|
|
30
|
+
| Existing artifacts | Code comments, bug database, support logs | "Explore the payment flow with bug #4231 edge cases to discover if the fix holds" |
|
|
31
|
+
| Mid-session discoveries | Off-charter temptations — each is a new charter | "Explore /api/orders with the same error-format probe to discover cross-endpoint inconsistency" |
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## 2. Exploration Without a GUI (Ch. 10)
|
|
36
|
+
|
|
37
|
+
All techniques apply to APIs, CLIs, batch programs, libraries — any interface.
|
|
38
|
+
|
|
39
|
+
**Variable identification (pre-probe)**:
|
|
40
|
+
|
|
41
|
+
| Dimension | What to vary |
|
|
42
|
+
|-----------|-------------|
|
|
43
|
+
| Parameters | Count, names, order |
|
|
44
|
+
| Values | Boundary, null/empty/zero, special characters |
|
|
45
|
+
| Data types | String, number, boolean, null, object, array, mixed |
|
|
46
|
+
| Sizes | Short, typical, very long, maximum |
|
|
47
|
+
| Character sets | ASCII, Unicode, accented, CJK, nonprinting, whitespace variants |
|
|
48
|
+
| Combinations | Valid × invalid, valid × boundary, multiple invalid at once |
|
|
49
|
+
|
|
50
|
+
**Type variation probes** (extends Goldilocks):
|
|
51
|
+
|
|
52
|
+
| Input | Finds |
|
|
53
|
+
|-------|-------|
|
|
54
|
+
| `null` | Missing null checks, NPE |
|
|
55
|
+
| `""` (empty string) | Empty-string handling distinct from null |
|
|
56
|
+
| `0` / `[]` / `{}` | Zero-value edge cases |
|
|
57
|
+
| Wrong type | Type coercion bugs, implicit conversion surprises |
|
|
58
|
+
| Very large value / long string | Performance degradation (O(n²)), buffer issues, truncation → triggers Telemetry Deepening |
|
|
59
|
+
| `Infinity`, `NaN`, `-0` | Numeric edge cases in calculations |
|
|
60
|
+
| Unicode / accented / CJK | Encoding bugs, collation issues |
|
|
61
|
+
| Nonprinting / whitespace variants | Trim/strip inconsistencies |
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## 3. State Modeling (Ch. 8)
|
|
66
|
+
|
|
67
|
+
**State detection — Jorgensen's 3 questions** (ask after each probe):
|
|
68
|
+
|
|
69
|
+
1. Are there things I could do now that I could not do before?
|
|
70
|
+
2. Are there things I cannot do now that I could do before?
|
|
71
|
+
3. Do my actions have different results now than before?
|
|
72
|
+
|
|
73
|
+
**"While" language cue**: any sentence using *while* in requirements or comments identifies a state.
|
|
74
|
+
Examples: "while the account is suspended", "while the system is importing data".
|
|
75
|
+
|
|
76
|
+
**Event taxonomy**:
|
|
77
|
+
|
|
78
|
+
| Type | Description | Why it matters |
|
|
79
|
+
|------|-------------|----------------|
|
|
80
|
+
| User action | Explicit input triggering a transition | Most obvious; usually already tested |
|
|
81
|
+
| System-generated | Background activity completing (auth, data load, job) | Creates interstitial states — narrow windows of vulnerability |
|
|
82
|
+
| Time-based | Timeouts, expiry, scheduled operations | Hard to reproduce; race-condition source |
|
|
83
|
+
|
|
84
|
+
**State model strategies**:
|
|
85
|
+
|
|
86
|
+
| Strategy | Rule |
|
|
87
|
+
|----------|------|
|
|
88
|
+
| Narrow your focus | One target; if you can't name it simply, split it |
|
|
89
|
+
| Identify a perspective | User vs. system perspective → different states |
|
|
90
|
+
| Dial abstraction | Small target → map substates; large target → lump into one named state |
|
|
91
|
+
|
|
92
|
+
**Transition probe set** (Slice 2):
|
|
93
|
+
|
|
94
|
+
- Valid forward transitions
|
|
95
|
+
- Reverse transitions
|
|
96
|
+
- Skipped transitions (A → C, bypassing B)
|
|
97
|
+
- Invalid transitions (action valid only in another state)
|
|
98
|
+
- Time-based transitions (trigger timeout; probe during interstitial)
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## 4. Iterative Probe-Learn-Probe
|
|
103
|
+
|
|
104
|
+
1. Identify variables — what can vary in this target?
|
|
105
|
+
2. Start obvious — confirm happy path before diverging
|
|
106
|
+
3. Follow surprises — vary the parameters that produced unexpected results
|
|
107
|
+
4. Off-charter temptations — record as new charters; stay in current session
|
|
108
|
+
5. Budget awareness — allocate remaining probes to highest-risk variables
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## 5. Implicit Expectations
|
|
113
|
+
|
|
114
|
+
Stakeholders never state these because they assume they're obvious — highest-value adversarial targets:
|
|
115
|
+
|
|
116
|
+
| Implicit expectation | Adversarial lens |
|
|
117
|
+
|---------------------|-----------------|
|
|
118
|
+
| Security model applies to all features | Authorization bypass |
|
|
119
|
+
| Data operations must not corrupt state | Data integrity |
|
|
120
|
+
| System safe under concurrent use | Timing / ordering |
|
|
121
|
+
| Performance acceptable at scale | Size variation → Telemetry Deepening |
|
|
122
|
+
| Crashes never acceptable | Null / type variation |
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Failure-Class Routing
|
|
2
|
+
|
|
3
|
+
Read at the start of each repair iteration in `/build` step 4 (per-behavior
|
|
4
|
+
cycle, review-fix loop) and `/apply-fixes` step 4 (per-fix validation).
|
|
5
|
+
Classify the failing output/exit code by regex — deterministic, no LLM call,
|
|
6
|
+
no extra dispatch. Only the route changes; iteration caps never rise and a
|
|
7
|
+
route switch never resets the shared budget.
|
|
8
|
+
|
|
9
|
+
## Classification Table
|
|
10
|
+
|
|
11
|
+
| Signature pattern | Class | Route | Escalation |
|
|
12
|
+
|---|---|---|---|
|
|
13
|
+
| `SyntaxError\|error TS\d+\|cannot find symbol\|ParseError\|unexpected token`; compiler exit 2 | `compile-syntax` | inline fix | Stays inline on repeat — no ambiguity left to diagnose. |
|
|
14
|
+
| Named test fails again after one inline attempt; `AssertionError\|expect\(.*\)\.to\|FAILED .*::test_` | `behavioral-test` | inline fix (1st time) | Same test fails again → systematic-debugging, not another blind retry. |
|
|
15
|
+
| `coverage.*below threshold\|Statements.*% \(< \|branch coverage .* below` | `coverage-gap` | test-generation (qa-engineer / test-improve-style) | Repeats → escalate to human (threshold may be miscalibrated). |
|
|
16
|
+
| `eslint\|prettier\|black --check\|ruff\|gofmt` non-zero, style-only diagnostics | `lint-format` | inline fix | Repeats → generic fall-through (likely config, not code). |
|
|
17
|
+
| Security-review finding (secrets, injection, auth bypass) surfaces during validation | `security-finding` | security-engineer (`/build`: dispatch, effort high; `/apply-fixes`: annotate only — no Agent/Skill grant) | Never downgrades to inline; unresolved after dispatch → human arbitration. |
|
|
18
|
+
| Two+ reviewers disagree on the same finding/fix | `reviewer-conflict` | human arbitration (existing escalation: interactive ask; non-interactive hard stop to `.claude/memory/build-escalation-<slug>.md`) | Never auto-resolved by picking a side. |
|
|
19
|
+
| No pattern matches | `unclassified` | generic loop (fall-through, unchanged) | None — identical to pre-routing behavior. |
|
|
20
|
+
|
|
21
|
+
## Notes
|
|
22
|
+
|
|
23
|
+
- `/build`: classification *is* the diagnosis step orchestrator constraint 7
|
|
24
|
+
already requires — not an added step.
|
|
25
|
+
- `/apply-fixes` has no `Agent`/`Skill` grant: non-inline routes annotate the
|
|
26
|
+
Fix Summary with class + recommended route and move on — never dispatch.
|
|
27
|
+
- A route switch (e.g. inline → systematic-debugging) spends from the same
|
|
28
|
+
5-iteration cap / 2-correction-iteration checkpoint — never extends or resets it.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Fixture Construction
|
|
2
|
+
|
|
3
|
+
Reference file for `test-review`, `test-smell-review`, and the `test-design-advisor` skill. Where `test-strategy.md` decides *which* fixture (lifecycle Fresh/Shared, design Minimal/Standard), this file covers *how* the fixture is built and disposed — the construction mechanics that realize that strategy and fix fixture smells at the root.
|
|
4
|
+
|
|
5
|
+
Source: Gerard Meszaros, *xUnit Test Patterns* (xunitpatterns.com) — Fixture Setup + Fixture Teardown pattern families. Language- and framework-agnostic — described by role, not any library's API.
|
|
6
|
+
|
|
7
|
+
Core principle: **build only what this test needs, through intent-revealing construction, and release everything the test created.** Hide irrelevant detail; surface what matters to the behavior under test.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 1. Construction patterns (how the fixture object is built)
|
|
12
|
+
|
|
13
|
+
| Pattern | What it is | Use when | Cost / risk |
|
|
14
|
+
|---|---|---|---|
|
|
15
|
+
| **Creation Method** | An intent-revealing factory that builds *and returns* the fixture (`anOverdueAccount()`), hiding irrelevant constructor detail | **Default.** Removes Irrelevant Information and Test Code Duplication | — (the safe first move) |
|
|
16
|
+
| **Test Data Builder** | A fluent builder with sensible defaults; each test overrides only the attribute that matters (`anAccount().overdrawn().build()`) | Objects with many attributes, where tests vary one or two | Slightly more code than a Creation Method; worth it past a few variations |
|
|
17
|
+
| **Object Mother** | A library of *named canonical* fixtures shared across tests (`Customers.goldTier()`) | A small set of genuinely shared, well-understood standard cases | Tends to grow into a **General Fixture** — each test gets more than it needs; keep it minimal |
|
|
18
|
+
|
|
19
|
+
**Decision:** Creation Method by default → Test Data Builder when attributes vary per test → Object Mother only for a few genuinely canonical cases. Prefer building through the SUT's public API; if the fixture cannot be constructed that way, that is a **production-code** problem — introduce a seam per `testability-patterns.md`, never reflection or `InternalsVisibleTo`.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 2. Setup location (where construction runs)
|
|
24
|
+
|
|
25
|
+
| Location | What it is | Trade-off vs Fresh Fixture isolation |
|
|
26
|
+
|---|---|---|
|
|
27
|
+
| **In-line Setup** | Each test builds its own fixture in the test body | Maximum clarity & isolation; duplication if many tests share shape → extract a Creation Method |
|
|
28
|
+
| **Delegated Setup** | Tests call shared Creation Methods, but from the test body | Removes duplication while keeping each test's setup explicit — usually the sweet spot |
|
|
29
|
+
| **Implicit Setup** | A per-test hook (`setUp`/`beforeEach`) builds the fixture for every test in the class | Concise, but can drift into **General Fixture**/**Mystery Guest** if it builds more than some tests use |
|
|
30
|
+
| **Lazy Setup** | The fixture is created on first use and memoized | Useful for an expensive read-only fixture; risks shared mutable state if not truly read-only |
|
|
31
|
+
| **SuiteFixture Setup** | One fixture built once per *suite* of classes | Last resort for very expensive setup; couples tests across classes — pairs with an Immutable Shared Fixture only |
|
|
32
|
+
|
|
33
|
+
Keep setup **Fresh + Minimal** by default (`test-strategy.md`); each step toward Implicit/Lazy/SuiteFixture trades isolation for speed and must be justified.
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## 3. Teardown (releasing what the test created)
|
|
38
|
+
|
|
39
|
+
| Pattern | What it is | Use when |
|
|
40
|
+
|---|---|---|
|
|
41
|
+
| **In-line Teardown** | The test releases its own resources at the end | Few resources, simple lifetimes |
|
|
42
|
+
| **Implicit Teardown** | A per-test hook (`tearDown`/`afterEach`) releases the fixture | Several tests share the same cleanup shape |
|
|
43
|
+
| **Automated Teardown** | The fixture layer *registers* everything created and releases it automatically after each test | **Persistent fixtures** (DB rows, files, queues) — prevents resource leakage / **Erratic Test** without per-test cleanup code |
|
|
44
|
+
|
|
45
|
+
For any fixture that touches persistent state, recommend **Automated Teardown** (or equivalent) so a failing test can't leak state into the next — the root fix for the resource-leakage form of the Erratic Test smell.
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## How this connects to the rest of the toolkit
|
|
50
|
+
|
|
51
|
+
- **`test-strategy.md`** — *which* fixture (lifecycle/design); this file is *how* it's constructed.
|
|
52
|
+
- **`test-smells.md`** — the smells these fix: Mystery Guest & General Fixture & Irrelevant Information & Test Code Duplication (construction), resource-leakage Erratic Test (teardown).
|
|
53
|
+
- **`testability-patterns.md`** — the production seams (DI, interface extraction) that let a built fixture be injected without back doors.
|
|
54
|
+
- **`test-doubles.md`** — a Fake (in-memory repo/DB) is itself a constructed fixture; choose the double there.
|
|
55
|
+
- **`test-organization.md`** — Setup and Teardown are the first and last of the Four-Phase Test.
|
|
56
|
+
- **`test-refactoring.md`** — the behavior-preserving moves (Extract Creation Method, Introduce Test Data Builder, Replace General Fixture with Minimal Fixture) that get an existing test here.
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# Frontend Component Architecture
|
|
2
|
+
|
|
3
|
+
Reference catalog for reviewing how reusable UI components are factored as a
|
|
4
|
+
frontend evolves. The goal is to keep duplication from accreting: when the same
|
|
5
|
+
rendering, layout, or interaction logic appears in several places, it should be
|
|
6
|
+
extracted into one reusable component with a deliberate prop/slot contract —
|
|
7
|
+
without over-abstracting incidental similarity into the wrong shared component.
|
|
8
|
+
|
|
9
|
+
Framework-agnostic. Map each pattern to the local framework's idiom (see
|
|
10
|
+
[Framework mapping](#framework-mapping)) rather than pattern-matching one
|
|
11
|
+
framework's syntax.
|
|
12
|
+
|
|
13
|
+
## When to extract (and when not to)
|
|
14
|
+
|
|
15
|
+
- **Rule of three.** Two occurrences are not yet duplication — they may diverge.
|
|
16
|
+
At the **third** copy of the same UI structure + behavior, extract a reusable
|
|
17
|
+
component. Flag the third occurrence, not the second.
|
|
18
|
+
- **Semantic vs incidental similarity.** Before flagging, apply the test: *if the
|
|
19
|
+
visual or behavioral rule changes, must every copy change together?* If yes →
|
|
20
|
+
semantic duplication (extract it). If the copies look alike today but answer to
|
|
21
|
+
different product concepts that will diverge → incidental similarity (leave it).
|
|
22
|
+
Two unrelated forms that happen to have a name + email field are not the same
|
|
23
|
+
component.
|
|
24
|
+
- **Cost of the wrong abstraction.** A premature shared component that accumulates
|
|
25
|
+
boolean flags (`isAdmin`, `compact`, `variant`, `mode`) to serve divergent
|
|
26
|
+
callers is worse than the duplication it replaced. Prefer composition over a
|
|
27
|
+
flag-laden mega-component.
|
|
28
|
+
|
|
29
|
+
## Detection categories
|
|
30
|
+
|
|
31
|
+
### Duplicate render logic
|
|
32
|
+
|
|
33
|
+
The same JSX/template subtree (markup structure + class/style + bindings) is
|
|
34
|
+
repeated across components or files with only data substituted. Three+ near-copies
|
|
35
|
+
of a card, list row, modal, empty-state, or table is an extraction candidate.
|
|
36
|
+
Severity `warning` (third copy) → `error` when a behavioral rule (validation,
|
|
37
|
+
formatting, accessibility wiring) is duplicated and would force multi-site edits.
|
|
38
|
+
|
|
39
|
+
### Reusable-primitive extraction candidates
|
|
40
|
+
|
|
41
|
+
Repeated *patterns* that the codebase keeps re-implementing inline instead of
|
|
42
|
+
calling a shared primitive: form-field + label + error wrapper, button variants,
|
|
43
|
+
input groups, loading/skeleton states, pagination, toast/alert. If the project
|
|
44
|
+
already has such a primitive, an inline reimplementation should call it instead
|
|
45
|
+
(name the existing component). If it does not, recommend extracting one.
|
|
46
|
+
|
|
47
|
+
### Component granularity
|
|
48
|
+
|
|
49
|
+
- **God component**: one component mixing data fetching, business logic, layout,
|
|
50
|
+
and several unrelated UI regions (a 300-line `Dashboard` rendering header +
|
|
51
|
+
sidebar + table + modal inline). Recommend splitting along the seams.
|
|
52
|
+
- **Over-fragmentation**: a separate component per trivial wrapper (`<NameField>`,
|
|
53
|
+
`<EmailField>`, `<PhoneField>` that each only render one labeled input) where a
|
|
54
|
+
single parameterized component would do. Recommend collapsing.
|
|
55
|
+
|
|
56
|
+
### Prop drilling
|
|
57
|
+
|
|
58
|
+
State or callbacks threaded through intermediate components that do not use them,
|
|
59
|
+
purely to reach a deep descendant (three+ levels of pass-through). Signals that
|
|
60
|
+
the state should be lifted to a context/provider, store, or that the subtree
|
|
61
|
+
should be composed via `children`/slots so the owner passes the node directly.
|
|
62
|
+
Severity `warning`; `suggestion` at two levels.
|
|
63
|
+
|
|
64
|
+
### Inconsistent component APIs
|
|
65
|
+
|
|
66
|
+
Sibling components that do the same job expose different contracts: event-handler
|
|
67
|
+
naming drift (`onClick` vs `onPress` vs `handleClick`), boolean vs enum for the
|
|
68
|
+
same concept (`isPrimary` in one, `variant="primary"` in another), inconsistent
|
|
69
|
+
prop shapes (`{user}` object here, `userName`/`userId` scalars there). Inconsistent
|
|
70
|
+
public APIs across reusable components block reuse and invite copy-paste. Recommend
|
|
71
|
+
one convention and align the outliers.
|
|
72
|
+
|
|
73
|
+
### Composition over configuration
|
|
74
|
+
|
|
75
|
+
- A component accumulating mode/variant flags that switch large rendering branches
|
|
76
|
+
is usually better split or recomposed via slots/`children`/compound components.
|
|
77
|
+
- Prefer exposing a `children`/default slot for caller-supplied content over a
|
|
78
|
+
`renderX`/`content` prop that re-implements composition the framework gives free.
|
|
79
|
+
- Compound-component / named-slot patterns (`<Menu><Menu.Item/></Menu>`) suit
|
|
80
|
+
families of parts that share implicit state; recommend them over prop-configured
|
|
81
|
+
monoliths when the family keeps growing.
|
|
82
|
+
|
|
83
|
+
### Cross-feature / design-system reuse
|
|
84
|
+
|
|
85
|
+
The same visual primitive reimplemented independently in two feature folders
|
|
86
|
+
(two hand-rolled `Modal`s, two date pickers). As a frontend grows these drift in
|
|
87
|
+
behavior and accessibility. Recommend promoting one into the shared component
|
|
88
|
+
layer (`components/`, `ui/`, design system) and deleting the duplicate.
|
|
89
|
+
|
|
90
|
+
### Library barrel / public exports
|
|
91
|
+
|
|
92
|
+
A shared component library needs **one public entry point** — an `index`
|
|
93
|
+
barrel (`index.ts`/`index.js`/`index.tsx`) that re-exports the components callers
|
|
94
|
+
are meant to use. Flag:
|
|
95
|
+
|
|
96
|
+
- A shared component directory (`components/`, `ui/`, `lib/components`, a
|
|
97
|
+
design-system package) that has **no index barrel** re-exporting its
|
|
98
|
+
components, so consumers must reach into file paths to import them.
|
|
99
|
+
- A barrel that exists but is **stale** — newly added reusable components are not
|
|
100
|
+
re-exported from it, so they are effectively private and get copy-pasted instead
|
|
101
|
+
of reused.
|
|
102
|
+
- Consumers **deep-importing internals** (`import { Button } from
|
|
103
|
+
"ui/components/button/Button"`) when a barrel entry exists (`import { Button }
|
|
104
|
+
from "ui"`); deep imports couple callers to internal layout and discourage reuse.
|
|
105
|
+
|
|
106
|
+
A single, stable public surface makes the library's components discoverable and
|
|
107
|
+
keeps internal file moves from breaking consumers. Recommend adding/updating the
|
|
108
|
+
`index` barrel and importing through it. This is `warning` for a missing/stale
|
|
109
|
+
barrel in an established shared layer, `suggestion` for deep-import drift.
|
|
110
|
+
|
|
111
|
+
## Framework mapping
|
|
112
|
+
|
|
113
|
+
Recognize the *concept*, then express the fix in the project's framework:
|
|
114
|
+
|
|
115
|
+
- **React/JSX** — extract a function component; lift state to Context or a store;
|
|
116
|
+
use `children`/render-as-children; compound components via `Component.Sub`;
|
|
117
|
+
custom hooks for duplicated stateful logic (not just markup).
|
|
118
|
+
- **Vue (SFC)** — extract a `.vue` component; `provide`/`inject` or a Pinia store
|
|
119
|
+
for drilling; default + named `<slot>`s; composables for shared logic.
|
|
120
|
+
- **Svelte** — extract a `.svelte` component; context API (`setContext`/
|
|
121
|
+
`getContext`) or a store for drilling; default + named slots / snippets.
|
|
122
|
+
- **Angular** — extract a component; a shared service (DI) instead of `@Input`
|
|
123
|
+
chains; content projection via `<ng-content>`; structural directives for
|
|
124
|
+
repeated template fragments.
|
|
125
|
+
|
|
126
|
+
## What NOT to flag
|
|
127
|
+
|
|
128
|
+
- Two occurrences (below the rule-of-three threshold) with no shared behavioral
|
|
129
|
+
rule — wait for the third.
|
|
130
|
+
- Structurally similar markup serving genuinely different product concepts that
|
|
131
|
+
are expected to diverge (incidental similarity).
|
|
132
|
+
- Framework-idiomatic prop passing one level deep (that is not drilling).
|
|
133
|
+
- One-off layout markup that is intentionally unique to a single screen.
|
|
134
|
+
- A single component or a feature-local folder that is not a reusable library —
|
|
135
|
+
don't demand a barrel for components that aren't meant to be shared.
|
|
136
|
+
- Pure styling/className concerns with no structural duplication (defer to design
|
|
137
|
+
tokens / CSS review, not component extraction).
|
|
138
|
+
- Business-logic duplication that is not UI-shaped — that belongs to
|
|
139
|
+
structure-review / refactor-opportunity-review, not this review.
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# Adversarial Gherkin Quality Review — Dispatch & Aggregation
|
|
2
|
+
|
|
3
|
+
Shared procedure `/gherkin-derive` (Step 5b) and `/gherkin-public` (Step 4b)
|
|
4
|
+
both cite, so the dispatch/aggregation mechanics live in exactly one place
|
|
5
|
+
instead of being re-derived near-verbatim in two `SKILL.md` files (issue
|
|
6
|
+
#1452). Each calling step states only what's specific to it (when it fires,
|
|
7
|
+
what input it passes); everything below is common to both.
|
|
8
|
+
|
|
9
|
+
## Dispatch
|
|
10
|
+
|
|
11
|
+
Spawn **two** independent instances of the `gherkin-quality-critic` agent as
|
|
12
|
+
parallel subagents in a single message, using the `Agent` tool — the same
|
|
13
|
+
"Spawn agents as parallel subagents in a single message using the Agent
|
|
14
|
+
tool" convention `../skills/code-review/SKILL.md` already documents. Both instances
|
|
15
|
+
receive the identical input (the `.feature` file(s) plus each surface's cited
|
|
16
|
+
source); neither instance's prompt may contain the other's output — that is
|
|
17
|
+
the entire point of running two, and it is a structural property of the
|
|
18
|
+
dispatch (one message, two calls, read neither result until both are issued),
|
|
19
|
+
not a runtime check.
|
|
20
|
+
|
|
21
|
+
**Why two instances of the same agent, not two distinct critics?** Every
|
|
22
|
+
other multi-agent review point in this fleet (`/plan` step 5b's five
|
|
23
|
+
plan-review-* critics, `/code-review`'s reviewer panel) dispatches **distinct**
|
|
24
|
+
agents with distinct scopes. This is deliberately different: `gaps` and
|
|
25
|
+
`balance_issues` are two facets of one judgment call (does this scenario set
|
|
26
|
+
adequately exercise the cited source?), not two independent concerns that
|
|
27
|
+
split cleanly across separate personas the way plan-review's acceptance/
|
|
28
|
+
design/parallelization/strategic/ux critics do. Running two instances of the
|
|
29
|
+
*same* narrow agent gets ensemble/self-consistency corroboration on that one
|
|
30
|
+
judgment call for the cost of a second call, instead of building a second
|
|
31
|
+
persona with an artificial scope boundary. Splitting `gaps` and
|
|
32
|
+
`balance_issues` into two distinct critics remains the fallback if the two
|
|
33
|
+
checks are ever shown to need materially different review lenses.
|
|
34
|
+
|
|
35
|
+
## Aggregation
|
|
36
|
+
|
|
37
|
+
The calling skill performs the fold itself — no third agent, mirroring how
|
|
38
|
+
`/code-review` aggregates its panel's JSON without a meta-agent. Match each
|
|
39
|
+
instance's `gaps`/`balance_issues` entries by the key
|
|
40
|
+
**`(feature_file, title)`**:
|
|
41
|
+
|
|
42
|
+
- A finding present for the same key in **both** instances' output is
|
|
43
|
+
**agreed** — even if the two instances worded the `rationale` differently,
|
|
44
|
+
the same `(feature_file, title)` pair is what makes it agreed.
|
|
45
|
+
- A finding present in only **one** instance's output for a given key is
|
|
46
|
+
**single-source (unconfirmed)**.
|
|
47
|
+
|
|
48
|
+
The fold is exact-string, not fuzzy — its accuracy depends on both instances
|
|
49
|
+
wording a shared finding's `title` identically. The agent is instructed to
|
|
50
|
+
word `title` to match the cited `Feature:`/`Scenario:` heading text
|
|
51
|
+
**verbatim** wherever possible, which keeps the common case (the finding is
|
|
52
|
+
about a specific, already-named scenario) exact. The accepted, known gap:
|
|
53
|
+
two instances phrasing the same *novel* finding (e.g. a missing scenario that
|
|
54
|
+
has no existing heading to anchor to) with slightly different wording will
|
|
55
|
+
fold as two single-source findings rather than one agreed finding — this is
|
|
56
|
+
a false negative on "agreed," not a false positive, so it only ever
|
|
57
|
+
under-promotes confidence, never over-promotes it.
|
|
58
|
+
|
|
59
|
+
## Failure handling
|
|
60
|
+
|
|
61
|
+
If either `Agent` call errors, times out, or returns output that cannot be
|
|
62
|
+
parsed as the agent's documented JSON schema:
|
|
63
|
+
|
|
64
|
+
- Treat that instance's `gaps`/`balance_issues` as empty — never crash the
|
|
65
|
+
skill run over one instance's failure.
|
|
66
|
+
- Never promote the absence of a matching finding from the failed instance
|
|
67
|
+
into a false "agreed" classification, and never silently drop the note
|
|
68
|
+
that a failure happened.
|
|
69
|
+
- The report must state explicitly: *"one review instance did not return
|
|
70
|
+
usable output — findings below are single-source only."*
|
|
71
|
+
- If **both** instances fail, both new report sections print
|
|
72
|
+
`Both review instances failed to return usable output — no Gherkin quality
|
|
73
|
+
findings available for this run.` instead of the two per-finding sections.
|
|
74
|
+
|
|
75
|
+
## Zero-findings state
|
|
76
|
+
|
|
77
|
+
Both report sections — "Agreed Gherkin quality findings" and "Single-source
|
|
78
|
+
(unconfirmed) Gherkin quality findings" — **always print**, even when a
|
|
79
|
+
bucket is empty, so the section's presence in a report is predictable for
|
|
80
|
+
tooling/tests, not conditional on there being something to say:
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
Agreed Gherkin quality findings
|
|
84
|
+
None — both instances raised no findings.
|
|
85
|
+
|
|
86
|
+
Single-source (unconfirmed) Gherkin quality findings
|
|
87
|
+
None — both instances raised no findings.
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Report section format
|
|
91
|
+
|
|
92
|
+
Each calling skill's report step prints two sections, distinct from every
|
|
93
|
+
other callout in that step — this is semantic gap/balance judgment from an
|
|
94
|
+
independent reviewer, never folded into a structural-presence check:
|
|
95
|
+
|
|
96
|
+
- **"Agreed Gherkin quality findings"** — every `(feature_file, title)` pair
|
|
97
|
+
both `gherkin-quality-critic` instances raised, one line each:
|
|
98
|
+
`<feature_file>:<title> — <rationale>`. Per the zero-findings state above,
|
|
99
|
+
print `None — both instances raised no findings.` when this bucket is
|
|
100
|
+
empty — never omit the section itself.
|
|
101
|
+
- **"Single-source (unconfirmed) Gherkin quality findings"** — every pair
|
|
102
|
+
only one instance raised, same line format, explicitly labeled unconfirmed
|
|
103
|
+
(never elevated to the same confidence as an agreed finding). Same
|
|
104
|
+
zero-findings rule applies. If either review instance failed or returned
|
|
105
|
+
unparseable output, state that here per the failure-handling rule above,
|
|
106
|
+
rather than silently treating it as "no findings."
|
|
107
|
+
|
|
108
|
+
## Runtime isolation check
|
|
109
|
+
|
|
110
|
+
The mutual-blindness property above — "one message, two calls, read neither
|
|
111
|
+
result until both are issued" — is asserted only in this doc's prose and in
|
|
112
|
+
content-guards that check the markdown *says* the right thing; nothing runs
|
|
113
|
+
two real dispatches and checks isolation held at runtime.
|
|
114
|
+
`${CLAUDE_PLUGIN_ROOT}/scripts/verify_gherkin_quality_critic_isolation.py` closes that gap: it
|
|
115
|
+
dispatches the real `gherkin-quality-critic` agent twice via two fully
|
|
116
|
+
independent `claude -p` subprocess calls, each against a fixture carrying its
|
|
117
|
+
own randomly-generated canary marker, and fails if either transcript contains
|
|
118
|
+
the *other* dispatch's canary. Like `evals/README.md`'s live eval gate, it is
|
|
119
|
+
**opt-in and paid** (needs the `claude` CLI + `ANTHROPIC_API_KEY`) and
|
|
120
|
+
**fails open** — missing credentials print a skip message and exit 0, never a
|
|
121
|
+
failure. It is not wired into any CI workflow by default. Run it locally:
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
ANTHROPIC_API_KEY=sk-... python3 "${CLAUDE_PLUGIN_ROOT}/scripts/verify_gherkin_quality_critic_isolation.py"
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## Scope of this doc
|
|
128
|
+
|
|
129
|
+
This doc owns the dispatch/aggregation/failure/zero-findings mechanics and
|
|
130
|
+
the report section format above. It does not own: when a calling skill
|
|
131
|
+
decides to dispatch at all, or what a calling skill's report step must
|
|
132
|
+
distinguish these sections from (each `SKILL.md`'s own Step 5b/4b states its
|
|
133
|
+
skip conditions; each report step names the other callouts these sections
|
|
134
|
+
must stay distinct from — `gherkin-derive`'s characterization/possibly-stale
|
|
135
|
+
callouts, `gherkin-public`'s hand-authoring-flagged-components callout).
|