Problem
17 of 26 ADRs govern the peripheral packages (RequestBinder 10, Dummies/Testing 7) while the project's foundational decisions have no record: the Outcome/Error model and the exception-vs-outcome duality, the netstandard2.0 target for shipped libraries, the class-never-struct value-object rule (CLAUDE.md only), the FCE diagnostic-ID scheme and the analyzer-bundled-in-main-package choice, GenDoc's extraction-by-runtime-reflection approach (rationale currently trapped in a SuppressMessage justification in the Worker), and the bilingual EN-canonical/FR-translation documentation policy.
Impact
ADR-0004 makes the ADR base the artifact every PR is checked against. A PR that converts ErrorCode to a struct, adds a runtime dependency to the core, or abandons the FR mirror contradicts no accepted ADR — the governance loop cannot fire on the project's most important invariants.
Direction
- Draft ~6 ADRs as
Proposed, each with a Context sentence stating explicitly that it records a decision made before the ADR practice began (first ADR: 2026-07-10), so history is not falsified.
- Most rationale already exists (DesignPrinciples.en.md, FAQ.en.md, CLAUDE.md, code comments) — this is relocation into the decision record, not invention.
- Per AGENTS.md, agents draft;
@reefact accepts.
Acceptance criteria
- Proposed ADRs exist for (at least): the Outcome model + exception transport; the netstandard2.0 target; the class-not-struct rule; the FCE ID scheme + analyzer bundling; GenDoc reflection extraction; the bilingual policy.
- Each is indexed in
adr/README.md with its FR twin, and states it records a pre-practice decision.
Context
Surfaced by the 2026-07-20 architecture, design & ecosystem audit (doc/handwritten/for-maintainers/audit/2026-07-20-firstclasserrors-architecture-and-design-audit.md, §6.5/§14-C1; branch claude/firstclasserrors-audit-83gap7).
Problem
17 of 26 ADRs govern the peripheral packages (RequestBinder 10, Dummies/Testing 7) while the project's foundational decisions have no record: the Outcome/Error model and the exception-vs-outcome duality, the netstandard2.0 target for shipped libraries, the class-never-struct value-object rule (CLAUDE.md only), the FCE diagnostic-ID scheme and the analyzer-bundled-in-main-package choice, GenDoc's extraction-by-runtime-reflection approach (rationale currently trapped in a
SuppressMessagejustification in the Worker), and the bilingual EN-canonical/FR-translation documentation policy.Impact
ADR-0004 makes the ADR base the artifact every PR is checked against. A PR that converts
ErrorCodeto a struct, adds a runtime dependency to the core, or abandons the FR mirror contradicts no accepted ADR — the governance loop cannot fire on the project's most important invariants.Direction
Proposed, each with a Context sentence stating explicitly that it records a decision made before the ADR practice began (first ADR: 2026-07-10), so history is not falsified.@reefactaccepts.Acceptance criteria
adr/README.mdwith its FR twin, and states it records a pre-practice decision.Context
Surfaced by the 2026-07-20 architecture, design & ecosystem audit (
doc/handwritten/for-maintainers/audit/2026-07-20-firstclasserrors-architecture-and-design-audit.md, §6.5/§14-C1; branchclaude/firstclasserrors-audit-83gap7).