Skip to content

SimGe Release Notes

Last Updated/Edited (DTG): 2026-07-20T00:00:00+03:00

[0.5.1] - 2026-07-20

Fora Telemetry Validation

  • OM4 Corpus Campaign Driver: Added a corpus batch mode to SimGe.ValidationHarness (--corpus <keys|all>, --corpus-output <dir>, --corpus-aggregate) that runs each registered sample through the existing single-sample path and pools results under resolved-FOM-checksum, scenario-seed, and hardware-fingerprint gates, so x86-64 and ARM64 cells are kept as separate cross-host cells and mismatched resolved-model signatures are never blended. Each run now also emits a structured CampaignSampleSummary.json alongside the Markdown ValidationReport.md.
  • Cross-Model Confirmatory Statistics: Added the CampaignMatrix statistics layer — Spearman rank correlation with exact small-n permutation p-values, Benjamini–Hochberg FDR correction across the pooled hypothesis family, a Kruskal–Wallis omnibus over archetype profile classes, and a scalar cross-host ratio-band check. It produces a corpus-level ConfirmatoryValidationMatrix.md that assigns each pre-registered hypothesis a Confirmed / Weak-Directional / Inconclusive / Rejected verdict, distinct from the per-sample reports.
  • NETN Interim Corpus Run: Executed and archived the first OM4 corpus run over the three NETN tiers (NETN-CBRN/MRM/ENTITY) on a single x86-64 host. By design no hypothesis reaches Confirmed (n = 3, single host below the confirmatory power floor); the run establishes the reproducible method and directional evidence and refreshes the NETN-MRM five-replication telemetry and regenerated sample code.

Reports and Analysis

  • Data-Type Impact Analysis: Added TypeImpactAnalyzer (SimGe.Model.Analysis.Impact), which inverts the OMT data-type reference graph to answer "what breaks or shifts if I change this type?". It computes one transitive closure for two change kinds — Removal/rename (every referrer loses its binding and blocks code generation) and wire-format shift (a representation/encoding change forces every embedding codec to be regenerated and re-coordinated across federates) — and reports the affected attributes, parameters, record fields, variant discriminants/alternatives, classes, and (with an owner→module map) dependent modules. A new Data-Type Impact section in the module analysis report ranks declared types by blast radius. Covered by unit tests.
  • Impact Report Dependent-Modules Column: The Data-Type Impact section of composed sample metric reports (NETN / RPR / Restaurant) now attributes each affected element to its owning module, so the Dependent Modules column shows which modules a data-type change would reach across the composition. Attribution is built from the pre-merge module set via TypeImpactAnalyzer.BuildOwnerModuleMap; single-module reports omit the column.
  • Data-Type Delete Impact Warning: Deleting a data type now runs the impact analysis inside the delete-confirmation dialog. Instead of a generic "are you sure?" prompt, it reports how many references across how many classes will break (falling back to unresolved type names and blocking code generation) and lists a sample of the affected attributes/parameters/fields, so the deletion can be confirmed or cancelled with full knowledge. The user may still proceed.
  • Data-Type Rename Impact Preview: Renaming a data type that other elements reference now shows a confirmation first: in-module references follow the rename automatically, but cross-module references by the old name and generated code do not, so the user can proceed or cancel with that in view. No prompt when nothing references the type.
  • Show Impact / Usages (Project Explorer): Right-clicking a data type in the Project Explorer opens an on-demand impact/usages report — which elements reference it, how a removal/rename would break them, and what a representation/encoding change would force to be regenerated and re-coordinated across federates. It uses the same analysis engine as the delete-time warning; the action is enabled only for data-type nodes.
  • Non-Blocking Report Generation: OMT report generation now runs off the UI thread. CReportVM.RefreshReport() previously started a worker thread and immediately Join()ed it, then rendered the RDLC on the UI thread, freezing the app for large FOMs (e.g. NETN-CBRN). The dataset is now filled with Task.Run while the shared busy indicator is shown, and only the WinForms ReportViewer render is marshaled back to the UI thread.

Code Generator

  • Generated API Summary README: Fora code generation now emits README.generated.md in each federate output root, next to SimulationManager.cs, [Federate].cs, and the Generated/ tree. The README summarizes generation provenance, the embedded Fora API profile, optional target-project Fora.Client version resolution when available, generated vs scaffold ownership, metric-based variant settings and per-class strategy outcomes, analytical synthesis diagnostics, object/interaction helper APIs, DDM dimensions, datatypes, extension points, and regeneration guidance for simulation developers.
  • Fora API Profile: Added a committed ForaClientApiProfile.json profile, a developer-only tools/Update-ForaClientApiProfile.ps1 helper, and a Visual Studio-friendly tools/Update-ForaClientApiProfile.cmd wrapper that refreshes the profile from a local Fora repository. SimGe reports the profile it targets without requiring Fora.Client to be installed as a SimGe dependency.
  • Generated Fora Header Compatibility: Generated Fora source-file headers now report Fora.Client compatibility from the embedded API profile's tested version instead of a legacy hardcoded Fora version string.
  • Fora Contract Catalog Validation: Added the initial code-side catalog of Fora API calls emitted by the generator and wired a DLL metadata validator into the Fora generation pipeline. Code generation now reports CG1020/CG1021 Fora contract validation diagnostics in the post-generation dialog and in README.generated.md; missing bundled snapshots are reported as NotRun rather than blocking generation.
  • Fora Call Writer Centralization: Routed generated Fora service-call emission through ForaClientCallWriter for SOM handle resolution, simulation lifecycle, publish/subscribe, object/interaction helpers, advisory switches, entity deletion, callback object-class lookup, and late-join attribute update requests. The contract catalog now validates 36 service calls and 28 codec calls against the bundled Fora.Client API snapshot.

Documentation

  • OM4 Campaign Pre-Registration & Runbook: Added Architecture chapter 16C (frozen hypothesis family, decision thresholds, BH correction family, and explicit non-claims) and chapter 16D (corpus campaign runbook), archived the executed run under Samples/Corpus Campaign/, and trimmed the Roadmap OM4 item to a short completed-harness summary plus the remaining external phases (full NETN 14 + RPR 15 corpus authoring, ARM64 cross-host hardware, full execution).

[0.5.0] - 2026-07-05

Object Model Editor

  • OME Data-Type Validation & Broken Reference Resolution: Resolved validation errors in OME editors caused by data type reference mismatches and unresolved dependency names (BrokenDataTypeName). Made RecordField inherit from ObservableObject to support proper property change notifications in the editor grid. Handled BrokenDataTypeName resolution on load for fixed record, variant record, alternative, array, attribute, parameter, tag, and time editors.
  • Rich Data-Type Selector Dropdown (UX): Modernized the data-type ComboBoxes in all OME editors (fixed record, variant, alternative, array, attribute, parameter, tag, time, and dimension editors) with a rich UX style:
  • Enabled editable/searchable text editing (IsEditable=True, StaysOpenOnEdit=True) with a custom filter-as-you-type search (see below).
  • Added visual color bullets and category badges for each data-type kind (Simple, Enumerated, FixedRecord, VariantRecord, Reference, Array).
  • Included a source module badge (e.g., NETN-BASE) for dependency-owned types.
  • Implemented automatic grouping by data-type kind inside the dropdown using Wpf GroupStyle and default collection view grouping.
  • Composed Time/Tag Table Merge Compliance: Updated FOM composition to copy dependency-provided time representation and user-defined tag rows into the composed model while enforcing identical repeated rows. The IEEE 1516-2025 writer now omits default empty time representation placeholders, avoiding schema-invalid standalone modular exports such as empty logicalTime elements without a dataType.
  • Schema Validation Scope Selector: Added explicit Standalone module and Composed dependency closure validation scopes to the FDD viewer. Standalone schema validation now appends a dependency-closure advisory when document-local dataTypeKey errors reference data types that are available in loaded dependency modules, while composed validation validates the merged dependency closure directly.
  • FDD Validation Toolbar UX: Refined the FDD viewer toolbar so validation controls are grouped on the left with modern compact schema/scope dropdowns, the default scope is Standalone module, file actions (Copy all, Export, Find) are aligned to the right, and the persistent validation state is shown in the status bar as Validation Status: not run/running/valid/failed/needs dependencies.
  • Dependency-Aware Basic Representation Selection: Fixed OME simple, enumerated, and reference data-type editors so basic data representations declared in dependency modules are selectable and preserved. IEEE 1516-2010 standalone imports now retain unresolved representation names through import/export, and composed merges can recover compatible enum/simple representation names before reporting data-type conflicts.
  • Composed Data-Type Required-Field Recovery: Extended C.3 data-type composition recovery so compatible duplicate definitions can fill missing array element types, fixed-record field types, variant-record discriminant types, variant encodings, and variant alternative types before OMT schema validation. Array data types now preserve unresolved type-name fallbacks, and the IEEE 1516-2025 writer no longer emits the internal NA sentinel as a reference data-type representation.
  • OMT Variant/Sync Data-Type Export Compliance: Fixed IEEE 1516-2010 modular imports so dependency-owned variant-record discriminant and alternative type names survive standalone import/export when the defining module is not yet loaded. IEEE 1516-2025 OMT export now omits synchronization-point <dataType> when the value is SimGe's internal NA sentinel, and validation documentation now captures the strict OMT ordering and required-field rules for simple and variant record data types.
  • Data-Type Dropdown Filter-as-You-Type Search: Replaced WPF's built-in prefix type-ahead with a filter-as-you-type search that ranks matches exact > prefix > contains, so typing LocationStruct no longer selects the longer sibling LocationStructArray. Preserves grouping and two-way bindings, and resolves exact typed names on commit. Applies to all shared data-type editors.
  • Data-Type Dropdown Performance: Kept the ~1000-type dropdown responsive via grouped UI virtualization (IsVirtualizingWhenGrouping, recycling), a 140 ms search debounce, filter-before-open, and shared frozen kind-color brushes.
  • Data-Type Dropdown Search UX: Stopped the editable dropdown from auto-completing/echoing the best match into the text (IsSynchronizedWithCurrentItem=False, no current item), so users filter then pick. Added matched-substring bolding, Enter to accept the top-ranked match, a "Search data type…" watermark, and an inline "No matching data type" hint instead of an empty popup.

Dashboard & Analysis

  • Unresolved Data-Type Reference Findings: Added a direct dashboard health metric and integrity findings table for unresolved modular data-type references. Module-only analysis now reports unresolved OC/IC attributes, interaction parameters, array elements, record fields, variant discriminants/alternatives, and simple/enumerated representations as warnings with the preserved missing type name; composed analysis promotes remaining unresolved references to errors. Module analysis reports now include the same count and narrative so users can distinguish schema validation gaps from semantic dependency-closure problems.
  • Integrity Findings Markdown Copy: Added a copy-to-clipboard action to the dashboard Integrity Findings table. The exported Markdown starts with the active module name and includes the severity, scope, owner, member, reference kind, and missing type columns for direct issue sharing.
  • NETN-CBRN Composed Fallback Rebinding: Fixed the dashboard's lenient modular-FOM merge fallback to run the same final RebindDataTypeReferences() pass as the strict composition engine. NETN-CBRN and similar conflict-tolerant composed analyses no longer report dependency-owned RPR/NETN data types as unresolved when the defining modules are present in the project closure.

Object Model Editor

  • Dependency-Aware Data-Type Selection: Added a shared OME data-type catalog that builds the active module's effective data-type scope from local declarations plus resolved module dependencies. Attribute, parameter, array, fixed-record field, variant-record, dimension, tag, synchronization, and time editors now use table-specific OMT selection policies instead of local-only lookup lists, so dependency-owned types such as LocationStruct are selectable when the defining module is loaded.

Fora Telemetry Validation

  • NETN-MRM First-Cut Validation Harness Support: Added the NETN-MRM sample definition and report path coverage to SimGe.ValidationHarness, enabling full closed-loop validation runs for the first-cut multi-resolution modeling scenario.
  • Micro-Instrumentation Verdict Wording: Clarified reliability reporting so the strict instrumentation budget is applied to the benchmark Null-layer delta, while the manifest-owning run sink mode is reported separately as context.
  • Clock-Alignment Gate Reporting: Updated SimGe.ValidationHarness to read Fora manifest clock-alignment evidence, surface it in ValidationReport.md, and emit explicit reliability verdicts for missing, out-of-budget, and within-budget clock-alignment gates while keeping negative-residual diagnostics separate.
  • Fora 20260628.0.0 Telemetry Package Alignment: Updated SimGe.ValidationHarness to consume the local Fora 20260628.0.0 package and report Fora manifest schema version, SimGe validation manifest version, and Fora telemetry version as separate provenance fields.
  • NETN-CBRN Validation Refresh: Regenerated the NETN-CBRN five-replication validation run with the expanded operational scenario, targeted CBRN event cycles, IC hotspot coverage, and controlled full-state CV_p_OC evidence.
  • Payload Hotspot Verdict Wording: Refined OC payload-hotspot reporting so controlled full-state payload dispersion with a different runtime leader is reported as a hotspot identity mismatch, not as a full runtime contradiction.
  • GC Environmental Isolation & Verdict Integration: Updated SimGe.ValidationHarness report generator to append explicit GC reliability verdicts ([PASSED - Runtime Noise Controlled] or [WARNING - GC Contamination Suspected]) next to the steady-state GC pause contamination rate in the scope section of ValidationReport.md.
  • Garbage Collector Tuning for Headless Scenarios: Enabled <ServerGarbageCollection>true</ServerGarbageCollection> and <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection> in the NETN-CBRN scenario execution project to leverage background parallel collection threads, reducing the steady-state GC pause contamination rate in multi-federate runs from 5.82% to 0.72%.
  • NETN-CBRN Property-Set Normalization: Updated SimGe.ValidationHarness to normalize pooled PropertySetId evidence by resolved member names when repeated runs use run-local RTI handles. NETN-CBRN Human updates now collapse to the two semantic update sets (TriageLevel and Exposures/IPEType/Treatments/TriageLevel) instead of appearing as multiple unresolved handle-hash variants.
  • Topology Runtime Projection Evidence: Expanded the validation matrix with S_top, CV_D, and PP rows, plus a topology projection section that reports active concrete depth coverage, runtime-observed depth buckets, deepest-branch participation, and abstraction/concrete participation coverage.
  • Controlled CV_p_OC Full-State Evidence: Added a NETN-CBRN controlled full-state object-update pass and validation-harness aggregation for the 7000 logical-cycle band. The report now separates full-state CV_p_OC evidence from the normal partial-update workload and lists active OC class payload dispersion, observed full-state attribute counts, and property-set evidence.
  • Validation Harness Build Timeout: Increased the harness-managed scenario build timeout for large generated samples so NETN-CBRN validation runs do not fail during normal C# compilation on slower machines.

Telemetry Visualizer

  • Direct Property-Set Selectivity Resolution: The Telemetry Visualizer now reads the fom.property_set_map emitted by Fora telemetry 2.0 manifests and resolves per-attribute / per-parameter update selectivity by direct lookup. This replaces the FNV-1a property-set hash reversal — the new path is exact (no hash-collision false positives), unbounded by update size, and removes a UI freeze when loading large modular-FOM manifests such as NETN-CBRN, whose ~367-handle global attribute pool made the reverse search effectively non-terminating.
  • Bounded Reverse-Hash Fallback: For pre-2.0 manifests without a property-set map, the legacy reverse search is retained but hard-bounded (a per-call step budget plus skipping the explosive global-candidate pass), so it degrades to best-effort resolution instead of hanging.

Documentation

  • NETN-ETR WorldLocationStruct Standards Note: Added a standards-facing note documenting the unresolved TrackStruct.Location -> WorldLocationStruct reference in NETN-ETR.xml, the evidence that LocationStruct is the current NETN/RPR type, the upstream NETN-FOM issue-report location, and SimGe's planned local NETN sample correction.

[0.4.9] - 2026-06-25

Dashboard: Structural Risk Propensity Map

  • Calibration Toolbox for Structural Risk Heatmap: Integrated an interactive calibration panel into the Structural Visuals dashboard under a new permanently visible gear-shaped calibration toggle button. The panel provides sliders for WHL Left/Right Anchors, $S_{\mathrm{top}}$ Anchor, and Sigmoid steepness $k$ to perform live what-if analysis.
  • Dynamic Rendering & Guides: Dragging the sliders dynamically recalculates and updates the 2D heatmap background gradient, vertical/horizontal dashed guides, and marker tooltips in real-time.
  • Live Backend Re-evaluation: Parameter updates automatically re-evaluate structural risk metrics and verdicts on the backend (MetricAnalysisService / MetricAnalysisCore) and refresh the dashboard statistics live.
  • Responsive Header Layout: Restructured the Structural Visuals header by placing the Radar/Heat Map selector toolbar below the header title, eliminating layout overlapping at narrower window widths.
  • Structural Visual Export Scope: Structural Visuals PNG export now captures the full framed visual panel and includes heatmap calibration tools when they are visible.

Analysis: Analytical Synthesis Layer

  • Single Source of Truth for Metric Interpretation: The analytical synthesis layer (SimGe.Model.Analysis.Synthesis) is now the one place that turns computed metrics into profile names, structural states, risk zones, semantic verdicts, gate notes, and engineering guidance. Dashboard, tooltips, and reports render its output instead of reclassifying the same metric state.
  • Renderer Boundary: Synthesis-derived prose moved out of the UI into dedicated renderers — MetricDetailsMarkdownRenderer (structural-risk marker popover) and DashboardSummaryRenderer (dashboard overview), alongside the existing module-report renderers. Dead legacy classification helpers were removed from the structural-risk heatmap control.
  • Code-Generation Hints: CodegenStrategyMapper derives advisory, typed generation-strategy candidates (dispatch table, flattened state, delta tracking, specialized codec, critical-fault wrapper) from synthesis, surfaced as a new "Code-Generation Hints" section in module analysis reports and as advisory CG1010 diagnostics in the Fora generation run. These never change emitted code; EnableMetricDrivenVariants remains the sole emit gate.
  • Telemetry Validation Interpretation: Added the model-side contract (TelemetryValidationMapper) that maps design-time synthesis to runtime telemetry correlates and reports verdicts which distinguish confirmed runtime evidence from static pre-execution indicators (a design metric is never treated as a deterministic runtime prediction).
  • Cleanup & Hardening: Removed the dead structural-state classifier and orphaned statistics fields from OmAnalysisService, and broadened synthesis regression coverage (143 model tests) across structural, semantic-gate, archetype, codegen-hint, and telemetry-interpretation cases.

Documentation

  • Metric-Driven Code Generator Variants Clarified: Updated the architecture and user-manual code generator pages to document the implemented runtime scope of specialized object codecs, delta trackers, dispatch-table branches, and critical class wrappers, including current Object Class-only and non-transparent delta-update boundaries.
  • Analytical Synthesis Layer Architecture: Added architecture chapter documenting the delivered design — data model, services, classification rules, renderer boundary, code-generation hints, telemetry-validation contract, consumers, data flow, and tracked deferrals.

[0.4.8] - 2026-06-22

Object Model

  • Lossless Modular FOM Data-Type References: Fixed standalone import of dependency-defined data types, such as NETN-CBRN.ProcessingTime -> TimeSecondInteger32 (RPR-Base). Attribute, parameter, array, fixed-record, variant-record, and simple/enumerated representation references now retain their raw XML names when the defining dependency is not yet loaded. DIF/FDD/OMT export writes the preserved name instead of silently deleting <dataType> or <representation> during save.
  • HLA 2010 Modular Data-Type Preservation: Extended the lossless reference behavior to the IEEE 1516-2010 reader and writer. Dependency-defined attribute and parameter types, including RPR-Physical.LVCIndicator -> LVCIndicatorEnum8 (RPR-Enumerations), now retain the raw XML name in BrokenDataTypeName and survive standalone import/export.
  • Canonical Data-Type Rebinding: Added COmt.RebindDataTypeReferences() and run it after import, clone, and modular composition. The pass resolves preserved names against the completed dependency closure and replaces stale source-module references with data-type instances owned by the current or merged model. Composition equality checks now compare the effective data-type name even before the live reference is available.
  • COmtElement Parent Event Leak Fix: Routed all COmtElement.Parent re-assignments through a single SetParentCore funnel that detaches the previous parent's bubbling subscriptions (selection and relation) before repointing and re-attaching the new parent. This eliminates a leak where a former parent kept receiving (and re-raising) a re-parented element's events, removes duplicate subscriptions on re-parent cycles, and makes Parent = null null-safe (previously threw). Removal paths (RemoveChild, RemoveSelf) now detach symmetrically, with a guard so moving a node to a new parent does not clear it.
  • Atomic Re-parenting in AppendChild: COmtElement.AppendChild now performs re-parenting atomically — it removes the element from its previous parent's Children (via DetachChild) before attaching it to the new parent, so the same instance can no longer appear under two parents at once. Structural guards are centralized in this single entry point: self-parenting and cycle creation (attaching one of the element's own ancestors) are rejected, duplicate sibling names are rejected, and a null argument returns false instead of throwing. Tree-loading paths are unaffected, since they add fresh nodes with no previous parent.
  • Bidirectional Child Detach (DetachChild): Removing a child is now funnelled through a single COmtElement.DetachChild entry point that cleans up both directions together — collection membership, the child's Parent pointer, and both bubbling subscriptions (SelectedItemChanged, RelationChanged). RemoveChild delegates to it, and RemoveSelf now routes through the parent's DetachChild instead of bypassing the domain API with a raw Children.Remove, so a removed node no longer keeps a stale parent pointer or live event subscriptions. The pointer/event cleanup is guarded so a node that has been moved to a new parent is not clobbered.
  • Children Mutation via Domain Methods: COmtElement.Children can no longer be reassigned from outside (the setter is now private; the deserializer re-wires the tree afterwards), and structural changes go through domain entry points so parent pointers and event subscriptions stay consistent. Added InsertChild (atomic positioned add/re-parent), MoveChild (same-parent reorder to a final index), and ClearChildren (detach all) alongside the existing AppendChild/RemoveChild/DetachChild. The drag-drop reparent/reorder host (WpfOmtEditorHost) and the object/interaction class editors now reorder and re-parent through these methods instead of mutating the collection directly.
  • Children is Now Compile-Time Read-Only: COmtElement.Children is exposed as IReadOnlyList<COmtElement>, so the collection can no longer be mutated (Add/Remove/Insert/Clear) by outside callers at all — every structural change must use the domain methods. The serialized member is pinned to the on-disk name Children (a round-trip test guards the .fap/.sfom format), so existing projects load unchanged. A new IndexOfChild replaces collection IndexOf for callers that need a position, and explorer observation now binds to the live collection through IBindingList (read, not mutate). One narrow escape hatch, AddFlatIndexReference, registers a node in a non-owning flat index without claiming ownership — used only by the legacy HLA 1.3 Dimensions registry (whose dimensions are structurally owned by their routing space).
  • Deep-Copy of Notes on Clone/Draft: COmtElement.Clone and CopyBaseValuesFrom (the edit-draft create/apply path) now deep-copy the Notes dictionary via a shared COmtElement.CloneNotes helper — a fresh dictionary, fresh per-key lists, and fresh COmtNote instances. Previously the same note instances were shared, so editing (or cancelling) a draft could leak note content back into the original model. The datatype helper clones (Enumerator, Alternative, RecordField), COmtDimension, and the FOM-root metadata helpers (COmtGlyph, COmtPoc, COmtKeyword, CReference) note maps are deep-copied the same way — previously these still shared COmtNote instances even though they cloned the dictionary.
  • Case-Sensitive Name Uniqueness: Sibling duplicate-name validation is now case-sensitive (Ordinal), matching the case-sensitive Contains check and IEEE 1516.2-2025 §3.3.1 (OMT names are case-sensitive). COmtElement.ContainsAnother and the drag-drop move collision check (WpfOmtEditorHost) no longer report Foo and foo as duplicates, so two case-only-different siblings are valid and no longer fail later at save/validation.
  • Case-Sensitive Name Resolution: Identity lookups that previously matched case-insensitively are now Ordinal, consistent with §3.3.1 so distinct-cased names resolve to distinct elements: FQN class/interaction resolution (OmtSearchExtensions.FindChildByFQN, used by the 2025 FDD reader), datatype-by-name resolution (COmt.FindDataTypeByName), attribute lookup (COmtOC.GetAttributeByName), and the attribute-shadowing check (COmtOC.IsAttributeShadowed). A child foo no longer falsely resolves to — or is reported as shadowing — a Foo.
  • OMT Name Validation Corrections: Fixed the element/datatype name-character class typo [a-zA-z…][A-Za-z…] (the buggy range had accepted [ \ ] ^ _ `). The datatype Discriminant reserved-name check now rejects only the exact name NA (any case) instead of any name starting with those letters (Navy, name are valid again), and datatype Discriminant/Alternative names now allow the hyphen - permitted by §3.3.1, consistent with the element Name validator.
  • Removal of Inconsistent ParentUI Property: Completely removed the redundant and inconsistent ParentUI property and its backing field from COmtElement, ensuring that the canonical Parent pointer is the single source of truth for all parent-child hierarchy mutations and queries. All references and XML doc comments were aligned to the canonical Parent.
  • HLA OMT Synchronization Point Compliance: Enforced strict IEEE 1516-2025 Annex C.5 compliance for synchronization points. Added standard HLA identifier naming validations to synchronization point labels (Name property) by fallback delegation to base validation. Implemented strict merge conflict validation checking in FomCompositionEngine so synchronization points with identical labels must have matching sub-elements (DataTypeName, Capability, Semantics), throwing a FomMergeConflictException otherwise.

Validation

  • Schema-Valid Data Type Export: The IEEE 1516-2025 writer no longer emits SimGe's internal NA sentinel as an attribute/parameter <dataType> reference — it is omitted instead. This removes a misleading OMT schema keyref error ('NA' fails to refer to some key); an attribute with no assigned data type now produces the correct "data type required" condition (DIF/FDD allow dataType to be omitted, OMT requires a defined type).
  • User-Friendly Validation Hints: FOM schema-validation reports now append a short → What to do: guidance line under common errors (missing/undefined data type, unresolved dimension/transportation/representation references, missing required elements, empty values), alongside the raw schema message. Purely presentational and shared across the DIF/FDD/OMT (2025 and 2010) validation paths.

User Interface

  • Dashboard Composed Scope Alignment: Fixed the FOM dashboard's default Composed analysis path so dependency modules resolved by orphan/reference name are included alongside GUID dependencies. The dashboard now matches generated module-analysis reports for NETN-style dependency modules and falls back to additive metrics composition when strict merge validation reports a conflict.
  • NETN Module Metrics Dashboard: Expanded the FOM dashboard and NETN metric projection path so module-level NETN/RPR reports expose the same direct metric families used by the generated analysis pages. The dashboard can now inspect the restored NETN module metric outputs, including direct OC/IC metric tables and updated NETN aggregate report content.
  • OME Modular Datatype Display: Attribute and parameter tables, including the embedded class-editor tables, now display the effective datatype name. Dependency-defined references such as NETN-CBRN.ProcessingTime -> TimeSecondInteger32 (RPR-Base) use the preserved XML name while the active module remains independently editable, instead of appearing as NA or empty.
  • Unified Modern Toolbar Styling: Refactored the dated WPF ToolBar and ToolBarTray structures across the application. Replaced the multi-band MainView toolbar in MainWindow.xaml with a single, consolidated toolbar featuring a clean off-white background, vertical separator accents (ModernToolBarSeparatorStyle), and flat button interactions (ModernToolBarButtonStyle). Added matching styles for toggle buttons (ModernToolBarToggleButtonStyle) and fixed redundant style declarations inside page-specific views, project explorer, file viewer, OMT table editors, FAME views (FamView / FamPropertiesView toolbars and inline action buttons), and OME diagram views (MsaglDiagramView toolbar and controls) to establish a consistent, premium design language. Additionally, modernized IconBaseStyle by removing the independent hover background from MaterialIcon (which previously drew visually clashing, sharp-cornered LightBlue boxes nested inside button boundaries) and dynamically bound the icon's foreground to its parent control's inherited TextElement.Foreground state to ensure seamless visual transitions.

Workspace

  • Memory Leak and OnDispose Cleanups: Resolved a memory leak in CProjectManagerVM by refactoring the StatusBarService.Instance.StatusChanged subscription to use a named handler method and unsubscribing from it in OnDispose(). Also removed a redundant, dangling if (_projectService != null) block in OnDispose() that incorrectly wrapped the local collections cleanup block.
  • FomModuleVM Memory Leak Fix: Resolved a memory leak in FomModuleVM by converting anonymous lambda event subscriptions for FomModule model and collection changes to named event handlers and unsubscribing from them in OnDispose().
  • FomDashboardViewModel Memory Leak and Disposal Fix: Resolved a memory leak in FomDashboardViewModel by converting its anonymous _moduleVM.PropertyChanged subscription to a named event handler and unsubscribing from it in OnDispose(). Additionally, ensured that the CancellationTokenSource instances for debounce (_debounceCts) and running analysis (_analysisCts) are cancelled and disposed when the view model is disposed, and before creating new instances.
  • MsaglDiagramView Event Detaching and Memory Cleanups: Resolved a memory leak and lifecycle cleanups in MsaglDiagramView by detaching all UI control event subscriptions (pan, canvas click, keyboard previews, selection gestures, and mini-map triggers) and VM-level events on control unload. Additionally, ensured that VM viewer access references are set to null on unload and on DataContext changes to break view-to-viewModel circular dependencies.
  • Atomic Diagram Image Export: Updated diagram export in MsaglDiagramView to write to a temporary file first and perform an atomic replace/move operation on success. This protects existing files from truncation or corruption if an exception or error occurs during image encoding.
  • VariantRecordEditorViewModel Service Locator Refactoring: Resolved a service locator dependency in VariantRecordEditorViewModel by replacing the global ApplicationServicesProvider reference with the constructor-injected _visualizer service when opening the notes editor dialog.
  • Missing Installer Sample Files: Added the missing ChatBasicFom and ChatBasicSom XML and SFOM files to the WiX installer (Product.wxs) sample files directory definition so they are packaged into the MSI and correctly deployed.
  • Interactive Missing-Module Recovery: Opening a module whose backing files (.sfom metadata / .xml content) are missing on disk no longer just aborts with an error. SimGe now first tries to silently re-anchor the module from well-known project locations (project home, Fom/, the configured FOM folder); if that fails, a custom recovery dialog offers Locate…, Remove Module, or Cancel (plus a Repair SimGe hint for bundled samples). Locating prompts for the .sfom and verifies its persistent module Id against the expected module before re-linking — a mismatched file raises a confirmation so dependency wiring is never silently re-keyed. After a successful relocate the module is re-hydrated in place (new IOmService.ReloadModuleContentAsync) and the Project Explorer rebuilds the module's subtree, placing it under the correct FOM/SOM folder with its content nodes. The Locate browse dialog remembers the last-used folder for the session.
  • Missing-File Indicators: Modules with files missing on disk are now flagged with a red warning badge in both the Project Explorer tree and the Start Page dependency graph, with a tooltip explaining what is missing and that double-clicking starts recovery.
  • Removing Broken Modules: A module whose content failed to load (no in-memory Content) can now be removed from the project; the removal guard previously rejected such modules, leaving them stuck.
  • Save As for Read-Only Samples: Bundled sample projects load read-only, but Save As now stays available for them so users can snapshot a sample into a writable location; the Save As dialog defaults to the user's Documents folder for samples instead of the read-only install directory.
  • In-App Check Updates: The About dialog's Check Updates now performs a real version check (new IUpdateService), querying the latest published GitHub release and comparing it with the running version. It reports up-to-date, offers to download when a newer version exists, or falls back to opening the releases page on error.
  • Help/About Links Point to the Docs Site: Help → SimGe User Manual and About → Release Notes now open the published documentation site (otopcu.github.io/simge-site), and the About dialog gained a Reference Book link to the SimGe Springer book.
  • Comprehensive User Manual: The wiki User Manual was expanded from a few pages into a full, SimGe-wide guide (Getting Started, Projects, Object Modeling, Analysis & Visualization, FAME, Code Generation, Preferences & Help, and a Glossary), with annotated screenshots, and published to the documentation site.
  • RelayCommand Strict Mode Diagnostics: Implemented a validation and warning mechanism (strict mode) to RelayCommand<T> and AsyncRelayCommand<T> to catch invalid command parameter type bindings during development and testing. By default, it generates trace warning logs using Trace.TraceWarning and Debug.WriteLine. If strict mode is enabled (defaults to true under #if DEBUG configuration), it throws an InvalidCastException to quickly surface integration errors in tests and logs instead of failing silently with a no-op. The behavior is configurable via the RelayCommandConfig.ThrowOnInvalidCast property.
  • Atomic FAM JSON File Write: Updated FAM configuration saving in FamPersistenceService.cs to write to a temporary file first, flush it to disk, and then replace the destination file atomically using File.Move with overwrite. This protects the active FAM configuration (.sfam files) from truncation or corruption in case of unexpected exceptions, process termination, or disk write failures.
  • Atomic MRU XML File Write: Updated MRU (Most Recently Used) project list saving in CRecentProjects.cs to write to a temporary file first, flush it to disk, and then replace the destination file atomically using File.Move with overwrite. This protects the MRU project configuration file (RecentProjects.xml) from truncation or corruption in case of unexpected exceptions, process termination, or concurrent access.
  • JSON Preferences MRU Persistence Integration: Migrated the MRU (Most Recently Used) project list persistence from legacy XML storage to the unified, robust JSON preferences store (preferences.json under AppData) via a new JsonMruPersister strategy. This eliminates split settings/state, leverages existing JSON atomic save safety and corruption recovery, and resolves potential ProgramData permission write issues on restricted Windows environments.
  • Legacy Settings Unification: Completely eliminated the legacy XML options file (Options.xml under ProgramData) and the associated COptions class. All settings and the MRU list are now fully unified under the user-level JSON preferences store (preferences.json under AppData), making it the single source of truth for the application's runtime preferences. Direct references to COptions and Options.xml throughout the ViewModels (CProjectManagerVM, CStartupDialogVM), views (MainWindow.xaml.cs), and startup lifecycle (App.xaml.cs) have been removed, and the CRecentProjects WPF menu control is now dynamically bound directly to the JSON-based JsonMruPersister strategy.
  • Robust Markdown Escaping in Module Reports: Refactored the module analysis report renderer in ModuleAnalysisMarkdownRenderer.cs to introduce context-aware escaping helper methods (EscapePlainText, EscapeHeading, EscapeInlineCode, EscapeTableCell, EscapeBulletItem, and EscapeParagraph). Applied these context-specific escaping routines to all user-supplied and model-derived text fields (such as module names, paths, diagnostic notes, composition lists, and narrative sections) to prevent formatting block injection and avoid layout corruption in rendering tools.
  • Explicit Target Path Preservation in Save As: Refactored the project save implementation in ProjectService.cs to introduce an internal SaveProjectInternalAsync helper accepting an explicit target path. This ensures that SaveProjectAsAsync passes its computed target path (finalFapPath) directly down to the actual serialization logic rather than discarding it and forcing a recalculation from project settings, preserving selected path contract safety across the project service API.
  • Project Directory and CodeGen Path Synchronization: Updated property setters in ProjectSettings.cs to automatically synchronize the code generator's output folder (CodeGenSettings.Path) whenever ProjectHomeFolder or SourceCodeFolder changes. Additionally, added a path invariant normalization check inside the project loading routine in ProjectService.cs to guarantee that any loaded project correctly re-anchors the code generator's target directory to the current local workspace home folder.
  • Enhanced Copy Info in About Dialog: Expanded the About dialog's copy functionality in AboutView.xaml.cs to copy all configured links and support resources (Downloads, Release Notes, Reference Book, Feedback and Support, and Donate link if present) under a dedicated links and support section.
  • Unified OMD Export Error Handling and Notifications: Refactored the OMD diagram export flow by removing the localized try-catch error dialog from the View layer (MsaglDiagramView.xaml.cs) and letting exceptions bubble up. Injected IMessageBoxService into DiagramDocumentVM.cs to catch these exceptions and show unified success or failure alerts in a single ViewModel layer.
  • Honest Synchronous Dialog API: IUIVisualizerService now exposes a real synchronous ShowDialog (the actual WPF modal call, which blocks until the dialog closes) alongside the existing ShowDialogAsync, which is now a thin sync-completing wrapper. The OMT item-editor facade (OmtItemEditorService) calls ShowDialog directly instead of ShowDialogAsync(...).GetAwaiter().GetResult(), removing a misleading async surface and a latent sync-over-async deadlock trap. Behavior is unchanged (WPF dialogs were always modal/blocking); remaining ShowDialogAsync callers keep working via the wrapper and can migrate incrementally.

Code Generator

  • Representation-Accurate Fora Wire Codecs: Reworked generated primitive, enum, record, array, and variant codecs around consumed-length decoding and OMT datatype identity. Enum payload widths now follow their declared 8/16/32/64-bit representation; fixed and variable arrays encode elements individually with the correct count-prefix and alignment rules; arrays of complex records, variants, enums, characters, and strings no longer fall back to opaque byte[].
  • Discriminated Variant Record Support: Generated variant models now carry an explicit discriminant. Encode validates the selected alternative, decode reports consumed bytes, enumerator ranges such as [Apprentice .. Senior] expand to concrete enum cases, and HLAother maps to the default branch.
  • Effective Inherited SOM Members: Models, encoders, decoders, SOM handles, and manager publication sets now use consistent inherited interaction parameters and object attributes. Root NETN-BASE parameters (UniqueId, SendTime) are generated for derived interactions, and inherited attributes are resolved against each concrete object class for RTIs that perform class-scoped handle validation.
  • NETN-CBRN Generated Sample Restored: Regenerated NETN-CBRN now compiles and runs with complex payloads including CBRNExposureStruct[], TreatmentStruct[], and ContourStruct[]. Reserved FOM names such as Task use the central generated-name mapping, and the sample manager is aligned with the generated API and metrics metadata.
  • Closed-Loop Codec Regression Coverage: Added generator tests for representation widths, consumed lengths, nested records, fixed/variable arrays, string arrays, variant ranges/wildcards, inherited root parameters, and concrete-class inherited attribute resolution. NETN-CBRN, Restaurant, and Chat-Headless were regenerated, built, and completed successfully against Fora; the obsolete Restaurant manual codec workaround was removed.
  • Unresolved Modular Type Gate: Fora pre-generation validation now runs data-type rebinding and emits CG4004 when dependency-defined attribute, parameter, record, array, variant, or representation references remain unresolved. Generation aborts before writing files instead of falling back to placeholder or invalid C# types.
  • Identifier-Safe Fora Code Generation: FOM/SOM names that are not valid C# identifiers (C# keywords like class/event, hyphen/space/dot names like 2D-Position, or digit-leading names) no longer produce non-compiling generated code. Names are routed through a central CSharpIdentifier/ForaNameTable (a single OriginalName→GeneratedName map shared by every generator), with deterministic collision disambiguation. The original FOM name is preserved on a generated [HlaName("…")] attribute when a name is rewritten, and RTI wire-strings stay raw. Well-behaved FOMs are unaffected (byte-identical output).
  • Mandatory Pre-Generation Validation: A new ForaSettingsValidator.ValidateForGeneration gate runs before any file is written and aborts with a single consolidated report on an invalid namespace, class-name source, output path (with traversal containment via the shared PathSafety), or FOM-name collision.
  • Modern Fora Subcomponent: The IEEE 1516-2025/Fora generators were extracted into a self-contained SimGe.CodeGenerator.Fora namespace driven by an explicit ForaGenerationPipeline (Validate → Metrics → Strategies → Emit). Legacy (HLA 1.3 / 1516e / RACoN) generators are unchanged.
  • Run Lifecycle & Diagnostics: Each generation run now resets its diagnostics/file state, and Fora generators no longer swallow exceptions — a failure surfaces as a structured CG2001 error with generator/class context instead of a generic "skipped" warning.

Fora Telemetry Validation

  • NETN-MRM First-Cut Validation Harness Support: Added the NETN-MRM sample definition and report path coverage to SimGe.ValidationHarness, enabling full closed-loop validation runs for the first-cut multi-resolution modeling scenario.
  • Micro-Instrumentation Verdict Wording: Clarified reliability reporting so the strict instrumentation budget is applied to the benchmark Null-layer delta, while the manifest-owning run sink mode is reported separately as context.
  • Restaurant Workload Multiplier Support: Added --overhead-workload-multiplier (or -m) parameter support to the Restaurant headless telemetry scenario sample (Program.cs) to scale the steady-state serving and menu cycles during overhead runs, reducing the impact of OS setup and process scheduling noise. Also updated the associated simulation manager (SimulationManager.cs) to dynamically multiply steady-state interaction counts and wait criteria.
  • Telemetry Reliability Verdicts and Terminology: Updated TelemetryReliabilityReport.md to report scenario wall-clock overhead instead of pure instrumentation overhead, added OFF/ON medians, elapsed-time IQRs, delta, negative-overhead ratio, Mann-Whitney U p-value, and standardized verdicts for clock reliability, buffer health, runtime noise, scenario-overhead stability/noise floor, and missing Fora-side instrumentation benchmark evidence. The SimGe and Fora telemetry architecture notes now clarify that DEC_IC.DurationNs, SubPhase1Ns, and SubPhase2Ns are measured receiver-side timings, while residual network/queue latency is inferred and clock-alignment dependent.
  • Fora Telemetry Sink Modes, Benchmarks, and Optimizations (Phase 7): Integrated telemetry sink modes (Null, Memory, and Disk) on the Fora telemetry engine. Added TelemetryMemoryFlusher to process buffer records without disk writes for memory-only runs. Integrated micro-instrumentation benchmarks via TelemetryOverheadMeasurer.MeasureInstrumentBenchmarksAsync() to measure pure instrumentation, serialization, buffering, and disk/sub-phase overheads. Added a union-based FastGuid generator and conditional GC pause duration queries to reduce pure hot-path instrumentation overhead to under 480 ns/event (down from 914 ns/event). Added the INSTRUMENT_OVERHEAD: WithinBudget / ExceedsBudget verdict to evaluate pure instrumentation overhead against a budget of 500 ns/event.
  • Clock Alignment Diagnostics and Residual Latency Model: Fixed validation harness residual-latency analysis so fan-out receiver timestamps are accumulated without absolute timestamp overflow and asynchronous sender/RTI/receiver intervals are evaluated through a clipped ActiveWindow union instead of a naive duration sum. ValidationReport.md now includes Section 7.4 clock diagnostics with raw per-chain EndToEnd, ActiveWindow, and ResidualRaw values; the Restaurant 5-replication validation run no longer raises Drift 007 after this correction.
  • NETN-CBRN Release & Exposure Sample Documentation: Added wiki documentation for the implemented NETN-CBRN 10-federate scenario, including the role split, logical-cycle marker contract, selected-weight surface, operational fan-out surface, validation outcomes, and remaining confirmatory gaps.
  • Telemetry Sample Run Pages: Added concise Chat-Headless, Restaurant, and NETN-CBRN telemetry sample pages under the wiki runbook so each sample has a quick scenario summary, general metrics snapshot, validation result summary, and follow-up checklist.

Maintenance

  • Default Options Path Resolution: Resolved a dependency on the current working directory when loading DefaultOptions.xml by anchoring the relative path to AppContext.BaseDirectory. This ensures the default options file is correctly loaded from the SimGe installation directory regardless of the current working directory from which the application is launched.
  • Nullable Annotation Context: Set <Nullable>annotations</Nullable> on SimGe.Model, SimGe.Application, and SimGe.UI, which used ?/! reference-type annotations without an enabled nullable context. This clears all CS8632 warnings (solution-wide 4320 → 0) with no behavioral change; flow-analysis warnings remain suppressed for these projects.
  • AsyncRelayCommand Error Surfacing: Added an optional Action<Exception> onError callback to the AsyncRelayCommand / AsyncRelayCommand<T> constructors. The existing catch still logs via Trace.TraceError and now also invokes the handler when supplied, so call sites can surface async command failures to the UI instead of failing silently. Non-breaking (optional parameter; no existing call site changes).

[0.4.7] - 2026-06-01

Object Model

  • Dependency Persistence Fix: Saving a project no longer turns valid modular FOM dependencies into unresolved links in the Start Page dependency graph. Save, import, and load dependency matching is now aligned for RPR and NETN naming variants, including short names, versioned file names, and long SISO model-identification names.
  • Bulk Remove All Modules Refresh: Project Explorer Remove All Modules now uses a batch-clear path instead of repeated single-module dependency teardown. This removes unnecessary dependency/orphan processing, reduces UI freeze risk on large module sets, and reports progress through the shared shell busy/status surface.

Workspace

  • Installer Auto-Harvest from Publish Output: SimGe.Setup no longer hand-lists ~44 dependency DLLs sourced from the shared ../Bin build folder (which risked stale/missing files and Debug/Release leftovers, and required manually adding every new NuGet dependency). The wixproj now runs dotnet publish (framework-dependent) of SimGe.UI into a publish/ folder, and Product.wxs auto-harvests that folder with the WiX v6 <Files> element (ComponentGroup AppPublishedFiles). The publish output is the single source of truth — the exact, deps.json-validated dependency closure — so adding/removing packages now flows into the MSI automatically. SimGe.exe stays an explicit component (Start-menu shortcut + .fap association); installer resources and sample projects are unchanged. The harvest even picks up files the manual list missed (e.g. localization satellite assemblies). Debug symbols (*.pdb) and library XML doc files are excluded from the MSI. MSI output location is unchanged (SimGe.Setup/bin/<Config>/SimGe.msi).
  • Code Comment Localization (English): Began translating remaining Turkish source-code comments to English per the project's English-only comment guideline, starting with SimGe.Application/Project/Project.cs and SimGe.UI/WPF/omde/OmeVM.cs (comments only; no behavioral change).
  • Main Status Bar Refresh: The main window status bar was reorganized into clearer shell zones for primary feedback, persistent save state, busy activity, and workspace/project meta information.
  • Save Feedback: Successful project saves now show a transient <ProjectName> saved. message, while persistent shell state indicates Unsaved changes, All changes saved, Read-only sample, or No project as appropriate.
  • Save-State Reliability: Project load now starts from a clean shell state, and subsequent OME and FAME model edits consistently return the shell to Unsaved changes until the next successful save.
  • Workspace Hints: Active workspace guidance is now owned by each workspace through a shared shell hint model, improving consistency across Start Page, OME, FAME, Code Generator, Reports, and Preferences.
  • Unified Explorer Launcher: Replaced duplicated explorer process launching logic with validated static helpers. It guarantees that only absolute local filesystem paths are allowed, checks file/directory existence with warning logs, and provides parent folder view fallbacks if target is missing.
  • Robust Preferences Persistence: Solves silent preferences reset on JSON corruption. The persistence service now backs up corrupted settings files as .corrupt-{timestamp}, alerts the user, and employs atomic write operations (temp file write + replacement move) to prevent file write failures.
  • Resource Key Typo Fix: Renamed the misspelled DeafultOptionsFile string-resource key to DefaultOptionsFile across Strings.resx, the generated Strings.Designer.cs property, and its single consumer (Options.cs). The key surfaces as a public member of SimGe.Properties.Strings; with no external consumers it was corrected in place rather than aliased.

OME (Object Model Environment)

  • Dirty/Save Tracking Alignment: OME TableView direct-binding edits and editor commit operations now share the same change-tracking path, so module dirty state and project save-required state stay aligned across both editing surfaces.
  • OC/IC Property Editor Guardrails: Nested Attribute and Parameter editors opened from Object Class / Interaction Class editors now preserve outer OK / Cancel semantics by showing the current parent without allowing reparenting from that embedded context.
  • Property Editor Resolution Fixes: Attribute and Parameter editors now resolve parent-class and datatype selections correctly when opened from both table views and nested class editors.
  • Toolbar Add-State Fixes: The OME toolbar Add button now follows active-table capabilities more accurately and is visually disabled in unsupported tables including Time Representations, Tags, Switches, Services, and non-POC Identification views.
  • Tag/Time NA Selection Fixes: Tag and Time Representation editors now correctly resolve NA datatype values on open instead of showing an empty datatype selection.
  • Tag Validation Fix: Tag editors now accept reference data types consistently with IEEE 1516-2025 tag rules and with the editor lookup list.
  • Culture-Invariant Update Rate Handling: Normalized all UI editing, XML import (FDD 2010), and copy-table clipboard export paths for the update rate to use invariant culture parsing and formatting. This ensures consistent decimal value handling (always using a dot as a decimal separator) regardless of regional Windows settings, such as Turkish locale.

FAME (Federation Architecture Modeling Environment)

  • Project Save-State Tracking: Federation, federate application, and federate property edits now consistently mark the project as requiring save, matching the shell save-state feedback used elsewhere in the workspace system.
  • Diagram Render Optimization: Replaced dynamic Expression compilation in AddEditableText with a direct (object source, string propertyName) signature and a thread-safe property read-only status cache, eliminating high runtime IL compilation overhead and GC pressure during canvas redraws.
  • Soft Renaming in Diagram and Properties: Changed the inline editing of the Federate Application name in both the diagram view canvas and the properties pane tab to a soft renaming flow. Double-clicking the name or clicking the new edit button triggers the validation-guarded RenameAppInteractive dialog, protecting the model from invalid class identifiers (e.g. names with hyphens).
  • Uniqueness Check on Federate Application Renaming and Creation: Fixed a bug where creating a new Federate Application generated a duplicate name (e.g. NewFdApp_0 if it already existed in the project). The creation action now dynamically computes a unique name (such as NewFdApp_1), and the RenameAppInteractive service now queries the active project repository to block renaming an application to a name already in use.

Reporting

  • Report Dataset Security Hardening: Secured the legacy typed dataset OmtDataSet.Designer.cs against potential XML External Entity (XXE) and obsolete binary serialization security risks. The 14 legacy SerializationInfo constructors now immediately throw a PlatformNotSupportedException at runtime to block binary deserialization attempts, and the associated legacy SYSLIB0051 compiler warnings are suppressed. Additionally, insecure XmlTextReader instances used to read schema metadata have been replaced with securely configured XmlReader instances via XmlReader.Create that explicitly prohibit DTD parsing and disable external XML resolvers.

Code Generator

  • Misleading ProjectName Refactor: Disentangled misleading uses of ProjectName inside CodeGeneratorSettings when referencing the active federate class being generated. Introduced a separate FdAppName property that dynamically binds to the federate application name, while keeping the ProjectName settings property representing the actual project name.
  • Secure Code Generator File Output Containment: Centralized all file-writing tasks in the code generators to use GetValidatedPath(...), which validates and normalizes target file paths against the base directory to block any path traversal attempts.
  • Atomic Code-File Writes: The shared generator Save(...) now writes each file atomically — to a sibling temp file flushed to disk, then replaced via File.Move(overwrite) — so a crash, full disk, or AV lock can no longer leave a half-written or empty generated file. The temp file is cleaned up on failure.
  • Project Name Validation & Save Guards: Implemented design-time validation on ProjectSettings.ProjectName using Path.GetInvalidFileNameChars to prevent naming folders and files with invalid path characters. Implemented save commands check that abort saving if validation errors are found on the project settings or code generator settings.
  • Interactive Namespace Correction Dialog: Embedded an interactive validation guard when initiating code generation. If the current namespace is invalid, the system displays a warning and automatically cleans it to suggest a valid C# identifier alternative, prompting the user for approval to apply and proceed.
  • Fora Telemetry Settings & Instrumentation: Added a new EnableForaTelemetry project setting to toggle Fora telemetry instrumentation code generation. Reorganized the general code generator settings view (CodeGen_GeneralView.xaml) into distinct sub-sections: "Writer Settings", "Metric-Driven Optimization Settings", and "Fora Telemetry Settings". When enabled, interaction/object encoders, decoders, and specialized codecs wrap their serialization/deserialization logic in ambient EncodingTelemetryScope blocks.
  • OC Sub-Phase Validation Surface: The validation pipeline now separates the object path into ENC_OC.materialization, ENC_OC.serialization, DEC_OC.decode, and DEC_OC.entity_apply. Generated federate helpers use encoded send/update delegates so object-side telemetry stays inside the active event scope, and validation reports can interpret WHL_OC, CV_p, and SSI_n against a more precise runtime breakdown.
  • Per-Class Design Metadata Emission (CFomMetricsMetadataGenerator_Fora): Extended to emit OcClassDesignMetadata and IcClassDesignMetadata record types and static OcDesign / IcDesign dictionaries into the generated FomMetricsMetadata class. Each entry carries ClassName, DeclaredCount, semantic weight W_i, and volatility flags IsPeriodic / IsConditional / IsStatic. Only classes with at least one declared attribute or parameter are emitted; entries are sorted alphabetically.
  • Code Generation Diagnostics & Report: Code generation no longer collapses to a bare success/fail boolean. A lightweight, structured diagnostics layer (CodeGenDiagnostic with severity/code/generator/class/file/exception, collected per run) isolates each generator step so one failing file no longer silently aborts the rest or returns null into the file list. At the end of a run, a validation-style report dialog (the same CValidationResultsVM surface used by FOM composition) presents the outcome as one plain-text block per federate application (Federate Application: … / Status: SUCCESS | WARNINGS | FAILED | SKIPPED, with that federate's file count, a detailed list of generated file names, and diagnostics) under a run-level header (output path, timestamp, and a one-line summary), and the dialog is colored Success / Warning / Error accordingly. The previous separate warning message box shown before the report was removed as redundant, and the dialog titles were shortened to concise visual status labels (e.g., Code Generation Success, Code Generation Warnings, Code Generation Errors).
  • Generated-File Convention & <auto-generated> Marker: Standardized the machine/scaffold boundary. Every machine-layer file (everything under Generated/, overwritten each run) now emits a Roslyn-recognized // <auto-generated> banner as its first lines, so analyzers/StyleCop/IDEs treat it as generated regardless of extension; user scaffold files (SimulationManager.cs, the federate class, Entities/*.cs) are intentionally excluded so they remain analyzable, hand-editable code. Fixed the lone extension anomaly: FomMetricsMetadata had no scaffold pair yet used .simge.g.cs, so it now uses .simge.cs like the other standalone generated artifacts (.simge.g.cs is reserved for scaffold-paired partials such as entities). The convention is now documented explicitly in Architecture/11_Code_Generator.md (§11.4a).

Telemetry Visualizer

  • Telemetry Visualizer Workspace: Integrated a global, tab-based Telemetry Inspector Visualizer in SimGe Editor. It enables users to browse, load, and inspect simulation runs (manifest.json and .fort logs) directly. High-fidelity native WPF canvas charts visualize JIT compiler warmup curves, steady-state latency histograms, event sub-phase breakdowns, attribute/parameter selectivity grids decoded using FNV-1a search combinations, and a concentric radar chart showing design-to-runtime workload shifts (Operational Drift).
  • Export & Clipboard Copies: Added "Save as PNG..." options for all canvas charts (Operational Drift radar, JIT warmup step-line chart, Latency frequency histogram, and Stacked Sub-phase breakdown) to easily export visualizations, and "Copy Table (MD)" clipboard copy actions for the hotspot burden grid and the attribute selectivity grid to easily copy tables in GitHub-flavored Markdown.
  • Real FOM Match Verification: The verification badge now reflects an actual checksum comparison instead of always reporting "FOM Matched" whenever any project was open. The loaded manifest's resolved_fom_sha256 is compared against the canonical SHA-256 of the active merged FOM (shared algorithm extracted to FomChecksumService, the same one used by CFomMetricsMetadataGenerator_Fora), and the badge shows FOM Matched, FOM Mismatch, or Standalone — no project. Standalone inspection is unchanged: a mismatch or absent project never disables analysis — it only suppresses live project-correlated design metrics in favor of the manifest's own metric_snapshot.
  • Run Provenance in Metadata Card: The summary card now shows when the experiment was executed (Run Time, from start_time_utc, localized), how long it took (Duration, end_time_utc − start_time_utc), and the number of Federate Streams (.fort logs) captured. The card notes that each manifest is a single replication — pooling across independent runs remains a ValidationHarness (Fora Ch.5 §2.4) responsibility, not something inferred from one manifest.
  • "Scenario & Reports" Tab: A new first tab answers "what am I looking at?" before any chart. The left panel auto-derives a scenario picture from the manifest — a plain-language summary (scenario name/tier, run time/duration, stream and class counts), the federate roster (from .fort file names), and the object/interaction class inventory (from the manifest handle maps). An optional scenario.md / README.md sidecar placed next to the manifest is shown as free-text scenario notes when present. The right panel auto-discovers the generated Markdown reports sitting next to the manifest (ValidationReport.md and any *.md siblings), selectable from a dropdown and shown in a read-only viewer (see Rendered Markdown Reports below). Open launches a report in the default application and Folder reveals it in Explorer.
  • Separate Scenario / Reports Tabs: The combined panel was split into dedicated full-width Scenario and Reports tabs.
  • Rendered Markdown Reports: Generated reports now render as formatted Markdown (MdXaml, GitHub-like style with real tables/headings) with a Rendered / Raw toggle (Raw = AvalonEdit with highlighting and search). The optional scenario sidecar renders the same way inside a collapsible panel. "Copy" still yields raw Markdown.
  • Trustworthy Run Metadata: Scenario and variant are now derived from the run's folder layout (e.g. Restaurant / Base / VariantA) rather than the manifest's federation-name placeholder (rti); the metadata card is collapsible; the pooled-replication count is read from the sibling ValidationReport.md; and instrumentation overhead is surfaced from TelemetryReliabilityReport.md, showing "not measured" when the overhead experiment (--measure-overhead) was not run.
  • Modern Toolbar UI & Discoverability: Action buttons (Copy / Open / Folder / Save) were restyled as grouped flat toolbar buttons with icons and tooltips. The visualizer moved under Tools → Experimental, and the landing screen now explains its purpose and the prerequisite of generating run artifacts via SimGe.ValidationHarness first.

Fora Telemetry Validation

  • NETN-MRM First-Cut Validation Harness Support: Added the NETN-MRM sample definition and report path coverage to SimGe.ValidationHarness, enabling full closed-loop validation runs for the first-cut multi-resolution modeling scenario.
  • Micro-Instrumentation Verdict Wording: Clarified reliability reporting so the strict instrumentation budget is applied to the benchmark Null-layer delta, while the manifest-owning run sink mode is reported separately as context.

Stage 1 — Identity and Projection (Complete, Fora v1.1)

  • ValidationHarness — Handle Map Consumption: ValidationHarness reads class_handle_map and interaction_handle_map from manifest.json (v1.1), resolves .fort ClassHandle integers to semantic class names, and builds per-class RuntimeClassStat aggregations.
  • Per-Class Breakdown Tables: ValidationReport now includes OC and IC breakdown tables with per-class event count, total payload, average payload, average duration, and role label (Predicted Hotspot / Runtime Dominant).
  • Hotspot Alignment: OC hotspot uses average payload comparison; IC hotspot uses event count comparison against the top runtime class. Fixed an earlier bug where IC was incorrectly using average payload, causing CastVote to be marked Contradicted despite being the runtime frequency leader.

Stage 2a — Selectivity Analysis (Complete)

  • Update Selectivity Section: ValidationReport Section 6.1 now includes a per-class selectivity table: FOM All Members, Avg Sent, Selectivity %, Design Volatility, and Verdict. Selectivity = AvgEncAttributeCount / AllPropertyCount from ENC_OC / ENC_IC records, so inherited attributes/parameters are included in the denominator.
  • Volatility Verdict Logic: Periodic classes at ≥ 85% selectivity are Consistent; Conditional classes at < 70% are Consistent; mismatches are flagged Inconsistent. Static classes always emit "Static (sends on change only)".
  • λ_uv Row in Validation Matrix: Section 4 now includes a λ_uv (selectivity) row summarizing how many classes match or contradict their design volatility selectivity pattern.
  • Inherited-Member Denominator Fix: Selectivity computation now uses AllPropertyCount rather than own-class DeclaredCount, preventing false >100% selectivity readings when runtime updates include inherited attributes or parameters.

Stage 2b — Handle Attribution (Complete, Fora v1.2)

  • Design Metadata in Generated Binary: CFomMetricsMetadataGenerator_Fora emits OcDesign and IcDesign static dictionaries so the running federate binary carries design-time W_i, volatility flags, and declared counts without a separate FOM file at validation time.
  • metric_snapshot Injection Path: TelemetryConfiguration.MetricSnapshot (new Fora field) can now carry domain-level baseline metrics from SimGe's FomMetricsMetadata into manifest.json fom.metric_snapshot at session start. The manifest v1.2 contract defines this as a SimGe-origin, Fora-carried field.

Stage 3 — Event Attribution (Complete, Fora v1.3)

  • PropertySetId in .fort records: ValidationHarness reads ExtensionField1 from ENC_OC / ENC_IC records (written by Fora v1.3 as a FNV-1a hash of the sorted attribute/parameter handle set). Per-class PropertySets distribution is tracked in RuntimeClassStat.
  • "Property Set Distribution" section in ValidationReport: Section 3 now includes per-class distinct property-set count, dominant set ID (hex), dominant set event frequency, and dominant set average payload. OC pattern classification (Full-update / Partial-update) and IC classification (Full-send / Partial-send) are shown.
  • UpdateTypeHint tracking: RuntimeClassStat accumulates UpdateTypeHint breakdown counters (Periodic, Conditional, OnChange, Unspecified) from ExtensionField2. A distribution table is included in the Property Set Distribution section.
  • Manifest attribute/parameter map consumption: ManifestHandleMaps and TelemetryManifestFom now load attribute_handle_map and parameter_handle_map from manifest v1.2/v1.3 for future reverse-map use.
  • PropertySetId Client/Ambassador-Side Hashing & Validation: Implemented client-side calculation of the FNV-1a hash of sorted attribute/parameter handles, passing it as ExtensionField1 (PropertySetId) for all ENC_OC, DEC_OC, ENC_IC, and DEC_IC events. Verified name resolution matches correctly in generated validation reports.
  • InheritanceDepth Propagation: Updated TelemetryToken and TelemetryEmitter on the client/ambassador side to pass and log the class/interaction hierarchy depth from BeginEvent to EndEvent instead of logging 0 by default.

Stage 3b — UpdateTypeHint at Generated Send Sites (Complete)

  • UpdateTypeHint parameter added to public IForaClient / ForaClient API: UpdateAttributeValuesAsync, SendInteractionAsync, and SendDirectedInteractionAsync now accept optional byte updateTypeHint = 0. InstrumentedForaClient updated to forward the hint and pass it to EndEvent as extensionField2.
  • ClassCodeGen_SimMngr_Fora emits hint per class: Added GetUpdateTypeHintLiteral helper that maps ClassGenStrategy.IsPeriodic → Periodic, IsConditional → Conditional, IsStatic → OnChange, default → Unspecified. All three send-site generators (generateObjectHelpers, generateInteractionHelpers, directed interaction loop) now emit updateTypeHint: (byte)UpdateTypeHint.{hint} at each UpdateAttributeValuesAsync / SendInteractionAsync / SendDirectedInteractionAsync call.
  • using Fora.Telemetry; added to generated SimulationManagerBase: The generated file imports Fora.Telemetry so UpdateTypeHint is resolvable without fully-qualified names.
  • UpdateTypeHint Distribution table now populated: Chat-Headless sample shows User=OnChange, Poll=Conditional, ChatGroup=Conditional, all ICs=Unspecified (no IC volatility analysis yet).

Stage 4 — ScenarioStepId / Workload Phase Annotation (Complete)

  • SetScenarioStep(byte) API on IForaClient / ForaClient / InstrumentedForaClient: Callers set the active workload phase; stored as volatile byte _scenarioStep in TelemetryEmitter and written into ExtensionField3 of every subsequent ENC event. NullTelemetryEmitter no-ops. Default interface method on ITelemetryEmitter maintains backward compatibility.
  • Generated SimulationManagerBase emits three phase markers: SetScenarioStep(1) immediately after ConnectAsync/CreateFederationExecutionAsync (Setup), SetScenarioStep(2) before the main simulation loop (Steady-State), SetScenarioStep(3) at the start of CleanupAsync (Teardown).
  • telemetry_version bumped to 1.4 in ManifestWriter.
  • ValidationHarness consumes ExtensionField3: AccumulateClassStat tracks Dictionary<byte, StepStat> per class; AppendWorkloadPhaseBreakdown emits a per-class, per-phase event/payload table in ValidationReport.md.
  • Fix: SetScenarioStep(1) timing corrected — moved from before ConnectAsync (where it hits NullTelemetryEmitter) to after the connect/create-federation block so the real emitter is live.

Stage 5 — ValidationReport v2 Evidence Format (Complete)

  • ValidationReport.md upgraded to a v2 evidence structure: SimGe.ValidationHarness now emits a paper-oriented report layout with Validation Scope, Design Baseline Contract, Runtime Observation Contract, Metric-to-Correlate Validation Matrix, Hotspot Analysis, Latency Decomposition Evidence, Instrument Credibility and Confound Control, and Scope, Limits, and Non-Claims.
  • Telemetry sample documentation split into shared and scenario guides: Chapter 16 now points to Architecture/16A_Telemetry_Samples_and_Harness_Usage.md for shared harness usage and to Architecture/16B_Telemetry_Sample_Scenarios.md for concrete Chat-Headless and Restaurant scenario definitions, keeping the integration chapter architecture-focused.
  • Manifest and sampler metadata surfaced in the report: ValidationHarness now reads run-level manifest metadata (experiment_id, scenario, runtime, Fora version, telemetry version, hardware envelope, overhead fields) and reports MEMORY / RTI_STATE telemetry samples as confound-control evidence.
  • Direct WHL_IC dispatch correlate enabled: Fora client-side DEC_IC telemetry now exports dispatch_resolution_ns through the DispatchNotification sub-phase hook. Canonical Chat-Headless and Restaurant validation reports therefore promote WHL_IC from indirect evidence to Direct / Supported.
  • Restaurant report parse scope fixed: single-run validation now parses only top-level .fort files for the active output directory, so root Restaurant reports no longer accidentally absorb VariantA, VariantB, or other nested experiment artifacts.
  • Class-level uncertainty surfaced explicitly: runtime class tables now emit Avg Payload ± σ and Avg Duration ± σ; selectivity verdicts now fall back to Unverifiable (n=...) when the active steady-state ENC sample count is below the minimum verdict threshold.
  • EventId-correlated decomposition enabled: validation reports now consume sender/RTI/receiver correlation chains and emit chain-aware latency decomposition rather than only global event averages. Canonical Chat-Headless and Restaurant reports now show non-zero correlated object and interaction path coverage.
  • Phase-aware correlated reading: Section 7 now prefers steady-state correlated chains over all-phase aggregates and reports both steady-state and all-phase EventId coverage, reducing warm-up contamination in latency interpretation.
  • RTI object-path split surfaced in reports: validation reports now expose SUB_MATCH.lookup, SUB_MATCH.filter/DDM, DIST_OC.prep, DIST_OC.materialization, and DIST_OC.network dispatch as first-class object-path rows. SUB_MATCH.lookup folds Fora's hierarchy-resolution and candidate-lookup slots, while SUB_MATCH.filter/DDM folds attribute filtering and DDM overlap so the report preserves total timing under the telemetry 1.9 object-class contract.
  • Object delivery separation: validation reports now read DIST_OC.ExtensionField1 as eligible subscriber count, DIST_OC.SubscriberCount as delivered subscriber count, and DIST_OC.ExtensionField2 as filtered-out subscriber count. Per-run and per-class object-path tables surface these counts so fan-out, attribute selectivity, and DDM filtering are no longer conflated.
  • Generated DEC_OC decode/apply scopes: Fora code generation now emits AmbientTelemetryScope.EnterAttributeDecode() around generated object decode paths and AmbientTelemetryScope.EnterEntityProxyApply() around generated entity proxy apply paths, standardizing DEC_OC.SubPhase1Ns and DEC_OC.SubPhase2Ns for receiver-side object telemetry.
  • Readable property-set evidence: PropertySetId analysis no longer stops at hash output; validation reports now resolve observed attribute/parameter subsets into human-readable member lists for selectivity and operational-drift reading.
  • Logical cycle / iteration coverage: SimGe samples now annotate repeated semantic loops via SetScenarioIteration(int) and validation reports expose decoded LogicalCycleId coverage under Section 6.2A, making per-round and per-customer runtime reading explicit.
  • W_i ↔ runtime correlation surface added: Section 4 now includes a raw class-by-class table showing design semantic weight W_i alongside Avg ENC, payload, instance count, and n, plus a directional Spearman ρ summary for pilot-scale design/runtime correlation reading.
  • Warm-up contamination visibility increased: Section 3 now reports ENC_OC (steady-state) as a first-class event-surface row, and findings emit an automatic ENC_OC Warm-Up Contamination drift when setup/unclassified ENC_OC traffic dominates the run.
  • Run-level validation integrity diagnostics added: findings now emit FOM SHA Mismatch (CRITICAL) when design-time and runtime FOM hashes diverge, High Duration Variance Indicates Warm-Up / Phase Mixing when class duration CV exceeds 1.0, and Low Statistical Coverage when verdict-bearing steady-state ENC coverage remains below MinSampleForVerdict.
  • Natural Convergence of FOM SHA-256 Checksums: Resolved the dynamic timestamp comment mismatch (<!-- Generated by SimGe at ... --> added to XML files) between design-time and build-time generation. Both CFomMetricsMetadataGenerator_Fora and ValidationHarness now strip XML comment nodes before calculating the SHA-256 hash. This enables the design-time, runtime, and manifest FOM checksums to converge naturally on the exact same signature value, eliminating the FOM SHA Mismatch warning.
  • Validation and telemetry reliability reports split: ValidationReport.md now focuses on design-metric runtime validation, while TelemetryReliabilityReport.md is generated only when --measure-overhead is used and carries repeated OFF/ON overhead evidence plus instrumentation credibility findings.
  • Harness made sample-extensible and artifact-safe: ValidationHarness now routes sample-specific paths, names, and scenario summary text through a SampleDefinition descriptor selected with --sample <key>, preserving a generic orchestration/report pipeline for future samples. Normal validation runs also preserve and re-emit linked design artifacts (*-Module-Analysis-Report.md, *-Semantic-OC.md, *-Semantic-IC.md, *-Topology.md, *-Archetype.md) instead of deleting top-level markdown files during telemetry output cleanup.
  • --repetitions defaults to 5: The pooled-replication default now matches the documented spec floor (Fora Ch.5 §2.4) instead of 1, so default runs (including the validation run emitted after --measure-overhead) no longer raise spurious low-coverage Drift 005 / Drift 007 warnings. Pass --repetitions 1 for a fast single-pass smoke run.

Maintenance

  • One-Way Converter Hardening: ConvertBack in 22 value/multi-value converters no longer throws NotImplementedException/NotSupportedException. These converters are display-only (one-way); throwing meant that if a binding's mode ever became two-way, the binding engine would raise a runtime exception. They now return Binding.DoNothing (single-value) or null (multi-value) so the source is simply not updated. (Adding converter unit tests remains a recommended follow-up.)
  • Converter Filename Fix: Renamed BooleanToVisibilityConverter .cs (which had a trailing space before the extension) to BooleanToVisibilityConverter.cs. The stray space produced a fragile path for repo tooling, scripts, packaging and cross-platform checks; the class name and namespace were unaffected and the project uses globbing, so there is no reference impact.
  • Legacy Dead-Code Cleanup: Removed legacy UI files that were excluded from compilation but still lingered in the repository (NewOmtItemVM/NewOmtItemView, NewDimensionVM, the old omde/TableView NotesView/TagsView, and LegacyDiagramDefinition), and purged the now-stale <Compile Remove> / <Page Remove> entries (including several that already pointed at deleted files such as OmExplorerVM, CodeExplorerVM, FamExplorerVM, and the legacy OMD geometry pipeline). No behavioral change — these types were not compiled into the assembly and had no live references.
  • WPF Temp Files and gitignore Hardening: Cleaned up legacy WPF temporary project files (*_wpftmp.csproj) from the working directory and updated .gitignore rules to recursively ignore all temporary compilation files and build artifacts across the entire repository.
  • CI/CD & Release Docs: Expanded the architecture CI/CD chapter (Architecture/13_CI_CD.md) to document the build topology and the installer publish→harvest→MSI pipeline (commands, output locations, versioning source, and how dependency changes flow into the MSI). Release Management moved into the architecture set as chapter 17 (Architecture/17_ReleaseManagement.md), with its links and the wiki index updated accordingly.
  • Dropped Azure Pipelines: Removed the unused (and stale) azure-pipelines.yml and all Azure CI references from the docs; builds and tests are now run locally with the .NET SDK. The repository is local-only (Azure DevOps remote removed).
  • Installer Resource Cleanup: Deleted stale, unreferenced setup resources that were never packaged into the MSI — the legacy .NET Framework 4.8 Resources/Runtime/SimGe.exe.config (plus Options.xml, a SimGe.runtimeconfig.json snapshot, and an old MIM .fed), and the entire 2017-era Resources/Samples/Datatypes sample (which was not part of the installer). The shipped config (SimGe.dll.config, harvested from the .NET 10 publish output) is empty, so no stale framework config reaches the MSI. Documented an MSI installed-folder smoke test and a "regenerate bundled samples before release" step in the Release Management and CI/CD chapters.
  • Removed Unused Signing Certificate: Dropped the dangling simge_sign.pfx (a password-protected self-signed certificate that was never wired into any signing step and provided no SmartScreen/Authenticode benefit) — removed its <None Include> references from the project files and deleted the scattered copies. Assembly strong-naming continues to use private.snk. Code signing, if needed for distribution, should use a CA-issued certificate.

[0.4.6] - 2026-05-20

Dashboard

  • Module Analysis Scope Selector: The Module Analysis Dashboard now has a Composed / Module Only segmented control in the toolbar. Composed merges the dependency chain via FomCompositionEngine; Module Only analyzes module.Content - the FOM tree with inheritance - without running composition.
  • Module Only Inspector: In Module Only mode the Classes card now shows a declared / inherited breakdown. Declared classes are explicitly defined in the module; inherited classes are FOM-tree scaffolding nodes grouped by parent class.
  • Dashboard UX refresh for the Module Analysis Dashboard: cleaner section rail, tighter header/content composition, and compact detail surfaces.
  • Object Model Archetype calibration is now live: threshold changes immediately update the gauge, archetype classification, summary text, and dashboard report language.
  • SSI gauge tooling was visually aligned with the archetype card through compact info/calibration actions and a refined calibration panel.
  • The Overview summary was reformatted to match the generated report summary style, and the Object Model Archetype row now uses a balanced split layout with the summary on the left and the archetype graph on the right.
  • Architectural metric ownership was tightened: R, A, archetype classification, DME_w, FCI_norm, TDF, and structural propensity scores are now computed in MetricAnalysisService as the single numeric source of truth.
  • Volume metrics were redesigned around a compact card grid plus a dedicated Metric Inspector, replacing inline expansion with a stable right-side detail pane.
  • Direct volume metrics now use HLA/FOM-oriented explanations in the inspector, including explicit Direct metric computation notes instead of misleading "no formula" placeholders.

Workspace

  • Floating Windows: Workspace tabs can now be detached into separate floating windows and docked back into the main tab strip.
  • Tab Context Menu: Added Close This to the right-click context menu alongside the existing Close All and Close All But This entries.

OME (Object Model Environment)

  • OME FDD Viewer validation workflow was upgraded: DIF, FDD, and OMT schemas are now user-selectable with DIF as the default; validation reports now include richer element-name context for schema errors; and HLA 4 tag export no longer serializes dataType when the model value is NA.
  • OME reference data type editing now accepts reserved referenced-attribute identifiers such as HLAobjectInstanceHandle and HLAobjectInstanceName even when no physical root attribute node exists in the in-memory model.
  • OME MOM integration was hardened: MOM-marked elements now merge generically into the active module, and OME table views now stay in sync with Project Explorer when MOM content is toggled on or off.

Object Model

  • OMT 2025 export/validation alignment was improved: unused HLA 4 tags are now suppressed, basicData/endian is always emitted, and standards-based exports no longer serialize HLAobjectInstanceHandle / HLAobjectInstanceName as normal HLAobjectRoot attributes.
  • SimGe's internal 2025 MIM/runtime policy was clarified: HLAobjectInstanceHandle and HLAobjectInstanceName are now treated as reserved reference semantics rather than materialized root attributes, with editor and re-export support preserved for referenceDataType/referencedAttribute.

Documentation

  • SimGe Wiki architecture and standards notes were updated for the 2025 MIM/root-attribute policy, the IEEE 1516-2025 OMT schema discrepancy around referenceDataType/representation, and the expanded metric ownership/archetype-strength model.
  • Model metrics documentation was updated to distinguish computed architectural metrics from direct volume counters, clarify OC/IC Ratio ownership, and classify 0/0 semantic-mass cases as Non-Semantic Support rather than Hybrid.

[0.4.5] - 2026-05-11

Dashboard - Object Model Archetype Card

  • New Visual Card: The Architecture section now displays a compact, read-only Object Model Archetype card alongside the existing metric cards.
  • Terminology Update: Renamed "Model Character" to Object Model Archetype throughout card labels, analysis report sections, summary text, and internal API (Archetype / ArchetypeDescription on OmModelStatistics).
  • Info Panel: Clicking the info button expands the Semantic Mass Equilibrium formula block (Section 3.4) with copy-to-clipboard support.
  • SSI Tooltip Alignment: Corrected Semantic Saturation Index dashboard help and gauge behavior to match the current metric model.

OME (Object Model Environment)

  • Time Representation Semantics Validation: Semantics is no longer required when a DataType is selected, matching the IEEE 1516-2025 DIF/FDD schema (0..1 cardinality).
  • Services Table: Fully redesigned to restore WPF row virtualization, group services by IEEE 1516-2025 chapter, support bulk IsUsed toggles, and avoid unwanted navigation jumps.
  • Copy Table - Markdown: The Copy Table command now outputs GitHub-flavored Markdown for all table tabs. The Services tab additionally wraps output in ## chapter group headings.

Deployment

  • Version Sync Fix: SimGe.Setup/Product.wxs version is now driven from Directory.Build.props via DefineConstants, eliminating manual version maintenance in the WiX project.

Code Generator

  • Metric-Driven Variants: Fora code generation now supports metric-driven specialized outputs behind EnableMetricDrivenVariants, including specialized object codecs, delta-tracker hooks, and optional generated dispatch tables.
  • Shared Metric Core: Code generation metrics are now derived from the same shared analysis layer used by dashboard statistics, reducing drift between dashboard metrics and generator decisions.
  • Generator Strategy Fixes: Corrected strategy gating so delta-tracker code is emitted only when the corresponding tracker is generated, and dispatch-table output remains disabled in legacy generation unless the metric-driven flag is enabled.

[0.4.4] - 2026-05-02

OME (Object Model Environment)

  • Parameters Table Remove Button Fix: The Remove button in the Parameters TableView was bound to DeletePocCommand instead of DeleteOmtElement. Corrected to use the standard element deletion command.
  • IC/OC PS Default Value: New Interaction Class and Object Class instances now default PS to Neither instead of null, preventing invalid states in editors and code generators.
  • IC/OC P/S TableView Refresh: Changing Publish/Subscribe state in the IC or OC editor now immediately reflects in the TableView P/S column.

Code Generator

  • Fora FomSharing Generation Fix: Models.simge.cs no longer emits HlaSharingType. for classes with no PS value set.
  • Automatic FDD Standard Routing: CodeGenerate now exports the generated FDD using the active code generation target standard.
  • Decoder Dispatch Fix: Fixed generated Decoder.simge.cs object-family dispatch methods to avoid duplicate Decode(...) signatures and to route decoding with the actual discovered object class handle.
  • Unsigned Primitive Support: Fora code generation now maps HLA 4 unsigned integer representations to byte, ushort, uint, and ulong and emits matching encoder-decoder helpers.

Object Model

  • FOM/SOM Rename Persistence Fix: Renaming a FOM/SOM module from Project Explorer now immediately persists the renamed module metadata and refreshes the .fom repository index.
  • OME TableView Refresh Fix: Copy-paste operations from Project Explorer now correctly refresh open OME TableView hierarchies.
  • Datatype-Aware Copy/Paste: Project Explorer copy-paste now carries required user-defined datatype dependencies with the pasted OMT element.

FAME (Federation Architecture Modeling Environment)

  • Full UML Deployment Diagram: The Deployment Diagram was redesigned around explicit RTI infrastructure, network bus, nested environments, and clearer component architecture.
  • Diagram Rendering Fixes: Fixed blank-render and null-layout issues, improved legend/canvas layout, and reduced text overlap.
  • FSD Note Icon: The Federation Structure Diagram now shows note-style module markers for federation FOM and federate SOM references.
  • Toolbar Cleanup: Federate add/remove actions were consolidated into the dedicated Federate Apps tab.
  • Jump to OMT: Added quick-navigation buttons from FAME module selectors into OME.
  • Rich Tooltips and Diagnostics: FSD now exposes richer hover information, visual multiplicity cues, connection interpretation, live diagnostics, and an explicit legend.

UX & Modernization

  • Workspace Tab Context Menu: Added Close All and Close All But This operations for closable workspace tabs.
  • MOM Explorer Integration: Added a read-only MOM system library under Project Explorer.
  • Native Drag-and-Drop: OMT elements can now be dragged and dropped between modules using the established copy-paste infrastructure.
  • Technical Debt Cleanup: Refactored internal repository logic and addressed legacy serialization warnings to prepare for advanced code scaffolding.

Infrastructure

  • SSI Interpretation Logic Update: Refined SSI_n interpretation for Interaction Class domains and standardized the concrete-population gate.
  • WHL & S_top Calibration: Improved the Weighted Hierarchy Load and Topological Skewness formulas with epsilon-floor normalization to handle skeletal models and flat hierarchies gracefully.

[0.4.3] - 2026-04-20

Documentation

  • SimGe Wiki Established: Created the documentation portal in docs/SimGeWiki.
  • Merge Rules Documented: Added detailed IEEE 1516-2025 Annex C merge-rule documentation.
  • Diagrams Documented: Added User Manual sections for Directed Interactions Diagram and FOM Modules Dependency Graph.

Code Generator

  • Fora Compatibility: Generated federate code targets the IEEE 1516-2025 HLA Federate Protocol via the Fora Fora.Client library; generated README compatibility metadata now resolves the client version from the target project when available.
  • Async Lifecycle: Generated SimulationManager provides async federation lifecycle (connect -> create -> join -> init handles -> resign -> dispose).
  • UTF-8 Tags: Tag constants are generated as ReadOnlySpan<byte> with C# UTF-8 string literals such as "NA"u8.
  • Clean Scaffold: Manual partial federate class is generated without legacy inheritance for a Fora-only scaffold.

Diagram Editor

  • New Infrastructure: Completely redesigned diagram infrastructure.
  • Directed Interactions Diagram: Added support for visualizing directed interactions between classes.

Project Explorer

  • OMT Element Copy/Paste: Added support for copying and pasting user-defined OMT elements between FOM/SOM modules.

[0.4.2] - 2026-04-10

FOM Module Composition

  • Composition Report: Added a report for analyzing module composition.
  • Enhanced Operations: Added support for multiple import, renaming, and duplicating FOM modules.

Dashboard & Analytics

  • UI Overhaul: Redesigned dashboard featuring architectural complexity metrics and notes.
  • Architecture Profile Radar: Added a radar chart for visualizing model architecture profiles.
  • Dependency Graph: Added the FOM Modules Dependency Graph to the Start Page with image export support.

OME (Object Model Environment)

  • Table Editor: Added a consistent "Edit Notes" button across OMT editors with a redesigned NoteSelector dialog.
  • Diagram Editor: Diagrams now display base classes and properties from dependent FOM modules.

Infrastructure

  • Modernized Preferences: Added a JSON-based preference system with per-user settings such as reopening the last project.
  • Project Format: Transitioned .fam project files to JSON format.

[0.4.1] - 2026-03-01

OME (Object Model Environment)

  • Modernized Platform: Comprehensive update to the OMT editing environment using WPF dialog-based editors.
  • Data Type Management: Added dedicated editors for simple, enumerated, array, fixed record, variant record, and reference data types.
  • POC Management: Improved point-of-contact management with structured views and better validation.
  • Standards Infrastructure: Enhanced FDD and MIM handling; improved restoration of model element types after import.

User Experience

  • Get Started Splash: Added a centralized dialog for creating, opening, and browsing projects with quick access to recent samples.

[0.4.0] - 2024-02-24

Architecture & Standards

  • HLA 4 Ready: Alignment with IEEE 1516-2025 (HLA 4) modeling practices.
  • Modular FOM: Automatic composition of base and dependent modules.
  • Model Intelligence: OMT Intelligence Dashboard featuring architectural complexity metrics and health diagnostics.

Disclaimer

See Disclaimer for usage terms and research-only environment conditions.


Updated June 25, 2026, 16:28:09