@zigrivers/scaffold 3.27.0 → 3.29.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/README.md +5 -1
- package/content/guides/.gitkeep +0 -0
- package/content/guides/index.html +1188 -0
- package/content/guides/mmr/.diagrams/diagram-0.svg +1 -0
- package/content/guides/mmr/.diagrams/manifest.json +3 -0
- package/content/guides/mmr/index.html +1728 -0
- package/content/guides/mmr/index.md +403 -0
- package/content/knowledge/VERSION +1 -0
- package/content/knowledge/backend/backend-api-design.md +8 -0
- package/content/knowledge/backend/backend-architecture.md +8 -0
- package/content/knowledge/backend/backend-async-patterns.md +7 -0
- package/content/knowledge/backend/backend-auth-patterns.md +9 -0
- package/content/knowledge/backend/backend-conventions.md +6 -0
- package/content/knowledge/backend/backend-data-modeling.md +7 -0
- package/content/knowledge/backend/backend-deployment.md +8 -0
- package/content/knowledge/backend/backend-dev-environment.md +5 -0
- package/content/knowledge/backend/backend-fintech-broker-integration.md +6 -0
- package/content/knowledge/backend/backend-fintech-compliance.md +10 -2
- package/content/knowledge/backend/backend-fintech-data-modeling.md +6 -0
- package/content/knowledge/backend/backend-fintech-ledger.md +6 -0
- package/content/knowledge/backend/backend-fintech-observability.md +6 -0
- package/content/knowledge/backend/backend-fintech-order-lifecycle.md +6 -0
- package/content/knowledge/backend/backend-fintech-risk-management.md +6 -0
- package/content/knowledge/backend/backend-fintech-testing.md +6 -0
- package/content/knowledge/backend/backend-observability.md +7 -0
- package/content/knowledge/backend/backend-project-structure.md +6 -0
- package/content/knowledge/backend/backend-requirements.md +6 -0
- package/content/knowledge/backend/backend-security.md +7 -0
- package/content/knowledge/backend/backend-testing.md +7 -0
- package/content/knowledge/backend/backend-worker-patterns.md +6 -0
- package/content/knowledge/browser-extension/browser-extension-architecture.md +6 -0
- package/content/knowledge/browser-extension/browser-extension-content-scripts.md +6 -0
- package/content/knowledge/browser-extension/browser-extension-conventions.md +6 -0
- package/content/knowledge/browser-extension/browser-extension-cross-browser.md +6 -0
- package/content/knowledge/browser-extension/browser-extension-dev-environment.md +6 -0
- package/content/knowledge/browser-extension/browser-extension-manifest.md +6 -0
- package/content/knowledge/browser-extension/browser-extension-project-structure.md +6 -0
- package/content/knowledge/browser-extension/browser-extension-requirements.md +6 -0
- package/content/knowledge/browser-extension/browser-extension-security.md +7 -0
- package/content/knowledge/browser-extension/browser-extension-service-workers.md +6 -0
- package/content/knowledge/browser-extension/browser-extension-store-submission.md +6 -0
- package/content/knowledge/browser-extension/browser-extension-testing.md +6 -0
- package/content/knowledge/cli/cli-architecture.md +4 -0
- package/content/knowledge/cli/cli-conventions.md +4 -0
- package/content/knowledge/cli/cli-dev-environment.md +5 -0
- package/content/knowledge/cli/cli-distribution-patterns.md +5 -0
- package/content/knowledge/cli/cli-interactivity-patterns.md +4 -0
- package/content/knowledge/cli/cli-output-patterns.md +4 -0
- package/content/knowledge/cli/cli-project-structure.md +4 -0
- package/content/knowledge/cli/cli-requirements.md +4 -0
- package/content/knowledge/cli/cli-shell-integration.md +4 -0
- package/content/knowledge/cli/cli-testing.md +4 -0
- package/content/knowledge/core/adr-craft.md +8 -0
- package/content/knowledge/core/ai-memory-management.md +23 -0
- package/content/knowledge/core/api-design.md +6 -0
- package/content/knowledge/core/automated-review-tooling.md +8 -0
- package/content/knowledge/core/claude-md-patterns.md +10 -2
- package/content/knowledge/core/coding-conventions.md +10 -2
- package/content/knowledge/core/database-design.md +8 -0
- package/content/knowledge/core/design-system-tokens.md +8 -0
- package/content/knowledge/core/dev-environment.md +4 -0
- package/content/knowledge/core/domain-modeling.md +6 -0
- package/content/knowledge/core/eval-craft.md +6 -0
- package/content/knowledge/core/git-workflow-patterns.md +8 -0
- package/content/knowledge/core/multi-model-research-dispatch.md +6 -0
- package/content/knowledge/core/multi-model-review-dispatch.md +6 -0
- package/content/knowledge/core/multi-service-api-contracts.md +5 -0
- package/content/knowledge/core/multi-service-architecture.md +5 -0
- package/content/knowledge/core/multi-service-auth.md +6 -0
- package/content/knowledge/core/multi-service-data-ownership.md +8 -0
- package/content/knowledge/core/multi-service-observability.md +8 -0
- package/content/knowledge/core/multi-service-resilience.md +5 -0
- package/content/knowledge/core/multi-service-task-decomposition.md +8 -0
- package/content/knowledge/core/multi-service-testing.md +5 -0
- package/content/knowledge/core/operations-runbook.md +8 -0
- package/content/knowledge/core/project-structure-patterns.md +4 -0
- package/content/knowledge/core/review-step-template.md +4 -0
- package/content/knowledge/core/security-best-practices.md +6 -0
- package/content/knowledge/core/system-architecture.md +6 -0
- package/content/knowledge/core/task-decomposition.md +9 -4
- package/content/knowledge/core/task-tracking.md +128 -29
- package/content/knowledge/core/tech-stack-selection.md +8 -0
- package/content/knowledge/core/test-skeleton-generation.md +4 -0
- package/content/knowledge/core/testing-strategy.md +8 -0
- package/content/knowledge/core/user-stories.md +9 -1
- package/content/knowledge/core/user-story-innovation.md +4 -0
- package/content/knowledge/core/ux-specification.md +5 -0
- package/content/knowledge/data-pipeline/data-pipeline-architecture.md +5 -0
- package/content/knowledge/data-pipeline/data-pipeline-batch-patterns.md +4 -0
- package/content/knowledge/data-pipeline/data-pipeline-conventions.md +4 -0
- package/content/knowledge/data-pipeline/data-pipeline-dev-environment.md +4 -0
- package/content/knowledge/data-pipeline/data-pipeline-orchestration.md +4 -0
- package/content/knowledge/data-pipeline/data-pipeline-project-structure.md +4 -0
- package/content/knowledge/data-pipeline/data-pipeline-quality.md +4 -0
- package/content/knowledge/data-pipeline/data-pipeline-requirements.md +4 -0
- package/content/knowledge/data-pipeline/data-pipeline-schema-management.md +4 -0
- package/content/knowledge/data-pipeline/data-pipeline-security.md +4 -0
- package/content/knowledge/data-pipeline/data-pipeline-streaming-patterns.md +4 -0
- package/content/knowledge/data-pipeline/data-pipeline-testing.md +4 -0
- package/content/knowledge/data-science/data-science-architecture.md +5 -0
- package/content/knowledge/data-science/data-science-conventions.md +6 -0
- package/content/knowledge/data-science/data-science-data-versioning.md +6 -0
- package/content/knowledge/data-science/data-science-dev-environment.md +6 -0
- package/content/knowledge/data-science/data-science-experiment-tracking.md +8 -0
- package/content/knowledge/data-science/data-science-model-evaluation.md +5 -0
- package/content/knowledge/data-science/data-science-notebook-discipline.md +5 -0
- package/content/knowledge/data-science/data-science-observability.md +6 -0
- package/content/knowledge/data-science/data-science-project-structure.md +5 -0
- package/content/knowledge/data-science/data-science-reproducibility.md +8 -0
- package/content/knowledge/data-science/data-science-requirements.md +5 -0
- package/content/knowledge/data-science/data-science-security.md +8 -0
- package/content/knowledge/data-science/data-science-testing.md +5 -0
- package/content/knowledge/execution/enhancement-workflow.md +4 -0
- package/content/knowledge/execution/multi-agent-coordination.md +129 -0
- package/content/knowledge/execution/task-claiming-strategy.md +19 -3
- package/content/knowledge/execution/tdd-execution-loop.md +5 -0
- package/content/knowledge/execution/worktree-management.md +10 -3
- package/content/knowledge/finalization/apply-fixes-and-freeze.md +4 -0
- package/content/knowledge/finalization/developer-onboarding.md +4 -0
- package/content/knowledge/finalization/implementation-playbook.md +4 -0
- package/content/knowledge/game/game-accessibility.md +4 -0
- package/content/knowledge/game/game-ai-patterns.md +4 -0
- package/content/knowledge/game/game-asset-pipeline.md +4 -0
- package/content/knowledge/game/game-audio-design.md +4 -0
- package/content/knowledge/game/game-binary-vcs-strategy.md +5 -0
- package/content/knowledge/game/game-design-document.md +4 -0
- package/content/knowledge/game/game-domain-patterns.md +4 -0
- package/content/knowledge/game/game-economy-design.md +4 -0
- package/content/knowledge/game/game-engine-selection.md +4 -0
- package/content/knowledge/game/game-ideation.md +4 -0
- package/content/knowledge/game/game-input-systems.md +4 -0
- package/content/knowledge/game/game-level-content-design.md +4 -0
- package/content/knowledge/game/game-liveops-analytics.md +4 -0
- package/content/knowledge/game/game-localization.md +4 -0
- package/content/knowledge/game/game-milestone-definitions.md +4 -0
- package/content/knowledge/game/game-modding-ugc.md +4 -0
- package/content/knowledge/game/game-narrative-design.md +4 -0
- package/content/knowledge/game/game-networking.md +4 -0
- package/content/knowledge/game/game-performance-budgeting.md +4 -0
- package/content/knowledge/game/game-platform-certification.md +6 -0
- package/content/knowledge/game/game-project-structure.md +4 -0
- package/content/knowledge/game/game-save-systems.md +4 -0
- package/content/knowledge/game/game-testing-strategy.md +4 -0
- package/content/knowledge/game/game-ui-patterns.md +4 -0
- package/content/knowledge/game/game-vr-ar-design.md +6 -0
- package/content/knowledge/library/library-api-design.md +4 -0
- package/content/knowledge/library/library-architecture.md +4 -0
- package/content/knowledge/library/library-bundling.md +4 -0
- package/content/knowledge/library/library-conventions.md +5 -0
- package/content/knowledge/library/library-dev-environment.md +4 -0
- package/content/knowledge/library/library-documentation.md +4 -0
- package/content/knowledge/library/library-project-structure.md +4 -0
- package/content/knowledge/library/library-requirements.md +4 -0
- package/content/knowledge/library/library-security.md +4 -0
- package/content/knowledge/library/library-testing.md +4 -0
- package/content/knowledge/library/library-type-definitions.md +4 -0
- package/content/knowledge/library/library-versioning.md +5 -0
- package/content/knowledge/ml/ml-architecture.md +4 -0
- package/content/knowledge/ml/ml-conventions.md +4 -0
- package/content/knowledge/ml/ml-dev-environment.md +4 -0
- package/content/knowledge/ml/ml-experiment-tracking.md +6 -0
- package/content/knowledge/ml/ml-model-evaluation.md +4 -0
- package/content/knowledge/ml/ml-observability.md +5 -0
- package/content/knowledge/ml/ml-project-structure.md +4 -0
- package/content/knowledge/ml/ml-requirements.md +4 -0
- package/content/knowledge/ml/ml-security.md +5 -0
- package/content/knowledge/ml/ml-serving-patterns.md +4 -0
- package/content/knowledge/ml/ml-testing.md +4 -0
- package/content/knowledge/ml/ml-training-patterns.md +4 -0
- package/content/knowledge/mobile-app/mobile-app-architecture.md +6 -0
- package/content/knowledge/mobile-app/mobile-app-conventions.md +6 -0
- package/content/knowledge/mobile-app/mobile-app-deployment.md +6 -0
- package/content/knowledge/mobile-app/mobile-app-dev-environment.md +6 -0
- package/content/knowledge/mobile-app/mobile-app-distribution.md +6 -0
- package/content/knowledge/mobile-app/mobile-app-observability.md +7 -0
- package/content/knowledge/mobile-app/mobile-app-offline-patterns.md +7 -0
- package/content/knowledge/mobile-app/mobile-app-project-structure.md +6 -0
- package/content/knowledge/mobile-app/mobile-app-push-notifications.md +6 -0
- package/content/knowledge/mobile-app/mobile-app-requirements.md +7 -0
- package/content/knowledge/mobile-app/mobile-app-security.md +8 -0
- package/content/knowledge/mobile-app/mobile-app-testing.md +6 -0
- package/content/knowledge/product/gap-analysis.md +4 -0
- package/content/knowledge/product/ideation-craft.md +4 -0
- package/content/knowledge/product/prd-craft.md +4 -0
- package/content/knowledge/product/prd-innovation.md +4 -0
- package/content/knowledge/product/vision-craft.md +4 -0
- package/content/knowledge/product/vision-innovation.md +4 -0
- package/content/knowledge/research/research-architecture.md +4 -0
- package/content/knowledge/research/research-conventions.md +6 -0
- package/content/knowledge/research/research-dev-environment.md +6 -0
- package/content/knowledge/research/research-experiment-loop.md +4 -0
- package/content/knowledge/research/research-experiment-tracking.md +6 -0
- package/content/knowledge/research/research-ml-architecture-search.md +4 -0
- package/content/knowledge/research/research-ml-evaluation.md +4 -0
- package/content/knowledge/research/research-ml-experiment-tracking.md +6 -0
- package/content/knowledge/research/research-ml-training-patterns.md +4 -0
- package/content/knowledge/research/research-observability.md +5 -0
- package/content/knowledge/research/research-overfitting-prevention.md +5 -0
- package/content/knowledge/research/research-project-structure.md +5 -0
- package/content/knowledge/research/research-quant-backtesting.md +4 -0
- package/content/knowledge/research/research-quant-market-data.md +4 -0
- package/content/knowledge/research/research-quant-metrics.md +4 -0
- package/content/knowledge/research/research-quant-requirements.md +4 -0
- package/content/knowledge/research/research-quant-risk.md +4 -0
- package/content/knowledge/research/research-quant-strategy-patterns.md +4 -0
- package/content/knowledge/research/research-requirements.md +5 -0
- package/content/knowledge/research/research-security.md +5 -0
- package/content/knowledge/research/research-sim-compute-management.md +4 -0
- package/content/knowledge/research/research-sim-engine-patterns.md +4 -0
- package/content/knowledge/research/research-sim-parameter-spaces.md +4 -0
- package/content/knowledge/research/research-sim-validation.md +4 -0
- package/content/knowledge/research/research-testing.md +5 -0
- package/content/knowledge/review/review-adr.md +6 -0
- package/content/knowledge/review/review-api-design.md +6 -0
- package/content/knowledge/review/review-art-bible.md +4 -0
- package/content/knowledge/review/review-database-design.md +5 -0
- package/content/knowledge/review/review-domain-modeling.md +5 -0
- package/content/knowledge/review/review-game-design.md +4 -0
- package/content/knowledge/review/review-game-economy.md +4 -0
- package/content/knowledge/review/review-game-ui.md +5 -0
- package/content/knowledge/review/review-implementation-tasks.md +5 -0
- package/content/knowledge/review/review-methodology.md +4 -0
- package/content/knowledge/review/review-netcode.md +4 -0
- package/content/knowledge/review/review-operations.md +6 -0
- package/content/knowledge/review/review-platform-cert.md +4 -0
- package/content/knowledge/review/review-prd.md +4 -0
- package/content/knowledge/review/review-security.md +7 -0
- package/content/knowledge/review/review-system-architecture.md +6 -0
- package/content/knowledge/review/review-testing-strategy.md +6 -0
- package/content/knowledge/review/review-user-stories.md +5 -0
- package/content/knowledge/review/review-ux-specification.md +6 -0
- package/content/knowledge/review/review-vision.md +4 -0
- package/content/knowledge/tools/post-implementation-review-methodology.md +4 -0
- package/content/knowledge/tools/release-management.md +5 -0
- package/content/knowledge/tools/session-analysis.md +4 -0
- package/content/knowledge/tools/version-strategy.md +4 -0
- package/content/knowledge/validation/critical-path-analysis.md +4 -0
- package/content/knowledge/validation/cross-phase-consistency.md +4 -0
- package/content/knowledge/validation/decision-completeness.md +5 -0
- package/content/knowledge/validation/dependency-validation.md +4 -0
- package/content/knowledge/validation/implementability-review.md +4 -0
- package/content/knowledge/validation/scope-management.md +4 -0
- package/content/knowledge/validation/traceability.md +4 -0
- package/content/knowledge/web-app/web-app-api-patterns.md +6 -0
- package/content/knowledge/web-app/web-app-architecture.md +6 -0
- package/content/knowledge/web-app/web-app-auth-patterns.md +9 -0
- package/content/knowledge/web-app/web-app-conventions.md +5 -0
- package/content/knowledge/web-app/web-app-data-patterns.md +6 -0
- package/content/knowledge/web-app/web-app-deployment-workflow.md +6 -0
- package/content/knowledge/web-app/web-app-deployment.md +6 -0
- package/content/knowledge/web-app/web-app-design-system.md +6 -0
- package/content/knowledge/web-app/web-app-dev-environment.md +6 -0
- package/content/knowledge/web-app/web-app-observability.md +6 -0
- package/content/knowledge/web-app/web-app-project-structure.md +5 -0
- package/content/knowledge/web-app/web-app-rendering-strategies.md +6 -0
- package/content/knowledge/web-app/web-app-requirements.md +6 -0
- package/content/knowledge/web-app/web-app-security.md +8 -0
- package/content/knowledge/web-app/web-app-session-patterns.md +7 -0
- package/content/knowledge/web-app/web-app-testing.md +6 -0
- package/content/knowledge/web-app/web-app-ux-patterns.md +6 -0
- package/content/knowledge/web3/web3-access-control.md +8 -0
- package/content/knowledge/web3/web3-architecture.md +7 -0
- package/content/knowledge/web3/web3-audit-workflow.md +7 -0
- package/content/knowledge/web3/web3-common-vulnerabilities.md +8 -0
- package/content/knowledge/web3/web3-conventions.md +6 -0
- package/content/knowledge/web3/web3-deployment-and-verification.md +7 -0
- package/content/knowledge/web3/web3-dev-environment.md +6 -0
- package/content/knowledge/web3/web3-gas-optimization.md +7 -0
- package/content/knowledge/web3/web3-oracles-and-external-data.md +7 -0
- package/content/knowledge/web3/web3-project-structure.md +6 -0
- package/content/knowledge/web3/web3-requirements.md +6 -0
- package/content/knowledge/web3/web3-security.md +8 -0
- package/content/knowledge/web3/web3-testing.md +6 -0
- package/content/knowledge/web3/web3-upgradeability.md +7 -0
- package/content/pipeline/build/multi-agent-resume.md +27 -7
- package/content/pipeline/build/multi-agent-start.md +35 -7
- package/content/pipeline/build/new-enhancement.md +8 -1
- package/content/pipeline/build/quick-task.md +9 -0
- package/content/pipeline/build/single-agent-resume.md +11 -4
- package/content/pipeline/build/single-agent-start.md +13 -4
- package/content/pipeline/consolidation/workflow-audit.md +1 -1
- package/content/pipeline/environment/git-workflow.md +2 -2
- package/content/pipeline/foundation/beads.md +148 -22
- package/content/pipeline/foundation/coding-standards.md +1 -1
- package/content/tools/knowledge-audit-entry.md +79 -0
- package/content/tools/post-implementation-review.md +6 -6
- package/content/tools/prompt-pipeline.md +1 -1
- package/content/tools/release.md +5 -5
- package/content/tools/review-code.md +388 -17
- package/content/tools/review-pr.md +381 -21
- package/content/tools/version-bump.md +5 -5
- package/dist/cli/commands/dashboard.d.ts +1 -1
- package/dist/cli/commands/dashboard.d.ts.map +1 -1
- package/dist/cli/commands/dashboard.js +10 -10
- package/dist/cli/commands/dashboard.js.map +1 -1
- package/dist/cli/commands/dashboard.test.js +1 -1
- package/dist/cli/commands/dashboard.test.js.map +1 -1
- package/dist/cli/commands/guides.d.ts +24 -0
- package/dist/cli/commands/guides.d.ts.map +1 -0
- package/dist/cli/commands/guides.js +103 -0
- package/dist/cli/commands/guides.js.map +1 -0
- package/dist/cli/commands/knowledge-freshness-anti-over-rewrite.d.ts +9 -0
- package/dist/cli/commands/knowledge-freshness-anti-over-rewrite.d.ts.map +1 -0
- package/dist/cli/commands/knowledge-freshness-anti-over-rewrite.js +112 -0
- package/dist/cli/commands/knowledge-freshness-anti-over-rewrite.js.map +1 -0
- package/dist/cli/commands/knowledge-freshness-audit-apply.d.ts +8 -0
- package/dist/cli/commands/knowledge-freshness-audit-apply.d.ts.map +1 -0
- package/dist/cli/commands/knowledge-freshness-audit-apply.js +96 -0
- package/dist/cli/commands/knowledge-freshness-audit-apply.js.map +1 -0
- package/dist/cli/commands/knowledge-freshness-audit-prefilter.d.ts +7 -0
- package/dist/cli/commands/knowledge-freshness-audit-prefilter.d.ts.map +1 -0
- package/dist/cli/commands/knowledge-freshness-audit-prefilter.js +42 -0
- package/dist/cli/commands/knowledge-freshness-audit-prefilter.js.map +1 -0
- package/dist/cli/commands/knowledge-freshness-audit-run-entry.d.ts +9 -0
- package/dist/cli/commands/knowledge-freshness-audit-run-entry.d.ts.map +1 -0
- package/dist/cli/commands/knowledge-freshness-audit-run-entry.js +63 -0
- package/dist/cli/commands/knowledge-freshness-audit-run-entry.js.map +1 -0
- package/dist/cli/commands/knowledge-freshness-bump-version.d.ts +8 -0
- package/dist/cli/commands/knowledge-freshness-bump-version.d.ts.map +1 -0
- package/dist/cli/commands/knowledge-freshness-bump-version.js +34 -0
- package/dist/cli/commands/knowledge-freshness-bump-version.js.map +1 -0
- package/dist/cli/commands/knowledge-freshness-deep-guidance-check.d.ts +7 -0
- package/dist/cli/commands/knowledge-freshness-deep-guidance-check.d.ts.map +1 -0
- package/dist/cli/commands/knowledge-freshness-deep-guidance-check.js +51 -0
- package/dist/cli/commands/knowledge-freshness-deep-guidance-check.js.map +1 -0
- package/dist/cli/commands/knowledge-freshness-link-check.d.ts +7 -0
- package/dist/cli/commands/knowledge-freshness-link-check.d.ts.map +1 -0
- package/dist/cli/commands/knowledge-freshness-link-check.js +57 -0
- package/dist/cli/commands/knowledge-freshness-link-check.js.map +1 -0
- package/dist/cli/commands/knowledge-freshness-lint-unsourced.d.ts +8 -0
- package/dist/cli/commands/knowledge-freshness-lint-unsourced.d.ts.map +1 -0
- package/dist/cli/commands/knowledge-freshness-lint-unsourced.js +58 -0
- package/dist/cli/commands/knowledge-freshness-lint-unsourced.js.map +1 -0
- package/dist/cli/commands/knowledge-freshness.d.ts +4 -0
- package/dist/cli/commands/knowledge-freshness.d.ts.map +1 -0
- package/dist/cli/commands/knowledge-freshness.js +25 -0
- package/dist/cli/commands/knowledge-freshness.js.map +1 -0
- package/dist/cli/commands/observe.d.ts +6 -0
- package/dist/cli/commands/observe.d.ts.map +1 -1
- package/dist/cli/commands/observe.js +22 -1
- package/dist/cli/commands/observe.js.map +1 -1
- package/dist/cli/commands/observe.test.js +82 -0
- package/dist/cli/commands/observe.test.js.map +1 -1
- package/dist/cli/commands/validate-knowledge.d.ts +4 -0
- package/dist/cli/commands/validate-knowledge.d.ts.map +1 -0
- package/dist/cli/commands/validate-knowledge.js +32 -0
- package/dist/cli/commands/validate-knowledge.js.map +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +6 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/core/adapters/claude-code.d.ts.map +1 -1
- package/dist/core/adapters/claude-code.js +6 -3
- package/dist/core/adapters/claude-code.js.map +1 -1
- package/dist/core/adapters/claude-code.test.js +45 -1
- package/dist/core/adapters/claude-code.test.js.map +1 -1
- package/dist/core/assembly/engine.d.ts.map +1 -1
- package/dist/core/assembly/engine.js +7 -3
- package/dist/core/assembly/engine.js.map +1 -1
- package/dist/core/assembly/engine.test.js +45 -1
- package/dist/core/assembly/engine.test.js.map +1 -1
- package/dist/core/assembly/gap-signal-tail.d.ts +18 -0
- package/dist/core/assembly/gap-signal-tail.d.ts.map +1 -0
- package/dist/core/assembly/gap-signal-tail.js +43 -0
- package/dist/core/assembly/gap-signal-tail.js.map +1 -0
- package/dist/core/assembly/gap-signal-tail.test.d.ts +2 -0
- package/dist/core/assembly/gap-signal-tail.test.d.ts.map +1 -0
- package/dist/core/assembly/gap-signal-tail.test.js +49 -0
- package/dist/core/assembly/gap-signal-tail.test.js.map +1 -0
- package/dist/core/assembly/knowledge-loader.d.ts +11 -0
- package/dist/core/assembly/knowledge-loader.d.ts.map +1 -1
- package/dist/core/assembly/knowledge-loader.js +54 -1
- package/dist/core/assembly/knowledge-loader.js.map +1 -1
- package/dist/core/assembly/knowledge-loader.test.js +73 -0
- package/dist/core/assembly/knowledge-loader.test.js.map +1 -1
- package/dist/guides/build.d.ts +12 -0
- package/dist/guides/build.d.ts.map +1 -0
- package/dist/guides/build.js +50 -0
- package/dist/guides/build.js.map +1 -0
- package/dist/guides/build.test.d.ts +2 -0
- package/dist/guides/build.test.d.ts.map +1 -0
- package/dist/guides/build.test.js +74 -0
- package/dist/guides/build.test.js.map +1 -0
- package/dist/guides/chrome.d.ts +24 -0
- package/dist/guides/chrome.d.ts.map +1 -0
- package/dist/guides/chrome.js +118 -0
- package/dist/guides/chrome.js.map +1 -0
- package/dist/guides/cli-guides.test.d.ts +2 -0
- package/dist/guides/cli-guides.test.d.ts.map +1 -0
- package/dist/guides/cli-guides.test.js +41 -0
- package/dist/guides/cli-guides.test.js.map +1 -0
- package/dist/guides/dashboard-theme.css +1073 -0
- package/dist/guides/directives-callout.test.d.ts +2 -0
- package/dist/guides/directives-callout.test.d.ts.map +1 -0
- package/dist/guides/directives-callout.test.js +22 -0
- package/dist/guides/directives-callout.test.js.map +1 -0
- package/dist/guides/directives-chart.test.d.ts +2 -0
- package/dist/guides/directives-chart.test.d.ts.map +1 -0
- package/dist/guides/directives-chart.test.js +25 -0
- package/dist/guides/directives-chart.test.js.map +1 -0
- package/dist/guides/directives-filter-table.test.d.ts +2 -0
- package/dist/guides/directives-filter-table.test.d.ts.map +1 -0
- package/dist/guides/directives-filter-table.test.js +22 -0
- package/dist/guides/directives-filter-table.test.js.map +1 -0
- package/dist/guides/directives-sev.test.d.ts +2 -0
- package/dist/guides/directives-sev.test.d.ts.map +1 -0
- package/dist/guides/directives-sev.test.js +15 -0
- package/dist/guides/directives-sev.test.js.map +1 -0
- package/dist/guides/directives-tabs.test.d.ts +2 -0
- package/dist/guides/directives-tabs.test.d.ts.map +1 -0
- package/dist/guides/directives-tabs.test.js +52 -0
- package/dist/guides/directives-tabs.test.js.map +1 -0
- package/dist/guides/directives.d.ts +7 -0
- package/dist/guides/directives.d.ts.map +1 -0
- package/dist/guides/directives.js +158 -0
- package/dist/guides/directives.js.map +1 -0
- package/dist/guides/fs-guides.test.d.ts +2 -0
- package/dist/guides/fs-guides.test.d.ts.map +1 -0
- package/dist/guides/fs-guides.test.js +14 -0
- package/dist/guides/fs-guides.test.js.map +1 -0
- package/dist/guides/index-page.d.ts +3 -0
- package/dist/guides/index-page.d.ts.map +1 -0
- package/dist/guides/index-page.js +14 -0
- package/dist/guides/index-page.js.map +1 -0
- package/dist/guides/lint.d.ts +6 -0
- package/dist/guides/lint.d.ts.map +1 -0
- package/dist/guides/lint.js +27 -0
- package/dist/guides/lint.js.map +1 -0
- package/dist/guides/lint.test.d.ts +2 -0
- package/dist/guides/lint.test.d.ts.map +1 -0
- package/dist/guides/lint.test.js +24 -0
- package/dist/guides/lint.test.js.map +1 -0
- package/dist/guides/loader.d.ts +4 -0
- package/dist/guides/loader.d.ts.map +1 -0
- package/dist/guides/loader.js +63 -0
- package/dist/guides/loader.js.map +1 -0
- package/dist/guides/loader.test.d.ts +2 -0
- package/dist/guides/loader.test.d.ts.map +1 -0
- package/dist/guides/loader.test.js +85 -0
- package/dist/guides/loader.test.js.map +1 -0
- package/dist/guides/mermaid-sanitize.test.d.ts +2 -0
- package/dist/guides/mermaid-sanitize.test.d.ts.map +1 -0
- package/dist/guides/mermaid-sanitize.test.js +57 -0
- package/dist/guides/mermaid-sanitize.test.js.map +1 -0
- package/dist/guides/mermaid.d.ts +18 -0
- package/dist/guides/mermaid.d.ts.map +1 -0
- package/dist/guides/mermaid.js +137 -0
- package/dist/guides/mermaid.js.map +1 -0
- package/dist/guides/mermaid.test.d.ts +2 -0
- package/dist/guides/mermaid.test.d.ts.map +1 -0
- package/dist/guides/mermaid.test.js +105 -0
- package/dist/guides/mermaid.test.js.map +1 -0
- package/dist/guides/render.d.ts +12 -0
- package/dist/guides/render.d.ts.map +1 -0
- package/dist/guides/render.js +58 -0
- package/dist/guides/render.js.map +1 -0
- package/dist/guides/render.test.d.ts +2 -0
- package/dist/guides/render.test.d.ts.map +1 -0
- package/dist/guides/render.test.js +46 -0
- package/dist/guides/render.test.js.map +1 -0
- package/dist/guides/sanitize.d.ts +3 -0
- package/dist/guides/sanitize.d.ts.map +1 -0
- package/dist/guides/sanitize.js +76 -0
- package/dist/guides/sanitize.js.map +1 -0
- package/dist/guides/sanitize.test.d.ts +2 -0
- package/dist/guides/sanitize.test.d.ts.map +1 -0
- package/dist/guides/sanitize.test.js +45 -0
- package/dist/guides/sanitize.test.js.map +1 -0
- package/dist/guides/template.d.ts +11 -0
- package/dist/guides/template.d.ts.map +1 -0
- package/dist/guides/template.js +38 -0
- package/dist/guides/template.js.map +1 -0
- package/dist/guides/template.test.d.ts +2 -0
- package/dist/guides/template.test.d.ts.map +1 -0
- package/dist/guides/template.test.js +41 -0
- package/dist/guides/template.test.js.map +1 -0
- package/dist/guides/types.d.ts +20 -0
- package/dist/guides/types.d.ts.map +1 -0
- package/dist/guides/types.js +2 -0
- package/dist/guides/types.js.map +1 -0
- package/dist/knowledge-freshness/audit-apply-pr.d.ts +64 -0
- package/dist/knowledge-freshness/audit-apply-pr.d.ts.map +1 -0
- package/dist/knowledge-freshness/audit-apply-pr.js +309 -0
- package/dist/knowledge-freshness/audit-apply-pr.js.map +1 -0
- package/dist/knowledge-freshness/audit-apply-pr.test.d.ts +2 -0
- package/dist/knowledge-freshness/audit-apply-pr.test.d.ts.map +1 -0
- package/dist/knowledge-freshness/audit-apply-pr.test.js +211 -0
- package/dist/knowledge-freshness/audit-apply-pr.test.js.map +1 -0
- package/dist/knowledge-freshness/audit-apply.d.ts +16 -0
- package/dist/knowledge-freshness/audit-apply.d.ts.map +1 -0
- package/dist/knowledge-freshness/audit-apply.js +193 -0
- package/dist/knowledge-freshness/audit-apply.js.map +1 -0
- package/dist/knowledge-freshness/audit-apply.test.d.ts +2 -0
- package/dist/knowledge-freshness/audit-apply.test.d.ts.map +1 -0
- package/dist/knowledge-freshness/audit-apply.test.js +482 -0
- package/dist/knowledge-freshness/audit-apply.test.js.map +1 -0
- package/dist/knowledge-freshness/audit-prefilter.d.ts +12 -0
- package/dist/knowledge-freshness/audit-prefilter.d.ts.map +1 -0
- package/dist/knowledge-freshness/audit-prefilter.js +74 -0
- package/dist/knowledge-freshness/audit-prefilter.js.map +1 -0
- package/dist/knowledge-freshness/audit-prefilter.test.d.ts +2 -0
- package/dist/knowledge-freshness/audit-prefilter.test.d.ts.map +1 -0
- package/dist/knowledge-freshness/audit-prefilter.test.js +78 -0
- package/dist/knowledge-freshness/audit-prefilter.test.js.map +1 -0
- package/dist/knowledge-freshness/audit-runner.d.ts +135 -0
- package/dist/knowledge-freshness/audit-runner.d.ts.map +1 -0
- package/dist/knowledge-freshness/audit-runner.js +168 -0
- package/dist/knowledge-freshness/audit-runner.js.map +1 -0
- package/dist/knowledge-freshness/audit-runner.test.d.ts +2 -0
- package/dist/knowledge-freshness/audit-runner.test.d.ts.map +1 -0
- package/dist/knowledge-freshness/audit-runner.test.js +130 -0
- package/dist/knowledge-freshness/audit-runner.test.js.map +1 -0
- package/dist/knowledge-freshness/bump-version.d.ts +24 -0
- package/dist/knowledge-freshness/bump-version.d.ts.map +1 -0
- package/dist/knowledge-freshness/bump-version.js +69 -0
- package/dist/knowledge-freshness/bump-version.js.map +1 -0
- package/dist/knowledge-freshness/bump-version.test.d.ts +2 -0
- package/dist/knowledge-freshness/bump-version.test.d.ts.map +1 -0
- package/dist/knowledge-freshness/bump-version.test.js +82 -0
- package/dist/knowledge-freshness/bump-version.test.js.map +1 -0
- package/dist/knowledge-freshness/gates/anti-over-rewrite.d.ts +86 -0
- package/dist/knowledge-freshness/gates/anti-over-rewrite.d.ts.map +1 -0
- package/dist/knowledge-freshness/gates/anti-over-rewrite.js +210 -0
- package/dist/knowledge-freshness/gates/anti-over-rewrite.js.map +1 -0
- package/dist/knowledge-freshness/gates/anti-over-rewrite.test.d.ts +2 -0
- package/dist/knowledge-freshness/gates/anti-over-rewrite.test.d.ts.map +1 -0
- package/dist/knowledge-freshness/gates/anti-over-rewrite.test.js +115 -0
- package/dist/knowledge-freshness/gates/anti-over-rewrite.test.js.map +1 -0
- package/dist/knowledge-freshness/gates/changed-files.d.ts +53 -0
- package/dist/knowledge-freshness/gates/changed-files.d.ts.map +1 -0
- package/dist/knowledge-freshness/gates/changed-files.js +128 -0
- package/dist/knowledge-freshness/gates/changed-files.js.map +1 -0
- package/dist/knowledge-freshness/gates/deep-guidance-check.d.ts +23 -0
- package/dist/knowledge-freshness/gates/deep-guidance-check.d.ts.map +1 -0
- package/dist/knowledge-freshness/gates/deep-guidance-check.js +27 -0
- package/dist/knowledge-freshness/gates/deep-guidance-check.js.map +1 -0
- package/dist/knowledge-freshness/gates/deep-guidance-check.test.d.ts +2 -0
- package/dist/knowledge-freshness/gates/deep-guidance-check.test.d.ts.map +1 -0
- package/dist/knowledge-freshness/gates/deep-guidance-check.test.js +23 -0
- package/dist/knowledge-freshness/gates/deep-guidance-check.test.js.map +1 -0
- package/dist/knowledge-freshness/gates/link-check.d.ts +55 -0
- package/dist/knowledge-freshness/gates/link-check.d.ts.map +1 -0
- package/dist/knowledge-freshness/gates/link-check.js +161 -0
- package/dist/knowledge-freshness/gates/link-check.js.map +1 -0
- package/dist/knowledge-freshness/gates/link-check.test.d.ts +2 -0
- package/dist/knowledge-freshness/gates/link-check.test.d.ts.map +1 -0
- package/dist/knowledge-freshness/gates/link-check.test.js +76 -0
- package/dist/knowledge-freshness/gates/link-check.test.js.map +1 -0
- package/dist/knowledge-freshness/gates/lint-unsourced.d.ts +40 -0
- package/dist/knowledge-freshness/gates/lint-unsourced.d.ts.map +1 -0
- package/dist/knowledge-freshness/gates/lint-unsourced.js +143 -0
- package/dist/knowledge-freshness/gates/lint-unsourced.js.map +1 -0
- package/dist/knowledge-freshness/gates/lint-unsourced.test.d.ts +2 -0
- package/dist/knowledge-freshness/gates/lint-unsourced.test.d.ts.map +1 -0
- package/dist/knowledge-freshness/gates/lint-unsourced.test.js +68 -0
- package/dist/knowledge-freshness/gates/lint-unsourced.test.js.map +1 -0
- package/dist/knowledge-freshness/gates/parse-entry.d.ts +25 -0
- package/dist/knowledge-freshness/gates/parse-entry.d.ts.map +1 -0
- package/dist/knowledge-freshness/gates/parse-entry.js +41 -0
- package/dist/knowledge-freshness/gates/parse-entry.js.map +1 -0
- package/dist/knowledge-freshness/gates/parse-entry.test.d.ts +2 -0
- package/dist/knowledge-freshness/gates/parse-entry.test.d.ts.map +1 -0
- package/dist/knowledge-freshness/gates/parse-entry.test.js +34 -0
- package/dist/knowledge-freshness/gates/parse-entry.test.js.map +1 -0
- package/dist/knowledge-freshness/providers/anthropic.d.ts +33 -0
- package/dist/knowledge-freshness/providers/anthropic.d.ts.map +1 -0
- package/dist/knowledge-freshness/providers/anthropic.js +36 -0
- package/dist/knowledge-freshness/providers/anthropic.js.map +1 -0
- package/dist/knowledge-freshness/providers/anthropic.test.d.ts +2 -0
- package/dist/knowledge-freshness/providers/anthropic.test.d.ts.map +1 -0
- package/dist/knowledge-freshness/providers/anthropic.test.js +32 -0
- package/dist/knowledge-freshness/providers/anthropic.test.js.map +1 -0
- package/dist/knowledge-freshness/providers/deepseek.d.ts +33 -0
- package/dist/knowledge-freshness/providers/deepseek.d.ts.map +1 -0
- package/dist/knowledge-freshness/providers/deepseek.js +157 -0
- package/dist/knowledge-freshness/providers/deepseek.js.map +1 -0
- package/dist/knowledge-freshness/providers/deepseek.test.d.ts +2 -0
- package/dist/knowledge-freshness/providers/deepseek.test.d.ts.map +1 -0
- package/dist/knowledge-freshness/providers/deepseek.test.js +142 -0
- package/dist/knowledge-freshness/providers/deepseek.test.js.map +1 -0
- package/dist/knowledge-freshness/providers/index.d.ts +41 -0
- package/dist/knowledge-freshness/providers/index.d.ts.map +1 -0
- package/dist/knowledge-freshness/providers/index.js +108 -0
- package/dist/knowledge-freshness/providers/index.js.map +1 -0
- package/dist/knowledge-freshness/providers/index.test.d.ts +2 -0
- package/dist/knowledge-freshness/providers/index.test.d.ts.map +1 -0
- package/dist/knowledge-freshness/providers/index.test.js +97 -0
- package/dist/knowledge-freshness/providers/index.test.js.map +1 -0
- package/dist/knowledge-freshness/source-hash.d.ts +39 -0
- package/dist/knowledge-freshness/source-hash.d.ts.map +1 -0
- package/dist/knowledge-freshness/source-hash.js +180 -0
- package/dist/knowledge-freshness/source-hash.js.map +1 -0
- package/dist/knowledge-freshness/source-hash.test.d.ts +2 -0
- package/dist/knowledge-freshness/source-hash.test.d.ts.map +1 -0
- package/dist/knowledge-freshness/source-hash.test.js +63 -0
- package/dist/knowledge-freshness/source-hash.test.js.map +1 -0
- package/dist/knowledge-freshness/source-url-validator.d.ts +57 -0
- package/dist/knowledge-freshness/source-url-validator.d.ts.map +1 -0
- package/dist/knowledge-freshness/source-url-validator.js +304 -0
- package/dist/knowledge-freshness/source-url-validator.js.map +1 -0
- package/dist/knowledge-freshness/source-url-validator.test.d.ts +2 -0
- package/dist/knowledge-freshness/source-url-validator.test.d.ts.map +1 -0
- package/dist/knowledge-freshness/source-url-validator.test.js +167 -0
- package/dist/knowledge-freshness/source-url-validator.test.js.map +1 -0
- package/dist/observability/adapters/beads.d.ts +4 -0
- package/dist/observability/adapters/beads.d.ts.map +1 -1
- package/dist/observability/adapters/beads.js +25 -2
- package/dist/observability/adapters/beads.js.map +1 -1
- package/dist/observability/adapters/beads.test.js +40 -2
- package/dist/observability/adapters/beads.test.js.map +1 -1
- package/dist/observability/checks/lens-i-knowledge-gaps.d.ts +3 -0
- package/dist/observability/checks/lens-i-knowledge-gaps.d.ts.map +1 -0
- package/dist/observability/checks/lens-i-knowledge-gaps.js +165 -0
- package/dist/observability/checks/lens-i-knowledge-gaps.js.map +1 -0
- package/dist/observability/checks/lens-i-knowledge-gaps.test.d.ts +2 -0
- package/dist/observability/checks/lens-i-knowledge-gaps.test.d.ts.map +1 -0
- package/dist/observability/checks/lens-i-knowledge-gaps.test.js +421 -0
- package/dist/observability/checks/lens-i-knowledge-gaps.test.js.map +1 -0
- package/dist/observability/checks/lens-i-lessons-scanner.d.ts +16 -0
- package/dist/observability/checks/lens-i-lessons-scanner.d.ts.map +1 -0
- package/dist/observability/checks/lens-i-lessons-scanner.js +106 -0
- package/dist/observability/checks/lens-i-lessons-scanner.js.map +1 -0
- package/dist/observability/checks/lens-i-lessons-scanner.test.d.ts +2 -0
- package/dist/observability/checks/lens-i-lessons-scanner.test.d.ts.map +1 -0
- package/dist/observability/checks/lens-i-lessons-scanner.test.js +174 -0
- package/dist/observability/checks/lens-i-lessons-scanner.test.js.map +1 -0
- package/dist/observability/engine/api.d.ts +4 -0
- package/dist/observability/engine/api.d.ts.map +1 -1
- package/dist/observability/engine/api.js +17 -1
- package/dist/observability/engine/api.js.map +1 -1
- package/dist/observability/engine/checks/observability-config.d.ts +4 -0
- package/dist/observability/engine/checks/observability-config.d.ts.map +1 -1
- package/dist/observability/engine/checks/observability-config.js +1 -0
- package/dist/observability/engine/checks/observability-config.js.map +1 -1
- package/dist/observability/engine/checks/registry.d.ts.map +1 -1
- package/dist/observability/engine/checks/registry.js +7 -0
- package/dist/observability/engine/checks/registry.js.map +1 -1
- package/dist/observability/engine/checks/registry.test.js +3 -2
- package/dist/observability/engine/checks/registry.test.js.map +1 -1
- package/dist/observability/engine/checks/runner.d.ts +30 -0
- package/dist/observability/engine/checks/runner.d.ts.map +1 -1
- package/dist/observability/engine/checks/runner.js +8 -1
- package/dist/observability/engine/checks/runner.js.map +1 -1
- package/dist/observability/engine/checks/runner.test.js +74 -0
- package/dist/observability/engine/checks/runner.test.js.map +1 -1
- package/dist/observability/engine/event-schemas.d.ts.map +1 -1
- package/dist/observability/engine/event-schemas.js +41 -3
- package/dist/observability/engine/event-schemas.js.map +1 -1
- package/dist/observability/engine/event-schemas.test.js +105 -0
- package/dist/observability/engine/event-schemas.test.js.map +1 -1
- package/dist/observability/engine/fix-flow.d.ts +7 -0
- package/dist/observability/engine/fix-flow.d.ts.map +1 -1
- package/dist/observability/engine/fix-flow.js +5 -3
- package/dist/observability/engine/fix-flow.js.map +1 -1
- package/dist/observability/engine/knowledge-root-integration.test.d.ts +2 -0
- package/dist/observability/engine/knowledge-root-integration.test.d.ts.map +1 -0
- package/dist/observability/engine/knowledge-root-integration.test.js +103 -0
- package/dist/observability/engine/knowledge-root-integration.test.js.map +1 -0
- package/dist/observability/engine/ledger-writer.d.ts +11 -1
- package/dist/observability/engine/ledger-writer.d.ts.map +1 -1
- package/dist/observability/engine/ledger-writer.js +6 -0
- package/dist/observability/engine/ledger-writer.js.map +1 -1
- package/dist/observability/engine/llm-dispatcher.d.ts.map +1 -1
- package/dist/observability/engine/llm-dispatcher.js +36 -5
- package/dist/observability/engine/llm-dispatcher.js.map +1 -1
- package/dist/observability/engine/llm-dispatcher.test.js +23 -0
- package/dist/observability/engine/llm-dispatcher.test.js.map +1 -1
- package/dist/observability/engine/types.d.ts +20 -1
- package/dist/observability/engine/types.d.ts.map +1 -1
- package/dist/observability/engine/types.test.js +1 -1
- package/dist/observability/engine/types.test.js.map +1 -1
- package/dist/observability/knowledge-index.d.ts +145 -0
- package/dist/observability/knowledge-index.d.ts.map +1 -0
- package/dist/observability/knowledge-index.js +353 -0
- package/dist/observability/knowledge-index.js.map +1 -0
- package/dist/observability/knowledge-index.test.d.ts +2 -0
- package/dist/observability/knowledge-index.test.d.ts.map +1 -0
- package/dist/observability/knowledge-index.test.js +364 -0
- package/dist/observability/knowledge-index.test.js.map +1 -0
- package/dist/observability/renderers/markdown.d.ts.map +1 -1
- package/dist/observability/renderers/markdown.js +14 -0
- package/dist/observability/renderers/markdown.js.map +1 -1
- package/dist/observability/renderers/markdown.test.js +30 -0
- package/dist/observability/renderers/markdown.test.js.map +1 -1
- package/dist/types/assembly.d.ts +10 -0
- package/dist/types/assembly.d.ts.map +1 -1
- package/dist/utils/fs.d.ts +6 -0
- package/dist/utils/fs.d.ts.map +1 -1
- package/dist/utils/fs.js +13 -0
- package/dist/utils/fs.js.map +1 -1
- package/dist/validation/knowledge-frontmatter-validator.d.ts +15 -0
- package/dist/validation/knowledge-frontmatter-validator.d.ts.map +1 -0
- package/dist/validation/knowledge-frontmatter-validator.js +131 -0
- package/dist/validation/knowledge-frontmatter-validator.js.map +1 -0
- package/dist/validation/knowledge-frontmatter-validator.test.d.ts +2 -0
- package/dist/validation/knowledge-frontmatter-validator.test.d.ts.map +1 -0
- package/dist/validation/knowledge-frontmatter-validator.test.js +66 -0
- package/dist/validation/knowledge-frontmatter-validator.test.js.map +1 -0
- package/package.json +13 -4
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: review-code
|
|
3
3
|
description: Run all configured code review channels on local code before commit or push
|
|
4
|
-
summary: "Review the current local delivery candidate with the
|
|
4
|
+
summary: "Review the current local delivery candidate with the four built-in MMR CLI channels (Codex CLI, Gemini CLI, Claude CLI, Grok CLI) plus the Superpowers code-reviewer agent as a complementary agent channel reconciled into the same MMR job, before committing or pushing. Supports staged changes, an explicit ref range, or the full local delivery candidate (committed branch diff + staged + unstaged); untracked files are not included."
|
|
5
5
|
phase: null
|
|
6
6
|
order: null
|
|
7
7
|
dependencies: []
|
|
@@ -15,19 +15,20 @@ argument-hint: "[--base <ref>] [--head <ref>] [--staged] [--report-only] [--fix-
|
|
|
15
15
|
|
|
16
16
|
## Purpose
|
|
17
17
|
|
|
18
|
-
Run the same review stack used by `review-pr` (
|
|
19
|
-
the Superpowers code-reviewer agent as a complementary
|
|
20
|
-
local code before commit or push. This is the preflight review entry point
|
|
18
|
+
Run the same review stack used by `review-pr` (four built-in MMR CLI channels
|
|
19
|
+
plus the Superpowers code-reviewer agent as a complementary agent channel), but
|
|
20
|
+
on local code before commit or push. This is the preflight review entry point
|
|
21
21
|
for bug fixes, small features, and quick tasks when the user wants
|
|
22
22
|
multi-model review before anything leaves the machine.
|
|
23
23
|
|
|
24
|
-
The
|
|
24
|
+
The built-in CLI channels are:
|
|
25
25
|
1. **Codex CLI** — implementation correctness, security, API contracts
|
|
26
26
|
2. **Gemini CLI** — architectural patterns, broad-context reasoning
|
|
27
27
|
3. **Claude CLI** — code quality, tests, and plan alignment
|
|
28
|
+
4. **Grok CLI** — xAI's independent second opinion (correctness, code quality; proprietary)
|
|
28
29
|
|
|
29
|
-
Plus the
|
|
30
|
-
|
|
30
|
+
Plus the complementary agent channel:
|
|
31
|
+
5. **Superpowers code-reviewer** — agent-based review dispatched via the
|
|
31
32
|
`superpowers:code-reviewer` skill, reconciled into the same MMR job via
|
|
32
33
|
`mmr reconcile` for a unified verdict.
|
|
33
34
|
|
|
@@ -53,7 +54,7 @@ brand-new files.
|
|
|
53
54
|
|
|
54
55
|
## Expected Outputs
|
|
55
56
|
|
|
56
|
-
- A reconciled
|
|
57
|
+
- A reconciled multi-channel review summary for the local delivery candidate (four built-in MMR CLI channels + Superpowers code-reviewer)
|
|
57
58
|
- One of these verdicts: `pass`, `degraded-pass`, `blocked`, `needs-user-decision`
|
|
58
59
|
- Fixed code when findings are resolved in normal mode
|
|
59
60
|
|
|
@@ -133,7 +134,7 @@ echo "$AGENT_FINDINGS" > /tmp/agent-findings.json
|
|
|
133
134
|
mmr reconcile "$JOB_ID" --channel superpowers --input /tmp/agent-findings.json
|
|
134
135
|
```
|
|
135
136
|
|
|
136
|
-
The agent's review output must use MMR-compatible finding schema: each finding needs `severity` (P0-P3), `location` (file:line), and `description` (`suggestion` is optional).
|
|
137
|
+
The agent's review output must use MMR-compatible finding schema: each finding needs `severity` (P0-P3), `category` (correctness, edge-case, security, acceptance-criteria, test-coverage, or another stable category), `location` (file:line), and `description` (`suggestion` is optional).
|
|
137
138
|
|
|
138
139
|
If `mmr` is not installed (`command -v mmr` fails), fall back to the manual multi-channel flow below.
|
|
139
140
|
|
|
@@ -257,11 +258,11 @@ Format the changed-file context like:
|
|
|
257
258
|
[full file contents]
|
|
258
259
|
```
|
|
259
260
|
|
|
260
|
-
### Step 4: Run All
|
|
261
|
+
### Step 4: Run All Built-in Review Channels
|
|
261
262
|
|
|
262
263
|
Each channel reviews independently. Do NOT share one channel's output with another.
|
|
263
264
|
|
|
264
|
-
**Foreground only:** Always run Codex and
|
|
265
|
+
**Foreground only:** Always run Codex, Gemini, and Grok CLI commands as foreground Bash calls. Never use `run_in_background`, `&`, or `nohup`. Background execution produces empty output. Multiple foreground calls in a single message are fine.
|
|
265
266
|
|
|
266
267
|
#### Channel 1: Codex CLI
|
|
267
268
|
|
|
@@ -325,6 +326,31 @@ Dispatch via `claude -p` with the review prompt.
|
|
|
325
326
|
This channel must review the same local delivery candidate, even when no PR or
|
|
326
327
|
clean ref range exists.
|
|
327
328
|
|
|
329
|
+
#### Channel 4: Grok CLI
|
|
330
|
+
|
|
331
|
+
Check installation and auth:
|
|
332
|
+
|
|
333
|
+
```bash
|
|
334
|
+
command -v grok >/dev/null 2>&1
|
|
335
|
+
grok models >/dev/null 2>&1
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
- If `grok` is not installed: skip this channel and record root-cause `not_installed`
|
|
339
|
+
- If auth fails: tell the user to run `! grok login`, retry after recovery, and if recovery is not possible, record root-cause `auth_failed` and continue with the remaining channels
|
|
340
|
+
|
|
341
|
+
If auth cannot be recovered, or if Grok is not installed, queue a compensating Claude self-review pass focused on an independent second opinion over correctness and code quality. Label findings as `[compensating: Grok-equivalent]`.
|
|
342
|
+
|
|
343
|
+
Grok ignores stdin — pass the prompt via a file, and unwrap the reply from `.text`:
|
|
344
|
+
|
|
345
|
+
```bash
|
|
346
|
+
PROMPT_FILE=$(mktemp)
|
|
347
|
+
# ...write the full review prompt to "$PROMPT_FILE"...
|
|
348
|
+
grok --prompt-file "$PROMPT_FILE" --output-format json 2>/dev/null
|
|
349
|
+
rm -f "$PROMPT_FILE" # clean up the temp prompt file
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
If the CLI exits with a non-zero code, produces malformed/unparseable output, or is killed by the tool runner timeout, record root-cause `failed` and queue a compensating pass for that channel.
|
|
353
|
+
|
|
328
354
|
**After all channels:** Run any queued compensating passes as foreground Claude self-review passes. Each compensating pass uses the same review prompt as the missing channel, focusing on that channel's strength area.
|
|
329
355
|
|
|
330
356
|
### Step 5: Use This Review Prompt
|
|
@@ -363,7 +389,8 @@ Respond with JSON:
|
|
|
363
389
|
"findings": [
|
|
364
390
|
{
|
|
365
391
|
"severity": "P0" | "P1" | "P2" | "P3",
|
|
366
|
-
"
|
|
392
|
+
"category": "correctness|edge-case|security|acceptance-criteria|test-coverage",
|
|
393
|
+
"location": "relative/path/to/file.ts:42",
|
|
367
394
|
"description": "what is wrong",
|
|
368
395
|
"suggestion": "specific fix"
|
|
369
396
|
}
|
|
@@ -397,10 +424,352 @@ Otherwise:
|
|
|
397
424
|
1. Fix all findings at or above `fix_threshold` (read from `results.fix_threshold` in the verdict JSON; default `P2`)
|
|
398
425
|
2. Re-run the channels that produced findings
|
|
399
426
|
3. Keep iterating as long as each new round surfaces *different, concrete, fixable* findings — that is healthy review/fix iteration, not a stuck loop
|
|
400
|
-
4. The 3-round limit is **per finding
|
|
427
|
+
4. The 3-round limit is **per finding hash**, enforced by the wrapper-side bookkeeping in Step 7a (`.scaffold/review-attempts/<session-id>.json`). Stop and surface to the user when any blocking finding's hash hits 3 attempts (`_review_at_strike_limit` returns true). Other stop conditions: a finding is genuinely ambiguous (channels contradict each other), or the user explicitly asks to stop. Use verdict `needs-user-decision` for ambiguity, `blocked` for stuck-hash cases. Identity components — `location`, `category`, `description`, `suggestion` — mirror MMR T2-A's forthcoming native `finding_key` (v3.30).
|
|
401
428
|
|
|
402
429
|
**Fix cycle channel rule:** Re-run only channels that originally completed or ran as compensating passes. Never retry a channel marked `not_installed`, `auth_failed`, or `timeout` during fix rounds — its availability does not change within a session.
|
|
403
430
|
|
|
431
|
+
### Step 7a: Wrapper-Side Per-Finding Hash (Stopgap until MMR v3.30)
|
|
432
|
+
|
|
433
|
+
Same wrapper-side bookkeeping as `review-pr.md` Step 7a. Local review reuses
|
|
434
|
+
the helper semantics, with local-session derivation (no PR number) and the
|
|
435
|
+
portable hardening noted below.
|
|
436
|
+
|
|
437
|
+
This section is throwaway — when MMR v3.30 lands, replace this entire block
|
|
438
|
+
with `mmr review --session <id> --max-rounds N` and read `finding_key` from
|
|
439
|
+
the verdict JSON directly.
|
|
440
|
+
|
|
441
|
+
#### Session id (review-code variant)
|
|
442
|
+
|
|
443
|
+
```bash
|
|
444
|
+
_review_session_id() {
|
|
445
|
+
_review_sanitize_session_id() {
|
|
446
|
+
local raw="$1" sanitized
|
|
447
|
+
sanitized=$(printf '%s' "$raw" | tr -c 'a-zA-Z0-9_.-' '_')
|
|
448
|
+
if [ -z "$sanitized" ] || [ "$sanitized" = "." ] || [ "$sanitized" = ".." ]; then
|
|
449
|
+
echo "Error: review session id resolves to an unsafe path segment" >&2
|
|
450
|
+
return 1
|
|
451
|
+
fi
|
|
452
|
+
printf '%s' "$sanitized"
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
if [ -n "${REVIEW_SESSION_ID:-}" ]; then
|
|
456
|
+
_review_sanitize_session_id "$REVIEW_SESSION_ID" || return 1
|
|
457
|
+
return
|
|
458
|
+
fi
|
|
459
|
+
if [ -n "${__REVIEW_SESSION_ID:-}" ]; then
|
|
460
|
+
_review_sanitize_session_id "$__REVIEW_SESSION_ID" || return 1
|
|
461
|
+
return
|
|
462
|
+
fi
|
|
463
|
+
local branch base
|
|
464
|
+
branch=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "")
|
|
465
|
+
base="${BASE_REF:-main}"
|
|
466
|
+
if [ -n "$branch" ] && [ "$branch" != "HEAD" ]; then
|
|
467
|
+
__REVIEW_SESSION_ID=$(_review_sanitize_session_id "$branch@$base") || return 1
|
|
468
|
+
printf '%s' "$__REVIEW_SESSION_ID"
|
|
469
|
+
return
|
|
470
|
+
fi
|
|
471
|
+
local commit
|
|
472
|
+
commit=$(git rev-parse --short HEAD 2>/dev/null || echo "")
|
|
473
|
+
if [ -n "$commit" ]; then
|
|
474
|
+
__REVIEW_SESSION_ID=$(_review_sanitize_session_id "commit-$commit") || return 1
|
|
475
|
+
printf '%s' "$__REVIEW_SESSION_ID"
|
|
476
|
+
return
|
|
477
|
+
fi
|
|
478
|
+
__REVIEW_SESSION_ID=$(_review_sanitize_session_id "ts-$(date -u +%Y-%m-%dT%H:%M:%SZ)") || return 1
|
|
479
|
+
printf '%s' "$__REVIEW_SESSION_ID"
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
_review_attempts_file() {
|
|
483
|
+
local id; id=$(_review_session_id) || return 1
|
|
484
|
+
mkdir -p .scaffold/review-attempts || return 1
|
|
485
|
+
printf '.scaffold/review-attempts/%s.json' "$id"
|
|
486
|
+
}
|
|
487
|
+
```
|
|
488
|
+
|
|
489
|
+
#### Normalization, hashing, shingle, and attempt-recording helpers
|
|
490
|
+
|
|
491
|
+
The functions `_review_normalize_location`, `_review_normalize_description`,
|
|
492
|
+
`_review_normalize_suggestion`, `_review_finding_hash`,
|
|
493
|
+
`_review_description_shingle`, `_review_record_attempt`, and
|
|
494
|
+
`_review_at_strike_limit` match the semantics of the ones defined in
|
|
495
|
+
`content/tools/review-pr.md` Step 7a. They are reproduced here so this file is
|
|
496
|
+
self-contained:
|
|
497
|
+
|
|
498
|
+
They are intentionally reproduced in this tool file instead of sourced from a
|
|
499
|
+
shared script because agent-facing tool markdown must be self-contained until
|
|
500
|
+
MMR v3.30 provides native `finding_key` and session tracking.
|
|
501
|
+
|
|
502
|
+
The local-review variant also makes dependency checks explicit, preserves
|
|
503
|
+
backtick code spans in suggestions, and keeps short-description shingles useful
|
|
504
|
+
with shorter n-grams.
|
|
505
|
+
|
|
506
|
+
```bash
|
|
507
|
+
_review_require_jq() {
|
|
508
|
+
command -v jq >/dev/null 2>&1 || {
|
|
509
|
+
echo "Error: jq is required for review finding bookkeeping" >&2
|
|
510
|
+
return 1
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
|
|
514
|
+
_review_require_python3() {
|
|
515
|
+
command -v python3 >/dev/null 2>&1 || {
|
|
516
|
+
echo "Error: python3 is required for review finding normalization" >&2
|
|
517
|
+
return 1
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
_review_sha1() {
|
|
522
|
+
if command -v shasum >/dev/null 2>&1; then
|
|
523
|
+
shasum -a 1 | awk '{print $1}'
|
|
524
|
+
elif command -v sha1sum >/dev/null 2>&1; then
|
|
525
|
+
sha1sum | awk '{print $1}'
|
|
526
|
+
else
|
|
527
|
+
echo "Error: shasum or sha1sum is required for review finding hashing" >&2
|
|
528
|
+
return 1
|
|
529
|
+
fi
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
_review_normalize_location() {
|
|
533
|
+
# Input: $1 = raw location (e.g. "src/foo.ts:42-44" or "pkg/Bar.kt (line 10)")
|
|
534
|
+
# Output: lowercased file path with trailing :N, :N-M, :N:M, (line N) stripped
|
|
535
|
+
printf '%s' "$1" \
|
|
536
|
+
| tr '[:upper:]' '[:lower:]' \
|
|
537
|
+
| awk '{ sub(/^[ \t]+/, ""); sub(/[ \t]+$/, ""); print }' \
|
|
538
|
+
| sed -E 's/(:[0-9]+(:[0-9]+)?(-[0-9]+)?|[[:space:]]+\(line[[:space:]]+[0-9]+\))$//'
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
_review_normalize_description() {
|
|
542
|
+
# Input: $1 = raw description
|
|
543
|
+
# Output: tokenize on backticks → normalize non-code segments → reassemble
|
|
544
|
+
_review_require_python3 || return 1
|
|
545
|
+
printf '%s' "$1" | python3 -c '
|
|
546
|
+
import re, sys
|
|
547
|
+
s = sys.stdin.read()
|
|
548
|
+
out = []
|
|
549
|
+
pattern = re.compile(r"(```[\s\S]*?```|`[^`]*`)")
|
|
550
|
+
pos = 0
|
|
551
|
+
for match in pattern.finditer(s):
|
|
552
|
+
seg = s[pos:match.start()]
|
|
553
|
+
seg = seg.lower()
|
|
554
|
+
seg = re.sub(r"\bline\s+\d+\b", "", seg)
|
|
555
|
+
seg = re.sub(r"\bat\s+line\s+\d+\b", "", seg)
|
|
556
|
+
seg = re.sub(r"^\s*(p[0-3]|critical|high|medium|low|trivial)\s*:\s*", "", seg)
|
|
557
|
+
seg = re.sub(r"\s+", " ", seg).strip()
|
|
558
|
+
if seg:
|
|
559
|
+
out.append(seg)
|
|
560
|
+
out.append(match.group(0))
|
|
561
|
+
pos = match.end()
|
|
562
|
+
seg = s[pos:]
|
|
563
|
+
seg = seg.lower()
|
|
564
|
+
seg = re.sub(r"\bline\s+\d+\b", "", seg)
|
|
565
|
+
seg = re.sub(r"\bat\s+line\s+\d+\b", "", seg)
|
|
566
|
+
seg = re.sub(r"^\s*(p[0-3]|critical|high|medium|low|trivial)\s*:\s*", "", seg)
|
|
567
|
+
seg = re.sub(r"\s+", " ", seg).strip()
|
|
568
|
+
if seg:
|
|
569
|
+
out.append(seg)
|
|
570
|
+
print(" ".join(p for p in out if p))
|
|
571
|
+
'
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
_review_normalize_suggestion() {
|
|
575
|
+
_review_require_python3 || return 1
|
|
576
|
+
printf '%s' "$1" | python3 -c '
|
|
577
|
+
import re, sys
|
|
578
|
+
s = sys.stdin.read()
|
|
579
|
+
out = []
|
|
580
|
+
pattern = re.compile(r"(```[\s\S]*?```|`[^`]*`)")
|
|
581
|
+
pos = 0
|
|
582
|
+
for match in pattern.finditer(s):
|
|
583
|
+
seg = re.sub(r"\s+", " ", s[pos:match.start()].lower()).strip()
|
|
584
|
+
if seg:
|
|
585
|
+
out.append(seg)
|
|
586
|
+
out.append(match.group(0))
|
|
587
|
+
pos = match.end()
|
|
588
|
+
seg = re.sub(r"\s+", " ", s[pos:].lower()).strip()
|
|
589
|
+
if seg:
|
|
590
|
+
out.append(seg)
|
|
591
|
+
print(" ".join(p for p in out if p))
|
|
592
|
+
'
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
_review_finding_hash() {
|
|
596
|
+
# Input: $1 = single-finding JSON object (with location, category, description, suggestion fields)
|
|
597
|
+
# Output: 40-char sha1 hex of normalized_location + "|" + category + "|" + sha1(description_normalized) + "|" + sha1(suggestion_normalized)
|
|
598
|
+
_review_require_jq || return 1
|
|
599
|
+
local f="$1"
|
|
600
|
+
local loc cat desc sugg
|
|
601
|
+
loc=$(printf '%s' "$f" | jq -r '.location // ""')
|
|
602
|
+
cat=$(printf '%s' "$f" | jq -r '.category // ""')
|
|
603
|
+
desc=$(printf '%s' "$f" | jq -r '.description // ""')
|
|
604
|
+
sugg=$(printf '%s' "$f" | jq -r '.suggestion // ""')
|
|
605
|
+
|
|
606
|
+
local nloc ndesc nsugg dhash shash
|
|
607
|
+
nloc=$(_review_normalize_location "$loc") || return 1
|
|
608
|
+
ndesc=$(_review_normalize_description "$desc") || return 1
|
|
609
|
+
nsugg=$(_review_normalize_suggestion "$sugg") || return 1
|
|
610
|
+
dhash=$(printf '%s' "$ndesc" | _review_sha1) || return 1
|
|
611
|
+
shash=$(printf '%s' "$nsugg" | _review_sha1) || return 1
|
|
612
|
+
|
|
613
|
+
printf '%s|%s|%s|%s' "$nloc" "$cat" "$dhash" "$shash" \
|
|
614
|
+
| _review_sha1
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
_review_description_shingle() {
|
|
618
|
+
# Input: $1 = normalized description
|
|
619
|
+
# Output: JSON array of normalized 5-grams (token-based)
|
|
620
|
+
_review_require_python3 || return 1
|
|
621
|
+
printf '%s' "$1" | python3 -c '
|
|
622
|
+
import json, sys
|
|
623
|
+
tokens = sys.stdin.read().split()
|
|
624
|
+
n = min(5, len(tokens))
|
|
625
|
+
shingles = [] if n == 0 else sorted({" ".join(tokens[i:i+n]) for i in range(len(tokens)-n+1)})
|
|
626
|
+
print(json.dumps(shingles))
|
|
627
|
+
'
|
|
628
|
+
}
|
|
629
|
+
|
|
630
|
+
_review_record_attempt() {
|
|
631
|
+
# Input: $1 = finding JSON, $2 = current round number (1-based), $3 = optional precomputed finding hash
|
|
632
|
+
# Side effect: increments attempts in the attempts file
|
|
633
|
+
# Output: prints new attempt count on stdout
|
|
634
|
+
_review_require_jq || return 1
|
|
635
|
+
local f="$1" round="$2" hash="${3:-}"
|
|
636
|
+
local file loc desc nloc ndesc shingle
|
|
637
|
+
file=$(_review_attempts_file)
|
|
638
|
+
loc=$(printf '%s' "$f" | jq -r '.location // ""')
|
|
639
|
+
desc=$(printf '%s' "$f" | jq -r '.description // ""')
|
|
640
|
+
nloc=$(_review_normalize_location "$loc") || return 1
|
|
641
|
+
ndesc=$(_review_normalize_description "$desc") || return 1
|
|
642
|
+
if [ -z "$hash" ]; then
|
|
643
|
+
hash=$(_review_finding_hash "$f") || return 1
|
|
644
|
+
fi
|
|
645
|
+
shingle=$(_review_description_shingle "$ndesc") || return 1
|
|
646
|
+
|
|
647
|
+
[ -f "$file" ] || jq -n --arg id "$(_review_session_id)" --arg created "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
|
|
648
|
+
'{session_id: $id, created_at: $created, findings: {}}' > "$file"
|
|
649
|
+
|
|
650
|
+
jq --arg h "$hash" --arg loc "$nloc" --argjson sh "$shingle" --argjson r "$round" '
|
|
651
|
+
.findings[$h] = (
|
|
652
|
+
.findings[$h] // {attempts: 0, first_seen_round: $r, normalized_location: $loc, description_shingle: $sh}
|
|
653
|
+
| .attempts += (if .last_seen_round == $r then 0 else 1 end)
|
|
654
|
+
| .last_seen_round = $r
|
|
655
|
+
)
|
|
656
|
+
' "$file" > "$file.tmp" && mv "$file.tmp" "$file"
|
|
657
|
+
|
|
658
|
+
jq -r --arg h "$hash" '.findings[$h].attempts' "$file"
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
_review_at_strike_limit() {
|
|
662
|
+
# Input: $1 = finding JSON, $2 = optional precomputed finding hash
|
|
663
|
+
# Exit: 0 if hash already has >= REVIEW_STRIKE_LIMIT attempts, 1 otherwise
|
|
664
|
+
_review_require_jq || return 1
|
|
665
|
+
local f="$1" file hash
|
|
666
|
+
hash="${2:-}"
|
|
667
|
+
file=$(_review_attempts_file)
|
|
668
|
+
[ -f "$file" ] || return 1
|
|
669
|
+
[ -n "$hash" ] || hash=$(_review_finding_hash "$f") || return 1
|
|
670
|
+
local n; n=$(jq -r --arg h "$hash" '.findings[$h].attempts // 0' "$file")
|
|
671
|
+
[ "$n" -ge "${REVIEW_STRIKE_LIMIT:-3}" ]
|
|
672
|
+
}
|
|
673
|
+
```
|
|
674
|
+
|
|
675
|
+
This bookkeeping assumes sequential execution within a single workspace or
|
|
676
|
+
worktree. Do not run multiple review/fix loops against the same
|
|
677
|
+
`REVIEW_SESSION_ID` concurrently.
|
|
678
|
+
|
|
679
|
+
#### Per-round flow
|
|
680
|
+
|
|
681
|
+
After each `mmr review …` call (or `mmr results "$JOB_ID"` for the manual
|
|
682
|
+
fallback), iterate the reconciled findings at or above `fix_threshold`. For each
|
|
683
|
+
blocking finding, compute its hash, call `_review_at_strike_limit "$f" "$hash"`
|
|
684
|
+
before incrementing, and stop the fix loop with verdict `blocked` per Step 8 if
|
|
685
|
+
the hash is already at `${REVIEW_STRIKE_LIMIT:-3}` recorded attempts. Otherwise,
|
|
686
|
+
call `_review_record_attempt "$f" "$ROUND" "$hash"` to record the current
|
|
687
|
+
round before applying the next fix.
|
|
688
|
+
|
|
689
|
+
For very noisy fix loops you may suggest `--fix-threshold P1` to narrow the
|
|
690
|
+
gate; the project default stays at P2 per the design's Decision 4. Do not
|
|
691
|
+
auto-change the threshold.
|
|
692
|
+
|
|
693
|
+
Identity components — `location`, `category`, `description`, and `suggestion`
|
|
694
|
+
— mirror MMR T2-A's forthcoming native `finding_key` so this remains a clean
|
|
695
|
+
migration when v3.30 ships.
|
|
696
|
+
|
|
697
|
+
### Step 7b: File blocking findings as Beads tasks (opt-in)
|
|
698
|
+
|
|
699
|
+
If `.mmr.yaml` has `beads.create_issues_from_blocking_findings: true` AND `.beads/`
|
|
700
|
+
exists, file each blocking finding (severity at-or-above `beads.fix_threshold`,
|
|
701
|
+
default `P2`) as a Beads bug. This is purely additive tracking — it does NOT replace
|
|
702
|
+
Step 7's fix-in-place flow; it creates a durable record of findings that ought to
|
|
703
|
+
become standalone follow-up work.
|
|
704
|
+
|
|
705
|
+
```bash
|
|
706
|
+
# First: gate on the opt-in flag in .mmr.yaml. Defaults to disabled.
|
|
707
|
+
# Uses pure bash + grep/sed — no yq dependency.
|
|
708
|
+
beads_enabled=false
|
|
709
|
+
beads_fix_threshold=P2
|
|
710
|
+
beads_default_type=bug
|
|
711
|
+
if [ -f .mmr.yaml ]; then
|
|
712
|
+
# POSIX character classes ([[:space:]]) for BSD-sed compatibility (macOS default).
|
|
713
|
+
# Patterns tolerate trailing whitespace/comments — uncommenting a template line with
|
|
714
|
+
# a trailing `# comment` should still match.
|
|
715
|
+
if grep -qE '^[[:space:]]*create_issues_from_blocking_findings:[[:space:]]*true([[:space:]]+#.*)?[[:space:]]*$' .mmr.yaml; then
|
|
716
|
+
beads_enabled=true
|
|
717
|
+
fi
|
|
718
|
+
if v=$(grep -E '^[[:space:]]*fix_threshold:[[:space:]]*P[0-4]([[:space:]]+#.*)?[[:space:]]*$' .mmr.yaml | head -1 | sed -E 's/^[^:]*:[[:space:]]*(P[0-4]).*/\1/'); [ -n "$v" ]; then
|
|
719
|
+
beads_fix_threshold=$v
|
|
720
|
+
fi
|
|
721
|
+
if v=$(grep -E '^[[:space:]]*default_type:[[:space:]]*[a-zA-Z]+([[:space:]]+#.*)?[[:space:]]*$' .mmr.yaml | head -1 | sed -E 's/^[^:]*:[[:space:]]*([a-zA-Z]+).*/\1/'); [ -n "$v" ]; then
|
|
722
|
+
beads_default_type=$v
|
|
723
|
+
fi
|
|
724
|
+
fi
|
|
725
|
+
|
|
726
|
+
if [ "$beads_enabled" = "true" ] && [ -d .beads ] && command -v bd >/dev/null 2>&1 \
|
|
727
|
+
&& command -v mmr >/dev/null 2>&1 && [ -n "${JOB_ID:-}" ]; then
|
|
728
|
+
# Skip when the review-code flow ran in manual fallback mode (no mmr, no JOB_ID).
|
|
729
|
+
threshold_rank=$(case "$beads_fix_threshold" in P0) echo 0;; P1) echo 1;; P2) echo 2;; P3) echo 3;; *) echo 4;; esac)
|
|
730
|
+
|
|
731
|
+
# Capture the reconciled findings from the MMR job we already ran upstream.
|
|
732
|
+
# MMR JSON shape: { reconciled_findings: [{ severity, location, description, suggestion, ... }] }
|
|
733
|
+
review_json=$(mmr results "$JOB_ID" --format json)
|
|
734
|
+
|
|
735
|
+
while IFS= read -r finding; do
|
|
736
|
+
title=$(jq -r '.description | .[0:120]' <<<"$finding")
|
|
737
|
+
severity=$(jq -r '.severity' <<<"$finding")
|
|
738
|
+
pnum="${severity#P}"
|
|
739
|
+
description=$(jq -r --arg job "$JOB_ID" '"\(.description)\n\nSuggestion: \(.suggestion // "(none)")\n\nLocation: \(.location // "(unknown)")\n\nFirst seen in MMR job: \($job)"' <<<"$finding")
|
|
740
|
+
# Per-finding identity for a future dedupe-on-re-runs mechanism (matches
|
|
741
|
+
# review-pr.md Step 7b). NOTE: bd v1.0.4 has no `bd list --external-ref`
|
|
742
|
+
# flag, so the bridge does not enforce dedupe at write time — known
|
|
743
|
+
# limitation; same-job re-runs will create duplicates.
|
|
744
|
+
loc=$(jq -r '.location // ""' <<<"$finding")
|
|
745
|
+
desc_for_hash=$(jq -r '.description // ""' <<<"$finding")
|
|
746
|
+
finding_hash=$(printf '%s|%s' "$loc" "$desc_for_hash" | shasum -a 1 | cut -c1-8)
|
|
747
|
+
|
|
748
|
+
args=(
|
|
749
|
+
"$title"
|
|
750
|
+
--type "$beads_default_type"
|
|
751
|
+
-p "$pnum"
|
|
752
|
+
--description "$description"
|
|
753
|
+
--external-ref "mmr:$finding_hash"
|
|
754
|
+
)
|
|
755
|
+
if [ -n "${SOURCE_BD_ID:-}" ]; then
|
|
756
|
+
args+=(--deps "discovered-from:$SOURCE_BD_ID")
|
|
757
|
+
fi
|
|
758
|
+
bd create "${args[@]}"
|
|
759
|
+
done < <(jq -c --argjson maxRank "$threshold_rank" '
|
|
760
|
+
.reconciled_findings[]?
|
|
761
|
+
| (.severity | sub("^P";"") | tonumber) as $rank
|
|
762
|
+
| select($rank <= $maxRank)
|
|
763
|
+
' <<<"$review_json")
|
|
764
|
+
fi
|
|
765
|
+
```
|
|
766
|
+
|
|
767
|
+
Same shell idioms as `review-pr.md` Step 7b — see that file for notes on the jq
|
|
768
|
+
arguments and UTF-8-safe truncation. The `.mmr.yaml` opt-in flag is read first;
|
|
769
|
+
the rest of the block is skipped unless `beads.create_issues_from_blocking_findings`
|
|
770
|
+
is `true`. The `--deps discovered-from:$SOURCE_BD_ID` flag is conditional on a
|
|
771
|
+
non-empty `$SOURCE_BD_ID`.
|
|
772
|
+
|
|
404
773
|
### Step 8: Final Verdict
|
|
405
774
|
|
|
406
775
|
Return exactly one verdict:
|
|
@@ -425,8 +794,9 @@ Output a concise summary in this format:
|
|
|
425
794
|
### Channels Executed
|
|
426
795
|
- Codex CLI — root cause: [completed / not_installed / auth_failed / timeout / failed], coverage: [full / compensating (Codex-equivalent)]
|
|
427
796
|
- Gemini CLI — root cause: [completed / not_installed / auth_failed / timeout / failed], coverage: [full / compensating (Gemini-equivalent)]
|
|
428
|
-
- Claude CLI — root cause: [completed / not_installed / auth_failed / timeout / failed], coverage: [full / none (Claude is never compensated — it IS the compensator for Codex/Gemini)]
|
|
429
|
-
-
|
|
797
|
+
- Claude CLI — root cause: [completed / not_installed / auth_failed / timeout / failed], coverage: [full / none (Claude is never compensated — it IS the compensator for Codex/Gemini/Grok)]
|
|
798
|
+
- Grok CLI — root cause: [completed / not_installed / auth_failed / timeout / failed], coverage: [full / compensating (Grok-equivalent)]
|
|
799
|
+
- Agent review (Superpowers code-reviewer, agent channel) — [completed / skipped], injected via `mmr reconcile`
|
|
430
800
|
|
|
431
801
|
### Findings
|
|
432
802
|
[consensus findings first, then single-source findings]
|
|
@@ -440,9 +810,10 @@ for the next delivery step (commit, push, or PR creation).
|
|
|
440
810
|
|
|
441
811
|
## Process Rules
|
|
442
812
|
|
|
443
|
-
1. **Foreground only** — Always run Codex and
|
|
444
|
-
2. **All
|
|
813
|
+
1. **Foreground only** — Always run Codex, Gemini, and Grok CLI commands as foreground Bash calls. Never use `run_in_background`, `&`, or `nohup`.
|
|
814
|
+
2. **All built-in CLI channels are mandatory** — skip only when a tool is genuinely not installed, never by choice.
|
|
445
815
|
3. **Auth failures are not silent** — always surface to the user with recovery instructions.
|
|
446
816
|
4. **Independence** — never share one channel's output with another.
|
|
447
817
|
5. **Fix before proceeding** — findings at or above `fix_threshold` must be resolved before moving to the next task.
|
|
448
818
|
6. **Dispatch pattern** follows `multi-model-review-dispatch` knowledge entry. When modifying channel dispatch in this file, verify consistency with `review-pr.md` and `post-implementation-review.md`.
|
|
819
|
+
7. **3-round limit (per finding hash)** — never attempt to fix the *same* blocking finding (identified by the Step 7a hash of `location` + `category` + `description` + `suggestion`) more than 3 times. The attempts file `.scaffold/review-attempts/<session-id>.json` is the exact-hash source of truth; `_review_at_strike_limit` checks it. Description and suggestion are intentionally part of the strict hash to mirror MMR T2-A's forthcoming native `finding_key`; the same-underlying-defect stop condition is a co-equal guard for wording jitter that produces new hashes. Each round that surfaces genuinely different findings with *new* hashes is healthy iteration — keep going. Stop when a hash hits 3 attempts, when the same underlying defect recurs across 3 rounds even if reviewer wording produces new hashes, when channels contradict each other, or when the user asks to stop. For noisy fix loops, optionally suggest `--fix-threshold P1` (the project default stays at P2).
|