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,243 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: specs
|
|
3
|
+
description: Collaborative workflow for producing the three specification artifacts (intent, architecture notes, acceptance criteria) that describe a change and its goals before any implementation begins. Its value is resolving ambiguity with a human before build starts — not synthesizing edge cases. Use when starting any new feature or behavior change — do not write code until artifacts pass the consistency gate. BDD/Gherkin scenarios are authored later, per slice, in /plan.
|
|
4
|
+
role: orchestrator
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Agent-Assisted Specification
|
|
9
|
+
|
|
10
|
+
<!-- pi-port-notes -->
|
|
11
|
+
## pi port notes (read first)
|
|
12
|
+
|
|
13
|
+
- Issue and comment text follows the "GitHub text style" from the system prompt. Keep every heading, section and marker that this skill's template requires, because later steps read them. Write the prose inside them plainly and briefly. If the template itself breaks a rule (for example a required list that is longer than the limit), send the same `gh` command again unchanged: the extension blocks it only once.
|
|
14
|
+
<!-- pi-port-notes -->
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
Role: orchestrator. This command produces specification artifacts and gates
|
|
18
|
+
progression to `/plan` — it does not write implementation code, author
|
|
19
|
+
per-slice Gherkin scenarios, or begin building.
|
|
20
|
+
|
|
21
|
+
## Positioning — what this skill is for
|
|
22
|
+
|
|
23
|
+
This skill's value is **resolving ambiguity with a human before build begins**
|
|
24
|
+
(Rec 1, `docs/experiments/RECOMMENDATIONS.md`). No downstream workflow recovers
|
|
25
|
+
information the spec never stated — under vague specs every workflow arm scored
|
|
26
|
+
0% on acceptance tests probing an omitted decision. The Ambiguity Resolution
|
|
27
|
+
Protocol below is the mechanism: it forces every gap to be either resolved by a
|
|
28
|
+
human or documented as inferable before implementation starts.
|
|
29
|
+
|
|
30
|
+
What this skill is **not** for: edge-case synthesis. Run to completion, the
|
|
31
|
+
full `/specs`→`/plan`→`/build` pipeline's explicit acceptance-criteria
|
|
32
|
+
synthesis does not out-perform TDD's failing-test discipline at surfacing
|
|
33
|
+
unstated edge cases (25% vs. 33% pooled EDGE pass — Experiment 03, reported in
|
|
34
|
+
`docs/experiments/02-final-results.md`). The two have different failure modes
|
|
35
|
+
and both are worth keeping: `/specs` catches ambiguity a human must resolve;
|
|
36
|
+
the build cadence's per-behavior tests catch edge cases the spec implies but
|
|
37
|
+
never enumerates.
|
|
38
|
+
|
|
39
|
+
## Step 0 — Select the mode
|
|
40
|
+
|
|
41
|
+
`/specs` runs in one of two modes, chosen from the **shape of the argument** —
|
|
42
|
+
there is no flag, so every existing `/specs "<description>"` invocation is
|
|
43
|
+
unaffected. Announce the selected mode and why before any work begins.
|
|
44
|
+
|
|
45
|
+
| Argument | Mode |
|
|
46
|
+
|---|---|
|
|
47
|
+
| Resolves to a readable `.md`/`.txt`/`.pdf`, or a fetchable GitHub issue URL | **validate** — critique a document we did not write |
|
|
48
|
+
| *Looks* like a path or issue URL (a path separator, one of those extensions, or a GitHub issue URL shape) but does not resolve or cannot be fetched | **refuse** — see below |
|
|
49
|
+
| Resembles neither | **authoring** — today's collaboration loop, unchanged |
|
|
50
|
+
|
|
51
|
+
**A path-like argument that does not resolve is never reinterpreted as prose.**
|
|
52
|
+
Silently feeding a mistyped path into the authoring loop turns a typo into a
|
|
53
|
+
spec seeded from the literal path string, which the author may not notice for
|
|
54
|
+
a long time. Refuse instead, naming the unresolved path or the fetch failure
|
|
55
|
+
(private, deleted, unauthenticated, network).
|
|
56
|
+
|
|
57
|
+
**Unsupported formats are refused too, never partially parsed.** The supported
|
|
58
|
+
set is what `Read` handles natively. `.docx` is explicitly out — the plugin
|
|
59
|
+
ships stdlib-only Python (ADR 0014/0015) and no stdlib path parses it. Name the
|
|
60
|
+
reason and the conversion to perform; do not guess at a partial read.
|
|
61
|
+
|
|
62
|
+
Validate mode then runs the same critique categories, Ambiguity Resolution
|
|
63
|
+
Protocol, and Consistency Gate as authoring mode, against the source text
|
|
64
|
+
rather than a co-authored draft — a third-party document blocks exactly as hard
|
|
65
|
+
as an in-house draft. **Every extracted acceptance criterion cites the source
|
|
66
|
+
passage it came from; one with no citable passage is an inference and is logged
|
|
67
|
+
as such, never presented as if the source stated it.** Load
|
|
68
|
+
[`references/extraction.md`](references/extraction.md) for the supported
|
|
69
|
+
inputs, the citation rule, and the routing.
|
|
70
|
+
|
|
71
|
+
## Step 1 — Existing-spec version check
|
|
72
|
+
|
|
73
|
+
Before drafting or updating a spec, check whether a spec file already exists for
|
|
74
|
+
this feature:
|
|
75
|
+
|
|
76
|
+
- If no spec file exists: proceed directly to the collaboration loop below.
|
|
77
|
+
- If a spec file exists: read its opening lines and check for a `<!-- spec-version: -->` comment or a `**Format:**` header field.
|
|
78
|
+
- If the marker is absent or predates the current skill version (see frontmatter `version:`): surface this to the user — *"An existing spec was found but appears to use an older format. Regenerate from scratch, or confirm you want to update in place?"* — and wait for explicit direction before proceeding.
|
|
79
|
+
- If the marker matches the current version: proceed to the collaboration loop below with the existing file as base.
|
|
80
|
+
|
|
81
|
+
This prevents silently overwriting a current spec and catches format drift before
|
|
82
|
+
the plan phase consumes stale artifacts.
|
|
83
|
+
Produce three specification artifacts collaboratively with the human before any implementation begins. The spec describes the change and its goals; it does **not** define Gherkin scenarios — those are authored per slice during `/plan`. The consistency gate is a hard stop; do not proceed to planning until it passes.
|
|
84
|
+
|
|
85
|
+
## Rules
|
|
86
|
+
|
|
87
|
+
1. **No implementation during specification.** No code, no tests, no infrastructure until the consistency gate passes.
|
|
88
|
+
2. **One feature per specification.** A spec describes a single coherent change end-to-end. Vertical slicing is deferred to `/plan` — do not slice here. Split into separate specs only when the request bundles genuinely unrelated features (see Scope Split Protocol).
|
|
89
|
+
3. **Consistency gate is a hard stop.** Conflicts caught now cost minutes; conflicts caught during implementation cost sessions.
|
|
90
|
+
4. **Behavior contracts are authored in the plan.** The spec sets intent, architecture constraints, and acceptance criteria. `/plan` turns those into per-slice Gherkin scenarios — the single source of truth for expected behavior. No implementation without a scenario; no scenario without an acceptance test.
|
|
91
|
+
5. **Max 2 critique-refine iterations** per artifact. If it doesn't stabilize, escalate to the Orchestrator.
|
|
92
|
+
6. **Preserve human language** when refining. The human owns the specification; the agent improves precision.
|
|
93
|
+
7. **Structured critique output.** Categorize every critique (gap, ambiguity, conflict, scope violation) with a specific reference to the artifact text.
|
|
94
|
+
8. **Document decisions, not just outcomes.** When the human rejects an agent suggestion, note why — prevents the same suggestion from recurring.
|
|
95
|
+
|
|
96
|
+
## Artifacts
|
|
97
|
+
|
|
98
|
+
| Artifact | Purpose | Format |
|
|
99
|
+
| --- | --- | --- |
|
|
100
|
+
| Intent Description | What the change achieves and why | Plain language, 1–3 paragraphs |
|
|
101
|
+
| Architecture Specification | Where the change fits and what constraints apply | Structured notes: components, interfaces, dependencies, constraints |
|
|
102
|
+
| Acceptance Criteria | Observable outcomes and quality thresholds that define "done" | Measurable criteria with pass/fail conditions |
|
|
103
|
+
|
|
104
|
+
Observable user behavior is captured as Gherkin in `/plan`, one scenario set per slice. The spec's job is to make that authoring unambiguous, not to pre-write it.
|
|
105
|
+
|
|
106
|
+
## Collaboration loop
|
|
107
|
+
|
|
108
|
+
Every artifact follows the same loop:
|
|
109
|
+
|
|
110
|
+
1. **Human drafts** based on current understanding.
|
|
111
|
+
2. **Agent critiques** — categorize each finding as gap, ambiguity, conflict, or scope violation, with a specific reference.
|
|
112
|
+
3. **Human decides** — accept, reject, or modify.
|
|
113
|
+
4. **Agent refines** — produce an updated version incorporating decisions.
|
|
114
|
+
|
|
115
|
+
Repeat up to **2 iterations** before escalating.
|
|
116
|
+
|
|
117
|
+
### Critique categories
|
|
118
|
+
|
|
119
|
+
| Category | Description |
|
|
120
|
+
| --- | --- |
|
|
121
|
+
| Gaps | Missing acceptance criteria, unstated assumptions, undefined behavior |
|
|
122
|
+
| Ambiguities | Statements two implementers would interpret differently |
|
|
123
|
+
| Conflicts | Contradictions between artifacts or with existing system behavior |
|
|
124
|
+
| Scope violations | Spec bundles unrelated features that belong in separate specs |
|
|
125
|
+
|
|
126
|
+
## Ambiguity Resolution Protocol
|
|
127
|
+
|
|
128
|
+
After critiquing the artifacts but before writing the final acceptance criteria, run this protocol on every gap and ambiguity finding. This is a hard step — it cannot be skipped.
|
|
129
|
+
|
|
130
|
+
For each gap or ambiguity:
|
|
131
|
+
|
|
132
|
+
**Step A — Attempt inference.** Look for a reliable basis: existing codebase behavior, domain conventions, similar precedents in the system, or unambiguous implication from stated requirements.
|
|
133
|
+
|
|
134
|
+
**Step A2 — Predictability check.** Generate **at most one** plausible
|
|
135
|
+
alternative outcome per criterion and test it against the source; if the source
|
|
136
|
+
does not rule it out, classify `requires-stakeholder-input`. Record the outcome
|
|
137
|
+
in the Ambiguity Log row every time, pass included. Load
|
|
138
|
+
[`references/predictability-check.md`](references/predictability-check.md) — it
|
|
139
|
+
covers absurd-candidate rejection, the no-plausible-alternative case, and why
|
|
140
|
+
this does not duplicate `plan-review-acceptance`.
|
|
141
|
+
|
|
142
|
+
**Step B — Classify the finding.**
|
|
143
|
+
|
|
144
|
+
| Class | Meaning | Action |
|
|
145
|
+
|-------|---------|--------|
|
|
146
|
+
| `inferable` | A reasonable developer, given the codebase and domain, would make the same choice | Document the inference and its rationale; proceed |
|
|
147
|
+
| `requires-stakeholder-input` | The decision depends on product or business intent not evident from context; two reasonable developers would choose differently | **Block — ask the human before proceeding** |
|
|
148
|
+
|
|
149
|
+
**Step C — Resolve `requires-stakeholder-input` items.** Collect all such items and present them as a single batch to the human before writing acceptance criteria:
|
|
150
|
+
|
|
151
|
+
> "Before writing acceptance criteria, I need clarification on N decisions the spec leaves open: [list]"
|
|
152
|
+
|
|
153
|
+
Wait for answers. Only then finalize the criteria.
|
|
154
|
+
|
|
155
|
+
**What "inferable" is NOT:** a convenient default. Naturalness or simplicity does not make a decision inferable — the test is whether a developer working from context alone would reliably land on the same answer. If in doubt, classify as `requires-stakeholder-input`.
|
|
156
|
+
|
|
157
|
+
**Record every classification** in an `## Ambiguity Log` section of the spec file (see Output below). This log is the audit trail that turns "we asked before building" from an assertion into an artifact.
|
|
158
|
+
|
|
159
|
+
This protocol exists because the most common failure mode of spec synthesis from a vague prompt is writing decisions that look thorough while encoding the same happy-path assumptions a direct implementation would make silently. The log prevents that by making every assumption visible and every gap either resolved by the human or documented as inferable with explicit rationale.
|
|
160
|
+
|
|
161
|
+
## Gap classification: NO_REFACTOR / REFACTOR_REQUIRED / LOW_VALUE
|
|
162
|
+
|
|
163
|
+
When a critique surfaces a missing-test or coverage gap, classify it so the spec only carries work that delivers signal:
|
|
164
|
+
|
|
165
|
+
- `NO_REFACTOR` — a meaningful test can be written against the code as it stands. Carry it into the acceptance criteria.
|
|
166
|
+
- `REFACTOR_REQUIRED` — production code needs a testability change before a meaningful test is possible. Note the change.
|
|
167
|
+
- `LOW_VALUE` — **skip, not defer.** A `LOW_VALUE` finding is never written into the acceptance criteria and is never parked as deferred backlog; deferring it only re-surfaces the same no-signal work later. All three criteria must hold: no branching logic, no observable outcome (the only possible assertion is that a mock was called), and a higher-layer test already covers the path.
|
|
168
|
+
|
|
169
|
+
`LOW_VALUE` is the one class dropped rather than tracked — the Ambiguity Log records the skip and its rationale, nothing more. It never becomes an acceptance criterion and never reaches `/plan` as work.
|
|
170
|
+
|
|
171
|
+
## Scope signals
|
|
172
|
+
|
|
173
|
+
A specification bundles too much when any of these fire:
|
|
174
|
+
|
|
175
|
+
- Specification effort exceeds a short conversation.
|
|
176
|
+
- More than ~5 components are affected.
|
|
177
|
+
- Genuinely unrelated features are described (not just multiple slices of one feature).
|
|
178
|
+
- The features described would not ship or be validated together.
|
|
179
|
+
|
|
180
|
+
Note: a single feature that decomposes into several deliverable increments is **normal and expected** — that decomposition happens in `/plan`, not here. Only split the spec when the features are independent.
|
|
181
|
+
|
|
182
|
+
### Scope Split Protocol
|
|
183
|
+
|
|
184
|
+
1. Identify the unrelated features bundled into the request.
|
|
185
|
+
2. Propose a split into separate specs, one per feature.
|
|
186
|
+
3. Human approves the split before specification continues on any feature.
|
|
187
|
+
4. Each feature gets its own full set of three artifacts.
|
|
188
|
+
|
|
189
|
+
## Glossary
|
|
190
|
+
|
|
191
|
+
Capture domain terms **while drafting** Intent and Acceptance Criteria. A
|
|
192
|
+
definition the agent inferred starts `unverified`; `verified` requires a human.
|
|
193
|
+
A term still `unverified` at the end of the loop is a gap finding and routes
|
|
194
|
+
through the Ambiguity Resolution Protocol — it does not block the Consistency
|
|
195
|
+
Gate by itself. Load [`references/glossary.md`](references/glossary.md) for the
|
|
196
|
+
status contract, the resolution rule, and the downstream consumers.
|
|
197
|
+
|
|
198
|
+
## Completeness sweep
|
|
199
|
+
|
|
200
|
+
After the critique loop and **before** the Consistency Gate, sweep for what the
|
|
201
|
+
spec never mentioned. A spec that says nothing about deletion produces no
|
|
202
|
+
criterion to find incomplete — the omission is the absence of a criterion, and
|
|
203
|
+
absence is invisible to every per-criterion check we run.
|
|
204
|
+
|
|
205
|
+
Load [`references/completeness-checklist.md`](references/completeness-checklist.md)
|
|
206
|
+
and apply it: CRUD per named entity, plus authentication, authorization,
|
|
207
|
+
audit/logging, and error handling for the spec as a whole.
|
|
208
|
+
|
|
209
|
+
Report the entities you enumerated, group findings by entity, and route each
|
|
210
|
+
unaddressed cell into the Ambiguity Log as `inferable` (with rationale —
|
|
211
|
+
including "read-only by design") or `requires-stakeholder-input`. A cell that
|
|
212
|
+
does not apply is recorded with its reason, never dropped. The reference states
|
|
213
|
+
why each of those is required.
|
|
214
|
+
|
|
215
|
+
**The sweep is not a gate.** It blocks only through the existing Ambiguity
|
|
216
|
+
Resolution Protocol; it introduces no new gate, severity scheme, or confidence
|
|
217
|
+
score. It also never grades a criterion that already exists — that is
|
|
218
|
+
`plan-review-acceptance`'s scope. The two answer different questions: "is there
|
|
219
|
+
a criterion here at all?" versus "is this criterion complete?"
|
|
220
|
+
|
|
221
|
+
## Cross-Artifact Consistency Gate
|
|
222
|
+
|
|
223
|
+
Validate all three artifacts as a set:
|
|
224
|
+
|
|
225
|
+
- [ ] Intent is unambiguous — two developers would interpret it the same way.
|
|
226
|
+
- [ ] Every behavior or goal in the intent maps to at least one acceptance criterion.
|
|
227
|
+
- [ ] Architecture specification constrains implementation to what the intent requires, without over-engineering.
|
|
228
|
+
- [ ] Same concepts are named consistently across all three artifacts.
|
|
229
|
+
- [ ] No artifact contradicts another.
|
|
230
|
+
- [ ] Every gap and ambiguity finding is logged — either documented as `inferable` (with explicit rationale) or resolved via explicit stakeholder input. No finding is left as an undocumented assumption.
|
|
231
|
+
|
|
232
|
+
**Hard stop**: do not proceed to planning until every item passes. The ambiguity log item is the most critical: a passing gate with undocumented assumptions produces false confidence.
|
|
233
|
+
|
|
234
|
+
## Output
|
|
235
|
+
|
|
236
|
+
Three artifacts (Intent, Architecture Specification, Acceptance Criteria) plus a
|
|
237
|
+
consistency gate pass/fail verdict. Be concise — flag gaps and conflicts; do not
|
|
238
|
+
narrate the collaboration process.
|
|
239
|
+
|
|
240
|
+
Once the gate passes, persist the artifacts and trigger the next phase. That
|
|
241
|
+
procedure — classifying file vs. GitHub-issue persistence, the body template,
|
|
242
|
+
and the `/plan` auto-trigger — lives in
|
|
243
|
+
[`references/persistence.md`](references/persistence.md). **Load it now.**
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# Completeness checklist
|
|
2
|
+
|
|
3
|
+
Loaded on demand by [`../SKILL.md`](../SKILL.md)'s completeness sweep, which
|
|
4
|
+
runs after the critique loop and before the Cross-Artifact Consistency Gate.
|
|
5
|
+
|
|
6
|
+
## What this checklist is for
|
|
7
|
+
|
|
8
|
+
`plan-review-acceptance` already checks whether each criterion a spec
|
|
9
|
+
*contains* is complete — boundaries at zero/one/many, an error path per happy
|
|
10
|
+
path, negative criteria, illegal state transitions. This checklist answers a
|
|
11
|
+
different question.
|
|
12
|
+
|
|
13
|
+
A spec that never mentions deletion produces **no criterion** for that agent to
|
|
14
|
+
find incomplete. The omission is not a weak criterion; it is the absence of one,
|
|
15
|
+
and absence is invisible to every per-criterion check. The same holds for
|
|
16
|
+
authorization, audit, and error handling when a spec simply never raises them.
|
|
17
|
+
|
|
18
|
+
**This checklist never grades a criterion that exists.** It reports cells with
|
|
19
|
+
no corresponding criterion at all. Judging the quality of one that is present
|
|
20
|
+
stays `plan-review-acceptance`'s scope, and that boundary is deliberate — the
|
|
21
|
+
two agents answer "is there a criterion here at all?" and "is this criterion
|
|
22
|
+
complete?" respectively.
|
|
23
|
+
|
|
24
|
+
## This checklist is fixed
|
|
25
|
+
|
|
26
|
+
One shipped list, not extensible per project. A per-project override is a
|
|
27
|
+
hypothetical requirement with no current caller; building it now would be
|
|
28
|
+
speculative design.
|
|
29
|
+
|
|
30
|
+
## CRUD, per named entity
|
|
31
|
+
|
|
32
|
+
For every entity the spec names, check all four:
|
|
33
|
+
|
|
34
|
+
| Operation | Ask |
|
|
35
|
+
|---|---|
|
|
36
|
+
| **Create** | How does one come into existence? Who may create it? What makes a creation invalid? |
|
|
37
|
+
| **Read** | Who may see it? Is any field restricted? What does a miss return? |
|
|
38
|
+
| **Update** | Which fields are mutable? What transitions are illegal? Is concurrent update addressed? |
|
|
39
|
+
| **Delete** | Can one be deleted? Soft or hard? What happens to things referencing it? |
|
|
40
|
+
|
|
41
|
+
A spec may legitimately have no answer for a cell — a read-only projection has
|
|
42
|
+
no create, update, or delete. That is an `inferable` finding **with its
|
|
43
|
+
rationale recorded**, never a silently dropped cell.
|
|
44
|
+
|
|
45
|
+
## Cross-cutting concerns
|
|
46
|
+
|
|
47
|
+
Check the spec as a whole against all four:
|
|
48
|
+
|
|
49
|
+
| Concern | Ask |
|
|
50
|
+
|---|---|
|
|
51
|
+
| **Authentication** | Who is the actor, and how is that established? |
|
|
52
|
+
| **Authorization** | Which actors may do which of the operations above? |
|
|
53
|
+
| **Audit / logging** | What must be recorded, and is any of it required rather than nice to have? |
|
|
54
|
+
| **Error handling** | What does the system do when a dependency fails, not just when input is invalid? |
|
|
55
|
+
|
|
56
|
+
## Domain-implied surfaces
|
|
57
|
+
|
|
58
|
+
Beyond the fixed cells above, check the administrative and non-functional
|
|
59
|
+
surfaces the spec's own domain implies — an operator's view, a retention or
|
|
60
|
+
export obligation, a throughput or latency expectation the domain takes for
|
|
61
|
+
granted. These are domain-specific by nature, so they are a prompt to look, not
|
|
62
|
+
a fixed list to tick.
|
|
63
|
+
|
|
64
|
+
## Reporting
|
|
65
|
+
|
|
66
|
+
**Say which entities were enumerated.** Extracting entities from prose is a
|
|
67
|
+
model step, not a parser's; showing the list is what lets a human catch one
|
|
68
|
+
that was missed. Without it, a missed entity is indistinguishable from an
|
|
69
|
+
entity with no findings.
|
|
70
|
+
|
|
71
|
+
**Group findings by entity**, and separate cells dispositionable in one answer
|
|
72
|
+
("nothing in this spec is ever deleted — confirm intentional?") from those
|
|
73
|
+
needing individual judgment. A flat dump of CRUD × every entity plus four
|
|
74
|
+
concerns is a wall of questions that invites rubber-stamping, which defeats the
|
|
75
|
+
sweep.
|
|
76
|
+
|
|
77
|
+
## Routing
|
|
78
|
+
|
|
79
|
+
Each unaddressed cell becomes an Ambiguity Log entry, classified `inferable`
|
|
80
|
+
(with rationale) or `requires-stakeholder-input`. **The sweep is not itself a
|
|
81
|
+
gate** — it blocks only through the existing Ambiguity Resolution Protocol,
|
|
82
|
+
exactly as every other finding does. No new gate, no new severity scheme, no
|
|
83
|
+
confidence score.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Extracting a spec from a document someone else wrote
|
|
2
|
+
|
|
3
|
+
Loaded on demand by [`../SKILL.md`](../SKILL.md) when Step 0 selects **validate
|
|
4
|
+
mode**. Authoring mode never reads this file.
|
|
5
|
+
|
|
6
|
+
## Why extraction needs its own rules
|
|
7
|
+
|
|
8
|
+
In authoring mode the human drafts and we critique, so the first artifact any
|
|
9
|
+
gate sees is one they wrote. In validate mode the source already exists and we
|
|
10
|
+
did not help write it: whoever is driving reads it, forms a mental model, and
|
|
11
|
+
writes criteria from that model. By the time a gate runs, every ambiguity the
|
|
12
|
+
source contained has already been resolved — correctly or not — and the
|
|
13
|
+
criteria read cleanly *because* someone picked an interpretation.
|
|
14
|
+
|
|
15
|
+
The citation rule below is what keeps that resolution visible instead of
|
|
16
|
+
invisible.
|
|
17
|
+
|
|
18
|
+
## Supported inputs
|
|
19
|
+
|
|
20
|
+
| Input | Handling |
|
|
21
|
+
|---|---|
|
|
22
|
+
| `.md`, `.txt`, `.pdf` | Read natively |
|
|
23
|
+
| A GitHub issue URL | Fetch the issue body |
|
|
24
|
+
| `.docx` and anything else `Read` cannot handle | **Refuse**, naming the reason and the conversion to perform |
|
|
25
|
+
|
|
26
|
+
Never attempt a partial parse of an unsupported format. A half-read
|
|
27
|
+
requirements document produces a spec that looks complete and is not.
|
|
28
|
+
|
|
29
|
+
## What to extract
|
|
30
|
+
|
|
31
|
+
Populate the same three artifacts authoring mode produces — Intent Description,
|
|
32
|
+
Architecture Specification, Acceptance Criteria — from the source's content,
|
|
33
|
+
plus the usual Ambiguity Log.
|
|
34
|
+
|
|
35
|
+
## The citation rule
|
|
36
|
+
|
|
37
|
+
**Every extracted acceptance criterion carries a citation** to the passage it
|
|
38
|
+
came from: a section heading, a line reference, or a short verbatim quote.
|
|
39
|
+
|
|
40
|
+
**A criterion with no citable passage is an inference, not an extraction**, and
|
|
41
|
+
is recorded in the Ambiguity Log as one. It is never presented as though the
|
|
42
|
+
source stated it.
|
|
43
|
+
|
|
44
|
+
Without this, extraction and inference are indistinguishable in the output —
|
|
45
|
+
which is the exact failure this mode exists to prevent. A reader of the
|
|
46
|
+
resulting spec must be able to tell "the RFP says this" from "we concluded
|
|
47
|
+
this", because only the second kind needs checking with a stakeholder.
|
|
48
|
+
|
|
49
|
+
## Routing
|
|
50
|
+
|
|
51
|
+
Findings enter the **existing** Ambiguity Resolution Protocol and the existing
|
|
52
|
+
Ambiguity Log, classified `inferable` (with rationale) or
|
|
53
|
+
`requires-stakeholder-input` (a hard block). No new gate, no new severity
|
|
54
|
+
scheme, no confidence score.
|
|
55
|
+
|
|
56
|
+
A third-party document blocks exactly as hard as an in-house draft. It contains
|
|
57
|
+
*more* unresolved ambiguity, not less — weakening the bar here would invert the
|
|
58
|
+
protocol's whole purpose.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# The spec glossary
|
|
2
|
+
|
|
3
|
+
Loaded on demand by [`../SKILL.md`](../SKILL.md) when domain terms need
|
|
4
|
+
capturing. The persisted shape lives in
|
|
5
|
+
[`persistence.md`](persistence.md)'s body template.
|
|
6
|
+
|
|
7
|
+
## Why a glossary at spec time
|
|
8
|
+
|
|
9
|
+
`ubiquitous-language` enforces terminology consistency, but only once terms are
|
|
10
|
+
already in use. Nothing captured, at spec time, which domain terms were still
|
|
11
|
+
undefined — so a term nobody had agreed on reached `/plan` looking like an
|
|
12
|
+
ordinary word, and the disagreement surfaced later as a naming argument or, far
|
|
13
|
+
worse, as two components meaning different things by "order".
|
|
14
|
+
|
|
15
|
+
## When terms are captured
|
|
16
|
+
|
|
17
|
+
**While drafting Intent and Acceptance Criteria**, not as a separate pass. Terms
|
|
18
|
+
surface naturally there; a separate pass would re-read the same artifacts to
|
|
19
|
+
find the same words.
|
|
20
|
+
|
|
21
|
+
## The two statuses
|
|
22
|
+
|
|
23
|
+
| Status | Meaning |
|
|
24
|
+
|---|---|
|
|
25
|
+
| `verified` | A **human** confirmed this definition during the collaboration loop |
|
|
26
|
+
| `unverified` | The agent inferred it, or nobody has confirmed it yet |
|
|
27
|
+
|
|
28
|
+
There is no third state. "Proposed" or "disputed" would need their own routing
|
|
29
|
+
rules and have no consumer.
|
|
30
|
+
|
|
31
|
+
**`verified` requires a human.** An agent confirming its own inferred definition
|
|
32
|
+
is exactly the "looks thorough while encoding a happy-path assumption" failure
|
|
33
|
+
the Ambiguity Resolution Protocol exists to prevent — if an agent could
|
|
34
|
+
self-verify, the status would carry no information at all.
|
|
35
|
+
|
|
36
|
+
## Routing, and what it does not do
|
|
37
|
+
|
|
38
|
+
A term still `unverified` at the end of the loop is a gap finding and enters the
|
|
39
|
+
existing Ambiguity Resolution Protocol, classified `inferable` (the definition
|
|
40
|
+
follows unambiguously from codebase or domain convention) or
|
|
41
|
+
`requires-stakeholder-input` (two reasonable people would define it
|
|
42
|
+
differently).
|
|
43
|
+
|
|
44
|
+
**An unverified term does not block the Consistency Gate by itself.** It blocks
|
|
45
|
+
only if the protocol classifies it as blocking. Blocking on every unverified
|
|
46
|
+
term would make specs painful enough that people route around `/specs` entirely
|
|
47
|
+
— which costs more than the ambiguity it would catch.
|
|
48
|
+
|
|
49
|
+
**When a human later confirms a term**, its row flips to `verified` **and** its
|
|
50
|
+
Ambiguity Log entry is resolved. A term cannot be `verified` while its own
|
|
51
|
+
finding stays open; leaving the entry dangling would make the log's audit trail
|
|
52
|
+
lie about what is still outstanding.
|
|
53
|
+
|
|
54
|
+
## Downstream
|
|
55
|
+
|
|
56
|
+
The glossary is persisted inside the spec artifact, so `ubiquitous-language` and
|
|
57
|
+
`domain-review` consume it by reading the spec they already locate. No separate
|
|
58
|
+
file, no index, no new lookup mechanism — and no new gate, severity scheme, or
|
|
59
|
+
confidence score.
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# Persisting spec artifacts
|
|
2
|
+
|
|
3
|
+
Loaded on demand by [`../SKILL.md`](../SKILL.md) once the Cross-Artifact
|
|
4
|
+
Consistency Gate passes. Nothing above that gate refers into this file.
|
|
5
|
+
|
|
6
|
+
After the gate passes, persist all three artifacts plus the verdict so downstream commands (`/plan`, `/build`, spec-compliance-review) can find the spec — chat-only specs are lost between sessions. **Where** they're persisted depends on the project's origin and whether it has opted into the issue-first specs convention.
|
|
7
|
+
|
|
8
|
+
## Classify where to persist
|
|
9
|
+
|
|
10
|
+
1. Run `python3 ${CLAUDE_PLUGIN_ROOT}/scripts/git_origin_host.py` to classify the origin remote: `github` / `other` / `none`.
|
|
11
|
+
2. When the result is `github`, additionally run `python3 ${CLAUDE_PLUGIN_ROOT}/scripts/specs_convention_marker.py` to classify the project's root `CLAUDE.md`: `marker` (contains the issue-first-specs opt-in phrase, e.g. "Specs and plans are GitHub issues here, not files") / `no-marker` (file exists, phrase absent) / `none` (no root `CLAUDE.md` found). If it reports `no-marker` or `none`, you MAY still read the root `CLAUDE.md` yourself and apply judgment for an equivalently-worded-but-differently-phrased declaration of the same convention before concluding "no marker" — but this manual-judgment fallback is deliberately unverified by any automated test, unlike the script's literal-match path (see the script's own module docstring).
|
|
12
|
+
3. **Branch**:
|
|
13
|
+
- `github` origin **and** a marker found (by the script or by manual judgment) → **Persist to GitHub issue** (below). No downstream consumer of the shipped plugin is silently switched to this path — it requires both an actual GitHub origin and an explicit, repo-declared opt-in.
|
|
14
|
+
- Anything else — non-`github` origin, `none` origin, or a `github` origin with **no** marker found by either path — → **Persist to file** (below). This is today's behavior, unchanged.
|
|
15
|
+
|
|
16
|
+
## Persist to file
|
|
17
|
+
|
|
18
|
+
1. **Slugify** the feature name: lowercase, replace spaces with hyphens, strip special characters. ("User Login with MFA" → `user-login-with-mfa`)
|
|
19
|
+
2. **Create** `docs/specs/` if missing.
|
|
20
|
+
3. **Check** whether `docs/specs/<slug>.md` already exists. If yes, ask: overwrite or create a versioned file (`<slug>-v2.md`)?
|
|
21
|
+
4. **Write** using this structure:
|
|
22
|
+
|
|
23
|
+
```markdown
|
|
24
|
+
# Spec: <Feature Name>
|
|
25
|
+
|
|
26
|
+
## Intent Description
|
|
27
|
+
<intent artifact>
|
|
28
|
+
|
|
29
|
+
## Architecture Specification
|
|
30
|
+
<architecture artifact>
|
|
31
|
+
|
|
32
|
+
## Acceptance Criteria
|
|
33
|
+
<acceptance criteria artifact>
|
|
34
|
+
|
|
35
|
+
## Glossary
|
|
36
|
+
|
|
37
|
+
Domain terms this spec depends on. `verified` means a **human** confirmed the
|
|
38
|
+
definition during the collaboration loop — not that an agent found a plausible
|
|
39
|
+
one. Render the section even when there is nothing to define.
|
|
40
|
+
|
|
41
|
+
| Term | Definition | Status | Source |
|
|
42
|
+
|------|------------|--------|--------|
|
|
43
|
+
| <term> | <definition> | `verified` / `unverified` | <where the definition came from> |
|
|
44
|
+
|
|
45
|
+
## Ambiguity Log
|
|
46
|
+
|
|
47
|
+
All gap and ambiguity findings from the Ambiguity Resolution Protocol, with their classifications and rationale.
|
|
48
|
+
|
|
49
|
+
| Decision | Classification | Resolved By | Rationale / Answer |
|
|
50
|
+
|----------|---------------|-------------|-------------------|
|
|
51
|
+
| <decision text> | `inferable` / `requires-stakeholder-input` | inference / human | <rationale or human's answer> |
|
|
52
|
+
|
|
53
|
+
## Consistency Gate
|
|
54
|
+
- [x/ ] Intent is unambiguous
|
|
55
|
+
- [x/ ] Every behavior/goal maps to an acceptance criterion
|
|
56
|
+
- [x/ ] Architecture constrains without over-engineering
|
|
57
|
+
- [x/ ] Terminology consistent across artifacts
|
|
58
|
+
- [x/ ] No contradictions between artifacts
|
|
59
|
+
- [x/ ] Every gap/ambiguity finding is logged — inferable with rationale or resolved by human
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
1. **Print** the file path to chat so the user can find it.
|
|
63
|
+
|
|
64
|
+
## Persist to GitHub issue
|
|
65
|
+
|
|
66
|
+
**Issue titles are Conventional Commits, not `Spec: <Feature Name>`.** These
|
|
67
|
+
issues become epics — their titles seed branch names, PR titles, and (once
|
|
68
|
+
their sub-issues land) release versions, so they must pass the same
|
|
69
|
+
commitlint ruleset as a commit message (`.github/workflows/issue-title-lint.yml`
|
|
70
|
+
enforces this after the fact by labeling `needs-conventional-title`; do not
|
|
71
|
+
rely on that backstop — lint proactively, before `gh issue create`, so the
|
|
72
|
+
label is never needed). Compose the title as `<type>(spec): <Feature Name>`
|
|
73
|
+
— `type` is almost always `feat` (a spec describing new behavior) or `docs`
|
|
74
|
+
(a spec that is itself the only deliverable, no code follows); pick
|
|
75
|
+
whichever matches the work the spec actually describes, never default
|
|
76
|
+
blindly to one. Example: `feat(spec): User Login with MFA`. Verify with
|
|
77
|
+
`printf '%s' "<composed title>" | npx commitlint --verbose` before creating
|
|
78
|
+
or renaming — if it exits non-zero, fix the title, don't create anyway.
|
|
79
|
+
|
|
80
|
+
1. **Slugify** the feature name (same rule as above) — used to derive the search query, not a file path or the title itself.
|
|
81
|
+
2. **Search** for an existing open issue: `gh issue list --search "<Feature Name> in:title" --state open`. If this call itself exits non-zero, treat it as a hard failure — **never** as "zero matches" (that would risk silently creating a duplicate issue) — report the failure and its cause to chat, and fall back to **Persist to file** above with the already-composed content so the approved spec is never lost.
|
|
82
|
+
3. **Branch on the match count**:
|
|
83
|
+
- **Zero matches** → proceed straight to create (step 4).
|
|
84
|
+
- **Exactly one match** → interactive: ask "Found existing issue #N for this spec — update it in place, or create a new one?"; non-interactive (no usable TTY): default to **updating** that single match in place (never create a duplicate) and log the auto-choice.
|
|
85
|
+
- **Two or more matches** → interactive: surface every matching issue and ask which to update, or whether to create a new one instead — never silently pick one; non-interactive: default to **creating** a new issue and explicitly log the ambiguity (which candidate issues it did not act on).
|
|
86
|
+
4. **Compose** the issue body using the same structure as the file template above — **cite it, never copy it**: there is exactly one body template in this file, and a second one would be a drift source rather than a mirror (Intent Description, Architecture Specification, Acceptance Criteria, Glossary, Ambiguity Log, Consistency Gate), titled `<type>(spec): <Feature Name>` per the rule above.
|
|
87
|
+
5. **Create** (`gh issue create --title "<type>(spec): <Feature Name>" --body "<composed body>"`) or **update** (`gh issue edit <N> --body "<composed body>"`) per step 3's decision. Updating an existing issue's body never touches its title — if the existing title predates this convention, rename it too (`gh issue edit <N> --title "..."`) rather than leaving a stale non-conventional title behind.
|
|
88
|
+
6. If the create/update call exits non-zero, report the failure and its cause to chat, do **not** claim success, and fall back to **Persist to file** above with the already-composed content.
|
|
89
|
+
7. On success, **print** the resulting issue URL to chat — do not write `docs/specs/<slug>.md` on this path.
|
|
90
|
+
|
|
91
|
+
## Auto-trigger /plan
|
|
92
|
+
|
|
93
|
+
**Authoring mode only.** The two modes end differently, and deliberately so:
|
|
94
|
+
|
|
95
|
+
| Mode | Terminal behavior |
|
|
96
|
+
|---|---|
|
|
97
|
+
| **authoring** | Auto-invoke `/plan`. Do not ask first — the approved spec is the trigger. |
|
|
98
|
+
| **validate** | Print the persisted location **and a reason clause**, then offer `/plan` as an explicit next step. Never auto-invoke. |
|
|
99
|
+
|
|
100
|
+
The auto-trigger's "do not ask first" contract is justified by the human having
|
|
101
|
+
just co-authored and approved the spec. Validating a third-party RFP, a vendor
|
|
102
|
+
brief, or a competitor's document carries no such commitment — auto-planning it
|
|
103
|
+
could be actively wrong, so validate mode stops.
|
|
104
|
+
|
|
105
|
+
The printed message must name that reason, not just make the offer: a user who
|
|
106
|
+
has only ever seen authoring mode will otherwise read the stop as a regression.
|
|
107
|
+
Something like *"not auto-invoking /plan: this document wasn't co-authored and
|
|
108
|
+
approved with you — run /plan when you're ready."*
|
|
109
|
+
|
|
110
|
+
In authoring mode, after persisting, automatically invoke `/plan` with the feature description. The plan command discovers the spec artifacts, decomposes the feature into vertical slices, and authors the Gherkin scenarios for each slice.
|
|
111
|
+
|
|
112
|
+
**Key this off which persistence action actually succeeded, not the "Classify where to persist" decision** — the GitHub-issue path can itself fall back to file (search failure at step 2, or create/update failure at step 6):
|
|
113
|
+
|
|
114
|
+
- **A file was written** (either "Classify where to persist" chose the file path, or the GitHub-issue path fell back to one): invoke `/plan "<feature description>"` — `/plan` discovers `docs/specs/**` on its own.
|
|
115
|
+
- **An issue was created or updated** (step 7 succeeded): invoke `/plan "<feature description>" --spec-issue <issue-url>`, passing that issue's URL. Without this, `/plan`'s own Step 1 (which only searches `docs/specs/**`) would immediately hit its "no specification artifacts found" prompt in the very same run — reintroducing the human interruption this auto-trigger's "do not ask first" contract exists to avoid.
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# The predictability check
|
|
2
|
+
|
|
3
|
+
Loaded on demand by [`../SKILL.md`](../SKILL.md)'s Ambiguity Resolution
|
|
4
|
+
Protocol. It runs **between Step A (attempt inference) and Step B (classify)**
|
|
5
|
+
— it is a test applied *during* classification, not a separate pass over the
|
|
6
|
+
artifacts.
|
|
7
|
+
|
|
8
|
+
## The failure mode it attacks
|
|
9
|
+
|
|
10
|
+
The protocol names its own weakness plainly: spec synthesis tends to produce
|
|
11
|
+
"decisions that look thorough while encoding the same happy-path assumptions a
|
|
12
|
+
direct implementation would make silently." `inferable` is where that failure
|
|
13
|
+
lands. An assumption gets waved through because it reads as natural — and
|
|
14
|
+
naturalness is explicitly *not* the test.
|
|
15
|
+
|
|
16
|
+
## The test
|
|
17
|
+
|
|
18
|
+
For each acceptance criterion, generate **at most one** candidate alternative
|
|
19
|
+
outcome — a behavior a reasonable developer might implement instead — and check
|
|
20
|
+
whether the spec text rules it out.
|
|
21
|
+
|
|
22
|
+
- **The source does not rule it out** → `requires-stakeholder-input`, not
|
|
23
|
+
`inferable`.
|
|
24
|
+
- **The source rules it out** → stays `inferable`, and the check is recorded as
|
|
25
|
+
passed.
|
|
26
|
+
|
|
27
|
+
### At most one, evaluated — not always one, manufactured
|
|
28
|
+
|
|
29
|
+
The check is a tripwire, not an enumeration. Generating several alternatives per
|
|
30
|
+
criterion would turn a classification aid into its own analysis phase and
|
|
31
|
+
inflate the Ambiguity Log past readability.
|
|
32
|
+
|
|
33
|
+
"At most one" is deliberate wording. When a criterion is unambiguous enough that
|
|
34
|
+
every candidate alternative would be absurd, the check records that **no
|
|
35
|
+
plausible alternative exists** and passes. It does not manufacture a bad one to
|
|
36
|
+
satisfy a quota — that would produce exactly the false blocks the next section
|
|
37
|
+
rejects.
|
|
38
|
+
|
|
39
|
+
### Plausible, not absurd
|
|
40
|
+
|
|
41
|
+
DeFOSPAM's equivalent floats deliberately absurd alternatives to provoke
|
|
42
|
+
stakeholder correction. That works in an advisory tool whose findings are
|
|
43
|
+
suggestions. Here the output flips a **blocking** classification, so an absurd
|
|
44
|
+
alternative manufactures a false block — and false blocks are how a gate gets
|
|
45
|
+
ignored. The alternative must be one a competent developer could actually ship.
|
|
46
|
+
|
|
47
|
+
## Recording
|
|
48
|
+
|
|
49
|
+
**Every outcome is recorded in the Ambiguity Log row, including a pass.**
|
|
50
|
+
|
|
51
|
+
| Outcome | Recorded as |
|
|
52
|
+
|---|---|
|
|
53
|
+
| Flipped to `requires-stakeholder-input` | The generated alternative, in the row's rationale — it is the question the human is being asked |
|
|
54
|
+
| Stayed `inferable` | The check, marked passed, with the alternative the source ruled out |
|
|
55
|
+
| No plausible alternative existed | The check, marked passed, noting that |
|
|
56
|
+
|
|
57
|
+
An omitted check is indistinguishable from a skipped one. The log is the audit
|
|
58
|
+
trail that makes "we asked before building" an artifact rather than an
|
|
59
|
+
assertion, so a silent pass would hollow it out.
|
|
60
|
+
|
|
61
|
+
## Division of labor with `plan-review-acceptance`
|
|
62
|
+
|
|
63
|
+
That agent already applies binary verifiability — "can two people independently
|
|
64
|
+
check this criterion and agree on pass/fail?" — at `blocker` severity, and it
|
|
65
|
+
still owns weasel-word detection and per-criterion completeness. This check does
|
|
66
|
+
not duplicate it.
|
|
67
|
+
|
|
68
|
+
**What differs is placement, and placement is the whole point.**
|
|
69
|
+
`plan-review-acceptance` runs one stage later, against criteria **we** authored.
|
|
70
|
+
Checking our own restatement for predictability cannot catch a source
|
|
71
|
+
requirement that was unpredictable *before* we normalised it: by then the
|
|
72
|
+
ambiguity is already resolved, and the criterion reads cleanly precisely because
|
|
73
|
+
someone picked an interpretation. The earlier placement sees the source text;
|
|
74
|
+
the later one structurally cannot.
|
|
75
|
+
|
|
76
|
+
No new gate, severity scheme, or confidence score — the check only moves items
|
|
77
|
+
between the two existing classifications.
|