SimGe Release Notes¶
[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¶
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 3 now includes a per-class selectivity table:FOM Declared Attrs,Avg Sent,Selectivity %,Design Volatility, andVerdict. Selectivity =AvgEncAttributeCount / DeclaredCountfromENC_OC/ENC_ICrecords; no.fortschema change required. - 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. DeclaredCountFix: Selectivity computation now usesDeclaredCount(own-class declared attributes only) rather thanAllPropertyCount(which included inherited HLA root attributes), preventing false low-selectivity readings.
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.region/finalize,DIST_OC.prep,DIST_OC.materialization, andDIST_OC.network dispatchas first-class object-path rows. In the current in-process reference RTI, the first twoDIST_OCcomponents usually remain near the timer floor while network dispatch dominates the observable server-side object cost. - 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: Compatible with Fora 0.0.1. Generated federate code now targets the IEEE 1516-2025 HLA Federate Protocol via the Fora client library.
- 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.