Skip to content

ADR: record the lib-train lockstep contract and the core→Testing InternalsVisibleTo #253

Description

@Reefact

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentation

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions