Summary
Feasibility spike for a one-way BERT JSON → SysML v2 textual (.sysml) export of the structural slice. The structural spine maps cleanly and the export is weekend-scale; the fields that don't map are exactly BERT's systems-science commitments, and that lossy boundary is itself the deliverable (a concrete K≅2 "one lens among many" artifact).
Scope guard (important): this is a one-way structural export to textual notation, explicitly NOT SysML v2 conformance, round-trip, or the Systems Modeling API JSON. Full conformance is a multi-year standards-chasing treadmill and is out of scope. The win is a credential + a forcing function, not live tool interop (the SysML v2 consuming ecosystem is still ~2027–2028 per DoD/CIMdata).
Mapping (verified against assets/models/examples/llm.json)
| BERT (actual field) |
SysML v2 |
Clean? |
System (S0 / C0.x) |
part def + part |
✅ |
Boundary (B0) |
the part enclosure (implicit) |
✅ |
Interface Import/Export |
port (in/out) |
✅ |
interface.protocol |
port type / attribute |
✅ |
Interaction type=Flow |
flow connection + typed item |
✅ |
substance.type Energy/Material/Message |
item def |
✅ |
complexity: Multiset(N) |
part[N] multiplicity |
✅ |
Source/Sink ExternalEntity |
parts in enclosing context |
✅ |
interface processors (parent_interface != null) |
fold into the port (not real components) |
✅ |
complexity.adaptable/evolveable |
— |
⚠️ metadata |
usability Resource/Product/Waste/Disruption |
— |
⚠️ metadata |
boundary.porosity, perceptive_fuzziness |
— |
⚠️ metadata |
member_autonomy, time_constant |
— |
⚠️ metadata |
archetype + agent (kind/agency_capacity/primitives) |
— |
⚠️ metadata/profile |
Interaction type=Force (influence-without-transfer) |
— (item flows move things) |
❌ real gap |
Spike
- Emitter:
tools/bert-sysml/bert2sysml.py (~150 lines Python — proof of shape; a production emitter would be Rust beside tools/bert-typedb/).
- Sample output:
tools/bert-sysml/llm.sysml.example (49 lines from llm.json).
- Architecture is a tree-walk over the flat
systems[] + interactions[] list — the same shape as the bert-typedb transpiler.
The emitter does not silently drop the unrepresentable fields. It emits them as a // [BERT-only] ledger inline and in a trailing block, so every export self-documents its lossy boundary.
Why the lossy column matters
The ⚠️/❌ rows — Force, usability/conservation, archetype, member_autonomy, time_constant, boundary porosity — are precisely the Mobus/systems-science layer that distinguishes BERT from MBSE tooling. The auto-generated [BERT-only] ledger is the K≅2 argument made concrete and reproducible: SysML's part/port/flow is one lens; here is what that lens structurally cannot see, produced automatically from any model rather than asserted.
Open / next
Theory thread (tracked in strategy, not here): is KerML's kernel the same invariant K≅2 latched onto, seen from the MBSE side? See strategy/bert-world-models-positioning.md.
Summary
Feasibility spike for a one-way BERT JSON → SysML v2 textual (
.sysml) export of the structural slice. The structural spine maps cleanly and the export is weekend-scale; the fields that don't map are exactly BERT's systems-science commitments, and that lossy boundary is itself the deliverable (a concrete K≅2 "one lens among many" artifact).Scope guard (important): this is a one-way structural export to textual notation, explicitly NOT SysML v2 conformance, round-trip, or the Systems Modeling API JSON. Full conformance is a multi-year standards-chasing treadmill and is out of scope. The win is a credential + a forcing function, not live tool interop (the SysML v2 consuming ecosystem is still ~2027–2028 per DoD/CIMdata).
Mapping (verified against
assets/models/examples/llm.json)System(S0 / C0.x)part def+partBoundary(B0)InterfaceImport/Exportport(in/out)interface.protocolInteractiontype=Flowflowconnection + typed itemsubstance.typeEnergy/Material/Messageitem defcomplexity: Multiset(N)part[N]multiplicityExternalEntityparent_interface != null)complexity.adaptable/evolveableusabilityResource/Product/Waste/Disruptionboundary.porosity,perceptive_fuzzinessmember_autonomy,time_constantarchetype+agent(kind/agency_capacity/primitives)Interactiontype=Force(influence-without-transfer)Spike
tools/bert-sysml/bert2sysml.py(~150 lines Python — proof of shape; a production emitter would be Rust besidetools/bert-typedb/).tools/bert-sysml/llm.sysml.example(49 lines fromllm.json).systems[]+interactions[]list — the same shape as the bert-typedb transpiler.The emitter does not silently drop the unrepresentable fields. It emits them as a
// [BERT-only]ledger inline and in a trailing block, so every export self-documents its lossy boundary.Why the lossy column matters
The⚠️ /❌ rows — Force, usability/conservation, archetype, member_autonomy, time_constant, boundary porosity — are precisely the Mobus/systems-science layer that distinguishes BERT from MBSE tooling. The auto-generated
[BERT-only]ledger is the K≅2 argument made concrete and reproducible: SysML's part/port/flow is one lens; here is what that lens structurally cannot see, produced automatically from any model rather than asserted.Open / next
tools/(mirrors bert-typedb).relationship-dyad.jsonto exercise the Agent-model ledger and against aForce/Multisetmodel..sysmlagainst a real parser (e.g. paste into a local SysON instance) before claiming syntactic validity.Theory thread (tracked in strategy, not here): is KerML's kernel the same invariant K≅2 latched onto, seen from the MBSE side? See
strategy/bert-world-models-positioning.md.