Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/ISSUE_TEMPLATE/release-candidate.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: Release candidate feedback
description: Report OpenDisNet 0.9 RC interoperability, API, performance, or documentation results.
description: Report OpenDisNet prerelease interoperability, API, performance, or documentation results.
title: "[RC feedback]: "
body:
- type: markdown
Expand All @@ -10,8 +10,8 @@ body:
id: version
attributes:
label: Package version
description: Enter the exact prerelease version, for example 0.9.0-rc.1.
placeholder: 0.9.0-rc.1
description: Enter the exact prerelease version, for example 1.1.0-rc.1.
placeholder: 1.1.0-rc.1
validations:
required: true
- type: input
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,4 +47,4 @@ jobs:
with:
dotnet-version: 10.x
- run: dotnet restore --locked-mode
- run: dotnet format --verify-no-changes --no-restore --exclude tests/OpenDisNet.Reference
- run: dotnet format --verify-no-changes --no-restore
31 changes: 30 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,22 @@
# Changelog

All notable changes are documented here. This project follows Semantic
Versioning after 1.0 and uses prerelease versions while conformance is incomplete.
Versioning starting with 1.0 and uses prerelease versions when conformance is
incomplete.

## Unreleased

## 1.0.1 - 2026-07-13

- Updated local package defaults and the binary-compatibility baseline for the
stable 1.x line.
- Replaced completed prerelease language with durable stable-release guidance.
- Corrected public XML documentation inherited from the generator schemas.
- Removed the unused generated C# reference project while retaining the compact,
independently produced conformance-vector corpus.

## 1.0.0 - 2026-07-13

- Added the 1.0 conformance audit manifest and report, pinning DIS schemas, SISO
data, independent vector corpora, family mappings, and the public API by
SHA-256.
Expand All @@ -14,6 +26,9 @@ Versioning after 1.0 and uses prerelease versions while conformance is incomplet
enforced low-or-higher transitive NuGet vulnerability auditing.
- Added pull-request dependency review, main-branch tag verification, package
checksums, and GitHub build-provenance attestations.

## 0.9.0 - 2026-07-13

- Froze the complete public C# surface with compiler-enforced API baselines and
NuGet package compatibility validation against OpenDisNet 0.8.0.
- Added an external-style smoke consumer that installs the packed artifact and
Expand All @@ -22,6 +37,9 @@ Versioning after 1.0 and uses prerelease versions while conformance is incomplet
structured GitHub feedback form.
- Corrected the `RadioId` construction example discovered by the package smoke
consumer.

## 0.8.0 - 2026-07-13

- Added deterministic populated conformance cases for all 72 DIS v7 PDU types,
independent byte vectors, and truncation checks at every byte boundary across
all 12 protocol families planned for versions 0.3 through 0.8.
Expand All @@ -30,6 +48,9 @@ Versioning after 1.0 and uses prerelease versions while conformance is incomplet
lengths and counts.
- Added conditional IFF information layers and polymorphic Information
Operations effect/communications records to the native C# codec.

## 0.2.0 - 2026-07-13

- Added strongly typed SISO-REF-010-2025 v36 enumerations for every DIS v7
schema reference, with .NET-style public names.
- Added structured bitfield value types with validated accessors, immutable
Expand All @@ -40,6 +61,14 @@ Versioning after 1.0 and uses prerelease versions while conformance is incomplet
lossless unknown-value compatibility tests.
- Made descriptive PDU names such as `AcknowledgeReliablePdu` canonical and
removed 20 empty acronym-based alias shells from the public model surface.

## 0.1.1 - 2026-07-13

- Replaced hand-authored Signal PDU payload bytes in documentation with
realistic application-produced audio examples.

## 0.1.0 - 2026-07-13

- Added solution foundation, DIS v7 framing, binary primitives, and defensive
unknown-PDU parsing.
- Added typed Entity State, Fire, and Detonation PDU parsing and serialization.
Expand Down
8 changes: 4 additions & 4 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ vectors, round-trip tests, and malformed-input tests. Run `dotnet test
--configuration Release` before opening a pull request. Do not submit IEEE
specification text or non-public operational packet captures.

The public API is frozen during the 0.9 release-candidate cycle. Additive API
changes must update `src/OpenDisNet/PublicAPI.Unshipped.txt`, include tests, and
describe the consumer benefit in the changelog. Removals or signature changes
require explicit breaking-change review and a new release candidate.
The 1.x public API follows semantic versioning. Additive API changes must update
`src/OpenDisNet/PublicAPI.Unshipped.txt`, include tests, and describe the
consumer benefit in the changelog. Removals or incompatible signature changes
require explicit breaking-change review and belong in the next major release.
1 change: 0 additions & 1 deletion OpenDisNet.slnx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
<Project Path="src/OpenDisNet/OpenDisNet.csproj" />
</Folder>
<Folder Name="/tests/">
<Project Path="tests/OpenDisNet.Reference/OpenDisNet.Reference.csproj" />
<Project Path="tests/OpenDisNet.Tests/OpenDisNet.Tests.csproj" />
</Folder>
<Folder Name="/tools/">
Expand Down
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,11 @@
OpenDisNet is a high-performance, type-safe .NET codec for Distributed
Interactive Simulation (DIS) Protocol Version 7, defined by IEEE 1278.1-2012.

> **Development status:** 1.0 release audit. All 72 DIS v7 PDU identifiers have
> **Development status:** Stable 1.x release. All 72 DIS v7 PDU identifiers have
> typed native C# codecs, every family has populated, independent, malformed,
> and hostile-input evidence, and the public API is compatibility-frozen. See
> the [`1.0 audit`](docs/conformance-audit-v1.0.md) and
> the [`1.0 audit`](docs/conformance-audit-v1.0.md),
> [`1.0.1 maintenance note`](docs/conformance-maintenance-v1.0.1.md), and
> [`conformance matrix`](docs/conformance.md).

## Install
Expand Down
2 changes: 0 additions & 2 deletions THIRD-PARTY-NOTICES.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@ OpenDisNet's implementation was independently designed with reference to:
- SISO-REF-010-2025, *Reference for Enumerations for Simulation Interoperability*.
- The `open-dis/opendis7-java` and `open-dis/opendis7-source-generator` projects,
distributed under the 3-Clause BSD License by their respective authors.
- The `open-dis/open-dis-csharp` project, distributed under the 2-Clause BSD
License by Open DIS and its contributors.

IEEE and SISO specification names are used only to identify interoperability
targets. No endorsement is implied. Specification text is not redistributed.
Expand Down
14 changes: 7 additions & 7 deletions docs/api-design.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,13 +38,13 @@ untrusted network input.

## Compatibility

The 0.9 release-candidate line freezes the complete public C# surface before
1.0. `PublicAPI.Shipped.txt` is the reviewable contract. Compiler analyzers
reject an unrecorded public addition or removal, and NuGet package validation
compares 1.0 artifacts with version 0.9.0 for binary compatibility.
Version 1.0 freezes the complete public C# surface. `PublicAPI.Shipped.txt` is
the reviewable contract. Compiler analyzers reject an unrecorded public addition
or removal, and NuGet package validation compares 1.x artifacts with version
1.0.0 for binary compatibility.

New API belongs in `PublicAPI.Unshipped.txt` and requires tests plus a changelog
entry. Removing or changing frozen API requires explicit breaking-change review
and another release candidate. After 1.0, public names and wire behavior follow
semantic versioning. Internal codec generation may change without becoming part
of the supported API.
and a new major version. Public names and wire behavior follow semantic
versioning. Internal codec generation may change without becoming part of the
supported API.
20 changes: 20 additions & 0 deletions docs/conformance-maintenance-v1.0.1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# OpenDisNet 1.0.1 conformance maintenance

Version 1.0.1 does not change the supported DIS wire model, SISO enumeration
baseline, public API, or conformance-vector corpus audited for version 1.0.

The maintenance manifest `tests/OpenDisNet.Tests/Conformance/Audit/v1.0.1.json`
retains the complete 1.0 inventory and updates two schema hashes solely because
their human-readable comments were corrected. Generated public XML documentation
changed, but no field name, type, width, ordering, condition, padding, factory
mapping, parser behavior, or serialized byte changed.

The test-only generated C# reference project and its single Fire PDU consumer
were removed. The frozen independent corpus remains: 70 compatible default
vectors and 44 compatible populated vectors span all 12 protocol families, with
documented differential exceptions retained. Native populated, truncation, and
hostile-input coverage for all 72 PDU types is unchanged.

The original `v1.0.json` manifest and
[`1.0 audit report`](conformance-audit-v1.0.md) remain unchanged as historical
release evidence.
14 changes: 8 additions & 6 deletions docs/conformance.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ input tests, and round-trip tests.
- [x] SISO-REF-010-2025 v36 typed enumerations and structured bitfields
- [x] Lossless round trip of unknown enumeration values and reserved bitfield bits

## PDU families
## Historical family delivery milestones

- [x] 0.3 Entity Information/Interaction
- [x] 0.3 Warfare
Expand All @@ -38,7 +38,7 @@ input tests, and round-trip tests.
- [x] 0.8 Live Entity
- [x] 0.8 Information Operations

## 0.9 release readiness
## Historical 0.9 release-readiness milestone

- [x] Frozen, compiler-enforced public C# API baseline
- [x] NuGet package compatibility validation against 0.8.0
Expand All @@ -47,7 +47,7 @@ input tests, and round-trip tests.
- [x] External RC validation checklist and structured feedback form
- [x] External RC feedback channel reviewed; no high-impact finding remains open

## 1.0 release gates
## Completed 1.0 release gates

- [x] SHA-256-pinned conformance audit manifest and published audit report
- [x] Every PDU type and protocol family accounted for exactly once
Expand All @@ -64,8 +64,10 @@ code or a runtime/build dependency. Two default vectors and 28 aggressively
populated vectors expose documented defects in that reference generator and are
retained as differential evidence rather than copied into OpenDisNet behavior.

This file is a release gate. Version 1.0 will not be labeled complete until all
applicable entries are checked and the reviewable project audit is complete.
This file records the release gates completed for version 1.0. Future releases
must retain the applicable checks and document any changed conformance scope.

The completed scope, evidence, limitations, and differential exceptions are in
the [1.0 conformance audit](conformance-audit-v1.0.md).
the [1.0 conformance audit](conformance-audit-v1.0.md). The documentation-only
schema corrections and test-harness cleanup in 1.0.1 are recorded in the
[1.0.1 maintenance note](conformance-maintenance-v1.0.1.md).
18 changes: 9 additions & 9 deletions docs/release-candidate.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
# 0.9 external release candidate
# External release candidates

Version 0.9 is the public API freeze and external validation stage before 1.0.
The current C# surface is recorded in `PublicAPI.Shipped.txt`; builds reject an
undocumented addition or removal, and package validation compares every new
artifact with the published 0.8.0 package.
Release candidates provide an external validation stage before a stable minor
or major release. The current C# surface is recorded in
`PublicAPI.Shipped.txt`; builds reject an undocumented addition or removal, and
package validation compares every new artifact with the stable 1.0.0 baseline.

## Install an RC

Release candidates use SemVer tags such as `v0.9.0-rc.1`. After a candidate is
Release candidates use SemVer tags such as `v1.1.0-rc.1`. After a candidate is
published, install that exact version so test results remain reproducible:

```shell
dotnet add package OpenDisNet --version 0.9.0-rc.1
dotnet add package OpenDisNet --version 1.1.0-rc.1
```

GitHub and NuGet identify RC builds as prereleases. Do not use an RC in a
Expand Down Expand Up @@ -42,9 +42,9 @@ exact package version, target framework, operating system, PDU families tested,
and whether the problem concerns API usability, wire interoperability,
performance, or documentation.

## 1.0 exit criteria
## Stable-release exit criteria

- Public API analyzer and 0.8.0 package-compatibility validation remain clean.
- Public API analyzer and stable-baseline package-compatibility validation remain clean.
- The packed-package consumer passes on .NET 9 and .NET 10.
- No unresolved high-impact wire-correctness or data-loss defect remains.
- External testing covers real application workflows without relying on
Expand Down
12 changes: 6 additions & 6 deletions docs/releasing.md
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
# Releasing

Releases are immutable and tag-driven. The `release.yml` workflow tests, packs,
publishes to NuGet.org, and creates a GitHub release for tags such as `v0.2.0`.
publishes to NuGet.org, and creates a GitHub release for tags such as `v1.0.1`.
GitHub-generated notes are categorized using `.github/release.yml`, and package
plus symbol artifacts are attached to the release shown on the repository page.

Prerelease tags use SemVer identifiers such as `v0.9.0-rc.1`. The workflow
Prerelease tags use SemVer identifiers such as `v1.1.0-rc.1`. The workflow
derives the package version from the tag and marks the GitHub release as a
prerelease automatically. Before publishing any tag, the workflow validates the
public API, compares the package with the 0.9.0 compatibility baseline, and runs
public API, compares the package with the 1.0.0 compatibility baseline, and runs
an external-style consumer against the packed artifact on .NET 9 and .NET 10.

The RC testing contract and feedback process are documented in
[`release-candidate.md`](release-candidate.md). Promote an RC to a stable tag
only after its exit criteria are satisfied; published NuGet versions and GitHub
releases are never rewritten.

## 1.0 security gates
## Release security gates

A release tag must identify a commit contained in `main`. The release workflow
then repeats locked restore with low-or-higher transitive NuGet vulnerability
Expand All @@ -28,10 +28,10 @@ immutable GitHub release.
Verify a downloaded package with GitHub CLI:

```shell
gh attestation verify OpenDisNet.1.0.0.nupkg --repo RejectKid/OpenDisNet
gh attestation verify OpenDisNet.1.0.1.nupkg --repo RejectKid/OpenDisNet
```

The 1.0 tag is permitted only when the
Stable tags are permitted only when their applicable
[conformance audit](conformance-audit-v1.0.md) and all checks in the
[conformance matrix](conformance.md) are complete.

Expand Down
10 changes: 5 additions & 5 deletions docs/standards.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,10 @@ cross-checks:

- `open-dis/opendis7-java`
- `open-dis/opendis7-source-generator`
- `open-dis/open-dis-csharp`

The Java source generator reports 72 DIS v7 PDUs and provides machine-readable
layout descriptions. It is an offline reference only: OpenDisNet is a native
C#/.NET design with no Java code, dependency, or runtime requirement. Its
conformance claim is based on its own coverage matrix and tests, not merely the
presence of a corresponding reference class.
layout descriptions and supplied the frozen independent byte-vector corpus. It
is an offline reference only: OpenDisNet is a native C#/.NET design with no Java
code, dependency, or runtime requirement. Its conformance claim is based on its
own coverage matrix and tests, not merely the presence of a corresponding
reference class.
4 changes: 2 additions & 2 deletions src/OpenDisNet/OpenDisNet.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<AssemblyName>OpenDisNet</AssemblyName>
<RootNamespace>OpenDisNet</RootNamespace>
<PackageId>OpenDisNet</PackageId>
<Version>0.1.0</Version>
<Version>1.0.1</Version>
<Authors>RejectKid</Authors>
<Description>High-performance, type-safe DIS Protocol Version 7 binary codec for .NET.</Description>
<PackageTags>DIS;IEEE-1278;simulation;PDU;protocol</PackageTags>
Expand All @@ -18,7 +18,7 @@
<NoWarn>$(NoWarn);CS1591</NoWarn>
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
<EnablePackageValidation>true</EnablePackageValidation>
<PackageValidationBaselineVersion>0.9.0</PackageValidationBaselineVersion>
<PackageValidationBaselineVersion>1.0.0</PackageValidationBaselineVersion>
<EnableStrictModeForCompatibleTfms>true</EnableStrictModeForCompatibleTfms>
</PropertyGroup>
<ItemGroup>
Expand Down
4 changes: 2 additions & 2 deletions src/OpenDisNet/Pdus/Families/DistributedEmissionsPdus.cs
Original file line number Diff line number Diff line change
Expand Up @@ -442,7 +442,7 @@ public partial class IdentificationFriendOrFoePdu : DistributedEmissionsRegenera
public EntityId EmittingEntityId { get; set; } = new EntityId();

/// <summary>
/// Number generated by the issuing simulation to associate realted events. Part of Layer 1 basic system data 7.6.5.2.
/// Number generated by the issuing simulation to associate related events. Part of Layer 1 basic system data 7.6.5.2.
/// </summary>
public EventIdentifier EventId { get; set; } = new EventIdentifier();

Expand Down Expand Up @@ -795,7 +795,7 @@ public partial class UAEmitter
public ushort Padding { get; set; }

/// <summary>
/// TODO
/// Identifies the acoustic emitter represented by this system.
/// </summary>
public AcousticEmitter AcousticEmitter { get; set; } = new AcousticEmitter();

Expand Down
2 changes: 1 addition & 1 deletion src/OpenDisNet/Pdus/Families/Records.cs
Original file line number Diff line number Diff line change
Expand Up @@ -450,7 +450,7 @@ public partial class BeamData
public float BeamElevationSweep { get; set; }

/// <summary>
/// allows receiver to synchronize its regenerated scan pattern to that of the emmitter. Specifies the percentage of time a scan is through its pattern from its origion.
/// Allows a receiver to synchronize its regenerated scan pattern to that of the emitter. Specifies the percentage of time a scan has progressed through its pattern from its origin.
/// </summary>
public float BeamSweepSync { get; set; }

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<!-- The solution restore audits every external dependency; this project intentionally restores only the local artifact. -->
<NuGetAudit>false</NuGetAudit>
<TargetFrameworks>net9.0;net10.0</TargetFrameworks>
<OpenDisNetPackageVersion Condition="'$(OpenDisNetPackageVersion)' == ''">0.1.0</OpenDisNetPackageVersion>
<OpenDisNetPackageVersion Condition="'$(OpenDisNetPackageVersion)' == ''">1.0.0</OpenDisNetPackageVersion>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
</PropertyGroup>
<ItemGroup>
Expand Down
Loading
Loading