Summary

  • Introduces a fully serializable, macro-driven migration system with no closures or runtime reflection
  • ValueExpr (5 variants) + MigrationAction (14 variants) — pure data ADT, fully serializable
  • DynamicMigration: schema-agnostic interpreter with ++, reverse, error paths
  • Migration[A, B]: typed wrapper with DefaultValue resolution from toSchema
  • MigrationBuilder[A, B]: immutable DSL builder with schema-path validation at build time
  • Full Scala 2.13 + Scala 3.x macro DSL (_.field, .when[T], .each, .at(i), .atKey(k), .searchFor[T], etc.) expanded to DynamicOptic at compile time — both platforms supported

Differentiators vs other open PRs (#1296, #1297, #1302)

  • Only submission with full Scala 2 + Scala 3 selector macros (#1302 is Scala 3 only, #1296/#1297 have no macros)
  • All 14 action variants fully implemented (no stubs)
  • Fits within existing schema module — no new sbt subproject needed
  • 89 passing tests covering all actions, reverse semantics, typed layer, DefaultValue resolution, macro DSL, and serialization round-trips

Test plan

  • sbt "coverage; schemaJVM/test; schemaJVM/coverageReport" — Statement: 88.03%, Branch: 82.18%
  • sbt "schemaJVM/testOnly *MigrationSpec" — 89 tests passed, 0 failed
  • All CI jobs green (testJVM 17/25 × 2.13/3.3/3.7, testJS 17 × 2.13/3.3, Test Golem)

Demo Video Link –> https://drive.google.com/file/d/1AnAHr_QpE_50FWUxiipsMj8tXt2py5aK/view?usp=sharing

Fixes https://github.com/zio/zio-blocks/issues/519

/claim #519

Claim

Total prize pool $8,000
Total paid $0
Status Pending
Submitted April 08, 2026
Last updated April 08, 2026

Contributors

SH

Shivam Kumar Jha

@Shivoo29

100%

Sponsors

MA

marianaguzmanguerrero16-dev

@marianaguzmanguerrero16-dev

$4,000
ZI

ZIO

@ZIO

$4,000