Thanks for your interest! This document describes the minimum a contribution needs to satisfy before it can be merged.
- Read the README to understand the architecture (server + protocol-driver plug-ins + WoT Thing Descriptions).
- For non-trivial changes, open an issue first so we can agree on scope before you spend time on a PR.
- Security-sensitive findings must follow SECURITY.md and must not be filed as public issues.
- .NET SDK 10 (the
global.jsonat the repo root pins the channel). - Visual Studio 2026 / Rider /
dotnetCLI all work. - Docker Desktop or any container runtime for the F5 "Docker" launch profile.
Never commit secrets to UAServer/Properties/launchSettings.json. Local
overrides should use:
git update-index --skip-worktree UAServer/Properties/launchSettings.jsonso personal credentials cannot be pushed by accident.
- C# follows the rules in
.editorconfig. Rundotnet formatbefore opening a PR if your editor doesn't. - All NuGet versions live in
Directory.Packages.props. Add new packages there, then reference them with<PackageReference Include="..." />(no inlineVersion=). - Prefer message templates (
Log.Logger.Information("...{Field}", value)) over interpolated strings so Serilog can capture structured fields. - New protocol drivers must implement
IAssetandIProtocolDriverand ship as a separate csproj underProtocolDrivers/.
Before requesting review, please confirm:
-
dotnet build UAEdgeTranslator.sln -c Releasesucceeds with no new warnings. - Your change is covered by, or does not regress, existing logging / diagnostics — operators should still be able to identify failures.
- User-visible behaviour, env vars, container flags, or config knobs are documented in README.md.
- No secrets, customer data, or production credentials appear in the diff.
- If you touched runtime security (auth, certs, validation), you explained the threat model in the PR description.
Use the GitHub issue tracker. Include:
- the container image tag or commit SHA you saw the bug in,
- the relevant log lines (with structured fields) at
Informationlevel or higher, - the protocol driver and OPC UA client involved, if applicable.