class-generation — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited class-generation (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
openEHR specification class documentation — the per-class definition tables and the UML class/package diagrams embedded in specifications-XX documents — is generated, not hand-written. The source of truth is the component's BMM (Basic Meta-Model) schema, serialised as P_BMM JSON, and the generator is the bmm-publisher CLI tool.
Replaces MagicDraw. Class tables and diagrams were historically extracted from MagicDraw.mdzipUML models. That mechanism is retired;bmm-publisheris the current BMM-based generator.
For the full command, option, and schema reference, see references/bmm-publisher.md.
Regenerate class documentation when:
docs/UML/classes/ tables refreshed before a releaseNever hand-edit the generated output — change the BMM schema upstream and regenerate.
The tool is distributed as a Docker image that bundles all openEHR BMM schemas and the plantuml CLI. No local PHP, Composer, or checkout is required.
# Discover commands
docker run --rm ghcr.io/openehr/bmm-publisher listFor local development against a cloned bmm-publisher checkout, drive everything through its dev container (no host PHP): make install, make sh, make publish-all. See references/bmm-publisher.md.
| Command | Aliases | Produces |
|---|---|---|
asciidoc | adoc | AsciiDoc class/effective/definition tables and rendered SVG class/package diagrams (self-contained) |
legacy-adoc | Flat per-class definition tables only, in the legacy docs/UML/classes layout (-o <dir> to target) | |
plantuml | uml, puml | Standalone PlantUML .puml sources only |
embed-svg | Re-run only the SVG sanitise + publish step | |
yaml | Machine-readable YAML serialisation of each schema | |
split-json | Per-type JSON files | |
odin | ODIN .bmm schema files (the hand-authored BMM format) |
Pass schema id(s) without the .bmm.json suffix (e.g. openehr_base_1.3.0), or all. Use repeatable -d <schema> for dependency schemas loaded for cross-references only (not exported), and -v/-vv for progress / detailed logging.
bmm-publisher writes two layouts; pick the one the target component uses.
docs/UML/classes/ (the include model)legacy-adoc produces one .adoc table per class, named org.openehr.<component>.<package>.<class>.adoc (the class segment is lowercased, e.g. org.openehr.base.base_types.access_group_ref.adoc). These are placed in the component's docs/UML/classes/ directory and pulled into chapter files via the {uml_export_dir} attribute (which resolves to ../UML):
include::{uml_export_dir}/classes/{pkg}composition.adoc[]This is the layout enforced by the review skill's ADOC-03 check.
output/Adoc/<schema>/ (tables + rendered SVGs)asciidoc produces classes/, effective/, definitions/, plantUML/, and rendered SVGs under images/uml/{classes,diagrams}/. Diagrams are referenced with Antora-style resource macros:
image::ROOT:uml/classes/COMPOSITION.svg[]openehr_base_1.3.0, openehr_rm_1.2.0(naming pattern: openehr_<component>_<version>).
docker run --rm --user $(id -u):$(id -g) \
-v ./out:/app/output \
ghcr.io/openehr/bmm-publisher asciidoc -v openehr_rm_1.2.0 -d openehr_base_1.3.0classes/*.adoc into the component's docs/UML/classes/ (legacy layout)or wire the output/Adoc/<schema>/ content per the component's current convention.
authoring skill) and confirming class tables anddiagrams render and cross-references resolve.
change the model.
-d so type links resolve (e.g. RM depends on BASE).~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.