Skip to content

Split deploy half out of rainlang (rainix#296) #552

Description

@thedavidmeister

Part of the org-wide repo refactor tracked in rainlanguage/rainix#296.

What

Split this repo into a library half (stays here, autopublishes to Soldeer on merge via rainix-autopublish) and a deploy half (new rainlang.deploy repo, releases only on a manual sol-v* tag via rainix-tag-release). Every repo must end up strictly one or the other, never both.

Why this repo

Carries both halves at scale: 9 deploy artifacts and 7 concrete contracts — Rainlang, RainlangExpressionDeployer, RainlangInterpreter, RainlangParser, RainlangStore and RainlangReferenceExtern. That is seven deploy suites against rain.factory's one.

Its release lane is wedged: [package].version is 0.1.8 and the published rainlang revision is also 0.1.8, so rainix-autopublish's next-version invariant rejects every run. It has been failing since 2026-07-16.

This is currently blocking other work. Six repos could not complete the rain-math-binary 0.1.1 → 0.1.3 bump on 2026-08-13 because rainlang's published source imports rain-math-binary-0.1.1/src/lib/LibCtPop.sol and it cannot republish.

Two complications rain.factory did not have

  1. src/generated/ is flat, not the frozen per-tag src/generated/<tag>/ layout. The split includes migrating to the snapshot model, not just relocating files.
  2. Five Rust crates publish to crates.io in the same release lanerainlang_bindings, rainlang_dispair, rainlang_parser, rainlang-eval, rainlang_test_fixtures — as a lockstep set. Reconciling a crates.io cadence against a deploy tag is new ground.

Because of both, this should follow the smaller proofs (rain.extrospection, rain.tofu.erc20-decimals, rain.pyth, rain.flare, rain.metadata, rain.math.float) rather than lead them.

Method

Follow rainlanguage/rain.factory#46: verify the cut is one-way first, then create the .deploy repo with the concrete contracts, deploy-pin lib, frozen snapshots and deploy scripts under rainix-tag-release; release it; slim this repo; migrate consumers.

Soldeer revisions are immutable and this org carries the version inside the import path, so existing consumers stay pinned to working revisions throughout.

Done when

  • Cut verified one-way
  • src/generated/ migrated to the frozen per-tag layout
  • Rust crate release cadence reconciled with the deploy tag
  • rainlang.deploy created with the deploy half
  • rainlang.deploy released, pins published
  • This repo slimmed to the library half
  • Release lane publishes cleanly
  • The blocked rain-math-binary 0.1.3 bumps can proceed

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