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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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