@memoarchitect/tools 0.13.2 → 0.15.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 +40 -26
- package/corpus/README.md +20 -36
- package/package.json +9 -10
- package/packages/tools/lib/analysis/impact.d.ts +30 -0
- package/packages/tools/lib/analysis/impact.d.ts.map +1 -1
- package/packages/tools/lib/analysis/impact.js +47 -74
- package/packages/tools/lib/analysis/impact.js.map +1 -1
- package/packages/tools/lib/analysis/interfaces-between.d.ts +36 -0
- package/packages/tools/lib/analysis/interfaces-between.d.ts.map +1 -0
- package/packages/tools/lib/analysis/interfaces-between.js +66 -0
- package/packages/tools/lib/analysis/interfaces-between.js.map +1 -0
- package/packages/tools/lib/analysis/suspect-links.d.ts +45 -0
- package/packages/tools/lib/analysis/suspect-links.d.ts.map +1 -0
- package/packages/tools/lib/analysis/suspect-links.js +66 -0
- package/packages/tools/lib/analysis/suspect-links.js.map +1 -0
- package/packages/tools/lib/analysis-starters.d.ts +2 -0
- package/packages/tools/lib/analysis-starters.d.ts.map +1 -1
- package/packages/tools/lib/analysis-starters.js +73 -68
- package/packages/tools/lib/analysis-starters.js.map +1 -1
- package/packages/tools/lib/authoring/outline-identity.d.ts +34 -0
- package/packages/tools/lib/authoring/outline-identity.d.ts.map +1 -0
- package/packages/tools/lib/authoring/outline-identity.js +95 -0
- package/packages/tools/lib/authoring/outline-identity.js.map +1 -0
- package/packages/tools/lib/authoring/outline-source.d.ts +57 -0
- package/packages/tools/lib/authoring/outline-source.d.ts.map +1 -0
- package/packages/tools/lib/authoring/outline-source.js +203 -0
- package/packages/tools/lib/authoring/outline-source.js.map +1 -0
- package/packages/tools/lib/authoring/source-outline.d.ts +82 -0
- package/packages/tools/lib/authoring/source-outline.d.ts.map +1 -0
- package/packages/tools/lib/authoring/source-outline.js +267 -0
- package/packages/tools/lib/authoring/source-outline.js.map +1 -0
- package/packages/tools/lib/bin/memo.js +181 -632
- package/packages/tools/lib/bin/memo.js.map +1 -1
- package/packages/tools/lib/browser/index.d.ts +12 -0
- package/packages/tools/lib/browser/index.d.ts.map +1 -1
- package/packages/tools/lib/browser/index.js +8 -0
- package/packages/tools/lib/browser/index.js.map +1 -1
- package/packages/tools/lib/cli/project-commands.d.ts +3 -0
- package/packages/tools/lib/cli/project-commands.d.ts.map +1 -0
- package/packages/tools/lib/cli/project-commands.js +577 -0
- package/packages/tools/lib/cli/project-commands.js.map +1 -0
- package/packages/tools/lib/commands/ask.d.ts.map +1 -1
- package/packages/tools/lib/commands/ask.js +10 -18
- package/packages/tools/lib/commands/ask.js.map +1 -1
- package/packages/tools/lib/commands/compile.d.ts +18 -0
- package/packages/tools/lib/commands/compile.d.ts.map +1 -0
- package/packages/tools/lib/commands/compile.js +122 -0
- package/packages/tools/lib/commands/compile.js.map +1 -0
- package/packages/tools/lib/commands/convert.js +2 -2
- package/packages/tools/lib/commands/convert.js.map +1 -1
- package/packages/tools/lib/commands/create-package.js +4 -4
- package/packages/tools/lib/commands/create-package.js.map +1 -1
- package/packages/tools/lib/commands/dev.d.ts +20 -2
- package/packages/tools/lib/commands/dev.d.ts.map +1 -1
- package/packages/tools/lib/commands/dev.js +386 -97
- package/packages/tools/lib/commands/dev.js.map +1 -1
- package/packages/tools/lib/commands/dhf-draft.d.ts.map +1 -1
- package/packages/tools/lib/commands/dhf-draft.js +7 -16
- package/packages/tools/lib/commands/dhf-draft.js.map +1 -1
- package/packages/tools/lib/commands/dhf-init.js +3 -3
- package/packages/tools/lib/commands/dhf-init.js.map +1 -1
- package/packages/tools/lib/commands/dhf-lint.d.ts.map +1 -1
- package/packages/tools/lib/commands/dhf-lint.js +4 -3
- package/packages/tools/lib/commands/dhf-lint.js.map +1 -1
- package/packages/tools/lib/commands/dhf-preview.d.ts.map +1 -1
- package/packages/tools/lib/commands/dhf-preview.js +5 -26
- package/packages/tools/lib/commands/dhf-preview.js.map +1 -1
- package/packages/tools/lib/commands/dhf.d.ts +4 -0
- package/packages/tools/lib/commands/dhf.d.ts.map +1 -1
- package/packages/tools/lib/commands/dhf.js +77 -31
- package/packages/tools/lib/commands/dhf.js.map +1 -1
- package/packages/tools/lib/commands/element.d.ts.map +1 -1
- package/packages/tools/lib/commands/element.js +44 -6
- package/packages/tools/lib/commands/element.js.map +1 -1
- package/packages/tools/lib/commands/export.d.ts +1 -1
- package/packages/tools/lib/commands/export.d.ts.map +1 -1
- package/packages/tools/lib/commands/export.js +25 -18
- package/packages/tools/lib/commands/export.js.map +1 -1
- package/packages/tools/lib/commands/generate.d.ts.map +1 -1
- package/packages/tools/lib/commands/generate.js +10 -30
- package/packages/tools/lib/commands/generate.js.map +1 -1
- package/packages/tools/lib/commands/ids-rebase.d.ts +15 -0
- package/packages/tools/lib/commands/ids-rebase.d.ts.map +1 -0
- package/packages/tools/lib/commands/ids-rebase.js +133 -0
- package/packages/tools/lib/commands/ids-rebase.js.map +1 -0
- package/packages/tools/lib/commands/import-ea.d.ts +3 -3
- package/packages/tools/lib/commands/import-ea.d.ts.map +1 -1
- package/packages/tools/lib/commands/import-ea.js +12 -9
- package/packages/tools/lib/commands/import-ea.js.map +1 -1
- package/packages/tools/lib/commands/import-owl.d.ts +1 -1
- package/packages/tools/lib/commands/import-owl.js +2 -2
- package/packages/tools/lib/commands/import-owl.js.map +1 -1
- package/packages/tools/lib/commands/import-sysand.d.ts +1 -1
- package/packages/tools/lib/commands/import-sysand.d.ts.map +1 -1
- package/packages/tools/lib/commands/import-sysand.js +15 -6
- package/packages/tools/lib/commands/import-sysand.js.map +1 -1
- package/packages/tools/lib/commands/import.d.ts +13 -0
- package/packages/tools/lib/commands/import.d.ts.map +1 -1
- package/packages/tools/lib/commands/import.js +89 -29
- package/packages/tools/lib/commands/import.js.map +1 -1
- package/packages/tools/lib/commands/init.d.ts +0 -8
- package/packages/tools/lib/commands/init.d.ts.map +1 -1
- package/packages/tools/lib/commands/init.js +56 -51
- package/packages/tools/lib/commands/init.js.map +1 -1
- package/packages/tools/lib/commands/inspect.d.ts.map +1 -1
- package/packages/tools/lib/commands/inspect.js +22 -15
- package/packages/tools/lib/commands/inspect.js.map +1 -1
- package/packages/tools/lib/commands/install.d.ts.map +1 -1
- package/packages/tools/lib/commands/install.js +9 -6
- package/packages/tools/lib/commands/install.js.map +1 -1
- package/packages/tools/lib/commands/interfaces.d.ts +8 -0
- package/packages/tools/lib/commands/interfaces.d.ts.map +1 -0
- package/packages/tools/lib/commands/interfaces.js +71 -0
- package/packages/tools/lib/commands/interfaces.js.map +1 -0
- package/packages/tools/lib/commands/lock.d.ts.map +1 -1
- package/packages/tools/lib/commands/lock.js +13 -6
- package/packages/tools/lib/commands/lock.js.map +1 -1
- package/packages/tools/lib/commands/mcp.js +7 -7
- package/packages/tools/lib/commands/mcp.js.map +1 -1
- package/packages/tools/lib/commands/migrate-layout.d.ts +5 -0
- package/packages/tools/lib/commands/migrate-layout.d.ts.map +1 -0
- package/packages/tools/lib/commands/migrate-layout.js +90 -0
- package/packages/tools/lib/commands/migrate-layout.js.map +1 -0
- package/packages/tools/lib/commands/ontology.d.ts.map +1 -1
- package/packages/tools/lib/commands/ontology.js +26 -22
- package/packages/tools/lib/commands/ontology.js.map +1 -1
- package/packages/tools/lib/commands/pack.d.ts.map +1 -1
- package/packages/tools/lib/commands/pack.js +14 -9
- package/packages/tools/lib/commands/pack.js.map +1 -1
- package/packages/tools/lib/commands/pinned-target.d.ts +12 -0
- package/packages/tools/lib/commands/pinned-target.d.ts.map +1 -0
- package/packages/tools/lib/commands/pinned-target.js +74 -0
- package/packages/tools/lib/commands/pinned-target.js.map +1 -0
- package/packages/tools/lib/commands/plugin.d.ts.map +1 -1
- package/packages/tools/lib/commands/plugin.js +13 -22
- package/packages/tools/lib/commands/plugin.js.map +1 -1
- package/packages/tools/lib/commands/prune.d.ts +5 -0
- package/packages/tools/lib/commands/prune.d.ts.map +1 -0
- package/packages/tools/lib/commands/prune.js +27 -0
- package/packages/tools/lib/commands/prune.js.map +1 -0
- package/packages/tools/lib/commands/retired.d.ts +10 -0
- package/packages/tools/lib/commands/retired.d.ts.map +1 -0
- package/packages/tools/lib/commands/retired.js +35 -0
- package/packages/tools/lib/commands/retired.js.map +1 -0
- package/packages/tools/lib/commands/rules.d.ts +49 -5
- package/packages/tools/lib/commands/rules.d.ts.map +1 -1
- package/packages/tools/lib/commands/rules.js +340 -172
- package/packages/tools/lib/commands/rules.js.map +1 -1
- package/packages/tools/lib/commands/ship-library.d.ts +4 -0
- package/packages/tools/lib/commands/ship-library.d.ts.map +1 -0
- package/packages/tools/lib/commands/ship-library.js +45 -0
- package/packages/tools/lib/commands/ship-library.js.map +1 -0
- package/packages/tools/lib/commands/standards.d.ts +2 -2
- package/packages/tools/lib/commands/standards.d.ts.map +1 -1
- package/packages/tools/lib/commands/standards.js +78 -33
- package/packages/tools/lib/commands/standards.js.map +1 -1
- package/packages/tools/lib/commands/sysand-publish.d.ts +16 -1
- package/packages/tools/lib/commands/sysand-publish.d.ts.map +1 -1
- package/packages/tools/lib/commands/sysand-publish.js +75 -193
- package/packages/tools/lib/commands/sysand-publish.js.map +1 -1
- package/packages/tools/lib/commands/toolchain.d.ts +5 -0
- package/packages/tools/lib/commands/toolchain.d.ts.map +1 -1
- package/packages/tools/lib/commands/toolchain.js +50 -1
- package/packages/tools/lib/commands/toolchain.js.map +1 -1
- package/packages/tools/lib/commands/validate-client.d.ts +11 -0
- package/packages/tools/lib/commands/validate-client.d.ts.map +1 -0
- package/packages/tools/lib/commands/validate-client.js +54 -0
- package/packages/tools/lib/commands/validate-client.js.map +1 -0
- package/packages/tools/lib/commands/validate.d.ts +33 -2
- package/packages/tools/lib/commands/validate.d.ts.map +1 -1
- package/packages/tools/lib/commands/validate.js +432 -186
- package/packages/tools/lib/commands/validate.js.map +1 -1
- package/packages/tools/lib/dhf/device-dhf.d.ts +57 -0
- package/packages/tools/lib/dhf/device-dhf.d.ts.map +1 -0
- package/packages/tools/lib/dhf/device-dhf.js +152 -0
- package/packages/tools/lib/dhf/device-dhf.js.map +1 -0
- package/packages/tools/lib/dhf/dhf-config-v2.d.ts +1 -1
- package/packages/tools/lib/dhf/dhf-config-v2.d.ts.map +1 -1
- package/packages/tools/lib/dhf/query-engine.d.ts +9 -2
- package/packages/tools/lib/dhf/query-engine.d.ts.map +1 -1
- package/packages/tools/lib/dhf/query-engine.js +29 -25
- package/packages/tools/lib/dhf/query-engine.js.map +1 -1
- package/packages/tools/lib/dhf/query-executor.d.ts +1 -1
- package/packages/tools/lib/dhf/query-executor.js +1 -1
- package/packages/tools/lib/dhf/query-executor.js.map +1 -1
- package/packages/tools/lib/dhf/standards-block.js +1 -1
- package/packages/tools/lib/dhf/standards-block.js.map +1 -1
- package/packages/tools/lib/dhf/standards-library.d.ts.map +1 -1
- package/packages/tools/lib/dhf/standards-library.js +16 -9
- package/packages/tools/lib/dhf/standards-library.js.map +1 -1
- package/packages/tools/lib/dhf/standards-report.d.ts +11 -3
- package/packages/tools/lib/dhf/standards-report.d.ts.map +1 -1
- package/packages/tools/lib/dhf/standards-report.js +43 -13
- package/packages/tools/lib/dhf/standards-report.js.map +1 -1
- package/packages/tools/lib/dhf/template-engine.d.ts +2 -0
- package/packages/tools/lib/dhf/template-engine.d.ts.map +1 -1
- package/packages/tools/lib/dhf/template-engine.js +5 -5
- package/packages/tools/lib/dhf/template-engine.js.map +1 -1
- package/packages/tools/lib/import/import-diff.d.ts +31 -1
- package/packages/tools/lib/import/import-diff.d.ts.map +1 -1
- package/packages/tools/lib/import/import-diff.js +91 -19
- package/packages/tools/lib/import/import-diff.js.map +1 -1
- package/packages/tools/lib/import/import-sources.d.ts +21 -0
- package/packages/tools/lib/import/import-sources.d.ts.map +1 -0
- package/packages/tools/lib/import/import-sources.js +36 -0
- package/packages/tools/lib/import/import-sources.js.map +1 -0
- package/packages/tools/lib/import/reqif.d.ts +23 -0
- package/packages/tools/lib/import/reqif.d.ts.map +1 -0
- package/packages/tools/lib/import/reqif.js +151 -0
- package/packages/tools/lib/import/reqif.js.map +1 -0
- package/packages/tools/lib/import/source-import.d.ts +128 -0
- package/packages/tools/lib/import/source-import.d.ts.map +1 -0
- package/packages/tools/lib/import/source-import.js +305 -0
- package/packages/tools/lib/import/source-import.js.map +1 -0
- package/packages/tools/lib/importer/cameo-importer.d.ts.map +1 -1
- package/packages/tools/lib/importer/cameo-importer.js +4 -1
- package/packages/tools/lib/importer/cameo-importer.js.map +1 -1
- package/packages/tools/lib/importer/ea-importer.d.ts.map +1 -1
- package/packages/tools/lib/importer/ea-importer.js +4 -1
- package/packages/tools/lib/importer/ea-importer.js.map +1 -1
- package/packages/tools/lib/importer/sysand-importer.d.ts +2 -1
- package/packages/tools/lib/importer/sysand-importer.d.ts.map +1 -1
- package/packages/tools/lib/importer/sysand-importer.js +27 -10
- package/packages/tools/lib/importer/sysand-importer.js.map +1 -1
- package/packages/tools/lib/index.d.ts +20 -6
- package/packages/tools/lib/index.d.ts.map +1 -1
- package/packages/tools/lib/index.js +22 -8
- package/packages/tools/lib/index.js.map +1 -1
- package/packages/tools/lib/llm/draft-engine.js +1 -1
- package/packages/tools/lib/llm/draft-engine.js.map +1 -1
- package/packages/tools/lib/llm/model-context.js +1 -1
- package/packages/tools/lib/llm/model-context.js.map +1 -1
- package/packages/tools/lib/lock.d.ts +37 -2
- package/packages/tools/lib/lock.d.ts.map +1 -1
- package/packages/tools/lib/lock.js +93 -8
- package/packages/tools/lib/lock.js.map +1 -1
- package/packages/tools/lib/mcp/index.js +1 -1
- package/packages/tools/lib/mcp/index.js.map +1 -1
- package/packages/tools/lib/mcp/model-loader.d.ts.map +1 -1
- package/packages/tools/lib/mcp/model-loader.js +6 -18
- package/packages/tools/lib/mcp/model-loader.js.map +1 -1
- package/packages/tools/lib/mcp/server.js +2 -2
- package/packages/tools/lib/mcp/server.js.map +1 -1
- package/packages/tools/lib/mcp/tools.d.ts.map +1 -1
- package/packages/tools/lib/mcp/tools.js +5 -4
- package/packages/tools/lib/mcp/tools.js.map +1 -1
- package/packages/tools/lib/methodology/guide-service.d.ts +28 -0
- package/packages/tools/lib/methodology/guide-service.d.ts.map +1 -0
- package/packages/tools/lib/methodology/guide-service.js +32 -0
- package/packages/tools/lib/methodology/guide-service.js.map +1 -0
- package/packages/tools/lib/methodology/guide.d.ts +56 -0
- package/packages/tools/lib/methodology/guide.d.ts.map +1 -0
- package/packages/tools/lib/methodology/guide.js +80 -0
- package/packages/tools/lib/methodology/guide.js.map +1 -0
- package/packages/tools/lib/model/census-projects.d.ts +26 -0
- package/packages/tools/lib/model/census-projects.d.ts.map +1 -0
- package/packages/tools/lib/model/census-projects.js +53 -0
- package/packages/tools/lib/model/census-projects.js.map +1 -0
- package/packages/tools/lib/model/census.d.ts +103 -0
- package/packages/tools/lib/model/census.d.ts.map +1 -0
- package/packages/tools/lib/model/census.js +229 -0
- package/packages/tools/lib/model/census.js.map +1 -0
- package/packages/tools/lib/model/complete-model.d.ts +52 -0
- package/packages/tools/lib/model/complete-model.d.ts.map +1 -0
- package/packages/tools/lib/model/complete-model.js +287 -0
- package/packages/tools/lib/model/complete-model.js.map +1 -0
- package/packages/tools/lib/model/config-loader.d.ts +8 -3
- package/packages/tools/lib/model/config-loader.d.ts.map +1 -1
- package/packages/tools/lib/model/config-loader.js +37 -6
- package/packages/tools/lib/model/config-loader.js.map +1 -1
- package/packages/tools/lib/model/config.d.ts +21 -7
- package/packages/tools/lib/model/config.d.ts.map +1 -1
- package/packages/tools/lib/model/effective-scope.d.ts +55 -28
- package/packages/tools/lib/model/effective-scope.d.ts.map +1 -1
- package/packages/tools/lib/model/effective-scope.js +96 -35
- package/packages/tools/lib/model/effective-scope.js.map +1 -1
- package/packages/tools/lib/model/element-index.d.ts +207 -0
- package/packages/tools/lib/model/element-index.d.ts.map +1 -0
- package/packages/tools/lib/model/element-index.js +316 -0
- package/packages/tools/lib/model/element-index.js.map +1 -0
- package/packages/tools/lib/model/id-rebase.d.ts +35 -0
- package/packages/tools/lib/model/id-rebase.d.ts.map +1 -0
- package/packages/tools/lib/model/id-rebase.js +199 -0
- package/packages/tools/lib/model/id-rebase.js.map +1 -0
- package/packages/tools/lib/model/identity-registry.d.ts +34 -3
- package/packages/tools/lib/model/identity-registry.d.ts.map +1 -1
- package/packages/tools/lib/model/identity-registry.js +40 -7
- package/packages/tools/lib/model/identity-registry.js.map +1 -1
- package/packages/tools/lib/model/impact.d.ts +75 -0
- package/packages/tools/lib/model/impact.d.ts.map +1 -0
- package/packages/tools/lib/model/impact.js +167 -0
- package/packages/tools/lib/model/impact.js.map +1 -0
- package/packages/tools/lib/model/ir-identity.d.ts +3 -51
- package/packages/tools/lib/model/ir-identity.d.ts.map +1 -1
- package/packages/tools/lib/model/ir-identity.js +14 -121
- package/packages/tools/lib/model/ir-identity.js.map +1 -1
- package/packages/tools/lib/model/kind-registry.d.ts +66 -22
- package/packages/tools/lib/model/kind-registry.d.ts.map +1 -1
- package/packages/tools/lib/model/kind-registry.js +104 -145
- package/packages/tools/lib/model/kind-registry.js.map +1 -1
- package/packages/tools/lib/model/manifest.d.ts +2 -2
- package/packages/tools/lib/model/manifest.d.ts.map +1 -1
- package/packages/tools/lib/model/manifest.js +5 -4
- package/packages/tools/lib/model/manifest.js.map +1 -1
- package/packages/tools/lib/model/methodology-loader.d.ts +11 -2
- package/packages/tools/lib/model/methodology-loader.d.ts.map +1 -1
- package/packages/tools/lib/model/methodology-loader.js +24 -130
- package/packages/tools/lib/model/methodology-loader.js.map +1 -1
- package/packages/tools/lib/model/methodology-resolver.d.ts +71 -6
- package/packages/tools/lib/model/methodology-resolver.d.ts.map +1 -1
- package/packages/tools/lib/model/methodology-resolver.js +210 -24
- package/packages/tools/lib/model/methodology-resolver.js.map +1 -1
- package/packages/tools/lib/model/model-diff.d.ts +73 -0
- package/packages/tools/lib/model/model-diff.d.ts.map +1 -0
- package/packages/tools/lib/model/model-diff.js +91 -0
- package/packages/tools/lib/model/model-diff.js.map +1 -0
- package/packages/tools/lib/model/narrow-model.d.ts +9 -0
- package/packages/tools/lib/model/narrow-model.d.ts.map +1 -0
- package/packages/tools/lib/model/narrow-model.js +54 -0
- package/packages/tools/lib/model/narrow-model.js.map +1 -0
- package/packages/tools/lib/model/native-project.d.ts +92 -11
- package/packages/tools/lib/model/native-project.d.ts.map +1 -1
- package/packages/tools/lib/model/native-project.js +163 -269
- package/packages/tools/lib/model/native-project.js.map +1 -1
- package/packages/tools/lib/model/ontology-loader.d.ts +10 -61
- package/packages/tools/lib/model/ontology-loader.d.ts.map +1 -1
- package/packages/tools/lib/model/ontology-loader.js +11 -512
- package/packages/tools/lib/model/ontology-loader.js.map +1 -1
- package/packages/tools/lib/model/package-manifest.d.ts +8 -2
- package/packages/tools/lib/model/package-manifest.d.ts.map +1 -1
- package/packages/tools/lib/model/package-manifest.js +14 -2
- package/packages/tools/lib/model/package-manifest.js.map +1 -1
- package/packages/tools/lib/model/pinned.d.ts +216 -0
- package/packages/tools/lib/model/pinned.d.ts.map +1 -0
- package/packages/tools/lib/model/pinned.js +481 -0
- package/packages/tools/lib/model/pinned.js.map +1 -0
- package/packages/tools/lib/model/project-conversion.d.ts +3 -2
- package/packages/tools/lib/model/project-conversion.d.ts.map +1 -1
- package/packages/tools/lib/model/project-conversion.js +55 -10
- package/packages/tools/lib/model/project-conversion.js.map +1 -1
- package/packages/tools/lib/model/project-settings.d.ts +10 -0
- package/packages/tools/lib/model/project-settings.d.ts.map +1 -0
- package/packages/tools/lib/model/project-settings.js +48 -0
- package/packages/tools/lib/model/project-settings.js.map +1 -0
- package/packages/tools/lib/model/relation-selection.d.ts +25 -0
- package/packages/tools/lib/model/relation-selection.d.ts.map +1 -0
- package/packages/tools/lib/model/relation-selection.js +65 -0
- package/packages/tools/lib/model/relation-selection.js.map +1 -0
- package/packages/tools/lib/model/relationship-legality.d.ts +6 -0
- package/packages/tools/lib/model/relationship-legality.d.ts.map +1 -1
- package/packages/tools/lib/model/relationship-legality.js.map +1 -1
- package/packages/tools/lib/model/relationship-registry.d.ts +21 -8
- package/packages/tools/lib/model/relationship-registry.d.ts.map +1 -1
- package/packages/tools/lib/model/relationship-registry.js +77 -129
- package/packages/tools/lib/model/relationship-registry.js.map +1 -1
- package/packages/tools/lib/model/relationship-subjects.d.ts +28 -0
- package/packages/tools/lib/model/relationship-subjects.d.ts.map +1 -0
- package/packages/tools/lib/model/relationship-subjects.js +126 -0
- package/packages/tools/lib/model/relationship-subjects.js.map +1 -0
- package/packages/tools/lib/model/release-target.d.ts +12 -0
- package/packages/tools/lib/model/release-target.d.ts.map +1 -0
- package/packages/tools/lib/model/release-target.js +35 -0
- package/packages/tools/lib/model/release-target.js.map +1 -0
- package/packages/tools/lib/model/selector-vocabulary.d.ts +47 -0
- package/packages/tools/lib/model/selector-vocabulary.d.ts.map +1 -0
- package/packages/tools/lib/model/selector-vocabulary.js +181 -0
- package/packages/tools/lib/model/selector-vocabulary.js.map +1 -0
- package/packages/tools/lib/model/semantic.d.ts +99 -7
- package/packages/tools/lib/model/semantic.d.ts.map +1 -1
- package/packages/tools/lib/model/semantic.js +13 -1
- package/packages/tools/lib/model/semantic.js.map +1 -1
- package/packages/tools/lib/model/settings-boundary.d.ts.map +1 -1
- package/packages/tools/lib/model/settings-boundary.js +9 -8
- package/packages/tools/lib/model/settings-boundary.js.map +1 -1
- package/packages/tools/lib/model/short-id.d.ts.map +1 -1
- package/packages/tools/lib/model/short-id.js +4 -0
- package/packages/tools/lib/model/short-id.js.map +1 -1
- package/packages/tools/lib/model/source-graph.d.ts +9 -7
- package/packages/tools/lib/model/source-graph.d.ts.map +1 -1
- package/packages/tools/lib/model/source-graph.js +19 -24
- package/packages/tools/lib/model/source-graph.js.map +1 -1
- package/packages/tools/lib/model/source-provenance.d.ts +5 -1
- package/packages/tools/lib/model/source-provenance.d.ts.map +1 -1
- package/packages/tools/lib/model/source-provenance.js.map +1 -1
- package/packages/tools/lib/model/sysml-files.js +1 -1
- package/packages/tools/lib/model/sysml-ir.d.ts +2 -5
- package/packages/tools/lib/model/sysml-ir.d.ts.map +1 -1
- package/packages/tools/lib/model/sysml-ir.js +1 -100
- package/packages/tools/lib/model/sysml-ir.js.map +1 -1
- package/packages/tools/lib/model/toolchain-merge.d.ts +4 -0
- package/packages/tools/lib/model/toolchain-merge.d.ts.map +1 -0
- package/packages/tools/lib/model/toolchain-merge.js +34 -0
- package/packages/tools/lib/model/toolchain-merge.js.map +1 -0
- package/packages/tools/lib/model/user-settings.d.ts +13 -0
- package/packages/tools/lib/model/user-settings.d.ts.map +1 -0
- package/packages/tools/lib/model/user-settings.js +83 -0
- package/packages/tools/lib/model/user-settings.js.map +1 -0
- package/packages/tools/lib/model/variability.d.ts +56 -0
- package/packages/tools/lib/model/variability.d.ts.map +1 -0
- package/packages/tools/lib/model/variability.js +116 -0
- package/packages/tools/lib/model/variability.js.map +1 -0
- package/packages/tools/lib/model/version-range.d.ts +2 -0
- package/packages/tools/lib/model/version-range.d.ts.map +1 -0
- package/packages/tools/lib/model/version-range.js +37 -0
- package/packages/tools/lib/model/version-range.js.map +1 -0
- package/packages/tools/lib/model/view-deriver.d.ts +16 -0
- package/packages/tools/lib/model/view-deriver.d.ts.map +1 -1
- package/packages/tools/lib/model/view-deriver.js +100 -26
- package/packages/tools/lib/model/view-deriver.js.map +1 -1
- package/packages/tools/lib/model/view-layout-block.d.ts +81 -0
- package/packages/tools/lib/model/view-layout-block.d.ts.map +1 -0
- package/packages/tools/lib/model/view-layout-block.js +525 -0
- package/packages/tools/lib/model/view-layout-block.js.map +1 -0
- package/packages/tools/lib/model/view-layout-migration.d.ts +54 -0
- package/packages/tools/lib/model/view-layout-migration.d.ts.map +1 -0
- package/packages/tools/lib/model/view-layout-migration.js +156 -0
- package/packages/tools/lib/model/view-layout-migration.js.map +1 -0
- package/packages/tools/lib/model/workspace-membership.d.ts +99 -0
- package/packages/tools/lib/model/workspace-membership.d.ts.map +1 -0
- package/packages/tools/lib/model/workspace-membership.js +281 -0
- package/packages/tools/lib/model/workspace-membership.js.map +1 -0
- package/packages/tools/lib/ontology/owl-exporter.d.ts +1 -1
- package/packages/tools/lib/ontology/owl-exporter.d.ts.map +1 -1
- package/packages/tools/lib/ontology/owl-exporter.js +1 -1
- package/packages/tools/lib/ontology/owl-exporter.js.map +1 -1
- package/packages/tools/lib/operations/ai-authoring.d.ts.map +1 -1
- package/packages/tools/lib/operations/ai-authoring.js +7 -5
- package/packages/tools/lib/operations/ai-authoring.js.map +1 -1
- package/packages/tools/lib/operations/authoring.d.ts +10 -4
- package/packages/tools/lib/operations/authoring.d.ts.map +1 -1
- package/packages/tools/lib/operations/authoring.js +27 -11
- package/packages/tools/lib/operations/authoring.js.map +1 -1
- package/packages/tools/lib/operations/index.d.ts +2 -0
- package/packages/tools/lib/operations/index.d.ts.map +1 -1
- package/packages/tools/lib/operations/index.js +1 -0
- package/packages/tools/lib/operations/index.js.map +1 -1
- package/packages/tools/lib/operations/project-snapshot.d.ts.map +1 -1
- package/packages/tools/lib/operations/project-snapshot.js +7 -13
- package/packages/tools/lib/operations/project-snapshot.js.map +1 -1
- package/packages/tools/lib/plugin/plugin-scaffold.js +2 -2
- package/packages/tools/lib/plugin/plugin-scaffold.js.map +1 -1
- package/packages/tools/lib/protocol/messages.d.ts +375 -7
- package/packages/tools/lib/protocol/messages.d.ts.map +1 -1
- package/packages/tools/lib/serializer/csv-io.d.ts +37 -29
- package/packages/tools/lib/serializer/csv-io.d.ts.map +1 -1
- package/packages/tools/lib/serializer/csv-io.js +64 -31
- package/packages/tools/lib/serializer/csv-io.js.map +1 -1
- package/packages/tools/lib/serializer/sysml-generator.d.ts +15 -2
- package/packages/tools/lib/serializer/sysml-generator.d.ts.map +1 -1
- package/packages/tools/lib/serializer/sysml-generator.js +45 -17
- package/packages/tools/lib/serializer/sysml-generator.js.map +1 -1
- package/packages/tools/lib/server/conflict-policy.js +1 -1
- package/packages/tools/lib/server/conflict-policy.js.map +1 -1
- package/packages/tools/lib/server/dashboard-store.d.ts +1 -7
- package/packages/tools/lib/server/dashboard-store.d.ts.map +1 -1
- package/packages/tools/lib/server/dashboard-store.js +3 -14
- package/packages/tools/lib/server/dashboard-store.js.map +1 -1
- package/packages/tools/lib/server/dev-server.d.ts +48 -1
- package/packages/tools/lib/server/dev-server.d.ts.map +1 -1
- package/packages/tools/lib/server/dev-server.js +529 -80
- package/packages/tools/lib/server/dev-server.js.map +1 -1
- package/packages/tools/lib/server/dev-validate.d.ts +30 -0
- package/packages/tools/lib/server/dev-validate.d.ts.map +1 -0
- package/packages/tools/lib/server/dev-validate.js +82 -0
- package/packages/tools/lib/server/dev-validate.js.map +1 -0
- package/packages/tools/lib/server/element-writer.d.ts +4 -1
- package/packages/tools/lib/server/element-writer.d.ts.map +1 -1
- package/packages/tools/lib/server/element-writer.js +56 -35
- package/packages/tools/lib/server/element-writer.js.map +1 -1
- package/packages/tools/lib/server/mutation-domain.d.ts +10 -0
- package/packages/tools/lib/server/mutation-domain.d.ts.map +1 -1
- package/packages/tools/lib/server/mutation-domain.js +45 -8
- package/packages/tools/lib/server/mutation-domain.js.map +1 -1
- package/packages/tools/lib/server/package-source.d.ts +13 -3
- package/packages/tools/lib/server/package-source.d.ts.map +1 -1
- package/packages/tools/lib/server/package-source.js +31 -39
- package/packages/tools/lib/server/package-source.js.map +1 -1
- package/packages/tools/lib/server/package-writer.d.ts +19 -6
- package/packages/tools/lib/server/package-writer.d.ts.map +1 -1
- package/packages/tools/lib/server/package-writer.js +90 -39
- package/packages/tools/lib/server/package-writer.js.map +1 -1
- package/packages/tools/lib/server/persistor.d.ts +33 -7
- package/packages/tools/lib/server/persistor.d.ts.map +1 -1
- package/packages/tools/lib/server/persistor.js +63 -48
- package/packages/tools/lib/server/persistor.js.map +1 -1
- package/packages/tools/lib/server/project-gitignore.d.ts +9 -0
- package/packages/tools/lib/server/project-gitignore.d.ts.map +1 -0
- package/packages/tools/lib/server/project-gitignore.js +27 -0
- package/packages/tools/lib/server/project-gitignore.js.map +1 -0
- package/packages/tools/lib/server/relationship-writer.d.ts +31 -2
- package/packages/tools/lib/server/relationship-writer.d.ts.map +1 -1
- package/packages/tools/lib/server/relationship-writer.js +255 -95
- package/packages/tools/lib/server/relationship-writer.js.map +1 -1
- package/packages/tools/lib/server/release-writer.d.ts +46 -0
- package/packages/tools/lib/server/release-writer.d.ts.map +1 -0
- package/packages/tools/lib/server/release-writer.js +133 -0
- package/packages/tools/lib/server/release-writer.js.map +1 -0
- package/packages/tools/lib/server/rule-policy-writer.d.ts +17 -4
- package/packages/tools/lib/server/rule-policy-writer.d.ts.map +1 -1
- package/packages/tools/lib/server/rule-policy-writer.js +92 -7
- package/packages/tools/lib/server/rule-policy-writer.js.map +1 -1
- package/packages/tools/lib/server/rule-service.d.ts +50 -0
- package/packages/tools/lib/server/rule-service.d.ts.map +1 -0
- package/packages/tools/lib/server/rule-service.js +89 -0
- package/packages/tools/lib/server/rule-service.js.map +1 -0
- package/packages/tools/lib/server/rule-writer.d.ts +87 -0
- package/packages/tools/lib/server/rule-writer.d.ts.map +1 -0
- package/packages/tools/lib/server/rule-writer.js +165 -0
- package/packages/tools/lib/server/rule-writer.js.map +1 -0
- package/packages/tools/lib/server/suspect-review.d.ts +11 -0
- package/packages/tools/lib/server/suspect-review.d.ts.map +1 -0
- package/packages/tools/lib/server/suspect-review.js +28 -0
- package/packages/tools/lib/server/suspect-review.js.map +1 -0
- package/packages/tools/lib/server/sysml-notation.d.ts +1 -1
- package/packages/tools/lib/server/sysml-notation.d.ts.map +1 -1
- package/packages/tools/lib/server/sysml-notation.js +5 -0
- package/packages/tools/lib/server/sysml-notation.js.map +1 -1
- package/packages/tools/lib/server/user-preferences.d.ts +8 -0
- package/packages/tools/lib/server/user-preferences.d.ts.map +1 -0
- package/packages/tools/lib/server/user-preferences.js +47 -0
- package/packages/tools/lib/server/user-preferences.js.map +1 -0
- package/packages/tools/lib/server/version-servers.d.ts +60 -0
- package/packages/tools/lib/server/version-servers.d.ts.map +1 -0
- package/packages/tools/lib/server/version-servers.js +106 -0
- package/packages/tools/lib/server/version-servers.js.map +1 -0
- package/packages/tools/lib/server/view-layout-store.d.ts +28 -13
- package/packages/tools/lib/server/view-layout-store.d.ts.map +1 -1
- package/packages/tools/lib/server/view-layout-store.js +106 -106
- package/packages/tools/lib/server/view-layout-store.js.map +1 -1
- package/packages/tools/lib/server/view-writer.d.ts +22 -2
- package/packages/tools/lib/server/view-writer.d.ts.map +1 -1
- package/packages/tools/lib/server/view-writer.js +99 -44
- package/packages/tools/lib/server/view-writer.js.map +1 -1
- package/packages/tools/lib/server/write-guard.d.ts +7 -0
- package/packages/tools/lib/server/write-guard.d.ts.map +1 -0
- package/packages/tools/lib/server/write-guard.js +77 -0
- package/packages/tools/lib/server/write-guard.js.map +1 -0
- package/packages/tools/lib/stage2/api-model.d.ts +160 -0
- package/packages/tools/lib/stage2/api-model.d.ts.map +1 -0
- package/packages/tools/lib/stage2/api-model.js +341 -0
- package/packages/tools/lib/stage2/api-model.js.map +1 -0
- package/packages/tools/lib/stage2/build-from-api.d.ts +47 -0
- package/packages/tools/lib/stage2/build-from-api.d.ts.map +1 -0
- package/packages/tools/lib/stage2/build-from-api.js +1462 -0
- package/packages/tools/lib/stage2/build-from-api.js.map +1 -0
- package/packages/tools/lib/stage2/guide-from-api.d.ts +38 -0
- package/packages/tools/lib/stage2/guide-from-api.d.ts.map +1 -0
- package/packages/tools/lib/stage2/guide-from-api.js +97 -0
- package/packages/tools/lib/stage2/guide-from-api.js.map +1 -0
- package/packages/tools/lib/stage2/handoff-files.d.ts +13 -0
- package/packages/tools/lib/stage2/handoff-files.d.ts.map +1 -0
- package/packages/tools/lib/stage2/handoff-files.js +32 -0
- package/packages/tools/lib/stage2/handoff-files.js.map +1 -0
- package/packages/tools/lib/stage2/methodology-from-api.d.ts +10 -0
- package/packages/tools/lib/stage2/methodology-from-api.d.ts.map +1 -0
- package/packages/tools/lib/stage2/methodology-from-api.js +109 -0
- package/packages/tools/lib/stage2/methodology-from-api.js.map +1 -0
- package/packages/tools/lib/stage2/package-metadata-from-api.d.ts +15 -0
- package/packages/tools/lib/stage2/package-metadata-from-api.d.ts.map +1 -0
- package/packages/tools/lib/stage2/package-metadata-from-api.js +238 -0
- package/packages/tools/lib/stage2/package-metadata-from-api.js.map +1 -0
- package/packages/tools/lib/stage2/project-from-api.d.ts +60 -0
- package/packages/tools/lib/stage2/project-from-api.d.ts.map +1 -0
- package/packages/tools/lib/stage2/project-from-api.js +328 -0
- package/packages/tools/lib/stage2/project-from-api.js.map +1 -0
- package/packages/tools/lib/stage2/registries-from-api.d.ts +68 -0
- package/packages/tools/lib/stage2/registries-from-api.d.ts.map +1 -0
- package/packages/tools/lib/stage2/registries-from-api.js +313 -0
- package/packages/tools/lib/stage2/registries-from-api.js.map +1 -0
- package/packages/tools/lib/stage2/stage2-from-handoff.d.ts +26 -0
- package/packages/tools/lib/stage2/stage2-from-handoff.d.ts.map +1 -0
- package/packages/tools/lib/stage2/stage2-from-handoff.js +34 -0
- package/packages/tools/lib/stage2/stage2-from-handoff.js.map +1 -0
- package/packages/tools/lib/stage2/sysml-names.d.ts +9 -0
- package/packages/tools/lib/stage2/sysml-names.d.ts.map +1 -0
- package/packages/tools/lib/stage2/sysml-names.js +39 -0
- package/packages/tools/lib/stage2/sysml-names.js.map +1 -0
- package/packages/tools/lib/toolchain/default-registry.d.ts +2 -2
- package/packages/tools/lib/toolchain/default-registry.d.ts.map +1 -1
- package/packages/tools/lib/toolchain/default-registry.js +9 -5
- package/packages/tools/lib/toolchain/default-registry.js.map +1 -1
- package/packages/tools/lib/toolchain/diagnostic.d.ts +2 -2
- package/packages/tools/lib/toolchain/diagnostic.js +1 -1
- package/packages/tools/lib/toolchain/diagnostic.js.map +1 -1
- package/packages/tools/lib/toolchain/effective.d.ts +25 -17
- package/packages/tools/lib/toolchain/effective.d.ts.map +1 -1
- package/packages/tools/lib/toolchain/effective.js +45 -40
- package/packages/tools/lib/toolchain/effective.js.map +1 -1
- package/packages/tools/lib/toolchain/exceptions.d.ts +27 -0
- package/packages/tools/lib/toolchain/exceptions.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/exceptions.js +77 -0
- package/packages/tools/lib/toolchain/exceptions.js.map +1 -0
- package/packages/tools/lib/toolchain/index.d.ts +2 -2
- package/packages/tools/lib/toolchain/index.d.ts.map +1 -1
- package/packages/tools/lib/toolchain/index.js +2 -2
- package/packages/tools/lib/toolchain/index.js.map +1 -1
- package/packages/tools/lib/toolchain/operations.d.ts +45 -10
- package/packages/tools/lib/toolchain/operations.d.ts.map +1 -1
- package/packages/tools/lib/toolchain/operations.js +107 -8
- package/packages/tools/lib/toolchain/operations.js.map +1 -1
- package/packages/tools/lib/toolchain/ownership.d.ts +13 -0
- package/packages/tools/lib/toolchain/ownership.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/ownership.js +57 -0
- package/packages/tools/lib/toolchain/ownership.js.map +1 -0
- package/packages/tools/lib/toolchain/process.d.ts +2 -2
- package/packages/tools/lib/toolchain/process.js +2 -2
- package/packages/tools/lib/toolchain/project-config.d.ts +4 -0
- package/packages/tools/lib/toolchain/project-config.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/project-config.js +13 -0
- package/packages/tools/lib/toolchain/project-config.js.map +1 -0
- package/packages/tools/lib/toolchain/project-model.d.ts +75 -0
- package/packages/tools/lib/toolchain/project-model.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/project-model.js +92 -0
- package/packages/tools/lib/toolchain/project-model.js.map +1 -0
- package/packages/tools/lib/toolchain/providers/internal-package.d.ts +6 -0
- package/packages/tools/lib/toolchain/providers/internal-package.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/providers/internal-package.js +47 -0
- package/packages/tools/lib/toolchain/providers/internal-package.js.map +1 -0
- package/packages/tools/lib/toolchain/providers/opensysml-check.d.ts +20 -0
- package/packages/tools/lib/toolchain/providers/opensysml-check.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/providers/opensysml-check.js +95 -0
- package/packages/tools/lib/toolchain/providers/opensysml-check.js.map +1 -0
- package/packages/tools/lib/toolchain/providers/opensysml-compact.d.ts +17 -0
- package/packages/tools/lib/toolchain/providers/opensysml-compact.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/providers/opensysml-compact.js +69 -0
- package/packages/tools/lib/toolchain/providers/opensysml-compact.js.map +1 -0
- package/packages/tools/lib/toolchain/providers/opensysml-lowering.d.ts +50 -0
- package/packages/tools/lib/toolchain/providers/opensysml-lowering.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/providers/opensysml-lowering.js +646 -0
- package/packages/tools/lib/toolchain/providers/opensysml-lowering.js.map +1 -0
- package/packages/tools/lib/toolchain/providers/opensysml-names.d.ts +16 -0
- package/packages/tools/lib/toolchain/providers/opensysml-names.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/providers/opensysml-names.js +37 -0
- package/packages/tools/lib/toolchain/providers/opensysml-names.js.map +1 -0
- package/packages/tools/lib/toolchain/providers/opensysml.d.ts +88 -0
- package/packages/tools/lib/toolchain/providers/opensysml.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/providers/opensysml.js +178 -0
- package/packages/tools/lib/toolchain/providers/opensysml.js.map +1 -0
- package/packages/tools/lib/toolchain/providers/recommended.d.ts +2 -0
- package/packages/tools/lib/toolchain/providers/recommended.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/providers/recommended.js +13 -0
- package/packages/tools/lib/toolchain/providers/recommended.js.map +1 -0
- package/packages/tools/lib/toolchain/providers/sysand-project.d.ts +60 -0
- package/packages/tools/lib/toolchain/providers/sysand-project.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/providers/sysand-project.js +160 -0
- package/packages/tools/lib/toolchain/providers/sysand-project.js.map +1 -0
- package/packages/tools/lib/toolchain/providers/sysand.d.ts.map +1 -1
- package/packages/tools/lib/toolchain/providers/sysand.js +26 -2
- package/packages/tools/lib/toolchain/providers/sysand.js.map +1 -1
- package/packages/tools/lib/toolchain/providers/syside-lowering.d.ts +29 -0
- package/packages/tools/lib/toolchain/providers/syside-lowering.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/providers/syside-lowering.js +497 -0
- package/packages/tools/lib/toolchain/providers/syside-lowering.js.map +1 -0
- package/packages/tools/lib/toolchain/providers/syside-python.d.ts +9 -0
- package/packages/tools/lib/toolchain/providers/syside-python.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/providers/syside-python.js +69 -0
- package/packages/tools/lib/toolchain/providers/syside-python.js.map +1 -0
- package/packages/tools/lib/toolchain/providers/syside.d.ts.map +1 -1
- package/packages/tools/lib/toolchain/providers/syside.js +2 -0
- package/packages/tools/lib/toolchain/providers/syside.js.map +1 -1
- package/packages/tools/lib/toolchain/registry.d.ts +118 -21
- package/packages/tools/lib/toolchain/registry.d.ts.map +1 -1
- package/packages/tools/lib/toolchain/registry.js +18 -24
- package/packages/tools/lib/toolchain/registry.js.map +1 -1
- package/packages/tools/lib/toolchain/schema.d.ts +6 -5
- package/packages/tools/lib/toolchain/schema.d.ts.map +1 -1
- package/packages/tools/lib/toolchain/schema.js +8 -13
- package/packages/tools/lib/toolchain/schema.js.map +1 -1
- package/packages/tools/lib/toolchain/shipped-library.d.ts +28 -0
- package/packages/tools/lib/toolchain/shipped-library.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/shipped-library.js +120 -0
- package/packages/tools/lib/toolchain/shipped-library.js.map +1 -0
- package/packages/tools/lib/toolchain/source-fingerprint.d.ts +2 -0
- package/packages/tools/lib/toolchain/source-fingerprint.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/source-fingerprint.js +30 -0
- package/packages/tools/lib/toolchain/source-fingerprint.js.map +1 -0
- package/packages/tools/lib/toolchain/user-settings-status.d.ts +51 -0
- package/packages/tools/lib/toolchain/user-settings-status.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/user-settings-status.js +104 -0
- package/packages/tools/lib/toolchain/user-settings-status.js.map +1 -0
- package/packages/tools/lib/validator/architecture-validator.d.ts.map +1 -1
- package/packages/tools/lib/validator/architecture-validator.js +2 -1
- package/packages/tools/lib/validator/architecture-validator.js.map +1 -1
- package/packages/tools/lib/validator/behavior-validator.js +1 -1
- package/packages/tools/lib/validator/behavior-validator.js.map +1 -1
- package/packages/tools/lib/validator/builtin-rules.js +1 -1
- package/packages/tools/lib/validator/builtin-rules.js.map +1 -1
- package/packages/tools/lib/validator/constraint-eval.d.ts +30 -4
- package/packages/tools/lib/validator/constraint-eval.d.ts.map +1 -1
- package/packages/tools/lib/validator/constraint-eval.js +101 -59
- package/packages/tools/lib/validator/constraint-eval.js.map +1 -1
- package/packages/tools/lib/validator/constraint-loader-api.d.ts +22 -0
- package/packages/tools/lib/validator/constraint-loader-api.d.ts.map +1 -0
- package/packages/tools/lib/validator/constraint-loader-api.js +160 -0
- package/packages/tools/lib/validator/constraint-loader-api.js.map +1 -0
- package/packages/tools/lib/validator/constraint-loader.d.ts +22 -18
- package/packages/tools/lib/validator/constraint-loader.d.ts.map +1 -1
- package/packages/tools/lib/validator/constraint-loader.js +33 -141
- package/packages/tools/lib/validator/constraint-loader.js.map +1 -1
- package/packages/tools/lib/validator/rule-clauses.d.ts +51 -0
- package/packages/tools/lib/validator/rule-clauses.d.ts.map +1 -0
- package/packages/tools/lib/validator/rule-clauses.js +87 -0
- package/packages/tools/lib/validator/rule-clauses.js.map +1 -0
- package/packages/tools/lib/validator/rule-engine.d.ts +9 -1
- package/packages/tools/lib/validator/rule-engine.d.ts.map +1 -1
- package/packages/tools/lib/validator/rule-engine.js +50 -6
- package/packages/tools/lib/validator/rule-engine.js.map +1 -1
- package/packages/tools/lib/validator/rule-registry.d.ts +4 -8
- package/packages/tools/lib/validator/rule-registry.d.ts.map +1 -1
- package/packages/tools/lib/validator/rule-registry.js +42 -79
- package/packages/tools/lib/validator/rule-registry.js.map +1 -1
- package/packages/tools/lib/validator/rule-tailoring.d.ts +62 -0
- package/packages/tools/lib/validator/rule-tailoring.d.ts.map +1 -0
- package/packages/tools/lib/validator/rule-tailoring.js +85 -0
- package/packages/tools/lib/validator/rule-tailoring.js.map +1 -0
- package/packages/tools/lib/validator/types.d.ts +12 -1
- package/packages/tools/lib/validator/types.d.ts.map +1 -1
- package/packages/tools/lib/validator/workspace-boundary-validator.d.ts +9 -0
- package/packages/tools/lib/validator/workspace-boundary-validator.d.ts.map +1 -0
- package/packages/tools/lib/validator/workspace-boundary-validator.js +28 -0
- package/packages/tools/lib/validator/workspace-boundary-validator.js.map +1 -0
- package/packages/tools/python/memo_model.py +243 -0
- package/packages/tools/python/memo_stage1_syside.py +389 -0
- package/packages/tools/lib/commands/check.d.ts +0 -6
- package/packages/tools/lib/commands/check.d.ts.map +0 -1
- package/packages/tools/lib/commands/check.js +0 -191
- package/packages/tools/lib/commands/check.js.map +0 -1
- package/packages/tools/lib/commands/conformance.d.ts +0 -36
- package/packages/tools/lib/commands/conformance.d.ts.map +0 -1
- package/packages/tools/lib/commands/conformance.js +0 -212
- package/packages/tools/lib/commands/conformance.js.map +0 -1
- package/packages/tools/lib/commands/roundtrip.d.ts +0 -6
- package/packages/tools/lib/commands/roundtrip.d.ts.map +0 -1
- package/packages/tools/lib/commands/roundtrip.js +0 -145
- package/packages/tools/lib/commands/roundtrip.js.map +0 -1
- package/packages/tools/lib/conformance/baseline.d.ts +0 -26
- package/packages/tools/lib/conformance/baseline.d.ts.map +0 -1
- package/packages/tools/lib/conformance/baseline.js +0 -170
- package/packages/tools/lib/conformance/baseline.js.map +0 -1
- package/packages/tools/lib/conformance/bnf.d.ts +0 -84
- package/packages/tools/lib/conformance/bnf.d.ts.map +0 -1
- package/packages/tools/lib/conformance/bnf.js +0 -166
- package/packages/tools/lib/conformance/bnf.js.map +0 -1
- package/packages/tools/lib/conformance/corpus.d.ts +0 -125
- package/packages/tools/lib/conformance/corpus.d.ts.map +0 -1
- package/packages/tools/lib/conformance/corpus.js +0 -190
- package/packages/tools/lib/conformance/corpus.js.map +0 -1
- package/packages/tools/lib/conformance/diff-xmi.d.ts +0 -118
- package/packages/tools/lib/conformance/diff-xmi.d.ts.map +0 -1
- package/packages/tools/lib/conformance/diff-xmi.js +0 -276
- package/packages/tools/lib/conformance/diff-xmi.js.map +0 -1
- package/packages/tools/lib/conformance/generated/syside-rules.d.ts +0 -10
- package/packages/tools/lib/conformance/generated/syside-rules.d.ts.map +0 -1
- package/packages/tools/lib/conformance/generated/syside-rules.js +0 -1142
- package/packages/tools/lib/conformance/generated/syside-rules.js.map +0 -1
- package/packages/tools/lib/conformance/index.d.ts +0 -7
- package/packages/tools/lib/conformance/index.d.ts.map +0 -1
- package/packages/tools/lib/conformance/index.js +0 -19
- package/packages/tools/lib/conformance/index.js.map +0 -1
- package/packages/tools/lib/conformance/run.d.ts +0 -117
- package/packages/tools/lib/conformance/run.d.ts.map +0 -1
- package/packages/tools/lib/conformance/run.js +0 -0
- package/packages/tools/lib/conformance/run.js.map +0 -1
- package/packages/tools/lib/conformance/xmi.d.ts +0 -45
- package/packages/tools/lib/conformance/xmi.d.ts.map +0 -1
- package/packages/tools/lib/conformance/xmi.js +0 -148
- package/packages/tools/lib/conformance/xmi.js.map +0 -1
- package/packages/tools/lib/language/generated/ast.d.ts +0 -3571
- package/packages/tools/lib/language/generated/ast.d.ts.map +0 -1
- package/packages/tools/lib/language/generated/ast.js +0 -2980
- package/packages/tools/lib/language/generated/ast.js.map +0 -1
- package/packages/tools/lib/language/generated/grammar.d.ts +0 -7
- package/packages/tools/lib/language/generated/grammar.d.ts.map +0 -1
- package/packages/tools/lib/language/generated/grammar.js +0 -10687
- package/packages/tools/lib/language/generated/grammar.js.map +0 -1
- package/packages/tools/lib/language/generated/module.d.ts +0 -14
- package/packages/tools/lib/language/generated/module.d.ts.map +0 -1
- package/packages/tools/lib/language/generated/module.js +0 -21
- package/packages/tools/lib/language/generated/module.js.map +0 -1
- package/packages/tools/lib/language/memo-sysml-module.d.ts +0 -24
- package/packages/tools/lib/language/memo-sysml-module.d.ts.map +0 -1
- package/packages/tools/lib/language/memo-sysml-module.js +0 -20
- package/packages/tools/lib/language/memo-sysml-module.js.map +0 -1
- package/packages/tools/lib/model/builder.d.ts +0 -27
- package/packages/tools/lib/model/builder.d.ts.map +0 -1
- package/packages/tools/lib/model/builder.js +0 -2112
- package/packages/tools/lib/model/builder.js.map +0 -1
- package/packages/tools/lib/model/package-registry.d.ts +0 -64
- package/packages/tools/lib/model/package-registry.d.ts.map +0 -1
- package/packages/tools/lib/model/package-registry.js +0 -184
- package/packages/tools/lib/model/package-registry.js.map +0 -1
- package/packages/tools/lib/model/parser-utils.d.ts +0 -65
- package/packages/tools/lib/model/parser-utils.d.ts.map +0 -1
- package/packages/tools/lib/model/parser-utils.js +0 -201
- package/packages/tools/lib/model/parser-utils.js.map +0 -1
- package/packages/tools/lib/sysmlc/bin/memo-sysmlc.d.ts +0 -3
- package/packages/tools/lib/sysmlc/bin/memo-sysmlc.d.ts.map +0 -1
- package/packages/tools/lib/sysmlc/bin/memo-sysmlc.js +0 -97
- package/packages/tools/lib/sysmlc/bin/memo-sysmlc.js.map +0 -1
- package/packages/tools/lib/sysmlc/index.d.ts +0 -2
- package/packages/tools/lib/sysmlc/index.d.ts.map +0 -1
- package/packages/tools/lib/sysmlc/index.js +0 -7
- package/packages/tools/lib/sysmlc/index.js.map +0 -1
- package/packages/tools/lib/sysmlc/server.d.ts +0 -29
- package/packages/tools/lib/sysmlc/server.d.ts.map +0 -1
- package/packages/tools/lib/sysmlc/server.js +0 -168
- package/packages/tools/lib/sysmlc/server.js.map +0 -1
- package/packages/tools/lib/toolchain/lowering.d.ts +0 -63
- package/packages/tools/lib/toolchain/lowering.d.ts.map +0 -1
- package/packages/tools/lib/toolchain/lowering.js +0 -100
- package/packages/tools/lib/toolchain/lowering.js.map +0 -1
- package/packages/tools/lib/toolchain/providers/internal.d.ts +0 -33
- package/packages/tools/lib/toolchain/providers/internal.d.ts.map +0 -1
- package/packages/tools/lib/toolchain/providers/internal.js +0 -286
- package/packages/tools/lib/toolchain/providers/internal.js.map +0 -1
- package/packages/tools/lib/toolchain/sysmlc-client.d.ts +0 -77
- package/packages/tools/lib/toolchain/sysmlc-client.d.ts.map +0 -1
- package/packages/tools/lib/toolchain/sysmlc-client.js +0 -0
- package/packages/tools/lib/toolchain/sysmlc-client.js.map +0 -1
- package/packages/tools/lib/validator/sysml-constraints.d.ts +0 -64
- package/packages/tools/lib/validator/sysml-constraints.d.ts.map +0 -1
- package/packages/tools/lib/validator/sysml-constraints.js +0 -251
- package/packages/tools/lib/validator/sysml-constraints.js.map +0 -1
- package/packages/tools/src/grammar/memo-sysml.langium +0 -1064
|
@@ -3,91 +3,177 @@
|
|
|
3
3
|
// Parses all .sysml files, builds the model, evaluates closure rules,
|
|
4
4
|
// and prints a completeness report.
|
|
5
5
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
6
|
-
import { resolve } from 'node:path';
|
|
6
|
+
import { relative, resolve } from 'node:path';
|
|
7
7
|
import { writeFileSync } from 'node:fs';
|
|
8
8
|
import chalk from 'chalk';
|
|
9
9
|
import { identityKey, writeIdentityRegistry } from '../model/identity-registry.js';
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
10
|
+
import { loadProjectSettings, findProjectRoot, resolveEffectiveMethodology, buildEffectiveScope, resolveProjectRules, isRulePackageInScope, scopedSubjectIds, checkSemanticFields, } from '@memoarchitect/tools';
|
|
11
|
+
import { ELEMENT_NAME_COLLISION, AMBIGUOUS_ELEMENT_REFERENCE } from '@memoarchitect/tools';
|
|
12
|
+
import { validateModel, collectApiConstraints, } from '@memoarchitect/tools';
|
|
13
|
+
import { checkSelectorVocabulary } from '@memoarchitect/tools';
|
|
12
14
|
import { computeCompleteness } from '@memoarchitect/tools';
|
|
13
|
-
import { checkLockFile } from '../lock.js';
|
|
15
|
+
import { checkLockFile, lockableDependencies } from '../lock.js';
|
|
14
16
|
import { runValidator } from '../toolchain/operations.js';
|
|
15
17
|
import { resolveToolchain } from '../toolchain/effective.js';
|
|
16
18
|
import { defaultRegistry } from '../toolchain/default-registry.js';
|
|
19
|
+
import { compileResolvedProject, compileServesValidator } from '../toolchain/operations.js';
|
|
20
|
+
import { discoverProjectSources } from '../model/native-project.js';
|
|
21
|
+
import { narrowModel } from '../model/narrow-model.js';
|
|
22
|
+
import { computeWorkspaceMembership, selectWorkspace } from '../model/workspace-membership.js';
|
|
23
|
+
import { resolutionLoads } from '../stage2/project-from-api.js';
|
|
24
|
+
import { stage1CacheDir } from '../toolchain/project-model.js';
|
|
17
25
|
import { withToolchainOverrides } from '../toolchain/schema.js';
|
|
18
26
|
import { countBySeverity, formatDiagnosticsText } from '../toolchain/diagnostic.js';
|
|
27
|
+
import { servable, validateWithDevServer } from './validate-client.js';
|
|
28
|
+
/** A run that stops early with this exit code; thrown, never left to escape. */
|
|
29
|
+
export class ValidationExit extends Error {
|
|
30
|
+
code;
|
|
31
|
+
constructor(code) {
|
|
32
|
+
super(`validation stopped with exit code ${code}`);
|
|
33
|
+
this.code = code;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/** The console, as the CLI writes. */
|
|
37
|
+
export const consoleIO = {
|
|
38
|
+
out: (...args) => console.log(...args),
|
|
39
|
+
err: (...args) => console.error(...args),
|
|
40
|
+
write: text => { process.stdout.write(text); },
|
|
41
|
+
};
|
|
42
|
+
/** Runs a validation, stopping early with its code instead of throwing. */
|
|
43
|
+
export async function validationExitCode(run) {
|
|
44
|
+
try {
|
|
45
|
+
return await run();
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
if (error instanceof ValidationExit)
|
|
49
|
+
return error.code;
|
|
50
|
+
throw error;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
19
53
|
export async function validateCommand(projectDir, options) {
|
|
54
|
+
// A running `memo dev` holds the compiled model already: ask it first.
|
|
55
|
+
const cwd = resolve(projectDir || process.cwd());
|
|
56
|
+
const projectRoot = servable(options) ? findProjectRoot(cwd) : undefined;
|
|
57
|
+
const served = projectRoot ? await validateWithDevServer(projectRoot, process.cwd(), options) : undefined;
|
|
58
|
+
if (served) {
|
|
59
|
+
process.stderr.write(chalk.gray(`(answered by the dev server running for this project, from the model it holds; --no-server to compile here)\n`));
|
|
60
|
+
process.stderr.write(served.stderr);
|
|
61
|
+
process.stdout.write(served.stdout);
|
|
62
|
+
if (served.exitCode !== 0)
|
|
63
|
+
process.exitCode = served.exitCode;
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
const code = await validationExitCode(() => runValidation(projectDir, options, consoleIO));
|
|
67
|
+
if (code !== 0)
|
|
68
|
+
process.exitCode = code;
|
|
69
|
+
}
|
|
70
|
+
export async function runValidation(projectDir, options, io, compile = compileResolvedProject) {
|
|
71
|
+
let exitCode = 0;
|
|
20
72
|
const format = options?.format || 'text';
|
|
73
|
+
// A report written to stdout (json or junit without -o) is the whole of
|
|
74
|
+
// stdout, so a script can parse it; the progress goes to stderr.
|
|
75
|
+
const say = format !== 'text' && !options?.output ? io.err : io.out;
|
|
21
76
|
const cwd = resolve(projectDir || process.cwd());
|
|
22
|
-
|
|
77
|
+
say(chalk.bold('\n📋 MEMO Validate\n'));
|
|
23
78
|
// 1. Find the project by its native entrypoint, not by a settings file.
|
|
24
79
|
const projectRoot = findProjectRoot(cwd);
|
|
25
80
|
if (!projectRoot) {
|
|
26
|
-
|
|
81
|
+
io.err(chalk.red('❌ No MEMO project found. A project is located by the `entrypoint` in its '
|
|
27
82
|
+ '`memo.package.yaml`, which names the SysML file declaring its identity '
|
|
28
|
-
+ 'and method binding — run `memo init` to scaffold one.'));
|
|
29
|
-
|
|
83
|
+
+ 'and method binding — run `memo-architect init` to scaffold one.'));
|
|
84
|
+
throw new ValidationExit(1);
|
|
30
85
|
}
|
|
31
|
-
|
|
86
|
+
say(chalk.gray(`Model root: ${projectRoot}`));
|
|
32
87
|
// 2. Reject semantic configuration before anything reads it.
|
|
33
88
|
const rejections = checkSemanticFields(projectRoot);
|
|
34
89
|
if (rejections.length > 0) {
|
|
35
|
-
|
|
90
|
+
io.err(chalk.red(`\n❌ Semantic configuration found in application settings (${rejections.length}):\n`));
|
|
36
91
|
for (const r of rejections) {
|
|
37
|
-
|
|
38
|
-
|
|
92
|
+
io.err(chalk.red(` ${r.file}`));
|
|
93
|
+
io.err(chalk.gray(` ${r.message}\n`));
|
|
39
94
|
}
|
|
40
|
-
|
|
95
|
+
throw new ValidationExit(1);
|
|
41
96
|
}
|
|
42
97
|
const config = withToolchainOverrides(loadProjectSettings(projectRoot), options ?? {}, defaultRegistry);
|
|
43
98
|
const effectiveToolchain = resolveToolchain(config, defaultRegistry);
|
|
44
99
|
for (const note of effectiveToolchain.deprecations)
|
|
45
|
-
|
|
46
|
-
// 3. Resolve the project
|
|
47
|
-
//
|
|
100
|
+
say(chalk.yellow(` ⚠ ${note}`));
|
|
101
|
+
// 3. Resolve the project: imports and the method binding decide everything
|
|
102
|
+
// about what is loaded. The compiler resolves it from what it compiled —
|
|
103
|
+
// every library root a locator offers, the import closure deciding which
|
|
104
|
+
// is the ontology — so MEMO parses nothing.
|
|
105
|
+
const compiler = effectiveToolchain.lowering;
|
|
106
|
+
const validatorFromStage1 = compileServesValidator(config, defaultRegistry);
|
|
107
|
+
let sysmlDiagnostics = [];
|
|
48
108
|
let ontologyRegistries;
|
|
49
|
-
let
|
|
50
|
-
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
109
|
+
let resolution;
|
|
110
|
+
let stage1;
|
|
111
|
+
const projectSourceCount = discoverProjectSources(projectRoot).projectFiles.length;
|
|
112
|
+
{
|
|
113
|
+
try {
|
|
114
|
+
// Reuses a fresh `memo compile`.
|
|
115
|
+
stage1 = await compile({ config, projectDir: projectRoot, cacheDir: stage1CacheDir(projectRoot) });
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
io.err(chalk.red(`\n❌ ${error instanceof Error ? error.message : error}\n`));
|
|
119
|
+
throw new ValidationExit(1);
|
|
120
|
+
}
|
|
121
|
+
say(chalk.gray(`Stage 1: ${compiler} ${stage1.providerVersion ?? ''} — ${stage1.accepted ? 'clean' : 'errors'}${stage1.cached ? ' (reused .memo/stage1)' : ''}`));
|
|
122
|
+
if (validatorFromStage1) {
|
|
123
|
+
sysmlDiagnostics = stage1.diagnostics;
|
|
124
|
+
say(chalk.gray(`Validator: ${compiler} ${stage1.providerVersion ?? ''} (stage 1's check)`));
|
|
125
|
+
}
|
|
126
|
+
// A stage 1 that reports an error stops here: stage 2 and the rules
|
|
127
|
+
// never run on a model that is not valid SysML.
|
|
128
|
+
if (!stage1.accepted || !stage1.model) {
|
|
129
|
+
const errors = stage1.diagnostics.filter(d => d.severity === 'error');
|
|
130
|
+
io.err(chalk.red(`\n❌ Stage 1 (${compiler}) reported ${errors.length} error(s); stage 2 and the rules did not run.\n`));
|
|
131
|
+
for (const d of errors)
|
|
132
|
+
io.err(chalk.red(` ${d.file}:${d.range?.start.line ?? '?'}:${d.range?.start.column ?? '?'} ${d.code ?? ''} ${d.message}`));
|
|
133
|
+
throw new ValidationExit(1);
|
|
134
|
+
}
|
|
135
|
+
resolution = stage1.resolution;
|
|
136
|
+
ontologyRegistries = stage1.registries;
|
|
137
|
+
const kr = ontologyRegistries?.kindRegistry;
|
|
138
|
+
const rr = ontologyRegistries?.relationshipRegistry;
|
|
139
|
+
say(chalk.gray(`Resolved: ${kr?.size ?? 0} kinds, ${rr?.size ?? 0} relationships `
|
|
140
|
+
+ `(from ${compiler}'s handoff, ${resolution?.closure.size ?? 0} packages)`));
|
|
141
|
+
for (const d of resolution?.diagnostics ?? [])
|
|
142
|
+
say(chalk.yellow(` ⚠ ${d.code}: ${d.message}`));
|
|
143
|
+
}
|
|
62
144
|
if (resolution?.binding) {
|
|
63
|
-
|
|
145
|
+
say(chalk.gray(`Binding: ${resolution.binding.modelName ?? resolution.binding.usageName} → `
|
|
64
146
|
+ `${resolution.binding.selectedMethodologyName ?? '(none)'}`));
|
|
65
147
|
}
|
|
66
148
|
// The validator's verdict is diagnostics, not an exception. A tool that
|
|
67
149
|
// rejects the source has done its job and its complaints belong in the
|
|
68
150
|
// report; only a tool that could not be run at all aborts the command,
|
|
69
151
|
// because selecting a missing tool must never downgrade to another provider.
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
152
|
+
// When the compiler's own stage 1 is the validator's check (one provider in
|
|
153
|
+
// both roles), its diagnostics are taken from stage 1 below instead of
|
|
154
|
+
// running the same tool twice.
|
|
155
|
+
if (!validatorFromStage1) {
|
|
156
|
+
try {
|
|
157
|
+
const run = await runValidator({ config, projectDir: projectRoot, registry: defaultRegistry });
|
|
158
|
+
sysmlDiagnostics = run.diagnostics;
|
|
159
|
+
say(chalk.gray(`Validator: ${run.provider}${run.providerVersion ? ` ${run.providerVersion}` : ''}`));
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
io.err(chalk.red(`\n❌ ${error instanceof Error ? error.message : error}\n`));
|
|
163
|
+
throw new ValidationExit(1);
|
|
164
|
+
}
|
|
79
165
|
}
|
|
80
166
|
const lockCheck = checkLockFile(projectRoot, (resolution?.selectedRoots ?? []).map(root => ({
|
|
81
167
|
...root,
|
|
82
168
|
origin: 'ontology',
|
|
83
169
|
importDepth: 1,
|
|
84
|
-
})));
|
|
170
|
+
})), lockableDependencies(resolution?.dependencies ?? []));
|
|
85
171
|
if (!lockCheck.ok) {
|
|
86
|
-
|
|
87
|
-
|
|
172
|
+
io.err(chalk.red(`\n❌ ${lockCheck.message}\n`));
|
|
173
|
+
throw new ValidationExit(1);
|
|
88
174
|
}
|
|
89
175
|
if (lockCheck.locked) {
|
|
90
|
-
|
|
176
|
+
say(chalk.gray(`Ontology: locked to ${lockCheck.locked.ontology} v${lockCheck.locked.version}`));
|
|
91
177
|
}
|
|
92
178
|
// 4. The project's own source is everything parsed that belongs to no
|
|
93
179
|
// library root — selected OR unused.
|
|
@@ -101,88 +187,146 @@ export async function validateCommand(projectDir, options) {
|
|
|
101
187
|
// from a root the project never imported is not project source; it is
|
|
102
188
|
// not in the model at all.
|
|
103
189
|
const resolvedRoots = [...(resolution?.selectedRoots ?? []), ...(resolution?.unusedRoots ?? [])];
|
|
104
|
-
const
|
|
190
|
+
const isProjectFile = (file) => !resolvedRoots.some(r => file.startsWith(r.sysmlDir));
|
|
191
|
+
// Stage 1 was clean, so nothing the project declares failed to parse.
|
|
105
192
|
const parseErrors = [];
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
193
|
+
const projectFileCount = projectSourceCount;
|
|
194
|
+
if (projectFileCount === 0) {
|
|
195
|
+
io.err(chalk.yellow('⚠️ No project .sysml files found.'));
|
|
196
|
+
return exitCode;
|
|
109
197
|
}
|
|
110
|
-
|
|
111
|
-
// 5.
|
|
112
|
-
const model =
|
|
113
|
-
|
|
198
|
+
say(chalk.gray(`Files: ${projectFileCount} project .sysml files\n`));
|
|
199
|
+
// 5. The model stage 1 built from its handoff.
|
|
200
|
+
const model = stage1.model;
|
|
201
|
+
say(chalk.cyan(`Model: ${model.elements.size} elements, ${model.relationships.length} relationships\n`));
|
|
202
|
+
// A short-name collision belongs in this report for exactly the reason a
|
|
203
|
+
// parse error does: an element the project declared is not in the model, so
|
|
204
|
+
// every number below is computed over less than the source says.
|
|
205
|
+
const missingContent = new Set([ELEMENT_NAME_COLLISION, AMBIGUOUS_ELEMENT_REFERENCE]);
|
|
206
|
+
const diagnostics = [
|
|
207
|
+
...parseErrors,
|
|
208
|
+
...model.errors.filter(e => e.code !== undefined && missingContent.has(e.code) && isProjectFile(e.file)),
|
|
209
|
+
];
|
|
210
|
+
// Every other finding the builder raised: an edge whose end is the wrong
|
|
211
|
+
// kind, an end that names nothing, a relationship name used twice. The
|
|
212
|
+
// model loaded; it says something the ontology does not allow. These were
|
|
213
|
+
// computed on every build and read by no command until 2026-09-25, when
|
|
214
|
+
// surfacing them found 72 across three shipped examples. `model.errors`
|
|
215
|
+
// begins with the parse errors it was given, which carry no code, so the
|
|
216
|
+
// code is what tells a builder finding apart.
|
|
217
|
+
const modelFindings = model.errors.filter(e => e.code !== undefined && !missingContent.has(e.code) && isProjectFile(e.file));
|
|
218
|
+
// A file the parser rejected declares less of the model than it says it
|
|
219
|
+
// does, so every number below it — completeness, rules passed, violations
|
|
220
|
+
// — is computed over a model that is missing content. Reported quietly,
|
|
221
|
+
// that reads as PROGRESS: the elements carrying violations never loaded,
|
|
222
|
+
// so the violation total FALLS. Measured 2026-09-19, one file with 805
|
|
223
|
+
// parse errors built 2 elements instead of 124 and validate said "92%
|
|
224
|
+
// complete, 1583 violations, 32 rules passed", down from 1595 — and the
|
|
225
|
+
// drop was committed as work that had not landed.
|
|
226
|
+
//
|
|
227
|
+
// So it is printed before any of those numbers, and it fails the command.
|
|
228
|
+
reportParseErrors(diagnostics, projectRoot, say);
|
|
229
|
+
reportModelFindings(modelFindings, projectRoot, say);
|
|
230
|
+
// A selector naming a kind, relationship or attribute the ontology never
|
|
231
|
+
// declared matches nothing — in this model and in every other one, which is
|
|
232
|
+
// why it survives review: an empty view looks exactly like an empty model.
|
|
233
|
+
// Reported here, next to the parse errors, because both mean the report
|
|
234
|
+
// below describes something other than what the source says.
|
|
235
|
+
const selectorDiagnostics = checkSelectorVocabulary(model, {
|
|
236
|
+
kindRegistry: ontologyRegistries?.kindRegistry,
|
|
237
|
+
relationshipRegistry: ontologyRegistries?.relationshipRegistry,
|
|
238
|
+
});
|
|
239
|
+
reportSelectorDiagnostics(selectorDiagnostics, projectRoot, say);
|
|
114
240
|
// Record the identities this build assigned. `validate` is the command that
|
|
115
241
|
// runs most, so it is where a project first acquires memo.identity.yaml;
|
|
116
242
|
// without this the registry would only appear on a pack or an Architect
|
|
117
243
|
// build, and every validate in between would re-mint identities.
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
244
|
+
if (!options?.readOnly)
|
|
245
|
+
try {
|
|
246
|
+
const assigned = {};
|
|
247
|
+
for (const el of model.elements.values()) {
|
|
248
|
+
if (!el.shortId && !el.uuid)
|
|
249
|
+
continue;
|
|
250
|
+
// Another package owns a dependency's identities; this model's registry does not hold them.
|
|
251
|
+
if (el.provenance?.declaration.origin === 'dependency')
|
|
252
|
+
continue;
|
|
253
|
+
assigned[identityKey(el)] = { shortId: el.shortId, uuid: el.uuid };
|
|
254
|
+
}
|
|
255
|
+
writeIdentityRegistry(projectRoot, assigned, config.priorIdentities ?? {});
|
|
256
|
+
}
|
|
257
|
+
catch {
|
|
258
|
+
// A read-only checkout still validates; it just cannot record identities.
|
|
124
259
|
}
|
|
125
|
-
writeIdentityRegistry(projectRoot, assigned, config.priorIdentities ?? {});
|
|
126
|
-
}
|
|
127
|
-
catch {
|
|
128
|
-
// A read-only checkout still validates; it just cannot record identities.
|
|
129
|
-
}
|
|
130
260
|
// 6. Validate — native ontology constraints (constraint def bodies) + structural checks.
|
|
131
|
-
//
|
|
132
|
-
//
|
|
261
|
+
// The compiler's handoff carries the ontology, so its rules are read from
|
|
262
|
+
// that handoff.
|
|
133
263
|
const constraintDiagnostics = [];
|
|
134
|
-
const
|
|
264
|
+
const stage1Api = stage1.api;
|
|
265
|
+
// The rules resolution loads: the ontology's and the project's own.
|
|
266
|
+
const loaded = resolution ? resolutionLoads(resolution) : () => true;
|
|
267
|
+
const ruleFileLoaded = (file) => loaded(file) || isProjectFile(file);
|
|
268
|
+
const nativeConstraints = collectApiConstraints(stage1Api, constraintDiagnostics, resolution?.filePackages, ruleFileLoaded);
|
|
135
269
|
if (nativeConstraints.length > 0) {
|
|
136
|
-
|
|
270
|
+
say(chalk.gray(`Native constraints: ${nativeConstraints.length} (from ${compiler}'s handoff)`));
|
|
137
271
|
}
|
|
138
272
|
// A rule that failed to load is a check that is not running. Report it
|
|
139
273
|
// prominently: silence here reads as "all rules passed".
|
|
140
274
|
if (constraintDiagnostics.length > 0) {
|
|
141
|
-
|
|
275
|
+
say(chalk.red(`\n⚠ ${constraintDiagnostics.length} rule(s) could not be loaded and are NOT being evaluated:`));
|
|
142
276
|
for (const d of constraintDiagnostics) {
|
|
143
|
-
|
|
144
|
-
|
|
277
|
+
say(chalk.red(` ${d.ruleId} (${d.file})`));
|
|
278
|
+
say(chalk.gray(` ${d.message}`));
|
|
145
279
|
}
|
|
146
|
-
|
|
280
|
+
say('');
|
|
147
281
|
}
|
|
148
282
|
// 6a. Effective methodology and the deterministic effective rule set.
|
|
149
|
-
|
|
150
|
-
// than the import closure on purpose: a package the project resolved is
|
|
151
|
-
// resolved in full, and whether the methodology selects it is the next
|
|
152
|
-
// question, not this one.
|
|
153
|
-
const availablePackages = new Set(resolution?.filePackages.values() ?? []);
|
|
154
|
-
const effectiveMethodology = resolveEffectiveMethodology(resolution?.binding, resolution?.methodologies ?? new Map(), availablePackages);
|
|
283
|
+
const effectiveMethodology = resolveEffectiveMethodology(resolution?.binding, resolution?.methodologies ?? new Map(), resolution?.publicImports ?? new Map());
|
|
155
284
|
const scope = buildEffectiveScope(effectiveMethodology);
|
|
156
|
-
|
|
157
|
-
|
|
285
|
+
// A methodology diagnostic is not advisory either. A module, layer or base
|
|
286
|
+
// the methodology names and the project cannot resolve selects nothing, so
|
|
287
|
+
// the rule set that ran is not the one the methodology describes, and a
|
|
288
|
+
// narrower rule set reads exactly like a cleaner model. It fails the run
|
|
289
|
+
// the way a rule-resolution diagnostic does.
|
|
290
|
+
if (effectiveMethodology.diagnostics.length > 0) {
|
|
291
|
+
say(chalk.red.bold(`\nMethodology resolution (${effectiveMethodology.diagnostics.length}):`));
|
|
292
|
+
for (const d of effectiveMethodology.diagnostics) {
|
|
293
|
+
say(chalk.red(` ${d.code}: ${d.message}`));
|
|
294
|
+
}
|
|
295
|
+
say();
|
|
296
|
+
exitCode = 1;
|
|
158
297
|
}
|
|
159
|
-
// Rule activation is shared with `memo rules
|
|
298
|
+
// Rule activation is shared with `memo validate --rules` so the two commands
|
|
160
299
|
// cannot report different rule sets for one project.
|
|
161
300
|
const ruleFileToPackage = resolution?.filePackages ?? new Map();
|
|
162
301
|
const kindRegistry = ontologyRegistries?.kindRegistry;
|
|
163
|
-
const
|
|
164
|
-
|
|
302
|
+
const { rules: effectiveRules } = resolveProjectRules({
|
|
303
|
+
constraints: nativeConstraints,
|
|
304
|
+
effective: effectiveMethodology,
|
|
305
|
+
filePackages: ruleFileToPackage,
|
|
306
|
+
kindSourceFile: kindName => kindRegistry?.getKind(kindName)?.sourceFile,
|
|
307
|
+
isOwnFile: isProjectFile,
|
|
308
|
+
});
|
|
165
309
|
// A rule-resolution diagnostic is not advisory. A policy that targets a
|
|
166
310
|
// rule that is not there, or tries to disable an invariant, means the
|
|
167
311
|
// effective rule set is not the one the methodology describes.
|
|
168
312
|
if (effectiveRules.diagnostics.length > 0) {
|
|
169
|
-
|
|
313
|
+
say(chalk.red.bold(`\nRule resolution (${effectiveRules.diagnostics.length}):`));
|
|
170
314
|
for (const d of effectiveRules.diagnostics) {
|
|
171
|
-
|
|
315
|
+
say(chalk.red(` ${d.code}${d.ruleId ? ` [${d.ruleId}]` : ''}: ${d.message}`));
|
|
172
316
|
}
|
|
173
|
-
|
|
174
|
-
|
|
317
|
+
say();
|
|
318
|
+
exitCode = 1;
|
|
175
319
|
}
|
|
176
320
|
const disabled = effectiveRules.rules.filter(r => r.disposition !== 'enabled');
|
|
177
321
|
if (disabled.length > 0) {
|
|
178
|
-
|
|
322
|
+
say(chalk.gray(`Tailored rules (${disabled.length}):`));
|
|
179
323
|
for (const r of disabled) {
|
|
180
324
|
const chain = r.policyChain.map(p => `${p.level}:${p.source}`).join(' → ');
|
|
181
|
-
|
|
325
|
+
say(chalk.gray(` ${r.sourceRuleId} ${r.disposition} by ${chain}`));
|
|
182
326
|
if (r.rationaleText)
|
|
183
|
-
|
|
327
|
+
say(chalk.gray(` ${r.rationaleText}`));
|
|
184
328
|
}
|
|
185
|
-
|
|
329
|
+
say();
|
|
186
330
|
}
|
|
187
331
|
// Rules evaluate over in-scope elements only.
|
|
188
332
|
//
|
|
@@ -198,27 +342,56 @@ export async function validateCommand(projectDir, options) {
|
|
|
198
342
|
// Scope decides which elements rules RUN ON. It must not touch the model:
|
|
199
343
|
// see narrowToScope below for what happened when it did.
|
|
200
344
|
const inScopeIds = scope.mode === 'allAvailable' ? undefined : scopeElementIds(model);
|
|
201
|
-
|
|
202
|
-
|
|
345
|
+
// `--workspace` is a second, independent narrowing of the subjects (see WorkspaceScope). It is
|
|
346
|
+
// refused outright when it cannot be honoured: a workspace that is unknown, or empty, would
|
|
347
|
+
// otherwise print "0 violations", which reads exactly like a clean model.
|
|
348
|
+
// What each workspace holds: also what the system boundary rule (CR-ONT-087) judges.
|
|
349
|
+
const membership = ontologyRegistries?.kindRegistry && ontologyRegistries.relationshipRegistry
|
|
350
|
+
? computeWorkspaceMembership(model, ontologyRegistries)
|
|
351
|
+
: undefined;
|
|
352
|
+
let workspace;
|
|
353
|
+
const requestedWorkspace = typeof options?.workspace === 'string' ? options.workspace : undefined;
|
|
354
|
+
if (requestedWorkspace !== undefined) {
|
|
355
|
+
if (!membership) {
|
|
356
|
+
io.err(chalk.red('\n❌ --workspace needs the ontology registries the model was built with.\n'));
|
|
357
|
+
throw new ValidationExit(1);
|
|
358
|
+
}
|
|
359
|
+
const selection = selectWorkspace(model, membership, requestedWorkspace);
|
|
360
|
+
if (!selection.ok) {
|
|
361
|
+
io.err(chalk.red(`\n❌ --workspace: ${selection.message}\n`));
|
|
362
|
+
throw new ValidationExit(1);
|
|
363
|
+
}
|
|
364
|
+
workspace = selection.scope;
|
|
365
|
+
if (workspace.subjects.size === 0) {
|
|
366
|
+
io.err(chalk.red(`\n❌ --workspace: the workspace "${workspace.name}" holds no elements.\n`));
|
|
367
|
+
throw new ValidationExit(1);
|
|
368
|
+
}
|
|
369
|
+
say(chalk.gray(`Workspace: ${workspace.name} (${workspace.scope}) — ${workspace.subjects.size} elements; rules run on these over the whole model\n`));
|
|
370
|
+
}
|
|
371
|
+
const subjectModel = scope.mode === 'allAvailable' && !workspace ? model : narrowToScope(model);
|
|
372
|
+
const result = validateModel(model, effectiveRules.activeConstraints, ontologyRegistries?.kindRegistry, effectiveRules.rules, inScopeIds && (element => inScopeIds.has(element.id)), workspace, membership);
|
|
203
373
|
// Completeness reports on what the methodology selected, which is the
|
|
204
374
|
// scoped model — not on content the project deliberately excluded.
|
|
205
375
|
const completeness = computeCompleteness(subjectModel, result);
|
|
206
|
-
/**
|
|
376
|
+
/** Subject ids the methodology selected: elements, and named typed edges. */
|
|
207
377
|
function scopeElementIds(full) {
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
const sourceFile = kindRegistry?.getKind(element.kind)?.sourceFile;
|
|
378
|
+
return scopedSubjectIds(full, kind => {
|
|
379
|
+
const sourceFile = kindRegistry?.getKind(kind)?.sourceFile;
|
|
211
380
|
const declaringPackage = sourceFile ? ruleFileToPackage.get(sourceFile) : undefined;
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
}
|
|
215
|
-
return ids;
|
|
381
|
+
return !declaringPackage || isRulePackageInScope(scope, declaringPackage);
|
|
382
|
+
});
|
|
216
383
|
}
|
|
217
384
|
// Still used for the COMPLETENESS report, which is a statement about what
|
|
218
385
|
// the methodology selected. Rules no longer see it — see the note inside.
|
|
219
386
|
function narrowToScope(full) {
|
|
220
387
|
const kept = new Map();
|
|
221
388
|
for (const [id, element] of full.elements) {
|
|
389
|
+
if (workspace && !workspace.subjects.has(id))
|
|
390
|
+
continue;
|
|
391
|
+
if (scope.mode === 'allAvailable') {
|
|
392
|
+
kept.set(id, element);
|
|
393
|
+
continue;
|
|
394
|
+
}
|
|
222
395
|
const sourceFile = kindRegistry?.getKind(element.kind)?.sourceFile;
|
|
223
396
|
const declaringPackage = sourceFile ? ruleFileToPackage.get(sourceFile) : undefined;
|
|
224
397
|
// A kind the resolved ontology does not declare is project-local
|
|
@@ -226,52 +399,7 @@ export async function validateCommand(projectDir, options) {
|
|
|
226
399
|
if (!declaringPackage || isRulePackageInScope(scope, declaringPackage))
|
|
227
400
|
kept.set(id, element);
|
|
228
401
|
}
|
|
229
|
-
|
|
230
|
-
const byLayer = new Map();
|
|
231
|
-
for (const element of kept.values()) {
|
|
232
|
-
(byKind.get(element.kind) ?? byKind.set(element.kind, []).get(element.kind)).push(element);
|
|
233
|
-
(byLayer.get(element.layer) ?? byLayer.set(element.layer, []).get(element.layer)).push(element);
|
|
234
|
-
}
|
|
235
|
-
// Narrow the SUBJECT SET, not the graph.
|
|
236
|
-
//
|
|
237
|
-
// This used to drop out-of-scope elements from `elements` and filter
|
|
238
|
-
// `relationships` to edges with both endpoints kept — while leaving
|
|
239
|
-
// `outgoing`, `incoming` and `relationshipsByType` pointing at the FULL
|
|
240
|
-
// model. The result was a model that contradicted itself, and every
|
|
241
|
-
// rule that NAVIGATES a trace silently saw nothing: `navigate` looks the
|
|
242
|
-
// far endpoint up in `elements`, so an edge to a dropped element
|
|
243
|
-
// returned no result.
|
|
244
|
-
//
|
|
245
|
-
// Measured on gpca-pump (2026-08-19): 374 of 723 elements dropped, and
|
|
246
|
-
// ALL 110 `satisfiedBy` edges lost an endpoint — every architecture
|
|
247
|
-
// element went, because `filePackages` maps every file, so the
|
|
248
|
-
// module-scope test was applied to architecture kinds that
|
|
249
|
-
// `includedLayer` governs instead. XL-002 then reported 89 requirements
|
|
250
|
-
// as lacking requirements-to-architecture traceability that the source
|
|
251
|
-
// plainly traces.
|
|
252
|
-
//
|
|
253
|
-
// The comment above already said the intent: "only the subject set
|
|
254
|
-
// narrows". `subjectsForScope` reads `elementsByKind`, so narrowing
|
|
255
|
-
// that alone is both sufficient and consistent.
|
|
256
|
-
const relationships = full.relationships.filter(r => kept.has(r.sourceId) && kept.has(r.targetId));
|
|
257
|
-
const relationshipsByType = new Map();
|
|
258
|
-
const outgoing = new Map();
|
|
259
|
-
const incoming = new Map();
|
|
260
|
-
for (const r of relationships) {
|
|
261
|
-
(relationshipsByType.get(r.type) ?? relationshipsByType.set(r.type, []).get(r.type)).push(r);
|
|
262
|
-
(outgoing.get(r.sourceId) ?? outgoing.set(r.sourceId, []).get(r.sourceId)).push(r);
|
|
263
|
-
(incoming.get(r.targetId) ?? incoming.set(r.targetId, []).get(r.targetId)).push(r);
|
|
264
|
-
}
|
|
265
|
-
return {
|
|
266
|
-
...full,
|
|
267
|
-
elements: kept,
|
|
268
|
-
elementsByKind: byKind,
|
|
269
|
-
elementsByLayer: byLayer,
|
|
270
|
-
relationships,
|
|
271
|
-
relationshipsByType,
|
|
272
|
-
outgoing,
|
|
273
|
-
incoming,
|
|
274
|
-
};
|
|
402
|
+
return narrowModel(full, kept);
|
|
275
403
|
}
|
|
276
404
|
const errors = result.violations.filter(v => v.severity === 'error');
|
|
277
405
|
const warnings = result.violations.filter(v => v.severity === 'warning');
|
|
@@ -282,27 +410,29 @@ export async function validateCommand(projectDir, options) {
|
|
|
282
410
|
const sysmlErrors = countBySeverity(sysmlDiagnostics).error;
|
|
283
411
|
// ─── Output format dispatch ──────────────────────────────────────────────
|
|
284
412
|
if (format === 'junit') {
|
|
285
|
-
const xml = generateJUnit(result, completeness, config.
|
|
413
|
+
const xml = generateJUnit(result, completeness, config.modelName || 'memo', diagnostics, modelFindings);
|
|
286
414
|
if (options?.output) {
|
|
287
415
|
writeFileSync(resolve(cwd, options.output), xml);
|
|
288
|
-
|
|
416
|
+
io.out(chalk.green(`JUnit XML written to ${options.output}`));
|
|
289
417
|
}
|
|
290
418
|
else {
|
|
291
|
-
|
|
419
|
+
io.write(xml);
|
|
292
420
|
}
|
|
293
|
-
if (
|
|
294
|
-
|
|
295
|
-
return;
|
|
421
|
+
if (failed())
|
|
422
|
+
exitCode = 1;
|
|
423
|
+
return exitCode;
|
|
296
424
|
}
|
|
297
425
|
if (format === 'json') {
|
|
298
426
|
const jsonOutput = {
|
|
299
|
-
|
|
427
|
+
modelName: config.modelName,
|
|
428
|
+
projectName: config.modelName, // deprecated alias, deleted in 0.15.0
|
|
300
429
|
timestamp: new Date().toISOString(),
|
|
301
430
|
summary: {
|
|
302
431
|
elements: model.elements.size,
|
|
303
432
|
relationships: model.relationships.length,
|
|
304
433
|
rulesEvaluated: result.rulesEvaluated,
|
|
305
434
|
rulesPassed: result.rulesPassed,
|
|
435
|
+
rulesVacuous: result.rulesVacuous,
|
|
306
436
|
violations: result.violations.length,
|
|
307
437
|
errors: errors.length,
|
|
308
438
|
warnings: warnings.length,
|
|
@@ -310,13 +440,16 @@ export async function validateCommand(projectDir, options) {
|
|
|
310
440
|
completeness: completeness.overall,
|
|
311
441
|
rulesNotLoaded: constraintDiagnostics.length,
|
|
312
442
|
sysmlErrors,
|
|
443
|
+
parseErrors: diagnostics.length,
|
|
444
|
+
filesNotParsed: filesWithParseErrors(diagnostics).size,
|
|
445
|
+
modelFindings: modelFindings.length,
|
|
313
446
|
},
|
|
447
|
+
parseErrors: diagnostics,
|
|
448
|
+
modelFindings,
|
|
314
449
|
rulesNotLoaded: constraintDiagnostics,
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
packager: effectiveToolchain.packager,
|
|
319
|
-
},
|
|
450
|
+
// The roles the settings fill; a packager is named only by a
|
|
451
|
+
// project that packages.
|
|
452
|
+
toolchain: Object.fromEntries(effectiveToolchain.selections.map(s => [s.role === 'package' ? 'packager' : s.role, s.provider])),
|
|
320
453
|
diagnostics: sysmlDiagnostics,
|
|
321
454
|
violations: result.violations.map(v => ({
|
|
322
455
|
ruleId: v.ruleId,
|
|
@@ -343,14 +476,14 @@ export async function validateCommand(projectDir, options) {
|
|
|
343
476
|
const jsonStr = JSON.stringify(jsonOutput, null, 2);
|
|
344
477
|
if (options?.output) {
|
|
345
478
|
writeFileSync(resolve(cwd, options.output), jsonStr);
|
|
346
|
-
|
|
479
|
+
io.out(chalk.green(`JSON report written to ${options.output}`));
|
|
347
480
|
}
|
|
348
481
|
else {
|
|
349
|
-
|
|
482
|
+
io.write(jsonStr + '\n');
|
|
350
483
|
}
|
|
351
|
-
if (
|
|
352
|
-
|
|
353
|
-
return;
|
|
484
|
+
if (failed())
|
|
485
|
+
exitCode = 1;
|
|
486
|
+
return exitCode;
|
|
354
487
|
}
|
|
355
488
|
// ─── Default text output ─────────────────────────────────────────────────
|
|
356
489
|
// GNU one-liners, so an editor or CI annotator that already understands
|
|
@@ -358,59 +491,157 @@ export async function validateCommand(projectDir, options) {
|
|
|
358
491
|
// MEMO. The trailing `[domain/provider]` is additive.
|
|
359
492
|
if (sysmlDiagnostics.length > 0) {
|
|
360
493
|
const counts = countBySeverity(sysmlDiagnostics);
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
494
|
+
io.out(chalk.red.bold(`SysML diagnostics (${counts.error} error, ${counts.warning} warning, ${counts.info} info):`));
|
|
495
|
+
io.out(formatDiagnosticsText(sysmlDiagnostics));
|
|
496
|
+
io.out();
|
|
364
497
|
}
|
|
365
498
|
if (errors.length > 0) {
|
|
366
|
-
|
|
499
|
+
io.out(chalk.red.bold(`Errors (${errors.length}):`));
|
|
367
500
|
for (const v of errors) {
|
|
368
|
-
|
|
501
|
+
io.out(chalk.red(` ✖ [${v.ruleId}] ${v.elementKind}/${v.elementName}: ${v.description}`));
|
|
369
502
|
}
|
|
370
|
-
|
|
503
|
+
io.out();
|
|
371
504
|
}
|
|
372
505
|
if (warnings.length > 0) {
|
|
373
|
-
|
|
506
|
+
io.out(chalk.yellow.bold(`Warnings (${warnings.length}):`));
|
|
374
507
|
for (const v of warnings) {
|
|
375
|
-
|
|
508
|
+
io.out(chalk.yellow(` ⚠ [${v.ruleId}] ${v.elementKind}/${v.elementName}: ${v.description}`));
|
|
376
509
|
}
|
|
377
|
-
|
|
510
|
+
io.out();
|
|
378
511
|
}
|
|
379
512
|
if (infos.length > 0) {
|
|
380
|
-
|
|
513
|
+
io.out(chalk.blue.bold(`Info (${infos.length}):`));
|
|
381
514
|
for (const v of infos) {
|
|
382
|
-
|
|
515
|
+
io.out(chalk.blue(` ℹ [${v.ruleId}] ${v.elementKind}/${v.elementName}: ${v.description}`));
|
|
383
516
|
}
|
|
384
|
-
|
|
517
|
+
io.out();
|
|
385
518
|
}
|
|
386
|
-
|
|
519
|
+
io.out(chalk.bold('Completeness by Layer:'));
|
|
387
520
|
for (const layer of completeness.layers) {
|
|
388
521
|
if (layer.totalElements === 0)
|
|
389
522
|
continue;
|
|
390
523
|
const pct = layer.percentage;
|
|
391
524
|
const color = pct >= 80 ? chalk.green : pct >= 50 ? chalk.yellow : chalk.red;
|
|
392
525
|
const bar = makeBar(pct);
|
|
393
|
-
|
|
526
|
+
io.out(` ${layer.layerLabel.padEnd(22)} ${color(bar)} ${color(`${pct}%`)} (${layer.completeElements}/${layer.totalElements})`);
|
|
394
527
|
}
|
|
395
|
-
|
|
528
|
+
io.out();
|
|
396
529
|
const overallColor = completeness.overall >= 80 ? chalk.green : completeness.overall >= 50 ? chalk.yellow : chalk.red;
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
530
|
+
io.out(chalk.bold(`Overall: ${overallColor(completeness.overall + '%')} (${completeness.completeElements}/${completeness.totalElements} elements complete)`));
|
|
531
|
+
io.out(chalk.gray(`Rules: ${result.rulesEvaluated} evaluated, ${result.rulesPassed} passed, `
|
|
532
|
+
+ `${result.rulesVacuous} ran on no subject, ${result.violations.length} violations`));
|
|
533
|
+
const parseErrorFiles = filesWithParseErrors(diagnostics).size;
|
|
534
|
+
io.out((diagnostics.length > 0 ? chalk.red : chalk.gray)(`Parse errors: ${diagnostics.length}`
|
|
535
|
+
+ (diagnostics.length > 0
|
|
536
|
+
? ` in ${parseErrorFiles} file(s) \u2014 this report describes an incomplete model`
|
|
537
|
+
: '')));
|
|
538
|
+
io.out((modelFindings.length > 0 ? chalk.red : chalk.gray)(`Model findings: ${modelFindings.length}`));
|
|
539
|
+
io.out();
|
|
540
|
+
if (failed()) {
|
|
541
|
+
exitCode = 1;
|
|
401
542
|
}
|
|
543
|
+
return exitCode;
|
|
544
|
+
/**
|
|
545
|
+
* Whether this run is a failure.
|
|
546
|
+
*
|
|
547
|
+
* A parse error counts, and it counts first: a source file the parser
|
|
548
|
+
* rejected cannot produce a success verdict, however healthy the numbers
|
|
549
|
+
* computed from what did load happen to look.
|
|
550
|
+
*/
|
|
551
|
+
function failed() {
|
|
552
|
+
return errors.length > 0 || sysmlErrors > 0 || diagnostics.length > 0
|
|
553
|
+
|| modelFindings.length > 0 || selectorDiagnostics.length > 0;
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
/** Parse errors grouped by the file that produced them. */
|
|
557
|
+
function filesWithParseErrors(parseErrors) {
|
|
558
|
+
const byFile = new Map();
|
|
559
|
+
for (const e of parseErrors)
|
|
560
|
+
byFile.set(e.file, (byFile.get(e.file) ?? 0) + 1);
|
|
561
|
+
return byFile;
|
|
562
|
+
}
|
|
563
|
+
/** How many individual errors are listed before the rest are summarised. */
|
|
564
|
+
const PARSE_ERRORS_LISTED = 10;
|
|
565
|
+
function reportParseErrors(parseErrors, projectRoot, say) {
|
|
566
|
+
if (parseErrors.length === 0)
|
|
567
|
+
return;
|
|
568
|
+
const show = (file) => (file.startsWith(projectRoot) ? relative(projectRoot, file) : file);
|
|
569
|
+
const byFile = filesWithParseErrors(parseErrors);
|
|
570
|
+
say(chalk.red.bold(`\u26d4 ${parseErrors.length} parse error(s) in ${byFile.size} file(s). `
|
|
571
|
+
+ 'Whatever those files declare past the error is missing from the model, '
|
|
572
|
+
+ 'so every count below is a count of less than the project:'));
|
|
573
|
+
for (const [file, count] of byFile) {
|
|
574
|
+
say(chalk.red(` ${show(file)} (${count})`));
|
|
575
|
+
}
|
|
576
|
+
// GNU one-liners, the same prefix the SysML diagnostics use, so an editor
|
|
577
|
+
// or CI annotator picks them up without knowing anything about MEMO.
|
|
578
|
+
for (const e of parseErrors.slice(0, PARSE_ERRORS_LISTED)) {
|
|
579
|
+
// A message may name a second location of its own — the other half of
|
|
580
|
+
// a short-name collision does — so the same relativization is applied
|
|
581
|
+
// inside it. An absolute path from a build machine is noise in a report
|
|
582
|
+
// read next to relative ones.
|
|
583
|
+
const message = e.message.split(`${projectRoot}/`).join('');
|
|
584
|
+
say(chalk.gray(` ${show(e.file)}:${e.line ?? 1}:${e.column ?? 1}: error: ${message}`));
|
|
585
|
+
}
|
|
586
|
+
if (parseErrors.length > PARSE_ERRORS_LISTED) {
|
|
587
|
+
say(chalk.gray(` \u2026 and ${parseErrors.length - PARSE_ERRORS_LISTED} more`));
|
|
588
|
+
}
|
|
589
|
+
say('');
|
|
590
|
+
}
|
|
591
|
+
/**
|
|
592
|
+
* Print every builder finding on a model that did load.
|
|
593
|
+
*
|
|
594
|
+
* All of them, with no elision, for the reason the selector list has none:
|
|
595
|
+
* each one is an edge to fix, and "and 57 more" is how 67 of them went
|
|
596
|
+
* unread in the first place.
|
|
597
|
+
*/
|
|
598
|
+
function reportModelFindings(findings, projectRoot, say) {
|
|
599
|
+
if (findings.length === 0)
|
|
600
|
+
return;
|
|
601
|
+
const show = (file) => (file.startsWith(projectRoot) ? relative(projectRoot, file) : file);
|
|
602
|
+
say(chalk.red.bold(`\u26d4 ${findings.length} model finding(s). The model loaded, and says something `
|
|
603
|
+
+ 'the ontology does not allow:'));
|
|
604
|
+
for (const f of findings) {
|
|
605
|
+
const message = f.message.split(`${projectRoot}/`).join('');
|
|
606
|
+
say(chalk.gray(` ${show(f.file)}:${f.line ?? 1}:${f.column ?? 1}: error: ${message} [${f.code}]`));
|
|
607
|
+
}
|
|
608
|
+
say('');
|
|
609
|
+
}
|
|
610
|
+
/**
|
|
611
|
+
* Print every selector that names something no resolved ontology declares.
|
|
612
|
+
*
|
|
613
|
+
* All of them, with no elision: the list is short by construction — a selector
|
|
614
|
+
* is written by hand — and the whole value of the check is that the offending
|
|
615
|
+
* name is spelled out next to where it was written.
|
|
616
|
+
*/
|
|
617
|
+
function reportSelectorDiagnostics(selectorDiagnostics, projectRoot, say) {
|
|
618
|
+
if (selectorDiagnostics.length === 0)
|
|
619
|
+
return;
|
|
620
|
+
const show = (file) => (file.startsWith(projectRoot) ? relative(projectRoot, file) : file);
|
|
621
|
+
say(chalk.red.bold(`\u26d4 ${selectorDiagnostics.length} selector(s) name vocabulary no resolved ontology `
|
|
622
|
+
+ 'declares. Each one matches nothing, whatever the model contains:'));
|
|
623
|
+
for (const d of selectorDiagnostics) {
|
|
624
|
+
say(chalk.gray(` ${show(d.file)}: error: ${d.message}`));
|
|
625
|
+
}
|
|
626
|
+
say('');
|
|
402
627
|
}
|
|
403
628
|
// ─── JUnit XML Generator ─────────────────────────────────────────────────────
|
|
404
|
-
function generateJUnit(result, completeness,
|
|
629
|
+
function generateJUnit(result, completeness, modelName, parseErrors = [], modelFindings = []) {
|
|
405
630
|
const escXml = (s) => s.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"');
|
|
406
631
|
const errors = result.violations.filter(v => v.severity === 'error');
|
|
407
632
|
const warnings = result.violations.filter(v => v.severity === 'warning');
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
633
|
+
// A file that did not parse is its own failed test. Counted only through
|
|
634
|
+
// the rules, a green suite would report on a model missing the content
|
|
635
|
+
// that file declares.
|
|
636
|
+
const parseErrorFiles = [...filesWithParseErrors(parseErrors)];
|
|
637
|
+
const allTests = result.rulesEvaluated + parseErrorFiles.length + modelFindings.length;
|
|
638
|
+
const failures = errors.length + parseErrorFiles.length + modelFindings.length;
|
|
639
|
+
// A rule that ran on no subject tested nothing. It is reported as skipped
|
|
640
|
+
// so a CI dashboard cannot count it towards the green.
|
|
641
|
+
const skipped = result.rulesVacuous;
|
|
411
642
|
const lines = [
|
|
412
643
|
'<?xml version="1.0" encoding="UTF-8"?>',
|
|
413
|
-
`<testsuites name="${escXml(
|
|
644
|
+
`<testsuites name="${escXml(modelName)}" tests="${allTests}" failures="${failures}" errors="0" skipped="${skipped}" timestamp="${new Date().toISOString()}">`,
|
|
414
645
|
` <testsuite name="closure-rules" tests="${allTests}" failures="${failures}" errors="0" skipped="${skipped}">`,
|
|
415
646
|
` <properties>`,
|
|
416
647
|
` <property name="completeness" value="${completeness.overall}%" />`,
|
|
@@ -418,6 +649,21 @@ function generateJUnit(result, completeness, projectName) {
|
|
|
418
649
|
` <property name="warnings" value="${warnings.length}" />`,
|
|
419
650
|
` </properties>`,
|
|
420
651
|
];
|
|
652
|
+
for (const [file, count] of parseErrorFiles) {
|
|
653
|
+
const message = `${count} parse error(s); this file's content is missing from the model`;
|
|
654
|
+
lines.push(` <testcase classname="parse" name="${escXml(file)}">`);
|
|
655
|
+
lines.push(` <failure message="${escXml(message)}" type="PARSE_ERROR">`);
|
|
656
|
+
for (const e of parseErrors.filter(e => e.file === file)) {
|
|
657
|
+
lines.push(` ${escXml(`${e.file}:${e.line ?? 1}:${e.column ?? 1}: error: ${e.message}`)}`);
|
|
658
|
+
}
|
|
659
|
+
lines.push(` </failure>`);
|
|
660
|
+
lines.push(` </testcase>`);
|
|
661
|
+
}
|
|
662
|
+
for (const f of modelFindings) {
|
|
663
|
+
lines.push(` <testcase classname="model.${escXml(f.code ?? 'finding')}" name="${escXml(`${f.file}:${f.line ?? 1}`)}">`);
|
|
664
|
+
lines.push(` <failure message="${escXml(f.message)}" type="${escXml(f.code ?? 'MODEL_FINDING')}" />`);
|
|
665
|
+
lines.push(` </testcase>`);
|
|
666
|
+
}
|
|
421
667
|
// Each violation becomes a test case
|
|
422
668
|
for (const v of result.violations) {
|
|
423
669
|
const className = `${v.elementKind}.${escXml(v.elementName)}`;
|