mustflow 1.18.16 → 1.30.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 +16 -6
- package/dist/cli/commands/adapters.js +90 -0
- package/dist/cli/commands/classify.js +3 -4
- package/dist/cli/commands/contract-lint.js +26 -6
- package/dist/cli/commands/dashboard.js +103 -4
- package/dist/cli/commands/explain-verify.js +213 -0
- package/dist/cli/commands/explain.js +48 -4
- package/dist/cli/commands/handoff.js +136 -0
- package/dist/cli/commands/run.js +97 -136
- package/dist/cli/commands/update.js +91 -61
- package/dist/cli/commands/verify.js +230 -137
- package/dist/cli/i18n/en.js +65 -4
- package/dist/cli/i18n/es.js +65 -4
- package/dist/cli/i18n/fr.js +65 -4
- package/dist/cli/i18n/hi.js +65 -4
- package/dist/cli/i18n/ko.js +65 -4
- package/dist/cli/i18n/zh.js +65 -4
- package/dist/cli/index.js +11 -0
- package/dist/cli/lib/command-registry.js +10 -0
- package/dist/cli/lib/dashboard-export.js +775 -0
- package/dist/cli/lib/local-index.js +22 -6
- package/dist/cli/lib/run-plan.js +222 -0
- package/dist/cli/lib/templates.js +18 -3
- package/dist/cli/lib/update-diff-preview.js +163 -0
- package/dist/cli/lib/validation.js +22 -0
- package/dist/core/adapter-compatibility.js +235 -0
- package/dist/core/change-classification.js +9 -0
- package/dist/core/change-verification.js +10 -3
- package/dist/core/check-issues.js +4 -0
- package/dist/core/command-contract-validation.js +14 -0
- package/dist/core/command-cwd.js +18 -6
- package/dist/core/command-env.js +91 -0
- package/dist/core/contract-lint.js +165 -3
- package/dist/core/contract-models.js +172 -0
- package/dist/core/dashboard-verification.js +2 -0
- package/dist/core/doc-review-triage.js +1 -0
- package/dist/core/handoff-record.js +376 -0
- package/dist/core/public-json-contracts.js +16 -0
- package/dist/core/run-receipt.js +46 -7
- package/dist/core/run-write-drift.js +180 -0
- package/dist/core/secret-redaction.js +39 -0
- package/dist/core/source-anchors.js +3 -5
- package/dist/core/verification-decision-graph.js +223 -0
- package/package.json +3 -1
- package/schemas/README.md +11 -4
- package/schemas/adapter-compatibility-report.schema.json +184 -0
- package/schemas/change-verification-report.schema.json +133 -1
- package/schemas/commands.schema.json +8 -1
- package/schemas/contract-lint-report.schema.json +48 -0
- package/schemas/explain-report.schema.json +265 -2
- package/schemas/handoff-validation-report.schema.json +68 -0
- package/schemas/run-receipt.schema.json +74 -1
- package/templates/default/common/.mustflow/config/commands.toml +2 -0
- package/templates/default/i18n.toml +78 -234
- package/templates/default/locales/en/.mustflow/skills/INDEX.md +7 -3
- package/templates/default/locales/en/.mustflow/skills/architecture-deepening-review/SKILL.md +154 -0
- package/templates/default/locales/en/.mustflow/skills/behavior-preserving-refactor/SKILL.md +8 -3
- package/templates/default/locales/en/.mustflow/skills/code-review/SKILL.md +9 -4
- package/templates/default/locales/en/.mustflow/skills/date-number-audit/SKILL.md +19 -4
- package/templates/default/locales/en/.mustflow/skills/diff-risk-review/SKILL.md +4 -2
- package/templates/default/locales/en/.mustflow/skills/external-skill-intake/SKILL.md +141 -0
- package/templates/default/locales/en/.mustflow/skills/release-notes-authoring/SKILL.md +143 -0
- package/templates/default/locales/en/.mustflow/skills/repro-first-debug/SKILL.md +22 -8
- package/templates/default/locales/en/.mustflow/skills/skill-authoring/SKILL.md +3 -3
- package/templates/default/locales/en/.mustflow/skills/source-freshness-check/SKILL.md +22 -9
- package/templates/default/locales/en/.mustflow/skills/ui-quality-gate/SKILL.md +21 -13
- package/templates/default/locales/en/.mustflow/skills/vertical-slice-tdd/SKILL.md +167 -0
- package/templates/default/manifest.toml +16 -1
- package/templates/default/locales/es/.mustflow/skills/INDEX.md +0 -75
- package/templates/default/locales/es/.mustflow/skills/adapter-boundary/SKILL.md +0 -193
- package/templates/default/locales/es/.mustflow/skills/artifact-integrity-check/SKILL.md +0 -114
- package/templates/default/locales/es/.mustflow/skills/behavior-preserving-refactor/SKILL.md +0 -182
- package/templates/default/locales/es/.mustflow/skills/code-review/SKILL.md +0 -115
- package/templates/default/locales/es/.mustflow/skills/codebase-orientation/SKILL.md +0 -115
- package/templates/default/locales/es/.mustflow/skills/command-pattern/SKILL.md +0 -247
- package/templates/default/locales/es/.mustflow/skills/composition-over-inheritance/SKILL.md +0 -176
- package/templates/default/locales/es/.mustflow/skills/contract-sync-check/SKILL.md +0 -116
- package/templates/default/locales/es/.mustflow/skills/database-change-safety/SKILL.md +0 -155
- package/templates/default/locales/es/.mustflow/skills/date-number-audit/SKILL.md +0 -116
- package/templates/default/locales/es/.mustflow/skills/dependency-injection/SKILL.md +0 -161
- package/templates/default/locales/es/.mustflow/skills/dependency-reality-check/SKILL.md +0 -115
- package/templates/default/locales/es/.mustflow/skills/diff-risk-review/SKILL.md +0 -136
- package/templates/default/locales/es/.mustflow/skills/docs-prose-review/SKILL.md +0 -119
- package/templates/default/locales/es/.mustflow/skills/docs-update/SKILL.md +0 -97
- package/templates/default/locales/es/.mustflow/skills/external-prompt-injection-defense/SKILL.md +0 -116
- package/templates/default/locales/es/.mustflow/skills/facade-pattern/SKILL.md +0 -210
- package/templates/default/locales/es/.mustflow/skills/failure-triage/SKILL.md +0 -97
- package/templates/default/locales/es/.mustflow/skills/instruction-conflict-scope-check/SKILL.md +0 -118
- package/templates/default/locales/es/.mustflow/skills/line-ending-hygiene/SKILL.md +0 -111
- package/templates/default/locales/es/.mustflow/skills/migration-safety-check/SKILL.md +0 -117
- package/templates/default/locales/es/.mustflow/skills/multi-agent-work-coordination/SKILL.md +0 -260
- package/templates/default/locales/es/.mustflow/skills/null-object-pattern/SKILL.md +0 -196
- package/templates/default/locales/es/.mustflow/skills/pattern-scout/SKILL.md +0 -110
- package/templates/default/locales/es/.mustflow/skills/performance-budget-check/SKILL.md +0 -121
- package/templates/default/locales/es/.mustflow/skills/project-context-authoring/SKILL.md +0 -107
- package/templates/default/locales/es/.mustflow/skills/pure-core-imperative-shell/SKILL.md +0 -212
- package/templates/default/locales/es/.mustflow/skills/readme-authoring/SKILL.md +0 -115
- package/templates/default/locales/es/.mustflow/skills/repo-improvement-loop/SKILL.md +0 -150
- package/templates/default/locales/es/.mustflow/skills/repro-first-debug/SKILL.md +0 -112
- package/templates/default/locales/es/.mustflow/skills/requirement-regression-guard/SKILL.md +0 -152
- package/templates/default/locales/es/.mustflow/skills/result-option/SKILL.md +0 -186
- package/templates/default/locales/es/.mustflow/skills/security-privacy-review/SKILL.md +0 -116
- package/templates/default/locales/es/.mustflow/skills/security-regression-tests/SKILL.md +0 -131
- package/templates/default/locales/es/.mustflow/skills/skill-authoring/SKILL.md +0 -110
- package/templates/default/locales/es/.mustflow/skills/source-freshness-check/SKILL.md +0 -111
- package/templates/default/locales/es/.mustflow/skills/state-machine-pattern/SKILL.md +0 -214
- package/templates/default/locales/es/.mustflow/skills/strategy-pattern/SKILL.md +0 -215
- package/templates/default/locales/es/.mustflow/skills/structure-discovery-gate/SKILL.md +0 -159
- package/templates/default/locales/es/.mustflow/skills/test-design-guard/SKILL.md +0 -162
- package/templates/default/locales/es/.mustflow/skills/test-maintenance/SKILL.md +0 -122
- package/templates/default/locales/es/.mustflow/skills/ui-quality-gate/SKILL.md +0 -117
- package/templates/default/locales/es/.mustflow/skills/visual-review-artifact/SKILL.md +0 -127
- package/templates/default/locales/es/.mustflow/skills/visual-review-artifact/assets/review-template.html +0 -286
- package/templates/default/locales/es/.mustflow/skills/visual-review-artifact/resources.toml +0 -7
- package/templates/default/locales/es/.mustflow/skills/web-asset-optimization/SKILL.md +0 -108
- package/templates/default/locales/fr/.mustflow/skills/INDEX.md +0 -75
- package/templates/default/locales/fr/.mustflow/skills/adapter-boundary/SKILL.md +0 -193
- package/templates/default/locales/fr/.mustflow/skills/artifact-integrity-check/SKILL.md +0 -114
- package/templates/default/locales/fr/.mustflow/skills/behavior-preserving-refactor/SKILL.md +0 -182
- package/templates/default/locales/fr/.mustflow/skills/code-review/SKILL.md +0 -115
- package/templates/default/locales/fr/.mustflow/skills/codebase-orientation/SKILL.md +0 -115
- package/templates/default/locales/fr/.mustflow/skills/command-pattern/SKILL.md +0 -247
- package/templates/default/locales/fr/.mustflow/skills/composition-over-inheritance/SKILL.md +0 -176
- package/templates/default/locales/fr/.mustflow/skills/contract-sync-check/SKILL.md +0 -116
- package/templates/default/locales/fr/.mustflow/skills/database-change-safety/SKILL.md +0 -155
- package/templates/default/locales/fr/.mustflow/skills/date-number-audit/SKILL.md +0 -116
- package/templates/default/locales/fr/.mustflow/skills/dependency-injection/SKILL.md +0 -161
- package/templates/default/locales/fr/.mustflow/skills/dependency-reality-check/SKILL.md +0 -115
- package/templates/default/locales/fr/.mustflow/skills/diff-risk-review/SKILL.md +0 -136
- package/templates/default/locales/fr/.mustflow/skills/docs-prose-review/SKILL.md +0 -119
- package/templates/default/locales/fr/.mustflow/skills/docs-update/SKILL.md +0 -97
- package/templates/default/locales/fr/.mustflow/skills/external-prompt-injection-defense/SKILL.md +0 -116
- package/templates/default/locales/fr/.mustflow/skills/facade-pattern/SKILL.md +0 -210
- package/templates/default/locales/fr/.mustflow/skills/failure-triage/SKILL.md +0 -97
- package/templates/default/locales/fr/.mustflow/skills/instruction-conflict-scope-check/SKILL.md +0 -118
- package/templates/default/locales/fr/.mustflow/skills/line-ending-hygiene/SKILL.md +0 -111
- package/templates/default/locales/fr/.mustflow/skills/migration-safety-check/SKILL.md +0 -117
- package/templates/default/locales/fr/.mustflow/skills/multi-agent-work-coordination/SKILL.md +0 -260
- package/templates/default/locales/fr/.mustflow/skills/null-object-pattern/SKILL.md +0 -196
- package/templates/default/locales/fr/.mustflow/skills/pattern-scout/SKILL.md +0 -110
- package/templates/default/locales/fr/.mustflow/skills/performance-budget-check/SKILL.md +0 -121
- package/templates/default/locales/fr/.mustflow/skills/project-context-authoring/SKILL.md +0 -107
- package/templates/default/locales/fr/.mustflow/skills/pure-core-imperative-shell/SKILL.md +0 -212
- package/templates/default/locales/fr/.mustflow/skills/readme-authoring/SKILL.md +0 -115
- package/templates/default/locales/fr/.mustflow/skills/repo-improvement-loop/SKILL.md +0 -150
- package/templates/default/locales/fr/.mustflow/skills/repro-first-debug/SKILL.md +0 -112
- package/templates/default/locales/fr/.mustflow/skills/requirement-regression-guard/SKILL.md +0 -152
- package/templates/default/locales/fr/.mustflow/skills/result-option/SKILL.md +0 -186
- package/templates/default/locales/fr/.mustflow/skills/security-privacy-review/SKILL.md +0 -116
- package/templates/default/locales/fr/.mustflow/skills/security-regression-tests/SKILL.md +0 -131
- package/templates/default/locales/fr/.mustflow/skills/skill-authoring/SKILL.md +0 -110
- package/templates/default/locales/fr/.mustflow/skills/source-freshness-check/SKILL.md +0 -111
- package/templates/default/locales/fr/.mustflow/skills/state-machine-pattern/SKILL.md +0 -214
- package/templates/default/locales/fr/.mustflow/skills/strategy-pattern/SKILL.md +0 -215
- package/templates/default/locales/fr/.mustflow/skills/structure-discovery-gate/SKILL.md +0 -159
- package/templates/default/locales/fr/.mustflow/skills/test-design-guard/SKILL.md +0 -162
- package/templates/default/locales/fr/.mustflow/skills/test-maintenance/SKILL.md +0 -122
- package/templates/default/locales/fr/.mustflow/skills/ui-quality-gate/SKILL.md +0 -117
- package/templates/default/locales/fr/.mustflow/skills/visual-review-artifact/SKILL.md +0 -127
- package/templates/default/locales/fr/.mustflow/skills/visual-review-artifact/assets/review-template.html +0 -286
- package/templates/default/locales/fr/.mustflow/skills/visual-review-artifact/resources.toml +0 -7
- package/templates/default/locales/fr/.mustflow/skills/web-asset-optimization/SKILL.md +0 -108
- package/templates/default/locales/hi/.mustflow/skills/INDEX.md +0 -75
- package/templates/default/locales/hi/.mustflow/skills/adapter-boundary/SKILL.md +0 -193
- package/templates/default/locales/hi/.mustflow/skills/artifact-integrity-check/SKILL.md +0 -114
- package/templates/default/locales/hi/.mustflow/skills/behavior-preserving-refactor/SKILL.md +0 -182
- package/templates/default/locales/hi/.mustflow/skills/code-review/SKILL.md +0 -115
- package/templates/default/locales/hi/.mustflow/skills/codebase-orientation/SKILL.md +0 -115
- package/templates/default/locales/hi/.mustflow/skills/command-pattern/SKILL.md +0 -247
- package/templates/default/locales/hi/.mustflow/skills/composition-over-inheritance/SKILL.md +0 -176
- package/templates/default/locales/hi/.mustflow/skills/contract-sync-check/SKILL.md +0 -116
- package/templates/default/locales/hi/.mustflow/skills/database-change-safety/SKILL.md +0 -155
- package/templates/default/locales/hi/.mustflow/skills/date-number-audit/SKILL.md +0 -116
- package/templates/default/locales/hi/.mustflow/skills/dependency-injection/SKILL.md +0 -161
- package/templates/default/locales/hi/.mustflow/skills/dependency-reality-check/SKILL.md +0 -115
- package/templates/default/locales/hi/.mustflow/skills/diff-risk-review/SKILL.md +0 -136
- package/templates/default/locales/hi/.mustflow/skills/docs-prose-review/SKILL.md +0 -119
- package/templates/default/locales/hi/.mustflow/skills/docs-update/SKILL.md +0 -97
- package/templates/default/locales/hi/.mustflow/skills/external-prompt-injection-defense/SKILL.md +0 -116
- package/templates/default/locales/hi/.mustflow/skills/facade-pattern/SKILL.md +0 -210
- package/templates/default/locales/hi/.mustflow/skills/failure-triage/SKILL.md +0 -97
- package/templates/default/locales/hi/.mustflow/skills/instruction-conflict-scope-check/SKILL.md +0 -118
- package/templates/default/locales/hi/.mustflow/skills/line-ending-hygiene/SKILL.md +0 -111
- package/templates/default/locales/hi/.mustflow/skills/migration-safety-check/SKILL.md +0 -117
- package/templates/default/locales/hi/.mustflow/skills/multi-agent-work-coordination/SKILL.md +0 -260
- package/templates/default/locales/hi/.mustflow/skills/null-object-pattern/SKILL.md +0 -196
- package/templates/default/locales/hi/.mustflow/skills/pattern-scout/SKILL.md +0 -110
- package/templates/default/locales/hi/.mustflow/skills/performance-budget-check/SKILL.md +0 -121
- package/templates/default/locales/hi/.mustflow/skills/project-context-authoring/SKILL.md +0 -107
- package/templates/default/locales/hi/.mustflow/skills/pure-core-imperative-shell/SKILL.md +0 -212
- package/templates/default/locales/hi/.mustflow/skills/readme-authoring/SKILL.md +0 -115
- package/templates/default/locales/hi/.mustflow/skills/repo-improvement-loop/SKILL.md +0 -150
- package/templates/default/locales/hi/.mustflow/skills/repro-first-debug/SKILL.md +0 -112
- package/templates/default/locales/hi/.mustflow/skills/requirement-regression-guard/SKILL.md +0 -152
- package/templates/default/locales/hi/.mustflow/skills/result-option/SKILL.md +0 -186
- package/templates/default/locales/hi/.mustflow/skills/security-privacy-review/SKILL.md +0 -116
- package/templates/default/locales/hi/.mustflow/skills/security-regression-tests/SKILL.md +0 -131
- package/templates/default/locales/hi/.mustflow/skills/skill-authoring/SKILL.md +0 -110
- package/templates/default/locales/hi/.mustflow/skills/source-freshness-check/SKILL.md +0 -111
- package/templates/default/locales/hi/.mustflow/skills/state-machine-pattern/SKILL.md +0 -214
- package/templates/default/locales/hi/.mustflow/skills/strategy-pattern/SKILL.md +0 -215
- package/templates/default/locales/hi/.mustflow/skills/structure-discovery-gate/SKILL.md +0 -159
- package/templates/default/locales/hi/.mustflow/skills/test-design-guard/SKILL.md +0 -162
- package/templates/default/locales/hi/.mustflow/skills/test-maintenance/SKILL.md +0 -122
- package/templates/default/locales/hi/.mustflow/skills/ui-quality-gate/SKILL.md +0 -117
- package/templates/default/locales/hi/.mustflow/skills/visual-review-artifact/SKILL.md +0 -127
- package/templates/default/locales/hi/.mustflow/skills/visual-review-artifact/assets/review-template.html +0 -286
- package/templates/default/locales/hi/.mustflow/skills/visual-review-artifact/resources.toml +0 -7
- package/templates/default/locales/hi/.mustflow/skills/web-asset-optimization/SKILL.md +0 -108
- package/templates/default/locales/ko/.mustflow/skills/INDEX.md +0 -80
- package/templates/default/locales/ko/.mustflow/skills/adapter-boundary/SKILL.md +0 -193
- package/templates/default/locales/ko/.mustflow/skills/artifact-integrity-check/SKILL.md +0 -114
- package/templates/default/locales/ko/.mustflow/skills/behavior-preserving-refactor/SKILL.md +0 -182
- package/templates/default/locales/ko/.mustflow/skills/code-review/SKILL.md +0 -118
- package/templates/default/locales/ko/.mustflow/skills/codebase-orientation/SKILL.md +0 -115
- package/templates/default/locales/ko/.mustflow/skills/command-pattern/SKILL.md +0 -247
- package/templates/default/locales/ko/.mustflow/skills/composition-over-inheritance/SKILL.md +0 -176
- package/templates/default/locales/ko/.mustflow/skills/contract-sync-check/SKILL.md +0 -116
- package/templates/default/locales/ko/.mustflow/skills/database-change-safety/SKILL.md +0 -155
- package/templates/default/locales/ko/.mustflow/skills/date-number-audit/SKILL.md +0 -116
- package/templates/default/locales/ko/.mustflow/skills/dependency-injection/SKILL.md +0 -161
- package/templates/default/locales/ko/.mustflow/skills/dependency-reality-check/SKILL.md +0 -115
- package/templates/default/locales/ko/.mustflow/skills/diff-risk-review/SKILL.md +0 -136
- package/templates/default/locales/ko/.mustflow/skills/docs-prose-review/SKILL.md +0 -119
- package/templates/default/locales/ko/.mustflow/skills/docs-update/SKILL.md +0 -107
- package/templates/default/locales/ko/.mustflow/skills/external-prompt-injection-defense/SKILL.md +0 -116
- package/templates/default/locales/ko/.mustflow/skills/facade-pattern/SKILL.md +0 -210
- package/templates/default/locales/ko/.mustflow/skills/failure-triage/SKILL.md +0 -119
- package/templates/default/locales/ko/.mustflow/skills/instruction-conflict-scope-check/SKILL.md +0 -118
- package/templates/default/locales/ko/.mustflow/skills/line-ending-hygiene/SKILL.md +0 -111
- package/templates/default/locales/ko/.mustflow/skills/migration-safety-check/SKILL.md +0 -117
- package/templates/default/locales/ko/.mustflow/skills/multi-agent-work-coordination/SKILL.md +0 -259
- package/templates/default/locales/ko/.mustflow/skills/null-object-pattern/SKILL.md +0 -196
- package/templates/default/locales/ko/.mustflow/skills/pattern-scout/SKILL.md +0 -110
- package/templates/default/locales/ko/.mustflow/skills/performance-budget-check/SKILL.md +0 -121
- package/templates/default/locales/ko/.mustflow/skills/project-context-authoring/SKILL.md +0 -107
- package/templates/default/locales/ko/.mustflow/skills/pure-core-imperative-shell/SKILL.md +0 -212
- package/templates/default/locales/ko/.mustflow/skills/readme-authoring/SKILL.md +0 -115
- package/templates/default/locales/ko/.mustflow/skills/repo-improvement-loop/SKILL.md +0 -150
- package/templates/default/locales/ko/.mustflow/skills/repro-first-debug/SKILL.md +0 -112
- package/templates/default/locales/ko/.mustflow/skills/requirement-regression-guard/SKILL.md +0 -152
- package/templates/default/locales/ko/.mustflow/skills/result-option/SKILL.md +0 -186
- package/templates/default/locales/ko/.mustflow/skills/security-privacy-review/SKILL.md +0 -116
- package/templates/default/locales/ko/.mustflow/skills/security-regression-tests/SKILL.md +0 -131
- package/templates/default/locales/ko/.mustflow/skills/skill-authoring/SKILL.md +0 -110
- package/templates/default/locales/ko/.mustflow/skills/source-freshness-check/SKILL.md +0 -111
- package/templates/default/locales/ko/.mustflow/skills/state-machine-pattern/SKILL.md +0 -214
- package/templates/default/locales/ko/.mustflow/skills/strategy-pattern/SKILL.md +0 -215
- package/templates/default/locales/ko/.mustflow/skills/structure-discovery-gate/SKILL.md +0 -159
- package/templates/default/locales/ko/.mustflow/skills/test-design-guard/SKILL.md +0 -162
- package/templates/default/locales/ko/.mustflow/skills/test-maintenance/SKILL.md +0 -130
- package/templates/default/locales/ko/.mustflow/skills/ui-quality-gate/SKILL.md +0 -117
- package/templates/default/locales/ko/.mustflow/skills/visual-review-artifact/SKILL.md +0 -127
- package/templates/default/locales/ko/.mustflow/skills/visual-review-artifact/assets/review-template.html +0 -286
- package/templates/default/locales/ko/.mustflow/skills/visual-review-artifact/resources.toml +0 -7
- package/templates/default/locales/ko/.mustflow/skills/web-asset-optimization/SKILL.md +0 -108
- package/templates/default/locales/zh/.mustflow/skills/INDEX.md +0 -74
- package/templates/default/locales/zh/.mustflow/skills/adapter-boundary/SKILL.md +0 -193
- package/templates/default/locales/zh/.mustflow/skills/artifact-integrity-check/SKILL.md +0 -114
- package/templates/default/locales/zh/.mustflow/skills/behavior-preserving-refactor/SKILL.md +0 -182
- package/templates/default/locales/zh/.mustflow/skills/code-review/SKILL.md +0 -115
- package/templates/default/locales/zh/.mustflow/skills/codebase-orientation/SKILL.md +0 -115
- package/templates/default/locales/zh/.mustflow/skills/command-pattern/SKILL.md +0 -247
- package/templates/default/locales/zh/.mustflow/skills/composition-over-inheritance/SKILL.md +0 -176
- package/templates/default/locales/zh/.mustflow/skills/contract-sync-check/SKILL.md +0 -116
- package/templates/default/locales/zh/.mustflow/skills/database-change-safety/SKILL.md +0 -155
- package/templates/default/locales/zh/.mustflow/skills/date-number-audit/SKILL.md +0 -116
- package/templates/default/locales/zh/.mustflow/skills/dependency-injection/SKILL.md +0 -161
- package/templates/default/locales/zh/.mustflow/skills/dependency-reality-check/SKILL.md +0 -115
- package/templates/default/locales/zh/.mustflow/skills/diff-risk-review/SKILL.md +0 -136
- package/templates/default/locales/zh/.mustflow/skills/docs-prose-review/SKILL.md +0 -119
- package/templates/default/locales/zh/.mustflow/skills/docs-update/SKILL.md +0 -97
- package/templates/default/locales/zh/.mustflow/skills/external-prompt-injection-defense/SKILL.md +0 -116
- package/templates/default/locales/zh/.mustflow/skills/facade-pattern/SKILL.md +0 -210
- package/templates/default/locales/zh/.mustflow/skills/failure-triage/SKILL.md +0 -96
- package/templates/default/locales/zh/.mustflow/skills/instruction-conflict-scope-check/SKILL.md +0 -118
- package/templates/default/locales/zh/.mustflow/skills/line-ending-hygiene/SKILL.md +0 -111
- package/templates/default/locales/zh/.mustflow/skills/migration-safety-check/SKILL.md +0 -117
- package/templates/default/locales/zh/.mustflow/skills/multi-agent-work-coordination/SKILL.md +0 -260
- package/templates/default/locales/zh/.mustflow/skills/null-object-pattern/SKILL.md +0 -196
- package/templates/default/locales/zh/.mustflow/skills/pattern-scout/SKILL.md +0 -110
- package/templates/default/locales/zh/.mustflow/skills/performance-budget-check/SKILL.md +0 -121
- package/templates/default/locales/zh/.mustflow/skills/project-context-authoring/SKILL.md +0 -107
- package/templates/default/locales/zh/.mustflow/skills/pure-core-imperative-shell/SKILL.md +0 -212
- package/templates/default/locales/zh/.mustflow/skills/readme-authoring/SKILL.md +0 -115
- package/templates/default/locales/zh/.mustflow/skills/repo-improvement-loop/SKILL.md +0 -150
- package/templates/default/locales/zh/.mustflow/skills/repro-first-debug/SKILL.md +0 -112
- package/templates/default/locales/zh/.mustflow/skills/requirement-regression-guard/SKILL.md +0 -152
- package/templates/default/locales/zh/.mustflow/skills/result-option/SKILL.md +0 -186
- package/templates/default/locales/zh/.mustflow/skills/security-privacy-review/SKILL.md +0 -116
- package/templates/default/locales/zh/.mustflow/skills/security-regression-tests/SKILL.md +0 -131
- package/templates/default/locales/zh/.mustflow/skills/skill-authoring/SKILL.md +0 -110
- package/templates/default/locales/zh/.mustflow/skills/source-freshness-check/SKILL.md +0 -111
- package/templates/default/locales/zh/.mustflow/skills/state-machine-pattern/SKILL.md +0 -214
- package/templates/default/locales/zh/.mustflow/skills/strategy-pattern/SKILL.md +0 -215
- package/templates/default/locales/zh/.mustflow/skills/structure-discovery-gate/SKILL.md +0 -159
- package/templates/default/locales/zh/.mustflow/skills/test-design-guard/SKILL.md +0 -162
- package/templates/default/locales/zh/.mustflow/skills/test-maintenance/SKILL.md +0 -122
- package/templates/default/locales/zh/.mustflow/skills/ui-quality-gate/SKILL.md +0 -117
- package/templates/default/locales/zh/.mustflow/skills/visual-review-artifact/SKILL.md +0 -127
- package/templates/default/locales/zh/.mustflow/skills/visual-review-artifact/assets/review-template.html +0 -286
- package/templates/default/locales/zh/.mustflow/skills/visual-review-artifact/resources.toml +0 -7
- package/templates/default/locales/zh/.mustflow/skills/web-asset-optimization/SKILL.md +0 -108
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export const REDACTED_SECRET_MARKER = '[REDACTED_SECRET]';
|
|
2
|
+
const SECRET_VALUE_PATTERN = '[A-Za-z0-9_./+=:-]{8,}';
|
|
3
|
+
const SECRET_REDACTION_RULES = [
|
|
4
|
+
{
|
|
5
|
+
kind: 'secret_key_value',
|
|
6
|
+
pattern: new RegExp(`\\b((?:api[_-]?key|api[_-]?token|access[_-]?token|auth[_-]?token|secret|password|passwd|private[_-]?key)\\b\\s*[:=]\\s*["']?)(${SECRET_VALUE_PATTERN})`, 'giu'),
|
|
7
|
+
replace: (_match, prefix) => `${prefix}${REDACTED_SECRET_MARKER}`,
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
kind: 'secret_token',
|
|
11
|
+
pattern: /\b(?:sk-[A-Za-z0-9]{16,}|ghp_[A-Za-z0-9]{20,}|xox[baprs]-[A-Za-z0-9-]{20,}|AKIA[0-9A-Z]{16})\b/gu,
|
|
12
|
+
replace: () => REDACTED_SECRET_MARKER,
|
|
13
|
+
},
|
|
14
|
+
];
|
|
15
|
+
export const SECRET_LIKE_PATTERNS = SECRET_REDACTION_RULES.map((rule) => {
|
|
16
|
+
const flags = rule.pattern.flags.replace('g', '');
|
|
17
|
+
return new RegExp(rule.pattern.source, flags);
|
|
18
|
+
});
|
|
19
|
+
export function textContainsSecretLike(value) {
|
|
20
|
+
return SECRET_LIKE_PATTERNS.some((pattern) => pattern.test(value));
|
|
21
|
+
}
|
|
22
|
+
export function redactSecretLikeText(value) {
|
|
23
|
+
let text = value;
|
|
24
|
+
let redactionCount = 0;
|
|
25
|
+
const redactionKinds = new Set();
|
|
26
|
+
for (const rule of SECRET_REDACTION_RULES) {
|
|
27
|
+
text = text.replace(rule.pattern, (...match) => {
|
|
28
|
+
redactionCount += 1;
|
|
29
|
+
redactionKinds.add(rule.kind);
|
|
30
|
+
return rule.replace(...match.map(String));
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
text,
|
|
35
|
+
redacted: redactionCount > 0,
|
|
36
|
+
redactionCount,
|
|
37
|
+
redactionKinds: [...redactionKinds].sort(),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { existsSync, readdirSync, readFileSync, statSync } from 'node:fs';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
+
import { SECRET_LIKE_PATTERNS, textContainsSecretLike } from './secret-redaction.js';
|
|
3
4
|
export const SOURCE_ANCHOR_EXTENSIONS = new Set(['.cjs', '.go', '.js', '.jsx', '.mjs', '.py', '.rs', '.ts', '.tsx']);
|
|
4
5
|
export const SOURCE_ANCHOR_DEFAULT_EXCLUDED_PATH_PARTS = new Set([
|
|
5
6
|
'.git',
|
|
@@ -44,10 +45,7 @@ export const SOURCE_ANCHOR_ALLOWED_RISKS = new Set([
|
|
|
44
45
|
'xss',
|
|
45
46
|
]);
|
|
46
47
|
export const SOURCE_ANCHOR_ID_PATTERN = /^[a-z0-9][a-z0-9.-]{0,95}$/u;
|
|
47
|
-
export const SOURCE_ANCHOR_SECRET_LIKE_PATTERNS =
|
|
48
|
-
/\b(?:api[_-]?key|api[_-]?token|access[_-]?token|auth[_-]?token|secret|password|passwd|private[_-]?key)\b\s*[:=]\s*["']?[A-Za-z0-9_./+=:-]{8,}/iu,
|
|
49
|
-
/\b(?:sk-[A-Za-z0-9]{16,}|ghp_[A-Za-z0-9]{20,}|xox[baprs]-[A-Za-z0-9-]{20,}|AKIA[0-9A-Z]{16})\b/u,
|
|
50
|
-
];
|
|
48
|
+
export const SOURCE_ANCHOR_SECRET_LIKE_PATTERNS = SECRET_LIKE_PATTERNS;
|
|
51
49
|
function toPosixPath(value) {
|
|
52
50
|
return value.split(path.sep).join('/');
|
|
53
51
|
}
|
|
@@ -189,7 +187,7 @@ export function sourceAnchorPathIsGeneratedOrVendor(relativePath) {
|
|
|
189
187
|
return parts.some((part) => SOURCE_ANCHOR_GENERATED_PATH_PARTS.has(part));
|
|
190
188
|
}
|
|
191
189
|
export function sourceAnchorTextContainsSecretLike(value) {
|
|
192
|
-
return
|
|
190
|
+
return textContainsSecretLike(value);
|
|
193
191
|
}
|
|
194
192
|
export function parseSourceAnchorsInContent(relativePath, content) {
|
|
195
193
|
const lines = content.split(/\r?\n/);
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { isRecord, readString, readStringArray, } from './config-loading.js';
|
|
2
|
+
export const VERIFICATION_DECISION_GRAPH_SCHEMA_VERSION = '1';
|
|
3
|
+
function stableIdPart(value) {
|
|
4
|
+
return value.trim().replace(/[^A-Za-z0-9_.-]+/gu, '_') || 'none';
|
|
5
|
+
}
|
|
6
|
+
function readBoolean(table, key) {
|
|
7
|
+
const value = table[key];
|
|
8
|
+
return typeof value === 'boolean' ? value : null;
|
|
9
|
+
}
|
|
10
|
+
function readTimeoutSeconds(table) {
|
|
11
|
+
const value = table.timeout_seconds;
|
|
12
|
+
return Number.isInteger(value) ? Number(value) : null;
|
|
13
|
+
}
|
|
14
|
+
function readCommandEffects(rawIntent) {
|
|
15
|
+
const effects = rawIntent.effects;
|
|
16
|
+
if (!Array.isArray(effects)) {
|
|
17
|
+
return [];
|
|
18
|
+
}
|
|
19
|
+
return effects.filter(isRecord).map((effect) => ({
|
|
20
|
+
type: readString(effect, 'type') ?? null,
|
|
21
|
+
mode: readString(effect, 'mode') ?? null,
|
|
22
|
+
path: readString(effect, 'path') ?? null,
|
|
23
|
+
paths: readStringArray(effect, 'paths') ?? [],
|
|
24
|
+
lock: readString(effect, 'lock') ?? null,
|
|
25
|
+
concurrency: readString(effect, 'concurrency') ?? null,
|
|
26
|
+
}));
|
|
27
|
+
}
|
|
28
|
+
function readCommandMetadata(commandContract, intent) {
|
|
29
|
+
if (!intent) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
const rawIntent = commandContract.intents[intent];
|
|
33
|
+
if (!isRecord(rawIntent)) {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
status: readString(rawIntent, 'status') ?? null,
|
|
38
|
+
lifecycle: readString(rawIntent, 'lifecycle') ?? null,
|
|
39
|
+
run_policy: readString(rawIntent, 'run_policy') ?? null,
|
|
40
|
+
stdin: readString(rawIntent, 'stdin') ?? null,
|
|
41
|
+
timeout_seconds: readTimeoutSeconds(rawIntent),
|
|
42
|
+
writes: readStringArray(rawIntent, 'writes') ?? [],
|
|
43
|
+
effects: readCommandEffects(rawIntent),
|
|
44
|
+
required_after: readStringArray(rawIntent, 'required_after') ?? [],
|
|
45
|
+
network: readBoolean(rawIntent, 'network'),
|
|
46
|
+
destructive: readBoolean(rawIntent, 'destructive'),
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function candidateDecisionStatus(commandContract, candidate) {
|
|
50
|
+
if (candidate.status === 'runnable') {
|
|
51
|
+
return 'runnable';
|
|
52
|
+
}
|
|
53
|
+
if (!candidate.intent || candidate.skipReason === 'no_matching_intents') {
|
|
54
|
+
return 'unknown';
|
|
55
|
+
}
|
|
56
|
+
const rawIntent = commandContract.intents[candidate.intent];
|
|
57
|
+
if (!isRecord(rawIntent)) {
|
|
58
|
+
return 'blocked';
|
|
59
|
+
}
|
|
60
|
+
const status = readString(rawIntent, 'status') ?? 'unknown';
|
|
61
|
+
if (status === 'manual_only') {
|
|
62
|
+
return 'manual_only';
|
|
63
|
+
}
|
|
64
|
+
if (status === 'unknown') {
|
|
65
|
+
return 'unknown';
|
|
66
|
+
}
|
|
67
|
+
return candidate.skipReason ? 'blocked' : 'skipped';
|
|
68
|
+
}
|
|
69
|
+
function addNode(nodes, node) {
|
|
70
|
+
if (!nodes.has(node.id)) {
|
|
71
|
+
nodes.set(node.id, node);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
function addEdge(edges, edge) {
|
|
75
|
+
if (!edges.some((item) => item.from === edge.from && item.to === edge.to && item.kind === edge.kind)) {
|
|
76
|
+
edges.push(edge);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
function summarize(nodes, edgeCount) {
|
|
80
|
+
return {
|
|
81
|
+
nodeCount: nodes.length,
|
|
82
|
+
edgeCount,
|
|
83
|
+
runnable: nodes.filter((node) => node.status === 'runnable').length,
|
|
84
|
+
skipped: nodes.filter((node) => node.status === 'skipped').length,
|
|
85
|
+
blocked: nodes.filter((node) => node.status === 'blocked').length,
|
|
86
|
+
manual_only: nodes.filter((node) => node.status === 'manual_only').length,
|
|
87
|
+
unknown: nodes.filter((node) => node.status === 'unknown').length,
|
|
88
|
+
gapCount: nodes.filter((node) => node.kind === 'gap').length,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
export function createVerificationDecisionGraph(commandContract, requirements, candidates, gaps, schedule) {
|
|
92
|
+
const nodes = new Map();
|
|
93
|
+
const edges = [];
|
|
94
|
+
const candidateNodeByReasonAndIntent = new Map();
|
|
95
|
+
for (const requirement of requirements) {
|
|
96
|
+
const reasonNodeId = `classification_reason:${stableIdPart(requirement.reason)}`;
|
|
97
|
+
addNode(nodes, {
|
|
98
|
+
id: reasonNodeId,
|
|
99
|
+
kind: 'classification_reason',
|
|
100
|
+
label: requirement.reason,
|
|
101
|
+
status: 'not_applicable',
|
|
102
|
+
reason: requirement.reason,
|
|
103
|
+
intent: null,
|
|
104
|
+
data: {
|
|
105
|
+
files: requirement.files,
|
|
106
|
+
surfaces: requirement.surfaces,
|
|
107
|
+
affectedContracts: requirement.affectedContracts,
|
|
108
|
+
driftChecks: requirement.driftChecks,
|
|
109
|
+
updatePolicies: requirement.updatePolicies,
|
|
110
|
+
source: requirement.source,
|
|
111
|
+
},
|
|
112
|
+
});
|
|
113
|
+
for (const surface of requirement.surfaces) {
|
|
114
|
+
const surfaceNodeId = `changed_surface:${stableIdPart(requirement.reason)}:${stableIdPart(surface)}`;
|
|
115
|
+
addNode(nodes, {
|
|
116
|
+
id: surfaceNodeId,
|
|
117
|
+
kind: 'changed_surface',
|
|
118
|
+
label: surface,
|
|
119
|
+
status: 'not_applicable',
|
|
120
|
+
reason: requirement.reason,
|
|
121
|
+
intent: null,
|
|
122
|
+
data: {
|
|
123
|
+
files: requirement.files,
|
|
124
|
+
},
|
|
125
|
+
});
|
|
126
|
+
addEdge(edges, { from: surfaceNodeId, to: reasonNodeId, kind: 'supports' });
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
for (const [index, candidate] of candidates.entries()) {
|
|
130
|
+
const reasonNodeId = `classification_reason:${stableIdPart(candidate.reason)}`;
|
|
131
|
+
const intentPart = stableIdPart(candidate.intent ?? 'missing_intent');
|
|
132
|
+
const candidateNodeId = `command_candidate:${stableIdPart(candidate.reason)}:${intentPart}:${index + 1}`;
|
|
133
|
+
const eligibilityNodeId = `eligibility:${stableIdPart(candidate.reason)}:${intentPart}:${index + 1}`;
|
|
134
|
+
const status = candidateDecisionStatus(commandContract, candidate);
|
|
135
|
+
const command = readCommandMetadata(commandContract, candidate.intent);
|
|
136
|
+
const key = `${candidate.reason}\0${candidate.intent ?? ''}`;
|
|
137
|
+
candidateNodeByReasonAndIntent.set(key, [...(candidateNodeByReasonAndIntent.get(key) ?? []), candidateNodeId]);
|
|
138
|
+
addNode(nodes, {
|
|
139
|
+
id: candidateNodeId,
|
|
140
|
+
kind: 'command_candidate',
|
|
141
|
+
label: candidate.intent ?? 'missing intent',
|
|
142
|
+
status,
|
|
143
|
+
reason: candidate.reason,
|
|
144
|
+
intent: candidate.intent,
|
|
145
|
+
data: {
|
|
146
|
+
candidateStatus: candidate.status,
|
|
147
|
+
skipReason: candidate.skipReason,
|
|
148
|
+
detail: candidate.detail,
|
|
149
|
+
command,
|
|
150
|
+
},
|
|
151
|
+
});
|
|
152
|
+
addNode(nodes, {
|
|
153
|
+
id: eligibilityNodeId,
|
|
154
|
+
kind: 'eligibility',
|
|
155
|
+
label: candidate.skipReason ?? 'ok',
|
|
156
|
+
status,
|
|
157
|
+
reason: candidate.reason,
|
|
158
|
+
intent: candidate.intent,
|
|
159
|
+
data: {
|
|
160
|
+
code: candidate.skipReason ?? 'ok',
|
|
161
|
+
detail: candidate.detail,
|
|
162
|
+
},
|
|
163
|
+
});
|
|
164
|
+
addEdge(edges, { from: reasonNodeId, to: candidateNodeId, kind: 'requires' });
|
|
165
|
+
addEdge(edges, { from: candidateNodeId, to: eligibilityNodeId, kind: 'evaluates' });
|
|
166
|
+
}
|
|
167
|
+
for (const entry of schedule.entries) {
|
|
168
|
+
for (const [index, effect] of entry.effects.entries()) {
|
|
169
|
+
const effectNodeId = `effect:${stableIdPart(entry.intent)}:${index + 1}`;
|
|
170
|
+
addNode(nodes, {
|
|
171
|
+
id: effectNodeId,
|
|
172
|
+
kind: 'effect',
|
|
173
|
+
label: effect.lock,
|
|
174
|
+
status: 'runnable',
|
|
175
|
+
reason: null,
|
|
176
|
+
intent: entry.intent,
|
|
177
|
+
data: {
|
|
178
|
+
source: effect.source,
|
|
179
|
+
access: effect.access,
|
|
180
|
+
mode: effect.mode,
|
|
181
|
+
path: effect.path,
|
|
182
|
+
lock: effect.lock,
|
|
183
|
+
concurrency: effect.concurrency,
|
|
184
|
+
},
|
|
185
|
+
});
|
|
186
|
+
for (const [key, candidateNodeIds] of candidateNodeByReasonAndIntent.entries()) {
|
|
187
|
+
if (!key.endsWith(`\0${entry.intent}`)) {
|
|
188
|
+
continue;
|
|
189
|
+
}
|
|
190
|
+
for (const candidateNodeId of candidateNodeIds) {
|
|
191
|
+
addEdge(edges, { from: candidateNodeId, to: effectNodeId, kind: 'has_effect' });
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
for (const gap of gaps) {
|
|
197
|
+
const reasonNodeId = `classification_reason:${stableIdPart(gap.reason)}`;
|
|
198
|
+
const gapNodeId = `gap:${stableIdPart(gap.reason)}`;
|
|
199
|
+
addNode(nodes, {
|
|
200
|
+
id: gapNodeId,
|
|
201
|
+
kind: 'gap',
|
|
202
|
+
label: gap.reason,
|
|
203
|
+
status: 'unknown',
|
|
204
|
+
reason: gap.reason,
|
|
205
|
+
intent: null,
|
|
206
|
+
data: {
|
|
207
|
+
files: gap.files,
|
|
208
|
+
surfaces: gap.surfaces,
|
|
209
|
+
detail: gap.detail,
|
|
210
|
+
},
|
|
211
|
+
});
|
|
212
|
+
addEdge(edges, { from: reasonNodeId, to: gapNodeId, kind: 'has_gap' });
|
|
213
|
+
}
|
|
214
|
+
const sortedNodes = [...nodes.values()].sort((left, right) => left.id.localeCompare(right.id));
|
|
215
|
+
const sortedEdges = [...edges].sort((left, right) => left.from.localeCompare(right.from) || left.to.localeCompare(right.to) || left.kind.localeCompare(right.kind));
|
|
216
|
+
return {
|
|
217
|
+
schema_version: VERIFICATION_DECISION_GRAPH_SCHEMA_VERSION,
|
|
218
|
+
root: 'verification_decision',
|
|
219
|
+
summary: summarize(sortedNodes, sortedEdges.length),
|
|
220
|
+
nodes: sortedNodes,
|
|
221
|
+
edges: sortedEdges,
|
|
222
|
+
};
|
|
223
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mustflow",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.30.0",
|
|
4
4
|
"description": "Agent workflow documents and CLI for mustflow repository roots.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT-0",
|
|
@@ -30,6 +30,8 @@
|
|
|
30
30
|
"test": "bun run test:full",
|
|
31
31
|
"test:fast": "bun run build && node scripts/run-cli-tests.mjs fast",
|
|
32
32
|
"test:related": "bun run build && node scripts/run-cli-tests.mjs related",
|
|
33
|
+
"test:related:cached": "node scripts/run-cli-tests.mjs related-cached",
|
|
34
|
+
"test:related:profile": "bun run build && node scripts/run-cli-tests.mjs related-profile",
|
|
33
35
|
"test:cli": "bun run build && node scripts/run-cli-tests.mjs cli",
|
|
34
36
|
"test:coverage": "bun run build && node scripts/run-cli-tests.mjs coverage",
|
|
35
37
|
"test:audit": "node scripts/audit-tests.mjs --json",
|
package/schemas/README.md
CHANGED
|
@@ -6,8 +6,10 @@ mustflow files and command output.
|
|
|
6
6
|
Current schemas:
|
|
7
7
|
|
|
8
8
|
- `doctor-report.schema.json`: output of `mf doctor --json`
|
|
9
|
+
- `adapter-compatibility-report.schema.json`: output of `mf adapters status --json`
|
|
9
10
|
- `context-report.schema.json`: output of `mf context --json`
|
|
10
|
-
- `run-receipt.schema.json`: output of `mf run <intent> --json` and `.mustflow/state/runs/latest.json
|
|
11
|
+
- `run-receipt.schema.json`: output of `mf run <intent> --json` and `.mustflow/state/runs/latest.json`,
|
|
12
|
+
including bounded declared-write drift metadata
|
|
11
13
|
- `commands.schema.json`: parsed `.mustflow/config/commands.toml`
|
|
12
14
|
- `contract-lint-report.schema.json`: output of `mf contract-lint --json`
|
|
13
15
|
- `classify-report.schema.json`: output of `mf classify --changed --json` and
|
|
@@ -16,17 +18,22 @@ Current schemas:
|
|
|
16
18
|
`mf impact <path...> --json`
|
|
17
19
|
- `line-endings-report.schema.json`: output of `mf line-endings check --json` and
|
|
18
20
|
`mf line-endings normalize --json`
|
|
21
|
+
- `handoff-validation-report.schema.json`: output of
|
|
22
|
+
`mf handoff validate <path> --json`
|
|
19
23
|
- `version-sources-report.schema.json`: output of `mf version-sources --json`
|
|
20
24
|
- `docs-review-list.schema.json`: output of `mf docs review list --json`
|
|
21
25
|
- `explain-report.schema.json`: output of `mf explain authority --json`, `mf explain command --json`,
|
|
22
|
-
`mf explain
|
|
26
|
+
`mf explain verify --reason <event> --json`, `mf explain retention --json`, `mf explain skills --json`,
|
|
27
|
+
and `mf explain surface --json`. Verify explanations include the shared `decisionGraph` evidence model.
|
|
23
28
|
- `verify-report.schema.json`: output of `mf verify --reason <event> --json`
|
|
24
29
|
- `change-verification-report.schema.json`: output of `mf verify --reason <event> --plan-only --json` and
|
|
25
|
-
`mf verify --from-plan <
|
|
30
|
+
`mf verify --from-plan <classify-report.json> --plan-only --json`, including the `decision_graph` that links
|
|
31
|
+
changed surfaces, classification reasons, command candidates, eligibility, effects, and gaps.
|
|
32
|
+
Local-index command-effect graphs are explanation-only and cannot grant command authority.
|
|
26
33
|
|
|
27
34
|
These schemas define stable, automation-facing fields. Human-readable command
|
|
28
35
|
output is intentionally excluded.
|
|
29
36
|
|
|
30
37
|
The published schema surface is tracked in `src/core/public-json-contracts.ts`.
|
|
31
38
|
Release tests verify consistency between this manifest, `schemas/*.schema.json`,
|
|
32
|
-
`npm pack --dry-run --json`, and the installed package’s JSON command output.
|
|
39
|
+
`npm pack --dry-run --json`, and the installed package’s JSON command output.
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://mustflow.github.io/schemas/adapter-compatibility-report.schema.json",
|
|
4
|
+
"title": "mustflow adapter compatibility report",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"required": [
|
|
8
|
+
"schema_version",
|
|
9
|
+
"command",
|
|
10
|
+
"ok",
|
|
11
|
+
"mustflow_root",
|
|
12
|
+
"agents_file",
|
|
13
|
+
"summary",
|
|
14
|
+
"host_files",
|
|
15
|
+
"adapter_surfaces",
|
|
16
|
+
"findings",
|
|
17
|
+
"compatibility_notes",
|
|
18
|
+
"required_changes",
|
|
19
|
+
"runtime_policy",
|
|
20
|
+
"boundaries"
|
|
21
|
+
],
|
|
22
|
+
"properties": {
|
|
23
|
+
"schema_version": { "const": "1" },
|
|
24
|
+
"command": { "const": "adapters_status" },
|
|
25
|
+
"ok": { "type": "boolean" },
|
|
26
|
+
"mustflow_root": { "type": "string" },
|
|
27
|
+
"agents_file": { "$ref": "#/$defs/agentsFile" },
|
|
28
|
+
"summary": { "$ref": "#/$defs/summary" },
|
|
29
|
+
"host_files": {
|
|
30
|
+
"type": "array",
|
|
31
|
+
"items": { "$ref": "#/$defs/hostFile" }
|
|
32
|
+
},
|
|
33
|
+
"adapter_surfaces": {
|
|
34
|
+
"type": "array",
|
|
35
|
+
"items": { "$ref": "#/$defs/adapterSurface" }
|
|
36
|
+
},
|
|
37
|
+
"findings": {
|
|
38
|
+
"type": "array",
|
|
39
|
+
"items": { "$ref": "#/$defs/finding" }
|
|
40
|
+
},
|
|
41
|
+
"compatibility_notes": {
|
|
42
|
+
"type": "array",
|
|
43
|
+
"items": { "$ref": "#/$defs/finding" }
|
|
44
|
+
},
|
|
45
|
+
"required_changes": {
|
|
46
|
+
"type": "array",
|
|
47
|
+
"items": { "$ref": "#/$defs/finding" }
|
|
48
|
+
},
|
|
49
|
+
"runtime_policy": { "$ref": "#/$defs/runtimePolicy" },
|
|
50
|
+
"boundaries": { "$ref": "#/$defs/boundaries" }
|
|
51
|
+
},
|
|
52
|
+
"$defs": {
|
|
53
|
+
"agentsFile": {
|
|
54
|
+
"type": "object",
|
|
55
|
+
"additionalProperties": false,
|
|
56
|
+
"required": ["path", "present", "authority", "lifecycle", "generated_by_mustflow"],
|
|
57
|
+
"properties": {
|
|
58
|
+
"path": { "const": "AGENTS.md" },
|
|
59
|
+
"present": { "type": "boolean" },
|
|
60
|
+
"authority": { "const": "binding" },
|
|
61
|
+
"lifecycle": { "const": "user_editable" },
|
|
62
|
+
"generated_by_mustflow": { "type": "boolean" }
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
"summary": {
|
|
66
|
+
"type": "object",
|
|
67
|
+
"additionalProperties": false,
|
|
68
|
+
"required": [
|
|
69
|
+
"host_instruction_files",
|
|
70
|
+
"adapter_surfaces_present",
|
|
71
|
+
"compatibility_notes",
|
|
72
|
+
"conflicts",
|
|
73
|
+
"required_changes"
|
|
74
|
+
],
|
|
75
|
+
"properties": {
|
|
76
|
+
"host_instruction_files": { "type": "integer", "minimum": 0 },
|
|
77
|
+
"adapter_surfaces_present": { "type": "integer", "minimum": 0 },
|
|
78
|
+
"compatibility_notes": { "type": "integer", "minimum": 0 },
|
|
79
|
+
"conflicts": { "type": "integer", "minimum": 0 },
|
|
80
|
+
"required_changes": { "type": "integer", "minimum": 0 }
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
"hostFile": {
|
|
84
|
+
"type": "object",
|
|
85
|
+
"additionalProperties": false,
|
|
86
|
+
"required": [
|
|
87
|
+
"host",
|
|
88
|
+
"path",
|
|
89
|
+
"status",
|
|
90
|
+
"instruction_role",
|
|
91
|
+
"authority",
|
|
92
|
+
"mustflow_authority",
|
|
93
|
+
"lifecycle",
|
|
94
|
+
"generated_by_mustflow",
|
|
95
|
+
"binding_to_host",
|
|
96
|
+
"mustflow_command_authority"
|
|
97
|
+
],
|
|
98
|
+
"properties": {
|
|
99
|
+
"host": { "enum": ["claude_code", "gemini_cli", "github_copilot", "cursor", "generic"] },
|
|
100
|
+
"path": { "type": "string" },
|
|
101
|
+
"status": { "enum": ["absent", "present", "unreadable", "symlink_not_read", "too_large_not_read"] },
|
|
102
|
+
"instruction_role": { "const": "host_instruction" },
|
|
103
|
+
"authority": { "const": "host_specific" },
|
|
104
|
+
"mustflow_authority": { "const": "advisory" },
|
|
105
|
+
"lifecycle": { "const": "user_editable" },
|
|
106
|
+
"generated_by_mustflow": { "const": false },
|
|
107
|
+
"binding_to_host": { "type": "boolean" },
|
|
108
|
+
"mustflow_command_authority": { "const": false }
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
"adapterSurface": {
|
|
112
|
+
"type": "object",
|
|
113
|
+
"additionalProperties": false,
|
|
114
|
+
"required": [
|
|
115
|
+
"host",
|
|
116
|
+
"path",
|
|
117
|
+
"kind",
|
|
118
|
+
"present",
|
|
119
|
+
"generated_by_mustflow",
|
|
120
|
+
"generation_policy",
|
|
121
|
+
"mustflow_command_authority"
|
|
122
|
+
],
|
|
123
|
+
"properties": {
|
|
124
|
+
"host": { "enum": ["claude_code", "gemini_cli", "github_copilot", "cursor", "generic"] },
|
|
125
|
+
"path": { "type": "string" },
|
|
126
|
+
"kind": {
|
|
127
|
+
"enum": [
|
|
128
|
+
"host_instruction_file",
|
|
129
|
+
"editor_settings",
|
|
130
|
+
"ci_configuration",
|
|
131
|
+
"command_adapter",
|
|
132
|
+
"package_manager_scripts"
|
|
133
|
+
]
|
|
134
|
+
},
|
|
135
|
+
"present": { "type": "boolean" },
|
|
136
|
+
"generated_by_mustflow": { "const": false },
|
|
137
|
+
"generation_policy": { "const": "explicit_user_request_only" },
|
|
138
|
+
"mustflow_command_authority": { "const": false }
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
"finding": {
|
|
142
|
+
"type": "object",
|
|
143
|
+
"additionalProperties": false,
|
|
144
|
+
"required": ["severity", "code", "path", "message", "required_change"],
|
|
145
|
+
"properties": {
|
|
146
|
+
"severity": { "enum": ["info", "warning"] },
|
|
147
|
+
"code": { "type": "string" },
|
|
148
|
+
"path": { "type": ["string", "null"] },
|
|
149
|
+
"message": { "type": "string" },
|
|
150
|
+
"required_change": { "type": "boolean" }
|
|
151
|
+
}
|
|
152
|
+
},
|
|
153
|
+
"runtimePolicy": {
|
|
154
|
+
"type": "object",
|
|
155
|
+
"additionalProperties": false,
|
|
156
|
+
"required": ["approval_policy", "sandbox_policy", "stricter_than_mustflow", "note"],
|
|
157
|
+
"properties": {
|
|
158
|
+
"approval_policy": { "const": "not_repo_visible" },
|
|
159
|
+
"sandbox_policy": { "const": "not_repo_visible" },
|
|
160
|
+
"stricter_than_mustflow": { "const": "unknown" },
|
|
161
|
+
"note": { "type": "string" }
|
|
162
|
+
}
|
|
163
|
+
},
|
|
164
|
+
"boundaries": {
|
|
165
|
+
"type": "object",
|
|
166
|
+
"additionalProperties": false,
|
|
167
|
+
"required": [
|
|
168
|
+
"command_authority",
|
|
169
|
+
"host_files_are_command_authority",
|
|
170
|
+
"adapter_generation",
|
|
171
|
+
"does_not_generate"
|
|
172
|
+
],
|
|
173
|
+
"properties": {
|
|
174
|
+
"command_authority": { "const": ".mustflow/config/commands.toml" },
|
|
175
|
+
"host_files_are_command_authority": { "const": false },
|
|
176
|
+
"adapter_generation": { "const": "explicit_user_request_only" },
|
|
177
|
+
"does_not_generate": {
|
|
178
|
+
"type": "array",
|
|
179
|
+
"items": { "type": "string" }
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|