Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
97 commits
Select commit Hold shift + click to select a range
e6e928b
Spec and Phase A plan: make the book publishable on GitHub Pages
mzargham Oct 3, 2026
c37793e
PA-3: measure release v0.9.1 binary output equivalence on toolkit-dep…
mzargham Oct 3, 2026
01e210f
Merge pub/a3: PA-3 release-binary output equivalence
mzargham Oct 3, 2026
5a9e2a0
A1: record clean-checkout reproduction of the Pages build (findings o…
mzargham Oct 3, 2026
a7f57b4
Merge pub/a1: PA-1 clean-checkout reproduction
mzargham Oct 3, 2026
7ff928d
PA-4: inventory of dangling references in the published page set
mzargham Oct 3, 2026
6f1e857
Merge pub/a4: PA-4 dangling-reference inventory
mzargham Oct 3, 2026
d41af0e
Pages publishing Phase A survey and DL-111
mzargham Oct 3, 2026
a2d02c6
DL-112: Z is the contributor identity mzargham; public pages name the…
mzargham Oct 3, 2026
95486f1
PA-2 real-runner findings, survey update, DL-113
mzargham Oct 3, 2026
7fc5150
Pages publishing Phase B plan and DL-114
mzargham Oct 3, 2026
6516136
Add tool resolver module (toaster.tools) with tests; ignore .tools/
mzargham Oct 3, 2026
2b21eaa
Merge pub/tools: PUB-1 tool resolver
mzargham Oct 3, 2026
11ab3d0
Resolve external tools through toaster.tools in five notebook cells
mzargham Oct 3, 2026
c92bff7
Merge pub/nbtools: PUB-2 notebooks use toaster.tools
mzargham Oct 3, 2026
9335dad
Add pinned tool provisioning script, pins file and tests; check-tools…
mzargham Oct 3, 2026
7eedc93
Merge pub/provision: PUB-4 pinned tool provisioning
mzargham Oct 3, 2026
f2af421
Resolve tools via toaster.tools in tests and provision_check; add no-…
mzargham Oct 3, 2026
ea5438d
Add site gate scripts/check-site.py with baseline and offline tests
mzargham Oct 3, 2026
5d3b9db
Merge pub/checksite: PUB-5 site gate
mzargham Oct 3, 2026
171b810
Merge pub/testpaths: PUB-3 tests and scripts without local paths
mzargham Oct 3, 2026
0198bf6
Allowlist the site-gate scripts in the no-local-paths guard (integrat…
mzargham Oct 3, 2026
47485e8
Make Chapters 1-4 stand alone: link exercises, models, scripts, defer…
mzargham Oct 3, 2026
9a33d91
Make Chapters 5-8 stand alone: link repo files, exercises and deferre…
mzargham Oct 3, 2026
28e1b11
Make Chapter 9 pages stand alone: link repo files, reword process ref…
mzargham Oct 3, 2026
91194c3
Chapter 10: make published pages stand alone (PUB-6D LINK and REWORD …
mzargham Oct 3, 2026
a6a5956
resolve_java: reject a java that does not run -version (macOS stub), …
mzargham Oct 3, 2026
ecb104a
Merge pub/refs-c: PUB-6C Chapter 9 reference cleanup
mzargham Oct 3, 2026
0df01b8
Merge pub/refs-a: PUB-6A Chapters 1-4 reference cleanup
mzargham Oct 3, 2026
af83865
Merge pub/refs-b: PUB-6B Chapters 5-8 reference cleanup
mzargham Oct 3, 2026
1e4f6b7
Merge pub/refs-d: PUB-6D Chapter 10 reference cleanup
mzargham Oct 3, 2026
72451f9
Docs: deployment truth, uv run preview, tools section, link harness f…
mzargham Oct 3, 2026
7d4ee92
Merge pub/docs-id: PUB-7 docs, README and identity
mzargham Oct 3, 2026
2ac97b1
Merge pub/javacheck: PUB-1b resolve_java rejects a java that does not…
mzargham Oct 3, 2026
dff99ad
CI: real pipeline (provision tools, strict MyST build with execution,…
mzargham Oct 3, 2026
fc02c0a
Merge pub/ci: PUB-8 CI build, gate and Pages deploy
mzargham Oct 3, 2026
d529139
Docs: show --strict in the CI-style build commands, describe the gate…
mzargham Oct 3, 2026
afe8768
DL-115: A7 gate ruling for the Pages publication
mzargham Oct 3, 2026
343223d
Record the opensysml.org review for the terminology revision
mzargham Oct 3, 2026
484b8c7
Chapter 10: link D-030, D-031 and D-038 beside their code cells; quot…
mzargham Oct 3, 2026
38606bc
Merge pub/refs-e: PUB-6E DEFERRED links beside ch10 record cells, Haw…
mzargham Oct 3, 2026
66531c9
DL-116: OpenSysML terminology ruling
mzargham Oct 3, 2026
1649785
Plan: OpenSysML terminology revision (contracts OT-1 to OT-8)
mzargham Oct 3, 2026
7d8a4ff
OT-1b: inventory of the binding surface for the OpenSysML terminology…
mzargham Oct 3, 2026
23436a0
Merge term/inv-b: OT-1b binding-surface inventory
mzargham Oct 3, 2026
e3ff122
OT-1a: learner-facing OpenSysML terminology inventory
mzargham Oct 3, 2026
4c63600
Merge term/inv-a: OT-1a learner-surface inventory
mzargham Oct 3, 2026
38b6844
DL-117: ACE triage of the terminology inventories; final texts
mzargham Oct 3, 2026
767f3da
Add protected-token diff checker for the terminology revision (OT-2)
mzargham Oct 3, 2026
0829f37
Merge term/guard: OT-2 protected-token diff checker
mzargham Oct 3, 2026
7cf6392
OT-3A: name the OpenSysML runtime in chapters 1-6 prose
mzargham Oct 3, 2026
dcf7aa5
OT-4: apply OpenSysML terminology rows to docs pages and case study
mzargham Oct 3, 2026
a4d61e9
OT-5: name the OpenSysML runtime in AGENTS.md 1.2/1.7/1.9, CLAUDE.md …
mzargham Oct 3, 2026
a9c3ed1
OT-3B: apply terminology rows to chapters 7-10 prose and exercises
mzargham Oct 3, 2026
fd0fb23
Plan: queue the contribution-policy revision after the terminology co…
mzargham Oct 3, 2026
ff7b6e1
Merge term/ch-a: OT-3A chapters 1-6 prose
mzargham Oct 4, 2026
732de04
Merge term/docs: OT-4 docs, README and case study
mzargham Oct 4, 2026
a05899b
Merge term/ch-b: OT-3B chapters 7-10 and exercises prose
mzargham Oct 4, 2026
d447ce3
DL-118: ACE batch 2 rulings; final texts 2
mzargham Oct 4, 2026
4b990a9
OT-5: DEFERRED.md terminology note and runtime naming in gap sentences
mzargham Oct 3, 2026
e54c2ba
OT-5: correct D-035 sentence citing D-032 and D-033 as one-of-three c…
mzargham Oct 3, 2026
0fbe4b0
OT-3C: apply batch-2 terminology wording to docs and chapter markdown
mzargham Oct 4, 2026
ac11628
Merge term/binding: OT-5 AGENTS, CLAUDE, DEFERRED terminology
mzargham Oct 4, 2026
8ff4b08
Merge term/ch-c: OT-3C batch-2 wording in docs and chapter markdown
mzargham Oct 4, 2026
949826e
OT-7: lint gains per-rule ignore_code, docs/superpowers exclusion, si…
mzargham Oct 4, 2026
f491403
Merge term/lint: OT-7 lint ignore_code, docs/superpowers exclusion, s…
mzargham Oct 4, 2026
7c5bd7c
DL-119: Z rules the Pilot Implementation is outside OpenSysML; push a…
mzargham Oct 4, 2026
758bdb3
OT-6: skills prose names the OpenSysML runtime, sysml-toolkit and the…
mzargham Oct 4, 2026
0e8c864
Merge term/skills: OT-6 skills prose terminology (ACE)
mzargham Oct 4, 2026
e8b70f6
DL-120: OT-6 skills terminology pass
mzargham Oct 4, 2026
795d0f6
Merge terminology: OpenSysML terminology revision (DL-116..DL-120), g…
mzargham Oct 4, 2026
d84c1d3
DL-121: terminology gate passed; gate notes
mzargham Oct 4, 2026
563214c
CT-1: contribution-policy inventory (read-only)
mzargham Oct 4, 2026
a957b2c
Merge ct/inv: CT-1 contribution-policy inventory
mzargham Oct 4, 2026
cfb3672
DL-122, DL-123: contribution policy rulings; final texts
mzargham Oct 4, 2026
02d8e9c
CT-3: tutorial-supporting-pages skill aligned to the contribution pol…
mzargham Oct 4, 2026
2230e33
CT-4: PR template; lint rejects unknown rule fields
mzargham Oct 4, 2026
80c054f
Merge ct/ct4: CT-4 PR template and lint unknown-key rejection
mzargham Oct 4, 2026
4f775d5
CT-3b: sysml-diagrams action-flow and state rows corrected against D-037
mzargham Oct 4, 2026
d4f9583
Merge ct/ct3b: CT-3b sysml-diagrams skill corrected against D-037
mzargham Oct 4, 2026
f36c1dc
CT-2: contribution policy in AGENTS.md 1.12, contributor guide, setup…
mzargham Oct 4, 2026
4c58ca6
CT-2: chapter pointers to the contribution policy and two note fixes …
mzargham Oct 4, 2026
8232b38
Merge ct/ct2: CT-2 contribution policy in AGENTS 1.12, contributor gu…
mzargham Oct 4, 2026
daf06b1
Merge ct/ct3: CT-3 tutorial-supporting-pages skill aligned to the con…
mzargham Oct 4, 2026
d0c2645
DL-124..DL-126: contribution amendments after CT-2 review; CT-6 pre-e…
mzargham Oct 4, 2026
243bc9e
CT-5: contributor guide amendments F1-F4, Q2 reviewer table, PR templ…
mzargham Oct 4, 2026
d14bc6a
CT-6: sysml-diagrams recipes.md action-flow and state paragraphs corr…
mzargham Oct 4, 2026
e972bf7
CT-5: gloss the ACE at first use in contributor guide; README decisio…
mzargham Oct 4, 2026
b61f108
Merge ct/ct6: CT-6 recipes.md corrected against D-037
mzargham Oct 4, 2026
0b54677
Merge ct/ct5: CT-5 contributor guide amendments, reviewer table, PR t…
mzargham Oct 4, 2026
517b72b
DL-127: CT-5 and CT-6 complete; record corrected recipes text
mzargham Oct 4, 2026
4620a97
DL-128: final-gate amendments (B1, B2) ruled; final texts 3
mzargham Oct 4, 2026
c3b3931
CT-7: contributor guide and PR template final-gate amendments (DL-128…
mzargham Oct 4, 2026
2d5da0c
Merge ct/ct7: CT-7 final-gate amendments (DL-128)
mzargham Oct 4, 2026
32d947e
Merge contrib: contribution policy (DL-122..DL-128), gate passed
mzargham Oct 4, 2026
c3a91be
DL-129: contribution-policy pass complete
mzargham Oct 4, 2026
9633208
CI: remove integration-branch trigger
mzargham Oct 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .claude/skills/ace-protocol/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ Frame decisions the way Z thinks: an **objective** (what is good and good enough
| SA-3 | Energy model = `Q = ηPt`, sympy+numpy+matplotlib for the base tutorial. scipy is permitted if it is the right tool for the job. |
| SA-4 | Single-platform CI (ubuntu-latest) |
| SA-5 | Default book-theme, no custom CSS |
| SA-6 | Bounded model checking: opensysml `check` engine only |
| SA-6 | Bounded model checking: opensysml `check` engine only (the runtime's engine; for "holds" questions Z accepted sysml-toolkit's `sysmlv2 verify --solve` wrapped by `toaster.modelcheck`: DL-046, D-025) |
| SA-7 | All judgment records are worked examples; `disposition` stays `"pending"` |
| SA-8 | One new construct or analysis operation per sub-notebook; depth notebooks may introduce neither |
| SA-9 | DOT for sequences/relationships; SysMLD first-class for interconnection; PlantUML for action flow; Matplotlib for quantitative; never Mermaid |
Expand Down Expand Up @@ -127,9 +127,9 @@ Earlier entries with a single `Rationale:` line pre-date this format.
## Escalate to Z

- SA challenge without an obvious "no" — e.g., renderer limitation that genuinely threatens a learning outcome
- Licensing questions (GPL PlantUML, pilot EPL-2.0, redistribution)
- Licensing questions (GPL PlantUML, the OMG SysML v2 Pilot Implementation's EPL-2.0, redistribution)
- Spec ambiguity spanning multiple chapters, not resolvable by existing SAs
- Required opensysml capability missing from v0.9.0 with no workable simplification
- Required OpenSysML runtime capability missing from v0.9.0 with no workable simplification
- A request to change a confirmed glossary definition or to approve a `differsFrom`: only Z acts. If Z's recorded positions show the change is wrong, decline it yourself and log it (nothing changes, so Z need not act); if you cannot tell whether the change would be right, escalate
- Any question the frameworks and principles in `z-principles.md` do not determine (the default for the unknown)
- A proposal to reopen an SA rule
Expand Down
2 changes: 1 addition & 1 deletion .claude/skills/ace-protocol/z-model.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ Every item below is something Z said or approved in this session. Cite an item a

## Sources and definitions
- Z-11. Canonical sources take priority; own definitions appear only as contextual refinements where necessary, to make learning easier. Never make things up. Never teach something misaligned with canon. The sources are complementary KINDS of definition, not rivals: SEBoK gives the idea (conceptual, generic), the OMG specs give formal and checkable semantics, Douglas gives analogy and story (didactic, aligned with as far as possible to lower cognitive cost). They are treated as non-contradicting. Our tutorial edge is the bridge. Do not phrase a ruling as one source "governing" another; say which kind of definition is needed.
- Z-12. OpenSysML and other implementations are toolchain, cited only to flag spec gaps. Tall's three worlds and the optimization/control lens are builder-facing and never named in learner content.
- Z-12. OpenSysML and other implementations are toolchain, cited only to flag spec gaps. Tall's three worlds and the optimization/control lens are builder-facing and never named in learner content. [Reading note, 2026-10-03, DL-116/DL-117: said when this repository used "OpenSysML" for the runtime; it now names the stack whose components the tutorial uses are the OpenSysML runtime and sysml-toolkit. The position holds under both readings.]
- Z-13. Douglas says what / who / where; the tutorial's what / how / where is Z's own sharpening and must be presented as such (attribute it plainly).
- Z-14. SEBoK's "logical architecture" contains the functional view; the tutorial's "logical" is therefore a `differsFrom` edge, and Z APPROVED that departure in planning ("differsFrom, approved"). Learners are told the word is used more narrowly than in SEBoK.
- Z-15. Mechanism and policy are grounded in public canonical texts (Astrom and Murray; Sutton and Barto), not in Z's own generalized-dynamical-systems paper (which informs Z's thinking but is not a canonical source). Neither text uses the word "mechanism" in Z's sense, so the tutorial's "mechanism" is a recorded refinement of the input/output dynamics definitions, word and determinism emphasis marked as ours.
Expand Down
2 changes: 1 addition & 1 deletion .claude/skills/opensysml-api/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name: opensysml-api
description: opensysml v0.9.0 interface — correct method names, return shapes, limitations, and the D-001 encapsulation rule.
---

# OpenSysML v0.9.0 API
# The OpenSysML runtime v0.9.0 API

## Connection

Expand Down
8 changes: 4 additions & 4 deletions .claude/skills/opensysml-query/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
---
name: opensysml-query
description: Tested cookbook for interrogating a loaded SysML v2 model with OpenSysML v0.9.0 (three surfaces, what each sees, id formats, recipes, what does not work and the workaround). Snippets are executed by tests/test_skill_snippets.py.
description: Tested cookbook for interrogating a loaded SysML v2 model with the OpenSysML runtime v0.9.0 (three surfaces, what each sees, id formats, recipes, what does not work and the workaround). Snippets are executed by tests/test_skill_snippets.py.
---

# Querying a model (OpenSysML v0.9.0)
# Querying a model (the OpenSysML runtime v0.9.0)

SysML v2 is declarative and database-like (AGENTS.md 1.4): we build a model, then ask it questions. There are three surfaces, and none of them sees everything. Pick by what you need to see. Results and dates are in `decisions/probes.md`; gap ids (G1 to G7) are in `decisions/log.md` DL-015.

Expand Down Expand Up @@ -129,7 +129,7 @@ assert satisfies()

## Recipe 5: a staged conformance check (port types on connected ends)

OpenSysML accepts a connection between ports of unrelated types with no diagnostic (gap G4, `decisions/probes.md`), and the KerML text searched has no validation constraint for it. So this is a **project conformance check**, not a language one (AGENTS.md 1.9): apply it from the chapter and section where the connection is declared complete, keep a negative control that shows it catching a fault, and report it as *open* before then.
The OpenSysML runtime v0.9.0 and sysml-toolkit v0.9.1 both accept a connection between ports of unrelated types with no diagnostic (gap G4, `decisions/probes.md`), and the KerML text searched has no validation constraint for it. So this is a **project conformance check**, not a language one (AGENTS.md 1.9): apply it from the chapter and section where the connection is declared complete, keep a negative control that shows it catching a fault, and report it as *open* before then.

```python
def feature_type_names(feature_qn):
Expand Down Expand Up @@ -174,7 +174,7 @@ The API JSON `@id` uses `__` for `::` and escapes `_` (`named_flow` becomes `nam
| `conn.load(path)` exists but does not resolve imports either | Same workaround. |
| Writing these joins by hand in a notebook | Import the tested helpers from `toaster.query`: `find_connectors`, `find_allocations`, `allocations_for`, `satisfy_relationships`, `perform_relationships`, `requirement_coverage`, `specializes_transitively`, `port_type_mismatches`. The recipes above show what they do; `tests/test_query.py` covers them against `models/ch08-cumulative.sysml`. |

The sysml-toolkit Python binding (`sysmlv2.Session.from_files`) does resolve imports across files and sees unnamed elements through `elements_of_metaclass`. It is toolchain, not a chapter dependency (see `decisions/probes.md`).
The sysml-toolkit Python binding (`sysmlv2.Session.from_files`) does resolve imports across files and sees unnamed elements through `elements_of_metaclass`. It is toolchain, not a chapter dependency: every notebook loads its model through the OpenSysML runtime, and Chapters 5, 8 and 10 use sysml-toolkit only through its `sysmlv2` binary (`viz` in Chapter 5, `verify --solve` in Chapters 8 and 10; DL-118 B3/B4), not through this binding (see `decisions/probes.md`).

## Before you assert something works

Expand Down
18 changes: 9 additions & 9 deletions .claude/skills/sysml-diagrams/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,15 @@ Use one default pipeline for each figure type. Read only the relevant recipe in

| Question / figure type | Default pipeline | Why |
|---|---|---|
| What is the system made of? Definition and decomposition view | `model_to_dot()` (in-house, `src/toaster/render.py`) → Graphviz SVG | Draws the whole model's containment graph from a full `model.query()`, not one root's direct children — a real-fixture rerun of the diagram trade study (`decisions/diagram-study-real-fixtures.md`) found the OMG pilot fails on all real chapter content (qualified-name `allocate` targets), and rendering a single root via OpenSysML's `#tree:` form only shows that root's own direct features, one level deep. |
| What is the system made of? Definition and decomposition view | `model_to_dot()` (in-house, `src/toaster/render.py`) → Graphviz SVG | Draws the whole model's containment graph from a full `model.query()`, not one root's direct children — a real-fixture rerun of the diagram trade study (`decisions/diagram-study-real-fixtures.md`) found the OMG SysML v2 Pilot Implementation fails on all real chapter content (qualified-name `allocate` targets), and rendering a single root via the OpenSysML runtime's `#tree:` form only shows that root's own direct features, one level deep. |
| How do parts connect through ports? Interconnection view | Model query → `render_interconnection()` (in-house, `src/toaster/render.py`; the same real-fixture study found the actual third-party SysMLD tool cannot index real content at all) → Graphviz SVG | Draws part connectivity, port identity (as edge labels), and allocations, with zero dependency on a tool proven unreliable on real content. **Use sysml-toolkit instead specifically when port identity itself is the chapter's own pedagogical point** (e.g. a chapter introducing or exercising a conjugated port) — it draws real port names as their own boxes, not folded into one edge label, confirmed on every real fixture tested (`decisions/diagram-study-real-fixtures.md`). Otherwise default to the in-house renderer: a chapter using interconnection only to show an allocation or a connection, where port identity is not itself the point, does not need the extra external-binary dependency (`decisions/diagram-survey.md`, Ch5-vs-Ch6 example). |
| What happens next? Action-flow view | OpenSysML CLI, `-render #action:element -render-form dot` → Graphviz SVG | Confirmed directly against real chapter content (Ch6's `ApplyHeat` action): exit 0, real action-flow notation. No in-house action-flow renderer exists yet. |
| How does behavior change with events? State-transition view | OpenSysML CLI, `-render #state:element -render-form dot` → Graphviz SVG | The real-fixture study confirmed this directly against Ch7's real `Cycle` state machine — 100% success across both OpenSysML render forms. The OMG pilot (this table's earlier default) fails on all real chapter content; do not use it. |
| Who sends what, in what order? Sequence view | OpenSysML sequence query → DOT → Graphviz SVG | White background, relationship-consistent rendering, no Mermaid dependency. Provisional: no chapter's real model has a `FlowUsage` yet, so this pipeline has not been exercised against real content. Fallback: PlantUML if `opensysml -render-form dot` unsupported for sequences (confirmed at WP-1 and documented below). |
| What happens next? Action-flow view | OpenSysML runtime CLI, `-render #action:element -render-form dot` → Graphviz SVG | Confirmed against real chapter content (Ch4's `ToastBread`, Ch6's `ApplyHeat`): exit 0 and the control sequence is drawn, but the CLI's DOT omits the actions' declared typed flows (D-037); the caption must say so. No in-house action-flow renderer exists yet. |
| How does behavior change with events? State-transition view | OpenSysML runtime CLI, `-render #state:element -render-form dot` → Graphviz SVG | The real-fixture study ran this against Ch7's real `Cycle` state machine: both OpenSysML runtime render forms exit 0 and draw the states and transitions, but the `do` activity label omits the performed action's name (D-037); the caption must say so. The pilot (this table's earlier default) fails on all real chapter content; do not use it. |
| Who sends what, in what order? Sequence view | OpenSysML runtime sequence query → DOT → Graphviz SVG | White background, relationship-consistent rendering, no Mermaid dependency. Provisional: no chapter's real model has a `FlowUsage` yet, so this pipeline has not been exercised against real content. Fallback: PlantUML if `opensysml -render-form dot` unsupported for sequences (confirmed at WP-1 and documented below). |
| Which requirement or function relates to which element? Traceability graph | Model query → Graphviz DOT → SVG | Explicit typed relationships and controllable grouping. Use a table when the purpose is exhaustive coverage. |
| How does a modeled quantity change? Scientific plot | Model execution results → Matplotlib → SVG | Axes, units, reference values, and parameter comparisons. |

These are working defaults for this tutorial, not universal tool rankings, and are grounded in `decisions/diagram-study-real-fixtures.md` (a rerun of the original trade study against real chapter models, not the simplified toy fixture the original comparison used). Keep the same pipeline for a given figure type throughout the book. An unsupported construct warrants an explicit recipe change; a crowded figure usually warrants a smaller scope or better layout. **Never use the OMG pilot or the third-party SysMLD/sysml2d tool for real chapter content** — both are confirmed, on real content, to fail entirely (pilot: qualified-name `allocate` targets; SysMLD: an indexer bug that mis-tracks brace scope on ordinary real syntax like a doc-comment block or an `assert constraint` body).
These are working defaults for this tutorial, not universal tool rankings, and are grounded in `decisions/diagram-study-real-fixtures.md` (a rerun of the original trade study against real chapter models, not the simplified toy fixture the original comparison used). Keep the same pipeline for a given figure type throughout the book. An unsupported construct warrants an explicit recipe change; a crowded figure usually warrants a smaller scope or better layout. **Never use the pilot or the third-party SysMLD/sysml2d tool for real chapter content** — both are confirmed, on real content, to fail entirely (pilot: qualified-name `allocate` targets; SysMLD: an indexer bug that mis-tracks brace scope on ordinary real syntax like a doc-comment block or an `assert constraint` body).

## Make a figure recipe

Expand Down Expand Up @@ -53,15 +53,15 @@ Use white backgrounds, readable typography, restrained color, and consistent nam

- **DOT/Graphviz** — default for structure, interconnection, sequence, and relationship diagrams
- **`render_interconnection()`** (in-house, `src/toaster/render.py`) — first-class for port-level interconnection; the intent dict is built from `model.query()` + `model.to_api_json()`. This function does not use, and never used, the third-party SysMLD tool — see the real-fixture study for why that tool is now confirmed unusable on real content.
- **OpenSysML CLI (`-render-form dot`)** — action flow and state views, confirmed directly against real chapter content
- **OpenSysML runtime CLI (`-render-form dot`)** — action flow and state views, confirmed directly against real chapter content
- **Matplotlib** — quantitative figures only
- **Mermaid** — NOT used anywhere in this tutorial
- **The OMG pilot** — NOT used anywhere in this tutorial; confirmed to fail on all real chapter content (qualified-name `allocate` targets)
- **The OMG SysML v2 Pilot Implementation** — NOT used anywhere in this tutorial; confirmed to fail on all real chapter content (qualified-name `allocate` targets)
- **The third-party SysMLD/sysml2d tool** — NOT used anywhere in this tutorial; confirmed to fail to index any real chapter content (an indexer bug, see `decisions/log.md` DL-055)

**A note on an earlier finding, corrected by the real-fixture study (`decisions/diagram-study-real-fixtures.md`):** an earlier probe (WP-1, 2026-09-25, against a small hand-written test model, not a real chapter model) found opensysml had no native DOT or render-form CLI, and that finding drove a stopgap of generating DOT directly from `model.query()` output for the structure view. That stopgap (`model_to_dot()`) is still the right choice for structure specifically (it draws the whole model, not one root), but the earlier finding about OpenSysML's CLI itself no longer holds: the pinned binary's `-render #kind:element -render-form dot` (or `plantuml`) form is real, works on real chapter content (confirmed for both action-flow and state views), and is simply undocumented in the binary's own `-help` output.
**A note on an earlier finding, corrected by the real-fixture study (`decisions/diagram-study-real-fixtures.md`):** an earlier probe (WP-1, 2026-09-25, against a small hand-written test model, not a real chapter model) found the OpenSysML runtime had no native DOT or render-form CLI, and that finding drove a stopgap of generating DOT directly from `model.query()` output for the structure view. That stopgap (`model_to_dot()`) is still the right choice for structure specifically (it draws the whole model, not one root), but the earlier finding about the OpenSysML runtime's CLI no longer holds: the pinned binary's `-render #kind:element -render-form dot` (or `plantuml`) form is real, works on real chapter content (confirmed for both action-flow and state views), and is simply undocumented in the binary's own `-help` output.

For action flow and state: OpenSysML's own `-render` CLI, not a custom Python renderer — none exists yet for action flow, and none is needed.
For action flow and state: the OpenSysML runtime's own `-render` CLI, not a custom Python renderer — none exists yet for action flow, and none is needed.
For interconnection: `render_interconnection()`'s intent dict, built from `model.query()` + `model.to_api_json()` (unchanged from WP-4; only the function's name changed, since it never depended on the tool its old name implied).
Never use Mermaid as a fallback for anything.

Expand Down
Loading
Loading