Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
2185 commits
Select commit Hold shift + click to select a range
23d103a
fix(migrate): keep a feature a view exposes reachable
devin-ai-integration[bot] Sep 23, 2026
a43e221
Merge pull request #541 from Open-MBEE/fix/membership-import-name-prune
HuiJun Sep 23, 2026
30f63ea
Merge pull request #542 from Open-MBEE/fix/view-exposed-feature-visib…
HuiJun Sep 23, 2026
1d8a653
feat(migrate): flatten generated row queries
devin-ai-integration[bot] Sep 23, 2026
94520af
Merge remote-tracking branch 'origin/develop' into feature/migrate-ta…
devin-ai-integration[bot] Sep 23, 2026
88dc153
fix(migrate): keep a property a table column reads reachable
devin-ai-integration[bot] Sep 23, 2026
c010472
fix(migrate): stop writing MagicDraw's property-kind markers as comments
devin-ai-integration[bot] Sep 23, 2026
d62d9ae
fix(migrate): keep a mismatched property-kind marker on a constraint …
devin-ai-integration[bot] Sep 23, 2026
a5e9e67
feat(parser): parse a $::-rooted qualified name where an expression s…
devin-ai-integration[bot] Sep 23, 2026
0cf7e3c
fix(check): type each nested call once instead of once per reader
devin-ai-integration[bot] Sep 23, 2026
069db0b
feat(export): materialize the normative relationship elements
devin-ai-integration[bot] Sep 23, 2026
63ad663
feat(export): read sysml-toolkit interchange JSON and mint uuid ids
devin-ai-integration[bot] Sep 23, 2026
a952a59
docs(export): document the normative element mapping and interchange
devin-ai-integration[bot] Sep 23, 2026
8efa9ef
chore(export): satisfy staticcheck on the normative paths
devin-ai-integration[bot] Sep 23, 2026
d4a9266
test(interop): record the materialized elements in the Flexo expectat…
devin-ai-integration[bot] Sep 23, 2026
30ab66a
fix(cli): refuse -id outside SysML-notation to RDF conversions
devin-ai-integration[bot] Sep 23, 2026
20deae7
fix(sync): leave the derived satellite elements unminted
devin-ai-integration[bot] Sep 23, 2026
af6b8fc
fix(export): root uuid ids at the quoted root package
devin-ai-integration[bot] Sep 23, 2026
73a3db4
fix(export): derive the uuid root from the decoder's ownership tree
devin-ai-integration[bot] Sep 23, 2026
f19055a
fix(export): verify materialized relationship ends against their own …
devin-ai-integration[bot] Sep 23, 2026
493e1d6
fix(export): compare multiplicity bounds in both directions
devin-ai-integration[bot] Sep 23, 2026
9348be2
refactor(export): drop the redundant alias in verifyCovered
devin-ai-integration[bot] Sep 23, 2026
1a2f78a
fix(export): compare materialized relationship ends against literal t…
devin-ai-integration[bot] Sep 23, 2026
50162e5
fix(export): claim the minted element-namespace referent memberships
devin-ai-integration[bot] Sep 23, 2026
df8b184
fix(export): consume one collapsed kind per materialized relationship…
devin-ai-integration[bot] Sep 23, 2026
16b7b20
refactor(export): tighten the comments on the literal target checks
devin-ai-integration[bot] Sep 23, 2026
80004a3
fix(export): split written qualified names on :: outside quotes only
devin-ai-integration[bot] Sep 23, 2026
1804be2
fix(export): derive uuid namespaces from the scoped root IRI
devin-ai-integration[bot] Sep 23, 2026
baeeeba
docs(export): describe the spelling unescapeName returns
devin-ai-integration[bot] Sep 23, 2026
e15088a
feat(migrate): write DocGen documents as Document, Section and query-…
devin-ai-integration[bot] Sep 23, 2026
97a941d
fix(export): keep name escapes when canonicalizing written references
devin-ai-integration[bot] Sep 23, 2026
812053b
feat(migrate): read MagicDraw «typeModifier» on properties and parame…
devin-ai-integration[bot] Sep 23, 2026
f5c08c1
feat(migrate): lower DocGen documents to Document definitions with a …
devin-ai-integration[bot] Sep 23, 2026
3458bda
feat(migrate): execute and render migrated tables and documents
devin-ai-integration[bot] Sep 23, 2026
10a7df0
feat(migrate): expose the edges a Cameo diagram draws so MTIP routes …
devin-ai-integration[bot] Sep 23, 2026
5275b9d
test(migrate): pin table homonyms and malformed table refusals
devin-ai-integration[bot] Sep 23, 2026
8e47bae
test(migrate): pin layout annotations on a table diagram's view
devin-ai-integration[bot] Sep 23, 2026
42d9b8d
fix(migrate): count a placement of an edge the rendering draws as not…
devin-ai-integration[bot] Sep 23, 2026
42cce50
docs(migrate): document table, matrix, relation map and DocGen loweri…
devin-ai-integration[bot] Sep 23, 2026
e46c8b8
test(migrate): render a migrated view's routes as pinned DOT splines
devin-ai-integration[bot] Sep 23, 2026
35288d3
fix(migrate): qualify document references past synthesized members
devin-ai-integration[bot] Sep 23, 2026
11851b7
fix(migrate): expose a graph edge the typed view's rendering does not…
devin-ai-integration[bot] Sep 23, 2026
f403d8e
fix(migrate): reach a document's diagram view by a feature chain
devin-ai-integration[bot] Sep 23, 2026
2adbf10
fix(migrate): route a shown twin flow and every transition of a multi…
devin-ai-integration[bot] Sep 23, 2026
803a74b
fix(migrate): expose every pair a shown dependency, satisfy or verify…
devin-ai-integration[bot] Sep 23, 2026
2fb0bde
fix(migrate): write the Table Document of a diagram owned by the mode…
devin-ai-integration[bot] Sep 23, 2026
e6f9bed
fix(migrate): refuse a typeModifier over a malformed multiplicity
devin-ai-integration[bot] Sep 23, 2026
96194b1
test(xmi): pin the DocGen view tree's aggregation semantics
devin-ai-integration[bot] Sep 23, 2026
13ba76c
fix(migrate): draw a behavior diagram as its graph only when it shows…
devin-ai-integration[bot] Sep 23, 2026
9ba2a10
fix(migrate): list what an abstract UML metaclass holds in a generic …
devin-ai-integration[bot] Sep 23, 2026
aef702e
test(libs): pin isAbstract and isIndividual across every library load…
devin-ai-integration[bot] Sep 23, 2026
861db43
fix(queryexec): refuse a dangling or cyclic alias in Named
devin-ai-integration[bot] Sep 23, 2026
466a931
fix(migrate): refuse a DocGen chain with a dangling control flow
devin-ai-integration[bot] Sep 23, 2026
ef407b3
fix(migrate): name transitions past the state def's members and write…
devin-ai-integration[bot] Sep 23, 2026
1e80103
fix(migrate): follow only control flows through a DocGen method
devin-ai-integration[bot] Sep 23, 2026
9933d29
fix(migrate): refuse a DocGen view whose viewpoint method resolves to…
devin-ai-integration[bot] Sep 23, 2026
cd80d9c
fix(migrate): filter DocGen names with one WhereName so the rows keep…
devin-ai-integration[bot] Sep 23, 2026
69fcccb
fix(migrate): keep a table's column order and unique column names wit…
devin-ai-integration[bot] Sep 23, 2026
4e3de08
Merge pull request #544 from Open-MBEE/fix/memoize-invocation-inference
HuiJun Sep 23, 2026
f8f547d
Merge pull request #546 from Open-MBEE/feature/expose-diagram-edges
HuiJun Sep 23, 2026
cd805b9
Merge pull request #545 from Open-MBEE/feature/api-json-normative-rel…
HuiJun Sep 23, 2026
3e596bb
Merge pull request #543 from Open-MBEE/fix/drop-property-kind-markers
HuiJun Sep 23, 2026
0ecc383
fix(migrate): write a table's built-in columns first and note the reo…
devin-ai-integration[bot] Sep 23, 2026
14585b3
Merge branch 'develop' into feature/migrate-tables-and-documents
devin-ai-integration[bot] Sep 23, 2026
c92d08a
Merge remote-tracking branch 'origin/develop' into feature/migrate-ta…
devin-ai-integration[bot] Sep 23, 2026
202eaf8
fix(migrate): start a whole-model table from the top-level views too
devin-ai-integration[bot] Sep 23, 2026
8fcf5b6
Merge remote-tracking branch 'origin/feature/migrate-tables-and-docum…
devin-ai-integration[bot] Sep 23, 2026
0816ca8
fix(migrate): drop a DocGen caption when showCaptions is false
devin-ai-integration[bot] Sep 23, 2026
5c2895c
fix(migrate): carry a DocGen chain's diagrams through its filters, so…
devin-ai-integration[bot] Sep 23, 2026
08a479b
fix(migrate): root a DocGen chain in each exposed element once
devin-ai-integration[bot] Sep 23, 2026
a53695b
feat(export): emit the pilot's expression shape for the invocation fa…
devin-ai-integration[bot] Sep 23, 2026
f05ce87
fix(migrate): refuse a bare module id several modules' hrefs share
devin-ai-integration[bot] Sep 23, 2026
3a506f4
feat(export): wrap the API element form in the pilot's root Namespace
devin-ai-integration[bot] Sep 23, 2026
fa431bf
fix(migrate): report a criterion excluding walked subtypes, walk Deri…
devin-ai-integration[bot] Sep 23, 2026
6693da7
feat(export): normative type-argument parameters, filter packages and…
devin-ai-integration[bot] Sep 23, 2026
c56b396
feat(export): normative Membership, if-branch and Multiplicity elemen…
devin-ai-integration[bot] Sep 23, 2026
b61ca44
Merge pull request #533 from Open-MBEE/feature/migrate-tables-and-doc…
HuiJun Sep 23, 2026
bb8e51c
feat(migrate): draw graph-form and collected diagrams in DocGen docum…
devin-ai-integration[bot] Sep 23, 2026
614f870
fix(view): position routed nodes for neato -n2 and expose migrated co…
devin-ai-integration[bot] Sep 23, 2026
ed6d56e
fix(cli): encode unsafe bytes in -render-all filenames instead of sto…
devin-ai-integration[bot] Sep 23, 2026
7a02841
feat(export): read the toolkit's subactions, sourceless successions a…
devin-ai-integration[bot] Sep 23, 2026
011b226
feat(migrate): read diagram streams so empty figures are left out wit…
devin-ai-integration[bot] Sep 23, 2026
439ca1e
feat(export): write state subactions and transition effects as Perfor…
devin-ai-integration[bot] Sep 23, 2026
5e222f7
feat(export): own transition effects through TransitionFeatureMembership
devin-ai-integration[bot] Sep 23, 2026
9141279
test(parser): pin the anonymous usage a bare kind keyword declares
devin-ai-integration[bot] Sep 23, 2026
df081b4
fix(cli): refuse -render-all paths meeting under case folding; encode…
devin-ai-integration[bot] Sep 23, 2026
ad9acb1
docs(pssm): record Terminate 002 as passing where the prose still cal…
devin-ai-integration[bot] Sep 23, 2026
0d76418
fix(export): own a body expression through its FeatureMembership alone
devin-ai-integration[bot] Sep 23, 2026
5e9ed1b
Merge pull request #548 from Open-MBEE/docs/terminate-002-closed-prose
HuiJun Sep 23, 2026
4858853
fix(cli): fold -render-all collision keys with Unicode simple case fo…
devin-ai-integration[bot] Sep 23, 2026
fc0c289
feat(export): normative state-subaction kinds, canonical case keyword…
devin-ai-integration[bot] Sep 23, 2026
0215283
fix(view): head graphical roots relative to their shared namespace, t…
devin-ai-integration[bot] Sep 23, 2026
8766e52
fix(syson): map diagnostics to the enclosing exported element
devin-ai-integration[bot] Sep 23, 2026
ae60ef5
docs(syson): describe remaining serializer gaps after the fork fixes
devin-ai-integration[bot] Sep 23, 2026
9a14b9a
feat(migrate): lower DocGen collectors, diagram-type filters and requ…
devin-ai-integration[bot] Sep 23, 2026
644b716
docs(migrate): document DocGen-like rendering of migrated documents
devin-ai-integration[bot] Sep 23, 2026
71b0456
docs(syson): record the Batmobile results against the fork's export f…
devin-ai-integration[bot] Sep 23, 2026
deae742
Merge pull request #547 from Open-MBEE/fix/layout-pseudonodes-render-…
HuiJun Sep 23, 2026
ea711a9
Merge remote-tracking branch 'origin/develop' into fix/interconnectio…
devin-ai-integration[bot] Sep 23, 2026
e5faacb
fix(export): read earlier invocation graphs and mint collision-free r…
devin-ai-integration[bot] Sep 23, 2026
2480083
fix(doc): draw state transitions with qualified labels and large char…
devin-ai-integration[bot] Sep 23, 2026
d677127
ci(sonar): fit the scan in its container, retry transient API errors,…
devin-ai-integration[bot] Sep 23, 2026
a12cbae
fix(export): keep authored anonymous namespaces and match chained cal…
devin-ai-integration[bot] Sep 23, 2026
31d5bbd
test(doc): spell the graph-form fixture's diagram sources as accessib…
devin-ai-integration[bot] Sep 23, 2026
7eed5a0
fix(export): spell an unresolved chained callee with its dots in the …
devin-ai-integration[bot] Sep 23, 2026
e5f709d
Merge pull request #549 from Open-MBEE/fix/interconnection-root-labels
HuiJun Sep 23, 2026
a83e495
fix(doc): scale a figure taller than the PDF page onto one page with …
devin-ai-integration[bot] Sep 23, 2026
571c8b4
ci(sonar): keep the scan logs as artifacts when the scan fails
devin-ai-integration[bot] Sep 23, 2026
72427fc
Merge pull request #551 from Open-MBEE/fix/syson-plugin-patched-export
HuiJun Sep 23, 2026
eb3e218
Merge pull request #550 from Open-MBEE/feature/api-json-normative-ele…
HuiJun Sep 23, 2026
b2ea5a6
fix(cli): tag -render-all paths that meet under case folding instead …
devin-ai-integration[bot] Sep 23, 2026
a40735d
Merge remote-tracking branch 'origin/develop' into feature/docgen-fig…
devin-ai-integration[bot] Sep 23, 2026
ae2b3a8
test(migrate): expect the tree figure's roots headed by their names w…
devin-ai-integration[bot] Sep 23, 2026
cbb0b18
fix(cli): plan -render-all filenames over the views the form writes u…
devin-ai-integration[bot] Sep 23, 2026
1a3c9f6
fix(migrate): refuse a partial CollectThingsOnDiagram and revisit sha…
devin-ai-integration[bot] Sep 23, 2026
aebc08d
Merge pull request #554 from Open-MBEE/fix/render-all-case-collisions
HuiJun Sep 23, 2026
ae253fa
fix(migrate): refuse an Image after a broken chain and sort holders b…
devin-ai-integration[bot] Sep 24, 2026
7f933e8
feat(site): link lord.opensysml.org from the header menu
devin-ai-integration[bot] Sep 24, 2026
c66f9ba
fix(migrate): keep an unreadable diagram stream, the root Model and a…
devin-ai-integration[bot] Sep 24, 2026
4a311c4
feat(site): spell out the Legend of the Red Dragon link
devin-ai-integration[bot] Sep 24, 2026
164cce7
feat(site): open the Legend of the Red Dragon link in a new window
devin-ai-integration[bot] Sep 24, 2026
1ab35c5
Merge pull request #552 from Open-MBEE/ci/sonar-scan-memory-retry
HuiJun Sep 24, 2026
298f14f
docs(examples): record analysis runs in the model and report them in …
devin-ai-integration[bot] Sep 24, 2026
4830a91
docs(examples): state which recorded runs predate the relay edit
devin-ai-integration[bot] Sep 24, 2026
0234f4c
docs(examples): note the sweep's exit status in the analysis-results …
devin-ai-integration[bot] Sep 24, 2026
10c6936
fix(view): leave layout annotations and render members out of renderings
devin-ai-integration[bot] Sep 23, 2026
a24f053
fix(view): head a member drawn under its owner by its name below that…
devin-ai-integration[bot] Sep 23, 2026
109f8dc
feat(view): fit a stated box's label to it and draw symbol kinds as t…
devin-ai-integration[bot] Sep 23, 2026
09618b9
docs(view): describe the fitted labels, symbols, owner-relative heads…
devin-ai-integration[bot] Sep 23, 2026
102cce9
fix(view): draw an initial or final node with a synthesized name as t…
devin-ai-integration[bot] Sep 23, 2026
506eca9
fix(view): clip an edge at a stated junction's radius
devin-ai-integration[bot] Sep 23, 2026
d6cc2de
fix(view): head a member below its owner's drawn type, and write an e…
devin-ai-integration[bot] Sep 24, 2026
765bd18
feat(migrate): mark the names a migration makes up and draw those ele…
devin-ai-integration[bot] Sep 24, 2026
9a71206
feat(runtime): report the inputs an analysis run bound
devin-ai-integration[bot] Sep 24, 2026
ce313f0
fix(migrate): tell stereotypes apart by profile, clear holder-only do…
devin-ai-integration[bot] Sep 24, 2026
648d9d4
feat(analysis): generate analysis-run records into the model
devin-ai-integration[bot] Sep 24, 2026
280b975
Merge pull request #555 from Open-MBEE/feature/menu-lord-link
HuiJun Sep 24, 2026
6e6305a
feat(repl): record analysis runs into the model with %record
devin-ai-integration[bot] Sep 24, 2026
6d48a59
fix(migrate): let a diagram-type filter naming no type decide without…
devin-ai-integration[bot] Sep 24, 2026
55106d3
feat(export): emit normative feature chains in RDF/API-JSON
devin-ai-integration[bot] Sep 24, 2026
f414912
feat(cli): record analysis runs with -record-run and -record-into
devin-ai-integration[bot] Sep 24, 2026
e944f44
test(repl): query recorded runs by the features they carry
devin-ai-integration[bot] Sep 24, 2026
7b2b008
docs: document recording analysis runs
devin-ai-integration[bot] Sep 24, 2026
29d9d10
docs(examples): re-record the pilot-differential baseline for the new…
devin-ai-integration[bot] Sep 24, 2026
090f74e
chore(docs): re-record the examples digest in the pilot differential …
devin-ai-integration[bot] Sep 24, 2026
9ef590a
fix(repl): place records by the case's owner chain and rebuild on rol…
devin-ai-integration[bot] Sep 24, 2026
419a40d
fix(hygiene): assign the record package a layer and recount the bundl…
devin-ai-integration[bot] Sep 24, 2026
9aefe23
docs: correct the recorded-run examples and extension counts
devin-ai-integration[bot] Sep 24, 2026
8f9e3e8
docs: record into the queried package in the run-log example
devin-ai-integration[bot] Sep 24, 2026
f8276e4
chore(referee): re-record the pilot differential provenance
devin-ai-integration[bot] Sep 24, 2026
206e90f
fix(doc): bound the Mermaid configuration a chart is drawn under
devin-ai-integration[bot] Sep 24, 2026
29ef8f8
Merge remote-tracking branch 'origin/develop' into feature/docgen-fig…
devin-ai-integration[bot] Sep 24, 2026
c4c7c25
feat(view): keep words whole in a fitted head, shrinking before break…
devin-ai-integration[bot] Sep 24, 2026
f3434d7
fix(lower): let a parallel state own a metadata usage in its body
devin-ai-integration[bot] Sep 24, 2026
5f5a126
docs(changelog): note the parallel state's metadata member
devin-ai-integration[bot] Sep 24, 2026
d6a670b
docs(project): update the differential figures for the new example
devin-ai-integration[bot] Sep 24, 2026
f8ba2a0
feat(export): map qualified usages and head chain targets to the norm…
devin-ai-integration[bot] Sep 24, 2026
187762d
docs(skills): cover %record / -record-run in the REPL testing skill
devin-ai-integration[bot] Sep 24, 2026
1e81172
fix(migrate): read every diagram stream and match name filters on wri…
devin-ai-integration[bot] Sep 24, 2026
638d396
fix(analysis): settle unset members and keep unit companions collisio…
devin-ai-integration[bot] Sep 24, 2026
45340bb
fix(repl): split %record's into outside names and keep sweep errors u…
devin-ai-integration[bot] Sep 24, 2026
19e6d21
fix(cli): refuse misused run bounds and honour -id and -from on recor…
devin-ai-integration[bot] Sep 24, 2026
3e2e0b0
refactor(analysis): tighten the unit-companion comment
devin-ai-integration[bot] Sep 24, 2026
4b37fa1
fix(runtime): report an iteration output error on a MonteCarlo run
devin-ai-integration[bot] Sep 24, 2026
d0612e3
fix(analysis): settle member shapes across runs and fill record-numbe…
devin-ai-integration[bot] Sep 24, 2026
e60ef87
fix(repl): spell each recorded run in its own context and say why one…
devin-ai-integration[bot] Sep 24, 2026
2b43f3f
fix(cli): apply run bounds and flag refusals to recorded conversions
devin-ai-integration[bot] Sep 24, 2026
2b4262e
docs: note runs skipped from recording
devin-ai-integration[bot] Sep 24, 2026
3a9c5c0
fix(analysis): declare the unit companion when a Real member later ca…
devin-ai-integration[bot] Sep 24, 2026
ed03dc5
fix(export): judge chain segment spellings without the referrer's bor…
devin-ai-integration[bot] Sep 24, 2026
aa7299e
fix(migrate): keep distinct-module diagram references and match name …
devin-ai-integration[bot] Sep 24, 2026
65433c7
fix(cli): refuse -record-run with -compare-results
devin-ai-integration[bot] Sep 24, 2026
a2e76ab
fix(analysis): quote record names needing it and own each record defi…
devin-ai-integration[bot] Sep 24, 2026
624e348
fix(repl): name sibling cases' records from their owner and read the …
devin-ai-integration[bot] Sep 24, 2026
c5c0999
docs: record definitions carry the case and siblings are owner-named
devin-ai-integration[bot] Sep 24, 2026
cbba08f
refactor(repl): read a record definition's case through the notation'…
devin-ai-integration[bot] Sep 24, 2026
40e6478
fix(runtime): read a Monte Carlo run's outputs on demand, memoizing n…
devin-ai-integration[bot] Sep 24, 2026
4c6ce1e
fix(analysis): give a run's record its own kind
devin-ai-integration[bot] Sep 24, 2026
06606c0
fix(repl): record a sample's conclusion and say when nothing recorded
devin-ai-integration[bot] Sep 24, 2026
a32d4be
docs: record the Monte Carlo sample's conclusion
devin-ai-integration[bot] Sep 24, 2026
3130768
fix(migrate): refuse partial diagram collections and rejoin Union dou…
devin-ai-integration[bot] Sep 24, 2026
f5970ad
fix(runtime): capture a Monte Carlo run's outputs inside a probe
devin-ai-integration[bot] Sep 24, 2026
b704463
fix(analysis): let a record member declared ScalarValue settle to a c…
devin-ai-integration[bot] Sep 24, 2026
074d51a
fix(repl): adjudicate an iteration's unread outputs against the sample's
devin-ai-integration[bot] Sep 24, 2026
dafca08
fix(runtime): report an unassigned output by name in a typed error
devin-ai-integration[bot] Sep 24, 2026
e4d4976
fix(analysis): record what a verification run's body decided
devin-ai-integration[bot] Sep 24, 2026
1aea725
fix(repl): skip a run on its own failed outputs and count error repeats
devin-ai-integration[bot] Sep 24, 2026
d54c582
docs: what a verification case's record carries
devin-ai-integration[bot] Sep 24, 2026
747727b
docs(manual): state how sampled outputs and random draws are recorded
devin-ai-integration[bot] Sep 24, 2026
9c40584
fix(export): refuse FeatureChaining links stating no chainingFeature;…
devin-ai-integration[bot] Sep 24, 2026
fe9c3d6
fix(analysis): record an inout as a member and an In companion
devin-ai-integration[bot] Sep 24, 2026
c6056fd
fix(repl): merge a record into the file holding its target package
devin-ai-integration[bot] Sep 24, 2026
c5da370
docs: the In companion an inout parameter records
devin-ai-integration[bot] Sep 24, 2026
b049544
fix(export): read chains with repeated links from their FeatureChaini…
devin-ai-integration[bot] Sep 24, 2026
e8238ba
feat(view): head a stated box above the stated boxes it holds, and na…
devin-ai-integration[bot] Sep 24, 2026
b6adcd6
fix(analysis): keep enum literal identity and settle Integer and Real…
devin-ai-integration[bot] Sep 24, 2026
1a63423
fix(cli): refuse -record-into given without a package name
devin-ai-integration[bot] Sep 24, 2026
85844fa
docs: numeric settlement and enum literals in recorded runs
devin-ai-integration[bot] Sep 24, 2026
e2c3c6c
fix(analysis): keep a quantity member's unit when a plain number foll…
devin-ai-integration[bot] Sep 24, 2026
d69f37c
fix(analysis): settle a plain number beside a quantity to the quantit…
devin-ai-integration[bot] Sep 24, 2026
d9fd78b
fix(cli): record the run's session flags in the provenance command
devin-ai-integration[bot] Sep 24, 2026
ad47633
fix(migrate): show only what a drawn stream displays; count Mermaid e…
devin-ai-integration[bot] Sep 24, 2026
2df5a24
fix(export): keep perform on state body members owned by a FeatureMem…
devin-ai-integration[bot] Sep 24, 2026
e7a340a
fix(analysis): settle an inout's two sides before declaring unit comp…
devin-ai-integration[bot] Sep 24, 2026
c621a37
fix(docpdf): name Times, Arial and Courier ahead of the generic print…
devin-ai-integration[bot] Sep 24, 2026
18ab828
feat(docrender): bundle nasa, ieee and acm themes with print companions
devin-ai-integration[bot] Sep 24, 2026
21d90dd
docs(doc): list the convention themes and the PDF theme cascade
devin-ai-integration[bot] Sep 24, 2026
610e8ec
test(doc): pin theme discovery, the print cascade and the PDF faces
devin-ai-integration[bot] Sep 24, 2026
adb1143
Merge pull request #553 from Open-MBEE/feature/docgen-figures
HuiJun Sep 24, 2026
a40dbbf
Merge pull request #559 from Open-MBEE/feature/normative-feature-chai…
HuiJun Sep 24, 2026
5dd5a91
Merge pull request #557 from Open-MBEE/feature/record-analysis-runs
HuiJun Sep 24, 2026
6c22de9
Merge remote-tracking branch 'origin/develop' into feature/document-c…
devin-ai-integration[bot] Sep 24, 2026
e8b389e
chore: merge develop into docs/analysis-results-demo
devin-ai-integration[bot] Sep 24, 2026
3ceb8ad
Merge remote-tracking branch 'origin/develop' into devin/update-skill…
devin-ai-integration[bot] Sep 24, 2026
79a968f
Merge remote-tracking branch 'origin/develop' into feature/document-c…
devin-ai-integration[bot] Sep 24, 2026
209819c
docs(examples): build the analysis-results demo on the AnalysisRecord…
devin-ai-integration[bot] Sep 24, 2026
e2f2384
docs(project): re-record the differential baseline for the library-ba…
devin-ai-integration[bot] Sep 24, 2026
9166da2
feat(view): leave a positioned drawing's unplaced nodes undrawn, or s…
devin-ai-integration[bot] Sep 24, 2026
db4e29c
Merge pull request #558 from Open-MBEE/devin/update-skills-1790220150
HuiJun Sep 24, 2026
8531a54
docs(examples): root the analysis-results report at the Records packa…
devin-ai-integration[bot] Sep 24, 2026
4b30041
docs(project): re-record the differential baseline for the Records-ro…
devin-ai-integration[bot] Sep 24, 2026
374dbfd
Merge remote-tracking branch 'origin/develop' into feature/positioned…
devin-ai-integration[bot] Sep 24, 2026
cbd4865
fix(symbols): memoize ShortNamed per index generation
devin-ai-integration[bot] Sep 24, 2026
db455d5
Merge remote-tracking branch 'origin/develop' into feature/positioned…
devin-ai-integration[bot] Sep 24, 2026
21d5a22
test(symbols): treat the short-named cache as unobservable in snapsho…
devin-ai-integration[bot] Sep 24, 2026
e98c1cd
test(docpdf): read the tall figure's first node back by its kind head
devin-ai-integration[bot] Sep 24, 2026
b0a3916
fix(view): give a stated box's whole width and height to its fitted l…
devin-ai-integration[bot] Sep 24, 2026
914afc2
fix(view,migrate): keep a typed port's type outside its symbol and ma…
devin-ai-integration[bot] Sep 24, 2026
a20609b
Merge remote-tracking branch 'origin/feature/positioned-label-fitting…
devin-ai-integration[bot] Sep 24, 2026
9a5e965
fix(docrender): set acm tables at 9pt and keep nasa front matter roma…
devin-ai-integration[bot] Sep 24, 2026
19965dd
fix(docrender): count nasa front matter on its own counter and set ca…
devin-ai-integration[bot] Sep 24, 2026
a5072ad
Merge pull request #560 from Open-MBEE/feature/positioned-label-fitting
HuiJun Sep 24, 2026
a10b424
Merge pull request #561 from Open-MBEE/feature/document-convention-th…
HuiJun Sep 24, 2026
5d6e19a
Merge pull request #562 from Open-MBEE/fix/memoize-short-named
HuiJun Sep 24, 2026
8edb069
chore: merge develop into docs/analysis-results-demo
devin-ai-integration[bot] Sep 24, 2026
d693342
docs(project): re-record the differential baseline after merging develop
devin-ai-integration[bot] Sep 24, 2026
6b7880d
fix(view): label transition triggers by the name their signal or oper…
devin-ai-integration[bot] Sep 24, 2026
eb00f5a
docs(views): trigger labels head their signal by its end name
devin-ai-integration[bot] Sep 24, 2026
2fc7a42
fix(doc): build relationship edge tables once per model, uncharged to…
devin-ai-integration[bot] Sep 24, 2026
5db73a5
fix(view): take a trigger's end name from its last segment; keep () o…
devin-ai-integration[bot] Sep 24, 2026
d584572
fix(doc): rebuild relationship edge tables when the index they were b…
devin-ai-integration[bot] Sep 24, 2026
8ceaa1b
Merge pull request #563 from Open-MBEE/fix/trigger-labels-end-names
HuiJun Sep 24, 2026
ee2e18e
Merge pull request #556 from Open-MBEE/docs/analysis-results-demo
HuiJun Sep 24, 2026
b348f5d
Merge pull request #565 from Open-MBEE/fix/relationship-tables-uncharged
HuiJun Sep 24, 2026
8231c44
fix(check): read the ~ operator sites the parser records instead of w…
devin-ai-integration[bot] Sep 24, 2026
f68b52e
fix(parser): record nested ~ operators in source order
devin-ai-integration[bot] Sep 24, 2026
ab95f7d
test(parser): exercise a checkpoint restore over recorded ~ operators
devin-ai-integration[bot] Sep 24, 2026
1d02c68
Merge pull request #566 from Open-MBEE/fix/undefined-operator-walk
HuiJun Sep 24, 2026
b62fa68
docs(changelog): note the cold references cost of per-document invali…
devin-ai-integration[bot] Sep 23, 2026
3b054bf
chore(release): fold the changelog for 0.9.0 and set the client version
devin-ai-integration[bot] Sep 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
18 changes: 9 additions & 9 deletions .agents/skills/flexo-interop/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@ description: How to bring up a real Flexo MMS stack (Fuseki + Layer 1 + the SysM

# Measuring this project's RDF against a running Flexo MMS

`internal/core/export`'s RDF path writes the SysML v2 vocabulary the Flexo MMS SysML v2 service
`internal/translate/export`'s RDF path writes the SysML v2 vocabulary the Flexo MMS SysML v2 service
reads. Matching that service's `Namespaces.kt` is not evidence: a predicate can be spelled
correctly and still be dropped, unreadable, or invisible to the read path. The only evidence is a
round trip through a running stack, which is what `internal/interop/flexo` performs and
`internal/interop/flexo/testdata/interop_expected.txt` records.
round trip through a running stack, which is what `internal/translate/interop/flexo` performs and
`internal/translate/interop/flexo/testdata/interop_expected.txt` records.

The gate is **opt-in and skips by default** (`FLEXO_INTEROP`), exactly like the corpus gates in
`internal/core/model/corpus_gate_test.go`. `go test ./...` on a machine without Docker stays green,
`tests/corpus/corpus_gate_test.go`. `go test ./...` on a machine without Docker stays green,
and a skipped run proves nothing — the skip says so on stderr.

## Bring the stack up
Expand Down Expand Up @@ -53,7 +53,7 @@ Never commit a token or paste one into a report. The harness reads it from the e

```bash
FLEXO_INTEROP=1 FLEXO_INTEROP_TOKEN="$FLEXO_INTEROP_TOKEN" \
go test -count=1 ./internal/interop/flexo -run TestFlexoInterop
go test -count=1 ./internal/translate/interop/flexo -run TestFlexoInterop
```

About 10–20 s against a local stack. Override `FLEXO_LAYER1_URL`, `FLEXO_SYSMLV2_URL` or
Expand All @@ -67,12 +67,12 @@ interoperability statement:

```bash
FLEXO_INTEROP=1 FLEXO_INTEROP_TOKEN="$FLEXO_INTEROP_TOKEN" \
go test -count=1 ./internal/interop/flexo -run TestFlexoInterop -update-flexo
git diff internal/interop/flexo/testdata/interop_expected.txt
go test -count=1 ./internal/translate/interop/flexo -run TestFlexoInterop -update-flexo
git diff internal/translate/interop/flexo/testdata/interop_expected.txt
```

Everything else in the package (report determinism, the fixtures' coverage of the known gaps) runs
without a stack, so `go test ./internal/interop/flexo` is worth running on any change to it.
without a stack, so `go test ./internal/translate/interop/flexo` is worth running on any change to it.

## What a run does, and why each side exists

Expand Down Expand Up @@ -166,6 +166,6 @@ are not known up front:

## Scope

The harness measures; it does not fix. Do not change `internal/core/export` or `internal/core/rdf`
The harness measures; it does not fix. Do not change `internal/translate/export` or `internal/translate/rdf`
encoding behavior to move a number in the expectation file, and never replace the stack with a mock —
a mocked Flexo measures our own assumptions, which is the one thing this gate exists to avoid.
124 changes: 106 additions & 18 deletions .agents/skills/testing-doc-counts/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,23 +1,55 @@
---
name: testing-doc-counts
description: How to end-to-end test the generated documentation figures (cmd/doc-counts + internal/doccounts + `make docs-counts`) on Linux — proving `-check` is a real gate, that the block consumers cannot drift, that marker mutations fail loudly, and that no measured number moved.
description: How to end-to-end test the generated documentation figures (tools/cmd/doc-counts + tools/census/doccounts + `make docs-counts`, and the build-time suite figures of scripts/mkdocs_suite_figures.py) on Linux — proving `-check` is a real gate, that the block consumers cannot drift, that marker mutations fail loudly, that the site renders the tree's figures, and that no measured number moved.
---

# Testing the generated documentation figures (`cmd/doc-counts`)
# Testing the generated documentation figures (`tools/cmd/doc-counts`)

`cmd/doc-counts` regenerates two kinds of derived documentation from the committed baselines:
`tools/cmd/doc-counts` regenerates three kinds of derived documentation:

1. single-copy baseline lines in `README.md` (`**Reference differential:**`, `**Rejection oracle:**`);
1. single-copy baseline lines in `README.md` (`**Reference differential:**`, `**Rejection oracle:**`),
from the committed baselines;
2. the HTML-comment-delimited named block `<!-- doc-counts:begin refereed-figures -->` …
`<!-- doc-counts:end refereed-figures -->`, rendered from **one** template in
`internal/doccounts/doccounts.go` into **two** consumers (`README.md` and
`tools/census/doccounts/doccounts.go` into **two** consumers (`README.md` and
`docs/internals/architecture.md`), differing only by `Block.LinkPrefix`
(`docs/project/` vs `../project/`).
(`docs/project/` vs `../project/`);
3. the README's `**Behavioral execution:**` figure, the **inline** block
`<!-- doc-counts:begin conformance-passing -->every conformance case passing<!-- doc-counts:end conformance-passing -->`
— the one suite figure still committed, because it moves only with `known_failures.txt`.

The rest of the test-suite figures are **site blocks** (`doccounts.SiteBlocks()`, named in
`siteSuiteBlocks` in `tools/census/doccounts/suite_blocks.go`): the compliance map's `**Test Coverage:**`
inventory (`inventory-conformance`, `-robustness`, `-runtime-tests`, `-golden-asts`, `-traces`,
`-negatives`, `-grpc`, `-tests`) and the LSP `**Measured coverage:**` line (`lsp-tests`). In git each
holds a sentence naming what is counted and **no digit**; `go run -C tools ./cmd/doc-counts -check` refuses
one that states a figure (`the block named "inventory-robustness" states a figure`). The figures
are rendered when the site builds: `go run -C tools ./cmd/doc-counts -site-blocks` prints
`{"docs/project/spec-compliance.md": {"inventory-robustness": "470 runtime robustness cases (…)", …}}`
and `scripts/mkdocs_suite_figures.py` (an `on_pre_build` + `on_page_markdown` hook in
`mkdocs.yml`) splices the text into the blocks, dropping the markers. Their inputs are the
**tree**, read by `doccounts.ReadSuiteCounts` the way the gates enumerate them: `tests/fixtures`
lists the conformance cases (the same package `TestExecutionConformance` and the gRPC conformance
gate iterate), the parse and trace goldens are stat'ed against the case that owns them, and the
robustness, negative and `Test`-function figures are counted from the `_test.go` files with
`go/ast` (first-level `t.Run` calls across every `TestRuntimeRobustness*` / `TestGRPCRobustness*`
function, multiplied out over the table literal a `range` walks, read in statement order and
lexical scope, so a table rebound after the loop or shadowed by a `:=` in an inner block, branch or
clause does not leak into it). The test and subtest total of a run is **not** generated — only a
run can state it, so the prose does not quote one.

A third consumer, `<!-- doc-counts:begin analysis-libraries -->` in `docs/project/spec-compliance.md`,
renders the per-library table from `docs/project/analysis-library-census.json`, which
`TestAnalysisLibraryCensus` (`internal/exec/runtime/library_census_test.go`) writes under
`-update-library-census` and otherwise asserts. Its inputs are `doccounts.ReadFigures`
(the refereed baselines plus the census); the same stale/marker/read-only checks below apply to it,
and a census JSON mutated by hand (a declaration dropped from `evaluated`) must fail both `-check`
(`has 0 verdicts, want 1`) and the runtime test.

The compliance map's own row census (`The map below tracks N semantic rules: …`) is **not** committed
anywhere: `scripts/mkdocs_census.py` counts it from the rows and fills the
`<!-- doc-counts:begin census -->` block in `docs/project/spec-compliance.md` while the site builds
(`make docs`). `doc-counts` and the `cmd/pilot-diff` guard only refuse a `🚧` row. Test the hook with
(`make docs`). `doc-counts` and the `tools/referee/diff` guard only refuse a `🚧` row. Test the hook with
`python3 scripts/mkdocs_census-test.py`, and prove it live by grepping the built
`site/project/spec-compliance/index.html` for `semantic rules:` after adding a row.

Expand All @@ -41,12 +73,19 @@ to a possibly-unpublished record must use. `scripts/check-doc-links.py` only wal
so it never sees `overrides/*.html`; the hook is the only guard, and both of its warnings
(`which no page publishes`, `which does not exist`) fail `--strict`.

Inputs are the three committed baselines
Inputs to the refereed figures are the three committed baselines
`docs/project/pilot-{differential,xpect,rejection}-baseline.json` (`doccounts.ReadRefereedCounts`);
`docs/project/spec-compliance.md` is read only to refuse a `🚧` row.
`docs/project/spec-compliance.md` is read to refuse a `🚧` row and, since it carries the inventory
blocks, is also a consumer.

`make docs-counts` = generate → `go run ./cmd/doc-counts -check` → `go test -count=1 ./cmd/pilot-diff
./cmd/pilot-reject ./cmd/doc-counts`.
`make docs-counts` = generate → `go run -C tools ./cmd/doc-counts -check` → `go run -C tools ./cmd/validation-census
-check` → `go test -C tools -count=1 ./census/doccounts ./census/validation` →
`go test -C tools -count=1 ./referee/diff ./referee/reject`.

Adding a test or fixture anywhere in the module moves a site figure and **nothing committed**:
`-check` stays `already current`, `-site-blocks` and the built site change. Only a baseline, the
library census or `known_failures.txt` moving makes `TestCheckCommittedTreeIsCurrent` fail until
`make docs-counts` runs. That is by design — CI runs `-check` and builds the site with `--strict`.

## Never test in a checkout someone else is using

Expand All @@ -71,7 +110,7 @@ Copy **all** `build/pilot-*` dirs together: the validator launchers resolve the
- **Idempotence:** `make docs-counts` twice; both must print `doc-counts: already current` for the
generate *and* the `-check` step, and `git status --short` must stay empty.
- **`-check` is a gate, not decoration:** perturb one number *inside* the block in one consumer.
`go run ./cmd/doc-counts -check` must exit **1**, print `doc-counts: <that path> is stale` plus a
`go run -C tools ./cmd/doc-counts -check` must exit **1**, print `doc-counts: <that path> is stale` plus a
`--- <path> (current) / +++ <path> (generated)` diff with `@@ line N @@` hunks, name **only** that
file, and leave the file's `sha256sum` unchanged. Then the plain generator must restore it
byte-identically to the committed hash.
Expand All @@ -94,7 +133,53 @@ Copy **all** `build/pilot-*` dirs together: the validator launchers resolve the
the whole block. Each must make *both* the generator and `-check` exit 1 with
`named block "refereed-figures" is missing or unterminated` or
`duplicate "<!-- doc-counts:begin refereed-figures -->" marker`, and `wc -c` on the file must be
unchanged (no truncation, no `already current`).
unchanged (no truncation, no `already current`). For an inline block, also: put the end marker
before the begin marker on the line (`ends before it begins`), repeat the pair on one line or
add a second copy on a line of its own (`duplicate markers of the block named`), and drop the
end marker (`missing or unterminated`).
- **Tree propagation goes to the site, not to git:** drop a `state_probe.expected.json` into
`internal/exec/runtime/testdata/conformance/`, or a
`robustness_zz_probe_test.go` with a two-subtest `TestRuntimeRobustnessProbe` into
`internal/exec/runtime/`, or a `TestSomething` into any `_test.go`: `-check` must still print
`already current` and `git status --short` must show only the probe, while `-site-blocks`
moves the matching figure (`state×228` → `state×229`, `470 runtime robustness cases` → `472`,
the `Test`-function figure by one) and `make docs` renders the new number into
`site/project/spec-compliance/index.html`. `go test -run TestRuntimeRobustnessProbe -v` must run
both subtests — the counter follows Go discovery, not the other way round. List a real case in
`known_failures.txt`; now the **committed** README block goes stale (`every conformance case
passing` → `1 listed in known_failures.txt`) and `-check` must name `README.md`. Remove the
probes afterwards (`git status --short` must be empty again).
- **A typed figure in a site block is refused:** put a digit inside any `inventory-*` or
`lsp-tests` block; `-check` must exit 1 naming the block and leave the file unchanged. Break a
site block's marker (drop the end marker, duplicate the pair): `-check` fails, and `make docs`
must abort under `--strict` with the hook's warning rather than publish the placeholder
sentence. Hide `go` from `PATH`: `make docs` must abort with `go: not found; the test-suite
figures need the Go toolchain`, and `python3 scripts/mkdocs_suite_figures-test.py` must fail
its real-tree case (not skip it).
- **The site shows the tree's figures:** after `make docs`, grep
`site/project/spec-compliance/index.html` for `runtime robustness cases` and
`functions in <code>internal/frontend/lsp`; each must carry a number, no `doc-counts:begin inventory-`
or `lsp-tests` marker may remain (only the committed `analysis-libraries` markers do), and
none of the placeholder sentences (`the runtime robustness cases`) may be visible. Open the
served page in a browser to confirm the inventory reads naturally with the numbers spliced
into the sentences.
- **The counters refuse what they cannot count:** a `.trace.golden` owned by no case, a
`<case>.typo.trace.golden` under no sweep policy, a `<case>.declared.trace.golden` of a case
with no `outcomes` (or no default golden), a `.sysml` under `testdata/parse/` with no `.golden`,
a `known_failures.txt` entry naming no case, a `for i := 0; i < n; i++ { t.Run(...) }` loop,
a `range` over a table the function `append`s to or rebinds under a condition before the loop, or
an `if cond { t.Run(...) }` in `TestRuntimeRobustness` must each make the generator and `-check`
exit 1 naming the file, rather than print a smaller (or larger) number. A `range` or `if` that
runs no subtest is passed over, and so are the goldens of a case `known_failures.txt` lists,
since `TestExecutionTrace` skips the case.
- **The figures are the gates' figures** (read them from `-site-blocks`): `go test -count=1 -v
-run 'TestExecutionConformance$' ./internal/exec/runtime | grep -cE '^=== RUN TestExecutionConformance/[^/]+$'`
must equal the conformance figure; the same shape with `TestRuntimeRobustness` and
`TestGRPCRobustness` (in `./internal/frontend/grpc`) — unanchored, summing the first-level `=== RUN`
lines of every function the prefix matches — `TestGolden$` and `Negative` (in
`./tests/parser` and `./internal/syntax/parser`, summing per function) must equal theirs; and
`go test -list '.*' ./... | grep -c '^Test'` must equal the `Test`-function figure. Test names
carry digits (`TestF62F63Negative`), so match `[^/ ]+`, not `[A-Za-z_]+`.
- **Every landing link resolves on the built site:** grep the `href`s out of
`/tmp/site/index.html` and check each one — a site-relative target must exist under
`/tmp/site`, a repository target must exist under `docs/` — then click them in a browser
Expand All @@ -113,10 +198,12 @@ Copy **all** `build/pilot-*` dirs together: the validator launchers resolve the
`git show main:README.md | grep -o '[0-9][0-9]*'` vs the same on HEAD, `diff` must be empty (same
for `docs/internals/architecture.md`), and `git diff main -- 'docs/project/pilot-*-baseline.json'`
must be empty. This is the cheapest proof a "generate it instead of hand-maintaining it" refactor
restated exactly what was there.
restated exactly what was there. The site figures are not in either file, so compare them
against the gates instead (previous bullet): a figure `-site-blocks` prints that the matching
`go test -v` enumeration does not reproduce is a counting bug, not a fixture landing.
- **Live oracle reproduction is a separate claim** from doc↔baseline consistency: the guards read
only committed JSON. Run all three under a fresh cache
(`XDG_CACHE_HOME=$(mktemp -d) go run ./cmd/pilot-{xpect,reject,diff} -out /tmp/oN`) and `cmp`
(`XDG_CACHE_HOME=$(mktemp -d) go run -C tools ./cmd/pilot-{xpect,reject,diff} -out /tmp/oN`) and `cmp`
each against its committed baseline.

## Gotchas
Expand All @@ -133,9 +220,10 @@ Copy **all** `build/pilot-*` dirs together: the validator launchers resolve the

## Recording

The `cmd/doc-counts` checks are shell-only; no GUI, so no recording is needed. If the change
touches `overrides/home.html`, the landing page itself must be verified in a browser (band
renders, links navigate, light/dark, narrow viewport) — record that part. Serve the build
The `tools/cmd/doc-counts` checks are shell-only; no GUI, so no recording is needed. If the change
touches `overrides/home.html` or the site blocks, the built page must be verified in a browser
(band renders, links navigate, light/dark, narrow viewport; the compliance map's inventory shows
numbers, not placeholder sentences) — record that part. Serve the build
with `python3 -m http.server 8899 -d /tmp/site`, maximize Chrome with
`wmctrl -r :ACTIVE: -b add,maximized_vert,maximized_horz`, and force a narrow viewport with
`xdotool getactivewindow windowsize 620 1100` plus a couple of `ctrl+plus` page zooms
Expand Down
Loading
Loading