Skip to main content
Welcome. This site supports keyboard navigation and screen readers. Press ? at any time for keyboard shortcuts. Press [ to focus the sidebar, ] to focus the content. High-contrast themes are available via the toolbar.
serard@dev00:~/cv

Development Practices & Research

FrenchExDev is under intensive development across the whole stack, Diem included. These practices support that work: keep dependencies explicit, test reusable behavior, inspect generated output and distinguish current implementation from the intended product.

The long-term integration point is a software factory Lab with GitLab, GitLab CI and nodes, composed for a particular machine through a project such as MyLocalHost.Diem.Lab. The build and quality mechanisms below are current building blocks; the complete product integration remains in progress.

Central Package Management

The root Directory.Build.props enables nullable reference checking, implicit usings, LangVersion=latest, warnings as errors, build-time style checks and central package management.

The inspected root global.json declares:

{
  "sdk": {
    "version": "11.0.100-rc.1.26425.128",
    "rollForward": "latestFeature",
    "allowPrerelease": true
  }
}

This is the repository's SDK selection policy as of 9 September 2026. Package targets are declared separately: net10.0, net11.0 and netstandard2.0 occur in the inspected projects. Individual families have .slnx solution files.

The root Directory.Packages.props centralizes many package versions. DockAi and IEC61499 have their own package files; Dotnet's file explicitly imports the parent. These boundaries matter when updating or restoring a family. Centralization makes declared versions easier to manage; the resolved dependency graph still needs checking.

Build settings (ouvre dans une nouvelle fenêtre) · SDK policy (ouvre dans une nouvelle fenêtre) · Root package versions (ouvre dans une nouvelle fenêtre).

Interactive NuGet Updater (Update-Packages.ps1)

The root PowerShell updater reads the adjacent central package file, queries NuGet for available versions and displays progress in a live table. Query concurrency defaults to four and is configurable:

./Update-Packages.ps1 -ParallelMax 4

The interactive path allows selective updates. -Apply applies available updates without prompting; -IncludePrerelease includes prerelease candidates. The script uses the network and can edit the central package file when updates are selected. It targets the root file beside the script, so nested package configurations need separate attention.

The useful workflow is to inspect candidates, select a coherent update, then restore/build and test the affected family. Updater source (ouvre dans une nouvelle fenêtre).

Testing the Building Blocks

The repository uses different tests for different behaviors:

Behavior Examples in the source
Value semantics and composition Result outcomes; Options unit and CsCheck property tests
Controlled dependencies FakeHttpClient responses; FakeClock advancement and timers
Generated APIs Generator/emitter output, diagnostics and compilation tests
Dependency injection Injectable registrations exercised with supported containers
Process integration boundaries Argument arrays and FakeProcessRunner execution specifications
State/workflow behavior FSM guards, transitions, hierarchy and generated graph paths
Configuration output Compose/Traefik serialization, Packer HCL and GitLab YAML/Ruby rendering

For a concrete source-level entry point, the Options suite is:

dotnet test Options/test/FrenchExDev.Net.Options.Tests/FrenchExDev.Net.Options.Tests.csproj

Run it from the repository root with the selected SDK and dependencies available. This command documents the project entry point; it was not executed during this page update.

A useful process-argument test compares the entire ordered token array, including paths with spaces. A useful generator test checks the emitted behavior or resulting compilation. A test using a fake process does not establish that the external tool has run successfully. Library examples · Dotnet argument example · Options tests (ouvre dans une nouvelle fenêtre).

Documentation Standards

Many families include doc/ARCHITECTURE.md and doc/HOW-TO.md; some also have PHILOSOPHY.md. This is a widespread convention. The pair is not present at the conventional location for every family, including Alpine.Version, Doc2Pdf, Dotnet, HttpClient and IEC61499 in the inspected snapshot.

The practice pages link current responsibilities to source examples, then to longer design articles. Design proposals can describe more than the implementation currently delivers. Requirements' inactive coverage analyzer and Diem's unfinished generators are documented explicitly in the library fiche.

For Diem, the documentation follows product presentation → usages and architecture → technical specification. Diem series.

Quality Gates

The local source tree contains 38 quality-gate.yml files. QualityGate reads thresholds, performs Roslyn analysis and imports coverage and mutation data. Its CLI declares analysis, checking and test/coverage commands. Application commands · QualityGate practical guide.

Keep the evidence stages explicit:

Stage What it establishes
Test source exists A behavior has an executable specification
Test run completes The selected suite's result for a particular code/environment state
Coverage report exists Which code was exercised by that run
Mutation report exists How the executed tests responded to the mutations
Gate evaluation completes Whether the configured thresholds were met using those inputs
CI/merge rules enforce the check Whether that result actually controls integration

The source scan found no .gitlab-ci.yml or .github/workflows/*.yml|yaml in the examined C# tree, excluding build outputs, Git metadata, collected inputs and dependencies. Gate configuration and CLI failure paths are available; repository-wide merge enforcement was not established by that inspection.

The C# Requirements analyzer declares REQ100 but registers no coverage analysis action. A generated requirement registry is therefore distinct from executed tests or enforced acceptance-criterion coverage. Requirements-as-Code workflow · Root gate configuration (ouvre dans une nouvelle fenêtre).

Research & Experimental

IEC61499 explores function blocks, event-driven execution and typed inputs/outputs for distributed control models. It remains an experimental family with its own dependency configuration. Source (ouvre dans une nouvelle fenêtre).

The broader ecosystem also remains in active development. Existing tests, configurations and generators are evidence of work implemented so far; they do not make the entire stack stable or the Diem Lab complete. The next product convergence is to compose those pieces into a machine-specific software factory. Diem Lab presentation.

Back to the ecosystem · C# & .NET skill

⬇ Download