v2.8.0
[2.8.0] - 2026-06-02
Added
- Session-scoped OSI model endpoints. Two new endpoints bridge the model store with Open Semantic Interchange (OSI), distinct from the existing stateless
/v1/convert/*transforms:POST /v1/sessions/{id}/models/from-osiaccepts OSI YAML (osi_yaml), converts it to OBML, and loads the result into the session's model store. Returns the standard model summary plusconversion_warningsand the advisory OSIinput_validation.GET /v1/sessions/{id}/models/{mid}/osiexports a loaded model from the store as OSI YAML, with optional?model_name=,?model_description=, and?ai_instructions=overrides.
ModelStore.get_raw(): public accessor for a model's raw OBML dict, preferring the faithful copy captured at load time and returning a deep copy so callers cannot mutate internal state.
Fixed
- OSI converter not packaged for non-editable wheel installs. The converter (repo-root
osi-obml/) was only discoverable via repo-root or/apppaths, so a PyPI wheel or Docker install raisedModuleNotFoundErrorfrom the/convertand new OSI endpoints. The converter module and its OSI schema are now bundled into the wheel as package data underorionbelt/_osi_obml/(hatchforce-include), and the lookup searches that location first. Verified on a clean wheel install. - Mermaid ER diagram clipped every label by one character (
stringtostrin,SuppliertoSupplie). Mermaid pre-measures ER column and edge-label widths with the themefontFamily, but the browser painted text with a wider font the host CSS cascaded in. Pinned a local-only font stack (Helvetica, Arial, sans-serif) in the diagram's%%{init}%%themeVariables.fontFamilyand forced the same family on the rendered ER text, so measure-time and paint-time use the identical font.
Full Changelog: v2.7.10...v2.8.0