π«π· Version franΓ§aise
See also: ADR-002 β Tool abstractions shared kernel Β· ADR heterogeneous Tools.* family Β· Back to the index
ADR-003 β Secondary shared kernels: Analysis.Abstractions and Analysis
Status: Accepted Β· Date: 2026-06 Β· Scope: Orkeon.Application β Orkeon.Analysis.Abstractions; Orkeon.Infrastructure β Orkeon.Analysis
Context
Two references cut across the "canonical" onion direction described in CLAUDE.md
("Application β Domain" / "Infrastructure β Domain + Application"), in favor of the RaggableTree
subsystem (src/analysis/):
Application β Orkeon.Analysis.Abstractions(src/core/Orkeon.Application/Orkeon.Application.csproj). Minimal usage: a single file consumes this project βsrc/core/Orkeon.Application/Crew/DeliverableResolvers/FinalMessageResolver.cs, for theIInlineFqnValidatorinterface, injected as an optional dependency.Orkeon.Analysis.Abstractionsitself depends only onDomain; this is therefore not an inversion of the dependency direction, but the Application pays for an entire project reference (64 files of RaggableTree interfaces/DTOs) for a single interface.Infrastructure β Orkeon.Analysis(concrete, not just the abstractions) (src/core/Orkeon.Infrastructure/Orkeon.Infrastructure.csproj). Usage confined to DI composition:Orkeon.Analysisis referenced only bysrc/core/Orkeon.Infrastructure/DependencyInjection/RaggableTreeInfrastructureExtensions.cs. The Infrastructure here plays a composition-root role to wire RaggableTree into the container.
Decision
Document and accept these two couplings as they stand for the current version, without resolving them immediately:
Orkeon.Analysis.Abstractionsis treated as a secondary shared kernel (same status asTools.Abstractions, see ADR-002): an abstractions project depending only onDomain, hence consumable byApplicationwith no cycle and no inversion.- The concrete
Infrastructure β Orkeon.Analysisreference is accepted as composition wiring localized to a single DI extensions file, the Infrastructure assuming its composition-root role for the RaggableTree subsystem.
Phase-out option (deferred)
This decision is not final. Phasing these couplings out remains possible and preferable in the long run:
- Application: move the
IInlineFqnValidatorport intoApplication(or the interface intoDomain), removing the reference toAnalysis.Abstractionsand makingApplicationmatchCLAUDE.md("Application β Domain"). - Infrastructure: lift the RaggableTree composition up into the host (the real application
composition root, e.g.
ConsoleApp), removing the concreteAnalysisreference from the Infrastructure.
Until these phase-outs are carried out, this ADR serves as the consultable justification.
Consequences
- Positive: the couplings are now traceable and challengeable instead of being blindly
renegotiated at every review. Neither inverts the dependency direction nor introduces a cycle
(verified at commit
b5179b3c). - Vigilance:
Analysis.Abstractionsmust keep depending onDomainalone; any extension of the concreteAnalysisusage in the Infrastructure (beyond the DI wiring) must reopen this ADR.