@zigrivers/scaffold 3.28.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 +6 -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 +8 -0
- package/content/knowledge/core/coding-conventions.md +8 -0
- 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 +5 -0
- package/content/knowledge/core/task-tracking.md +8 -0
- 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 +8 -0
- 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 +12 -1
- package/content/knowledge/execution/task-claiming-strategy.md +4 -0
- package/content/knowledge/execution/tdd-execution-loop.md +5 -0
- package/content/knowledge/execution/worktree-management.md +5 -0
- 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/tools/knowledge-audit-entry.md +79 -0
- package/content/tools/review-code.md +41 -14
- package/content/tools/review-pr.md +32 -14
- 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 +4 -0
- package/dist/cli/commands/observe.d.ts.map +1 -1
- package/dist/cli/commands/observe.js +13 -0
- package/dist/cli/commands/observe.js.map +1 -1
- package/dist/cli/commands/observe.test.js +46 -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/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/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
|
@@ -0,0 +1,403 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: MMR Reference
|
|
3
|
+
topic: mmr
|
|
4
|
+
description: Multi-Model Review — independent AI reviewers, reconciliation, and verdict gating
|
|
5
|
+
category: tools
|
|
6
|
+
order: 10
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## What MMR is
|
|
10
|
+
|
|
11
|
+
Multi-Model Review runs your changes past several **independent** AI code
|
|
12
|
+
reviewers ("channels"), then **reconciles** their findings into a single
|
|
13
|
+
de-duplicated list and a **verdict** that gates the work. No channel ever sees
|
|
14
|
+
another channel's output — agreement between them is what raises confidence, and
|
|
15
|
+
disagreement is what surfaces ambiguity.
|
|
16
|
+
|
|
17
|
+
### The core idea in five moves
|
|
18
|
+
|
|
19
|
+
1. **Resolve a diff** — from a PR, staged changes, a branch range, or a piped diff.
|
|
20
|
+
2. **Dispatch channels** — each channel is a separate subprocess given the same
|
|
21
|
+
prompt, run in parallel and isolated.
|
|
22
|
+
3. **Parse** — each channel's raw output is parsed into a common `Finding` shape.
|
|
23
|
+
4. **Reconcile** — findings are grouped by a stable key, de-duplicated, and
|
|
24
|
+
scored for agreement and confidence.
|
|
25
|
+
5. **Verdict** — a severity gate yields `pass`, `degraded-pass`, `blocked`, or
|
|
26
|
+
`needs-user-decision`.
|
|
27
|
+
|
|
28
|
+
:::callout{type=tip}
|
|
29
|
+
**Two layers, one mental model.** The `mmr` CLI is the engine that dispatches
|
|
30
|
+
the built-in channels and computes the verdict. The `scaffold run review-pr` /
|
|
31
|
+
`review-code` wrappers sit on top: they add a Superpowers code-reviewer *agent*
|
|
32
|
+
channel via `mmr reconcile`, handle auth recovery, and drive the fix loop.
|
|
33
|
+
:::
|
|
34
|
+
|
|
35
|
+
## End-to-end flow
|
|
36
|
+
|
|
37
|
+
A single `mmr review … --sync` run walks the whole pipeline. Channels fan out in
|
|
38
|
+
parallel; everything converges at reconciliation.
|
|
39
|
+
|
|
40
|
+
```mermaid
|
|
41
|
+
flowchart LR
|
|
42
|
+
R["Resolve diff
|
|
43
|
+
(--pr / --staged
|
|
44
|
+
--diff / --base)"] --> B["Build prompt
|
|
45
|
+
(+ focus, criteria)"]
|
|
46
|
+
B --> C1["codex"]
|
|
47
|
+
B --> C2["gemini"]
|
|
48
|
+
B --> C3["claude"]
|
|
49
|
+
B --> C4["grok"]
|
|
50
|
+
B --> C5["doc-conformance
|
|
51
|
+
(opt-in)"]
|
|
52
|
+
C1 --> P["Parse
|
|
53
|
+
→ Finding"]
|
|
54
|
+
C2 --> P
|
|
55
|
+
C3 --> P
|
|
56
|
+
C4 --> P
|
|
57
|
+
C5 --> P
|
|
58
|
+
P --> RC["Reconcile
|
|
59
|
+
(dedupe + score)"]
|
|
60
|
+
RC --> V["Verdict
|
|
61
|
+
(gate + exit code)"]
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Compensating passes (see *Degraded mode* below) are injected *after* the first
|
|
65
|
+
dispatch round for any channel that was unavailable, then folded back into the
|
|
66
|
+
same reconcile step.
|
|
67
|
+
|
|
68
|
+
## The `mmr review` command
|
|
69
|
+
|
|
70
|
+
One command, several input modes. Pick the flag that matches your target;
|
|
71
|
+
everything else is control and output options. Type in the box to filter the
|
|
72
|
+
table.
|
|
73
|
+
|
|
74
|
+
:::filter-table
|
|
75
|
+
| Flag | Group | Description |
|
|
76
|
+
| --- | --- | --- |
|
|
77
|
+
| `--diff <path\|->` | input | Read a unified diff from a file, or `-` for stdin. Highest-priority input mode. |
|
|
78
|
+
| `--pr <n>` | input | Fetch the PR diff via `gh pr diff`. |
|
|
79
|
+
| `--staged` | input | Review staged changes (`git diff --cached`). |
|
|
80
|
+
| `--base <ref> [--head <ref>]` | input | Review a branch range (`git diff base...head`, head defaults to HEAD). |
|
|
81
|
+
| *(no input flag)* | input | Falls back to unstaged working-tree changes (`git diff`). |
|
|
82
|
+
| `--focus <text>` | control | Free-text focus areas appended to every channel prompt. |
|
|
83
|
+
| `--fix-threshold <P0\|P1\|P2\|P3>` | control | Severity gate. Findings at or above this block. Default P2 (from `.mmr.yaml`). |
|
|
84
|
+
| `--channels <names…>` | control | Run only these channels, overriding config defaults. Abstract channels are filtered out. |
|
|
85
|
+
| `--timeout <seconds>` | control | Per-channel timeout override. |
|
|
86
|
+
| `--template <name>` | control | Use a named review-criteria template from config. |
|
|
87
|
+
| `--format <json\|text\|markdown>` | output | Output format. Default `json`. |
|
|
88
|
+
| `--sync` | mode | Run the full pipeline (dispatch → parse → reconcile → verdict) and return results. Without it, dispatch is fire-and-forget. |
|
|
89
|
+
| `--dry-run` | mode | Resolve the diff and assemble the prompt without dispatching any channel. |
|
|
90
|
+
| `--session <id>` | rounds | Link this run into a multi-round session (`[A-Za-z0-9_-]`). |
|
|
91
|
+
| `--round <n>` | rounds | 1-based round counter within a session. |
|
|
92
|
+
| `--max-rounds <n>` | rounds | Hard cap on rounds. Defaults to 5 when `--session` is set without it. |
|
|
93
|
+
| `--accept-new-acks` | trust | Trust acknowledgment files newly introduced by the diff. |
|
|
94
|
+
| `--trust-project-acks` | trust | Trust working-tree project acks in non-Git / untrusted modes. |
|
|
95
|
+
| `--trust-project-config` | trust | Trust working-tree `.mmr.yaml` in untrusted modes. |
|
|
96
|
+
| `--config-base-ref <ref>` | trust | Load `.mmr.yaml` and acks from a trusted Git ref instead of HEAD. |
|
|
97
|
+
:::
|
|
98
|
+
|
|
99
|
+
### Copy-paste commands by target
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
# PR review (full pipeline, JSON out)
|
|
103
|
+
mmr review --pr 123 --sync --format json
|
|
104
|
+
|
|
105
|
+
# Staged changes before commit
|
|
106
|
+
mmr review --staged --sync --format json
|
|
107
|
+
|
|
108
|
+
# All tracked uncommitted changes (no untracked)
|
|
109
|
+
git diff HEAD | mmr review --diff - --sync --format json
|
|
110
|
+
|
|
111
|
+
# Branch range
|
|
112
|
+
mmr review --base main --head "$BRANCH" --sync --format json
|
|
113
|
+
|
|
114
|
+
# A single file's current contents, as an "all-added" diff
|
|
115
|
+
(diff -u /dev/null path/to/file.ts || true) | mmr review --diff - --sync --format json
|
|
116
|
+
|
|
117
|
+
# Only specific channels (e.g. just grok + claude)
|
|
118
|
+
mmr review --pr 123 --channels grok claude --sync --format json
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## Other subcommands
|
|
122
|
+
|
|
123
|
+
| Command | Purpose |
|
|
124
|
+
| --- | --- |
|
|
125
|
+
| `mmr reconcile <job-id> --channel <name> --input <data>` | Inject an external channel's findings (e.g. the Superpowers agent) into an existing job and re-run the results pipeline. Input is a file, `-` for stdin, or inline JSON. |
|
|
126
|
+
| `mmr status <job-id>` | Per-channel status and elapsed time. Exit 0 = all complete, 1 = running, 2 = a channel failed, 5 = not found. |
|
|
127
|
+
| `mmr results <job-id> [--raw]` | Re-run parse → reconcile → format on a completed job. Exit code reflects the verdict. |
|
|
128
|
+
| `mmr jobs <list\|prune>` | List jobs, or prune old ones per `job_retention_days`. |
|
|
129
|
+
| `mmr sessions <start\|list\|show\|end> <id>` | Manage multi-round review sessions (stored under `~/.mmr/sessions/`). |
|
|
130
|
+
| `mmr config <init\|show\|validate…>` | Scaffold and inspect `.mmr.yaml` (including OSS-runtime example blocks). |
|
|
131
|
+
| `mmr ack <add\|list\|rm\|prune>` | Sticky acknowledgments — silence a finding by its stable key so it stops blocking across rounds. |
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
# Capture a job_id from a review, then fold in an agent channel:
|
|
135
|
+
mmr reconcile "$JOB_ID" --channel superpowers --input findings.json
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## Channel architecture
|
|
139
|
+
|
|
140
|
+
A channel is **pure config data** — there is no per-channel code. The dispatcher
|
|
141
|
+
runs whatever `command` the channel defines, hands it the prompt, and parses its
|
|
142
|
+
output with the configured parser. Adding a channel is normally a `.mmr.yaml`
|
|
143
|
+
edit, not a code change.
|
|
144
|
+
|
|
145
|
+
### The channel config shape
|
|
146
|
+
|
|
147
|
+
```yaml
|
|
148
|
+
channels:
|
|
149
|
+
<name>:
|
|
150
|
+
enabled: true # run by default?
|
|
151
|
+
command: "codex exec" # whitespace-split, spawned WITHOUT a shell
|
|
152
|
+
flags: ["--ephemeral"] # appended after the command tokens
|
|
153
|
+
env: { KEY: value } # extra environment
|
|
154
|
+
prompt_delivery: stdin # stdin (default) | prompt-file
|
|
155
|
+
prompt_wrapper: "{{prompt}}" # template wrapped around the prompt
|
|
156
|
+
output_parser: default # default | gemini | doc-conformance | {kind:…}
|
|
157
|
+
stderr: capture # capture | suppress | passthrough
|
|
158
|
+
timeout: 300 # seconds (falls back to defaults.timeout)
|
|
159
|
+
auth: { check, timeout, failure_exit_codes, recovery }
|
|
160
|
+
extends: base-channel # inherit from another channel (≤4 levels)
|
|
161
|
+
abstract: false # template-only; never dispatched directly
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
### Built-in channels
|
|
165
|
+
|
|
166
|
+
:::callout{type=info}
|
|
167
|
+
**Why grok is different.** codex/gemini/claude all read the prompt from `stdin`.
|
|
168
|
+
Grok's CLI requires the prompt as an argument and ignores stdin, so its channel
|
|
169
|
+
uses `prompt_delivery: prompt-file` — the dispatcher writes the prompt to a temp
|
|
170
|
+
file and passes its path via the `{{prompt_file}}` placeholder. Grok wraps its
|
|
171
|
+
reply in a JSON `.text` field, which the parser unwraps before extracting
|
|
172
|
+
findings.
|
|
173
|
+
:::
|
|
174
|
+
|
|
175
|
+
::::tabs
|
|
176
|
+
|
|
177
|
+
:::tab{title="Compare"}
|
|
178
|
+
| Channel | Default | Strength | Prompt delivery | Parser |
|
|
179
|
+
| --- | --- | --- | --- | --- |
|
|
180
|
+
| `codex` | enabled | Correctness, security, API contracts | stdin | `default` |
|
|
181
|
+
| `gemini` | enabled | Architecture, broad-context reasoning | stdin | `gemini` |
|
|
182
|
+
| `claude` | enabled | Plan alignment, code quality, testing | stdin | `default` |
|
|
183
|
+
| `grok` | enabled | Independent second opinion (xAI; proprietary) | **prompt-file** | `unwrap $.text → default` |
|
|
184
|
+
| `doc-conformance` | opt-in | PRD/stories/standards conformance (LLM-graded) | stdin | `doc-conformance` |
|
|
185
|
+
:::
|
|
186
|
+
|
|
187
|
+
:::tab{title="codex"}
|
|
188
|
+
```yaml
|
|
189
|
+
command: codex exec
|
|
190
|
+
flags: [--skip-git-repo-check, -s, read-only, --ephemeral]
|
|
191
|
+
auth.check: codex login status # local file check (fast, 5s)
|
|
192
|
+
recovery: codex login
|
|
193
|
+
output_parser: default
|
|
194
|
+
stderr: suppress
|
|
195
|
+
```
|
|
196
|
+
:::
|
|
197
|
+
|
|
198
|
+
:::tab{title="gemini"}
|
|
199
|
+
```yaml
|
|
200
|
+
command: gemini # NO -p: gemini reads stdin natively
|
|
201
|
+
flags: [--output-format, json]
|
|
202
|
+
env: { NO_BROWSER: "true" }
|
|
203
|
+
auth.check: NO_BROWSER=true gemini -p "respond with ok" -o json # LLM round-trip, 20s
|
|
204
|
+
recovery: gemini -p "hello"
|
|
205
|
+
output_parser: gemini # unwraps { "response": "…" }
|
|
206
|
+
timeout: 360
|
|
207
|
+
```
|
|
208
|
+
:::
|
|
209
|
+
|
|
210
|
+
:::tab{title="claude"}
|
|
211
|
+
```yaml
|
|
212
|
+
command: claude -p
|
|
213
|
+
flags: [--output-format, json]
|
|
214
|
+
auth.check: claude -p "respond with ok" # LLM round-trip, 20s
|
|
215
|
+
recovery: claude login
|
|
216
|
+
output_parser: default
|
|
217
|
+
```
|
|
218
|
+
:::
|
|
219
|
+
|
|
220
|
+
:::tab{title="grok"}
|
|
221
|
+
```yaml
|
|
222
|
+
command: grok
|
|
223
|
+
prompt_delivery: prompt-file
|
|
224
|
+
flags: [--prompt-file, "{{prompt_file}}", --output-format, json]
|
|
225
|
+
auth.check: grok models # lists models / login state (no round-trip)
|
|
226
|
+
recovery: grok login
|
|
227
|
+
output_parser: { kind: unwrap-jsonpath, wrap: "$.text", then: default }
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
Grok is proprietary (xAI), not open-source — it joins the standard set
|
|
231
|
+
mechanically as a 4th CLI channel. Disable it with
|
|
232
|
+
`channels_disabled: ["grok"]`.
|
|
233
|
+
:::
|
|
234
|
+
|
|
235
|
+
:::tab{title="doc-conformance"}
|
|
236
|
+
```yaml
|
|
237
|
+
enabled: false # opt-in: runs up to 3 LLM calls (~3 min)
|
|
238
|
+
command: scaffold observe audit --profile=full --scope=all --output-mode=mmr-findings
|
|
239
|
+
output_parser: doc-conformance # expects a JSON array of findings
|
|
240
|
+
timeout: 240
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
Enable with `--channels doc-conformance` or in `.mmr.yaml`.
|
|
244
|
+
:::
|
|
245
|
+
|
|
246
|
+
::::
|
|
247
|
+
|
|
248
|
+
### The dispatcher
|
|
249
|
+
|
|
250
|
+
- **Isolation.** Each channel is spawned as its own detached subprocess writing
|
|
251
|
+
to its own output file; channels run in parallel and never share output.
|
|
252
|
+
- **Prompt delivery.** `stdin` mode pipes the prompt and closes stdin (avoids
|
|
253
|
+
`E2BIG` on large diffs). `prompt-file` mode writes the prompt to
|
|
254
|
+
`<channel>.prompt.txt` and substitutes `{{prompt_file}}` in the flags.
|
|
255
|
+
- **Timeout.** A per-channel timer SIGKILLs the whole process group and marks
|
|
256
|
+
the channel `timeout`.
|
|
257
|
+
- **Command parsing.** `command` is split on whitespace and spawned without a
|
|
258
|
+
shell — so quoting/pipelines in `command` won't work; that's exactly why
|
|
259
|
+
arg-only CLIs like grok use `prompt_delivery` rather than a shell shim.
|
|
260
|
+
|
|
261
|
+
**Adding a new channel — where it's clean vs. hard-coded.** *Clean (config
|
|
262
|
+
only):* a new subprocess channel (`command` + `flags` + `auth` +
|
|
263
|
+
`output_parser`), output reshaping via the `unwrap-jsonpath` or
|
|
264
|
+
`regex-findings` parser kinds, disabling/timeout overrides, and pointing the
|
|
265
|
+
compensator at a different channel — all pure `.mmr.yaml`. *Needs code:* a
|
|
266
|
+
brand-new *named* parser must be registered in `core/parser.ts`; HTTP-endpoint
|
|
267
|
+
channels (`kind: http`) need the planned http-dispatcher; and the
|
|
268
|
+
`COMPENSATING_FOCUS` map carries per-channel focus text (falls back gracefully
|
|
269
|
+
if absent).
|
|
270
|
+
|
|
271
|
+
## Scaffold wrappers
|
|
272
|
+
|
|
273
|
+
Direct `mmr review` runs the built-in CLI channels. The `scaffold run` wrappers
|
|
274
|
+
add orchestration on top.
|
|
275
|
+
|
|
276
|
+
| Wrapper | Target | Adds on top of `mmr review` |
|
|
277
|
+
| --- | --- | --- |
|
|
278
|
+
| `scaffold run review-pr` | A PR (`--pr`) | Auth checks, the Superpowers code-reviewer *agent* channel via `mmr reconcile`, consensus/verdict handling, the 3-strike-per-finding round bookkeeping, optional Beads issue bridge. |
|
|
279
|
+
| `scaffold run review-code` | Local pre-push | Synthesizes a "delivery candidate" diff (committed + staged + unstaged), gathers file & standards context for the file-blind CLIs, then the same agent channel + round bounding. *Untracked files aren't covered.* |
|
|
280
|
+
| `scaffold run post-implementation-review` | Full codebase | Two phases — systemic review + per-story functional review via parallel agents — with its own report under `docs/reviews/`. (See its own doc for the exact channel layout.) |
|
|
281
|
+
|
|
282
|
+
:::callout{type=warning}
|
|
283
|
+
**Foreground only.** The wrappers' manual fallback runs Codex, Gemini, Claude,
|
|
284
|
+
and Grok as foreground Bash calls when the `mmr` CLI isn't available — never in
|
|
285
|
+
the background. Background execution produces empty output.
|
|
286
|
+
:::
|
|
287
|
+
|
|
288
|
+
## Findings, reconciliation & verdicts
|
|
289
|
+
|
|
290
|
+
### The Finding shape
|
|
291
|
+
|
|
292
|
+
```json
|
|
293
|
+
{
|
|
294
|
+
"id": "F-001",
|
|
295
|
+
"category": "security",
|
|
296
|
+
"severity": "P0",
|
|
297
|
+
"location": "src/auth.ts:42",
|
|
298
|
+
"description": "…",
|
|
299
|
+
"suggestion": "…"
|
|
300
|
+
}
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
After reconciliation, each finding also carries `confidence`, `sources[]`,
|
|
304
|
+
`agreement`, a stable `finding_key`, a `description_shingle` (for fuzzy
|
|
305
|
+
cross-round matching), and `acknowledged`.
|
|
306
|
+
|
|
307
|
+
### Stable identity (`finding_key`)
|
|
308
|
+
|
|
309
|
+
```text
|
|
310
|
+
finding_key = sha1( normLocation | category | sha1(normDescription) | sha1(normSuggestion) )
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
Line numbers are stripped from the location and severity is *excluded*, so the
|
|
314
|
+
same issue at P1 vs P2 collapses to one key. A character-5-gram shingle backs a
|
|
315
|
+
Jaccard ≥ 0.7 fuzzy match when wording drifts between rounds.
|
|
316
|
+
|
|
317
|
+
### Agreement & confidence
|
|
318
|
+
|
|
319
|
+
| Sources | Severity | Agreement | Confidence |
|
|
320
|
+
| --- | --- | --- | --- |
|
|
321
|
+
| 2+ | same | consensus | high |
|
|
322
|
+
| 2+ | differ | majority | medium |
|
|
323
|
+
| 1 | :sev[P0]{level=p0} | unique | high |
|
|
324
|
+
| 1 | `compensating-*` | unique | low |
|
|
325
|
+
| 1 | other | unique | medium |
|
|
326
|
+
|
|
327
|
+
### The gate & the four verdicts
|
|
328
|
+
|
|
329
|
+
The gate **passes** when every unacknowledged finding is *below* the
|
|
330
|
+
`fix_threshold` (default :sev[P2]{level=p2}). Severity tiers run
|
|
331
|
+
:sev[P0]{level=p0} (highest) → :sev[P1]{level=p1} → :sev[P2]{level=p2} →
|
|
332
|
+
:sev[P3]{level=p3} (lowest).
|
|
333
|
+
|
|
334
|
+
| Verdict | Condition | Exit |
|
|
335
|
+
| --- | --- | --- |
|
|
336
|
+
| `pass` | Gate passed, all channels completed | 0 |
|
|
337
|
+
| `degraded-pass` | Gate passed, but some channels failed / timed out / weren't installed | 0 |
|
|
338
|
+
| `blocked` | An unacknowledged finding sits at or above the threshold | 2 |
|
|
339
|
+
| `needs-user-decision` | No channel completed (can't make a determination) | 3 |
|
|
340
|
+
|
|
341
|
+
:::callout{type=warning}
|
|
342
|
+
Proceed only on **pass** or **degraded-pass**. On **blocked** or
|
|
343
|
+
**needs-user-decision**, surface the verdict and findings — don't merge
|
|
344
|
+
automatically.
|
|
345
|
+
:::
|
|
346
|
+
|
|
347
|
+
## Degraded mode, compensation & auth
|
|
348
|
+
|
|
349
|
+
A channel is "degraded" when it's `not_installed` (no binary), `auth_failed`,
|
|
350
|
+
`timeout`, `skipped`, or `failed`. The review doesn't stop — it compensates and
|
|
351
|
+
tells you how to recover.
|
|
352
|
+
|
|
353
|
+
- **Compensating pass.** For each degraded external channel, a `claude -p` pass
|
|
354
|
+
runs with that channel's focus area, labeled e.g.
|
|
355
|
+
`[compensating: Grok-equivalent]`. These findings are single-source, low
|
|
356
|
+
confidence. The compensator channel is configurable via
|
|
357
|
+
`defaults.compensator.channel`.
|
|
358
|
+
- **Auth recovery** is surfaced, never silent.
|
|
359
|
+
|
|
360
|
+
| Channel | Auth check | Recovery |
|
|
361
|
+
| --- | --- | --- |
|
|
362
|
+
| `codex` | `codex login status` | `codex login` |
|
|
363
|
+
| `gemini` | `gemini -p "respond with ok"` | `gemini -p "hello"` |
|
|
364
|
+
| `claude` | `claude -p "respond with ok"` | `claude login` |
|
|
365
|
+
| `grok` | `grok models` | `grok login` |
|
|
366
|
+
|
|
367
|
+
## Configuration (`.mmr.yaml`)
|
|
368
|
+
|
|
369
|
+
Config is layered: built-in defaults → `~/.mmr/config.yaml` → project
|
|
370
|
+
`.mmr.yaml` → CLI flags. Arrays replace; objects deep-merge.
|
|
371
|
+
|
|
372
|
+
```yaml
|
|
373
|
+
version: 1
|
|
374
|
+
defaults:
|
|
375
|
+
fix_threshold: P2 # gate severity
|
|
376
|
+
timeout: 300 # default per-channel timeout (s)
|
|
377
|
+
parallel: true
|
|
378
|
+
channels_disabled: ["grok"] # opt OUT of a built-in (e.g. no grok installed)
|
|
379
|
+
channels:
|
|
380
|
+
doc-conformance:
|
|
381
|
+
enabled: true # opt IN to a default-off channel
|
|
382
|
+
# Bring-your-own model via channel inheritance:
|
|
383
|
+
qwen-local:
|
|
384
|
+
command: ollama run
|
|
385
|
+
flags: ["qwen2.5-coder:32b", "--format", "json"]
|
|
386
|
+
output_parser: { kind: unwrap-jsonpath, wrap: "$.response", then: default }
|
|
387
|
+
auth: { check: "ollama list", timeout: 5, failure_exit_codes: [1], recovery: "ollama serve" }
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
- `channels_disabled` — skip these built-ins in the default dispatch (ignored
|
|
391
|
+
when you pass an explicit `--channels` list).
|
|
392
|
+
- `enabled: false` — per-channel off switch (how `doc-conformance` ships).
|
|
393
|
+
- `extends` — inherit from another channel (≤ 4 levels, cycle-checked); child
|
|
394
|
+
fields override the parent.
|
|
395
|
+
- `fix_threshold` — project gate; override per-run with `--fix-threshold`.
|
|
396
|
+
|
|
397
|
+
:::callout{type=danger}
|
|
398
|
+
**Trust boundary.** When reviewing a diff, project `.mmr.yaml` and acks should
|
|
399
|
+
be read from the diff's *base ref*, not the working tree — otherwise a PR could
|
|
400
|
+
add a channel that exfiltrates secrets or self-acknowledge its own findings. Use
|
|
401
|
+
`--config-base-ref` / the `--trust-project-*` flags to control this in untrusted
|
|
402
|
+
(e.g. CI) contexts.
|
|
403
|
+
:::
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.1.0
|
|
@@ -2,6 +2,14 @@
|
|
|
2
2
|
name: backend-api-design
|
|
3
3
|
description: REST maturity levels, GraphQL schema-first design, gRPC protobuf conventions, tRPC router patterns, API versioning strategies, pagination, and filtering
|
|
4
4
|
topics: [backend, api-design, rest, graphql, grpc, trpc, versioning, pagination]
|
|
5
|
+
volatility: evolving
|
|
6
|
+
last-reviewed: null
|
|
7
|
+
version-pin: null
|
|
8
|
+
sources:
|
|
9
|
+
- url: https://spec.openapis.org/oas/latest.html
|
|
10
|
+
- url: https://spec.graphql.org/
|
|
11
|
+
- url: https://www.rfc-editor.org/rfc/rfc9110.html
|
|
12
|
+
- url: https://martinfowler.com/articles/richardsonMaturityModel.html
|
|
5
13
|
---
|
|
6
14
|
|
|
7
15
|
API design is a long-lived contract. Every structural decision — URL shape, error format, pagination scheme, versioning strategy — is expensive to change after consumers depend on it. Design APIs from the consumer's perspective first. The best API is one where new developers can predict the shape of an endpoint they have never seen before, because every other endpoint follows the same patterns.
|
|
@@ -2,6 +2,14 @@
|
|
|
2
2
|
name: backend-architecture
|
|
3
3
|
description: Monolith vs microservices decision framework, layered architecture patterns, CQRS, event sourcing, hexagonal architecture, and service mesh considerations
|
|
4
4
|
topics: [backend, architecture, microservices, monolith, cqrs, event-sourcing, hexagonal, clean-architecture]
|
|
5
|
+
volatility: evolving
|
|
6
|
+
last-reviewed: null
|
|
7
|
+
version-pin: null
|
|
8
|
+
sources:
|
|
9
|
+
- url: https://microservices.io/patterns/
|
|
10
|
+
- url: https://martinfowler.com/bliki/CQRS.html
|
|
11
|
+
- url: https://martinfowler.com/eaaDev/EventSourcing.html
|
|
12
|
+
- url: https://martinfowler.com/bliki/MonolithFirst.html
|
|
5
13
|
---
|
|
6
14
|
|
|
7
15
|
Backend architecture is the set of structural decisions that determine how the system scales, how teams work independently, and how expensive future changes will be. The single most common backend architecture mistake is choosing microservices before the problem demands them. Start with the simplest architecture that solves the current problem, and evolve to complexity only when specific pain points — not hypothetical future ones — force the change.
|
|
@@ -2,6 +2,13 @@
|
|
|
2
2
|
name: backend-async-patterns
|
|
3
3
|
description: Message queue patterns, event-driven architecture, saga patterns, retry strategies, and idempotency keys
|
|
4
4
|
topics: [backend, async, message-queues, event-driven, saga, retry, idempotency, cqrs]
|
|
5
|
+
volatility: evolving
|
|
6
|
+
last-reviewed: null
|
|
7
|
+
version-pin: null
|
|
8
|
+
sources:
|
|
9
|
+
- url: https://microservices.io/patterns/data/saga.html
|
|
10
|
+
- url: https://martinfowler.com/articles/patterns-of-distributed-systems/
|
|
11
|
+
- url: https://sre.google/sre-book/handling-overload/
|
|
5
12
|
---
|
|
6
13
|
|
|
7
14
|
Asynchronous patterns decouple services in time and space, enabling systems to absorb load spikes, survive partial failures, and scale independently — but they introduce delivery guarantees and consistency tradeoffs that must be designed for explicitly from the start.
|
|
@@ -2,6 +2,15 @@
|
|
|
2
2
|
name: backend-auth-patterns
|
|
3
3
|
description: JWT lifecycle, OAuth2 authorization code flow, API key management, and service-to-service authentication
|
|
4
4
|
topics: [backend, auth, jwt, oauth2, api-keys, mtls, security]
|
|
5
|
+
volatility: evolving
|
|
6
|
+
last-reviewed: null
|
|
7
|
+
version-pin: null
|
|
8
|
+
sources:
|
|
9
|
+
- url: https://www.rfc-editor.org/rfc/rfc6749
|
|
10
|
+
- url: https://www.rfc-editor.org/rfc/rfc7519
|
|
11
|
+
- url: https://www.rfc-editor.org/rfc/rfc7636
|
|
12
|
+
- url: https://openid.net/specs/openid-connect-core-1_0.html
|
|
13
|
+
- url: https://owasp.org/www-project-api-security/
|
|
5
14
|
---
|
|
6
15
|
|
|
7
16
|
Authentication and authorization are the first line of defense for any backend service — mistakes here compromise the entire system, making it essential to use proven patterns like JWTs with rotation, OAuth2 with PKCE, and workload identity from the start.
|
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
name: backend-conventions
|
|
3
3
|
description: Service and handler naming conventions, structured error handling patterns, structured logging with correlation IDs, and file organization standards for backend codebases
|
|
4
4
|
topics: [backend, conventions, error-handling, logging, naming, file-organization]
|
|
5
|
+
volatility: stable
|
|
6
|
+
last-reviewed: null
|
|
7
|
+
version-pin: null
|
|
8
|
+
sources:
|
|
9
|
+
- url: https://google.github.io/styleguide/
|
|
10
|
+
- url: https://martinfowler.com/tags/clean%20code.html
|
|
5
11
|
---
|
|
6
12
|
|
|
7
13
|
Consistent conventions in a backend codebase reduce cognitive load, make code reviewable at a glance, and prevent entire classes of bugs. Naming, error handling, and logging are the three highest-leverage areas — they touch every layer of the stack and every engineer on the team. Establish these conventions before the first PR, codify them in linting rules where possible, and treat violations as blocking review comments.
|
|
@@ -2,6 +2,13 @@
|
|
|
2
2
|
name: backend-data-modeling
|
|
3
3
|
description: Relational vs document modeling tradeoffs, migration strategies, connection pooling, ORM vs query builder tradeoffs, multi-tenancy patterns, and eventual consistency
|
|
4
4
|
topics: [backend, data-modeling, database, migrations, orm, multi-tenancy, eventual-consistency, connection-pooling]
|
|
5
|
+
volatility: stable
|
|
6
|
+
last-reviewed: null
|
|
7
|
+
version-pin: null
|
|
8
|
+
sources:
|
|
9
|
+
- url: https://www.postgresql.org/docs/current/
|
|
10
|
+
- url: https://martinfowler.com/articles/evodb.html
|
|
11
|
+
- url: https://microservices.io/patterns/data/database-per-service.html
|
|
5
12
|
---
|
|
6
13
|
|
|
7
14
|
Data modeling decisions have the highest reversal cost of any backend choice. A schema design that seemed reasonable at launch can become an operational crisis at scale — queries that worked at 10,000 rows fail at 100 million. The goal is to match the data model to the access patterns of the application, not to normalize for its own sake or to denormalize prematurely. Design the schema with the queries in mind from day one.
|
|
@@ -2,6 +2,14 @@
|
|
|
2
2
|
name: backend-deployment
|
|
3
3
|
description: Containerization best practices, serverless patterns, health check endpoints, graceful shutdown, and deployment strategies
|
|
4
4
|
topics: [backend, deployment, docker, serverless, health-checks, graceful-shutdown, blue-green, canary]
|
|
5
|
+
volatility: evolving
|
|
6
|
+
last-reviewed: null
|
|
7
|
+
version-pin: null
|
|
8
|
+
sources:
|
|
9
|
+
- url: https://martinfowler.com/bliki/BlueGreenDeployment.html
|
|
10
|
+
- url: https://martinfowler.com/bliki/CanaryRelease.html
|
|
11
|
+
- url: https://sre.google/sre-book/release-engineering/
|
|
12
|
+
- url: https://docs.aws.amazon.com/whitepapers/latest/overview-deployment-options/welcome.html
|
|
5
13
|
---
|
|
6
14
|
|
|
7
15
|
Deployment reliability is a multiplier on every other engineering investment — a well-written service that deploys poorly will cause more incidents than a mediocre service that deploys safely and rolls back cleanly.
|
|
@@ -2,6 +2,11 @@
|
|
|
2
2
|
name: backend-dev-environment
|
|
3
3
|
description: Docker Compose for local databases and queues, database seeding and migration scripts, API testing tools, environment variable management, and local SSL setup
|
|
4
4
|
topics: [backend, dev-environment, docker, migrations, testing, environment-variables]
|
|
5
|
+
volatility: evolving
|
|
6
|
+
last-reviewed: null
|
|
7
|
+
version-pin: null
|
|
8
|
+
sources:
|
|
9
|
+
- url: https://www.postgresql.org/docs/current/
|
|
5
10
|
---
|
|
6
11
|
|
|
7
12
|
A backend development environment that requires manual setup steps is a productivity drain and an onboarding failure. The standard should be: clone the repo, run one command, and have a fully functional local environment in under five minutes. Docker Compose is the primary tool for achieving this — it pins the exact versions of every external dependency and makes the environment reproducible across all developer machines.
|
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
name: backend-fintech-broker-integration
|
|
3
3
|
description: Multi-broker adapter pattern; credential rotation; error harmonization; rate-limit management; broker-side quirks.
|
|
4
4
|
topics: [backend, fintech, brokers, integration, adapter-pattern, rate-limits, credentials, retry]
|
|
5
|
+
volatility: evolving
|
|
6
|
+
last-reviewed: null
|
|
7
|
+
version-pin: null
|
|
8
|
+
sources:
|
|
9
|
+
- url: https://microservices.io/patterns/reliability/circuit-breaker.html
|
|
10
|
+
- url: https://martinfowler.com/bliki/CircuitBreaker.html
|
|
5
11
|
---
|
|
6
12
|
|
|
7
13
|
A fintech backend that routes orders or reads positions across more than one broker inherits the union of every broker's quirks, outages, auth schemes, and undocumented behaviors. The broker-integration layer exists to hide that mess behind one normalized internal contract so the rest of the system — risk, order lifecycle, ledger, UI — can stay clean. This doc covers the adapter contract, credential handling, error harmonization, rate-limit strategy, and the specific pitfalls that recur regardless of which brokers you connect.
|
|
@@ -2,13 +2,21 @@
|
|
|
2
2
|
name: backend-fintech-compliance
|
|
3
3
|
description: PCI-DSS, SOC 2, SEC/FINRA regulations for consumer/B2B fintech backends; audit trail immutability; data retention; segregation of duties.
|
|
4
4
|
topics: [backend, fintech, compliance, pci-dss, soc2, sec, finra, audit-trail, gdpr]
|
|
5
|
+
volatility: evolving
|
|
6
|
+
last-reviewed: null
|
|
7
|
+
version-pin: 'PCI-DSS v4.0.1'
|
|
8
|
+
sources:
|
|
9
|
+
- url: https://www.pcisecuritystandards.org/document_library/
|
|
10
|
+
- url: https://www.aicpa-cima.com/topic/audit-assurance
|
|
11
|
+
- url: https://www.finra.org/rules-guidance/rulebooks/finra-rules
|
|
12
|
+
- url: https://eur-lex.europa.eu/eli/reg/2016/679/oj
|
|
5
13
|
---
|
|
6
14
|
|
|
7
15
|
Fintech compliance is not a checklist applied at the end — it determines schema design, deployment pipelines, and system boundaries. Most regulations apply based on what a service *touches* (cards, trades, PII), so scope reduction is the single highest-leverage design decision available to engineering. This doc covers the regulatory regimes a typical US/EU fintech encounters, the audit-trail patterns they demand, and concrete implementation choices that keep audits survivable.
|
|
8
16
|
|
|
9
17
|
## Summary
|
|
10
18
|
|
|
11
|
-
Which regulations apply depends on what the service handles. Handling card data (PAN, CVV, track data) triggers PCI-DSS v4.0. Storing customer PII, financial records, or operating as a service provider to regulated firms triggers SOC 2 Type II expectations from customers and GLBA obligations (US financial privacy). Executing securities trades or routing orders triggers SEC Rule 17a-4 record retention and FINRA supervisory requirements. Operating in the EU triggers GDPR and — for crypto — MiCA. Serving retail vs institutional customers changes consumer-protection obligations (Reg Z, Reg E, CFPB oversight vs institutional carve-outs).
|
|
19
|
+
Which regulations apply depends on what the service handles. Handling card data (PAN, CVV, track data) triggers PCI-DSS v4.0.1. Storing customer PII, financial records, or operating as a service provider to regulated firms triggers SOC 2 Type II expectations from customers and GLBA obligations (US financial privacy). Executing securities trades or routing orders triggers SEC Rule 17a-4 record retention and FINRA supervisory requirements. Operating in the EU triggers GDPR and — for crypto — MiCA. Serving retail vs institutional customers changes consumer-protection obligations (Reg Z, Reg E, CFPB oversight vs institutional carve-outs).
|
|
12
20
|
|
|
13
21
|
Compliance cost scales with scope, not with traffic. A service that never sees raw PANs is *out of scope* for most PCI-DSS controls. A microservice that only handles trade metadata (not orders themselves) may be out of the SEC 17a-4 retention perimeter. Practical scope-reduction strategies: tokenize at the edge (Stripe, Marqeta, Basis Theory) so internal services only ever see tokens; keep regulated datastores (ledger, order book, card vault) in dedicated VPCs with narrow IAM; route regulated-data logs to a separate SIEM stream so the main observability stack stays out of scope; design SDK boundaries where PII-sensitive fields are never emitted to general-purpose workers.
|
|
14
22
|
|
|
@@ -22,7 +30,7 @@ Encryption is assumed baseline: TLS 1.2+ in transit (1.3 preferred), AES-256 at
|
|
|
22
30
|
|
|
23
31
|
### PCI-DSS Scoping and Tokenization
|
|
24
32
|
|
|
25
|
-
PCI-DSS v4.0 applies to any system that stores, processes, or transmits cardholder data (CHD) — the Primary Account Number (PAN), cardholder name, expiration date, service code — or sensitive authentication data (full track, CVV, PIN). The cost of compliance is roughly quadratic in the scope of the "cardholder data environment" (CDE): every service inside the CDE needs quarterly ASV scans, annual penetration tests, hardened configurations, FIM, and quarterly access reviews.
|
|
33
|
+
PCI-DSS v4.0.1 applies to any system that stores, processes, or transmits cardholder data (CHD) — the Primary Account Number (PAN), cardholder name, expiration date, service code — or sensitive authentication data (full track, CVV, PIN). The cost of compliance is roughly quadratic in the scope of the "cardholder data environment" (CDE): every service inside the CDE needs quarterly ASV scans, annual penetration tests, hardened configurations, FIM, and quarterly access reviews.
|
|
26
34
|
|
|
27
35
|
**Scope reduction via tokenization** is the dominant pattern. Instead of your application receiving raw PANs, the card is submitted directly from the browser/mobile app to a tokenization provider (Stripe Elements, Braintree Hosted Fields, Marqeta, Basis Theory, Very Good Security) which returns an opaque token. Your backend stores only the token. The card vault is the provider's CDE; your systems are *SAQ A* eligible (the lightest form).
|
|
28
36
|
|
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
name: backend-fintech-data-modeling
|
|
3
3
|
description: Financial data models; currency handling; decimal precision; positions, trades, prices; time-series designs.
|
|
4
4
|
topics: [backend, fintech, data-modeling, decimal, currency, time-series, positions, trades]
|
|
5
|
+
volatility: stable
|
|
6
|
+
last-reviewed: null
|
|
7
|
+
version-pin: null
|
|
8
|
+
sources:
|
|
9
|
+
- url: https://www.postgresql.org/docs/current/datatype-numeric.html
|
|
10
|
+
- url: https://www.iso.org/iso-4217-currency-codes.html
|
|
5
11
|
---
|
|
6
12
|
|
|
7
13
|
Financial data modeling is where most fintech bugs are born: a float creeps into a money field, a currency is implied instead of stored, a tick table grows unbounded, or a `current_position` column drifts from the journal. This doc covers the non-negotiable shapes of money, quantity, and price data, and the time-series and derived-view patterns that keep a trading or banking system honest at scale.
|
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
name: backend-fintech-ledger
|
|
3
3
|
description: Double-entry accounting for fintech ledgers; journal vs ledger tables; idempotent posting; reconciliation patterns; balance invariants.
|
|
4
4
|
topics: [backend, fintech, ledger, double-entry, accounting, reconciliation, idempotency, invariants]
|
|
5
|
+
volatility: stable
|
|
6
|
+
last-reviewed: null
|
|
7
|
+
version-pin: null
|
|
8
|
+
sources:
|
|
9
|
+
- url: https://martinfowler.com/eaaCatalog/
|
|
10
|
+
- url: https://www.postgresql.org/docs/current/ddl-constraints.html
|
|
5
11
|
---
|
|
6
12
|
|
|
7
13
|
A fintech ledger is the authoritative record of money movement; if it is wrong, nothing else in the system can be trusted. The discipline is borrowed intact from 700 years of double-entry bookkeeping — not a new invention, and not negotiable. This doc covers the invariants, schema shape, idempotent posting mechanics, and reconciliation patterns that keep a ledger survivable at production scale.
|
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
name: backend-fintech-observability
|
|
3
3
|
description: Trade event correlation; market-hours aware scheduling; SLOs for fintech systems; compliance logging; alerting strategy.
|
|
4
4
|
topics: [backend, fintech, observability, tracing, slos, alerting, correlation-id, market-hours]
|
|
5
|
+
volatility: evolving
|
|
6
|
+
last-reviewed: null
|
|
7
|
+
version-pin: null
|
|
8
|
+
sources:
|
|
9
|
+
- url: https://opentelemetry.io/docs/
|
|
10
|
+
- url: https://sre.google/sre-book/service-level-objectives/
|
|
5
11
|
---
|
|
6
12
|
|
|
7
13
|
Observability for a trading system is not generic APM with a finance skin — it is the ability to reconstruct any single order, end to end, across six or more services, on demand, years later, with timezone-correct timestamps and a stable correlation identifier. It is also the early-warning system that catches a sudden drop in fill rate at 09:31 ET before the desk calls. Done well it overlaps with — but does not replace — the immutable audit trail (`backend-fintech-compliance.md`).
|
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
name: backend-fintech-order-lifecycle
|
|
3
3
|
description: Order state machine; fills, partial fills, cancellation; event-driven order tracking; idempotency; handling "unknown" states.
|
|
4
4
|
topics: [backend, fintech, orders, state-machine, fills, partial-fills, event-driven, webhooks]
|
|
5
|
+
volatility: evolving
|
|
6
|
+
last-reviewed: null
|
|
7
|
+
version-pin: null
|
|
8
|
+
sources:
|
|
9
|
+
- url: https://microservices.io/patterns/data/saga.html
|
|
10
|
+
- url: https://martinfowler.com/articles/patterns-of-distributed-systems/
|
|
5
11
|
---
|
|
6
12
|
|
|
7
13
|
Orders in a trading system are long-lived, asynchronous, externally mutated objects — the exact shape of problem a disciplined state machine is built for. This doc covers the canonical states and transitions, how fills and partial fills land, why "unknown" is a real state you cannot wish away, and the reconciliation posture that keeps internal bookkeeping aligned with the broker of record.
|
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
name: backend-fintech-risk-management
|
|
3
3
|
description: Position limits, drawdown caps, circuit breakers, kill switches; pre-trade and post-trade risk checks; operational risk controls.
|
|
4
4
|
topics: [backend, fintech, risk, position-limits, drawdown, circuit-breakers, kill-switch, pre-trade-checks]
|
|
5
|
+
volatility: evolving
|
|
6
|
+
last-reviewed: null
|
|
7
|
+
version-pin: null
|
|
8
|
+
sources:
|
|
9
|
+
- url: https://martinfowler.com/bliki/CircuitBreaker.html
|
|
10
|
+
- url: https://microservices.io/patterns/reliability/circuit-breaker.html
|
|
5
11
|
---
|
|
6
12
|
|
|
7
13
|
Risk management in a trading system is the set of controls that stops a bad day from becoming a catastrophic one. It lives in two places: *before* an order goes to the broker (pre-trade checks that block) and *after* fills land (post-trade monitoring that alerts, throttles, or halts). Neither half is optional, and both are exercised continuously, not just during incidents.
|