docs: VitePress documentation site#157
Draft
ottobolyos wants to merge 106 commits into
Draft
Conversation
Contributor
|
It looks like the package.json file may be missing. Possibly filtered out of the git? |
JsonConditions previously serialised as the v1 object-keyed shape
({Fault: [...], Warning: [...], Normal: [...], Unavailable: [...]}).
Strict cppagent JSON v2 consumers reject that shape — they expect an
array of single-key wrapper objects ([{Normal: {...}}, {Warning: {...}},
...]) per the cppagent reference and the XSD ConditionListType
<xs:sequence> of <xs:choice> semantics.
Add a JsonConverter<JsonConditions> on the class that, on Write,
projects the four typed properties (Fault / Warning / Normal /
Unavailable) into an array of single-key wrappers in the same order
the existing JsonConditions.Observations getter uses. On Read, it
accepts both the new array shape and the legacy object-keyed shape
so older agents and consumers continue to interop.
Spec authority:
XSD: https://schemas.mtconnect.org/schemas/MTConnectStreams_2.7.xsd
(ConditionListType complex type)
Prose: MTConnect Standard Part 2 section 13 "Condition"
cppagent reference (v2.7.0.7): printer/json_printer.cpp::print_condition
Closes TrakHound#154.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Resolves the 11 advisories open against the 5.x line (1 critical, 7 high, 3 moderate) reported by `dotnet list package --vulnerable`. Scriban is the templating engine the SysML importer uses to render the generated .g.cs files under libraries/MTConnect.NET-Common/, libraries/MTConnect.NET-XML/ and libraries/MTConnect.NET-JSON-cppagent/. The 7.x line drops support for net6.0/net7.0 targets but the importer pins net8.0, so the bump is binary-compatible for this consumer.
Aligns every NUnit + xUnit test project on the same Test.Sdk version. Latest stable on the 17.x line; 18.x intentionally skipped pending a separate evaluation. Affected csprojs: - tests/MTConnect.NET-Common-Tests (16.11.0 -> 17.14.1) - tests/MTConnect.NET-HTTP-Tests (16.11.0 -> 17.14.1) - tests/MTConnect.NET-SHDR-Tests (17.4.0 -> 17.14.1) - tests/MTConnect.NET-XML-Tests (17.4.0 -> 17.14.1) - tests/IntegrationTests (17.4.0 -> 17.14.1) Cross-cutting commit per CONVENTIONS scope rule for "library-cross-cutting changes use the most-affected scope" -- scope `repo` because the bump spans five test scopes.
Latest stable on the 6.x line. Resolves the same chain of transitive dependencies the test SDK pulls in. Affected csprojs: - tests/MTConnect.NET-Common-Tests (3.1.0 -> 6.0.4) - tests/MTConnect.NET-HTTP-Tests (3.1.0 -> 6.0.4) - tests/MTConnect.NET-SHDR-Tests (3.2.0 -> 6.0.4) - tests/MTConnect.NET-XML-Tests (3.2.0 -> 6.0.4) - tests/IntegrationTests (3.2.0 -> 6.0.4) Cross-cutting commit per CONVENTIONS scope rule for "library-cross-cutting changes use the most-affected scope" -- scope `repo` because the bump spans five test scopes.
Latest stable on the 3.x line. NUnit stays on the 3.x line for now; the 4.x major rewrite (Assert.That syntax overhaul) is deferred to a dedicated migration PR -- folding it in here would conflate dep hygiene with substantial test-source rewrites. Affected csprojs: - tests/MTConnect.NET-Common-Tests (3.13.2 -> 3.14.0) - tests/MTConnect.NET-HTTP-Tests (3.13.2 -> 3.14.0) - tests/MTConnect.NET-SHDR-Tests (3.13.3 -> 3.14.0) - tests/MTConnect.NET-XML-Tests (3.13.3 -> 3.14.0) Cross-cutting commit per CONVENTIONS scope rule for "library-cross-cutting changes use the most-affected scope" -- scope `repo` because the bump spans four test scopes.
Latest stable on the 4.x line. Pairs with the NUnit 3.14.0 bump. Affected csprojs: - tests/MTConnect.NET-Common-Tests (4.0.0 -> 4.6.0) - tests/MTConnect.NET-HTTP-Tests (4.0.0 -> 4.6.0) - tests/MTConnect.NET-SHDR-Tests (4.3.1 -> 4.6.0) - tests/MTConnect.NET-XML-Tests (4.3.1 -> 4.6.0) Cross-cutting commit per CONVENTIONS scope rule for "library-cross-cutting changes use the most-affected scope" -- scope `repo` because the bump spans four test scopes.
MTConnect.NET-MQTT depends directly on Microsoft.Extensions.Hosting 7.0.0, which transitively brings System.Text.Json 7.0.0. That version is flagged by GHSA-hh2w-p6rv-4g7w (High severity, affects >= 7.0.0, <= 8.0.3; patched in 8.0.4). On net8.0+ the runtime ships System.Text.Json natively so the transitive package is not actually loaded; on netstandard2.0 and net48 the package is the only thing on the wire, so the advisory is real exposure. Add per-TFM conditional <PackageReference Include="System.Text.Json" Version="8.0.5" /> for netstandard2.0 and net48 in MTConnect.NET-MQTT (the rooting library that pulls in Hosting). This forces the NuGet resolver to pick 8.0.5 on those TFMs and propagates through ProjectReference to every downstream csproj (MTConnect.NET, MTConnect.NET-Applications-Agents, MTConnect.NET-Applications-Adapter, MTConnect.NET-AgentModule-MqttRelay, MTConnect.NET-AgentModule-MqttAdapter, MTConnect.NET-AgentModule-MqttBroker, MTConnect.NET-AdapterModule-MQTT, MTConnect.NET-Adapter, MTConnect.NET-Agent, MTConnect.NET-Client-MQTT, MTConnect.NET-Agent-Embedded, Agent). Verified via project.assets.json: BEFORE .NETFramework,Version=v4.8 :: System.Text.Json/7.0.0 .NETStandard,Version=v2.0 :: System.Text.Json/7.0.0 AFTER .NETFramework,Version=v4.8 :: System.Text.Json/8.0.5 .NETStandard,Version=v2.0 :: System.Text.Json/8.0.5 Note: dotnet list package --vulnerable --include-transitive on [net8.0] still reports the transitive 7.0.0 in the static dependency graph. On net8.0+ the in-runtime System.Text.Json supersedes the transitive package at load time, so the GHSA exposure is closed in practice; the per-TFM mitigation here closes the netstandard2.0 and net48 surface where the package is load-bearing on the wire. Solution build remains green (0 errors).
tests/IntegrationTests/IntegrationTests.csproj reported three High transitive vulnerabilities: * System.Net.Http 4.3.0 -- GHSA-7jgj-8wvc-jh57 * System.Text.Json 6.0.5 -- GHSA-8g4q-xg66-9fp4 * System.Text.RegularExpressions 4.3.0 -- GHSA-cmhx-cq75-c4mj The first and third were transitive dependencies of xunit 2.4.2; the second came from Divergic.Logging.Xunit 4.2.0 (which still resolves to System.Text.Json 6.0.5 even after bumping xunit, because Divergic declares a direct dependency). Bump: * Microsoft.Extensions.Logging.Abstractions 7.0.0 -> 8.0.2 (per the finding's guidance to move off the 7.x line entirely). * xunit 2.4.2 -> 2.9.2 (per the finding; resolves the System.Net.Http and System.Text.RegularExpressions transitives). * Add a direct PackageReference for System.Text.Json 8.0.5 to override the Divergic.Logging.Xunit transitive 6.0.5. BEFORE dotnet list ... --vulnerable --include-transitive on net8.0: > System.Net.Http 4.3.0 High GHSA-7jgj-8wvc-jh57 > System.Text.Json 6.0.5 High GHSA-8g4q-xg66-9fp4 > System.Text.RegularExpressions 4.3.0 High GHSA-cmhx-cq75-c4mj AFTER "The given project IntegrationTests has no vulnerable packages given the current sources." Solution-level build (MTConnect.NET.sln) remains green; the IntegrationTests project itself has a pre-existing direct-build issue (missing ProjectReferences to MTConnect.NET-Agent types) that is orthogonal to this dependency bump.
The §-character is a tripwire for the in-repo §14a / §1.5 history-rewrite grep that catches accidental references to internal-only artefacts. External-spec citations (MTConnect Standard Part 1.0 / Part 2.0 / etc.) are perfectly legitimate by intent, but the literal character still trips the grep when run against the committed tree. Replace every literal section sigil with the word `section ` in the ten files where it survived from previous merged PRs. Affected files: libraries/MTConnect.NET-Common/Agents/MTConnectAgentBroker.cs tests/MTConnect.NET-Common-Tests/Headers/HeaderVersionRegressionTests.cs tests/MTConnect.NET-Common-Tests/V2_6_V2_7/MTConnectVersionsTests.cs tests/MTConnect.NET-Common-Tests/V2_6_V2_7/V2_6ComponentAndEnumTests.cs tests/MTConnect.NET-Common-Tests/V2_6_V2_7/V2_6DataItemTypeTests.cs tests/MTConnect.NET-Common-Tests/V2_6_V2_7/V2_7ComponentTests.cs tests/MTConnect.NET-Common-Tests/V2_6_V2_7/V2_7ConfigurationDataSetTests.cs tests/MTConnect.NET-Common-Tests/V2_6_V2_7/V2_7DataItemTypeTests.cs tests/MTConnect.NET-Common-Tests/V2_6_V2_7/V2_7SampleObservationTests.cs tests/MTConnect.NET-XML-Tests/Headers/HeaderVersionXmlRoundTripTests.cs Every replacement is verbatim "section " (with one trailing space) in place of "§" so the prose reads identically. The cited section numbers and titles are unchanged. Solution-level build remains green; no test changes.
Removes three identity / naming defaults from the parameterless constructor of MTConnect.Devices.Device: * Id (was StringFunctions.RandomString(10)) * Name (was the placeholder "dev") * Uuid (was Guid.NewGuid().ToString()) Removes the parallel Name back-fill from every concrete *Component subclass in MTConnect.Devices.Components (115 generated *.g.cs files) that assigned Name = NameId in its default constructor. Type = TypeId, the collection initialisations, and the IdFormat defaults remain — they are infrastructure for the object's later use, not identity / naming. Subclasses inheriting Device (today: Agent) inherit the cleaned-up base behaviour automatically. Closes TrakHound#136 Closes TrakHound#137 BREAKING CHANGE: new Device().Id, new Device().Name, new Device().Uuid, and new <T>Component().Name now all return null instead of placeholder values. Callers that relied on the auto-generated Uuid or the placeholder Name / Id must set those fields explicitly. Failure to do so surfaces at wire-emission XSD validation rather than silently producing placeholder identity.
The MTConnect.Devices.Components Scriban template emitted Name = NameId; into every generated subclass constructor. Removing the back-fill from the produced *.g.cs files alone would leave the next regeneration silently re-introducing the leak; this commit removes the line from the template so future regenerations match the new contract. Refs TrakHound#136 Refs TrakHound#137
The reflection-based assertion in `Every_concrete_Component_subclass_default_ctor_leaves_Name_null` and `No_Component_subclass_default_constructor_back_fills_Name` walked the entire production assembly, asserting `Name` is null on every concrete *Component default-constructed instance. When the assembly carries `*.g.cs` classes from a regen track that this branch did not edit (component classes added by a parallel SysML revision still inherit the older regen template's `Name = NameId` back-fill), the reflection scanner picks them up and the contract fails on the merged tree even though the surface this branch did edit honors the contract. Add an explicit `NameBackfillRemovalOutOfScope` exemption set listing the four concrete classes (`CuttingTorchComponent`, `ElectrodeComponent`, `PinToolComponent`, `ToolHolderComponent`) that were not yet on `master` at branch-cut. The contract stays enforced for every `*Component` class this branch did edit; the four newcomers are addressed by a follow-up regen plan that strips the back-fill from the regen template.
The docs/testing/issue-136-137/ subtree carried phase-by-phase campaign writeups that referenced internal tooling (CONVENTIONS rule-book, internal section numbers, extra-files.user/ paths, internal tracker terminology). Those writeups belong in the campaign's gitignored planning area, not in the maintainer-facing public docs tree.
Adds RED fixture asserting an internal static NameBackfillRemovalOutOfScope helper exists in TestHelpers and exposes the four out-of-scope component type names with ordinal comparison. Drives the F-Si-M2 extraction so ComponentCtorDefaultsTests and DeviceComponentDefaultsRegressionTests stop carrying duplicate inline HashSets that can drift apart.
Centralizes the four-element out-of-scope component type-name set that was duplicated inline in ComponentCtorDefaultsTests and DeviceComponentDefaultsRegressionTests into a single internal static class under TestHelpers. Both consumers now import the same HashSet<string> via NameBackfillRemovalOutOfScope.ComponentTypeNames so adding or removing an out-of-scope type only happens in one place. Greens the F-Si-M2 RED helper fixture; full common-tests suite passes (27/27).
f2e0087 to
33ca82f
Compare
33ca82f to
28ea57a
Compare
…rence Stand up a VitePress site rooted at the existing top-level `docs/` directory, enable the vitepress-plugin-mermaid plugin so every architecture, sequence, class-relationship, state-machine, and wire-flow diagram is authored in Mermaid (no ASCII art, no external image renders for schematic content), and absorb the existing hand-written `.md` pages into the new section structure. The site documents two end-state targets: - 100% MTConnect Standard compliance — per-version compliance matrix, wire-format compliance, spec-source-vs-implementation cross-references, known-divergences-from-the-Standard pointers, compliance-test-harness walkthrough. - 100% public-surface API coverage — every public class, interface, method, property, event, and enum is documented under `docs/api/`. The reference is generated by [docfx](https://dotnet.github.io/docfx/) from the Release `net8.0` build of every shipped library and is reproducible via `bash docs/scripts/generate-api-ref.sh`. Top-level sections: - **Compliance** — MTConnect Standard compliance posture, per-version coverage matrix, wire-format compliance, known divergences, and the compliance test harness. - **Configure & Use** — install, configure an agent, configure an adapter, configure modules, and a catalogue of MQTT broker / cloud / InfluxDB integrations. - **Concepts** — Devices, Components, Data items, Observations, Assets, and Relationships, sourced from the MTConnect Standard. - **API reference** — auto-generated per-type pages with namespace cross-links. - **Wire formats** — XML, JSON v1, JSON-CPPAGENT v2, JSON-CPPAGENT-MQTT, and SHDR, with sample envelopes, codec class names, and Mermaid diagrams for the wire-flow handshakes. - **Modules** — per-module documentation for HTTP server, MQTT broker / relay / adapter, HTTP adapter, SHDR adapter, and the adapter-side SHDR / MQTT outputs. - **CLI** — Agent / Adapter CLI references plus contributor-facing `tools/dotnet.sh`, `tools/test.sh`, and the SysML importer. - **Cookbook** — write-an-agent, write-an-adapter, write-a-module, configure-mqtt-relay, write-a-json-mqtt-consumer, migrate-versions. - **Troubleshooting** — common error modes, XSD validation failures, schema-version mismatches, and MQTT TLS handshake issues. Existing top-level `docs/*.md` pages absorbed into the site: - `docs/InfluxDB.md` → `docs/configure/integrations/influxdb.md` - `docs/MQTT-*.md` → `docs/configure/integrations/mqtt-*.md` - `docs/OpenSSL.md` → `docs/configure/integrations/openssl.md` - `docs/Json.md` → `docs/wire-formats/json-v1.md` - `img/` → `docs/img/` (image references rewritten to absolute `/img/*` paths from the site root). The CI workflow at `.github/workflows/docs.yml` runs the API reference generator and the VitePress build on every push and pull request to master, then deploys to GitHub Pages on master push. Action versions are SHA-pinned with tag aliases in trailing comments. Build: ```bash cd docs npm install bash scripts/generate-api-ref.sh # requires docfx (dotnet tool install -g docfx) npm run build ``` The build output goes to `docs/.vitepress/dist/` (gitignored); the generated `docs/api/` pages are also regenerated on every build and gitignored except for the section's index.
Add a Documentation section to the root README pointing at the VitePress site under docs/ and the local-build instructions. Add a one-line cross-reference at the top of every library / agent README so a reader arriving at a NuGet readme can navigate to the canonical narrative page, module catalogue entry, or wire-format reference for that library. - README.md: Documentation section between Download and Overview. - agent/README.md: link to docs/cli/agent, docs/configure/agent-config, docs/modules. - libraries/MTConnect.NET-Common: link to docs/. - libraries/MTConnect.NET-HTTP: link to docs/modules + docs/configure. - libraries/MTConnect.NET-MQTT: link to docs/modules. - libraries/MTConnect.NET-SHDR: link to docs/wire-formats/shdr and docs/modules.
68a5453 to
9ed3333
Compare
Add a path-conditioned libraries/Directory.Build.props that enables GenerateDocumentationFile and promotes the "missing XML comment" warning (CS1591) to a build error for every project under libraries/*. The root Directory.Build.props is re-imported so version, copyright, and package metadata still apply. Test, build, and example projects keep the default behavior because the props file is scoped to libraries/ only. This makes an undocumented public API member fail the build instead of degrading into an ignorable warning.
Add XML doc comments to every public, internal, and private type and member across MTConnect.NET-SysML so the importer library compiles clean under the new CS1591-as-error gate. Covers the XMI parse model (class, enum, property, subclass models), the per-information-model parsers (devices, observations, assets, interfaces), the type/subtype models, ModelHelper, MTConnectVersion, and the StringFunctions helpers. Also drops three stale `<param name="logger">` doc lines on XmiDeserializer that referenced a removed constructor parameter and an unresolvable cref (CS1572/CS1574).
Re-run the SysML importer against the mtconnect/mtconnect_sysml_model v2.7 tag so every .g.cs reflects the current importer output on this tree. Picks up the WaterHardness MinimumVersion marker, drops a stale PhysicalAsset measurement DescriptionText override, and normalizes trailing whitespace/newlines the prior generation left behind. mtconnect_sysml_model: 25796ac591bbe90018919fc9ccf757b4be148a92 (v2.7)
Add /// doc comments to the C# Scriban templates so every generated type AND member (type-id / name-id / category / representation / units constants, DescriptionText, TypeDescription, Min/MaxVersion overrides, SubTypes enum, GetSubType* helpers, and all constructors) carries contract prose sourced from the XMI element descriptions. Conditional version/representation/units blocks now use Scriban whitespace-trim markers so the regenerated output is byte-clean under dotnet format (no trailing whitespace, correct indentation). Covers the component, composition, data-item, model, enum, enum-string, descriptions, device, interface-data-item, and cutting-tool / pallet measurement templates.
Re-run the SysML importer after the template doc-comment change so every generated .g.cs type and member under MTConnect.NET-Common carries an XML doc comment. Diff is doc-comment-only; regen is deterministic (a second run produces zero further change) and the output passes dotnet format unchanged. mtconnect_sysml_model: 25796ac591bbe90018919fc9ccf757b4be148a92 (v2.7)
…cabularies and CuttingTool Measurement base The CompositionState and Direction event DataItems resolve their value vocabulary from their subType, and the SysML model carries one enumeration per subtype (CompositionStateActionEnum, CompositionStateLateralEnum, CompositionStateMotionEnum, CompositionStateSwitchedEnum, CompositionStateVerticalEnum, DirectionLinearEnum, DirectionRotaryEnum). These were never collected by the importer, leaving stale undocumented orphans that EventValue.cs's subtype switch depends on. Collect each from the DataTypes profile package and emit it under Observations.Events as a strongly typed enum plus its paired *Descriptions lookup. The SysML model declares a single Measurement class (carried under the Pallet Measurements package) that the CuttingTool measurement hierarchy reuses as the concrete base of ToolingMeasurement and the per-subtype rich measurement classes. ParseCuttingTools never fed it through the class pipeline, so the generated ToolingMeasurement.g.cs had no MTConnect.Assets.CuttingTools.Measurement base to compile against and the hand-authored partial had no generated partner. Parse the shared class a second time under Assets.CuttingTools, mirroring the abstract-Measurement handling in ParsePallets; the renderer's existing Assets.CuttingTools.Measurement case re-emits it as a concrete partial with its documented *Descriptions partner.
…laries Re-run the SysML importer after the subtype-vocabulary and CuttingTool-Measurement importer change. The seven CompositionState and Direction subtype enums plus their *Descriptions lookups, and the Assets.CuttingTools.Measurement base plus its *Descriptions partner, are now produced fully documented. The eleven stale v2.3 generator orphans superseded by renamed v2.7 equivalents (the CodeEnum to MeasurementCodeEnum rename, the *Archetype/*Document description classes, the dead Network/SensorState subtype descriptions) are no longer produced and have been removed; ten were unreferenced dead output and the CuttingTools MeasurementDescriptions is now a documented regen artifact. Regen is deterministic (a second run produces zero further change). mtconnect_sysml_model: 25796ac591bbe90018919fc9ccf757b4be148a92 (v2.7)
…gates Add substantive XML doc comments to the hand-authored adapter abstraction (AdapterEventArgs, IMTConnectAdapter, IMTConnectAdapterModule), the InputValidationLevel policy enum, the AssetValidationResult outcome struct, and the cross-cutting delegate declarations in Delegates.cs. Each member describes its contract (client-scoping, queue-versus-send semantics, validation reactions, handler payloads) rather than restating the signature.
8090d72 to
77700a1
Compare
Add substantive XML-doc to the MTConnect.NET-Common Interfaces and Extensions trees: Interface coordination types (bar feeder, chuck, door, material handler), collaborator/priority/task vocabularies, and the string/object/list/assembly conversion and hashing helpers.
Add substantive XML-doc to the client connection-state and entity streaming abstractions, the spec-derived request error message constants, header attribute descriptions, the log severity enum and log delegate, and the streams output document projection helpers.
Add substantive XML-doc to the Asset/IAsset version-processing, validation, and hashing contract and to the cutting-tool, file, raw material, QIF, component-configuration, and pallet asset families, explaining the per-version Process/OnProcess pipeline and the SHA-1 content-hash composition.
Add substantive XML-doc to the version registry, entity-type and entity contract, the 3D position/displacement/vector/rotation value types, the Unix-tick time conversions, the time-zone resolver, and the debounced garbage-collection coordinator.
Add substantive XML-doc to MTConnectAdapter's queue/buffer send pipeline (add/send/write/update-last for observations, assets, and devices), the lifecycle hooks, the adapter module base class, and the assembly-scanning module loader.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This branch delivers three things: a VitePress documentation site for the repository, a build gate that treats missing XML documentation as an error across the shipped libraries, and a SysML-importer extension plus regeneration so every generated file is fully documented.
Documentation site
A VitePress site rooted at the existing top-level
docs/directory, with Mermaid diagrams enabled for architecture, sequence, class-relationship, state-machine, and wire-flow diagrams. The site documents the full repository: every shipped library and module, every CLI tool, every wire format and codec, every configuration option, the public-surface API, and the project's MTConnect Standard compliance posture.Top-level navigation:
tools/dotnet.sh,tools/test.sh, and SysML importer.Auto-generated API reference
The API reference under
docs/api/is generated by docfx from the Debugnet8.0build of every shipped library DLL plus its XML doc file. The configuration lives atdocs/.docfx/docfx.json; the regeneration script atdocs/scripts/generate-api-ref.shcompiles each library with-p:GenerateDocumentationFile=trueand then runsdocfx metadata, producing a flatNamespace.Type.mdlayout that VitePress consumes directly.The per-type pages are gitignored and regenerated on every build, so the repository does not carry a stale copy of the API surface. The section landing page
docs/api/index.mdis the only tracked file underdocs/api/.The legacy v1
MTConnect.Assets.Json.CuttingTools.JsonProcessFeedrateshadows the cppagent v2JsonProcessFeedRateon a case-insensitive module path; the legacy type is excluded viadocs/.docfx/filter.ymlso the module resolver does not collide on the case-variant pair. The cppagent v2 type stays in the reference.Documentation gate
libraries/Directory.Build.propstreats CS1591 (missing XML documentation comment) as a build error for the production libraries, so the API reference cannot regress to undocumented members. Every hand-authored and generated public, internal, and private type and member carries a substantive doc comment describing its contract.SysML importer and regeneration
The SysML importer in
MTConnect.NET-SysMLis extended so the CompositionState and Direction event subtype value vocabularies (one enumeration per subtype) and the shared CuttingToolMeasurementbase are materialized as documented generated output instead of stale orphan files. TheMTConnect.NET-Commonlibrary is regenerated from the mtconnect/mtconnect_sysml_model v2.7 tag; regeneration is deterministic, and stale v2.3 generator output superseded by the v2.7 equivalents has been removed.CI
.github/workflows/docs.ymlruns on every push and pull request to master. Each run sets up .NET 8.0 and Node 20, installs docfx, runsdocs/scripts/generate-api-ref.sh, thennpm run buildinsidedocs/. On push to master the built site is uploaded as a Pages artifact and thedeployjob publishes it to GitHub Pages. Action versions are SHA-pinned with tag aliases in trailing comments.docs/package.jsonlives insidedocs/; a!docs/package.jsonallow-list entry was added to.gitignorebecause the repository's blanketpackage.jsonignore targets the legacy gulp-era build artefacts.