diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index cf6e304a..0b3a5f4e 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -33,3 +33,20 @@ jobs:
cache: 'npm'
- run: npm ci
- run: npm run verify
+ # dist/ is committed and is what a consumer runs (see .gitignore), so it must be
+ # the build of src/. verify's own build overwrites dist/ here and compares it
+ # with nothing, so this step does the comparison. Keep it after verify: a source
+ # that does not compile, or a failing test, is then reported by verify under its
+ # own name, and a red here means only "dist/ was not rebuilt and committed". It
+ # deletes dist/ first because tsc never deletes an output: built over the
+ # committed copy, a file whose source is gone would stay and pass. The status
+ # line prints every file that differs; it prints nothing when dist/ matches.
+ # To fix a red: rm -rf dist && npm run build, then commit dist/.
+ # test/ciDistGate.test.ts runs this script and keeps it in step with release.yml.
+ - name: dist/ is the build of src/
+ run: |
+ rm -rf dist
+ npm run build
+ git status --porcelain --untracked-files=all -- dist
+ git diff --exit-code --stat -- dist
+ test -z "$(git status --porcelain --untracked-files=all -- dist)"
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index a7e75f8d..dc779d88 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -52,6 +52,18 @@ jobs:
- name: Verify
run: npm run verify
+ # A consumer pins the tag and runs its committed dist/, so the tag's dist/ must
+ # be the build of its src/. The same check as ci.yml's step of the same name (see
+ # the comment there). It runs before the Release is created, so a tag whose dist/
+ # is stale never becomes a Release.
+ - name: dist/ is the build of src/
+ run: |
+ rm -rf dist
+ npm run build
+ git status --porcelain --untracked-files=all -- dist
+ git diff --exit-code --stat -- dist
+ test -z "$(git status --porcelain --untracked-files=all -- dist)"
+
- name: Create GitHub Release
# A third-party action that holds the write token, pinned to the commit
# its v3.0.3 tag points at, so a moved tag cannot change what runs here.
diff --git a/.gitignore b/.gitignore
index 944838d6..76b928dc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,7 +11,8 @@ coverage/
# as a git dependency, and enterprise npm setups often set `ignore-scripts=true`,
# which skips the `prepare` build on install. Shipping a prebuilt dist/ makes the
# git dependency resolve unconditionally. Rebuild with `npm run build` before
-# committing source changes (CI `verify` enforces it).
+# committing source changes. CI's "dist/ is the build of src/" step enforces it: it
+# rebuilds dist/ from clean after verify and fails if the result differs.
# Internal working notes — never publish to the public tree.
docs/
diff --git a/dist/datamodel/node/DataNode.d.ts b/dist/datamodel/node/DataNode.d.ts
index a6a36a8f..722e5808 100644
--- a/dist/datamodel/node/DataNode.d.ts
+++ b/dist/datamodel/node/DataNode.d.ts
@@ -176,8 +176,9 @@ export default class DataNode extends BaseNode {
* to its envelope for exactly that reason: an empty string MATLAB had never written,
* standing in for an empty 0x0 double it could not see.
*
- * So under an envelope an EMPTY override is dropped: it is a default rather than an
- * edit, and the envelope is already the authority on that property.
+ * So under an envelope an EMPTY override is dropped when the stored bag holds no sibling
+ * for that key, or an empty one: it is a default rather than an edit, and the envelope is
+ * already the authority on that property.
*
* A non-empty override goes to BOTH places, and the reason it is both is defect 46.
* The sibling used to be the only place it went, on the reasoning that silently
@@ -194,6 +195,26 @@ export default class DataNode extends BaseNode {
* package's own reader can see — decoding the envelope back into node properties is
* the other half of defect 40 and is not done here. Writing both keeps every consumer
* correct and is strictly additive over the old behaviour.
+ *
+ * That sibling is also what tells a clear from a default (C-199). MATLAB never writes a
+ * property beside its envelope, so a sibling that IS there was written by this package,
+ * and the node read its value from it. An empty override is then the user clearing that
+ * value, and dropping it kept the old value in both copies: MATLAB (R2027a) reopened the
+ * cleared variable with it, and so did this reader. So a clear is written the way MATLAB
+ * writes a cleared property. The sibling is deleted, because MATLAB writes none and this
+ * reader then substitutes the same empty default the node now holds. The envelope's field
+ * becomes `[]`, the 0x0 double MATLAB itself writes for a default VariantVariable's
+ * Specification and for one set to '' (measured 2026-10-16), whichever empty the override
+ * was. A field the envelope does not declare leaves the envelope untouched, as an edit does.
+ * Own keys only, so a stored bag can never claim a sibling through its prototype.
+ *
+ * Only a NON-EMPTY sibling makes an empty override a clear. When the sibling is itself
+ * empty ('', null or undefined), as in `
`, the node
+ * read '' from it, so an empty override repeats what it read: no change, and the file is
+ * written as it was read. Read as a clear, an edit to another property alone overwrote a
+ * real envelope value: Specification 'B' beside an empty sibling was saved as the 0x0
+ * double. No writer leaves that shape today, since MATLAB writes no sibling and this
+ * package (from v1.0.0) writes no empty one beside an envelope.
*/
_mergeProps(propOverrides: Record): Record;
serializeValue(): unknown;
diff --git a/dist/datamodel/node/DataNode.d.ts.map b/dist/datamodel/node/DataNode.d.ts.map
index 0f9e89b5..1220a126 100644
--- a/dist/datamodel/node/DataNode.d.ts.map
+++ b/dist/datamodel/node/DataNode.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"DataNode.d.ts","sourceRoot":"","sources":["../../../src/datamodel/node/DataNode.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"DataNode.d.ts","sourceRoot":"","sources":["../../../src/datamodel/node/DataNode.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/dist/datamodel/node/DataNode.js b/dist/datamodel/node/DataNode.js
index a64a6e95..ffc26644 100644
--- a/dist/datamodel/node/DataNode.js
+++ b/dist/datamodel/node/DataNode.js
@@ -818,8 +818,9 @@ export default class DataNode extends BaseNode {
* to its envelope for exactly that reason: an empty string MATLAB had never written,
* standing in for an empty 0x0 double it could not see.
*
- * So under an envelope an EMPTY override is dropped: it is a default rather than an
- * edit, and the envelope is already the authority on that property.
+ * So under an envelope an EMPTY override is dropped when the stored bag holds no sibling
+ * for that key, or an empty one: it is a default rather than an edit, and the envelope is
+ * already the authority on that property.
*
* A non-empty override goes to BOTH places, and the reason it is both is defect 46.
* The sibling used to be the only place it went, on the reasoning that silently
@@ -836,6 +837,26 @@ export default class DataNode extends BaseNode {
* package's own reader can see — decoding the envelope back into node properties is
* the other half of defect 40 and is not done here. Writing both keeps every consumer
* correct and is strictly additive over the old behaviour.
+ *
+ * That sibling is also what tells a clear from a default (C-199). MATLAB never writes a
+ * property beside its envelope, so a sibling that IS there was written by this package,
+ * and the node read its value from it. An empty override is then the user clearing that
+ * value, and dropping it kept the old value in both copies: MATLAB (R2027a) reopened the
+ * cleared variable with it, and so did this reader. So a clear is written the way MATLAB
+ * writes a cleared property. The sibling is deleted, because MATLAB writes none and this
+ * reader then substitutes the same empty default the node now holds. The envelope's field
+ * becomes `[]`, the 0x0 double MATLAB itself writes for a default VariantVariable's
+ * Specification and for one set to '' (measured 2026-10-16), whichever empty the override
+ * was. A field the envelope does not declare leaves the envelope untouched, as an edit does.
+ * Own keys only, so a stored bag can never claim a sibling through its prototype.
+ *
+ * Only a NON-EMPTY sibling makes an empty override a clear. When the sibling is itself
+ * empty ('', null or undefined), as in ``, the node
+ * read '' from it, so an empty override repeats what it read: no change, and the file is
+ * written as it was read. Read as a clear, an edit to another property alone overwrote a
+ * real envelope value: Specification 'B' beside an empty sibling was saved as the 0x0
+ * double. No writer leaves that shape today, since MATLAB writes no sibling and this
+ * package (from v1.0.0) writes no empty one beside an envelope.
*/
_mergeProps(propOverrides) {
const stored = { ...this.serial._properties };
@@ -843,8 +864,13 @@ export default class DataNode extends BaseNode {
return Object.assign(stored, propOverrides);
}
let envelope = stored[SAVEOBJ_KEY];
+ const isEmpty = (v) => v === '' || v === null || v === undefined;
for (const [key, val] of Object.entries(propOverrides)) {
- if (val === '' || val === null || val === undefined) {
+ if (isEmpty(val)) {
+ if (Object.prototype.hasOwnProperty.call(stored, key) && !isEmpty(stored[key])) {
+ delete stored[key];
+ envelope = writeIntoSaveobj(envelope, key, []);
+ }
continue;
}
stored[key] = val;
diff --git a/dist/datamodel/node/DataNode.js.map b/dist/datamodel/node/DataNode.js.map
index 3b057dbf..0a286da0 100644
--- a/dist/datamodel/node/DataNode.js.map
+++ b/dist/datamodel/node/DataNode.js.map
@@ -1 +1 @@
-{"version":3,"file":"DataNode.js","sourceRoot":"","sources":["../../../src/datamodel/node/DataNode.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"DataNode.js","sourceRoot":"","sources":["../../../src/datamodel/node/DataNode.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/dist/datamodel/node/SimulinkObjectNode.d.ts b/dist/datamodel/node/SimulinkObjectNode.d.ts
index 55f2a7ba..93ddd436 100644
--- a/dist/datamodel/node/SimulinkObjectNode.d.ts
+++ b/dist/datamodel/node/SimulinkObjectNode.d.ts
@@ -19,9 +19,11 @@ import DataNode from './DataNode.js';
* saveobj envelope — it drops an EMPTY override rather than writing back a default MATLAB
* never wrote, and writes a non-empty one INTO the envelope as well as beside it, because the
* envelope is what MATLAB's loadobj actually reads (defects 40 and 46; `_mergeProps` carries
- * the full account). That used to be the TEXT path only, with `VariantVariableNode` overriding
- * `_getSerializedProperties` to opt its binary path in, and the asymmetry was recorded here as
- * a separate question. Reading the emitted binary bytes answered it: `Simulink.VariantBank`,
+ * the full account). An empty override that meets a sibling this package wrote earlier is a
+ * clear, and is written as MATLAB writes one (C-199). That used to be the TEXT path only,
+ * with `VariantVariableNode` overriding `_getSerializedProperties` to opt its binary path in,
+ * and the asymmetry was recorded here as a separate question. Reading the emitted binary
+ * bytes answered it: `Simulink.VariantBank`,
* `Simulink.VariantBankCoderInfo` and `Simulink.VariantConfigurations` each came out carrying
* `` NEXT TO their envelope — a property none of those MATLAB
* classes has, standing in for a default this node cannot see inside the envelope, written
diff --git a/dist/datamodel/node/SimulinkObjectNode.d.ts.map b/dist/datamodel/node/SimulinkObjectNode.d.ts.map
index d735c48a..0c262060 100644
--- a/dist/datamodel/node/SimulinkObjectNode.d.ts.map
+++ b/dist/datamodel/node/SimulinkObjectNode.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"SimulinkObjectNode.d.ts","sourceRoot":"","sources":["../../../src/datamodel/node/SimulinkObjectNode.ts"],"names":[],"mappings":"AAEA,OAAO,QAA0B,MAAM,eAAe,CAAC;AAIvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,QAAQ;IACtD;;;;;;;;;;;OAWG;IACH,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAQ/C,wBAAwB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAInD,cAAc,IAAI,OAAO;IAOzB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAWzE;;;;;;;;;;;;;;;OAeG;IACH,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAiBzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,MAAM,CAAC,cAAc,CACnB,SAAS,EAAE,MAAM,EACjB,UAAU,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACvC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAS1B;;;;;;;;;;;;;;;;;;;OAmBG;IACH,MAAM,CAAC,wBAAwB,CAC7B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAW1B;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,UAAU,GAAE,MAAM,EAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAI7F;;;;;OAKG;IACH,MAAM,CAAC,UAAU,CAAC,UAAU,GAAE,MAAM,EAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIzE;;;;;;;;;;;;;;;;;;OAkBG;IACH,MAAM,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAY7E"}
\ No newline at end of file
+{"version":3,"file":"SimulinkObjectNode.d.ts","sourceRoot":"","sources":["../../../src/datamodel/node/SimulinkObjectNode.ts"],"names":[],"mappings":"AAEA,OAAO,QAA0B,MAAM,eAAe,CAAC;AAIvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,QAAQ;IACtD;;;;;;;;;;;OAWG;IACH,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAQ/C,wBAAwB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAInD,cAAc,IAAI,OAAO;IAOzB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAWzE;;;;;;;;;;;;;;;OAeG;IACH,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAiBzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,MAAM,CAAC,cAAc,CACnB,SAAS,EAAE,MAAM,EACjB,UAAU,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACvC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAS1B;;;;;;;;;;;;;;;;;;;OAmBG;IACH,MAAM,CAAC,wBAAwB,CAC7B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAW1B;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,UAAU,GAAE,MAAM,EAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAI7F;;;;;OAKG;IACH,MAAM,CAAC,UAAU,CAAC,UAAU,GAAE,MAAM,EAAW,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIzE;;;;;;;;;;;;;;;;;;OAkBG;IACH,MAAM,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAY7E"}
\ No newline at end of file
diff --git a/dist/datamodel/node/SimulinkObjectNode.js b/dist/datamodel/node/SimulinkObjectNode.js
index 481bc2f5..16141237 100644
--- a/dist/datamodel/node/SimulinkObjectNode.js
+++ b/dist/datamodel/node/SimulinkObjectNode.js
@@ -22,9 +22,11 @@ import { oneWrite, writeUnderWay } from '../parser/MatWriter.js';
* saveobj envelope — it drops an EMPTY override rather than writing back a default MATLAB
* never wrote, and writes a non-empty one INTO the envelope as well as beside it, because the
* envelope is what MATLAB's loadobj actually reads (defects 40 and 46; `_mergeProps` carries
- * the full account). That used to be the TEXT path only, with `VariantVariableNode` overriding
- * `_getSerializedProperties` to opt its binary path in, and the asymmetry was recorded here as
- * a separate question. Reading the emitted binary bytes answered it: `Simulink.VariantBank`,
+ * the full account). An empty override that meets a sibling this package wrote earlier is a
+ * clear, and is written as MATLAB writes one (C-199). That used to be the TEXT path only,
+ * with `VariantVariableNode` overriding `_getSerializedProperties` to opt its binary path in,
+ * and the asymmetry was recorded here as a separate question. Reading the emitted binary
+ * bytes answered it: `Simulink.VariantBank`,
* `Simulink.VariantBankCoderInfo` and `Simulink.VariantConfigurations` each came out carrying
* `` NEXT TO their envelope — a property none of those MATLAB
* classes has, standing in for a default this node cannot see inside the envelope, written
diff --git a/dist/datamodel/node/SimulinkObjectNode.js.map b/dist/datamodel/node/SimulinkObjectNode.js.map
index 80391686..8fabb361 100644
--- a/dist/datamodel/node/SimulinkObjectNode.js.map
+++ b/dist/datamodel/node/SimulinkObjectNode.js.map
@@ -1 +1 @@
-{"version":3,"file":"SimulinkObjectNode.js","sourceRoot":"","sources":["../../../src/datamodel/node/SimulinkObjectNode.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAErC,OAAO,QAAQ,EAAE,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEjE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,QAAQ;IACtD;;;;;;;;;;;OAWG;IACH,oBAAoB;QAClB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,0FAA0F;IAC1F,0FAA0F;IAC1F,4FAA4F;IAC5F,yEAAyE;IACzE,wBAAwB;QACtB,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,cAAc;QACZ,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;YACrB,OAAO,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QAC/C,CAAC;QACD,OAAO,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC;IACpE,CAAC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,WAAW,CAAC,UAAmC;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,WAAsC,CAAC;QAClE,MAAM,KAAK,GAA4B,EAAE,CAAC;QAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YACpD,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;gBACzB,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;YACnB,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,MAAM,CAAC,QAAQ,CAAC,MAA+B;QAC7C,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,IAAK,MAAM,CAAC,SAAuB,CAAC,CAAC,CAAC,CAEvD,CAAC;QACd,MAAM,KAAK,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,CAAwC,CAAC;QAChF,2FAA2F;QAC3F,wEAAwE;QACxE,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,wFAAwF;YACxF,yFAAyF;YACzF,yFAAyF;YACzF,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,CAAC;QACD,OAAO,EAAE,GAAG,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC/C,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,MAAM,CAAC,cAAc,CACnB,SAAiB,EACjB,aAAsC,EAAE;QAExC,OAAO;YACL,YAAY,EAAE,SAAS;YACvB,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACnB,gBAAgB,EAAE,aAAa;YAC/B,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;SACzC,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH,MAAM,CAAC,wBAAwB,CAC7B,SAAiB,EACjB,MAAgB,EAChB,OAAgC;QAEhC,OAAO,kBAAkB,CAAC,cAAc,CAAC,SAAS,EAAE;YAClD,CAAC,WAAW,CAAC,EAAE;gBACb,WAAW,EAAE,QAAQ;gBACrB,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;gBACnB,SAAS,EAAE,CAAC,OAAO,CAAC;gBACpB,OAAO,EAAE,MAAM;aAChB;SACF,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,MAAM,CAAC,YAAY,CAAC,MAAgB,EAAE,aAAuB,CAAC,CAAC,EAAE,CAAC,CAAC;QACjE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAC5F,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,UAAU,CAAC,aAAuB,CAAC,CAAC,EAAE,CAAC,CAAC;QAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IACzE,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,MAAM,CAAC,iBAAiB,CAAC,iBAAyB;QAChD,OAAO;YACL,aAAa,EAAE,oBAAoB;YACnC,WAAW,EAAE;gBACX,cAAc,EAAE,UAAU;gBAC1B,gBAAgB,EAAE,EAAE,aAAa,EAAE,0CAA0C,EAAE,WAAW,EAAE,EAAE,EAAE;gBAChG,kBAAkB,EAAE,SAAS;gBAC7B,iBAAiB,EAAE,iBAAiB;gBACpC,YAAY,EAAE,MAAM;aACrB;SACF,CAAC;IACJ,CAAC;CACF"}
\ No newline at end of file
+{"version":3,"file":"SimulinkObjectNode.js","sourceRoot":"","sources":["../../../src/datamodel/node/SimulinkObjectNode.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/dist/datamodel/node/data/DataSourceNode.d.ts b/dist/datamodel/node/data/DataSourceNode.d.ts
index 60b6de18..238b6163 100644
--- a/dist/datamodel/node/data/DataSourceNode.d.ts
+++ b/dist/datamodel/node/data/DataSourceNode.d.ts
@@ -5,6 +5,18 @@ export default class DataSourceNode extends BaseNode {
fullPath: string;
resolved: boolean;
constructor(name: string, parent: BaseNode | null, fullPath: string);
+ /**
+ * `…/dataSources/signals.mat@a/signals.mat`: the name, then the path the model recorded.
+ *
+ * The name is the path's basename (ModelSectionNode.addDataSourceEntry), so a model
+ * whose sources are `a/signals.mat` and `b/signals.mat` has two rows named
+ * `signals.mat`, and the inherited id gave both `…/dataSources/signals.mat`: two rows
+ * the host could not tell apart, and only one of them in the session index. Keying on
+ * the recorded path is the rule ModelReferenceNode.id applies to its block path, after
+ * ModelBlockNode.id's precedent. The name, the Name column and the link target
+ * (`this.name`) are unchanged.
+ */
+ get id(): string;
get isEntry(): boolean;
/**
* The one classification behind BOTH the icon and the class name.
diff --git a/dist/datamodel/node/data/DataSourceNode.d.ts.map b/dist/datamodel/node/data/DataSourceNode.d.ts.map
index 4bfe90f8..47b43a05 100644
--- a/dist/datamodel/node/data/DataSourceNode.d.ts.map
+++ b/dist/datamodel/node/data/DataSourceNode.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"DataSourceNode.d.ts","sourceRoot":"","sources":["../../../../src/datamodel/node/data/DataSourceNode.ts"],"names":[],"mappings":"AAEA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAC;AAMjD,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,QAAQ;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;gBAEN,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM;IAMnE,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;;;;;;;;;OAUG;IACH,OAAO,KAAK,YAAY,GASvB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED,IAAI,aAAa,IAAI,OAAO,CAE3B;IAKD,KAAK,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,GAAG,IAAI;IAQzC,aAAa,IAAI,SAAS,EAAE;IAI5B,WAAW,IAAI,UAAU,EAAE;CAK9B"}
\ No newline at end of file
+{"version":3,"file":"DataSourceNode.d.ts","sourceRoot":"","sources":["../../../../src/datamodel/node/data/DataSourceNode.ts"],"names":[],"mappings":"AAEA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAC;AAMjD,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,QAAQ;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;gBAEN,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM;IAMnE;;;;;;;;;;OAUG;IACH,IAAI,EAAE,IAAI,MAAM,CAGf;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;;;;;;;;;OAUG;IACH,OAAO,KAAK,YAAY,GASvB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED,IAAI,aAAa,IAAI,OAAO,CAE3B;IAKD,KAAK,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,GAAG,IAAI;IAQzC,aAAa,IAAI,SAAS,EAAE;IAI5B,WAAW,IAAI,UAAU,EAAE;CAK9B"}
\ No newline at end of file
diff --git a/dist/datamodel/node/data/DataSourceNode.js b/dist/datamodel/node/data/DataSourceNode.js
index fb02ae8e..782fb7e2 100644
--- a/dist/datamodel/node/data/DataSourceNode.js
+++ b/dist/datamodel/node/data/DataSourceNode.js
@@ -10,6 +10,21 @@ export default class DataSourceNode extends BaseNode {
this.fullPath = fullPath;
this.resolved = false;
}
+ /**
+ * `…/dataSources/signals.mat@a/signals.mat`: the name, then the path the model recorded.
+ *
+ * The name is the path's basename (ModelSectionNode.addDataSourceEntry), so a model
+ * whose sources are `a/signals.mat` and `b/signals.mat` has two rows named
+ * `signals.mat`, and the inherited id gave both `…/dataSources/signals.mat`: two rows
+ * the host could not tell apart, and only one of them in the session index. Keying on
+ * the recorded path is the rule ModelReferenceNode.id applies to its block path, after
+ * ModelBlockNode.id's precedent. The name, the Name column and the link target
+ * (`this.name`) are unchanged.
+ */
+ get id() {
+ const key = this.name + '@' + this.fullPath;
+ return this.parent ? this.parent.id + '/' + key : key;
+ }
get isEntry() {
return true;
}
diff --git a/dist/datamodel/node/data/DataSourceNode.js.map b/dist/datamodel/node/data/DataSourceNode.js.map
index 699acf2d..ba2b7071 100644
--- a/dist/datamodel/node/data/DataSourceNode.js.map
+++ b/dist/datamodel/node/data/DataSourceNode.js.map
@@ -1 +1 @@
-{"version":3,"file":"DataSourceNode.js","sourceRoot":"","sources":["../../../../src/datamodel/node/data/DataSourceNode.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAErC,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAGtC,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,UAAU,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE7D,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,QAAQ;IAIhD,YAAY,IAAY,EAAE,MAAuB,EAAE,QAAgB;QAC/D,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACpB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IAC1B,CAAC;IAED,IAAI,OAAO;QACP,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;;;;;;OAUG;IACH,IAAY,YAAY;QACpB,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAAC,OAAO,EAAE,IAAI,EAAE,2BAA2B,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC;QAAC,CAAC;QAC1G,4EAA4E;QAC5E,4EAA4E;QAC5E,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAAC,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;QAAC,CAAC;QACjG,gFAAgF;QAChF,kFAAkF;QAClF,0BAA0B;QAC1B,OAAO,EAAE,IAAI,EAAE,qBAAqB,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;IAClE,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;IAClC,CAAC;IAED,IAAI,WAAW;QACX,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,IAAI,YAAY;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED,IAAI,SAAS;QACT,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;IACvC,CAAC;IAED,IAAI,YAAY;QACZ,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,IAAI,aAAa;QACb,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,uFAAuF;IACvF,oFAAoF;IACpF,kEAAkE;IAClE,KAAK,CAAC,IAAkB;QACpB,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,GAAG,EAAE,CAAC;YACN,GAAG,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,KAAe,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QACrE,CAAC;QACD,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC/C,CAAC;IAED,aAAa;QACT,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC5C,CAAC;IAED,WAAW;QACP,OAAO;YACH,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE;SAChE,CAAC;IACN,CAAC;CACJ"}
\ No newline at end of file
+{"version":3,"file":"DataSourceNode.js","sourceRoot":"","sources":["../../../../src/datamodel/node/data/DataSourceNode.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAErC,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAGtC,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,UAAU,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE7D,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,QAAQ;IAIhD,YAAY,IAAY,EAAE,MAAuB,EAAE,QAAgB;QAC/D,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACpB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IAC1B,CAAC;IAED;;;;;;;;;;OAUG;IACH,IAAI,EAAE;QACF,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC5C,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAC1D,CAAC;IAED,IAAI,OAAO;QACP,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;;;;;;OAUG;IACH,IAAY,YAAY;QACpB,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAAC,OAAO,EAAE,IAAI,EAAE,2BAA2B,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC;QAAC,CAAC;QAC1G,4EAA4E;QAC5E,4EAA4E;QAC5E,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAAC,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;QAAC,CAAC;QACjG,gFAAgF;QAChF,kFAAkF;QAClF,0BAA0B;QAC1B,OAAO,EAAE,IAAI,EAAE,qBAAqB,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;IAClE,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;IAClC,CAAC;IAED,IAAI,WAAW;QACX,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,IAAI,YAAY;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED,IAAI,SAAS;QACT,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;IACvC,CAAC;IAED,IAAI,YAAY;QACZ,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,IAAI,aAAa;QACb,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,uFAAuF;IACvF,oFAAoF;IACpF,kEAAkE;IAClE,KAAK,CAAC,IAAkB;QACpB,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,GAAG,EAAE,CAAC;YACN,GAAG,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,KAAe,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QACrE,CAAC;QACD,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC/C,CAAC;IAED,aAAa;QACT,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IAC5C,CAAC;IAED,WAAW;QACP,OAAO;YACH,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE;SAChE,CAAC;IACN,CAAC;CACJ"}
\ No newline at end of file
diff --git a/dist/datamodel/node/data/ModelReferenceNode.d.ts b/dist/datamodel/node/data/ModelReferenceNode.d.ts
index 5c649222..a942bdcc 100644
--- a/dist/datamodel/node/data/ModelReferenceNode.d.ts
+++ b/dist/datamodel/node/data/ModelReferenceNode.d.ts
@@ -5,6 +5,20 @@ export default class ModelReferenceNode extends BaseNode {
blockPath: string;
resolved: boolean;
constructor(name: string, parent: BaseNode | null, blockPath: string);
+ /**
+ * `…/references/plant.slx@top/A`: the referenced name, then the referencing block's path.
+ *
+ * The name is the FILE a reference points at, so a model that references `plant` from
+ * two Model blocks has two rows named `plant.slx`, and the inherited id gave both
+ * `…/references/plant.slx`. A node id is what findNodeById resolves, what a row is keyed
+ * by and what a selection is remembered as, so two nodes with one id were two rows the
+ * host could not tell apart, and the session index kept only one of them. The block path
+ * is unique per Model block, which makes the id unique whatever characters it holds.
+ *
+ * ModelBlockNode.id is the precedent: it keys a block on its SID for the same reason.
+ * The name, the Name column and the link target (`this.name`) are unchanged.
+ */
+ get id(): string;
get isEntry(): boolean;
get icon(): string;
get displayName(): string;
diff --git a/dist/datamodel/node/data/ModelReferenceNode.d.ts.map b/dist/datamodel/node/data/ModelReferenceNode.d.ts.map
index 31f54701..02eee979 100644
--- a/dist/datamodel/node/data/ModelReferenceNode.d.ts.map
+++ b/dist/datamodel/node/data/ModelReferenceNode.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"ModelReferenceNode.d.ts","sourceRoot":"","sources":["../../../../src/datamodel/node/data/ModelReferenceNode.ts"],"names":[],"mappings":"AAEA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAC;AAKjD,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,QAAQ;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;gBAEN,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,SAAS,EAAE,MAAM;IAMpE,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED,IAAI,aAAa,IAAI,OAAO,CAE3B;IAGD,KAAK,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,GAAG,IAAI;IAQzC,aAAa,IAAI,SAAS,EAAE;IAI5B,WAAW,IAAI,UAAU,EAAE;CAK9B"}
\ No newline at end of file
+{"version":3,"file":"ModelReferenceNode.d.ts","sourceRoot":"","sources":["../../../../src/datamodel/node/data/ModelReferenceNode.ts"],"names":[],"mappings":"AAEA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAC;AAKjD,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,QAAQ;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;gBAEN,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,SAAS,EAAE,MAAM;IAMpE;;;;;;;;;;;;OAYG;IACH,IAAI,EAAE,IAAI,MAAM,CAGf;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED,IAAI,aAAa,IAAI,OAAO,CAE3B;IAGD,KAAK,CAAC,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,GAAG,IAAI;IAQzC,aAAa,IAAI,SAAS,EAAE;IAI5B,WAAW,IAAI,UAAU,EAAE;CAK9B"}
\ No newline at end of file
diff --git a/dist/datamodel/node/data/ModelReferenceNode.js b/dist/datamodel/node/data/ModelReferenceNode.js
index 8db7b56f..2dca789e 100644
--- a/dist/datamodel/node/data/ModelReferenceNode.js
+++ b/dist/datamodel/node/data/ModelReferenceNode.js
@@ -9,6 +9,23 @@ export default class ModelReferenceNode extends BaseNode {
this.blockPath = blockPath;
this.resolved = false;
}
+ /**
+ * `…/references/plant.slx@top/A`: the referenced name, then the referencing block's path.
+ *
+ * The name is the FILE a reference points at, so a model that references `plant` from
+ * two Model blocks has two rows named `plant.slx`, and the inherited id gave both
+ * `…/references/plant.slx`. A node id is what findNodeById resolves, what a row is keyed
+ * by and what a selection is remembered as, so two nodes with one id were two rows the
+ * host could not tell apart, and the session index kept only one of them. The block path
+ * is unique per Model block, which makes the id unique whatever characters it holds.
+ *
+ * ModelBlockNode.id is the precedent: it keys a block on its SID for the same reason.
+ * The name, the Name column and the link target (`this.name`) are unchanged.
+ */
+ get id() {
+ const key = this.name + '@' + this.blockPath;
+ return this.parent ? this.parent.id + '/' + key : key;
+ }
get isEntry() {
return true;
}
diff --git a/dist/datamodel/node/data/ModelReferenceNode.js.map b/dist/datamodel/node/data/ModelReferenceNode.js.map
index 9d0b439e..7e6f4a1b 100644
--- a/dist/datamodel/node/data/ModelReferenceNode.js.map
+++ b/dist/datamodel/node/data/ModelReferenceNode.js.map
@@ -1 +1 @@
-{"version":3,"file":"ModelReferenceNode.js","sourceRoot":"","sources":["../../../../src/datamodel/node/data/ModelReferenceNode.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAErC,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAGtC,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,aAAa,MAAM,6BAA6B,CAAC;AACxD,OAAO,UAAU,MAAM,0BAA0B,CAAC;AAElD,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,QAAQ;IAIpD,YAAY,IAAY,EAAE,MAAuB,EAAE,SAAiB;QAChE,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACpB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IAC1B,CAAC;IAED,IAAI,OAAO;QACP,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,gBAAgB,CAAC;IAC5B,CAAC;IAED,IAAI,WAAW;QACX,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,IAAI,YAAY;QACZ,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,IAAI,SAAS;QACT,OAAO,iBAAiB,CAAC;IAC7B,CAAC;IAED,IAAI,YAAY;QACZ,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,IAAI,aAAa;QACb,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,+EAA+E;IAC/E,KAAK,CAAC,IAAkB;QACpB,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,GAAG,EAAE,CAAC;YACN,GAAG,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,KAAe,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QACrE,CAAC;QACD,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC/C,CAAC;IAED,aAAa;QACT,OAAO,CAAC,QAAQ,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;IACjD,CAAC;IAED,WAAW;QACP,OAAO;YACH,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,UAAU,CAAC,EAAE;SACrE,CAAC;IACN,CAAC;CACJ"}
\ No newline at end of file
+{"version":3,"file":"ModelReferenceNode.js","sourceRoot":"","sources":["../../../../src/datamodel/node/data/ModelReferenceNode.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAErC,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAGtC,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,aAAa,MAAM,6BAA6B,CAAC;AACxD,OAAO,UAAU,MAAM,0BAA0B,CAAC;AAElD,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,QAAQ;IAIpD,YAAY,IAAY,EAAE,MAAuB,EAAE,SAAiB;QAChE,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACpB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;IAC1B,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,IAAI,EAAE;QACF,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;QAC7C,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAC1D,CAAC;IAED,IAAI,OAAO;QACP,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,gBAAgB,CAAC;IAC5B,CAAC;IAED,IAAI,WAAW;QACX,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,IAAI,YAAY;QACZ,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,IAAI,SAAS;QACT,OAAO,iBAAiB,CAAC;IAC7B,CAAC;IAED,IAAI,YAAY;QACZ,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,IAAI,aAAa;QACb,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,+EAA+E;IAC/E,KAAK,CAAC,IAAkB;QACpB,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,GAAG,EAAE,CAAC;YACN,GAAG,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,KAAe,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QACrE,CAAC;QACD,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC/C,CAAC;IAED,aAAa;QACT,OAAO,CAAC,QAAQ,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;IACjD,CAAC;IAED,WAAW;QACP,OAAO;YACH,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,UAAU,CAAC,EAAE;SACrE,CAAC;IACN,CAAC;CACJ"}
\ No newline at end of file
diff --git a/dist/datamodel/node/data/VariantControlNode.d.ts b/dist/datamodel/node/data/VariantControlNode.d.ts
index 9a87e0d8..1e7babb5 100644
--- a/dist/datamodel/node/data/VariantControlNode.d.ts
+++ b/dist/datamodel/node/data/VariantControlNode.d.ts
@@ -9,6 +9,7 @@ export default class VariantControlNode extends SimulinkObjectNode {
get className(): string;
get displayValue(): string;
getProperties(): PropClass[];
+ get descriptionEditable(): boolean;
/**
* Validate and apply a Value edit. MATLAB requires the Value to be an
* integer-valued real scalar, a logical (true/false), or empty (''/'[]').
diff --git a/dist/datamodel/node/data/VariantControlNode.d.ts.map b/dist/datamodel/node/data/VariantControlNode.d.ts.map
index c12b7839..53108f19 100644
--- a/dist/datamodel/node/data/VariantControlNode.d.ts.map
+++ b/dist/datamodel/node/data/VariantControlNode.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"VariantControlNode.d.ts","sourceRoot":"","sources":["../../../../src/datamodel/node/data/VariantControlNode.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAW3C,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,kBAAkB;IAC9D,KAAK,EAAE,OAAO,CAAC;gBACH,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAClH,IAAI,IAAI,IAAI,MAAM,CAAqC;IACvD,IAAI,SAAS,IAAI,MAAM,CAAuB;IAC9C,IAAI,YAAY,IAAI,MAAM,CAAyC;IACnE,aAAa,IAAI,SAAS,EAAE;IAI5B;;;;;OAKG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,iBAAiB;IAoE5E,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC/C,MAAM,KAAK,WAAW,IAAI,MAAM,CAA6B;IAM7D,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,kBAAkB;IAC/E,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,kBAAkB;CAC3G"}
\ No newline at end of file
+{"version":3,"file":"VariantControlNode.d.ts","sourceRoot":"","sources":["../../../../src/datamodel/node/data/VariantControlNode.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAW3C,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,kBAAkB;IAC9D,KAAK,EAAE,OAAO,CAAC;gBACH,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAClH,IAAI,IAAI,IAAI,MAAM,CAAqC;IACvD,IAAI,SAAS,IAAI,MAAM,CAAuB;IAC9C,IAAI,YAAY,IAAI,MAAM,CAAyC;IACnE,aAAa,IAAI,SAAS,EAAE;IAQ5B,IAAI,mBAAmB,IAAI,OAAO,CAAkB;IAIpD;;;;;OAKG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,iBAAiB;IAoE5E,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC/C,MAAM,KAAK,WAAW,IAAI,MAAM,CAA6B;IAM7D,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,kBAAkB;IAC/E,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,GAAG,kBAAkB;CAC3G"}
\ No newline at end of file
diff --git a/dist/datamodel/node/data/VariantControlNode.js b/dist/datamodel/node/data/VariantControlNode.js
index c6ec0844..c10c76bb 100644
--- a/dist/datamodel/node/data/VariantControlNode.js
+++ b/dist/datamodel/node/data/VariantControlNode.js
@@ -13,6 +13,14 @@ export default class VariantControlNode extends SimulinkObjectNode {
get className() { return CLASS_NAME; }
get displayValue() { return PropValue.format(this.Value); }
getProperties() { return [PropName, PropValue, PropDataType]; }
+ // No Description to edit (decision D11: an entry-level Description edit on a class whose
+ // file has no Description is refused). MATLAB writes no Description for a control (the
+ // binary params.sldd's MyVarCtrl holds Value, ActivationTime and ValueType), the schema
+ // (classes/variantControl.json) has none, and _serializedOverrides below writes the Value
+ // alone, so an accepted edit was lost on save.
+ // False here makes the row and the property inspector offer no editor, and DataNode's
+ // setProperty refuses the edit.
+ get descriptionEditable() { return false; }
// PI layout: inherited BaseNode.getPILayout → buildPILayout drives the schema
// "General" identity group (classes/variantControl.json).
/**
diff --git a/dist/datamodel/node/data/VariantControlNode.js.map b/dist/datamodel/node/data/VariantControlNode.js.map
index 42114d5b..26f2373e 100644
--- a/dist/datamodel/node/data/VariantControlNode.js.map
+++ b/dist/datamodel/node/data/VariantControlNode.js.map
@@ -1 +1 @@
-{"version":3,"file":"VariantControlNode.js","sourceRoot":"","sources":["../../../../src/datamodel/node/data/VariantControlNode.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"VariantControlNode.js","sourceRoot":"","sources":["../../../../src/datamodel/node/data/VariantControlNode.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/dist/datamodel/node/piOther.d.ts.map b/dist/datamodel/node/piOther.d.ts.map
index 489c9c78..d0ed01f1 100644
--- a/dist/datamodel/node/piOther.d.ts.map
+++ b/dist/datamodel/node/piOther.d.ts.map
@@ -1 +1 @@
-{"version":3,"file":"piOther.d.ts","sourceRoot":"","sources":["../../../src/datamodel/node/piOther.ts"],"names":[],"mappings":"AA+BA,MAAM,WAAW,QAAQ;IAErB,IAAI,EAAE,MAAM,CAAC;IAEb,KAAK,EAAE,MAAM,CAAC;CACjB;AAqKD,wBAAgB,cAAc,CAAC,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,QAAQ,EAAE,CAsCtF"}
\ No newline at end of file
+{"version":3,"file":"piOther.d.ts","sourceRoot":"","sources":["../../../src/datamodel/node/piOther.ts"],"names":[],"mappings":"AAoCA,MAAM,WAAW,QAAQ;IAErB,IAAI,EAAE,MAAM,CAAC;IAEb,KAAK,EAAE,MAAM,CAAC;CACjB;AA2MD,wBAAgB,cAAc,CAAC,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,QAAQ,EAAE,CAsCtF"}
\ No newline at end of file
diff --git a/dist/datamodel/node/piOther.js b/dist/datamodel/node/piOther.js
index 6bf79b9a..62255f03 100644
--- a/dist/datamodel/node/piOther.js
+++ b/dist/datamodel/node/piOther.js
@@ -7,19 +7,23 @@
// helpers that read a value out of one, and the display convention's spellings), so it
// stays inside the extractable data-model layer. Behavior:
// - Nested MATLAB objects ({ _object_class, _properties }) are flattened ONE
-// level: `CoderInfo.StorageClass`, `CoderInfo.CSCPackageName`, …
+// level: `CoderInfo.StorageClass`, `CoderInfo.CSCPackageName`, … So is an object
+// array of one 1x1 element ({ _array_class, _elements: [{ _properties }] }), which is
+// how a binary dictionary spells a nested object; an object array of any other
+// extent is its summary, `<1x2 Simulink.lookuptable.Breakpoint>`.
// - Typed scalars ({ _type, _value }) are unwrapped to their value, and a typed empty is `[ ]`.
// - A `cdata` value — complex text, or a text dictionary's MAT stream — is read
// and laid out the way the same channel shows a real value of its shape; a sparse
// array, however it is spelled, is its summary (`<3x3 sparse double>`).
-// - Objects nested DEEPER than one level render as their `[ClassName]`.
+// - Objects nested DEEPER than one level render as their `[ClassName]`, and object
+// arrays there as their ``.
// - Arrays render as `[a, b, c]`.
// Values are read-only display strings; the bag is never mutated.
import { isMatCdata, uudecode } from '../parser/CdataCodec.js';
import { encodedClass, encodedStream, isEncodedValue } from '../parser/EncodedValue.js';
import { decodeMatStream } from '../parser/MatParser.js';
-import { EMPTY_NUMERIC, sparseSummaryForm } from '../display/DisplayConvention.js';
-import { complexClassTag, formatComplexNum, formatMatlabNum, parseComplexNum, transposeFromColumnMajorND, } from '../parser/XmlUtils.js';
+import { EMPTY_NUMERIC, sparseSummaryForm, summaryForm } from '../display/DisplayConvention.js';
+import { ENUMERATION_KEY, complexClassTag, formatComplexNum, formatMatlabNum, parseComplexNum, transposeFromColumnMajorND, } from '../parser/XmlUtils.js';
// Internal serialization-envelope keys — structural, never user properties.
const ENVELOPE_KEYS = new Set([
'_id', '_object_class', '_array_class', '_array_type', '_dimensions',
@@ -142,15 +146,50 @@ function formatStream(bytes) {
return '';
}
}
-// A nested MATLAB object { _object_class, _properties } → its class + prop bag.
+// An object array { _array_class, _dimensions, _elements: [{ _properties }, …] }: how a
+// binary dictionary spells every object value, a text dictionary an object array (a bus's
+// elements) or a mixed-class object, and a `.mat` an object array property (McosParser,
+// `_array_type: 'MATLABArray'`). Not a struct, cell or string array, which share the
+// envelope, and not an enumeration value, whose elements are enumerals with an empty bag.
+// Unshaped, its elements are a row.
+function asObjectArray(v) {
+ const elements = v._elements;
+ if (typeof v._array_class !== 'string' || v._array_class === '' || !Array.isArray(elements)) {
+ return null;
+ }
+ if (v._array_type === 'Struct' || v._array_type === 'Cell' || v._array_type === 'String') {
+ return null;
+ }
+ if (!elements.every((e) => isPlainObject(e) && isPlainObject(e._properties) && !(ENUMERATION_KEY in e))) {
+ return null;
+ }
+ const dims = Array.isArray(v._dimensions) ? v._dimensions : [1, elements.length];
+ return { className: v._array_class, dims, elements: elements };
+}
+// One element in a 1x1 shape: the object that element is.
+function isOneObject(arr) {
+ return arr.elements.length === 1 && arr.dims.every((d) => d === 1);
+}
+// A nested MATLAB object { _object_class, _properties }, or an object array of one 1x1
+// element → its class + prop bag. The element's own class is the object's, and the array's
+// only where it has none, as the node layer reads one (DataNode.elementClassOf).
function asNestedObject(v) {
if (isPlainObject(v._properties)) {
return { className: String(v._object_class ?? ''), props: v._properties };
}
+ const arr = asObjectArray(v);
+ if (arr && isOneObject(arr)) {
+ const own = arr.elements[0]._object_class;
+ return {
+ className: typeof own === 'string' && own !== '' ? own : arr.className,
+ props: arr.elements[0]._properties,
+ };
+ }
return null;
}
// Format a leaf value (primitive / array / deeper object) for display. A deeper
-// object collapses to its `[ClassName]` rather than recursing (one-level rule).
+// object collapses to its `[ClassName]` rather than recursing (one-level rule), and an
+// object array that is not one object to its summary, at any depth.
function formatOther(v) {
if (v === undefined || v === null) {
return '';
@@ -167,7 +206,8 @@ function formatOther(v) {
if (obj) {
return obj.className ? '[' + obj.className + ']' : '[object]';
}
- return '';
+ const arr = asObjectArray(v);
+ return arr ? summaryForm(arr.dims, arr.className) : '';
}
return String(v);
}
diff --git a/dist/datamodel/node/piOther.js.map b/dist/datamodel/node/piOther.js.map
index b07730ab..ad50845b 100644
--- a/dist/datamodel/node/piOther.js.map
+++ b/dist/datamodel/node/piOther.js.map
@@ -1 +1 @@
-{"version":3,"file":"piOther.js","sourceRoot":"","sources":["../../../src/datamodel/node/piOther.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"piOther.js","sourceRoot":"","sources":["../../../src/datamodel/node/piOther.ts"],"names":[],"mappings":"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"}
\ No newline at end of file
diff --git a/src/datamodel/node/DataNode.ts b/src/datamodel/node/DataNode.ts
index fdb57f87..b1a6bd20 100644
--- a/src/datamodel/node/DataNode.ts
+++ b/src/datamodel/node/DataNode.ts
@@ -919,8 +919,9 @@ export default class DataNode extends BaseNode {
* to its envelope for exactly that reason: an empty string MATLAB had never written,
* standing in for an empty 0x0 double it could not see.
*
- * So under an envelope an EMPTY override is dropped: it is a default rather than an
- * edit, and the envelope is already the authority on that property.
+ * So under an envelope an EMPTY override is dropped when the stored bag holds no sibling
+ * for that key, or an empty one: it is a default rather than an edit, and the envelope is
+ * already the authority on that property.
*
* A non-empty override goes to BOTH places, and the reason it is both is defect 46.
* The sibling used to be the only place it went, on the reasoning that silently
@@ -937,6 +938,26 @@ export default class DataNode extends BaseNode {
* package's own reader can see — decoding the envelope back into node properties is
* the other half of defect 40 and is not done here. Writing both keeps every consumer
* correct and is strictly additive over the old behaviour.
+ *
+ * That sibling is also what tells a clear from a default (C-199). MATLAB never writes a
+ * property beside its envelope, so a sibling that IS there was written by this package,
+ * and the node read its value from it. An empty override is then the user clearing that
+ * value, and dropping it kept the old value in both copies: MATLAB (R2027a) reopened the
+ * cleared variable with it, and so did this reader. So a clear is written the way MATLAB
+ * writes a cleared property. The sibling is deleted, because MATLAB writes none and this
+ * reader then substitutes the same empty default the node now holds. The envelope's field
+ * becomes `[]`, the 0x0 double MATLAB itself writes for a default VariantVariable's
+ * Specification and for one set to '' (measured 2026-10-16), whichever empty the override
+ * was. A field the envelope does not declare leaves the envelope untouched, as an edit does.
+ * Own keys only, so a stored bag can never claim a sibling through its prototype.
+ *
+ * Only a NON-EMPTY sibling makes an empty override a clear. When the sibling is itself
+ * empty ('', null or undefined), as in ``, the node
+ * read '' from it, so an empty override repeats what it read: no change, and the file is
+ * written as it was read. Read as a clear, an edit to another property alone overwrote a
+ * real envelope value: Specification 'B' beside an empty sibling was saved as the 0x0
+ * double. No writer leaves that shape today, since MATLAB writes no sibling and this
+ * package (from v1.0.0) writes no empty one beside an envelope.
*/
_mergeProps(propOverrides: Record): Record {
const stored = { ...(this.serial._properties as Record) };
@@ -944,8 +965,13 @@ export default class DataNode extends BaseNode {
return Object.assign(stored, propOverrides);
}
let envelope = stored[SAVEOBJ_KEY];
+ const isEmpty = (v: unknown): boolean => v === '' || v === null || v === undefined;
for (const [key, val] of Object.entries(propOverrides)) {
- if (val === '' || val === null || val === undefined) {
+ if (isEmpty(val)) {
+ if (Object.prototype.hasOwnProperty.call(stored, key) && !isEmpty(stored[key])) {
+ delete stored[key];
+ envelope = writeIntoSaveobj(envelope, key, []);
+ }
continue;
}
stored[key] = val;
diff --git a/src/datamodel/node/SimulinkObjectNode.ts b/src/datamodel/node/SimulinkObjectNode.ts
index a4a56279..18602a95 100644
--- a/src/datamodel/node/SimulinkObjectNode.ts
+++ b/src/datamodel/node/SimulinkObjectNode.ts
@@ -24,9 +24,11 @@ import { oneWrite, writeUnderWay } from '../parser/MatWriter.js';
* saveobj envelope — it drops an EMPTY override rather than writing back a default MATLAB
* never wrote, and writes a non-empty one INTO the envelope as well as beside it, because the
* envelope is what MATLAB's loadobj actually reads (defects 40 and 46; `_mergeProps` carries
- * the full account). That used to be the TEXT path only, with `VariantVariableNode` overriding
- * `_getSerializedProperties` to opt its binary path in, and the asymmetry was recorded here as
- * a separate question. Reading the emitted binary bytes answered it: `Simulink.VariantBank`,
+ * the full account). An empty override that meets a sibling this package wrote earlier is a
+ * clear, and is written as MATLAB writes one (C-199). That used to be the TEXT path only,
+ * with `VariantVariableNode` overriding `_getSerializedProperties` to opt its binary path in,
+ * and the asymmetry was recorded here as a separate question. Reading the emitted binary
+ * bytes answered it: `Simulink.VariantBank`,
* `Simulink.VariantBankCoderInfo` and `Simulink.VariantConfigurations` each came out carrying
* `` NEXT TO their envelope — a property none of those MATLAB
* classes has, standing in for a default this node cannot see inside the envelope, written
diff --git a/src/datamodel/node/data/DataSourceNode.md b/src/datamodel/node/data/DataSourceNode.md
index fa1c1195..f8a90195 100644
--- a/src/datamodel/node/data/DataSourceNode.md
+++ b/src/datamodel/node/data/DataSourceNode.md
@@ -28,6 +28,11 @@ node when the file is open in the session — matching the name against each ope
source's srcId, its basename and its recorded `meta.path` — and a `'source-not-open'`
status naming the file when it is not, which is what lets a host offer to open it.
+Its id is `/@`, e.g. `mdlcases.mdl/dataSources/mdlparams.sldd@mdlparams.sldd`,
+not the inherited `/`. The name is the basename of the recorded path, so
+`a/signals.mat` and `b/signals.mat` are two rows named `signals.mat`, and the path is what
+tells them apart. The Name column and the link target are still the bare name.
+
## Property table
| Property | Editor | Notes |
diff --git a/src/datamodel/node/data/DataSourceNode.ts b/src/datamodel/node/data/DataSourceNode.ts
index 0fcc895a..286051cc 100644
--- a/src/datamodel/node/data/DataSourceNode.ts
+++ b/src/datamodel/node/data/DataSourceNode.ts
@@ -18,6 +18,22 @@ export default class DataSourceNode extends BaseNode {
this.resolved = false;
}
+ /**
+ * `…/dataSources/signals.mat@a/signals.mat`: the name, then the path the model recorded.
+ *
+ * The name is the path's basename (ModelSectionNode.addDataSourceEntry), so a model
+ * whose sources are `a/signals.mat` and `b/signals.mat` has two rows named
+ * `signals.mat`, and the inherited id gave both `…/dataSources/signals.mat`: two rows
+ * the host could not tell apart, and only one of them in the session index. Keying on
+ * the recorded path is the rule ModelReferenceNode.id applies to its block path, after
+ * ModelBlockNode.id's precedent. The name, the Name column and the link target
+ * (`this.name`) are unchanged.
+ */
+ get id(): string {
+ const key = this.name + '@' + this.fullPath;
+ return this.parent ? this.parent.id + '/' + key : key;
+ }
+
get isEntry(): boolean {
return true;
}
diff --git a/src/datamodel/node/data/ModelReferenceNode.md b/src/datamodel/node/data/ModelReferenceNode.md
index 144c7ec0..ad6cb459 100644
--- a/src/datamodel/node/data/ModelReferenceNode.md
+++ b/src/datamodel/node/data/ModelReferenceNode.md
@@ -27,6 +27,12 @@ one. `session.resolveLink(target)` follows it and, because that extension is a g
falls back to matching an open model with the other model extension once no exact or
basename match is found.
+Its id is `/@`, e.g. `model_with_refs.slx/references/plant.slx@ctrl/plant`,
+not the inherited `/`. A model that references one model from two Model
+blocks has two rows with the same name, and the block path is what tells them apart, as
+the SID does for `ModelBlockNode.id`. The Name column and the link target are still the
+bare name.
+
## Property table
| Property | Editor | Notes |
diff --git a/src/datamodel/node/data/ModelReferenceNode.ts b/src/datamodel/node/data/ModelReferenceNode.ts
index adeb390f..84bf697c 100644
--- a/src/datamodel/node/data/ModelReferenceNode.ts
+++ b/src/datamodel/node/data/ModelReferenceNode.ts
@@ -17,6 +17,24 @@ export default class ModelReferenceNode extends BaseNode {
this.resolved = false;
}
+ /**
+ * `…/references/plant.slx@top/A`: the referenced name, then the referencing block's path.
+ *
+ * The name is the FILE a reference points at, so a model that references `plant` from
+ * two Model blocks has two rows named `plant.slx`, and the inherited id gave both
+ * `…/references/plant.slx`. A node id is what findNodeById resolves, what a row is keyed
+ * by and what a selection is remembered as, so two nodes with one id were two rows the
+ * host could not tell apart, and the session index kept only one of them. The block path
+ * is unique per Model block, which makes the id unique whatever characters it holds.
+ *
+ * ModelBlockNode.id is the precedent: it keys a block on its SID for the same reason.
+ * The name, the Name column and the link target (`this.name`) are unchanged.
+ */
+ get id(): string {
+ const key = this.name + '@' + this.blockPath;
+ return this.parent ? this.parent.id + '/' + key : key;
+ }
+
get isEntry(): boolean {
return true;
}
diff --git a/src/datamodel/node/data/Simulink.VariantControl.md b/src/datamodel/node/data/Simulink.VariantControl.md
index 69619038..6f256d98 100644
--- a/src/datamodel/node/data/Simulink.VariantControl.md
+++ b/src/datamodel/node/data/Simulink.VariantControl.md
@@ -56,6 +56,17 @@ ValueType editing, this rejection is **unreachable** and no code is added.
ActivationTime is an enum property ('update diagram', etc.). Our UI does not expose
it for editing, so its enum rejections are **unreachable** — no code added.
+### Description — the class has none, so the edit is refused
+
+A VariantControl has no Description. MATLAB writes none for it (`MyVarCtrl` in
+`test/parity/artifacts/binary/params.sldd` holds Value, ActivationTime and ValueType, and
+the text one Value and ValueType), the schema has none, and the node writes back its Value
+alone. So `descriptionEditable` is false:
+the Description cell and the Property Inspector field offer no editor, and
+`setProperty('Description', …)` returns DataNode's "has no Description in a dictionary"
+refusal, with nothing changed and no undo step (decision D11). It used to accept the edit
+and lose it on save. Test: `test/editsTheFormatCannotKeep.test.ts`.
+
### Non-string type assignment — unreachable
Assigning a non-string MATLAB value to a char property (e.g. `obj.ValueType = 5`)
diff --git a/src/datamodel/node/data/VariantControlNode.ts b/src/datamodel/node/data/VariantControlNode.ts
index ada269e1..2a266b06 100644
--- a/src/datamodel/node/data/VariantControlNode.ts
+++ b/src/datamodel/node/data/VariantControlNode.ts
@@ -20,6 +20,14 @@ export default class VariantControlNode extends SimulinkObjectNode {
get className(): string { return CLASS_NAME; }
get displayValue(): string { return PropValue.format(this.Value); }
getProperties(): PropClass[] { return [PropName, PropValue, PropDataType]; }
+ // No Description to edit (decision D11: an entry-level Description edit on a class whose
+ // file has no Description is refused). MATLAB writes no Description for a control (the
+ // binary params.sldd's MyVarCtrl holds Value, ActivationTime and ValueType), the schema
+ // (classes/variantControl.json) has none, and _serializedOverrides below writes the Value
+ // alone, so an accepted edit was lost on save.
+ // False here makes the row and the property inspector offer no editor, and DataNode's
+ // setProperty refuses the edit.
+ get descriptionEditable(): boolean { return false; }
// PI layout: inherited BaseNode.getPILayout → buildPILayout drives the schema
// "General" identity group (classes/variantControl.json).
diff --git a/src/datamodel/node/piOther.ts b/src/datamodel/node/piOther.ts
index cca8ccd3..2da65ceb 100644
--- a/src/datamodel/node/piOther.ts
+++ b/src/datamodel/node/piOther.ts
@@ -8,20 +8,25 @@
// helpers that read a value out of one, and the display convention's spellings), so it
// stays inside the extractable data-model layer. Behavior:
// - Nested MATLAB objects ({ _object_class, _properties }) are flattened ONE
-// level: `CoderInfo.StorageClass`, `CoderInfo.CSCPackageName`, …
+// level: `CoderInfo.StorageClass`, `CoderInfo.CSCPackageName`, … So is an object
+// array of one 1x1 element ({ _array_class, _elements: [{ _properties }] }), which is
+// how a binary dictionary spells a nested object; an object array of any other
+// extent is its summary, `<1x2 Simulink.lookuptable.Breakpoint>`.
// - Typed scalars ({ _type, _value }) are unwrapped to their value, and a typed empty is `[ ]`.
// - A `cdata` value — complex text, or a text dictionary's MAT stream — is read
// and laid out the way the same channel shows a real value of its shape; a sparse
// array, however it is spelled, is its summary (`<3x3 sparse double>`).
-// - Objects nested DEEPER than one level render as their `[ClassName]`.
+// - Objects nested DEEPER than one level render as their `[ClassName]`, and object
+// arrays there as their ``.
// - Arrays render as `[a, b, c]`.
// Values are read-only display strings; the bag is never mutated.
import { isMatCdata, uudecode } from '../parser/CdataCodec.js';
import { encodedClass, encodedStream, isEncodedValue } from '../parser/EncodedValue.js';
import { decodeMatStream } from '../parser/MatParser.js';
-import { EMPTY_NUMERIC, sparseSummaryForm } from '../display/DisplayConvention.js';
+import { EMPTY_NUMERIC, sparseSummaryForm, summaryForm } from '../display/DisplayConvention.js';
import {
+ ENUMERATION_KEY,
complexClassTag,
formatComplexNum,
formatMatlabNum,
@@ -165,16 +170,53 @@ function formatStream(bytes: Uint8Array): string {
}
}
-// A nested MATLAB object { _object_class, _properties } → its class + prop bag.
+// An object array { _array_class, _dimensions, _elements: [{ _properties }, …] }: how a
+// binary dictionary spells every object value, a text dictionary an object array (a bus's
+// elements) or a mixed-class object, and a `.mat` an object array property (McosParser,
+// `_array_type: 'MATLABArray'`). Not a struct, cell or string array, which share the
+// envelope, and not an enumeration value, whose elements are enumerals with an empty bag.
+// Unshaped, its elements are a row.
+function asObjectArray(v: Record): { className: string; dims: number[]; elements: Record[] } | null {
+ const elements = v._elements;
+ if (typeof v._array_class !== 'string' || v._array_class === '' || !Array.isArray(elements)) {
+ return null;
+ }
+ if (v._array_type === 'Struct' || v._array_type === 'Cell' || v._array_type === 'String') {
+ return null;
+ }
+ if (!elements.every((e) => isPlainObject(e) && isPlainObject(e._properties) && !(ENUMERATION_KEY in e))) {
+ return null;
+ }
+ const dims = Array.isArray(v._dimensions) ? (v._dimensions as number[]) : [1, elements.length];
+ return { className: v._array_class, dims, elements: elements as Record[] };
+}
+
+// One element in a 1x1 shape: the object that element is.
+function isOneObject(arr: { dims: number[]; elements: unknown[] }): boolean {
+ return arr.elements.length === 1 && arr.dims.every((d) => d === 1);
+}
+
+// A nested MATLAB object { _object_class, _properties }, or an object array of one 1x1
+// element → its class + prop bag. The element's own class is the object's, and the array's
+// only where it has none, as the node layer reads one (DataNode.elementClassOf).
function asNestedObject(v: Record): { className: string; props: Record } | null {
if (isPlainObject(v._properties)) {
return { className: String(v._object_class ?? ''), props: v._properties as Record };
}
+ const arr = asObjectArray(v);
+ if (arr && isOneObject(arr)) {
+ const own = arr.elements[0]._object_class;
+ return {
+ className: typeof own === 'string' && own !== '' ? own : arr.className,
+ props: arr.elements[0]._properties as Record,
+ };
+ }
return null;
}
// Format a leaf value (primitive / array / deeper object) for display. A deeper
-// object collapses to its `[ClassName]` rather than recursing (one-level rule).
+// object collapses to its `[ClassName]` rather than recursing (one-level rule), and an
+// object array that is not one object to its summary, at any depth.
function formatOther(v: unknown): string {
if (v === undefined || v === null) {
return '';
@@ -191,7 +233,8 @@ function formatOther(v: unknown): string {
if (obj) {
return obj.className ? '[' + obj.className + ']' : '[object]';
}
- return '';
+ const arr = asObjectArray(v);
+ return arr ? summaryForm(arr.dims, arr.className) : '';
}
return String(v);
}
diff --git a/test/binaryWriteBackGate.test.ts b/test/binaryWriteBackGate.test.ts
index d1fe32f8..a20facae 100644
--- a/test/binaryWriteBackGate.test.ts
+++ b/test/binaryWriteBackGate.test.ts
@@ -37,7 +37,7 @@
import { describe, it, expect } from 'vitest';
import { readFileSync } from 'node:fs';
import { fileURLToPath } from 'node:url';
-import { unzipSync } from 'fflate';
+import { unzipSync, zipSync } from 'fflate';
import DataModel from '../src/core/DataModel.js';
import '../src/datamodel/node/data/NodeClassMap.js';
import { parseBinarySlddParts } from '../src/datamodel/parser/BinarySlddParser.js';
@@ -45,6 +45,13 @@ import { buildDataChunkXml } from '../src/datamodel/parser/BinarySlddSerializer.
import * as NodeRegistry from '../src/datamodel/node/NodeRegistry.js';
import { SAVEOBJ_KEY } from '../src/datamodel/parser/XmlUtils.js';
import { loadFile, findEntry } from './parity/loadFile.js';
+import {
+ loadModel,
+ entryByName,
+ serializeModel,
+ reparseModel,
+ type SlddFormat,
+} from './parity/fidelity/roundTripHarness.js';
// Every node in the subtree, not just the root. _markModified walks UP (a child edit
// marks its ancestors stale), so marking the root alone leaves every descendant
@@ -244,6 +251,146 @@ describe('defect 46: an edit under a saveobj envelope goes where MATLAB reads it
});
});
+describe('C-199: a value saved beside an envelope can be cleared, as MATLAB clears it', () => {
+ // Defect 46 writes a non-empty edit into the envelope AND as a sibling, and the sibling is
+ // the copy this reader sees. An EMPTY override was still dropped, on the reasoning that
+ // under an envelope it is the default a node substitutes for a property it cannot see.
+ // After a save and a reopen that no longer holds: the sibling is there, so the node read a
+ // real value, and an empty override is the user clearing it. Dropped, both copies kept the
+ // old value, and MATLAB (R2027a, measured 2026-10-16) reopened the cleared variable with it
+ // just as this reader did.
+ //
+ // The reference is MATLAB's own cleared variable: no sibling, and a 0x0 double inside the
+ // envelope. MATLAB writes that for a default VariantVariable, for one whose Specification
+ // was set to '' and for one cleared after being 'B' (measured the same day), and it is what
+ // cases.sldd's aVariant holds as MATLAB wrote it.
+ const URI = 'mem://c199-gate';
+ const FIXTURE = 'cases.sldd';
+ const CLEARED = '';
+
+ function variantBlock(xml: string): string {
+ const at = xml.indexOf('');
+ expect(at).toBeGreaterThan(-1);
+ return xml.slice(at, xml.indexOf('', at));
+ }
+
+ function chunkOf(bytes: Uint8Array): string {
+ return new TextDecoder().decode(unzipSync(bytes)['data/chunk0.xml']);
+ }
+
+ /** Every Specification `
`, body and close included, which `tagsNaming` leaves off. */
+ function specTags(block: string): string[] {
+ return block.match(/
]*?(?:\/>|>[^<]*<\/P>)/g) ?? [];
+ }
+
+ /** cases.sldd in `format`, with aVariant's Specification set to `first`, saved and reopened. */
+ function savedAs(format: SlddFormat, first: string): any {
+ const model = loadModel(format, FIXTURE, URI);
+ expect(entryByName(model, URI, 'aVariant').setProperty('Specification', first)).toBe(true);
+ return reparseModel(serializeModel(model, format), format, FIXTURE, URI);
+ }
+
+ /** The same, then set to `second` and saved again: the bytes of the second save. */
+ function resavedAs(format: SlddFormat, first: string, second: string): Uint8Array {
+ const model = savedAs(format, first);
+ expect(entryByName(model, URI, 'aVariant').Specification).toBe(first);
+ expect(entryByName(model, URI, 'aVariant').setProperty('Specification', second)).toBe(true);
+ return serializeModel(model, format);
+ }
+
+ function reopened(bytes: Uint8Array, format: SlddFormat): any {
+ return entryByName(reparseModel(bytes, format, FIXTURE, URI), URI, 'aVariant');
+ }
+
+ it('the cleared variable is written byte for byte as MATLAB wrote it', () => {
+ const block = variantBlock(chunkOf(resavedAs('binary', 'B', '')));
+ // One tag, inside the envelope, MATLAB's spelling. Before the fix this was two tags that
+ // both still said B.
+ expect(specTags(block)).toEqual([CLEARED]);
+ // And everything around it: MATLAB's own bytes for aVariant, read out of the artifact
+ // rather than transcribed.
+ const p = fileURLToPath(new URL('./parity/artifacts/binary/' + FIXTURE, import.meta.url));
+ const matlabs = new TextDecoder().decode(unzipSync(new Uint8Array(readFileSync(p)))['data/chunk0.xml']);
+ expect(block).toBe(variantBlock(matlabs));
+ });
+
+ it('and it reopens cleared', () => {
+ expect(reopened(resavedAs('binary', 'B', ''), 'binary').Specification).toBe('');
+ });
+
+ it('_mergeProps drops the sibling and writes the 0x0 double into a copy of the envelope', () => {
+ const v: any = entryByName(savedAs('binary', 'B'), URI, 'aVariant');
+ const bag = v.serial._properties as Record;
+ const stored = bag[SAVEOBJ_KEY];
+ // What the first save wrote: both places, which is why the node read 'B'.
+ expect(bag.Specification).toBe('B');
+ expect(stored._elements[0].Specification).toBe('B');
+
+ for (const empty of ['', null, undefined]) {
+ const merged = v._mergeProps({ Specification: empty });
+ expect(Object.prototype.hasOwnProperty.call(merged, 'Specification'), String(empty)).toBe(false);
+ expect(merged[SAVEOBJ_KEY]._elements[0].Specification, String(empty)).toEqual([]);
+ // A copy: this runs during serialization, and the bag is parse state.
+ expect(merged[SAVEOBJ_KEY]).not.toBe(stored);
+ }
+ expect(bag.Specification).toBe('B');
+ expect(stored._elements[0].Specification).toBe('B');
+ });
+
+ it('CONTROL: with no sibling an empty override is still a default, and writes nothing', () => {
+ // MATLAB's own aVariant, never saved by this package: the node's '' is the default it
+ // substituted for a property it cannot see, which is the :220 case above at the merge.
+ const v: any = findByName(loadBinaryModel('parity/artifacts/binary/' + FIXTURE), 'aVariant');
+ const stored = (v.serial._properties as Record)[SAVEOBJ_KEY];
+ for (const empty of ['', null, undefined]) {
+ const merged = v._mergeProps({ Specification: empty });
+ expect(Object.prototype.hasOwnProperty.call(merged, 'Specification'), String(empty)).toBe(false);
+ expect(merged[SAVEOBJ_KEY], String(empty)).toBe(stored);
+ }
+ });
+
+ it('an EMPTY sibling beside a real envelope value is no change, and the envelope keeps it', () => {
+ // The node read its value from the sibling, and here that value is '': an empty override
+ // then repeats what the node read, so it is no change, not a clear. Treated as a clear, an
+ // edit to Description alone rewrote the envelope's 'B' as the 0x0 double. No writer leaves
+ // this shape today (PR #123's correctness review: MATLAB writes no sibling, and v1.0.0+ never
+ // an empty one beside an envelope), so it is built: the first save writes 'B' to both places,
+ // and the sibling alone is blanked.
+ const SAVED = '
B
';
+ const EMPTY_SIBLING = '';
+ const model = loadModel('binary', FIXTURE, URI);
+ expect(entryByName(model, URI, 'aVariant').setProperty('Specification', 'B')).toBe(true);
+ const parts = unzipSync(serializeModel(model, 'binary'));
+ const xml = new TextDecoder().decode(parts['data/chunk0.xml']);
+ const block = variantBlock(xml);
+ // Envelope first, sibling second: the reopen reads '' only because the sibling is blanked.
+ expect(specTags(block)).toEqual([SAVED, SAVED]);
+ const at = block.lastIndexOf(SAVED);
+ const shaped = block.slice(0, at) + EMPTY_SIBLING + block.slice(at + SAVED.length);
+ parts['data/chunk0.xml'] = new TextEncoder().encode(xml.replace(block, shaped));
+
+ const legacy = reparseModel(zipSync(parts), 'binary', FIXTURE, URI);
+ const v = entryByName(legacy, URI, 'aVariant');
+ expect(v.Specification).toBe('');
+ expect(v.setProperty('Description', 'note')).toBe(true);
+ // Written as it was read: the envelope still says B, and the empty sibling stays empty.
+ expect(specTags(variantBlock(chunkOf(serializeModel(legacy, 'binary'))))).toEqual([SAVED, EMPTY_SIBLING]);
+ });
+
+ it('CONTROL: a non-empty edit over a saved one still goes to both places', () => {
+ const block = variantBlock(chunkOf(resavedAs('binary', 'B', 'C')));
+ expect(specTags(block)).toEqual([
+ '
C
',
+ '
C
',
+ ]);
+ expect(reopened(resavedAs('binary', 'B', 'C'), 'binary').Specification).toBe('C');
+ });
+
+ it('CONTROL: the text artifact has no envelope here, and already reopened a clear as cleared', () => {
+ expect(reopened(resavedAs('json', 'B', ''), 'json').Specification).toBe('');
+ });
+});
+
describe('defects 29 and 30: a 64-bit integer keeps every digit', () => {
// The test is the ROUND TRIP, not the class: a value a double holds exactly stays a
// number, and only a token that does not survive String(Number(t)) takes the decimal
diff --git a/test/ciDistGate.test.ts b/test/ciDistGate.test.ts
new file mode 100644
index 00000000..e3911205
--- /dev/null
+++ b/test/ciDistGate.test.ts
@@ -0,0 +1,274 @@
+// Copyright 2026 The MathWorks, Inc.
+//
+// The committed dist/ is the build of src/, and CI checks that it is.
+//
+// dist/ is committed because this package is consumed as a git dependency (see
+// .gitignore). So what a consumer runs is the committed dist/, not src/. A commit that
+// changes src/ without rebuilding ships the old code under the new version, and nothing
+// else in the gate notices: verify's own `build` overwrites dist/ in the runner, and
+// every later step reads that fresh copy.
+//
+// Both workflows therefore carry one more step after verify: delete dist/, build it
+// again, and fail if the result differs from the committed copy. It deletes first
+// because tsc never deletes an output. Built over the committed copy, a file whose
+// source is gone stays in dist/ and the comparison passes.
+//
+// A test cannot run a workflow. This file does the next two things. It reads both
+// workflow files and checks that the step is there, where it belongs, and that nothing
+// can skip it. Then it takes the step's `run:` script from each file, as the runner
+// would receive it, and runs it under `bash -e` (what Actions runs a `run:` step with)
+// in a throwaway git repository. That repository has a build that, like tsc, writes
+// one output per source and deletes nothing. The script must pass on a dist/ that
+// matches, and fail, naming the file, on each of the three ways a dist/ goes stale.
+import { describe, it, expect } from 'vitest';
+import { spawnSync } from 'node:child_process';
+import { mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
+import { devNull, tmpdir } from 'node:os';
+import { join } from 'node:path';
+import { fileURLToPath } from 'node:url';
+
+const WORKFLOWS = fileURLToPath(new URL('../.github/workflows/', import.meta.url));
+
+interface Step {
+ /** Position in the job's `steps:` list. */
+ index: number;
+ /** The step's top-level keys (`name`, `run`, `uses`, `if`, ...). */
+ keys: string[];
+ name: string | undefined;
+ /** The `run:` script as the runner receives it. Undefined for a `uses:` step. */
+ run: string | undefined;
+}
+
+const indentOf = (line: string): number => line.length - line.trimStart().length;
+
+// Just enough YAML for these two files: one job, a `steps:` list, and per step either
+// an inline value or a `|` block. Full-line comments are dropped. In a `run: |` block
+// they are shell comments, so dropping them leaves what the shell runs unchanged.
+function stepsOf(workflow: string): Step[] {
+ const lines = readFileSync(join(WORKFLOWS, workflow), 'utf8')
+ .split('\n')
+ .filter((l) => l.trim() !== '' && !l.trimStart().startsWith('#'));
+ const lists = lines.flatMap((l, i) => (/^\s*steps:\s*$/.test(l) ? [i] : []));
+ expect(lists, `${workflow} has exactly one steps: list`).toHaveLength(1);
+
+ const blocks: string[][] = [];
+ let dash = -1;
+ for (const line of lines.slice(lists[0]! + 1)) {
+ if (dash < 0) dash = indentOf(line);
+ if (indentOf(line) < dash) break;
+ if (indentOf(line) === dash) {
+ expect(line.trimStart().startsWith('- '), `a step starts with "- ": ${line}`).toBe(true);
+ blocks.push([line.replace('- ', ' ')]);
+ } else {
+ blocks.at(-1)!.push(line);
+ }
+ }
+
+ const keyIndent = dash + 2;
+ return blocks.map((body, index) => {
+ const keyLines = body.flatMap((l, i) => (indentOf(l) === keyIndent ? [i] : []));
+ const keyOf = (i: number): string => body[i]!.trim().split(':')[0]!;
+ const valueOf = (i: number): string => {
+ const t = body[i]!.trim();
+ return t.slice(t.indexOf(':') + 1).trim();
+ };
+ const find = (key: string): number | undefined => keyLines.find((i) => keyOf(i) === key);
+
+ const n = find('name');
+ const r = find('run');
+ let run: string | undefined;
+ if (r !== undefined) {
+ const v = valueOf(r);
+ if (v.startsWith('|') || v.startsWith('>')) {
+ expect(v, `${workflow}: a run block is a plain "|" block`).toBe('|');
+ const block: string[] = [];
+ for (const l of body.slice(r + 1)) {
+ if (indentOf(l) <= keyIndent) break;
+ block.push(l);
+ }
+ const pad = Math.min(...block.map(indentOf));
+ run = block.map((l) => l.slice(pad)).join('\n') + '\n';
+ } else {
+ run = v;
+ }
+ }
+ return { index, keys: keyLines.map(keyOf), name: n === undefined ? undefined : valueOf(n), run };
+ });
+}
+
+// The four parts of the gate: delete, rebuild, then the two comparisons, in either order.
+// `git diff --exit-code` catches a tracked output that changed or that the rebuild did
+// not make again (an orphan). The `--untracked-files=all` status catches an output the
+// rebuild made and nobody committed.
+const GATE = ['rm -rf dist', 'npm run build', 'git diff --exit-code', '--untracked-files=all -- dist'];
+
+function gateOf(workflow: string): Step {
+ const steps = stepsOf(workflow);
+ const gates = steps.filter((s) => s.run !== undefined && GATE.every((g) => s.run!.includes(g)));
+ expect(
+ gates.map((s) => s.index),
+ `${workflow} has exactly one step that rebuilds dist/ from clean and compares it with the committed copy`,
+ ).toHaveLength(1);
+ return gates[0]!;
+}
+
+const indexOf = (workflow: string, what: string, pick: (s: Step) => boolean): number => {
+ const found = stepsOf(workflow).filter(pick);
+ expect(found, `${workflow} has exactly one ${what} step`).toHaveLength(1);
+ return found[0]!.index;
+};
+
+describe('the step reader is reading these workflows', () => {
+ it('finds the steps both workflows already had', () => {
+ // A reader that silently found nothing would leave every test below vacuous.
+ expect(stepsOf('ci.yml').map((s) => s.run ?? s.keys[0])).toEqual(
+ expect.arrayContaining(['uses', 'npm ci', 'npm run verify']),
+ );
+ const release = stepsOf('release.yml');
+ expect(release.map((s) => s.name)).toEqual(
+ expect.arrayContaining(['Check tag matches package.json version', 'Verify', 'Create GitHub Release']),
+ );
+ const tag = release.find((s) => s.name === 'Check tag matches package.json version')!;
+ expect(tag.run).toContain('VERSION="${GITHUB_REF_NAME#v}"\n');
+ expect(tag.run).toContain(' exit 1\n');
+ });
+});
+
+describe.each(['ci.yml', 'release.yml'])('%s checks that dist/ is the build of src/', (workflow) => {
+ it('rebuilds dist/ from clean, then compares it with the committed copy', () => {
+ const run = gateOf(workflow).run!;
+ const [rm, build, ...compare] = GATE.map((g) => run.indexOf(g));
+ expect(rm, 'deletes dist/ before building it').toBeLessThan(build!);
+ for (const c of compare) expect(c, 'compares only after the build').toBeGreaterThan(build!);
+ });
+
+ it('is a plain step that nothing skips, ignores or reruns in another shell', () => {
+ // An `if:` can skip it, `continue-on-error:` can ignore its red, and `shell:` can
+ // drop the `-e` that makes each line's failure the step's failure.
+ expect(gateOf(workflow).keys.sort()).toEqual(['name', 'run']);
+ });
+
+ it('runs after verify', () => {
+ const verify = indexOf(workflow, 'npm run verify', (s) => s.run === 'npm run verify');
+ expect(gateOf(workflow).index).toBeGreaterThan(verify);
+ });
+});
+
+describe('both workflows run the same dist/ check', () => {
+ it('has the same name and script in ci.yml and release.yml', () => {
+ // So a tag is held to exactly what every PR was held to, and no weaker.
+ const [ci, release] = [gateOf('ci.yml'), gateOf('release.yml')];
+ expect(release.name).toBe(ci.name);
+ expect(release.run).toBe(ci.run);
+ });
+});
+
+describe('a release is created only after the dist/ check', () => {
+ it('runs the check before Create GitHub Release', () => {
+ const release = indexOf('release.yml', 'Create GitHub Release', (s) => s.name === 'Create GitHub Release');
+ expect(gateOf('release.yml').index).toBeLessThan(release);
+ });
+});
+
+// ---------------------------------------------------------------------------
+// The gate's own script, run.
+
+// git and npm see neither the machine's global git config (hooks, ignorecase) nor the
+// npm_* variables of the `npm run test` that started this file.
+const ENV: NodeJS.ProcessEnv = {
+ ...Object.fromEntries(Object.entries(process.env).filter(([k]) => !/^npm_/i.test(k) && k !== 'INIT_CWD')),
+ GIT_CONFIG_GLOBAL: devNull,
+ GIT_CONFIG_NOSYSTEM: '1',
+ GIT_AUTHOR_NAME: 'dist gate',
+ GIT_AUTHOR_EMAIL: 'dist-gate@example.com',
+ GIT_COMMITTER_NAME: 'dist gate',
+ GIT_COMMITTER_EMAIL: 'dist-gate@example.com',
+ NO_UPDATE_NOTIFIER: '1',
+};
+
+function sh(cwd: string, cmd: string, ...args: string[]): void {
+ const r = spawnSync(cmd, args, { cwd, env: ENV, encoding: 'utf8' });
+ expect(r.status, `${cmd} ${args.join(' ')}: ${r.stdout}${r.stderr}${r.error ?? ''}`).toBe(0);
+}
+
+const commitAll = (repo: string, message: string): void => {
+ sh(repo, 'git', 'add', '-A');
+ sh(repo, 'git', 'commit', '-q', '-m', message);
+};
+
+// Like tsc: one output per source, and nothing in dist/ is ever deleted.
+const BUILD = [
+ "import { mkdirSync, readdirSync, readFileSync, writeFileSync } from 'node:fs';",
+ "mkdirSync('dist', { recursive: true });",
+ 'for (const f of readdirSync("src")) {',
+ " writeFileSync(`dist/${f.replace(/\\.ts$/, '.js')}`, readFileSync(`src/${f}`, 'utf8').toUpperCase());",
+ '}',
+ '',
+].join('\n');
+
+/**
+ * Runs `script` the way Actions runs a `run:` step (`bash -e`), in a fresh repository
+ * whose committed dist/ is a clean build of its src/ until `stale` changes that.
+ */
+function runGate(script: string, stale: (repo: string) => void): { status: number | null; log: string } {
+ const root = mkdtempSync(join(tmpdir(), 'dist-gate-'));
+ try {
+ const repo = join(root, 'repo');
+ mkdirSync(join(repo, 'src'), { recursive: true });
+ writeFileSync(
+ join(repo, 'package.json'),
+ JSON.stringify({ name: 'dist-gate-probe', private: true, scripts: { build: 'node build.mjs' } }),
+ );
+ writeFileSync(join(repo, 'build.mjs'), BUILD);
+ writeFileSync(join(repo, 'src', 'a.ts'), 'export const a = 1;\n');
+ writeFileSync(join(repo, 'src', 'b.ts'), 'export const b = 2;\n');
+ sh(repo, 'git', 'init', '-q');
+ sh(repo, process.execPath, 'build.mjs');
+ commitAll(repo, 'src and its build');
+ stale(repo);
+
+ writeFileSync(join(root, 'gate.sh'), script);
+ const r = spawnSync('bash', ['-e', join(root, 'gate.sh')], { cwd: repo, env: ENV, encoding: 'utf8' });
+ return { status: r.status, log: `${r.stdout}${r.stderr}${r.error ?? ''}` };
+ } finally {
+ rmSync(root, { recursive: true, force: true });
+ }
+}
+
+describe.each(['ci.yml', 'release.yml'])("%s's dist/ step, run", (workflow) => {
+ const script = (): string => gateOf(workflow).run!;
+
+ it('passes when the committed dist/ is the build of src/', { timeout: 60_000 }, () => {
+ const { status, log } = runGate(script(), () => {});
+ expect(status, log).toBe(0);
+ });
+
+ it('fails, naming the file, when src/ changed and dist/ was not rebuilt', { timeout: 60_000 }, () => {
+ const { status, log } = runGate(script(), (repo) => {
+ writeFileSync(join(repo, 'src', 'a.ts'), 'export const a = 10;\n');
+ commitAll(repo, 'src only');
+ });
+ expect(status, log).not.toBe(0);
+ expect(log).toContain('dist/a.js');
+ });
+
+ it('fails, naming the file, when dist/ holds an output whose source is gone', { timeout: 60_000 }, () => {
+ // Only the clean rebuild sees this one: tsc built over dist/ leaves the file there.
+ const { status, log } = runGate(script(), (repo) => {
+ rmSync(join(repo, 'src', 'b.ts'));
+ commitAll(repo, 'src only');
+ });
+ expect(status, log).not.toBe(0);
+ expect(log).toContain('dist/b.js');
+ });
+
+ it('fails, naming the file, when the build makes an output nobody committed', { timeout: 60_000 }, () => {
+ // Only the untracked-files check sees this one: no tracked file differs.
+ const { status, log } = runGate(script(), (repo) => {
+ writeFileSync(join(repo, 'src', 'c.ts'), 'export const c = 3;\n');
+ commitAll(repo, 'src only');
+ });
+ expect(status, log).not.toBe(0);
+ expect(log).toContain('dist/c.js');
+ });
+});
diff --git a/test/complexMcosFixtures.test.ts b/test/complexMcosFixtures.test.ts
index 342531ab..471f0785 100644
--- a/test/complexMcosFixtures.test.ts
+++ b/test/complexMcosFixtures.test.ts
@@ -473,7 +473,9 @@ describe('every value presents the same in the .mat as in each other venue that
// and LookupTableNode shows none of its Table in the tree in any venue — its own cell is
// empty and it has no rows. The Property Inspector does: its "Other" group flattens the
// Table one level, and Table.Value is the complex value. Both are pinned, the tree so it is
-// seen to stay empty and the same in every venue, and the Inspector for what it shows.
+// seen to stay empty and the same in every venue, and the Inspector for what it shows. The
+// binary dictionary spells the Table `{_array_class, _elements: [{_properties}]}`, an object
+// array of one element, and its group lists the same rows as the other venues'.
describe('a LookupTable with a complex Table presents as it does everywhere', () => {
for (const fx of FIXTURES) {
const variables = fx.variables();
@@ -493,13 +495,6 @@ describe('a LookupTable with a complex Table presents as it does everywhere', ()
const v = t.Table!.Value as ValueTruth;
expect(v.size[0], 'a row, which the Other group writes `[a, b, c]`').toBe(1);
const want = '[' + elementsOf(v, `${path}.Table.Value`).join(', ') + ']';
- if (fx.file === 'complex_binary.sldd') {
- // The binary reader spells a nested object `{_array_class, _elements}`, which
- // the Other group does not flatten, so it shows the Table as an empty row —
- // in this venue, for every nested object, and not about complex numbers.
- expect(other['Other.Table']).toBe('');
- return;
- }
expect(other['Other.Table.Value']).toBe(want);
expect(other['Other.Breakpoints.Value']).toBe('[1, 2, 3]');
});
diff --git a/test/editsTheFormatCannotKeep.test.ts b/test/editsTheFormatCannotKeep.test.ts
index 196f69a6..362cc835 100644
--- a/test/editsTheFormatCannotKeep.test.ts
+++ b/test/editsTheFormatCannotKeep.test.ts
@@ -13,6 +13,10 @@
// `{name, metadata, value}` — no property bag, so no Description. A Simulink object
// has one and keeps it, which is what makes this a per-node answer and not a
// per-column one.
+// • Description on a Simulink.VariantControl (decision D11, 2026-10-13: an entry-level
+// Description edit on a class whose file has no Description is refused). MATLAB
+// writes no Description for a control, and the node wrote back only its Value, so
+// the edit was taken and lost on save.
// • The Name of a Simulink.Parameter's Value row. That row is the class's `Value`
// property, exactly as an object's property rows are: serialize writes it under the
// key `Value` whatever the node is called, so a rename is discarded in silence.
@@ -24,7 +28,14 @@ import { describe, it, expect } from 'vitest';
import ParameterNode from '../src/datamodel/node/data/ParameterNode.js';
import MatlabVariableNode from '../src/datamodel/node/data/MatlabVariableNode.js';
import StructNode from '../src/datamodel/node/data/StructNode.js';
+import VariantControlNode from '../src/datamodel/node/data/VariantControlNode.js';
+import PropDescription from '../src/datamodel/prop/PropDescription.js';
import * as NodeClassMap from '../src/datamodel/node/data/NodeClassMap.js';
+import { readFileSync } from 'node:fs';
+import { fileURLToPath } from 'node:url';
+import { unzipSync, strFromU8 } from 'fflate';
+import { createSession, ingest } from '../src/index.js';
+import { findEntry } from './parity/loadFile.js';
void NodeClassMap;
@@ -87,6 +98,55 @@ describe('a Description the entry has nowhere to put', () => {
expect(p.toRow()._valueEditable).toBe(false);
expect(p.toRow()._descriptionEditable).toBe(true);
});
+
+ // D11. A Simulink.VariantControl has no Description: MATLAB writes none for it (the
+ // binary params.sldd's MyVarCtrl holds Value, ActivationTime and ValueType), its schema
+ // (classes/variantControl.json) has none, and the node's writer writes back its Value
+ // alone. The edit used to be accepted, shown, and gone from the saved file.
+ it('is refused on a Simulink.VariantControl, whose class has no Description', () => {
+ const vc: Any = VariantControlNode.createDefault('vc', null);
+ expect(vc.descriptionEditable).toBe(false);
+ expect(vc.toRow()._descriptionEditable).toBe(false);
+ // The property inspector builds its field from getPropInfo, so it must not offer one either.
+ expect(vc.getPropInfo(PropDescription).editable).toBe(false);
+
+ const result = vc.setProperty('Description', 'selects the plant variant');
+ expect(result).not.toBe(true);
+ expect((result as Any).error).toBe(true);
+ expect((result as Any).reason).toContain('has no Description');
+ expect(vc.Description ?? '').toBe('');
+ expect(vc.toRow().Description).toBe('');
+ expect(JSON.stringify(vc.serializeValue())).not.toContain('selects the plant variant');
+ expect(vc.serializeXml('P', { Name: 'Value' }, 2)).not.toContain('selects the plant variant');
+ // Its Value is still what an edit on it is for.
+ expect(vc.setProperty('Value', '2')).toBe(true);
+ expect(vc.Value).toBe(2);
+ });
+
+ // The same refusal reached the way a host reaches it: through the session, on MATLAB's own
+ // file. Refused, nothing to undo, and the saved file is the file as it was.
+ for (const format of ['text', 'binary'] as const) {
+ it(`is refused through the session on MATLAB's own VariantControl, in a ${format} dictionary`, () => {
+ const url = new URL(`./parity/artifacts/${format}/params.sldd`, import.meta.url);
+ const bytes = new Uint8Array(readFileSync(fileURLToPath(url)));
+ const session = createSession();
+ const root: Any = ingest(session, bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength) as ArrayBuffer, { filename: 'params.sldd' });
+ const vc: Any = findEntry(root, 'MyVarCtrl');
+ expect(vc.className).toBe('Simulink.VariantControl');
+ const saved = (): string => {
+ const out = session.serializeSource(root.name)!;
+ return format === 'text' ? out.text! : strFromU8(unzipSync(out.bytes!)['data/chunk0.xml']);
+ };
+ const before = saved();
+
+ session.setActive(root, vc);
+ const result = session.editProperty(vc.id, 'Description', 'selects the plant variant');
+ expect(result).toMatchObject({ error: true });
+ expect(session.canUndo()).toBe(false);
+ expect(vc.toRow().Description).toBe('');
+ expect(saved()).toBe(before);
+ });
+ }
});
describe("the Name of a Simulink.Parameter's Value row", () => {
diff --git a/test/newEntryEnvelopeBothFormats.test.ts b/test/newEntryEnvelopeBothFormats.test.ts
index 4471317a..7512769e 100644
--- a/test/newEntryEnvelopeBothFormats.test.ts
+++ b/test/newEntryEnvelopeBothFormats.test.ts
@@ -43,6 +43,14 @@ import VariantBankNode from '../src/datamodel/node/data/VariantBankNode.js';
import VariantBankCoderInfoNode from '../src/datamodel/node/data/VariantBankCoderInfoNode.js';
import VariantConfigurationDataNode from '../src/datamodel/node/data/VariantConfigurationDataNode.js';
import ParameterNode from '../src/datamodel/node/data/ParameterNode.js';
+import { unzipSync } from 'fflate';
+import {
+ loadModel,
+ entryByName,
+ serializeModel,
+ reparseModel,
+ type SlddFormat,
+} from './parity/fidelity/roundTripHarness.js';
/**
* The four custom-saving classes, the field names their envelope declares, and the fields whose
@@ -303,3 +311,103 @@ describe('defect 58: an empty struct or cell survives the binary round trip', ()
}
});
});
+
+describe('C-199: a value saved beside a NEW entry\'s envelope can be cleared, in both formats', () => {
+ // binaryWriteBackGate pins this on MATLAB's own aVariant, whose envelope only the binary
+ // file carries. An entry this package creates carries one in BOTH formats (createDefault's),
+ // so the text channel lost the clear too. VariantBank's `Value` is the other shape: a field
+ // the envelope does not declare, so the sibling is its only copy and the envelope is left
+ // alone either way.
+ const FIXTURE = 'cases.sldd';
+ const CLEARABLE = [
+ { className: 'Simulink.VariantVariable', prop: 'Specification', declared: true },
+ { className: 'Simulink.VariantBank', prop: 'Value', declared: false },
+ ] as const;
+
+ /** A new `className` entry in cases.sldd with `prop` set to 'x', saved and reopened. */
+ function savedNew(format: SlddFormat, className: string, prop: string, uri: string): any {
+ const model = loadModel(format, FIXTURE, uri);
+ const added: any = model.addEntry(className, 'vNew', 'design');
+ expect(added).toBeTruthy();
+ expect(added.setProperty(prop, 'x')).toBe(true);
+ const back = reparseModel(serializeModel(model, format), format, FIXTURE, uri);
+ expect(entryByName(back, uri, 'vNew')[prop]).toBe('x');
+ return back;
+ }
+
+ /** The `'.length);
+ }
+
+ /** The `value._elements[0]` of the text entry named `name`. */
+ function textElementOf(bytes: Uint8Array, name: string): any {
+ let found: any = null;
+ const walk = (n: any): void => {
+ if (found || !n || typeof n !== 'object') {
+ return;
+ }
+ if (n.name === name && n.value) {
+ found = n.value._elements[0];
+ return;
+ }
+ for (const v of Object.values(n)) {
+ walk(v);
+ }
+ };
+ walk(JSON.parse(new TextDecoder().decode(bytes)));
+ expect(found).not.toBeNull();
+ return found;
+ }
+
+ for (const c of CLEARABLE) {
+ for (const format of ['binary', 'json'] as const) {
+ it(c.className + '.' + c.prop + ', ' + format + ': cleared after a save, it is written and reopens cleared', () => {
+ const uri = 'mem://c199-new-' + c.prop + '-' + format;
+ const model = savedNew(format, c.className, c.prop, uri);
+ expect(entryByName(model, uri, 'vNew').setProperty(c.prop, '')).toBe(true);
+ const bytes = serializeModel(model, format);
+
+ // The written form is the envelope alone, which is createDefault's own (defect 57),
+ // with a declared field holding MATLAB's cleared 0x0 double. Before the fix the
+ // sibling still said 'x', and so did the envelope where it declares the field.
+ if (format === 'binary') {
+ const xml = entryXmlOf(bytes, 'vNew');
+ expect(objectPropNames(xml)).toEqual(['']);
+ expect(xml).not.toContain('>x
');
+ if (c.declared) {
+ expect(xml).toContain('');
+ }
+ } else {
+ const elem = textElementOf(bytes, 'vNew');
+ expect(Object.keys(elem)).toEqual([CUSTOM_SAVE_KEY]);
+ const env = elem[CUSTOM_SAVE_KEY]._elements[0];
+ if (c.declared) {
+ expect(env[c.prop]).toEqual([]);
+ } else {
+ expect(Object.prototype.hasOwnProperty.call(env, c.prop)).toBe(false);
+ }
+ }
+
+ const back = entryByName(reparseModel(bytes, format, FIXTURE, uri), uri, 'vNew');
+ expect(back[c.prop]).toBe('');
+ });
+ }
+ }
+
+ it('an undeclared field: the sibling goes, and the envelope is the same object', () => {
+ // On _mergeProps directly, because only identity can say the envelope was not rebuilt.
+ const uri = 'mem://c199-new-undeclared';
+ const v: any = entryByName(savedNew('binary', 'Simulink.VariantBank', 'Value', uri), uri, 'vNew');
+ const bag = v.serial._properties as Record;
+ expect(bag.Value).toBe('x');
+ const merged = v._mergeProps({ Value: '' });
+ expect(Object.prototype.hasOwnProperty.call(merged, 'Value')).toBe(false);
+ expect(merged[SAVEOBJ_KEY]).toBe(bag[SAVEOBJ_KEY]);
+ expect(bag.Value).toBe('x');
+ });
+});
diff --git a/test/parity/matlab/DESIGN.md b/test/parity/matlab/DESIGN.md
index 4321e4bd..e75e14a5 100644
--- a/test/parity/matlab/DESIGN.md
+++ b/test/parity/matlab/DESIGN.md
@@ -1760,9 +1760,16 @@ worth recording so they are not rediscovered as defects:
the sibling unnecessary, and would also fix the VariantVariable choices that display
in no format — is the remaining half of defect 40 and is not done here.
- An EMPTY override is still dropped, unchanged: read through a sibling that is not
- there, `Specification` is `''` — a default, not a value — and writing it back would
- replace MATLAB's own empty 0x0 double with an empty char.
+ An EMPTY override is still dropped when the stored bag has no sibling for it: read
+ through a sibling that is not there, `Specification` is `''` — a default, not a value
+ — and writing it back would replace MATLAB's own empty 0x0 double with an empty char.
+ When a sibling IS there (C-199), this package wrote it, since MATLAB never writes one
+ beside an envelope, and the empty override is a real clear. Dropped, it kept the old
+ value in both copies, and MATLAB reopened the cleared variable with that value. Now
+ the sibling is deleted and the envelope's field is written as `[]`, MATLAB's own 0x0
+ double. That is the spelling MATLAB writes for a cleared `Specification`, and MATLAB
+ reads it back as an empty char (both measured on R2027a, 2026-10-16). After the clear,
+ `aVariant` is MATLAB's own bytes again.
**Why 44, 45 and 46 are numbered separately from 43 and 28.** They are different code
paths that each would have shipped a file MATLAB reads differently. 44 and 45 became
@@ -2466,11 +2473,6 @@ Two findings from that hardening, measured and deliberately NOT acted on:
object and in a text dictionary (whose stream is read by the same arm), where a binary
dictionary shows MATLAB's own text, `0.1+0.2i`, and MATLAB's display `0.1000 + 0.2000i`.
The shortest spelling of the float32 would change every one of those venues at once.
-- **The Inspector's "Other" group does not flatten a nested object out of a binary
- dictionary.** The binary reader spells one `{_array_class, _elements: [{_properties}]}`
- and the group flattens only `{_object_class, _properties}`, so a LookupTable's Table
- shows as one empty row there where the `.mat` and the text dictionary list its
- properties. Not about complex numbers, and pinned as it is in `complexMcosFixtures`.
- **A complex EMPTY in a binary dictionary shows as an empty quoted char.** MATLAB writes
``; the empty body fails parseCdata's
text test and its stream decode, so the value is `''` where the same Parameter in a
diff --git a/test/piOther.test.ts b/test/piOther.test.ts
index 836294fa..543a6584 100644
--- a/test/piOther.test.ts
+++ b/test/piOther.test.ts
@@ -231,3 +231,95 @@ describe('buildOtherRows — a cdata value is read, not printed', () => {
expect(shows({ _type: 'cdata', _value: '1+2i 3+4i', _dimensions: [1, 3] })).toBe('1+2i 3+4i');
});
});
+
+// A binary dictionary spells a nested object as an object array of one element,
+// `{_array_class, _dimensions: [1, 1], _elements: [{_properties}]}`, where a `.mat` and a
+// text dictionary spell it `{_object_class, _properties}`. The group flattened only the
+// second, so a binary LookupTable's Table showed as one empty row. MATLAB's own display
+// holds the same object in each venue (`Table: [1×1 Simulink.lookuptable.Table]`), so the
+// group flattens it in each, and an array of them is MATLAB's `[1×2 Class]` in this
+// package's spelling, `<1x2 Class>` (DisplayConvention.summaryForm).
+describe('buildOtherRows — an object array of one element is the object', () => {
+ const binary = (cls: string, elements: Record[], dims?: number[]) => ({
+ _array_class: cls,
+ ...(dims ? { _dimensions: dims } : {}),
+ _mw_element_type: 'MATLABArray',
+ _elements: elements,
+ });
+ const table = () => binary('Simulink.lookuptable.Table', [{ _properties: { Value: [1, 2, 3], FieldName: 'Table' } }], [1, 1]);
+ const breakpoint = (n: number) => ({ _properties: { Value: [n, n + 1], FieldName: 'BP' + n } });
+
+ it("flattens a binary dictionary's 1x1 object one level, as the same object out of a .mat", () => {
+ expect(buildOtherRows({ Table: table() }, new Set())).toEqual([
+ { name: 'Table.Value', value: '[1, 2, 3]' },
+ { name: 'Table.FieldName', value: 'Table' },
+ ]);
+ const mat = buildOtherRows({ Table: { _object_class: 'Simulink.lookuptable.Table', _properties: { Value: [1, 2, 3], FieldName: 'Table' } } }, new Set());
+ expect(buildOtherRows({ Table: table() }, new Set())).toEqual(mat);
+ // No extents is one element's: an object array the reader did not shape.
+ expect(buildOtherRows({ Table: binary('T', [{ _properties: { A: 1 } }]) }, new Set())).toEqual([{ name: 'Table.A', value: '1' }]);
+ });
+
+ it('shows an object array of more than one element as its summary, in one row', () => {
+ expect(buildOtherRows({ Breakpoints: binary('Simulink.lookuptable.Breakpoint', [breakpoint(1), breakpoint(2)], [1, 2]) }, new Set())).toEqual([
+ { name: 'Breakpoints', value: '<1x2 Simulink.lookuptable.Breakpoint>' },
+ ]);
+ // A `.mat` object array property (McosParser), which carries its `_array_type`.
+ const mat = { ...binary('Simulink.BusElement', [breakpoint(1), breakpoint(2), breakpoint(3)], [3, 1]), _array_type: 'MATLABArray' };
+ expect(buildOtherRows({ Elements: mat }, new Set())).toEqual([{ name: 'Elements', value: '<3x1 Simulink.BusElement>' }]);
+ // Unshaped, its elements are a row; an empty one is its extents; one element in a shape
+ // that is not 1x1 is not that element.
+ expect(buildOtherRows({ B: binary('C', [breakpoint(1), breakpoint(2)]) }, new Set())).toEqual([{ name: 'B', value: '<1x2 C>' }]);
+ expect(buildOtherRows({ B: binary('C', [], [0, 0]) }, new Set())).toEqual([{ name: 'B', value: '<0x0 C>' }]);
+ expect(buildOtherRows({ B: binary('C', [breakpoint(1)], [1, 1, 2]) }, new Set())).toEqual([{ name: 'B', value: '<1x1x2 C>' }]);
+ });
+
+ it("names a one-element object by its element's own class, as the node layer does", () => {
+ // The text format spells an mpt.Signal as `{_array_class: 'Simulink.Signal', _elements:
+ // [{_object_class: 'mpt.Signal', …}]}` (DataNode.elementClassOf).
+ expect(buildOtherRows({ S: binary('Simulink.Signal', [{ _object_class: 'mpt.Signal', _properties: {} }], [1, 1]) }, new Set())).toEqual([
+ { name: 'S', value: '[mpt.Signal]' },
+ ]);
+ expect(buildOtherRows({ S: binary('Simulink.Signal', [{ _object_class: '', _properties: {} }], [1, 1]) }, new Set())).toEqual([
+ { name: 'S', value: '[Simulink.Signal]' },
+ ]);
+ // The sub-rows are that element's, and one level further down it is its class.
+ const signal = binary('Simulink.Signal', [{
+ _object_class: 'mpt.Signal',
+ _properties: { Owner: 'me', CoderInfo: binary('Simulink.CoderInfo', [{ _object_class: 'mpt.CoderInfo', _properties: { A: 1 } }], [1, 1]) },
+ }], [1, 1]);
+ expect(buildOtherRows({ S: signal }, new Set())).toEqual([
+ { name: 'S.Owner', value: 'me' },
+ { name: 'S.CoderInfo', value: '[mpt.CoderInfo]' },
+ ]);
+ });
+
+ it('shows an object array one level further down by its class or its summary', () => {
+ const holder = (Sub: unknown) => ({ Outer: { _object_class: 'X', _properties: { Sub } } });
+ expect(buildOtherRows(holder(table()), new Set())).toEqual([{ name: 'Outer.Sub', value: '[Simulink.lookuptable.Table]' }]);
+ expect(buildOtherRows(holder(binary('Simulink.lookuptable.Breakpoint', [breakpoint(1), breakpoint(2), breakpoint(3)], [1, 3])), new Set())).toEqual([
+ { name: 'Outer.Sub', value: '<1x3 Simulink.lookuptable.Breakpoint>' },
+ ]);
+ // And under a binary dictionary's own spelling of the outer object.
+ expect(buildOtherRows({ Outer: binary('X', [{ _properties: { Sub: table() } }], [1, 1]) }, new Set())).toEqual([
+ { name: 'Outer.Sub', value: '[Simulink.lookuptable.Table]' },
+ ]);
+ });
+
+ // Controls: each envelope here would be claimed but for the one property that names it
+ // something else, and each shows as it did.
+ it('leaves a struct, cell or string array and an enumeration as they were', () => {
+ const one = [{ _properties: { A: 1 } }];
+ for (const kind of ['Struct', 'Cell', 'String']) {
+ expect(buildOtherRows({ V: { ...binary('C', one, [1, 1]), _array_type: kind } }, new Set()), kind).toEqual([{ name: 'V', value: '' }]);
+ expect(buildOtherRows({ V: { ...binary('C', [...one, ...one], [1, 2]), _array_type: kind } }, new Set()), kind).toEqual([{ name: 'V', value: '' }]);
+ }
+ // An enumeration value, as either reader holds one.
+ const enumeral = { _properties: {}, _enumeration: { name: 'Red', type: 'Color', value: 'Red' } };
+ expect(buildOtherRows({ V: { ...binary('Color', [enumeral], [1, 1]), _is_enum: '1' } }, new Set())).toEqual([{ name: 'V', value: '' }]);
+ expect(buildOtherRows({ V: { ...binary('Color', [enumeral, enumeral], [1, 2]), _is_enum: '1' } }, new Set())).toEqual([{ name: 'V', value: '' }]);
+ // An element that is not an object, and an array with no class.
+ expect(buildOtherRows({ V: binary('C', [{ A: 1 }], [1, 1]) }, new Set())).toEqual([{ name: 'V', value: '' }]);
+ expect(buildOtherRows({ V: binary('', one, [1, 1]) }, new Set())).toEqual([{ name: 'V', value: '' }]);
+ });
+});
diff --git a/test/referenceIdentity.test.ts b/test/referenceIdentity.test.ts
new file mode 100644
index 00000000..07780177
--- /dev/null
+++ b/test/referenceIdentity.test.ts
@@ -0,0 +1,192 @@
+// Copyright 2026 The MathWorks, Inc.
+//
+// One node, one id, for a model's references and its external data sources.
+//
+// A model that references `plant` from two Model blocks gets two reference rows, and both
+// are named `plant.slx`: the name is the FILE, which is what the Name column shows and what
+// the row's link follows. The inherited id was `parent.id + '/' + name`, so the two rows
+// shared one id. A node id is what findNodeById resolves, what a row is keyed by and what a
+// host remembers a selection as, so two nodes with one id were two rows the host could not
+// tell apart: the session index kept only one of them, and the other could not be looked up.
+// An external data source is named after the basename of its path, so `a/signals.mat` and
+// `b/signals.mat` collided the same way.
+//
+// ModelBlockNode.id is the precedent: it keys a block on its SID rather than its name. These
+// two nodes key on what they record and their name does not: the referencing block's path,
+// and the source's path as the model wrote it.
+//
+// Every model here goes through the real parsers and the real ingest, so the ids under test
+// are the ones a host sees.
+import { describe, it, expect } from 'vitest';
+import { strToU8, zipSync } from 'fflate';
+import { createSession } from '../src/index.js';
+import { ingest } from '../src/core/ingest.js';
+
+/* eslint-disable @typescript-eslint/no-explicit-any */
+
+// A `.slx` with only the parts these tests read. `graphicalInterface` is the R2026b flat
+// shape extractModelReferences reads; `dataSources` become ExternalDataSourceSettings.xml.
+function slxModel(opts: { references?: { BlockPath: string; ModelName: string }[]; dataSources?: string[] }): ArrayBuffer {
+ const parts: Record = {
+ 'simulink/blockDiagram.json': strToU8(JSON.stringify({ BlockDiagram: { ModelUUID: 'u1' } })),
+ 'simulink/systems/system_root.xml': strToU8(``),
+ 'metadata/coreProperties.xml': strToU8(
+ `R2026b`,
+ ),
+ };
+ if (opts.references) {
+ parts['simulink/graphicalInterface.json'] = strToU8(JSON.stringify({ ModelReferences: opts.references }));
+ }
+ if (opts.dataSources) {
+ parts['simulink/ExternalDataSourceSettings.xml'] = strToU8(
+ `` +
+ opts.dataSources
+ .map((p) => `${p}`)
+ .join('') +
+ ``,
+ );
+ }
+ const zipped = zipSync(parts);
+ return zipped.buffer.slice(zipped.byteOffset, zipped.byteOffset + zipped.byteLength) as ArrayBuffer;
+}
+
+// A classic `.mdl` whose GraphicalInterface records two Model blocks referencing one model,
+// in the form mdlParser.test.ts's CLASSIC fixture uses. The block paths are written with the
+// model's own name as their root, which the parser rewrites to `$bdroot`.
+const CLASSIC_TWO_REFS = String.raw`Model {
+ Name "top"
+ Version 7.8
+ GraphicalInterface {
+ ModelReference {
+ ModelRefBlockPath "top/A|plant"
+ }
+ ModelReference {
+ ModelRefBlockPath "top/B|plant"
+ }
+ }
+ System {
+ Name "top"
+ }
+}
+`;
+
+function section(model: any, name: string): any[] {
+ return model.getSection(name).children;
+}
+
+function duplicateIds(model: any): string[] {
+ const seen = new Set();
+ const dupes: string[] = [];
+ for (const node of model.flatten()) {
+ if (seen.has(node.id)) dupes.push(node.id);
+ seen.add(node.id);
+ }
+ return dupes;
+}
+
+describe('a model referenced from two Model blocks', () => {
+ it('gives the two reference nodes in a .slx distinct ids, each findable by its own', () => {
+ const s = createSession();
+ const model = ingest(
+ s,
+ slxModel({
+ references: [
+ { BlockPath: 'top/A', ModelName: 'plant' },
+ { BlockPath: 'top/B', ModelName: 'plant' },
+ ],
+ }),
+ { filename: 'top.slx' },
+ ) as any;
+ const refs = section(model, 'references');
+ expect(refs.map((r) => r.blockPath)).toEqual(['top/A', 'top/B']);
+ // Both still name the FILE they reference: the Name column and the link are unchanged.
+ expect(refs.map((r) => r.name)).toEqual(['plant.slx', 'plant.slx']);
+ expect(refs.map((r) => r.toRow().Value.linkTarget)).toEqual(['plant.slx', 'plant.slx']);
+
+ expect(refs[0].id).not.toBe(refs[1].id);
+ // The spelling is the ruling's: the referenced name, then the referencing block's path.
+ expect(refs.map((r) => r.id)).toEqual([
+ 'top.slx/references/plant.slx@top/A',
+ 'top.slx/references/plant.slx@top/B',
+ ]);
+ // The session index holds both, and each id hands back its own node.
+ expect(s.findNodeById(refs[0].id)).toBe(refs[0]);
+ expect(s.findNodeById(refs[1].id)).toBe(refs[1]);
+ expect((s.findNodeById(refs[0].id) as any).blockPath).toBe('top/A');
+ expect((s.findNodeById(refs[1].id) as any).blockPath).toBe('top/B');
+ expect(duplicateIds(model)).toEqual([]);
+ });
+
+ it('gives the two reference nodes in a classic .mdl distinct ids, each findable by its own', () => {
+ const s = createSession();
+ const model = ingest(s, strToU8(CLASSIC_TWO_REFS), { filename: 'top.mdl' }) as any;
+ const refs = section(model, 'references');
+ expect(refs.map((r) => r.blockPath)).toEqual(['$bdroot/A', '$bdroot/B']);
+ expect(refs.map((r) => r.name)).toEqual(['plant.mdl', 'plant.mdl']);
+
+ expect(refs[0].id).not.toBe(refs[1].id);
+ expect(s.findNodeById(refs[0].id)).toBe(refs[0]);
+ expect(s.findNodeById(refs[1].id)).toBe(refs[1]);
+ expect((s.findNodeById(refs[0].id) as any).blockPath).toBe('$bdroot/A');
+ expect((s.findNodeById(refs[1].id) as any).blockPath).toBe('$bdroot/B');
+ expect(duplicateIds(model)).toEqual([]);
+ });
+});
+
+describe('two external data sources with one file name', () => {
+ it('gives each its own id, while both rows are still named after the file', () => {
+ const s = createSession();
+ const model = ingest(s, slxModel({ dataSources: ['a/signals.mat', 'b/signals.mat'] }), {
+ filename: 'top.slx',
+ }) as any;
+ const sources = section(model, 'dataSources');
+ expect(sources.map((d) => d.fullPath)).toEqual(['a/signals.mat', 'b/signals.mat']);
+ expect(sources.map((d) => d.name)).toEqual(['signals.mat', 'signals.mat']);
+ expect(sources.map((d) => d.toRow().Name.label)).toEqual(['signals.mat', 'signals.mat']);
+ expect(sources.map((d) => d.toRow().Value.linkTarget)).toEqual(['signals.mat', 'signals.mat']);
+
+ expect(sources[0].id).not.toBe(sources[1].id);
+ expect(sources.map((d) => d.id)).toEqual([
+ 'top.slx/dataSources/signals.mat@a/signals.mat',
+ 'top.slx/dataSources/signals.mat@b/signals.mat',
+ ]);
+ expect(s.findNodeById(sources[0].id)).toBe(sources[0]);
+ expect(s.findNodeById(sources[1].id)).toBe(sources[1]);
+ expect((s.findNodeById(sources[0].id) as any).fullPath).toBe('a/signals.mat');
+ expect((s.findNodeById(sources[1].id) as any).fullPath).toBe('b/signals.mat');
+ expect(duplicateIds(model)).toEqual([]);
+ });
+
+ it('keeps a Windows path apart from its sibling the same way', () => {
+ // MATLAB on Windows records `..\shared\signals.mat`; the name is still the basename.
+ const s = createSession();
+ const model = ingest(s, slxModel({ dataSources: ['..\\a\\signals.mat', '..\\b\\signals.mat'] }), {
+ filename: 'top.slx',
+ }) as any;
+ const sources = section(model, 'dataSources');
+ expect(sources.map((d) => d.name)).toEqual(['signals.mat', 'signals.mat']);
+ expect(sources[0].id).not.toBe(sources[1].id);
+ expect(s.findNodeById(sources[0].id)).toBe(sources[0]);
+ expect(s.findNodeById(sources[1].id)).toBe(sources[1]);
+ expect(duplicateIds(model)).toEqual([]);
+ });
+});
+
+describe('the ids are stable', () => {
+ it('gives the same ids when the same bytes are ingested again', () => {
+ const bytes = slxModel({
+ references: [
+ { BlockPath: 'top/A', ModelName: 'plant' },
+ { BlockPath: 'top/B', ModelName: 'plant' },
+ ],
+ dataSources: ['a/signals.mat', 'b/signals.mat'],
+ });
+ const idsOf = (): string[] => {
+ const model = ingest(createSession(), bytes.slice(0), { filename: 'top.slx' }) as any;
+ return [...section(model, 'references'), ...section(model, 'dataSources')].map((n) => n.id);
+ };
+ const first = idsOf();
+ expect(new Set(first).size).toBe(4);
+ expect(idsOf()).toEqual(first);
+ });
+});
diff --git a/test/resolveLink.test.ts b/test/resolveLink.test.ts
index 147101e0..60d1b241 100644
--- a/test/resolveLink.test.ts
+++ b/test/resolveLink.test.ts
@@ -118,6 +118,16 @@ function openDictionaryAs(s: any, srcId = 'mdlparams.sldd') {
return ingest(s, artifact('text/params.sldd'), { filename: srcId }) as any;
}
+// A model's reference or data-source entry, found by the NAME its row shows and then
+// looked up by its own id. Those ids carry the block path or the recorded path after the
+// name (ModelReferenceNode.id, DataSourceNode.id), so a typed id would restate that
+// spelling here; the lookup still goes through the session index.
+function modelEntry(s: any, srcId: string, section: string, name: string): any {
+ const child = s.getDataSource(srcId).getSection(section).children.find((c: any) => c.name === name);
+ expect(child).toBeTruthy();
+ return s.findNodeById(child.id);
+}
+
// The linkTarget a node put in its own row — never a hand-written string. If
// ModelBlockNode or DataSourceNode ever changes shape, these read the new shape and
// the resolver is tested against what is actually produced.
@@ -156,7 +166,7 @@ describe('resolveLink() — the three target shapes a node actually produces', (
const { s } = modelSession();
openDictionaryAs(s);
- const target = linkTargetOf(s.findNodeById('mdlcases.mdl/dataSources/mdlparams.sldd'), 'Value');
+ const target = linkTargetOf(modelEntry(s, 'mdlcases.mdl', 'dataSources', 'mdlparams.sldd'), 'Value');
expect(target).toBe('mdlparams.sldd');
const r = s.resolveLink(target);
@@ -172,7 +182,7 @@ describe('resolveLink() — the three target shapes a node actually produces', (
it('follows a model-reference target across the .slx/.mdl extension guess', () => {
const { s } = modelSession();
- const target = linkTargetOf(s.findNodeById('mdlcases.mdl/references/mdl_child.mdl'), 'Value');
+ const target = linkTargetOf(modelEntry(s, 'mdlcases.mdl', 'references', 'mdl_child.mdl'), 'Value');
// The reference is recorded with the PARENT's extension — addReferenceEntry guesses,
// because a `.mdl` names its child without one — so the same child is `mdl_child.mdl`
// here and `mdl_child.slx` from a `.slx` parent.
diff --git a/test/usedByColumn.test.ts b/test/usedByColumn.test.ts
index 5d2ae89d..1096227a 100644
--- a/test/usedByColumn.test.ts
+++ b/test/usedByColumn.test.ts
@@ -259,6 +259,10 @@ describe('UsedBy — a definition nothing uses gets no cell at all', () => {
const s = itemFourSession();
openParamsAs(s, 'other.sldd');
const rowFor = (id: string) => (s.findNodeById(id) as any).toRow();
+ // A reference or data-source entry's id carries its block path or recorded path after
+ // the name (ModelReferenceNode.id, DataSourceNode.id), so those two are found by name.
+ const idOf = (section: string, name: string): string =>
+ (s.getDataSource('mdlcases.mdl') as any).getSection(section).children.find((c: any) => c.name === name).id;
// A struct FIELD is not a definition: `cfg.mode` is a reference to `cfg`, and `cfg`
// takes the credit.
@@ -274,11 +278,11 @@ describe('UsedBy — a definition nothing uses gets no cell at all', () => {
// An external-data FILE row is the file-level reverse direction ("which models use
// this dictionary"), which findUsages deliberately does not answer. Its own forward
// link is untouched.
- const fileRow = rowFor('mdlcases.mdl/dataSources/mdlparams.sldd');
+ const fileRow = rowFor(idOf('dataSources', 'mdlparams.sldd'));
expect('UsedBy' in fileRow).toBe(false);
expect(fileRow.Value).toEqual({ text: 'mdlparams.sldd', linkTarget: 'mdlparams.sldd' });
// A model REFERENCE row, same reason.
- expect('UsedBy' in rowFor('mdlcases.mdl/references/mdl_child.mdl')).toBe(false);
+ expect('UsedBy' in rowFor(idOf('references', 'mdl_child.mdl'))).toBe(false);
// A container projects no row at all, and still does not.
expect((s.getDataSource('mdlparams.sldd') as any).getSection('design').toRow()).toBe(null);
});