Skip to content

Absorb rainlang-interface back into rainlang (rainix#296) #120

Description

@thedavidmeister

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

  • rainlang has completed phase 1 and its lane publishes cleanly
  • Interfaces moved into rainlang, imports rewritten
  • Interface-only consumers migrated to the rainlang package
  • rainlang publishes a revision containing the interfaces
  • This repo archived

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions