# IMS co-verification demo: the models

Everything needed to rebuild the twin from scratch. Nothing here carries a
Siemens proprietary header, and the system is fictional, so all of it is safe to
publish.

> Reworded 2026-09-09. This paragraph previously named the proprietary header
> phrase verbatim, and the knowledge base's publication guard matched that name
> and refused the file. The guard was right and the sentence was wrong: a filter
> deciding what reaches a public unauthenticated site should be conservative,
> and the fix belongs in the prose rather than in the filter. Do not put the
> literal header text in a file intended for publication, even to say a file
> does not contain it.

| File | What it is |
|---|---|
| `IMS_Coverification_Demo.mdzip` | The Cameo SysML model. A SANITISED copy of the working model (see below), identical in content and carrying no author metadata. 8 blocks, 3 interface blocks, 4 message specifications by ethertype, 13 ports, 7 connectors, 5 requirements, the `Fuse And Transmit` activity and the `Detection To Transmit` sequence diagram. Carries NO implementation language and NO VSI gateway names: a systems modeller specifies neither. |
| `../cameo2vsi.config.json` | The twin-construction decisions the model deliberately does not hold: language per component, protocol to gateway with a fidelity rating, signal type, fabric step, campaign axes. |
| `../ims.answers.json` | Generated. The vsi_wizard twin definition: 7 components, 171 signals, 88 links. |
| `../ims.software.json` | Generated. The activity with a duration bound to every action. |
| `../ims.params.json` | Generated. Every timing number the behaviours obey, read from the model's value properties. |
| `../ImsDT.vsi.cmd` | Generated. The vsiBuild command file. |
| `../ims.assumptions.md` | Generated. Every decision the model did not make, including which model ports were merged onto one VSI port and what each protocol substitution costs. |
| `../behaviours/` | The seven component behaviours plus `ims_common.py`. Every timing number comes from `ims.params.json`; none is hard-coded. |
| `../runs/campaign.json` | The nine run records the published page is generated from. |

## Rebuilding

```
python cameo2vsi.py models/IMS_Coverification_Demo.mdzip --out ims
python run_ims.py bootstrap
python run_ims.py campaign --targets-list 1 2 4
python make_kb_page.py --out kb/hw-sw-coverification.md
```

The model can be re-authored from nothing with `author_ims_model.py`, a staged
Jython script for `cameo_eval`. Run its `probe` stage first: it writes nothing
and reports which SysML stereotypes, factory methods and flow-direction literals
actually resolve on the installed Cameo, so a failure names the assumption
instead of dying deep in a write.


## Author metadata is stripped on the way out

This copy is produced by `../strip_model_metadata.py` from the working model in
`cameo-test-models/`, which EMPTIES the `Author` and `Last_modified_by` values
Cameo puts on diagrams and comments.

**Emptied, not deleted, and the distinction matters to anyone re-checking.** The
attributes are still present and their values are now empty strings: six
`Author=''` and six `Last_modified_by=''`, with zero non-empty. Deleting the
attributes outright would leave the stereotype application short of members it
declares; emptying keeps the model well-formed, which is why it opens in Cameo
with an identical census. Someone grepping for `Author=` will find six hits and
should: the names are what is gone, not the fields.

```
python strip_model_metadata.py <working>.mdzip --out models/<working>.mdzip --names chris
```

It runs at the publication boundary rather than on the working model, because
Cameo re-stamps `Last_modified_by` on every save: sanitising the working model
would last until the next edit and then silently regress. The script verifies
its own output (member count, every other member byte-identical, no metadata
left, named people absent) and refuses to write if any check fails.

Proven equivalent after stripping: the model opens in Cameo with an identical
census, and `cameo2vsi.py` produces byte-identical `answers`, `params` and
`software` output from it. So a reader who downloads this file rebuilds exactly
the twin the published results came from.

**One thing this does NOT remove**, deliberately. The stock SysML profile that
ships with Cameo carries its vendor's own developer build paths inside the proxy
members (`/Users/vaiaug/IdeaProjects/...`, `/Users/Nerijus/...`). Those are the
vendor's, they are present in every Cameo model made from that template
anywhere, and they sit in profile internals where a blind rewrite risks a model
that no longer opens. Reported here rather than edited.
