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 structuredCampaignSampleSummary.jsonalongside the MarkdownValidationReport.md. - Cross-Model Confirmatory Statistics: Added the
CampaignMatrixstatistics layer — Spearman rank correlation with exact small-npermutation 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-levelConfirmatoryValidationMatrix.mdthat 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 immediatelyJoin()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 withTask.Runwhile the shared busy indicator is shown, and only the WinFormsReportViewerrender is marshaled back to the UI thread.
Code Generator¶
- Generated API Summary README: Fora code generation now emits
README.generated.mdin each federate output root, next toSimulationManager.cs,[Federate].cs, and theGenerated/tree. The README summarizes generation provenance, the embedded Fora API profile, optional target-projectFora.Clientversion 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.jsonprofile, a developer-onlytools/Update-ForaClientApiProfile.ps1helper, and a Visual Studio-friendlytools/Update-ForaClientApiProfile.cmdwrapper that refreshes the profile from a local Fora repository. SimGe reports the profile it targets without requiringFora.Clientto be installed as a SimGe dependency. - Generated Fora Header Compatibility: Generated Fora source-file headers now report
Fora.Clientcompatibility 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/CG1021Fora contract validation diagnostics in the post-generation dialog and inREADME.generated.md; missing bundled snapshots are reported asNotRunrather than blocking generation. - Fora Call Writer Centralization: Routed generated Fora service-call emission through
ForaClientCallWriterfor 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 bundledFora.ClientAPI 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). MadeRecordFieldinherit fromObservableObjectto support proper property change notifications in the editor grid. HandledBrokenDataTypeNameresolution 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
logicalTimeelements without adataType. - 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
dataTypeKeyerrors 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
NAsentinel 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 internalNAsentinel, 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
LocationStructno longer selects the longer siblingLocationStructArray. 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,Enterto 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
LocationStructare 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.ValidationHarnessto read Fora manifest clock-alignment evidence, surface it inValidationReport.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.ValidationHarnessto consume the local Fora20260628.0.0package 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_OCevidence. - 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.ValidationHarnessreport 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 ofValidationReport.md. - Garbage Collector Tuning for Headless Scenarios: Enabled
<ServerGarbageCollection>true</ServerGarbageCollection>and<ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>in theNETN-CBRNscenario execution project to leverage background parallel collection threads, reducing the steady-state GC pause contamination rate in multi-federate runs from5.82%to0.72%. - NETN-CBRN Property-Set Normalization: Updated
SimGe.ValidationHarnessto normalize pooledPropertySetIdevidence by resolved member names when repeated runs use run-local RTI handles. NETN-CBRNHumanupdates now collapse to the two semantic update sets (TriageLevelandExposures/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, andPProws, 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_OCFull-State Evidence: Added a NETN-CBRN controlled full-state object-update pass and validation-harness aggregation for the7000logical-cycle band. The report now separates full-stateCV_p_OCevidence 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_mapemitted by Fora telemetry2.0manifests 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.0manifests 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
WorldLocationStructStandards Note: Added a standards-facing note documenting the unresolvedTrackStruct.Location -> WorldLocationStructreference inNETN-ETR.xml, the evidence thatLocationStructis 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) andDashboardSummaryRenderer(dashboard overview), alongside the existing module-report renderers. Dead legacy classification helpers were removed from the structural-risk heatmap control. - Code-Generation Hints:
CodegenStrategyMapperderives 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 advisoryCG1010diagnostics in the Fora generation run. These never change emitted code;EnableMetricDrivenVariantsremains 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 inBrokenDataTypeNameand 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.Parentre-assignments through a singleSetParentCorefunnel 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 makesParent = nullnull-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.AppendChildnow performs re-parenting atomically — it removes the element from its previous parent'sChildren(viaDetachChild) 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 returnsfalseinstead 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 singleCOmtElement.DetachChildentry point that cleans up both directions together — collection membership, the child'sParentpointer, and both bubbling subscriptions (SelectedItemChanged,RelationChanged).RemoveChilddelegates to it, andRemoveSelfnow routes through the parent'sDetachChildinstead of bypassing the domain API with a rawChildren.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.Childrencan 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. AddedInsertChild(atomic positioned add/re-parent),MoveChild(same-parent reorder to a final index), andClearChildren(detach all) alongside the existingAppendChild/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. Childrenis Now Compile-Time Read-Only:COmtElement.Childrenis exposed asIReadOnlyList<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 nameChildren(a round-trip test guards the.fap/.sfomformat), so existing projects load unchanged. A newIndexOfChildreplaces collectionIndexOffor callers that need a position, and explorer observation now binds to the live collection throughIBindingList(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.CloneandCopyBaseValuesFrom(the edit-draft create/apply path) now deep-copy the Notes dictionary via a sharedCOmtElement.CloneNoteshelper — a fresh dictionary, fresh per-key lists, and freshCOmtNoteinstances. 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 sharedCOmtNoteinstances even though they cloned the dictionary. - Case-Sensitive Name Uniqueness: Sibling duplicate-name validation is now case-sensitive (
Ordinal), matching the case-sensitiveContainscheck and IEEE 1516.2-2025 §3.3.1 (OMT names are case-sensitive).COmtElement.ContainsAnotherand the drag-drop move collision check (WpfOmtEditorHost) no longer reportFooandfooas 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 childfoono longer falsely resolves to — or is reported as shadowing — aFoo. - OMT Name Validation Corrections: Fixed the element/datatype name-character class typo
[a-zA-z…]→[A-Za-z…](the buggy range had accepted[ \ ] ^ _ `). The datatypeDiscriminantreserved-name check now rejects only the exact nameNA(any case) instead of any name starting with those letters (Navy,nameare valid again), and datatypeDiscriminant/Alternativenames now allow the hyphen-permitted by §3.3.1, consistent with the elementNamevalidator. - Removal of Inconsistent ParentUI Property: Completely removed the redundant and inconsistent
ParentUIproperty and its backing field fromCOmtElement, ensuring that the canonicalParentpointer is the single source of truth for all parent-child hierarchy mutations and queries. All references and XML doc comments were aligned to the canonicalParent. - 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 (
Nameproperty) by fallback delegation to base validation. Implemented strict merge conflict validation checking inFomCompositionEngineso synchronization points with identical labels must have matching sub-elements (DataTypeName,Capability,Semantics), throwing aFomMergeConflictExceptionotherwise.
Validation¶
- Schema-Valid Data Type Export: The IEEE 1516-2025 writer no longer emits SimGe's internal
NAsentinel 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 allowdataTypeto 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 asNAor empty. - Unified Modern Toolbar Styling: Refactored the dated WPF
ToolBarandToolBarTraystructures across the application. Replaced the multi-band MainView toolbar inMainWindow.xamlwith 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/FamPropertiesViewtoolbars and inline action buttons), and OME diagram views (MsaglDiagramViewtoolbar and controls) to establish a consistent, premium design language. Additionally, modernizedIconBaseStyleby removing the independent hover background fromMaterialIcon(which previously drew visually clashing, sharp-corneredLightBlueboxes nested inside button boundaries) and dynamically bound the icon's foreground to its parent control's inheritedTextElement.Foregroundstate to ensure seamless visual transitions.
Workspace¶
- Memory Leak and OnDispose Cleanups: Resolved a memory leak in
CProjectManagerVMby refactoring theStatusBarService.Instance.StatusChangedsubscription to use a named handler method and unsubscribing from it inOnDispose(). Also removed a redundant, danglingif (_projectService != null)block inOnDispose()that incorrectly wrapped the local collections cleanup block. - FomModuleVM Memory Leak Fix: Resolved a memory leak in
FomModuleVMby converting anonymous lambda event subscriptions forFomModulemodel and collection changes to named event handlers and unsubscribing from them inOnDispose(). - FomDashboardViewModel Memory Leak and Disposal Fix: Resolved a memory leak in
FomDashboardViewModelby converting its anonymous_moduleVM.PropertyChangedsubscription to a named event handler and unsubscribing from it inOnDispose(). Additionally, ensured that theCancellationTokenSourceinstances 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
MsaglDiagramViewby 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
MsaglDiagramViewto 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
VariantRecordEditorViewModelby replacing the globalApplicationServicesProviderreference with the constructor-injected_visualizerservice when opening the notes editor dialog. - Missing Installer Sample Files: Added the missing
ChatBasicFomandChatBasicSomXML 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 (
.sfommetadata /.xmlcontent) 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.sfomand verifies its persistent moduleIdagainst 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 (newIOmService.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.TraceWarningandDebug.WriteLine. If strict mode is enabled (defaults to true under#if DEBUGconfiguration), it throws anInvalidCastExceptionto quickly surface integration errors in tests and logs instead of failing silently with a no-op. The behavior is configurable via theRelayCommandConfig.ThrowOnInvalidCastproperty. - 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.Movewith overwrite. This protects the active FAM configuration (.sfamfiles) 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.Movewith 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.jsonunder 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.xmlunder ProgramData) and the associatedCOptionsclass. All settings and the MRU list are now fully unified under the user-level JSON preferences store (preferences.jsonunder AppData), making it the single source of truth for the application's runtime preferences. Direct references toCOptionsandOptions.xmlthroughout the ViewModels (CProjectManagerVM,CStartupDialogVM), views (MainWindow.xaml.cs), and startup lifecycle (App.xaml.cs) have been removed, and theCRecentProjectsWPF menu control is now dynamically bound directly to the JSON-basedJsonMruPersisterstrategy. - 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, andEscapeParagraph). 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
SaveProjectInternalAsynchelper accepting an explicit target path. This ensures thatSaveProjectAsAsyncpasses 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) wheneverProjectHomeFolderorSourceCodeFolderchanges. 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-catcherror dialog from the View layer (MsaglDiagramView.xaml.cs) and letting exceptions bubble up. InjectedIMessageBoxServiceinto DiagramDocumentVM.cs to catch these exceptions and show unified success or failure alerts in a single ViewModel layer. - Honest Synchronous Dialog API:
IUIVisualizerServicenow exposes a real synchronousShowDialog(the actual WPF modal call, which blocks until the dialog closes) alongside the existingShowDialogAsync, which is now a thin sync-completing wrapper. The OMT item-editor facade (OmtItemEditorService) callsShowDialogdirectly instead ofShowDialogAsync(...).GetAwaiter().GetResult(), removing a misleading async surface and a latent sync-over-async deadlock trap. Behavior is unchanged (WPF dialogs were always modal/blocking); remainingShowDialogAsynccallers 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, andHLAothermaps 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[], andContourStruct[]. Reserved FOM names such asTaskuse 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
CG4004when 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 like2D-Position, or digit-leading names) no longer produce non-compiling generated code. Names are routed through a centralCSharpIdentifier/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.ValidateForGenerationgate 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 sharedPathSafety), or FOM-name collision. - Modern Fora Subcomponent: The IEEE 1516-2025/Fora generators were extracted into a self-contained
SimGe.CodeGenerator.Foranamespace driven by an explicitForaGenerationPipeline(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
CG2001error 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.mdto 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 thatDEC_IC.DurationNs,SubPhase1Ns, andSubPhase2Nsare 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, andDisk) on the Fora telemetry engine. AddedTelemetryMemoryFlusherto process buffer records without disk writes for memory-only runs. Integrated micro-instrumentation benchmarks viaTelemetryOverheadMeasurer.MeasureInstrumentBenchmarksAsync()to measure pure instrumentation, serialization, buffering, and disk/sub-phase overheads. Added a union-basedFastGuidgenerator and conditional GC pause duration queries to reduce pure hot-path instrumentation overhead to under 480 ns/event (down from 914 ns/event). Added theINSTRUMENT_OVERHEAD: WithinBudget / ExceedsBudgetverdict 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
ActiveWindowunion instead of a naive duration sum.ValidationReport.mdnow includes Section 7.4 clock diagnostics with raw per-chainEndToEnd,ActiveWindow, andResidualRawvalues; 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.xmlby anchoring the relative path toAppContext.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>onSimGe.Model,SimGe.Application, andSimGe.UI, which used?/!reference-type annotations without an enabled nullable context. This clears allCS8632warnings (solution-wide 4320 → 0) with no behavioral change; flow-analysis warnings remain suppressed for these projects. - AsyncRelayCommand Error Surfacing: Added an optional
Action<Exception> onErrorcallback to theAsyncRelayCommand/AsyncRelayCommand<T>constructors. The existing catch still logs viaTrace.TraceErrorand 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 Modulesnow 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.Setupno longer hand-lists ~44 dependency DLLs sourced from the shared../Binbuild folder (which risked stale/missing files and Debug/Release leftovers, and required manually adding every new NuGet dependency). The wixproj now runsdotnet publish(framework-dependent) ofSimGe.UIinto apublish/folder, andProduct.wxsauto-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.exestays an explicit component (Start-menu shortcut +.fapassociation); 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.csandSimGe.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 indicatesUnsaved changes,All changes saved,Read-only sample, orNo projectas 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 changesuntil 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
DeafultOptionsFilestring-resource key toDefaultOptionsFileacrossStrings.resx, the generatedStrings.Designer.csproperty, and its single consumer (Options.cs). The key surfaces as a public member ofSimGe.Properties.Strings; with no external consumers it was corrected in place rather than aliased.
OME (Object Model Environment)¶
- Dirty/Save Tracking Alignment: OME
TableViewdirect-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
AttributeandParametereditors opened fromObject Class/Interaction Classeditors now preserve outerOK / Cancelsemantics by showing the current parent without allowing reparenting from that embedded context. - Property Editor Resolution Fixes:
AttributeandParametereditors 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
Addbutton now follows active-table capabilities more accurately and is visually disabled in unsupported tables includingTime Representations,Tags,Switches,Services, and non-POCIdentificationviews. - Tag/Time NA Selection Fixes:
TagandTime Representationeditors now correctly resolveNAdatatype 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
AddEditableTextwith 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
RenameAppInteractivedialog, 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_0if it already existed in the project). The creation action now dynamically computes a unique name (such asNewFdApp_1), and theRenameAppInteractiveservice 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.csagainst potential XML External Entity (XXE) and obsolete binary serialization security risks. The 14 legacySerializationInfoconstructors now immediately throw aPlatformNotSupportedExceptionat runtime to block binary deserialization attempts, and the associated legacySYSLIB0051compiler warnings are suppressed. Additionally, insecureXmlTextReaderinstances used to read schema metadata have been replaced with securely configuredXmlReaderinstances viaXmlReader.Createthat explicitly prohibit DTD parsing and disable external XML resolvers.
Code Generator¶
- Misleading ProjectName Refactor: Disentangled misleading uses of
ProjectNameinsideCodeGeneratorSettingswhen referencing the active federate class being generated. Introduced a separateFdAppNameproperty that dynamically binds to the federate application name, while keeping theProjectNamesettings 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 viaFile.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.ProjectNameusingPath.GetInvalidFileNameCharsto 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
EnableForaTelemetryproject 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 ambientEncodingTelemetryScopeblocks. - OC Sub-Phase Validation Surface: The validation pipeline now separates the object path into
ENC_OC.materialization,ENC_OC.serialization,DEC_OC.decode, andDEC_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 interpretWHL_OC,CV_p, andSSI_nagainst a more precise runtime breakdown. - Per-Class Design Metadata Emission (
CFomMetricsMetadataGenerator_Fora): Extended to emitOcClassDesignMetadataandIcClassDesignMetadatarecord types and staticOcDesign/IcDesigndictionaries into the generatedFomMetricsMetadataclass. Each entry carriesClassName,DeclaredCount, semantic weightW_i, and volatility flagsIsPeriodic/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 (
CodeGenDiagnosticwith severity/code/generator/class/file/exception, collected per run) isolates each generator step so one failing file no longer silently aborts the rest or returnsnullinto the file list. At the end of a run, a validation-style report dialog (the sameCValidationResultsVMsurface 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 underGenerated/, 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:FomMetricsMetadatahad no scaffold pair yet used.simge.g.cs, so it now uses.simge.cslike the other standalone generated artifacts (.simge.g.csis reserved for scaffold-paired partials such as entities). The convention is now documented explicitly inArchitecture/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.jsonand.fortlogs) 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_sha256is compared against the canonical SHA-256 of the active merged FOM (shared algorithm extracted toFomChecksumService, the same one used byCFomMetricsMetadataGenerator_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 ownmetric_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 (.fortlogs) captured. The card notes that each manifest is a single replication — pooling across independent runs remains aValidationHarness(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
.fortfile names), and the object/interaction class inventory (from the manifest handle maps). An optionalscenario.md/README.mdsidecar 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.mdand any*.mdsiblings), 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 siblingValidationReport.md; and instrumentation overhead is surfaced fromTelemetryReliabilityReport.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.ValidationHarnessfirst.
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:
ValidationHarnessreadsclass_handle_mapandinteraction_handle_mapfrommanifest.json(v1.1), resolves.fortClassHandleintegers to semantic class names, and builds per-classRuntimeClassStataggregations. - Per-Class Breakdown Tables:
ValidationReportnow 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
CastVoteto be markedContradicteddespite being the runtime frequency leader.
Stage 2a — Selectivity Analysis (Complete)¶
- Update Selectivity Section:
ValidationReportSection 6.1 now includes a per-class selectivity table:FOM All Members,Avg Sent,Selectivity %,Design Volatility, andVerdict. Selectivity =AvgEncAttributeCount / AllPropertyCountfromENC_OC/ENC_ICrecords, so inherited attributes/parameters are included in the denominator. - Volatility Verdict Logic:
Periodicclasses at ≥ 85% selectivity are Consistent;Conditionalclasses 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
AllPropertyCountrather than own-classDeclaredCount, 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_ForaemitsOcDesignandIcDesignstatic dictionaries so the running federate binary carries design-timeW_i, volatility flags, and declared counts without a separate FOM file at validation time. metric_snapshotInjection Path:TelemetryConfiguration.MetricSnapshot(new Fora field) can now carry domain-level baseline metrics from SimGe'sFomMetricsMetadataintomanifest.json fom.metric_snapshotat session start. The manifest v1.2 contract defines this as a SimGe-origin, Fora-carried field.
Stage 3 — Event Attribution (Complete, Fora v1.3)¶
PropertySetIdin.fortrecords:ValidationHarnessreadsExtensionField1fromENC_OC/ENC_ICrecords (written by Fora v1.3 as a FNV-1a hash of the sorted attribute/parameter handle set). Per-classPropertySetsdistribution is tracked inRuntimeClassStat.- "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. UpdateTypeHinttracking:RuntimeClassStataccumulatesUpdateTypeHintbreakdown counters (Periodic,Conditional,OnChange,Unspecified) fromExtensionField2. A distribution table is included in the Property Set Distribution section.- Manifest attribute/parameter map consumption:
ManifestHandleMapsandTelemetryManifestFomnow loadattribute_handle_mapandparameter_handle_mapfrom manifest v1.2/v1.3 for future reverse-map use. PropertySetIdClient/Ambassador-Side Hashing & Validation: Implemented client-side calculation of the FNV-1a hash of sorted attribute/parameter handles, passing it asExtensionField1(PropertySetId) for allENC_OC,DEC_OC,ENC_IC, andDEC_ICevents. Verified name resolution matches correctly in generated validation reports.InheritanceDepthPropagation: UpdatedTelemetryTokenandTelemetryEmitteron the client/ambassador side to pass and log the class/interaction hierarchy depth fromBeginEventtoEndEventinstead of logging0by default.
Stage 3b — UpdateTypeHint at Generated Send Sites (Complete)¶
UpdateTypeHintparameter added to publicIForaClient/ForaClientAPI:UpdateAttributeValuesAsync,SendInteractionAsync, andSendDirectedInteractionAsyncnow accept optionalbyte updateTypeHint = 0.InstrumentedForaClientupdated to forward the hint and pass it toEndEventasextensionField2.ClassCodeGen_SimMngr_Foraemits hint per class: AddedGetUpdateTypeHintLiteralhelper that mapsClassGenStrategy.IsPeriodic → Periodic,IsConditional → Conditional,IsStatic → OnChange, default →Unspecified. All three send-site generators (generateObjectHelpers,generateInteractionHelpers, directed interaction loop) now emitupdateTypeHint: (byte)UpdateTypeHint.{hint}at eachUpdateAttributeValuesAsync/SendInteractionAsync/SendDirectedInteractionAsynccall.using Fora.Telemetry;added to generatedSimulationManagerBase: The generated file importsFora.TelemetrysoUpdateTypeHintis resolvable without fully-qualified names.UpdateTypeHint Distributiontable now populated: Chat-Headless sample showsUser=OnChange,Poll=Conditional,ChatGroup=Conditional, all ICs=Unspecified(no IC volatility analysis yet).
Stage 4 — ScenarioStepId / Workload Phase Annotation (Complete)¶
SetScenarioStep(byte)API onIForaClient/ForaClient/InstrumentedForaClient: Callers set the active workload phase; stored asvolatile byte _scenarioStepinTelemetryEmitterand written intoExtensionField3of every subsequent ENC event.NullTelemetryEmitterno-ops. Default interface method onITelemetryEmittermaintains backward compatibility.- Generated
SimulationManagerBaseemits three phase markers:SetScenarioStep(1)immediately afterConnectAsync/CreateFederationExecutionAsync(Setup),SetScenarioStep(2)before the main simulation loop (Steady-State),SetScenarioStep(3)at the start ofCleanupAsync(Teardown). telemetry_versionbumped to1.4inManifestWriter.ValidationHarnessconsumesExtensionField3:AccumulateClassStattracksDictionary<byte, StepStat>per class;AppendWorkloadPhaseBreakdownemits a per-class, per-phase event/payload table inValidationReport.md.- Fix:
SetScenarioStep(1)timing corrected — moved from beforeConnectAsync(where it hitsNullTelemetryEmitter) to after the connect/create-federation block so the real emitter is live.
Stage 5 — ValidationReport v2 Evidence Format (Complete)¶
ValidationReport.mdupgraded to a v2 evidence structure:SimGe.ValidationHarnessnow emits a paper-oriented report layout withValidation Scope,Design Baseline Contract,Runtime Observation Contract,Metric-to-Correlate Validation Matrix,Hotspot Analysis,Latency Decomposition Evidence,Instrument Credibility and Confound Control, andScope, 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.mdfor shared harness usage and toArchitecture/16B_Telemetry_Sample_Scenarios.mdfor concreteChat-HeadlessandRestaurantscenario definitions, keeping the integration chapter architecture-focused. - Manifest and sampler metadata surfaced in the report:
ValidationHarnessnow reads run-level manifest metadata (experiment_id, scenario, runtime, Fora version, telemetry version, hardware envelope, overhead fields) and reportsMEMORY/RTI_STATEtelemetry samples as confound-control evidence. - Direct
WHL_ICdispatch correlate enabled: Fora client-sideDEC_ICtelemetry now exportsdispatch_resolution_nsthrough theDispatchNotificationsub-phase hook. CanonicalChat-HeadlessandRestaurantvalidation reports therefore promoteWHL_ICfrom indirect evidence toDirect / Supported. - Restaurant report parse scope fixed: single-run validation now parses only top-level
.fortfiles for the active output directory, so rootRestaurantreports no longer accidentally absorbVariantA,VariantB, or other nested experiment artifacts. - Class-level uncertainty surfaced explicitly: runtime class tables now emit
Avg Payload ± σandAvg Duration ± σ; selectivity verdicts now fall back toUnverifiable (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-HeadlessandRestaurantreports now show non-zero correlated object and interaction path coverage. - Phase-aware correlated reading:
Section 7now 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, andDIST_OC.network dispatchas first-class object-path rows.SUB_MATCH.lookupfolds Fora's hierarchy-resolution and candidate-lookup slots, whileSUB_MATCH.filter/DDMfolds 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.ExtensionField1as eligible subscriber count,DIST_OC.SubscriberCountas delivered subscriber count, andDIST_OC.ExtensionField2as 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 andAmbientTelemetryScope.EnterEntityProxyApply()around generated entity proxy apply paths, standardizingDEC_OC.SubPhase1NsandDEC_OC.SubPhase2Nsfor receiver-side object telemetry. - Readable property-set evidence:
PropertySetIdanalysis 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 decodedLogicalCycleIdcoverage underSection 6.2A, making per-round and per-customer runtime reading explicit. W_i ↔ runtimecorrelation surface added: Section 4 now includes a raw class-by-class table showing design semantic weightW_ialongsideAvg ENC, payload, instance count, andn, plus a directionalSpearman ρ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 automaticENC_OC Warm-Up Contaminationdrift 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 Mixingwhen class duration CV exceeds1.0, andLow Statistical Coveragewhen verdict-bearing steady-state ENC coverage remains belowMinSampleForVerdict. - 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. BothCFomMetricsMetadataGenerator_ForaandValidationHarnessnow 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 theFOM SHA Mismatchwarning. - Validation and telemetry reliability reports split:
ValidationReport.mdnow focuses on design-metric runtime validation, whileTelemetryReliabilityReport.mdis generated only when--measure-overheadis used and carries repeatedOFF/ONoverhead evidence plus instrumentation credibility findings. - Harness made sample-extensible and artifact-safe:
ValidationHarnessnow routes sample-specific paths, names, and scenario summary text through aSampleDefinitiondescriptor 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. --repetitionsdefaults 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 1for a fast single-pass smoke run.
Maintenance¶
- One-Way Converter Hardening:
ConvertBackin 22 value/multi-value converters no longer throwsNotImplementedException/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 returnBinding.DoNothing(single-value) ornull(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) toBooleanToVisibilityConverter.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 oldomde/TableViewNotesView/TagsView, andLegacyDiagramDefinition), and purged the now-stale<Compile Remove>/<Page Remove>entries (including several that already pointed at deleted files such asOmExplorerVM,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.gitignorerules 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.ymland 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(plusOptions.xml, aSimGe.runtimeconfig.jsonsnapshot, and an old MIM.fed), and the entire 2017-eraResources/Samples/Datatypessample (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 useprivate.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 analyzesmodule.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 inMetricAnalysisServiceas 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 metriccomputation 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
dataTypewhen the model value isNA. - OME reference data type editing now accepts reserved referenced-attribute identifiers such as
HLAobjectInstanceHandleandHLAobjectInstanceNameeven 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/endianis always emitted, and standards-based exports no longer serializeHLAobjectInstanceHandle/HLAobjectInstanceNameas normalHLAobjectRootattributes. - SimGe's internal 2025 MIM/runtime policy was clarified:
HLAobjectInstanceHandleandHLAobjectInstanceNameare now treated as reserved reference semantics rather than materialized root attributes, with editor and re-export support preserved forreferenceDataType/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 Ratioownership, and classify0/0semantic-mass cases asNon-Semantic Supportrather thanHybrid.
[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/ArchetypeDescriptiononOmModelStatistics). - 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:
Semanticsis no longer required when aDataTypeis selected, matching the IEEE 1516-2025 DIF/FDD schema (0..1cardinality). - Services Table: Fully redesigned to restore WPF row virtualization, group services by IEEE 1516-2025 chapter, support bulk
IsUsedtoggles, 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
## chaptergroup headings.
Deployment¶
- Version Sync Fix:
SimGe.Setup/Product.wxsversion is now driven fromDirectory.Build.propsviaDefineConstants, 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
DeletePocCommandinstead ofDeleteOmtElement. Corrected to use the standard element deletion command. - IC/OC PS Default Value: New Interaction Class and Object Class instances now default
PStoNeitherinstead ofnull, 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
FomSharingGeneration Fix:Models.simge.csno longer emitsHlaSharingType.for classes with noPSvalue set. - Automatic FDD Standard Routing:
CodeGeneratenow exports the generated FDD using the active code generation target standard. - Decoder Dispatch Fix: Fixed generated
Decoder.simge.csobject-family dispatch methods to avoid duplicateDecode(...)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, andulongand 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
.fomrepository 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_ninterpretation 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.Clientlibrary; generated README compatibility metadata now resolves the client version from the target project when available. - Async Lifecycle: Generated
SimulationManagerprovides 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
NoteSelectordialog. - 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
.famproject 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