@memoarchitect/tools 0.6.7 → 0.8.7
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 +36 -11
- package/corpus/README.md +63 -0
- package/corpus/sysml-v2-release/bnf/SysML-graphical-bnf.kgbnf +2264 -0
- package/package.json +20 -7
- package/packages/tools/lib/analysis/dsm.d.ts +1 -1
- package/packages/tools/lib/analysis/dsm.d.ts.map +1 -1
- package/packages/tools/lib/analysis/dsm.js +1 -1
- package/packages/tools/lib/analysis/dsm.js.map +1 -1
- package/packages/tools/lib/bin/memo.js +186 -10
- package/packages/tools/lib/bin/memo.js.map +1 -1
- package/packages/tools/lib/browser/index.d.ts +3 -1
- package/packages/tools/lib/browser/index.d.ts.map +1 -1
- package/packages/tools/lib/browser/index.js +2 -1
- package/packages/tools/lib/browser/index.js.map +1 -1
- package/packages/tools/lib/commands/ask.js +1 -1
- package/packages/tools/lib/commands/ask.js.map +1 -1
- package/packages/tools/lib/commands/check.d.ts.map +1 -1
- package/packages/tools/lib/commands/check.js +3 -9
- package/packages/tools/lib/commands/check.js.map +1 -1
- package/packages/tools/lib/commands/conformance.d.ts +36 -0
- package/packages/tools/lib/commands/conformance.d.ts.map +1 -0
- package/packages/tools/lib/commands/conformance.js +212 -0
- package/packages/tools/lib/commands/conformance.js.map +1 -0
- package/packages/tools/lib/commands/convert.d.ts +12 -0
- package/packages/tools/lib/commands/convert.d.ts.map +1 -0
- package/packages/tools/lib/commands/convert.js +103 -0
- package/packages/tools/lib/commands/convert.js.map +1 -0
- package/packages/tools/lib/commands/create-package.d.ts +1 -2
- package/packages/tools/lib/commands/create-package.d.ts.map +1 -1
- package/packages/tools/lib/commands/create-package.js.map +1 -1
- package/packages/tools/lib/commands/dev.d.ts +13 -0
- package/packages/tools/lib/commands/dev.d.ts.map +1 -1
- package/packages/tools/lib/commands/dev.js +245 -89
- package/packages/tools/lib/commands/dev.js.map +1 -1
- package/packages/tools/lib/commands/dhf-draft.js +1 -1
- package/packages/tools/lib/commands/dhf-draft.js.map +1 -1
- package/packages/tools/lib/commands/dhf-lint.d.ts +10 -0
- package/packages/tools/lib/commands/dhf-lint.d.ts.map +1 -0
- package/packages/tools/lib/commands/dhf-lint.js +72 -0
- package/packages/tools/lib/commands/dhf-lint.js.map +1 -0
- package/packages/tools/lib/commands/dhf-preview.js +1 -1
- package/packages/tools/lib/commands/dhf-preview.js.map +1 -1
- package/packages/tools/lib/commands/dhf.d.ts.map +1 -1
- package/packages/tools/lib/commands/dhf.js +8 -2
- package/packages/tools/lib/commands/dhf.js.map +1 -1
- package/packages/tools/lib/commands/element.d.ts +34 -0
- package/packages/tools/lib/commands/element.d.ts.map +1 -0
- package/packages/tools/lib/commands/element.js +174 -0
- package/packages/tools/lib/commands/element.js.map +1 -0
- package/packages/tools/lib/commands/export.d.ts.map +1 -1
- package/packages/tools/lib/commands/export.js +39 -40
- 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 -7
- package/packages/tools/lib/commands/generate.js.map +1 -1
- package/packages/tools/lib/commands/import.d.ts.map +1 -1
- package/packages/tools/lib/commands/import.js +25 -12
- package/packages/tools/lib/commands/import.js.map +1 -1
- package/packages/tools/lib/commands/init.d.ts.map +1 -1
- package/packages/tools/lib/commands/init.js +34 -14
- package/packages/tools/lib/commands/init.js.map +1 -1
- package/packages/tools/lib/commands/inspect.d.ts +5 -0
- package/packages/tools/lib/commands/inspect.d.ts.map +1 -0
- package/packages/tools/lib/commands/inspect.js +56 -0
- package/packages/tools/lib/commands/inspect.js.map +1 -0
- package/packages/tools/lib/commands/lock.d.ts.map +1 -1
- package/packages/tools/lib/commands/lock.js +7 -2
- package/packages/tools/lib/commands/lock.js.map +1 -1
- package/packages/tools/lib/commands/ontology.d.ts.map +1 -1
- package/packages/tools/lib/commands/ontology.js +69 -116
- package/packages/tools/lib/commands/ontology.js.map +1 -1
- package/packages/tools/lib/commands/pack.d.ts +1 -1
- package/packages/tools/lib/commands/pack.d.ts.map +1 -1
- package/packages/tools/lib/commands/pack.js +20 -78
- package/packages/tools/lib/commands/pack.js.map +1 -1
- package/packages/tools/lib/commands/package.d.ts +10 -0
- package/packages/tools/lib/commands/package.d.ts.map +1 -0
- package/packages/tools/lib/commands/package.js +113 -0
- package/packages/tools/lib/commands/package.js.map +1 -0
- package/packages/tools/lib/commands/plugin.js +1 -1
- package/packages/tools/lib/commands/plugin.js.map +1 -1
- package/packages/tools/lib/commands/rules.d.ts.map +1 -1
- package/packages/tools/lib/commands/rules.js +120 -30
- package/packages/tools/lib/commands/rules.js.map +1 -1
- package/packages/tools/lib/commands/standards.d.ts +28 -0
- package/packages/tools/lib/commands/standards.d.ts.map +1 -0
- package/packages/tools/lib/commands/standards.js +203 -0
- package/packages/tools/lib/commands/standards.js.map +1 -0
- package/packages/tools/lib/commands/sysand-publish.d.ts.map +1 -1
- package/packages/tools/lib/commands/sysand-publish.js +14 -16
- package/packages/tools/lib/commands/sysand-publish.js.map +1 -1
- package/packages/tools/lib/commands/toolchain.d.ts +8 -0
- package/packages/tools/lib/commands/toolchain.d.ts.map +1 -0
- package/packages/tools/lib/commands/toolchain.js +64 -0
- package/packages/tools/lib/commands/toolchain.js.map +1 -0
- package/packages/tools/lib/commands/validate.d.ts +1 -1
- package/packages/tools/lib/commands/validate.d.ts.map +1 -1
- package/packages/tools/lib/commands/validate.js +194 -56
- package/packages/tools/lib/commands/validate.js.map +1 -1
- package/packages/tools/lib/completeness/tracker.d.ts +10 -2
- package/packages/tools/lib/completeness/tracker.d.ts.map +1 -1
- package/packages/tools/lib/completeness/tracker.js +16 -21
- package/packages/tools/lib/completeness/tracker.js.map +1 -1
- package/packages/tools/lib/conformance/baseline.d.ts +26 -0
- package/packages/tools/lib/conformance/baseline.d.ts.map +1 -0
- package/packages/tools/lib/conformance/baseline.js +170 -0
- package/packages/tools/lib/conformance/baseline.js.map +1 -0
- package/packages/tools/lib/conformance/bnf.d.ts +84 -0
- package/packages/tools/lib/conformance/bnf.d.ts.map +1 -0
- package/packages/tools/lib/conformance/bnf.js +166 -0
- package/packages/tools/lib/conformance/bnf.js.map +1 -0
- package/packages/tools/lib/conformance/corpus.d.ts +125 -0
- package/packages/tools/lib/conformance/corpus.d.ts.map +1 -0
- package/packages/tools/lib/conformance/corpus.js +190 -0
- package/packages/tools/lib/conformance/corpus.js.map +1 -0
- package/packages/tools/lib/conformance/diff-xmi.d.ts +118 -0
- package/packages/tools/lib/conformance/diff-xmi.d.ts.map +1 -0
- package/packages/tools/lib/conformance/diff-xmi.js +276 -0
- package/packages/tools/lib/conformance/diff-xmi.js.map +1 -0
- package/packages/tools/lib/conformance/generated/syside-rules.d.ts +10 -0
- package/packages/tools/lib/conformance/generated/syside-rules.d.ts.map +1 -0
- package/packages/tools/lib/conformance/generated/syside-rules.js +1142 -0
- package/packages/tools/lib/conformance/generated/syside-rules.js.map +1 -0
- package/packages/tools/lib/conformance/index.d.ts +7 -0
- package/packages/tools/lib/conformance/index.d.ts.map +1 -0
- package/packages/tools/lib/conformance/index.js +19 -0
- package/packages/tools/lib/conformance/index.js.map +1 -0
- package/packages/tools/lib/conformance/run.d.ts +117 -0
- package/packages/tools/lib/conformance/run.d.ts.map +1 -0
- package/packages/tools/lib/conformance/run.js +0 -0
- package/packages/tools/lib/conformance/run.js.map +1 -0
- package/packages/tools/lib/conformance/xmi.d.ts +45 -0
- package/packages/tools/lib/conformance/xmi.d.ts.map +1 -0
- package/packages/tools/lib/conformance/xmi.js +148 -0
- package/packages/tools/lib/conformance/xmi.js.map +1 -0
- package/packages/tools/lib/dhf/document-compiler.d.ts.map +1 -1
- package/packages/tools/lib/dhf/document-compiler.js +13 -8
- package/packages/tools/lib/dhf/document-compiler.js.map +1 -1
- package/packages/tools/lib/dhf/document-registry.d.ts +16 -2
- package/packages/tools/lib/dhf/document-registry.d.ts.map +1 -1
- package/packages/tools/lib/dhf/document-registry.js +74 -23
- package/packages/tools/lib/dhf/document-registry.js.map +1 -1
- package/packages/tools/lib/dhf/index.d.ts +3 -0
- package/packages/tools/lib/dhf/index.d.ts.map +1 -1
- package/packages/tools/lib/dhf/index.js +4 -0
- package/packages/tools/lib/dhf/index.js.map +1 -1
- package/packages/tools/lib/dhf/query-engine.d.ts +12 -1
- package/packages/tools/lib/dhf/query-engine.d.ts.map +1 -1
- package/packages/tools/lib/dhf/query-engine.js +2 -1
- package/packages/tools/lib/dhf/query-engine.js.map +1 -1
- package/packages/tools/lib/dhf/query-executor.d.ts +72 -5
- package/packages/tools/lib/dhf/query-executor.d.ts.map +1 -1
- package/packages/tools/lib/dhf/query-executor.js +471 -81
- package/packages/tools/lib/dhf/query-executor.js.map +1 -1
- package/packages/tools/lib/dhf/script-runner.js +6 -6
- package/packages/tools/lib/dhf/script-runner.js.map +1 -1
- package/packages/tools/lib/dhf/standards-block.d.ts +40 -0
- package/packages/tools/lib/dhf/standards-block.d.ts.map +1 -0
- package/packages/tools/lib/dhf/standards-block.js +223 -0
- package/packages/tools/lib/dhf/standards-block.js.map +1 -0
- package/packages/tools/lib/dhf/standards-library.d.ts +123 -0
- package/packages/tools/lib/dhf/standards-library.d.ts.map +1 -0
- package/packages/tools/lib/dhf/standards-library.js +295 -0
- package/packages/tools/lib/dhf/standards-library.js.map +1 -0
- package/packages/tools/lib/dhf/standards-report.d.ts +189 -0
- package/packages/tools/lib/dhf/standards-report.d.ts.map +1 -0
- package/packages/tools/lib/dhf/standards-report.js +384 -0
- package/packages/tools/lib/dhf/standards-report.js.map +1 -0
- package/packages/tools/lib/dhf/template-lint.d.ts +42 -0
- package/packages/tools/lib/dhf/template-lint.d.ts.map +1 -0
- package/packages/tools/lib/dhf/template-lint.js +421 -0
- package/packages/tools/lib/dhf/template-lint.js.map +1 -0
- package/packages/tools/lib/dhf/template-resolver.d.ts.map +1 -1
- package/packages/tools/lib/dhf/template-resolver.js +18 -6
- package/packages/tools/lib/dhf/template-resolver.js.map +1 -1
- package/packages/tools/lib/import/column-mapper.d.ts +2 -2
- package/packages/tools/lib/import/column-mapper.d.ts.map +1 -1
- package/packages/tools/lib/import/column-mapper.js +3 -3
- package/packages/tools/lib/import/column-mapper.js.map +1 -1
- package/packages/tools/lib/importer/cameo-importer.js +2 -2
- 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 -3
- package/packages/tools/lib/importer/ea-importer.js.map +1 -1
- package/packages/tools/lib/importer/owl-importer.d.ts.map +1 -1
- package/packages/tools/lib/importer/owl-importer.js +2 -3
- package/packages/tools/lib/importer/owl-importer.js.map +1 -1
- package/packages/tools/lib/index.d.ts +20 -3
- package/packages/tools/lib/index.d.ts.map +1 -1
- package/packages/tools/lib/index.js +19 -2
- package/packages/tools/lib/index.js.map +1 -1
- package/packages/tools/lib/language/generated/ast.d.ts +1344 -99
- package/packages/tools/lib/language/generated/ast.d.ts.map +1 -1
- package/packages/tools/lib/language/generated/ast.js +1066 -32
- package/packages/tools/lib/language/generated/ast.js.map +1 -1
- package/packages/tools/lib/language/generated/grammar.d.ts.map +1 -1
- package/packages/tools/lib/language/generated/grammar.js +5242 -1454
- package/packages/tools/lib/language/generated/grammar.js.map +1 -1
- package/packages/tools/lib/llm/chat-engine.d.ts +4 -3
- package/packages/tools/lib/llm/chat-engine.d.ts.map +1 -1
- package/packages/tools/lib/llm/chat-engine.js +15 -12
- package/packages/tools/lib/llm/chat-engine.js.map +1 -1
- package/packages/tools/lib/llm/generate-engine.d.ts +7 -2
- package/packages/tools/lib/llm/generate-engine.d.ts.map +1 -1
- package/packages/tools/lib/llm/generate-engine.js +22 -4
- package/packages/tools/lib/llm/generate-engine.js.map +1 -1
- package/packages/tools/lib/llm/index.d.ts +1 -0
- package/packages/tools/lib/llm/index.d.ts.map +1 -1
- package/packages/tools/lib/llm/index.js +1 -0
- package/packages/tools/lib/llm/index.js.map +1 -1
- package/packages/tools/lib/llm/model-context.d.ts +2 -2
- package/packages/tools/lib/llm/model-context.d.ts.map +1 -1
- package/packages/tools/lib/llm/model-context.js +7 -13
- package/packages/tools/lib/llm/model-context.js.map +1 -1
- package/packages/tools/lib/llm/sysml-guidance.d.ts +8 -0
- package/packages/tools/lib/llm/sysml-guidance.d.ts.map +1 -0
- package/packages/tools/lib/llm/sysml-guidance.js +28 -0
- package/packages/tools/lib/llm/sysml-guidance.js.map +1 -0
- package/packages/tools/lib/lock.d.ts +14 -8
- package/packages/tools/lib/lock.d.ts.map +1 -1
- package/packages/tools/lib/lock.js +97 -108
- package/packages/tools/lib/lock.js.map +1 -1
- package/packages/tools/lib/mcp/model-loader.d.ts +3 -0
- package/packages/tools/lib/mcp/model-loader.d.ts.map +1 -1
- package/packages/tools/lib/mcp/model-loader.js +9 -5
- package/packages/tools/lib/mcp/model-loader.js.map +1 -1
- package/packages/tools/lib/mcp/tools.d.ts +3 -0
- package/packages/tools/lib/mcp/tools.d.ts.map +1 -1
- package/packages/tools/lib/mcp/tools.js +8 -9
- package/packages/tools/lib/mcp/tools.js.map +1 -1
- package/packages/tools/lib/model/activity-notation.d.ts +54 -0
- package/packages/tools/lib/model/activity-notation.d.ts.map +1 -0
- package/packages/tools/lib/model/activity-notation.js +208 -0
- package/packages/tools/lib/model/activity-notation.js.map +1 -0
- package/packages/tools/lib/model/builder.d.ts +3 -0
- package/packages/tools/lib/model/builder.d.ts.map +1 -1
- package/packages/tools/lib/model/builder.js +956 -62
- package/packages/tools/lib/model/builder.js.map +1 -1
- package/packages/tools/lib/model/config-loader.d.ts +19 -25
- package/packages/tools/lib/model/config-loader.d.ts.map +1 -1
- package/packages/tools/lib/model/config-loader.js +51 -233
- package/packages/tools/lib/model/config-loader.js.map +1 -1
- package/packages/tools/lib/model/config.d.ts +42 -213
- package/packages/tools/lib/model/config.d.ts.map +1 -1
- package/packages/tools/lib/model/config.js +11 -9
- package/packages/tools/lib/model/config.js.map +1 -1
- package/packages/tools/lib/model/effective-scope.d.ts +74 -0
- package/packages/tools/lib/model/effective-scope.d.ts.map +1 -0
- package/packages/tools/lib/model/effective-scope.js +133 -0
- package/packages/tools/lib/model/effective-scope.js.map +1 -0
- package/packages/tools/lib/model/ir-identity.d.ts +94 -0
- package/packages/tools/lib/model/ir-identity.d.ts.map +1 -0
- package/packages/tools/lib/model/ir-identity.js +178 -0
- package/packages/tools/lib/model/ir-identity.js.map +1 -0
- package/packages/tools/lib/model/kind-registry.d.ts +134 -1
- package/packages/tools/lib/model/kind-registry.d.ts.map +1 -1
- package/packages/tools/lib/model/kind-registry.js +186 -4
- package/packages/tools/lib/model/kind-registry.js.map +1 -1
- package/packages/tools/lib/model/layer-resolver.js +1 -1
- package/packages/tools/lib/model/layer-resolver.js.map +1 -1
- package/packages/tools/lib/model/manifest.d.ts +8 -0
- package/packages/tools/lib/model/manifest.d.ts.map +1 -1
- package/packages/tools/lib/model/manifest.js +3 -0
- package/packages/tools/lib/model/manifest.js.map +1 -1
- package/packages/tools/lib/model/methodology-loader.d.ts +19 -24
- package/packages/tools/lib/model/methodology-loader.d.ts.map +1 -1
- package/packages/tools/lib/model/methodology-loader.js +179 -176
- package/packages/tools/lib/model/methodology-loader.js.map +1 -1
- package/packages/tools/lib/model/methodology-resolver.d.ts +115 -0
- package/packages/tools/lib/model/methodology-resolver.d.ts.map +1 -0
- package/packages/tools/lib/model/methodology-resolver.js +317 -0
- package/packages/tools/lib/model/methodology-resolver.js.map +1 -0
- package/packages/tools/lib/model/naming.d.ts +57 -0
- package/packages/tools/lib/model/naming.d.ts.map +1 -0
- package/packages/tools/lib/model/naming.js +69 -0
- package/packages/tools/lib/model/naming.js.map +1 -0
- package/packages/tools/lib/model/native-project.d.ts +130 -0
- package/packages/tools/lib/model/native-project.d.ts.map +1 -0
- package/packages/tools/lib/model/native-project.js +580 -0
- package/packages/tools/lib/model/native-project.js.map +1 -0
- package/packages/tools/lib/model/ontology-loader.d.ts +34 -21
- package/packages/tools/lib/model/ontology-loader.d.ts.map +1 -1
- package/packages/tools/lib/model/ontology-loader.js +343 -614
- package/packages/tools/lib/model/ontology-loader.js.map +1 -1
- package/packages/tools/lib/model/package-manifest.d.ts +37 -0
- package/packages/tools/lib/model/package-manifest.d.ts.map +1 -0
- package/packages/tools/lib/model/package-manifest.js +96 -0
- package/packages/tools/lib/model/package-manifest.js.map +1 -0
- package/packages/tools/lib/model/parser-utils.d.ts +31 -0
- package/packages/tools/lib/model/parser-utils.d.ts.map +1 -1
- package/packages/tools/lib/model/parser-utils.js +89 -1
- package/packages/tools/lib/model/parser-utils.js.map +1 -1
- package/packages/tools/lib/model/paths.d.ts +10 -4
- package/packages/tools/lib/model/paths.d.ts.map +1 -1
- package/packages/tools/lib/model/paths.js +10 -4
- package/packages/tools/lib/model/paths.js.map +1 -1
- package/packages/tools/lib/model/project-conversion.d.ts +226 -0
- package/packages/tools/lib/model/project-conversion.d.ts.map +1 -0
- package/packages/tools/lib/model/project-conversion.js +946 -0
- package/packages/tools/lib/model/project-conversion.js.map +1 -0
- package/packages/tools/lib/model/relationship-legality.d.ts +27 -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 +93 -1
- package/packages/tools/lib/model/relationship-registry.d.ts.map +1 -1
- package/packages/tools/lib/model/relationship-registry.js +217 -2
- package/packages/tools/lib/model/relationship-registry.js.map +1 -1
- package/packages/tools/lib/model/semantic.d.ts +73 -0
- package/packages/tools/lib/model/semantic.d.ts.map +1 -1
- package/packages/tools/lib/model/semantic.js +6 -0
- package/packages/tools/lib/model/semantic.js.map +1 -1
- package/packages/tools/lib/model/settings-boundary.d.ts +19 -0
- package/packages/tools/lib/model/settings-boundary.d.ts.map +1 -0
- package/packages/tools/lib/model/settings-boundary.js +118 -0
- package/packages/tools/lib/model/settings-boundary.js.map +1 -0
- package/packages/tools/lib/model/short-id.js +3 -3
- package/packages/tools/lib/model/short-id.js.map +1 -1
- package/packages/tools/lib/model/source-graph.d.ts.map +1 -1
- package/packages/tools/lib/model/source-graph.js +5 -1
- package/packages/tools/lib/model/source-graph.js.map +1 -1
- package/packages/tools/lib/model/source-provenance.d.ts +112 -0
- package/packages/tools/lib/model/source-provenance.d.ts.map +1 -0
- package/packages/tools/lib/model/source-provenance.js +169 -0
- package/packages/tools/lib/model/source-provenance.js.map +1 -0
- package/packages/tools/lib/model/sysml-ir.d.ts +9 -0
- package/packages/tools/lib/model/sysml-ir.d.ts.map +1 -0
- package/packages/tools/lib/model/sysml-ir.js +105 -0
- package/packages/tools/lib/model/sysml-ir.js.map +1 -0
- package/packages/tools/lib/model/view-deriver.d.ts +10 -1
- package/packages/tools/lib/model/view-deriver.d.ts.map +1 -1
- package/packages/tools/lib/model/view-deriver.js +139 -11
- package/packages/tools/lib/model/view-deriver.js.map +1 -1
- package/packages/tools/lib/model/view-kinds.d.ts +2 -0
- package/packages/tools/lib/model/view-kinds.d.ts.map +1 -1
- package/packages/tools/lib/model/view-kinds.js +11 -0
- package/packages/tools/lib/model/view-kinds.js.map +1 -1
- package/packages/tools/lib/ontology/owl-exporter.d.ts +2 -2
- package/packages/tools/lib/ontology/owl-exporter.d.ts.map +1 -1
- package/packages/tools/lib/ontology/owl-exporter.js +12 -12
- package/packages/tools/lib/ontology/owl-exporter.js.map +1 -1
- package/packages/tools/lib/operations/ai-authoring.d.ts +24 -0
- package/packages/tools/lib/operations/ai-authoring.d.ts.map +1 -0
- package/packages/tools/lib/operations/ai-authoring.js +77 -0
- package/packages/tools/lib/operations/ai-authoring.js.map +1 -0
- package/packages/tools/lib/operations/authoring.d.ts +40 -0
- package/packages/tools/lib/operations/authoring.d.ts.map +1 -0
- package/packages/tools/lib/operations/authoring.js +56 -0
- package/packages/tools/lib/operations/authoring.js.map +1 -0
- 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 +2 -0
- package/packages/tools/lib/operations/index.js.map +1 -1
- package/packages/tools/lib/operations/project-snapshot.d.ts +28 -3
- package/packages/tools/lib/operations/project-snapshot.d.ts.map +1 -1
- package/packages/tools/lib/operations/project-snapshot.js +79 -30
- package/packages/tools/lib/operations/project-snapshot.js.map +1 -1
- package/packages/tools/lib/protocol/messages.d.ts +381 -12
- package/packages/tools/lib/protocol/messages.d.ts.map +1 -1
- package/packages/tools/lib/serializer/csv-io.d.ts +7 -7
- package/packages/tools/lib/serializer/csv-io.d.ts.map +1 -1
- package/packages/tools/lib/serializer/csv-io.js +11 -11
- package/packages/tools/lib/serializer/csv-io.js.map +1 -1
- package/packages/tools/lib/serializer/sysml-generator.d.ts.map +1 -1
- package/packages/tools/lib/serializer/sysml-generator.js +34 -2
- package/packages/tools/lib/serializer/sysml-generator.js.map +1 -1
- package/packages/tools/lib/server/config-resolver.d.ts +8 -4
- package/packages/tools/lib/server/config-resolver.d.ts.map +1 -1
- package/packages/tools/lib/server/config-resolver.js +25 -44
- package/packages/tools/lib/server/config-resolver.js.map +1 -1
- package/packages/tools/lib/server/conflict-policy.d.ts +44 -0
- package/packages/tools/lib/server/conflict-policy.d.ts.map +1 -0
- package/packages/tools/lib/server/conflict-policy.js +94 -0
- package/packages/tools/lib/server/conflict-policy.js.map +1 -0
- package/packages/tools/lib/server/dev-server.d.ts +32 -2
- package/packages/tools/lib/server/dev-server.d.ts.map +1 -1
- package/packages/tools/lib/server/dev-server.js +875 -54
- package/packages/tools/lib/server/dev-server.js.map +1 -1
- package/packages/tools/lib/server/element-writer.d.ts +11 -0
- package/packages/tools/lib/server/element-writer.d.ts.map +1 -0
- package/packages/tools/lib/server/element-writer.js +123 -0
- package/packages/tools/lib/server/element-writer.js.map +1 -0
- package/packages/tools/lib/server/file-watcher.d.ts +4 -1
- package/packages/tools/lib/server/file-watcher.d.ts.map +1 -1
- package/packages/tools/lib/server/file-watcher.js +17 -7
- package/packages/tools/lib/server/file-watcher.js.map +1 -1
- package/packages/tools/lib/server/mutation-domain.d.ts +22 -0
- package/packages/tools/lib/server/mutation-domain.d.ts.map +1 -0
- package/packages/tools/lib/server/mutation-domain.js +87 -0
- package/packages/tools/lib/server/mutation-domain.js.map +1 -0
- package/packages/tools/lib/server/package-source.d.ts +26 -0
- package/packages/tools/lib/server/package-source.d.ts.map +1 -0
- package/packages/tools/lib/server/package-source.js +81 -0
- package/packages/tools/lib/server/package-source.js.map +1 -0
- package/packages/tools/lib/server/package-writer.d.ts +94 -0
- package/packages/tools/lib/server/package-writer.d.ts.map +1 -0
- package/packages/tools/lib/server/package-writer.js +317 -0
- package/packages/tools/lib/server/package-writer.js.map +1 -0
- package/packages/tools/lib/server/persistor.d.ts +81 -6
- package/packages/tools/lib/server/persistor.d.ts.map +1 -1
- package/packages/tools/lib/server/persistor.js +173 -44
- package/packages/tools/lib/server/persistor.js.map +1 -1
- package/packages/tools/lib/server/relationship-writer.d.ts +41 -5
- package/packages/tools/lib/server/relationship-writer.d.ts.map +1 -1
- package/packages/tools/lib/server/relationship-writer.js +157 -13
- package/packages/tools/lib/server/relationship-writer.js.map +1 -1
- package/packages/tools/lib/server/rule-policy-writer.d.ts +40 -0
- package/packages/tools/lib/server/rule-policy-writer.d.ts.map +1 -0
- package/packages/tools/lib/server/rule-policy-writer.js +124 -0
- package/packages/tools/lib/server/rule-policy-writer.js.map +1 -0
- package/packages/tools/lib/server/runtime-budget.d.ts +14 -0
- package/packages/tools/lib/server/runtime-budget.d.ts.map +1 -0
- package/packages/tools/lib/server/runtime-budget.js +15 -0
- package/packages/tools/lib/server/runtime-budget.js.map +1 -0
- package/packages/tools/lib/server/sysml-notation.d.ts +36 -0
- package/packages/tools/lib/server/sysml-notation.d.ts.map +1 -0
- package/packages/tools/lib/server/sysml-notation.js +104 -0
- package/packages/tools/lib/server/sysml-notation.js.map +1 -0
- package/packages/tools/lib/server/view-layout-store.d.ts.map +1 -1
- package/packages/tools/lib/server/view-layout-store.js +1 -0
- package/packages/tools/lib/server/view-layout-store.js.map +1 -1
- package/packages/tools/lib/sysml-ir/generated/sysml-derivations.d.ts +9 -0
- package/packages/tools/lib/sysml-ir/generated/sysml-derivations.d.ts.map +1 -0
- package/packages/tools/lib/sysml-ir/generated/sysml-derivations.js +315 -0
- package/packages/tools/lib/sysml-ir/generated/sysml-derivations.js.map +1 -0
- package/packages/tools/lib/sysml-ir/generated/sysml-metamodel.d.ts +5206 -0
- package/packages/tools/lib/sysml-ir/generated/sysml-metamodel.d.ts.map +1 -0
- package/packages/tools/lib/sysml-ir/generated/sysml-metamodel.js +1933 -0
- package/packages/tools/lib/sysml-ir/generated/sysml-metamodel.js.map +1 -0
- package/packages/tools/lib/sysml-ir/index.d.ts +3 -0
- package/packages/tools/lib/sysml-ir/index.d.ts.map +1 -0
- package/packages/tools/lib/sysml-ir/index.js +3 -0
- package/packages/tools/lib/sysml-ir/index.js.map +1 -0
- package/packages/tools/lib/sysml-ir/ir.d.ts +50 -0
- package/packages/tools/lib/sysml-ir/ir.d.ts.map +1 -0
- package/packages/tools/lib/sysml-ir/ir.js +2 -0
- package/packages/tools/lib/sysml-ir/ir.js.map +1 -0
- package/packages/tools/lib/sysmlc/bin/memo-sysmlc.d.ts +3 -0
- package/packages/tools/lib/sysmlc/bin/memo-sysmlc.d.ts.map +1 -0
- package/packages/tools/lib/sysmlc/bin/memo-sysmlc.js +97 -0
- package/packages/tools/lib/sysmlc/bin/memo-sysmlc.js.map +1 -0
- package/packages/tools/lib/sysmlc/index.d.ts +2 -0
- package/packages/tools/lib/sysmlc/index.d.ts.map +1 -0
- package/packages/tools/lib/sysmlc/index.js +7 -0
- package/packages/tools/lib/sysmlc/index.js.map +1 -0
- package/packages/tools/lib/sysmlc/server.d.ts +29 -0
- package/packages/tools/lib/sysmlc/server.d.ts.map +1 -0
- package/packages/tools/lib/sysmlc/server.js +168 -0
- package/packages/tools/lib/sysmlc/server.js.map +1 -0
- package/packages/tools/lib/toolchain/default-registry.d.ts +12 -0
- package/packages/tools/lib/toolchain/default-registry.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/default-registry.js +28 -0
- package/packages/tools/lib/toolchain/default-registry.js.map +1 -0
- package/packages/tools/lib/toolchain/diagnostic.d.ts +57 -0
- package/packages/tools/lib/toolchain/diagnostic.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/diagnostic.js +69 -0
- package/packages/tools/lib/toolchain/diagnostic.js.map +1 -0
- package/packages/tools/lib/toolchain/effective.d.ts +36 -0
- package/packages/tools/lib/toolchain/effective.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/effective.js +91 -0
- package/packages/tools/lib/toolchain/effective.js.map +1 -0
- package/packages/tools/lib/toolchain/index.d.ts +11 -0
- package/packages/tools/lib/toolchain/index.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/index.js +21 -0
- package/packages/tools/lib/toolchain/index.js.map +1 -0
- package/packages/tools/lib/toolchain/lowering.d.ts +63 -0
- package/packages/tools/lib/toolchain/lowering.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/lowering.js +100 -0
- package/packages/tools/lib/toolchain/lowering.js.map +1 -0
- package/packages/tools/lib/toolchain/operations.d.ts +87 -0
- package/packages/tools/lib/toolchain/operations.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/operations.js +111 -0
- package/packages/tools/lib/toolchain/operations.js.map +1 -0
- package/packages/tools/lib/toolchain/process.d.ts +45 -0
- package/packages/tools/lib/toolchain/process.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/process.js +125 -0
- package/packages/tools/lib/toolchain/process.js.map +1 -0
- package/packages/tools/lib/toolchain/protocol.d.ts +122 -0
- package/packages/tools/lib/toolchain/protocol.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/protocol.js +74 -0
- package/packages/tools/lib/toolchain/protocol.js.map +1 -0
- package/packages/tools/lib/toolchain/providers/internal-kpar.d.ts +9 -0
- package/packages/tools/lib/toolchain/providers/internal-kpar.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/providers/internal-kpar.js +84 -0
- package/packages/tools/lib/toolchain/providers/internal-kpar.js.map +1 -0
- package/packages/tools/lib/toolchain/providers/internal.d.ts +33 -0
- package/packages/tools/lib/toolchain/providers/internal.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/providers/internal.js +286 -0
- package/packages/tools/lib/toolchain/providers/internal.js.map +1 -0
- package/packages/tools/lib/toolchain/providers/sysand.d.ts +12 -0
- package/packages/tools/lib/toolchain/providers/sysand.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/providers/sysand.js +110 -0
- package/packages/tools/lib/toolchain/providers/sysand.js.map +1 -0
- package/packages/tools/lib/toolchain/providers/syside.d.ts +24 -0
- package/packages/tools/lib/toolchain/providers/syside.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/providers/syside.js +208 -0
- package/packages/tools/lib/toolchain/providers/syside.js.map +1 -0
- package/packages/tools/lib/toolchain/registry.d.ts +192 -0
- package/packages/tools/lib/toolchain/registry.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/registry.js +130 -0
- package/packages/tools/lib/toolchain/registry.js.map +1 -0
- package/packages/tools/lib/toolchain/schema.d.ts +30 -0
- package/packages/tools/lib/toolchain/schema.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/schema.js +112 -0
- package/packages/tools/lib/toolchain/schema.js.map +1 -0
- package/packages/tools/lib/toolchain/sysmlc-client.d.ts +77 -0
- package/packages/tools/lib/toolchain/sysmlc-client.d.ts.map +1 -0
- package/packages/tools/lib/toolchain/sysmlc-client.js +0 -0
- package/packages/tools/lib/toolchain/sysmlc-client.js.map +1 -0
- package/packages/tools/lib/validator/architecture-validator.d.ts +8 -1
- package/packages/tools/lib/validator/architecture-validator.d.ts.map +1 -1
- package/packages/tools/lib/validator/architecture-validator.js +25 -1
- package/packages/tools/lib/validator/architecture-validator.js.map +1 -1
- package/packages/tools/lib/validator/behavior-validator.d.ts +1 -1
- package/packages/tools/lib/validator/behavior-validator.js +1 -1
- package/packages/tools/lib/validator/builtin-rules.d.ts +16 -0
- package/packages/tools/lib/validator/builtin-rules.d.ts.map +1 -0
- package/packages/tools/lib/validator/builtin-rules.js +62 -0
- package/packages/tools/lib/validator/builtin-rules.js.map +1 -0
- package/packages/tools/lib/validator/constraint-eval.d.ts +31 -0
- package/packages/tools/lib/validator/constraint-eval.d.ts.map +1 -1
- package/packages/tools/lib/validator/constraint-eval.js +164 -7
- package/packages/tools/lib/validator/constraint-eval.js.map +1 -1
- package/packages/tools/lib/validator/constraint-loader.d.ts +22 -4
- package/packages/tools/lib/validator/constraint-loader.d.ts.map +1 -1
- package/packages/tools/lib/validator/constraint-loader.js +100 -27
- package/packages/tools/lib/validator/constraint-loader.js.map +1 -1
- package/packages/tools/lib/validator/rule-engine.d.ts +2 -1
- package/packages/tools/lib/validator/rule-engine.d.ts.map +1 -1
- package/packages/tools/lib/validator/rule-engine.js +56 -5
- package/packages/tools/lib/validator/rule-engine.js.map +1 -1
- package/packages/tools/lib/validator/sysml-constraints.d.ts +64 -0
- package/packages/tools/lib/validator/sysml-constraints.d.ts.map +1 -0
- package/packages/tools/lib/validator/sysml-constraints.js +251 -0
- package/packages/tools/lib/validator/sysml-constraints.js.map +1 -0
- package/packages/tools/lib/validator/types.d.ts +33 -0
- package/packages/tools/lib/validator/types.d.ts.map +1 -1
- package/packages/tools/lib/version.d.ts +2 -0
- package/packages/tools/lib/version.d.ts.map +1 -0
- package/packages/tools/lib/version.js +26 -0
- package/packages/tools/lib/version.js.map +1 -0
- package/packages/tools/src/grammar/memo-sysml.langium +517 -41
- package/packages/tools/lib/model/dimension-filter.d.ts +0 -33
- package/packages/tools/lib/model/dimension-filter.d.ts.map +0 -1
- package/packages/tools/lib/model/dimension-filter.js +0 -57
- package/packages/tools/lib/model/dimension-filter.js.map +0 -1
- package/packages/tools/lib/model/toolchain.d.ts +0 -12
- package/packages/tools/lib/model/toolchain.d.ts.map +0 -1
- package/packages/tools/lib/model/toolchain.js +0 -92
- package/packages/tools/lib/model/toolchain.js.map +0 -1
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
// ─── Conformance baselines ───────────────────────────────────────────────────
|
|
2
|
+
//
|
|
3
|
+
// A conformance number is only useful against a previous one. The baseline is a
|
|
4
|
+
// committed report; CI re-runs the sweep and fails on any count that moved.
|
|
5
|
+
//
|
|
6
|
+
// Three rules make the comparison mean something:
|
|
7
|
+
//
|
|
8
|
+
// 1. **Improvement fails too, and says so.** A count that drops is progress, and
|
|
9
|
+
// progress that nobody re-froze the baseline for is indistinguishable from a
|
|
10
|
+
// sweep that silently stopped analysing half the corpus. The gate is
|
|
11
|
+
// "changed", not "worse"; re-freezing is one command and one reviewable diff.
|
|
12
|
+
// 2. **A different corpus is not a regression.** Moving the Release pin changes
|
|
13
|
+
// what conformance means. Comparing across pins would report a wall of
|
|
14
|
+
// differences that are really a corpus bump, so it refuses to compare at all
|
|
15
|
+
// and says which pin each side was taken against.
|
|
16
|
+
// 3. **Only counts are compared.** Sample findings and per-run detail move with
|
|
17
|
+
// message wording; gating on them would make a prose change a CI failure.
|
|
18
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
19
|
+
import { DIAGNOSTIC_DOMAINS } from './run.js';
|
|
20
|
+
import { DIFFERENCE_CLASSES } from './diff-xmi.js';
|
|
21
|
+
function pinOf(report) {
|
|
22
|
+
return `${report.corpus.commit}/${report.corpus.digest}`;
|
|
23
|
+
}
|
|
24
|
+
function incomparable(baseline, current, what) {
|
|
25
|
+
return {
|
|
26
|
+
comparable: false,
|
|
27
|
+
reason: `${what} differs — baseline "${baseline}", current "${current}". `
|
|
28
|
+
+ 'A conformance count is only comparable against the same corpus pin and report format. '
|
|
29
|
+
+ 'Re-freeze the baseline rather than reading this as a regression.',
|
|
30
|
+
differences: [],
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/** Counts moved, in either direction. See rule 1 above. */
|
|
34
|
+
function compareCounts(path, baseline, current, keys, into) {
|
|
35
|
+
for (const key of keys) {
|
|
36
|
+
const before = baseline?.[key] ?? 0;
|
|
37
|
+
const after = current?.[key] ?? 0;
|
|
38
|
+
if (before !== after)
|
|
39
|
+
into.push({ path: `${path}.${key}`, baseline: before, current: after });
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
export function compareConformanceBaseline(baseline, current) {
|
|
43
|
+
if (baseline.reportVersion !== current.reportVersion) {
|
|
44
|
+
return incomparable(baseline.reportVersion, current.reportVersion, 'Report format version');
|
|
45
|
+
}
|
|
46
|
+
if (pinOf(baseline) !== pinOf(current)) {
|
|
47
|
+
return incomparable(pinOf(baseline), pinOf(current), 'Corpus pin');
|
|
48
|
+
}
|
|
49
|
+
const differences = [];
|
|
50
|
+
for (const role of ['validator', 'lowering']) {
|
|
51
|
+
if (baseline.toolchain[role] !== current.toolchain[role]) {
|
|
52
|
+
differences.push({
|
|
53
|
+
path: `toolchain.${role}`,
|
|
54
|
+
baseline: baseline.toolchain[role],
|
|
55
|
+
current: current.toolchain[role],
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
compareCounts('totals.byDomain', baseline.totals.byDomain, current.totals.byDomain, DIAGNOSTIC_DOMAINS, differences);
|
|
60
|
+
for (const key of ['files', 'outsideUnit']) {
|
|
61
|
+
if (baseline.totals[key] !== current.totals[key]) {
|
|
62
|
+
differences.push({
|
|
63
|
+
path: `totals.${key}`,
|
|
64
|
+
baseline: baseline.totals[key],
|
|
65
|
+
current: current.totals[key],
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
const currentUnits = new Map(current.units.map(unit => [unit.id, unit]));
|
|
70
|
+
for (const unit of baseline.units) {
|
|
71
|
+
const now = currentUnits.get(unit.id);
|
|
72
|
+
if (!now) {
|
|
73
|
+
differences.push({ path: `units.${unit.id}`, baseline: 'present', current: 'absent' });
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
currentUnits.delete(unit.id);
|
|
77
|
+
for (const key of ['files', 'outsideUnit']) {
|
|
78
|
+
if (unit[key] !== now[key]) {
|
|
79
|
+
differences.push({ path: `units.${unit.id}.${key}`, baseline: unit[key], current: now[key] });
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
compareCounts(`units.${unit.id}.byDomain`, unit.byDomain, now.byDomain, DIAGNOSTIC_DOMAINS, differences);
|
|
83
|
+
}
|
|
84
|
+
for (const id of currentUnits.keys()) {
|
|
85
|
+
differences.push({ path: `units.${id}`, baseline: 'absent', current: 'present' });
|
|
86
|
+
}
|
|
87
|
+
return { comparable: true, differences };
|
|
88
|
+
}
|
|
89
|
+
export function compareDiffXmiBaseline(baseline, current) {
|
|
90
|
+
if (baseline.reportVersion !== current.reportVersion) {
|
|
91
|
+
return incomparable(baseline.reportVersion, current.reportVersion, 'Report format version');
|
|
92
|
+
}
|
|
93
|
+
if (pinOf(baseline) !== pinOf(current)) {
|
|
94
|
+
return incomparable(pinOf(baseline), pinOf(current), 'Corpus pin');
|
|
95
|
+
}
|
|
96
|
+
const differences = [];
|
|
97
|
+
compareCounts('totals.counts', baseline.totals.counts, current.totals.counts, DIFFERENCE_CLASSES, differences);
|
|
98
|
+
const currentLibraries = new Map(current.libraries.map(library => [library.source, library]));
|
|
99
|
+
for (const library of baseline.libraries) {
|
|
100
|
+
const now = currentLibraries.get(library.source);
|
|
101
|
+
if (!now) {
|
|
102
|
+
differences.push({ path: `libraries.${library.source}`, baseline: 'present', current: 'absent' });
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
currentLibraries.delete(library.source);
|
|
106
|
+
if ((library.failure ?? '') !== (now.failure ?? '')) {
|
|
107
|
+
differences.push({
|
|
108
|
+
path: `libraries.${library.source}.failure`,
|
|
109
|
+
baseline: library.failure ?? '(none)',
|
|
110
|
+
current: now.failure ?? '(none)',
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
compareCounts(`libraries.${library.source}.counts`, library.counts, now.counts, DIFFERENCE_CLASSES, differences);
|
|
114
|
+
}
|
|
115
|
+
for (const source of currentLibraries.keys()) {
|
|
116
|
+
differences.push({ path: `libraries.${source}`, baseline: 'absent', current: 'present' });
|
|
117
|
+
}
|
|
118
|
+
return { comparable: true, differences };
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Grammar coverage against the normative BNF (B5).
|
|
122
|
+
*
|
|
123
|
+
* Per-production status is compared, not only the totals. Two productions
|
|
124
|
+
* trading places — one implemented, one lost — leaves the total unmoved, and a
|
|
125
|
+
* gate that only watched the total would call that no change.
|
|
126
|
+
*/
|
|
127
|
+
export function compareBnfBaseline(baseline, current) {
|
|
128
|
+
if (baseline.reportVersion !== current.reportVersion) {
|
|
129
|
+
return incomparable(baseline.reportVersion, current.reportVersion, 'Report format version');
|
|
130
|
+
}
|
|
131
|
+
if (pinOf(baseline) !== pinOf(current)) {
|
|
132
|
+
return incomparable(pinOf(baseline), pinOf(current), 'Corpus pin');
|
|
133
|
+
}
|
|
134
|
+
const differences = [];
|
|
135
|
+
for (const group of ['syntactic', 'lexical']) {
|
|
136
|
+
compareCounts(`totals.${group}`, baseline.totals[group], current.totals[group], ['total', 'covered'], differences);
|
|
137
|
+
}
|
|
138
|
+
const now = new Map(current.productions.map(production => [production.name, production]));
|
|
139
|
+
for (const production of baseline.productions) {
|
|
140
|
+
const after = now.get(production.name);
|
|
141
|
+
if (!after) {
|
|
142
|
+
differences.push({ path: `productions.${production.name}`, baseline: production.status, current: 'absent' });
|
|
143
|
+
continue;
|
|
144
|
+
}
|
|
145
|
+
now.delete(production.name);
|
|
146
|
+
if (production.status !== after.status) {
|
|
147
|
+
differences.push({ path: `productions.${production.name}`, baseline: production.status, current: after.status });
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
for (const [name, production] of now) {
|
|
151
|
+
differences.push({ path: `productions.${name}`, baseline: 'absent', current: production.status });
|
|
152
|
+
}
|
|
153
|
+
return { comparable: true, differences };
|
|
154
|
+
}
|
|
155
|
+
export function formatBaselineComparison(comparison) {
|
|
156
|
+
if (!comparison.comparable)
|
|
157
|
+
return `INCOMPARABLE — ${comparison.reason}`;
|
|
158
|
+
if (comparison.differences.length === 0)
|
|
159
|
+
return 'OK — every count matches the baseline.';
|
|
160
|
+
const lines = [`${comparison.differences.length} count(s) moved against the baseline:`];
|
|
161
|
+
for (const difference of comparison.differences.slice(0, 40)) {
|
|
162
|
+
lines.push(` ${difference.path}: ${difference.baseline} → ${difference.current}`);
|
|
163
|
+
}
|
|
164
|
+
if (comparison.differences.length > 40) {
|
|
165
|
+
lines.push(` … ${comparison.differences.length - 40} more`);
|
|
166
|
+
}
|
|
167
|
+
lines.push('If the change is intended, re-freeze with --update-baseline and review the diff.');
|
|
168
|
+
return lines.join('\n');
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=baseline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseline.js","sourceRoot":"","sources":["../../src/conformance/baseline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { type CorpusProvenance } from './corpus.js';
|
|
2
|
+
/** The two normative textual grammars, corpus-relative. */
|
|
3
|
+
export declare const TEXTUAL_BNF_FILES: readonly ["bnf/KerML-textual-bnf.kebnf", "bnf/SysML-textual-bnf.kebnf"];
|
|
4
|
+
/** One production of a normative grammar. */
|
|
5
|
+
export interface BnfProduction {
|
|
6
|
+
name: string;
|
|
7
|
+
/** Corpus-relative file it is declared in. */
|
|
8
|
+
source: string;
|
|
9
|
+
/** 1-indexed line of the declaration. */
|
|
10
|
+
line: number;
|
|
11
|
+
/**
|
|
12
|
+
* True for lexical productions — `LINE_TERMINATOR`, `DECIMAL_VALUE`.
|
|
13
|
+
*
|
|
14
|
+
* Reported apart from syntactic ones because a Langium grammar implements
|
|
15
|
+
* them as terminals, not as parser rules, so scoring them against rule
|
|
16
|
+
* names would count a category error as a gap.
|
|
17
|
+
*/
|
|
18
|
+
lexical: boolean;
|
|
19
|
+
}
|
|
20
|
+
export type CoverageStatus = 'covered' | 'missing';
|
|
21
|
+
export interface ProductionCoverage extends BnfProduction {
|
|
22
|
+
status: CoverageStatus;
|
|
23
|
+
/** The Langium rule or terminal that covers it, when one does. */
|
|
24
|
+
implementedBy?: string;
|
|
25
|
+
}
|
|
26
|
+
export interface BnfCoverageReport {
|
|
27
|
+
reportVersion: string;
|
|
28
|
+
memoVersion: string;
|
|
29
|
+
corpus: CorpusProvenance;
|
|
30
|
+
grammar: {
|
|
31
|
+
path: string;
|
|
32
|
+
parserRules: number;
|
|
33
|
+
terminals: number;
|
|
34
|
+
};
|
|
35
|
+
totals: {
|
|
36
|
+
syntactic: {
|
|
37
|
+
total: number;
|
|
38
|
+
covered: number;
|
|
39
|
+
};
|
|
40
|
+
lexical: {
|
|
41
|
+
total: number;
|
|
42
|
+
covered: number;
|
|
43
|
+
};
|
|
44
|
+
/** Langium rules with no counterpart in either normative grammar. */
|
|
45
|
+
nonNormativeRules: number;
|
|
46
|
+
};
|
|
47
|
+
productions: ProductionCoverage[];
|
|
48
|
+
/**
|
|
49
|
+
* Rules the Langium grammar has that the normative grammars do not name.
|
|
50
|
+
*
|
|
51
|
+
* Not a defect on its own — MEMO's grammar has helper rules and MEMO-specific
|
|
52
|
+
* constructs — but worth listing, because a rule invented where a normative
|
|
53
|
+
* production already exists is how a grammar drifts from the standard while
|
|
54
|
+
* its coverage number goes up.
|
|
55
|
+
*/
|
|
56
|
+
nonNormativeRules: string[];
|
|
57
|
+
}
|
|
58
|
+
export declare const BNF_REPORT_VERSION = "1.0.0";
|
|
59
|
+
export declare function readBnfProductions(path: string, source: string): BnfProduction[];
|
|
60
|
+
export interface LangiumGrammar {
|
|
61
|
+
path: string;
|
|
62
|
+
parserRules: string[];
|
|
63
|
+
terminals: string[];
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Rule and terminal names declared by a Langium grammar.
|
|
67
|
+
*
|
|
68
|
+
* A deliberately shallow read of the `.langium` file: this scores *names*, so
|
|
69
|
+
* loading Langium's own grammar services to get the same list would add a
|
|
70
|
+
* dependency and a build step for no extra information.
|
|
71
|
+
*/
|
|
72
|
+
export declare function readLangiumGrammar(path: string): LangiumGrammar;
|
|
73
|
+
/** Where the grammar lives, relative to the built or source module. */
|
|
74
|
+
export declare function defaultGrammarPath(): string;
|
|
75
|
+
export interface BnfCoverageOptions {
|
|
76
|
+
corpusDir?: string;
|
|
77
|
+
grammarPath?: string;
|
|
78
|
+
memoVersion: string;
|
|
79
|
+
}
|
|
80
|
+
export declare function runBnfCoverage(options: BnfCoverageOptions): BnfCoverageReport;
|
|
81
|
+
export declare function formatBnfCoverageReport(report: BnfCoverageReport, options?: {
|
|
82
|
+
missing?: boolean;
|
|
83
|
+
}): string;
|
|
84
|
+
//# sourceMappingURL=bnf.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bnf.d.ts","sourceRoot":"","sources":["../../src/conformance/bnf.ts"],"names":[],"mappings":"AA+BA,OAAO,EAMH,KAAK,gBAAgB,EACxB,MAAM,aAAa,CAAC;AAErB,2DAA2D;AAC3D,eAAO,MAAM,iBAAiB,yEAGpB,CAAC;AAEX,6CAA6C;AAC7C,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;OAMG;IACH,OAAO,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,SAAS,CAAC;AAEnD,MAAM,WAAW,kBAAmB,SAAQ,aAAa;IACrD,MAAM,EAAE,cAAc,CAAC;IACvB,kEAAkE;IAClE,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,gBAAgB,CAAC;IACzB,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAClE,MAAM,EAAE;QACJ,SAAS,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC;QAC9C,OAAO,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC;QAC5C,qEAAqE;QACrE,iBAAiB,EAAE,MAAM,CAAC;KAC7B,CAAC;IACF,WAAW,EAAE,kBAAkB,EAAE,CAAC;IAClC;;;;;;;OAOG;IACH,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,eAAO,MAAM,kBAAkB,UAAU,CAAC;AAiB1C,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,EAAE,CAUhF;AAED,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAc/D;AAED,uEAAuE;AACvE,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,MAAM,WAAW,kBAAkB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,kBAAkB,GAAG,iBAAiB,CAuD7E;AAID,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,MAAM,CAqB9G"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
// ─── memo conformance bnf — grammar coverage against the normative BNF ───────
|
|
2
|
+
//
|
|
3
|
+
// Track B B5 says to grow the Langium grammar toward `bnf/KerML-textual-bnf.kebnf`
|
|
4
|
+
// and `bnf/SysML-textual-bnf.kebnf`, and it says why those files rather than a
|
|
5
|
+
// reading of the spec prose: they are machine-readable, so coverage against
|
|
6
|
+
// them is measurable rather than a judgment call. This is the measurement.
|
|
7
|
+
//
|
|
8
|
+
// **What is being counted, stated precisely.** A normative production is
|
|
9
|
+
// "covered" when the Langium grammar declares a rule of the same name. That is
|
|
10
|
+
// a claim about *surface* — the grammar has somewhere to put this construct —
|
|
11
|
+
// and emphatically not a claim that the rule accepts everything the production
|
|
12
|
+
// accepts. A rule named `PackageDeclaration` that parses a third of what the
|
|
13
|
+
// normative `PackageDeclaration` parses counts as covered here.
|
|
14
|
+
//
|
|
15
|
+
// A weaker measure than one might want, and it is the honest one available:
|
|
16
|
+
// judging acceptance would mean comparing two grammars for language
|
|
17
|
+
// equivalence, which is undecidable in general and impractical here. What this
|
|
18
|
+
// measure is good for is exactly what B5 needs — a number that moves when a
|
|
19
|
+
// production is taken on, a list of what has not been touched, and a baseline
|
|
20
|
+
// that fails CI when coverage silently drops. The corpus parse counts in
|
|
21
|
+
// `memo conformance run` are the complementary measure, and they *do* judge
|
|
22
|
+
// acceptance, on real files.
|
|
23
|
+
//
|
|
24
|
+
// The two measures disagreeing is informative rather than contradictory: high
|
|
25
|
+
// name coverage with a failing corpus means the rules are shallow, which is
|
|
26
|
+
// precisely the situation this grammar is in today.
|
|
27
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
28
|
+
import { readFileSync } from 'node:fs';
|
|
29
|
+
import { dirname, resolve } from 'node:path';
|
|
30
|
+
import { fileURLToPath } from 'node:url';
|
|
31
|
+
import { BNF_TREE, corpusRelative, loadCorpus, provenanceOf, } from './corpus.js';
|
|
32
|
+
/** The two normative textual grammars, corpus-relative. */
|
|
33
|
+
export const TEXTUAL_BNF_FILES = [
|
|
34
|
+
`${BNF_TREE}/KerML-textual-bnf.kebnf`,
|
|
35
|
+
`${BNF_TREE}/SysML-textual-bnf.kebnf`,
|
|
36
|
+
];
|
|
37
|
+
export const BNF_REPORT_VERSION = '1.0.0';
|
|
38
|
+
/**
|
|
39
|
+
* A production declaration opens at column zero as `Name =` or `Name : Type =`.
|
|
40
|
+
*
|
|
41
|
+
* Everything else in these files is a continuation line, a comment, or prose.
|
|
42
|
+
* The `: Type` form declares the abstract-syntax class a production produces
|
|
43
|
+
* (`PackageDeclaration : Package =`); the production's own name is what is
|
|
44
|
+
* being scored, so the type is read and discarded.
|
|
45
|
+
*/
|
|
46
|
+
const PRODUCTION = /^([A-Za-z][A-Za-z0-9_]*)\s*(?::\s*[A-Za-z][A-Za-z0-9_]*\s*)?=\s*$/;
|
|
47
|
+
/** An ALL_CAPS name is a lexical production by the files' own convention. */
|
|
48
|
+
function isLexical(name) {
|
|
49
|
+
return /^[A-Z][A-Z0-9_]*$/.test(name);
|
|
50
|
+
}
|
|
51
|
+
export function readBnfProductions(path, source) {
|
|
52
|
+
const productions = [];
|
|
53
|
+
const seen = new Set();
|
|
54
|
+
for (const [index, line] of readFileSync(path, 'utf-8').split('\n').entries()) {
|
|
55
|
+
const match = PRODUCTION.exec(line);
|
|
56
|
+
if (!match || seen.has(match[1]))
|
|
57
|
+
continue;
|
|
58
|
+
seen.add(match[1]);
|
|
59
|
+
productions.push({ name: match[1], source, line: index + 1, lexical: isLexical(match[1]) });
|
|
60
|
+
}
|
|
61
|
+
return productions;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Rule and terminal names declared by a Langium grammar.
|
|
65
|
+
*
|
|
66
|
+
* A deliberately shallow read of the `.langium` file: this scores *names*, so
|
|
67
|
+
* loading Langium's own grammar services to get the same list would add a
|
|
68
|
+
* dependency and a build step for no extra information.
|
|
69
|
+
*/
|
|
70
|
+
export function readLangiumGrammar(path) {
|
|
71
|
+
const text = readFileSync(path, 'utf-8');
|
|
72
|
+
const parserRules = [];
|
|
73
|
+
const terminals = [];
|
|
74
|
+
for (const line of text.split('\n')) {
|
|
75
|
+
const terminal = /^\s*(?:hidden\s+)?terminal\s+(?:fragment\s+)?([A-Za-z][A-Za-z0-9_]*)/.exec(line);
|
|
76
|
+
if (terminal) {
|
|
77
|
+
terminals.push(terminal[1]);
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
const rule = /^([A-Za-z][A-Za-z0-9_]*)\s*(?:returns\s+[\w.<>[\]]+\s*)?(?:infers\s+[A-Za-z][A-Za-z0-9_]*\s*)?:/.exec(line);
|
|
81
|
+
if (rule)
|
|
82
|
+
parserRules.push(rule[1]);
|
|
83
|
+
}
|
|
84
|
+
return { path, parserRules: [...new Set(parserRules)], terminals: [...new Set(terminals)] };
|
|
85
|
+
}
|
|
86
|
+
/** Where the grammar lives, relative to the built or source module. */
|
|
87
|
+
export function defaultGrammarPath() {
|
|
88
|
+
return resolve(dirname(fileURLToPath(import.meta.url)), '../../src/grammar/memo-sysml.langium');
|
|
89
|
+
}
|
|
90
|
+
export function runBnfCoverage(options) {
|
|
91
|
+
const corpus = loadCorpus(options.corpusDir);
|
|
92
|
+
const grammarPath = options.grammarPath ?? defaultGrammarPath();
|
|
93
|
+
const grammar = readLangiumGrammar(grammarPath);
|
|
94
|
+
// Deduplicated across the two files, not concatenated. KerML productions
|
|
95
|
+
// that SysML extends are restated verbatim in the SysML grammar — 39 names
|
|
96
|
+
// appear in both — and counting those twice would inflate the denominator
|
|
97
|
+
// and make one rule score as two. The KerML file is read first, so the
|
|
98
|
+
// KerML declaration is the one reported.
|
|
99
|
+
const productions = [];
|
|
100
|
+
const byName = new Set();
|
|
101
|
+
for (const relative of TEXTUAL_BNF_FILES) {
|
|
102
|
+
for (const production of readBnfProductions(`${corpus.root}/${relative}`, relative)) {
|
|
103
|
+
if (byName.has(production.name))
|
|
104
|
+
continue;
|
|
105
|
+
byName.add(production.name);
|
|
106
|
+
productions.push(production);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
const rules = new Set(grammar.parserRules);
|
|
110
|
+
const terminals = new Set(grammar.terminals);
|
|
111
|
+
const claimed = new Set();
|
|
112
|
+
const covered = productions.map(production => {
|
|
113
|
+
// A lexical production is answered by a terminal, a syntactic one by a
|
|
114
|
+
// parser rule. Accepting either for both would let a terminal named
|
|
115
|
+
// `Package` report the package grammar as implemented.
|
|
116
|
+
const pool = production.lexical ? terminals : rules;
|
|
117
|
+
const hit = pool.has(production.name) ? production.name : undefined;
|
|
118
|
+
if (hit)
|
|
119
|
+
claimed.add(hit);
|
|
120
|
+
return { ...production, status: hit ? 'covered' : 'missing', implementedBy: hit };
|
|
121
|
+
});
|
|
122
|
+
const nonNormativeRules = [...rules, ...terminals].filter(name => !claimed.has(name)).sort();
|
|
123
|
+
const tally = (lexical) => {
|
|
124
|
+
const subset = covered.filter(production => production.lexical === lexical);
|
|
125
|
+
return { total: subset.length, covered: subset.filter(p => p.status === 'covered').length };
|
|
126
|
+
};
|
|
127
|
+
return {
|
|
128
|
+
reportVersion: BNF_REPORT_VERSION,
|
|
129
|
+
memoVersion: options.memoVersion,
|
|
130
|
+
corpus: provenanceOf(corpus),
|
|
131
|
+
grammar: {
|
|
132
|
+
path: corpusRelative(corpus, grammarPath) === grammarPath
|
|
133
|
+
? grammarPath.split('/').slice(-3).join('/')
|
|
134
|
+
: corpusRelative(corpus, grammarPath),
|
|
135
|
+
parserRules: grammar.parserRules.length,
|
|
136
|
+
terminals: grammar.terminals.length,
|
|
137
|
+
},
|
|
138
|
+
totals: { syntactic: tally(false), lexical: tally(true), nonNormativeRules: nonNormativeRules.length },
|
|
139
|
+
productions: covered.sort((a, b) => (a.name < b.name ? -1 : a.name > b.name ? 1 : 0)),
|
|
140
|
+
nonNormativeRules,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
const percent = (covered, total) => (total === 0 ? '—' : `${Math.round((covered / total) * 100)}%`);
|
|
144
|
+
export function formatBnfCoverageReport(report, options = {}) {
|
|
145
|
+
const lines = [''];
|
|
146
|
+
lines.push(`SysML v2 Release ${report.corpus.commit.slice(0, 12)} (${report.corpus.commitDate.slice(0, 10)})`);
|
|
147
|
+
lines.push(`grammar ${report.grammar.path}`);
|
|
148
|
+
lines.push('');
|
|
149
|
+
const { syntactic, lexical } = report.totals;
|
|
150
|
+
lines.push(`syntactic productions ${String(syntactic.covered).padStart(4)} / ${String(syntactic.total).padEnd(4)} ${percent(syntactic.covered, syntactic.total)}`);
|
|
151
|
+
lines.push(`lexical productions ${String(lexical.covered).padStart(4)} / ${String(lexical.total).padEnd(4)} ${percent(lexical.covered, lexical.total)}`);
|
|
152
|
+
lines.push(`rules with no normative production ${report.totals.nonNormativeRules}`);
|
|
153
|
+
lines.push('');
|
|
154
|
+
lines.push('A production counts as covered when the grammar declares a rule of that name.');
|
|
155
|
+
lines.push('That measures surface, not acceptance — `memo conformance run` measures acceptance.');
|
|
156
|
+
if (options.missing) {
|
|
157
|
+
const missing = report.productions.filter(production => production.status === 'missing' && !production.lexical);
|
|
158
|
+
lines.push('');
|
|
159
|
+
lines.push(`Uncovered syntactic productions (${missing.length}):`);
|
|
160
|
+
for (const production of missing)
|
|
161
|
+
lines.push(` ${production.name.padEnd(36)} ${production.source}:${production.line}`);
|
|
162
|
+
}
|
|
163
|
+
lines.push('');
|
|
164
|
+
return lines.join('\n');
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=bnf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bnf.js","sourceRoot":"","sources":["../../src/conformance/bnf.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/** Textual model sources. `.kerml` is half the Kernel libraries. */
|
|
2
|
+
export declare const MODEL_EXTENSIONS: readonly [".sysml", ".kerml"];
|
|
3
|
+
/** The XMI serializations, declared and with implied elements. */
|
|
4
|
+
export declare const XMI_EXTENSIONS: readonly [".sysmlx", ".kermlx"];
|
|
5
|
+
export declare const LIBRARY_SOURCE_TREE = "sysml.library";
|
|
6
|
+
export declare const LIBRARY_XMI_TREE = "sysml.library.xmi";
|
|
7
|
+
export declare const LIBRARY_XMI_IMPLIED_TREE = "sysml.library.xmi.implied";
|
|
8
|
+
/** The normative textual and graphical grammars. */
|
|
9
|
+
export declare const BNF_TREE = "bnf";
|
|
10
|
+
export interface CorpusFileEntry {
|
|
11
|
+
sha256: string;
|
|
12
|
+
bytes: number;
|
|
13
|
+
}
|
|
14
|
+
export interface CorpusTree {
|
|
15
|
+
id: string;
|
|
16
|
+
path: string;
|
|
17
|
+
role: string;
|
|
18
|
+
files: number;
|
|
19
|
+
bytes: number;
|
|
20
|
+
}
|
|
21
|
+
export interface CorpusManifest {
|
|
22
|
+
repository: string;
|
|
23
|
+
/** The Release commit every result is recorded against. */
|
|
24
|
+
commit: string;
|
|
25
|
+
commitDate: string;
|
|
26
|
+
vendoredAt: string;
|
|
27
|
+
/** Library name → version, read off the KPAR filenames. */
|
|
28
|
+
libraryVersions: Record<string, string>;
|
|
29
|
+
/** One roll-up over every file's path and hash. */
|
|
30
|
+
digest: string;
|
|
31
|
+
trees: CorpusTree[];
|
|
32
|
+
files: Record<string, CorpusFileEntry>;
|
|
33
|
+
}
|
|
34
|
+
export interface Corpus {
|
|
35
|
+
root: string;
|
|
36
|
+
manifest: CorpusManifest;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* The provenance stamped on every conformance result.
|
|
40
|
+
*
|
|
41
|
+
* §5.1 item 3: a conformance number that does not say which Release it was
|
|
42
|
+
* taken against is not a conformance number. It travels with the report so a
|
|
43
|
+
* baseline comparison can refuse to compare across pins rather than silently
|
|
44
|
+
* report a regression that is really a corpus change.
|
|
45
|
+
*/
|
|
46
|
+
export interface CorpusProvenance {
|
|
47
|
+
repository: string;
|
|
48
|
+
commit: string;
|
|
49
|
+
commitDate: string;
|
|
50
|
+
digest: string;
|
|
51
|
+
libraryVersions: Record<string, string>;
|
|
52
|
+
}
|
|
53
|
+
export declare function provenanceOf(corpus: Corpus): CorpusProvenance;
|
|
54
|
+
export declare class CorpusNotFoundError extends Error {
|
|
55
|
+
readonly dir: string;
|
|
56
|
+
constructor(dir: string);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Where the vendored corpus lives, relative to this module.
|
|
60
|
+
*
|
|
61
|
+
* `src/conformance/` and `lib/conformance/` sit at the same depth below the
|
|
62
|
+
* package root, so one expression serves both the compiled and the sources
|
|
63
|
+
* build without a build-time constant.
|
|
64
|
+
*/
|
|
65
|
+
export declare function defaultCorpusDir(): string;
|
|
66
|
+
export declare function loadCorpus(dir?: string): Corpus;
|
|
67
|
+
export interface ChecksumMismatch {
|
|
68
|
+
path: string;
|
|
69
|
+
reason: 'missing' | 'changed';
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Check vendored content against the manifest.
|
|
73
|
+
*
|
|
74
|
+
* `trees` narrows the check — hashing 150 MB to run a report over 1.4 MB of
|
|
75
|
+
* textual sources costs more than the report. The full sweep is what the
|
|
76
|
+
* corpus-integrity test runs.
|
|
77
|
+
*/
|
|
78
|
+
export declare function verifyCorpus(corpus: Corpus, trees?: readonly string[]): ChecksumMismatch[];
|
|
79
|
+
/**
|
|
80
|
+
* A unit of the corpus that is run and reported as one.
|
|
81
|
+
*
|
|
82
|
+
* The library units line up one-for-one with the ten published KPARs, so a
|
|
83
|
+
* count can be read against the thing the OMG actually ships rather than
|
|
84
|
+
* against a partition invented here. The examples are two more.
|
|
85
|
+
*/
|
|
86
|
+
export interface CorpusUnit {
|
|
87
|
+
id: string;
|
|
88
|
+
/** Directory, relative to the corpus root, in upstream's own path shape. */
|
|
89
|
+
path: string;
|
|
90
|
+
kind: 'library' | 'examples';
|
|
91
|
+
/** Absolute paths of the model sources in this unit, sorted. */
|
|
92
|
+
files: string[];
|
|
93
|
+
bytes: number;
|
|
94
|
+
}
|
|
95
|
+
/** Every model source under `dir`, absolute and sorted. */
|
|
96
|
+
export declare function modelSourcesIn(dir: string): string[];
|
|
97
|
+
/**
|
|
98
|
+
* Partition the corpus into units.
|
|
99
|
+
*
|
|
100
|
+
* A library group whose own directory holds sources is one unit (the Systems
|
|
101
|
+
* Library); otherwise each child directory is (Kernel Libraries, Domain
|
|
102
|
+
* Libraries). That rule is what produces the ten-way split matching the KPARs,
|
|
103
|
+
* without this file carrying a hardcoded list of library names that a Release
|
|
104
|
+
* bump would silently invalidate.
|
|
105
|
+
*/
|
|
106
|
+
export declare function corpusUnits(corpus: Corpus): CorpusUnit[];
|
|
107
|
+
/**
|
|
108
|
+
* Select units by id, accepting a prefix so `--unit library` means all of them.
|
|
109
|
+
*
|
|
110
|
+
* An unmatched selector is an error rather than an empty run: a conformance
|
|
111
|
+
* command that reports zero findings because it ran nothing is the worst
|
|
112
|
+
* possible false green.
|
|
113
|
+
*/
|
|
114
|
+
export declare function selectUnits(units: readonly CorpusUnit[], selectors: readonly string[]): CorpusUnit[];
|
|
115
|
+
/**
|
|
116
|
+
* The XMI file that serializes a given library source.
|
|
117
|
+
*
|
|
118
|
+
* Upstream mirrors the tree exactly and swaps the extension —
|
|
119
|
+
* `sysml.library/Systems Library/Parts.sysml` becomes
|
|
120
|
+
* `sysml.library.xmi.implied/Systems Library/Parts.sysmlx`.
|
|
121
|
+
*/
|
|
122
|
+
export declare function xmiCounterpart(corpus: Corpus, source: string, tree: string): string | undefined;
|
|
123
|
+
/** Corpus-relative path, in upstream's own separator, for reports. */
|
|
124
|
+
export declare function corpusRelative(corpus: Corpus, path: string): string;
|
|
125
|
+
//# sourceMappingURL=corpus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"corpus.d.ts","sourceRoot":"","sources":["../../src/conformance/corpus.ts"],"names":[],"mappings":"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"}
|