Problem
Two lasting, future-maintainer-questionable decisions exist only in comments: (1) FirstClassErrors, FirstClassErrors.Testing and FirstClassErrors.RequestBinder ship in lockstep on one train — the rationale (why the binder must not have its own train; NU1102 on an immutable artifact) lives only in tools/packaging/pack.sh comments and one line of user doc; (2) the core grants InternalsVisibleTo to the shipped Testing package (the ambient-clock seam), which makes exact-version lockstep permanently mandatory — internals are not a compatibility surface, so Testing can never version independently while that IVT exists. Both pass the project's own ADR significance test verbatim; the asymmetry with ADR-0011 (which records the equivalent hosting decision for Dummies) is stark.
Impact
If pack.sh were ever refactored, the only record of the reasoning would vanish with it; ADR-0004's per-PR check cannot fire on a decision that has no record.
Direction
- One Proposed ADR: "FirstClassErrors, FirstClassErrors.Testing and FirstClassErrors.RequestBinder ship in lockstep on one train; intra-train dependencies pin the co-published version; the core exposes internal seams to Testing via InternalsVisibleTo, which makes exact-version lockstep mandatory." Rationale relocated from the pack.sh comments; the pack-time guard then enforces a recorded decision instead of being the record itself.
- Per AGENTS.md, drafted as Proposed for
@reefact to accept.
Acceptance criteria
- The ADR exists (EN+FR), is indexed, and cross-links the pack.sh guard and the IVT declaration as its implementation sites.
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, §10.3/§14-M; branch claude/firstclasserrors-audit-83gap7). Complements #228.
Problem
Two lasting, future-maintainer-questionable decisions exist only in comments: (1) FirstClassErrors, FirstClassErrors.Testing and FirstClassErrors.RequestBinder ship in lockstep on one train — the rationale (why the binder must not have its own train; NU1102 on an immutable artifact) lives only in
tools/packaging/pack.shcomments and one line of user doc; (2) the core grantsInternalsVisibleToto the shipped Testing package (the ambient-clock seam), which makes exact-version lockstep permanently mandatory — internals are not a compatibility surface, so Testing can never version independently while that IVT exists. Both pass the project's own ADR significance test verbatim; the asymmetry with ADR-0011 (which records the equivalent hosting decision for Dummies) is stark.Impact
If
pack.shwere ever refactored, the only record of the reasoning would vanish with it; ADR-0004's per-PR check cannot fire on a decision that has no record.Direction
@reefactto accept.Acceptance criteria
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, §10.3/§14-M; branchclaude/firstclasserrors-audit-83gap7). Complements #228.