@zigrivers/scaffold 3.15.0 → 3.17.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 +47 -12
- package/content/knowledge/backend/backend-fintech-broker-integration.md +244 -0
- package/content/knowledge/backend/backend-fintech-compliance.md +181 -0
- package/content/knowledge/backend/backend-fintech-data-modeling.md +210 -0
- package/content/knowledge/backend/backend-fintech-ledger.md +226 -0
- package/content/knowledge/backend/backend-fintech-observability.md +151 -0
- package/content/knowledge/backend/backend-fintech-order-lifecycle.md +213 -0
- package/content/knowledge/backend/backend-fintech-risk-management.md +150 -0
- package/content/knowledge/backend/backend-fintech-testing.md +197 -0
- package/content/knowledge/core/automated-review-tooling.md +31 -26
- package/content/knowledge/core/multi-model-review-dispatch.md +30 -55
- package/content/knowledge/core/multi-service-api-contracts.md +634 -0
- package/content/knowledge/core/multi-service-architecture.md +492 -0
- package/content/knowledge/core/multi-service-auth.md +706 -0
- package/content/knowledge/core/multi-service-data-ownership.md +539 -0
- package/content/knowledge/core/multi-service-observability.md +545 -0
- package/content/knowledge/core/multi-service-resilience.md +710 -0
- package/content/knowledge/core/multi-service-task-decomposition.md +615 -0
- package/content/knowledge/core/multi-service-testing.md +728 -0
- package/content/methodology/backend-fintech.yml +46 -0
- package/content/methodology/custom-defaults.yml +6 -0
- package/content/methodology/deep.yml +6 -0
- package/content/methodology/multi-service-overlay.yml +103 -0
- package/content/methodology/mvp.yml +6 -0
- package/content/pipeline/architecture/service-ownership-map.md +83 -0
- package/content/pipeline/quality/cross-service-auth.md +96 -0
- package/content/pipeline/quality/cross-service-observability.md +104 -0
- package/content/pipeline/quality/integration-test-plan.md +106 -0
- package/content/pipeline/specification/inter-service-contracts.md +95 -0
- package/content/tools/post-implementation-review.md +36 -7
- package/content/tools/review-code.md +33 -8
- package/content/tools/review-pr.md +79 -95
- package/dist/cli/commands/adopt.cli-flags.test.js +20 -0
- package/dist/cli/commands/adopt.cli-flags.test.js.map +1 -1
- package/dist/cli/commands/adopt.d.ts.map +1 -1
- package/dist/cli/commands/adopt.js +11 -3
- package/dist/cli/commands/adopt.js.map +1 -1
- package/dist/cli/commands/complete.d.ts +1 -0
- package/dist/cli/commands/complete.d.ts.map +1 -1
- package/dist/cli/commands/complete.js +26 -8
- package/dist/cli/commands/complete.js.map +1 -1
- package/dist/cli/commands/dashboard.d.ts +1 -0
- package/dist/cli/commands/dashboard.d.ts.map +1 -1
- package/dist/cli/commands/dashboard.js +19 -6
- package/dist/cli/commands/dashboard.js.map +1 -1
- package/dist/cli/commands/decisions.d.ts +1 -0
- package/dist/cli/commands/decisions.d.ts.map +1 -1
- package/dist/cli/commands/decisions.js +18 -4
- package/dist/cli/commands/decisions.js.map +1 -1
- package/dist/cli/commands/info.d.ts +1 -0
- package/dist/cli/commands/info.d.ts.map +1 -1
- package/dist/cli/commands/info.js +25 -3
- package/dist/cli/commands/info.js.map +1 -1
- package/dist/cli/commands/init-from.test.d.ts +2 -0
- package/dist/cli/commands/init-from.test.d.ts.map +1 -0
- package/dist/cli/commands/init-from.test.js +315 -0
- package/dist/cli/commands/init-from.test.js.map +1 -0
- package/dist/cli/commands/init.d.ts +3 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +239 -129
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/init.test.js +20 -0
- package/dist/cli/commands/init.test.js.map +1 -1
- package/dist/cli/commands/next.d.ts +1 -0
- package/dist/cli/commands/next.d.ts.map +1 -1
- package/dist/cli/commands/next.js +40 -4
- package/dist/cli/commands/next.js.map +1 -1
- package/dist/cli/commands/next.test.js +151 -0
- package/dist/cli/commands/next.test.js.map +1 -1
- package/dist/cli/commands/reset.d.ts +1 -0
- package/dist/cli/commands/reset.d.ts.map +1 -1
- package/dist/cli/commands/reset.js +77 -29
- package/dist/cli/commands/reset.js.map +1 -1
- package/dist/cli/commands/rework.d.ts +1 -0
- package/dist/cli/commands/rework.d.ts.map +1 -1
- package/dist/cli/commands/rework.js +16 -2
- package/dist/cli/commands/rework.js.map +1 -1
- package/dist/cli/commands/run.d.ts +1 -0
- package/dist/cli/commands/run.d.ts.map +1 -1
- package/dist/cli/commands/run.js +65 -13
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/run.test.js +192 -3
- package/dist/cli/commands/run.test.js.map +1 -1
- package/dist/cli/commands/skip.d.ts +1 -0
- package/dist/cli/commands/skip.d.ts.map +1 -1
- package/dist/cli/commands/skip.js +24 -7
- package/dist/cli/commands/skip.js.map +1 -1
- package/dist/cli/commands/status.d.ts +1 -0
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +51 -4
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/status.test.js +128 -0
- package/dist/cli/commands/status.test.js.map +1 -1
- package/dist/cli/guards-coverage.test.d.ts +2 -0
- package/dist/cli/guards-coverage.test.d.ts.map +1 -0
- package/dist/cli/guards-coverage.test.js +26 -0
- package/dist/cli/guards-coverage.test.js.map +1 -0
- package/dist/cli/guards-integration.test.d.ts +2 -0
- package/dist/cli/guards-integration.test.d.ts.map +1 -0
- package/dist/cli/guards-integration.test.js +178 -0
- package/dist/cli/guards-integration.test.js.map +1 -0
- package/dist/cli/guards.d.ts +13 -0
- package/dist/cli/guards.d.ts.map +1 -0
- package/dist/cli/guards.js +70 -0
- package/dist/cli/guards.js.map +1 -0
- package/dist/cli/guards.test.d.ts +2 -0
- package/dist/cli/guards.test.d.ts.map +1 -0
- package/dist/cli/guards.test.js +136 -0
- package/dist/cli/guards.test.js.map +1 -0
- package/dist/cli/init-flag-families.d.ts +1 -1
- package/dist/cli/init-flag-families.d.ts.map +1 -1
- package/dist/cli/init-flag-families.js +4 -1
- package/dist/cli/init-flag-families.js.map +1 -1
- package/dist/cli/init-flag-families.test.js +10 -0
- package/dist/cli/init-flag-families.test.js.map +1 -1
- package/dist/cli/shutdown.d.ts +2 -3
- package/dist/cli/shutdown.d.ts.map +1 -1
- package/dist/cli/shutdown.js +14 -11
- package/dist/cli/shutdown.js.map +1 -1
- package/dist/cli/shutdown.test.js +2 -4
- package/dist/cli/shutdown.test.js.map +1 -1
- package/dist/config/schema.d.ts +12122 -288
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +74 -79
- package/dist/config/schema.js.map +1 -1
- package/dist/config/schema.test.js +230 -1
- package/dist/config/schema.test.js.map +1 -1
- package/dist/config/validators/backend.d.ts +4 -0
- package/dist/config/validators/backend.d.ts.map +1 -0
- package/dist/config/validators/backend.js +14 -0
- package/dist/config/validators/backend.js.map +1 -0
- package/dist/config/validators/browser-extension.d.ts +4 -0
- package/dist/config/validators/browser-extension.d.ts.map +1 -0
- package/dist/config/validators/browser-extension.js +24 -0
- package/dist/config/validators/browser-extension.js.map +1 -0
- package/dist/config/validators/cli.d.ts +4 -0
- package/dist/config/validators/cli.d.ts.map +1 -0
- package/dist/config/validators/cli.js +14 -0
- package/dist/config/validators/cli.js.map +1 -0
- package/dist/config/validators/data-pipeline.d.ts +4 -0
- package/dist/config/validators/data-pipeline.d.ts.map +1 -0
- package/dist/config/validators/data-pipeline.js +14 -0
- package/dist/config/validators/data-pipeline.js.map +1 -0
- package/dist/config/validators/game.d.ts +4 -0
- package/dist/config/validators/game.d.ts.map +1 -0
- package/dist/config/validators/game.js +14 -0
- package/dist/config/validators/game.js.map +1 -0
- package/dist/config/validators/index.d.ts +7 -0
- package/dist/config/validators/index.d.ts.map +1 -0
- package/dist/config/validators/index.js +27 -0
- package/dist/config/validators/index.js.map +1 -0
- package/dist/config/validators/library.d.ts +4 -0
- package/dist/config/validators/library.d.ts.map +1 -0
- package/dist/config/validators/library.js +25 -0
- package/dist/config/validators/library.js.map +1 -0
- package/dist/config/validators/ml.d.ts +4 -0
- package/dist/config/validators/ml.d.ts.map +1 -0
- package/dist/config/validators/ml.js +31 -0
- package/dist/config/validators/ml.js.map +1 -0
- package/dist/config/validators/mobile-app.d.ts +4 -0
- package/dist/config/validators/mobile-app.d.ts.map +1 -0
- package/dist/config/validators/mobile-app.js +14 -0
- package/dist/config/validators/mobile-app.js.map +1 -0
- package/dist/config/validators/registry.test.d.ts +2 -0
- package/dist/config/validators/registry.test.d.ts.map +1 -0
- package/dist/config/validators/registry.test.js +26 -0
- package/dist/config/validators/registry.test.js.map +1 -0
- package/dist/config/validators/research.d.ts +4 -0
- package/dist/config/validators/research.d.ts.map +1 -0
- package/dist/config/validators/research.js +24 -0
- package/dist/config/validators/research.js.map +1 -0
- package/dist/config/validators/research.test.d.ts +2 -0
- package/dist/config/validators/research.test.d.ts.map +1 -0
- package/dist/config/validators/research.test.js +44 -0
- package/dist/config/validators/research.test.js.map +1 -0
- package/dist/config/validators/types.d.ts +19 -0
- package/dist/config/validators/types.d.ts.map +1 -0
- package/dist/config/validators/types.js +2 -0
- package/dist/config/validators/types.js.map +1 -0
- package/dist/config/validators/validators.test.d.ts +2 -0
- package/dist/config/validators/validators.test.d.ts.map +1 -0
- package/dist/config/validators/validators.test.js +25 -0
- package/dist/config/validators/validators.test.js.map +1 -0
- package/dist/config/validators/web-app.d.ts +4 -0
- package/dist/config/validators/web-app.d.ts.map +1 -0
- package/dist/config/validators/web-app.js +31 -0
- package/dist/config/validators/web-app.js.map +1 -0
- package/dist/core/assembly/context-gatherer.d.ts.map +1 -1
- package/dist/core/assembly/context-gatherer.js +4 -2
- package/dist/core/assembly/context-gatherer.js.map +1 -1
- package/dist/core/assembly/cross-reads.d.ts +58 -0
- package/dist/core/assembly/cross-reads.d.ts.map +1 -0
- package/dist/core/assembly/cross-reads.js +185 -0
- package/dist/core/assembly/cross-reads.js.map +1 -0
- package/dist/core/assembly/cross-reads.test.d.ts +2 -0
- package/dist/core/assembly/cross-reads.test.d.ts.map +1 -0
- package/dist/core/assembly/cross-reads.test.js +383 -0
- package/dist/core/assembly/cross-reads.test.js.map +1 -0
- package/dist/core/assembly/overlay-loader-structural.test.d.ts +2 -0
- package/dist/core/assembly/overlay-loader-structural.test.d.ts.map +1 -0
- package/dist/core/assembly/overlay-loader-structural.test.js +114 -0
- package/dist/core/assembly/overlay-loader-structural.test.js.map +1 -0
- package/dist/core/assembly/overlay-loader.d.ts +17 -3
- package/dist/core/assembly/overlay-loader.d.ts.map +1 -1
- package/dist/core/assembly/overlay-loader.js +75 -0
- package/dist/core/assembly/overlay-loader.js.map +1 -1
- package/dist/core/assembly/overlay-resolver.d.ts +2 -2
- package/dist/core/assembly/overlay-resolver.d.ts.map +1 -1
- package/dist/core/assembly/overlay-resolver.js.map +1 -1
- package/dist/core/assembly/overlay-resolver.test.js.map +1 -1
- package/dist/core/assembly/overlay-state-resolver.d.ts +5 -0
- package/dist/core/assembly/overlay-state-resolver.d.ts.map +1 -1
- package/dist/core/assembly/overlay-state-resolver.js +41 -1
- package/dist/core/assembly/overlay-state-resolver.js.map +1 -1
- package/dist/core/assembly/overlay-state-resolver.test.js +262 -0
- package/dist/core/assembly/overlay-state-resolver.test.js.map +1 -1
- package/dist/core/assembly/update-mode.d.ts +1 -0
- package/dist/core/assembly/update-mode.d.ts.map +1 -1
- package/dist/core/assembly/update-mode.js +17 -9
- package/dist/core/assembly/update-mode.js.map +1 -1
- package/dist/core/dependency/eligibility.d.ts +10 -1
- package/dist/core/dependency/eligibility.d.ts.map +1 -1
- package/dist/core/dependency/eligibility.js +19 -1
- package/dist/core/dependency/eligibility.js.map +1 -1
- package/dist/core/dependency/eligibility.test.js +82 -0
- package/dist/core/dependency/eligibility.test.js.map +1 -1
- package/dist/core/dependency/graph.d.ts +4 -1
- package/dist/core/dependency/graph.d.ts.map +1 -1
- package/dist/core/dependency/graph.js +7 -1
- package/dist/core/dependency/graph.js.map +1 -1
- package/dist/core/dependency/graph.test.js +29 -0
- package/dist/core/dependency/graph.test.js.map +1 -1
- package/dist/core/pipeline/global-steps.d.ts +7 -0
- package/dist/core/pipeline/global-steps.d.ts.map +1 -0
- package/dist/core/pipeline/global-steps.js +18 -0
- package/dist/core/pipeline/global-steps.js.map +1 -0
- package/dist/core/pipeline/resolver.d.ts +1 -0
- package/dist/core/pipeline/resolver.d.ts.map +1 -1
- package/dist/core/pipeline/resolver.js +51 -6
- package/dist/core/pipeline/resolver.js.map +1 -1
- package/dist/core/pipeline/types.d.ts +5 -1
- package/dist/core/pipeline/types.d.ts.map +1 -1
- package/dist/e2e/cross-service-references.test.d.ts +22 -0
- package/dist/e2e/cross-service-references.test.d.ts.map +1 -0
- package/dist/e2e/cross-service-references.test.js +188 -0
- package/dist/e2e/cross-service-references.test.js.map +1 -0
- package/dist/e2e/multi-service-pipeline.test.d.ts +10 -0
- package/dist/e2e/multi-service-pipeline.test.d.ts.map +1 -0
- package/dist/e2e/multi-service-pipeline.test.js +185 -0
- package/dist/e2e/multi-service-pipeline.test.js.map +1 -0
- package/dist/e2e/project-type-overlays.test.js +68 -0
- package/dist/e2e/project-type-overlays.test.js.map +1 -1
- package/dist/e2e/service-execution.test.d.ts +15 -0
- package/dist/e2e/service-execution.test.d.ts.map +1 -0
- package/dist/e2e/service-execution.test.js +219 -0
- package/dist/e2e/service-execution.test.js.map +1 -0
- package/dist/e2e/service-manifest.test.d.ts +19 -0
- package/dist/e2e/service-manifest.test.d.ts.map +1 -0
- package/dist/e2e/service-manifest.test.js +166 -0
- package/dist/e2e/service-manifest.test.js.map +1 -0
- package/dist/project/__frozen-schemas__/schema-v3.9.2.d.ts +224 -224
- package/dist/project/frontmatter.d.ts.map +1 -1
- package/dist/project/frontmatter.js +11 -0
- package/dist/project/frontmatter.js.map +1 -1
- package/dist/project/frontmatter.test.js +71 -0
- package/dist/project/frontmatter.test.js.map +1 -1
- package/dist/state/completion.d.ts +1 -1
- package/dist/state/completion.d.ts.map +1 -1
- package/dist/state/completion.js +10 -8
- package/dist/state/completion.js.map +1 -1
- package/dist/state/decision-logger.d.ts +3 -2
- package/dist/state/decision-logger.d.ts.map +1 -1
- package/dist/state/decision-logger.js +12 -11
- package/dist/state/decision-logger.js.map +1 -1
- package/dist/state/ensure-v3-migration.d.ts +9 -0
- package/dist/state/ensure-v3-migration.d.ts.map +1 -0
- package/dist/state/ensure-v3-migration.js +35 -0
- package/dist/state/ensure-v3-migration.js.map +1 -0
- package/dist/state/lock-manager.d.ts +5 -4
- package/dist/state/lock-manager.d.ts.map +1 -1
- package/dist/state/lock-manager.js +11 -11
- package/dist/state/lock-manager.js.map +1 -1
- package/dist/state/rework-manager.d.ts +1 -2
- package/dist/state/rework-manager.d.ts.map +1 -1
- package/dist/state/rework-manager.js +4 -5
- package/dist/state/rework-manager.js.map +1 -1
- package/dist/state/state-manager.d.ts +25 -1
- package/dist/state/state-manager.d.ts.map +1 -1
- package/dist/state/state-manager.js +86 -12
- package/dist/state/state-manager.js.map +1 -1
- package/dist/state/state-manager.test.js +278 -0
- package/dist/state/state-manager.test.js.map +1 -1
- package/dist/state/state-migration-v3.d.ts +22 -0
- package/dist/state/state-migration-v3.d.ts.map +1 -0
- package/dist/state/state-migration-v3.js +82 -0
- package/dist/state/state-migration-v3.js.map +1 -0
- package/dist/state/state-migration-v3.test.d.ts +2 -0
- package/dist/state/state-migration-v3.test.d.ts.map +1 -0
- package/dist/state/state-migration-v3.test.js +196 -0
- package/dist/state/state-migration-v3.test.js.map +1 -0
- package/dist/state/state-migration.d.ts.map +1 -1
- package/dist/state/state-migration.js +11 -6
- package/dist/state/state-migration.js.map +1 -1
- package/dist/state/state-migration.test.js +47 -2
- package/dist/state/state-migration.test.js.map +1 -1
- package/dist/state/state-path-resolver.d.ts +23 -0
- package/dist/state/state-path-resolver.d.ts.map +1 -0
- package/dist/state/state-path-resolver.js +36 -0
- package/dist/state/state-path-resolver.js.map +1 -0
- package/dist/state/state-path-resolver.test.d.ts +2 -0
- package/dist/state/state-path-resolver.test.d.ts.map +1 -0
- package/dist/state/state-path-resolver.test.js +78 -0
- package/dist/state/state-path-resolver.test.js.map +1 -0
- package/dist/state/state-version-dispatch.d.ts +17 -0
- package/dist/state/state-version-dispatch.d.ts.map +1 -0
- package/dist/state/state-version-dispatch.js +27 -0
- package/dist/state/state-version-dispatch.js.map +1 -0
- package/dist/state/state-version-dispatch.test.d.ts +2 -0
- package/dist/state/state-version-dispatch.test.d.ts.map +1 -0
- package/dist/state/state-version-dispatch.test.js +40 -0
- package/dist/state/state-version-dispatch.test.js.map +1 -0
- package/dist/types/config.d.ts +25 -3
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.test.js +13 -1
- package/dist/types/config.test.js.map +1 -1
- package/dist/types/dependency.d.ts +5 -0
- package/dist/types/dependency.d.ts.map +1 -1
- package/dist/types/frontmatter.d.ts +5 -0
- package/dist/types/frontmatter.d.ts.map +1 -1
- package/dist/types/lock.d.ts +1 -1
- package/dist/types/lock.d.ts.map +1 -1
- package/dist/types/state.d.ts +1 -1
- package/dist/types/state.d.ts.map +1 -1
- package/dist/utils/artifact-path.d.ts +19 -0
- package/dist/utils/artifact-path.d.ts.map +1 -0
- package/dist/utils/artifact-path.js +95 -0
- package/dist/utils/artifact-path.js.map +1 -0
- package/dist/utils/artifact-path.test.d.ts +2 -0
- package/dist/utils/artifact-path.test.d.ts.map +1 -0
- package/dist/utils/artifact-path.test.js +138 -0
- package/dist/utils/artifact-path.test.js.map +1 -0
- package/dist/utils/errors.d.ts +1 -1
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +5 -2
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/user-errors.d.ts +46 -0
- package/dist/utils/user-errors.d.ts.map +1 -0
- package/dist/utils/user-errors.js +76 -0
- package/dist/utils/user-errors.js.map +1 -0
- package/dist/utils/user-errors.test.d.ts +2 -0
- package/dist/utils/user-errors.test.d.ts.map +1 -0
- package/dist/utils/user-errors.test.js +74 -0
- package/dist/utils/user-errors.test.js.map +1 -0
- package/dist/validation/index.d.ts.map +1 -1
- package/dist/validation/index.js +16 -0
- package/dist/validation/index.js.map +1 -1
- package/dist/validation/index.test.js +48 -0
- package/dist/validation/index.test.js.map +1 -1
- package/dist/validation/state-validator.d.ts +5 -2
- package/dist/validation/state-validator.d.ts.map +1 -1
- package/dist/validation/state-validator.js +18 -20
- package/dist/validation/state-validator.js.map +1 -1
- package/dist/validation/state-validator.test.js +31 -2
- package/dist/validation/state-validator.test.js.map +1 -1
- package/dist/wizard/copy/backend.d.ts.map +1 -1
- package/dist/wizard/copy/backend.js +12 -0
- package/dist/wizard/copy/backend.js.map +1 -1
- package/dist/wizard/flags.d.ts +1 -0
- package/dist/wizard/flags.d.ts.map +1 -1
- package/dist/wizard/questions.d.ts.map +1 -1
- package/dist/wizard/questions.js +5 -1
- package/dist/wizard/questions.js.map +1 -1
- package/dist/wizard/questions.test.js +45 -2
- package/dist/wizard/questions.test.js.map +1 -1
- package/dist/wizard/wizard.d.ts +23 -0
- package/dist/wizard/wizard.d.ts.map +1 -1
- package/dist/wizard/wizard.js +85 -47
- package/dist/wizard/wizard.js.map +1 -1
- package/dist/wizard/wizard.test.js +186 -1
- package/dist/wizard/wizard.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: automated-review-tooling
|
|
3
|
-
description: Patterns for
|
|
3
|
+
description: Patterns for automated PR code review using AI CLI tools (Codex, Gemini, Claude) — orchestration, reconciliation, compensating passes, and CI integration
|
|
4
4
|
topics: [code-review, automation, codex, gemini, pull-requests, ci-cd, review-tooling]
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -24,10 +24,10 @@ These are the authoritative verdict definitions. Tool files (`review-code.md`, `
|
|
|
24
24
|
|
|
25
25
|
| Verdict | Condition |
|
|
26
26
|
|---------|-----------|
|
|
27
|
-
| `pass` | All
|
|
28
|
-
| `degraded-pass` |
|
|
29
|
-
| `blocked` |
|
|
30
|
-
| `needs-user-decision` |
|
|
27
|
+
| `pass` | All channels completed, no unresolved P0/P1/P2 |
|
|
28
|
+
| `degraded-pass` | Some channels unavailable, compensating passes ran, no unresolved P0/P1/P2 |
|
|
29
|
+
| `blocked` | Findings at or above fix threshold remain unresolved |
|
|
30
|
+
| `needs-user-decision` | No channels completed — insufficient data for a determination |
|
|
31
31
|
|
|
32
32
|
**Verdict precedence:** `needs-user-decision` > `blocked` > `degraded-pass` > `pass`. When multiple conditions apply, the higher-precedence verdict wins.
|
|
33
33
|
|
|
@@ -35,13 +35,13 @@ These are the authoritative verdict definitions. Tool files (`review-code.md`, `
|
|
|
35
35
|
|
|
36
36
|
#### Status Model
|
|
37
37
|
|
|
38
|
-
`compensating` is a **coverage label** applied to a channel's output, not a replacement for the root-cause status. Each channel retains its root-cause status (`not_installed`, `auth_failed`, `
|
|
38
|
+
`compensating` is a **coverage label** applied to a channel's output, not a replacement for the root-cause status. Each channel retains its root-cause status (`not_installed`, `auth_failed`, `timeout`, `failed`) AND gains a coverage label (`compensating (X-equivalent)`) when a compensating pass ran. The fix cycle uses the **root-cause status** to decide whether to retry (never retry `not_installed`, `auth_failed`, `timeout`). The report uses the **coverage label** to show the reader what ran.
|
|
39
39
|
|
|
40
40
|
#### Compensating Passes
|
|
41
41
|
|
|
42
|
-
When
|
|
42
|
+
When a channel (Codex or Gemini) is unavailable, the CLI dispatches a compensating pass via `claude -p`:
|
|
43
43
|
|
|
44
|
-
- Same prompt structure as the missing channel, executed as a
|
|
44
|
+
- Same prompt structure as the missing channel, executed as a `claude -p` dispatch.
|
|
45
45
|
- Labeled `[compensating: Codex-equivalent]` or `[compensating: Gemini-equivalent]` in the review summary.
|
|
46
46
|
- Missing Codex → focus on implementation correctness, security, API contracts.
|
|
47
47
|
- Missing Gemini → focus on architectural patterns, design reasoning, broad context.
|
|
@@ -49,8 +49,6 @@ When an external channel (Codex or Gemini) is unavailable, run a compensating Cl
|
|
|
49
49
|
- Compensating-pass findings are **single-source confidence** — they do NOT raise to high confidence even if they agree with another channel's findings.
|
|
50
50
|
- Normal mandatory-fix thresholds apply: P0/P1/P2 findings from compensating passes still require fixing.
|
|
51
51
|
|
|
52
|
-
**Superpowers channel:** No compensating pass needed — Superpowers is a Claude subagent and is always available. If the Superpowers plugin is not installed, run available external CLIs and warn the user that review coverage is reduced.
|
|
53
|
-
|
|
54
52
|
#### Foreground-Only Execution
|
|
55
53
|
|
|
56
54
|
Always run Codex and Gemini CLI commands as foreground Bash calls. Never use `run_in_background`, `&`, or `nohup`. Background execution produces empty or truncated output from Codex and Gemini CLIs. Multiple foreground calls can still run in parallel if the tool runner supports parallel tool invocations.
|
|
@@ -67,7 +65,7 @@ Reconciliation normalizes findings from all channels (real and compensating) to
|
|
|
67
65
|
|
|
68
66
|
The reconciliation output is a deduplicated list of findings with confidence scores. High-confidence findings (agreed by 2+ real channels) are actionable without further discussion. Low-confidence findings (single-source, or from compensating passes) still require action at P0/P1/P2 but should be noted as lower-confidence in the review summary.
|
|
69
67
|
|
|
70
|
-
Findings that appear in all three channels (Codex, Gemini,
|
|
68
|
+
Findings that appear in all three channels (Codex, Gemini, Claude) are considered maximum-confidence and should be surfaced first in the review summary. Findings that appear in only one channel should include the channel name in the finding description to help the developer assess confidence independently.
|
|
71
69
|
|
|
72
70
|
```bash
|
|
73
71
|
# Orchestration reconciliation workflow
|
|
@@ -80,16 +78,15 @@ Findings that appear in all three channels (Codex, Gemini, Superpowers) are cons
|
|
|
80
78
|
|
|
81
79
|
### Channel Dispatch Pattern and Orchestration
|
|
82
80
|
|
|
83
|
-
Each
|
|
81
|
+
Each channel (Codex, Gemini, Claude) follows the same dispatch pattern: check installation, check auth, then dispatch as a foreground call. If any step fails, record the root-cause status, queue a compensating pass (for Codex/Gemini), and continue to the next channel.
|
|
84
82
|
|
|
85
83
|
```bash
|
|
86
84
|
# Channel dispatch pattern
|
|
87
|
-
# For each
|
|
85
|
+
# For each channel (codex, gemini, claude):
|
|
88
86
|
# 1. command -v <tool> >/dev/null 2>&1 || { status=not_installed; queue_compensating; continue; }
|
|
89
87
|
# 2. <auth_check> || { status=auth_failed; queue_compensating; continue; }
|
|
90
88
|
# 3. <dispatch_foreground> || { status=failed; queue_compensating; continue; }
|
|
91
|
-
#
|
|
92
|
-
# After all: run queued compensating passes → reconcile → verdict
|
|
89
|
+
# After all: run queued compensating passes (via claude -p) → reconcile → verdict
|
|
93
90
|
```
|
|
94
91
|
|
|
95
92
|
After all channels and compensating passes complete, run the reconciliation workflow above and apply the verdict decision flow. Channel results and compensating-pass labels must be preserved in the review output for auditability — do not collapse or omit them even when findings are empty.
|
|
@@ -99,14 +96,14 @@ After all channels and compensating passes complete, run the reconciliation work
|
|
|
99
96
|
When Codex is unavailable (not installed or auth failure), the orchestration proceeds as follows:
|
|
100
97
|
|
|
101
98
|
1. The installation check (`command -v codex`) fails. Codex channel status is set to `not_installed`.
|
|
102
|
-
2. A compensating Codex-equivalent pass is queued: a
|
|
103
|
-
3. Gemini and
|
|
99
|
+
2. A compensating Codex-equivalent pass is queued: a `claude -p` dispatch focused on implementation correctness, security, and API contracts.
|
|
100
|
+
3. Gemini and Claude channels run normally.
|
|
104
101
|
4. The compensating pass runs, producing findings labeled `[compensating: Codex-equivalent]`.
|
|
105
|
-
5. Reconciliation merges findings from all three sources (Gemini,
|
|
102
|
+
5. Reconciliation merges findings from all three sources (Gemini, Claude, compensating-Codex).
|
|
106
103
|
6. Maximum achievable verdict is `degraded-pass` because a real channel was absent.
|
|
107
104
|
7. The review summary notes: "Codex channel: not_installed (compensating: Codex-equivalent pass ran)."
|
|
108
105
|
|
|
109
|
-
**Fix-cycle channel rule:** Only re-run channels that originally completed or ran as compensating passes. `failed` channels are covered by their compensating pass and are not retried during fix rounds. Never retry a channel with status `not_installed`, `auth_failed`, or `
|
|
106
|
+
**Fix-cycle channel rule:** Only re-run channels that originally completed or ran as compensating passes. `failed` channels are covered by their compensating pass and are not retried during fix rounds. Never retry a channel with status `not_installed`, `auth_failed`, or `timeout` — these indicate persistent environment conditions that will not resolve between fix rounds.
|
|
110
107
|
|
|
111
108
|
### Verdict Decision Flow
|
|
112
109
|
|
|
@@ -114,19 +111,17 @@ Apply the following evaluation order to determine the final verdict. The first m
|
|
|
114
111
|
|
|
115
112
|
```
|
|
116
113
|
Verdict evaluation order:
|
|
117
|
-
1.
|
|
114
|
+
1. No channels completed? → needs-user-decision
|
|
118
115
|
2. Any unresolved P0/P1/P2 after 3 fix rounds? → blocked
|
|
119
116
|
3. Any channel not at full coverage? → degraded-pass
|
|
120
117
|
4. All channels completed, no unresolved P0/P1/P2? → pass
|
|
121
118
|
```
|
|
122
119
|
|
|
123
|
-
A
|
|
124
|
-
|
|
125
|
-
A channel is "not at full coverage" when: it ran as a compensating pass instead of a real tool, it timed out partially, or the Superpowers plugin is not installed and available channels do not cover the full diff.
|
|
120
|
+
A channel is "not at full coverage" when: it ran as a compensating pass instead of a real tool, or it timed out.
|
|
126
121
|
|
|
127
|
-
**Verdict precedence reminder:** `needs-user-decision` > `blocked` > `degraded-pass` > `pass`.
|
|
122
|
+
**Verdict precedence reminder:** `needs-user-decision` > `blocked` > `degraded-pass` > `pass`. When multiple conditions apply simultaneously, the higher-precedence verdict wins.
|
|
128
123
|
|
|
129
|
-
The verdict is always computed after all fix rounds are exhausted — do not emit a partial verdict mid-cycle. If a fix round resolves all P0/P1/P2 findings
|
|
124
|
+
The verdict is always computed after all fix rounds are exhausted — do not emit a partial verdict mid-cycle. If a fix round resolves all P0/P1/P2 findings, the verdict upgrades from `blocked` to `pass` or `degraded-pass` depending on channel coverage. This upgrade must be verified explicitly by re-running the reconciliation step after each fix round, not assumed from the fact that fixes were applied.
|
|
130
125
|
|
|
131
126
|
### Security-Focused Review Checklist
|
|
132
127
|
|
|
@@ -197,4 +192,14 @@ When external CLIs are unavailable, the degraded-mode behavior defined in the Su
|
|
|
197
192
|
5. When both external channels are unavailable, note "All findings are single-model (Claude only). External validation was unavailable." in the review summary.
|
|
198
193
|
6. Never silently drop unavailable channels — always record the channel status and compensating coverage label in the review output.
|
|
199
194
|
|
|
200
|
-
**
|
|
195
|
+
**Claude CLI channel:** Claude CLI handles its own auth and is generally always available. The compensating-pass mechanism applies to external CLIs (Codex, Gemini) that have an installation/auth gate. When Codex or Gemini are unavailable, compensating passes are dispatched via `claude -p` with focused prompts targeting the missing channel's strength area.
|
|
196
|
+
|
|
197
|
+
### Auth Recovery Paths
|
|
198
|
+
|
|
199
|
+
Each external CLI has a distinct auth recovery path. Agents should surface these directly to the user rather than silently downgrading to a compensating pass:
|
|
200
|
+
|
|
201
|
+
- **Codex:** `codex login` — opens an interactive OAuth flow. After success, `codex login status` should return cleanly.
|
|
202
|
+
- **Gemini:** `gemini -p "hello"` — refreshes the token if expired; `NO_BROWSER=true` is required in headless environments.
|
|
203
|
+
- **Claude:** `claude auth login` if `claude -p` returns auth errors; rare in practice because Claude CLI tokens are long-lived.
|
|
204
|
+
|
|
205
|
+
If the user cannot complete auth recovery within the review session, treat the channel as unavailable and document the compensating pass. Never attempt to work around auth failures by embedding credentials in review prompts or by piping through alternative providers that weren't explicitly requested.
|
|
@@ -1,27 +1,18 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: multi-model-review-dispatch
|
|
3
|
-
description: Patterns for dispatching reviews to
|
|
4
|
-
topics: [multi-model, code-review,
|
|
3
|
+
description: Patterns for dispatching reviews to AI CLI tools (Codex, Gemini, Claude), including fallback strategies and finding reconciliation
|
|
4
|
+
topics: [multi-model, code-review, codex, gemini, claude, review-synthesis]
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Multi-Model Review Dispatch
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Reviews benefit from independent validation by multiple AI models. Different models have different blind spots — Codex excels at code-centric analysis, Gemini brings strength in design and architectural reasoning, and Claude provides plan alignment and code quality assessment. Dispatching to multiple models and reconciling their findings produces higher-quality reviews than any single model alone. This knowledge covers how to dispatch, how to handle failures, and how to reconcile disagreements.
|
|
10
10
|
|
|
11
11
|
## Summary
|
|
12
12
|
|
|
13
13
|
### When to Dispatch
|
|
14
14
|
|
|
15
|
-
Multi-model review
|
|
16
|
-
|
|
17
|
-
| Depth | Review Approach |
|
|
18
|
-
|-------|----------------|
|
|
19
|
-
| 1-2 | Claude-only, reduced pass count |
|
|
20
|
-
| 3 | Claude-only, full pass count |
|
|
21
|
-
| 4 | Full passes + one external model (if available) |
|
|
22
|
-
| 5 | Full passes + multi-model with reconciliation |
|
|
23
|
-
|
|
24
|
-
Dispatch is always optional. If no external model CLI is available, the review proceeds as a Claude-only enhanced review with additional self-review passes to partially compensate.
|
|
15
|
+
Multi-model review runs all enabled channels on every review. The MMR CLI (`mmr review --sync`) is the primary entry point and handles dispatch, parsing, reconciliation, and verdict derivation automatically.
|
|
25
16
|
|
|
26
17
|
### Model Selection
|
|
27
18
|
|
|
@@ -29,15 +20,16 @@ Dispatch is always optional. If no external model CLI is available, the review p
|
|
|
29
20
|
|-------|----------|----------|
|
|
30
21
|
| **Codex** (OpenAI) | Code analysis, implementation correctness, API contract validation | Code reviews, security reviews, API reviews, database schema reviews |
|
|
31
22
|
| **Gemini** (Google) | Design reasoning, architectural patterns, broad context understanding | Architecture reviews, PRD reviews, UX reviews, domain model reviews |
|
|
23
|
+
| **Claude** (Anthropic) | Plan alignment, code quality, testing thoroughness | Code reviews, plan verification, test coverage |
|
|
32
24
|
|
|
33
|
-
|
|
25
|
+
All enabled channels run on every review. When a channel is unavailable, a compensating pass is dispatched via `claude -p` focused on the missing channel's strength area.
|
|
34
26
|
|
|
35
27
|
### Graceful Fallback
|
|
36
28
|
|
|
37
29
|
External models are never required. The fallback chain:
|
|
38
30
|
1. Attempt dispatch to selected model(s)
|
|
39
31
|
2. If CLI unavailable → skip that model, note in report
|
|
40
|
-
3. If timeout →
|
|
32
|
+
3. If timeout → CLI kills the process; no partial output preserved; compensating pass runs
|
|
41
33
|
4. If all external models fail → Claude-only enhanced review (additional self-review passes)
|
|
42
34
|
|
|
43
35
|
The review never blocks on external model availability.
|
|
@@ -82,15 +74,15 @@ If auth fails, report status `auth_failed` and surface recovery to the user:
|
|
|
82
74
|
- Codex: "Codex auth expired — run `! codex login` to re-authenticate"
|
|
83
75
|
- Gemini: "Gemini auth expired — run `! gemini -p \"hello\"` to re-authenticate"
|
|
84
76
|
|
|
85
|
-
If auth check times out (~5 seconds), retry once. If still failing, report `
|
|
77
|
+
If auth check times out (~5 seconds), retry once. If still failing, report `timeout`.
|
|
86
78
|
If auth succeeds, report `ready` and proceed to dispatch.
|
|
87
79
|
|
|
88
80
|
**Post-dispatch terminal states:**
|
|
89
81
|
- `completed` — channel produced results, use normally
|
|
90
|
-
- `
|
|
91
|
-
- `failed` — crashed or unparseable output; triggers compensating pass
|
|
82
|
+
- `timeout` — channel exceeded time limit; CLI kills the process and marks it as `timeout`; triggers compensating pass
|
|
83
|
+
- `failed` — crashed or unparseable output; triggers compensating pass
|
|
92
84
|
|
|
93
|
-
Verdict impact: `
|
|
85
|
+
Verdict impact: `timeout` and `failed` channels mean the review is degraded. Maximum verdict is `degraded-pass` when any channel has a non-`completed` terminal state.
|
|
94
86
|
|
|
95
87
|
#### Prompt Formatting
|
|
96
88
|
|
|
@@ -126,10 +118,12 @@ Respond with a JSON array of findings:
|
|
|
126
118
|
"severity": "P0|P1|P2|P3",
|
|
127
119
|
"category": "coverage|consistency|correctness|completeness",
|
|
128
120
|
"location": "section or line reference",
|
|
129
|
-
"
|
|
121
|
+
"description": "description of the issue",
|
|
130
122
|
"suggestion": "recommended fix"
|
|
131
123
|
}
|
|
132
124
|
]
|
|
125
|
+
|
|
126
|
+
Note: `id` and `category` are optional — the CLI auto-generates IDs (F-001, F-002, ...) when omitted.
|
|
133
127
|
```
|
|
134
128
|
|
|
135
129
|
#### Output Parsing
|
|
@@ -137,15 +131,11 @@ Respond with a JSON array of findings:
|
|
|
137
131
|
External model output is parsed as JSON. Handle common parsing issues:
|
|
138
132
|
- Strip markdown code fences (```json ... ```) if the model wraps output
|
|
139
133
|
- Handle trailing commas in JSON arrays
|
|
140
|
-
- Validate that each finding has the required fields (severity,
|
|
134
|
+
- Validate that each finding has the required fields (severity, location, description, suggestion)
|
|
141
135
|
- Discard malformed entries rather than failing the entire parse
|
|
142
136
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
docs/reviews/{artifact}/codex-review.json — raw Codex findings
|
|
146
|
-
docs/reviews/{artifact}/gemini-review.json — raw Gemini findings
|
|
147
|
-
docs/reviews/{artifact}/review-summary.md — reconciled synthesis
|
|
148
|
-
```
|
|
137
|
+
The CLI stores raw output at `~/.mmr/jobs/{job-id}/` per channel. Review results
|
|
138
|
+
are available via `mmr results <job-id>`.
|
|
149
139
|
|
|
150
140
|
### Timeout Handling
|
|
151
141
|
|
|
@@ -158,14 +148,7 @@ External model calls can hang or take unreasonably long. Set reasonable timeouts
|
|
|
158
148
|
| Medium artifact review (2000-10000 words) | 120 seconds | Needs more processing time |
|
|
159
149
|
| Large artifact review (>10000 words) | 180 seconds | Maximum reasonable wait |
|
|
160
150
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
If a timeout occurs mid-response:
|
|
164
|
-
1. Check if the partial output contains valid JSON entries
|
|
165
|
-
2. If yes, use the valid entries and note "partial results" in the report
|
|
166
|
-
3. If no, treat as a model failure and fall back
|
|
167
|
-
|
|
168
|
-
Never wait indefinitely. A review that completes in 3 minutes with Claude-only findings is better than one that blocks for 10 minutes waiting for an external model.
|
|
151
|
+
Never wait indefinitely. A review that completes in 3 minutes with Claude-only findings is better than one that blocks for 10 minutes waiting for an external model. When a channel times out, the CLI kills the process — no partial output is preserved. A compensating pass runs in its place.
|
|
169
152
|
|
|
170
153
|
### Finding Reconciliation
|
|
171
154
|
|
|
@@ -224,9 +207,9 @@ When synthesizing multi-model findings, classify each finding:
|
|
|
224
207
|
# Multi-Model Review Summary: [Artifact Name]
|
|
225
208
|
|
|
226
209
|
## Models Used
|
|
227
|
-
- Claude
|
|
228
|
-
- Codex
|
|
229
|
-
- Gemini
|
|
210
|
+
- Claude CLI — [available/unavailable/timeout]
|
|
211
|
+
- Codex CLI — [available/unavailable/timeout]
|
|
212
|
+
- Gemini CLI — [available/unavailable/timeout]
|
|
230
213
|
|
|
231
214
|
## Consensus Findings
|
|
232
215
|
| # | Severity | Finding | Models | Confidence |
|
|
@@ -251,14 +234,10 @@ or areas where external models provided unique value]
|
|
|
251
234
|
|
|
252
235
|
#### Raw JSON Preservation
|
|
253
236
|
|
|
254
|
-
Always preserve the raw JSON output from
|
|
237
|
+
Always preserve the raw JSON output from each channel, even after reconciliation. The raw findings serve as an audit trail and enable re-analysis if the reconciliation logic is later improved.
|
|
255
238
|
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
codex-review.json — raw output from Codex
|
|
259
|
-
gemini-review.json — raw output from Gemini
|
|
260
|
-
review-summary.md — reconciled synthesis
|
|
261
|
-
```
|
|
239
|
+
The CLI stores raw output at `~/.mmr/jobs/{job-id}/` with per-channel result files.
|
|
240
|
+
Results are accessible via `mmr results <job-id>`.
|
|
262
241
|
|
|
263
242
|
### Quality Gates
|
|
264
243
|
|
|
@@ -266,20 +245,18 @@ Minimum standards for a multi-model review to be considered complete:
|
|
|
266
245
|
|
|
267
246
|
| Gate | Threshold | Rationale |
|
|
268
247
|
|------|-----------|-----------|
|
|
269
|
-
|
|
|
270
|
-
| Coverage threshold | Every review pass has at least one finding or explicit "no issues found" note | Ensures all passes were actually executed |
|
|
248
|
+
| Coverage threshold | Every channel has at least one finding or explicit "no issues found" note | Ensures all channels were actually executed |
|
|
271
249
|
| Reconciliation completeness | All cross-model disagreements have documented resolutions | No unresolved conflicts |
|
|
272
|
-
| Raw output preserved |
|
|
250
|
+
| Raw output preserved | Per-channel results exist for all dispatched channels | Audit trail |
|
|
273
251
|
|
|
274
|
-
|
|
252
|
+
Zero findings across all channels is a valid outcome when the diff is clean.
|
|
275
253
|
|
|
276
254
|
#### Degraded-Mode Gate Adaptation
|
|
277
255
|
|
|
278
256
|
When channels are skipped and compensating passes are used:
|
|
279
257
|
|
|
280
|
-
- **Minimum finding count** gate: compensating passes count toward the total but are not treated as separate external channels for consensus purposes.
|
|
281
258
|
- **Reconciliation completeness** gate (cross-model disagreement documentation): applies whenever 2+ distinct model perspectives participate (Claude + one external counts). N/A only when Claude is the sole perspective (no external models and no compensating passes that introduce genuinely different framing).
|
|
282
|
-
- **Coverage threshold** gate: compensating passes satisfy the "every
|
|
259
|
+
- **Coverage threshold** gate: compensating passes satisfy the "every channel has at least one finding or explicit no-issues note" requirement.
|
|
283
260
|
- The reconciled output must record which channels were real, which were compensating, and which were skipped, so the orchestration layer can apply appropriate verdict logic.
|
|
284
261
|
|
|
285
262
|
### Common Anti-Patterns
|
|
@@ -288,12 +265,10 @@ When channels are skipped and compensating passes are used:
|
|
|
288
265
|
|
|
289
266
|
**Ignoring disagreements.** Two models disagree, and the reviewer picks one without analysis. Fix: disagreements are the most valuable signal in multi-model review. They identify areas of genuine ambiguity or complexity. Always investigate and document the resolution.
|
|
290
267
|
|
|
291
|
-
**
|
|
292
|
-
|
|
293
|
-
**No fallback plan.** The review pipeline assumes external models are always available. When Codex is down, the review fails entirely. Fix: external dispatch is always optional. The fallback to Claude-only enhanced review must be implemented and tested.
|
|
268
|
+
**No fallback plan.** The review pipeline assumes external models are always available. When Codex is down, the review fails entirely. Fix: external dispatch is always optional. The CLI automatically dispatches compensating passes via `claude -p` when channels are unavailable.
|
|
294
269
|
|
|
295
270
|
**Over-weighting consensus.** Two models agree on a finding, so it must be correct. But both models may share the same bias (e.g., both flag a pattern as an anti-pattern that is actually appropriate for this project's constraints). Fix: consensus increases confidence but does not guarantee correctness. All findings still require artifact-level verification.
|
|
296
271
|
|
|
297
272
|
**Dispatching the full pipeline context.** Sending the entire project context (all docs, all code) to the external model. This exceeds context limits and dilutes focus. Fix: send only the artifact under review and the minimal upstream context needed for that specific review.
|
|
298
273
|
|
|
299
|
-
**
|
|
274
|
+
**Treating a timeout as a silent skip.** A channel times out and the reviewer proceeds without documenting it. Fix: when a channel times out, record the root-cause status as `timeout`, queue a compensating pass, and include it in the review summary. The CLI kills timed-out processes — no partial output is available, but the compensating pass ensures coverage.
|