AtomiCloud.Diene.Problems.TestHelper
1.0.0
dotnet add package AtomiCloud.Diene.Problems.TestHelper --version 1.0.0
NuGet\Install-Package AtomiCloud.Diene.Problems.TestHelper -Version 1.0.0
<PackageReference Include="AtomiCloud.Diene.Problems.TestHelper" Version="1.0.0" />
<PackageVersion Include="AtomiCloud.Diene.Problems.TestHelper" Version="1.0.0" />
<PackageReference Include="AtomiCloud.Diene.Problems.TestHelper" />
paket add AtomiCloud.Diene.Problems.TestHelper --version 1.0.0
#r "nuget: AtomiCloud.Diene.Problems.TestHelper, 1.0.0"
#:package AtomiCloud.Diene.Problems.TestHelper@1.0.0
#addin nuget:?package=AtomiCloud.Diene.Problems.TestHelper&version=1.0.0
#tool nuget:?package=AtomiCloud.Diene.Problems.TestHelper&version=1.0.0
Diene .NET Problems
Diene's reproducible development environment is managed by Nix. Run direnv allow once, then use pls tasks from the loaded shell.
This branch is the workspace baseline inherited by every downstream sample: split CI/CD, secrets, release configuration, validators, standards, and vendored agent-skill synchronization.
Commands
pls setup— synchronize installed diene package skills.pls lint— run every pre-commit gate.pls secret:scan— scan tracked content for secrets.pls skills:sync— rebuild.claude/skills/vendor/from installed packages.
Standards
- CI/CD workflows
- conventional commits
- Infisical and secrets
- linting and pre-commit
- Nix flakes and development shells
- release automation
- service-tree identity
- shell scripts
- Taskfile conventions
Shared standards
- Authorization
- Contributor documentation
- Date and time
- Domain-driven design
- Functional practices
- Software design philosophy
- SOLID principles
- Stateless OOP and dependency injection
- Testing
- Three-layer architecture
- Utility libraries
- Data validation
Domain-specific documentation belongs under docs/domain/.
The docs/standards/contracts/ location is reserved for the separately owned C0
contracts standard.
.NET 10 foundation
This branch adds the .NET 10 toolchain, the App/Lib/UnitTest/IntTest
sample, merged multi-project coverage, strict and LLM dead-code modes. See the .NET baseline.
Common commands:
pls build,pls dev,pls run, andpls previewpls test,pls test:unit,pls test:int, and the coverage variantspls deadcodefor the non-blocking review; CI owns strict dn-inspect
The typed-problem contract is documented in docs/domain/problems.md. Production observability is intentionally absent until the observability add-back.
Typed problem packages
AtomiCloud.Diene.Problems provides typed domain problems, a consumer-owned
catalog, the canonical type-URI builder, RFC 9457 rendering, schema export, and
Problem custom-resource emission. AtomiCloud.Diene.Problems.TestHelper
provides FluentAssertions for domain, result, envelope, and HTTP boundaries.
dotnet add package AtomiCloud.Diene.Problems
dotnet add package AtomiCloud.Diene.Problems.TestHelper
Register and render problems
Problem types do not enter the runtime implicitly. Register every baseline and consumer-owned problem at composition time, then enable ASP.NET Core's exception handler middleware:
using AtomiCloud.Diene.Problems;
using AtomiCloud.Diene.Problems.Catalog;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddAtomiProblems(
new ProblemIdentity("raichu", "dotnet", "notes", "api"),
new ErrorPortalOption
{
Scheme = "https",
Host = "docs.raichu.cluster.atomi.cloud",
},
catalog => catalog.AddBaseline());
var app = builder.Build();
app.UseExceptionHandler();
Throw a registered problem only at a framework boundary. Within domain code, prefer the Result-returning guards and adapters:
var guarded = ProblemGuard.NotFound(note, noteId);
var failed = new ValidationError("The note is invalid.", errors).ToErr<Note>();
throw new EntityNotFound(
$"Note '{noteId}' was not found.",
typeof(Note),
noteId).ToException();
Type URIs and catalog export
Resolve IProblemTypeUriBuilder whenever a type URI is needed. Never recreate
the URI template in a controller or consumer. Resolve ProblemResourceEmitter
from the same service provider to emit the registered single-version catalog as
canonical JSON, which is also valid YAML 1.2:
var emitter = app.Services.GetRequiredService<ProblemResourceEmitter>();
var resource = emitter.Emit(new ProblemResourceIdentity("dotnet", "notes", "raichu", "v1"));
var manifest = emitter.Serialize(resource);
Assert the wire contract
using AtomiCloud.Diene.Problems.TestHelper;
using FluentAssertions;
var envelope = (await response.Should().BeRfc9457()).Which;
envelope.Should().HaveStatus(404);
envelope.Should().HaveType(expectedTypeUri);
envelope.Should().HaveData(expectedProblem);
envelope.Should().BeRecoverable(false);
Run nix develop .#ci -c ./scripts/ci/pkg-validate.sh to pack both packages,
validate metadata and symbols, and restore them into a scratch consumer. See
the library baseline for release and
promotion guidance.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- AtomiCloud.Diene.Problems (>= 1.0.0)
- FluentAssertions (>= 7.2.2)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on AtomiCloud.Diene.Problems.TestHelper:
| Package | Downloads |
|---|---|
|
AtomiCloud.Diene.ServerEngine.TestHelper
An in-process controller host, webhook delivery signer, and tri-state reply assertions for AtomiCloud.Diene.ServerEngine. |
|
|
AtomiCloud.Diene.E2e.TestHelper
Diene family TestHelper bundle plus black-box response assertions. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.0 | 287 | 7/28/2026 |