Version 7.1.0

Bug fix and quality-of-life release: resolves 13 issues across BESSER, the Web Modeling Editor, and the Modeling Agent, with improvements to validation, deployment, GitHub sync, and the AI-assisted modeling experience.

Highlights

  • Deserialization fix: Pickle roundtrip for models with enumerations no longer crashes (#490).

  • SQLAlchemy reserved keyword handling: Class names like List, Table, Column no longer collide with SQLAlchemy imports (#489, PR #491).

  • Agent validation at build time: State/intent name collisions are caught early, preventing Render deployment crashes (WME #101).

  • GitHub sync improvements: B-UML models stored alongside JSON, filename tracks project renames, cross-tab sync (WME #99, WME #100, WME #93).

  • Vibe modeling agent fixes: Object name duplication, class rename artifacts, and deletion failures resolved (WME #95, WME #96, WME #98).

  • Validation improvements: Real error messages shown instead of generic placeholders, multiplicity and enum checks added (#487).

  • B-OCL grammar rewrite: New visitor-pattern OCL parser replaces the legacy listener implementation, fixing parser hangs, infinite loops, and tight coupling (B-OCL #9).

Bug Fixes

BESSER Core

  • Fix Enumeration deserialization recursion (#490): Enumeration.__getattr__ now uses object.__getattribute__ to avoid infinite recursion during pickle deserialization – same pattern as Object.__getattr__ in v7.0.0.

  • Fix SQLAlchemy reserved keyword conflicts (#489, PR #491): All SQLAlchemy imports aliased with underscore suffixes to prevent class name collisions. Added validate_model() with clear error messages. Added enum (lowercase) to reserved names.

  • Add enum value validation in object diagrams (#487): ObjectModel.validate() now checks that enumeration attribute values are valid literals. Added completeness warnings for objects with no attributes.

  • Add multiplicity validation in domain model: DomainModel.validate() now checks min/max multiplicity constraints on all association ends.

  • Fix validation error messages: Validation router now passes actual error messages to the frontend instead of generic placeholders. Hyphens in association names, invalid multiplicities, and other construction errors now show specific details.

B-OCL Grammar & Parser

Major rewrite of the Object Constraint Language (OCL) parser, addressing 6 critical design flaws (B-OCL #9):

  • Parser hangs on bad input: New grammar with proper precedence hierarchy + custom BOCLErrorListener that collects errors immediately. Malformed input now produces clear error messages in <4ms instead of hanging up to 60s.

  • Left recursion fixed: ANTLR4’s built-in precedence climbing replaces indirect left recursion through expression? patterns.

  • Atomic IF-THEN-ELSE-ENDIF: Single rule enforces all four keywords appear together. Standalone else is no longer syntactically valid.

  • Visitor pattern: New BOCLVisitorImpl (~350 lines) replaces the legacy listener pipeline (BOCLListener + RootHandler + FactoryInstance, ~1700 lines total). Grammar changes no longer break the evaluator.

  • Removed legacy classes: ConstraintRoot, FactoryInstance, InitRoot, OCLParserWrapper, PostConditionRoot, PreConditionRoot, RootHandler, and comparison_operator_checker are removed in favor of the new visitor + evaluator pipeline (lives in the bocl package).

  • New files in BESSER: besser/BUML/notations/ocl/visitor.py, error_handling.py, BOCLVisitor.py (generated visitor base class), regenerated grammar files.

  • Comprehensive OCL tests: New university model test suite covering complex constraints, navigation, collection operations, and edge cases.

  • B-OCL-Interpreter package: Released as bocl v1.0.0 on PyPI, now a proper external dependency (added to requirements.txt).

Web Modeling Editor Backend

  • Fix Render deployment crash with agents (WME #101): process_agent_diagram() now validates at build time. GitHub deploy only processes agent diagrams when the GUI uses agent components.

  • Store B-UML models on GitHub sync (WME #100): save_project_to_github and deploy endpoints now export domain_model.py and agent_model.py into a buml/ directory alongside the project JSON.

  • Merge PR #102: Type-specific input controls for attribute default values – enum dropdowns, number inputs, date/time pickers, boolean dropdowns.

Web Modeling Editor Frontend

  • Fix vibe agent class deletion (WME #95): removeElement() now throws an error when the target class isn’t found, instead of silently returning the unchanged model.

  • Fix vibe agent object name duplication (WME #98): Frontend strips : ClassName from objectName before concatenating. Modeling agent prompts and schema enforce proper instance naming.

  • Fix JSON filename on project rename (WME #99): saveProjectToGitHub() derives the file path from the current project name at save time.

  • Fix GitHub cross-tab sync (WME #93): Added storage event listener so linked repo state syncs across browser tabs.

  • Fix GUI table column overflow: Added scrolling to columns manager panel when many columns are configured.

  • Fix composition relationships in GUI tables: getEndsByClassId() now handles ClassComposition and ClassAggregation relationship types.

  • Update method behaviour tooltip (WME #94): Changed from “Python code editor” to “code behaviour”.

Documentation

  • Added GitHub Integration section to the frontend user guide covering connecting, saving, loading previously synced projects, and commit history (WME #92).