Skip to content

v0.1.1: Fix Release

Choose a tag to compare

@HuiJun HuiJun released this 19 Aug 17:50
e81da04

A fix release. Every change corrects something 0.1.0 got wrong about a valid model, so a model
0.1.0 rejected or misread may analyze differently here. Nothing was renamed and no interface
changed.

Install: go install github.com/Open-MBEE/OpenSysML/cmd/sysml@v0.1.1, or take a platform archive
below. The Python client opensysml is released separately.

The OMG training corpus reports no errors

  • Every definition body inherits the features of the library definition its kind implies. Only
    behavior definitions had an implicit base, so snapshot sale = start; inside a part def
    reported unresolved reference: start even though Items::Item declares start and done and
    Parts::Part redefines both. Two corpus files previously recorded as "bugs in the OMG files" —
    Time Slice and Snapshot Example and Individuals and Time Slices — were never buggy; the
    corpus baseline now lists no files at 100/100 clean.
  • A member that reuses an inherited feature's name is now reported instead of shadowing
    silently: part def C { part start; } conflicts with Parts::Part::start. Redefine it to keep
    the name — part start :>> Parts::Part::start;.
  • A qualified redefinition of an inherited library feature is accepted.
    snapshot start :>> Parts::Part::start; was rejected as "not an inherited member" when the
    supertype came back from the index cache. Redefining a feature the owner does not inherit is
    still reported.
  • A definition may specialize a definition of a comparable kind. individual item def Alice :> Person was refused because Person is a part def; specialization now follows the definition
    taxonomy. Disjoint kinds — a part definition and an attribute definition — are still refused.
  • A transition may leave the entry action of the state that declares it. entry action begin { } transition begin then off; reported the action as "not a state or pseudostate"; it now
    designates the machine's initial state and executes as such, and is rendered in a view that
    exposes it. Only that bare completion shape designates a start — a triggered or guarded
    transition out of an entry action, a transition into one, and a name reaching another state's
    entry action or a junction are reported rather than accepted with the trigger, guard or effect
    dropped.
  • A metadata usage ends at its own ; or body. @M part def Car; was read as an annotation
    plus an undiagnosed declaration; #M part def Car; is the prefix spelling. A metadata usage
    member also names a type, so @Securty; reports an unresolved reference instead of going
    unchecked, and @M; now parses in a namespace, a body and a state body.
  • A value part accepts every operator the grammar allows= expr, := expr,
    default expr, default = expr, default := expr — wherever a usage, parameter, result or
    subject binds a value.
  • The REPL prints a syntax warning once, not once per deferred analysis.

A rendering read at a terminal

  • sysml -render writes the text form at a terminal and the machine-readable form of the kind
    rendered — Mermaid for a diagram, Markdown for a table — into a file or a pipe.
    sysml m.sysml -render Views::table showed a Markdown table on screen. > table.md, | tool,
    -o table.md and -render-form are unchanged.
  • The text form is ASCII. The rendering header and connection edges used an em dash, which an
    ASCII-only terminal showed as a replacement character.
  • A text table is written to fit the terminal, wrapping an over-wide cell rather than
    truncating it or overflowing the window, and narrowing no column below 8 characters. A table
    written to a file or a pipe keeps every column as wide as its widest cell, so a saved artifact
    does not depend on the window it came from.

RDF conversion (experimental)

RDF stays experimental: expressions are still carried as source text, ownership is collapsed rather
than materialized as membership elements, and no round trip against a triplestore has been run yet.
Two changes land here.

  • Element IRIs now carry a reversible encoded id instead of the raw qualified name.
    Demo::Vehicle is written as urn:sysmlv2:element:Demo__Vehicle: :: becomes __, _ itself
    escapes to _5f, and any other byte outside [A-Za-z0-9-] becomes _ plus two hex digits, so
    the id is unique, reversible and inside the [a-zA-Z0-9_-]+ character set that a SysML v2 API
    service requires of an element id. Element identity is read from the sysml:qualifiedName
    literal rather than reconstructed from the IRI, so a .ttl written by 0.1.0 still reads back —
    but a graph re-exported from 0.1.1 has different subject IRIs, and anything matching those IRIs
    by string needs updating.
  • A reference to an element the graph does not describe is reported with a typed diagnostic
    instead of crashing the converter.
  • A metadata usage member is refused with a typed diagnostic rather than written as an
    annotation on a different element.

Documentation and internal quality gates

  • docs/ is published as a documentation site built with MkDocs, with the build run in strict
    mode in CI so a broken link or a missing page fails the check rather than shipping.
  • The generated SysML OWL ontology table is checked into the tree, with a domain/range gate
    over the exported graphs, derived from the Open-MBEE SysML v2 RDF ontology's 411 property
    declarations. It ships with a committed inventory of the graph shapes that do not yet conform,
    so the remaining work is recorded rather than hidden.
  • Static analysis runs on every build through SonarCloud, scoped to hand-written source with
    coverage wired in. The one vulnerability it reported is fixed: the ontology table generator no
    longer resolves git through PATH, reading the checkout's Git metadata directly instead
    (loose refs, packed-refs, detached HEAD, worktrees, and SHA-1 or SHA-256 object ids). The
    generated table is byte-identical, so no recorded commit id changed.