Part of the org-wide repo refactor tracked in rainlanguage/rainix#296 — phase 2, interface absorption.
What
Fold this interface repo back into rainlang, and retire it.
Why
With deployment moving out to .deploy repos and everything resolved through Soldeer rather than git submodules, a separate interface repo stops earning its keep. It costs every consumer that needs both an extra pin and an extra set of versioned import prefixes to keep in step, and it lengthens every republish cascade.
7 of the 9 consumers already pin both packages — rain.erc4626.words, rain.flare, raindex, rain.dia, rain.pyth, rain.merkle and rain.verify each depend on this interface and on rainlang. For them the split buys nothing.
Absorption also shortens the republish cascade. The rain-math-binary 0.1.1 → 0.1.3 bump on 2026-08-13 required this package republished, then rainlang republished, before any of six leaf repos could move. Merged, that is one republish instead of two lockstep ones. rainlang's own dependency on this package disappears outright.
Compile cost of a fatter package is close to zero: Foundry compiles only what src/test/script transitively import, so unreached source is never parsed. This was confirmed during the rain-math-binary 0.1.3 campaign on 2026-08-13, where rain.verify bumped green while its siblings failed precisely because it never reaches the offending file.
Cost, stated honestly
Under the versioned-import convention, absorption couples interface-only consumers to the implementation's release cadence — they re-pin and rewrite import prefixes on every implementation release, not just on interface changes. Interfaces are stable and implementations churn, so this is a real cost borne by:
- raindex.governance
- raindex.interface
Ordering — hard prerequisite, not a preference
Do not start this until rainlang has completed its deploy/library split and its release lane publishes cleanly.
Today this interface repo is protecting its consumers from the core repo's release problems. Folding an interface into a core whose lane is wedged propagates the failure instead of escaping it.
Done when
Part of the org-wide repo refactor tracked in rainlanguage/rainix#296 — phase 2, interface absorption.
What
Fold this interface repo back into rainlang, and retire it.
Why
With deployment moving out to
.deployrepos and everything resolved through Soldeer rather than git submodules, a separate interface repo stops earning its keep. It costs every consumer that needs both an extra pin and an extra set of versioned import prefixes to keep in step, and it lengthens every republish cascade.7 of the 9 consumers already pin both packages — rain.erc4626.words, rain.flare, raindex, rain.dia, rain.pyth, rain.merkle and rain.verify each depend on this interface and on
rainlang. For them the split buys nothing.Absorption also shortens the republish cascade. The
rain-math-binary0.1.1 → 0.1.3 bump on 2026-08-13 required this package republished, thenrainlangrepublished, before any of six leaf repos could move. Merged, that is one republish instead of two lockstep ones. rainlang's own dependency on this package disappears outright.Compile cost of a fatter package is close to zero: Foundry compiles only what
src/test/scripttransitively import, so unreached source is never parsed. This was confirmed during therain-math-binary0.1.3 campaign on 2026-08-13, where rain.verify bumped green while its siblings failed precisely because it never reaches the offending file.Cost, stated honestly
Under the versioned-import convention, absorption couples interface-only consumers to the implementation's release cadence — they re-pin and rewrite import prefixes on every implementation release, not just on interface changes. Interfaces are stable and implementations churn, so this is a real cost borne by:
Ordering — hard prerequisite, not a preference
Do not start this until rainlang has completed its deploy/library split and its release lane publishes cleanly.
Today this interface repo is protecting its consumers from the core repo's release problems. Folding an interface into a core whose lane is wedged propagates the failure instead of escaping it.
Done when