Skip to content

Milestones

List view

  • ## Goal Migrate scala-commons from Scala 2.13 to **Scala 3 only**. ## Strategy: big bang + iterative restoration Two-stage approach: 1. **Phase 1 — single "comment-and-green" PR.** Cut over the build to Scala 3 only. Anything that doesn't compile is wrapped in `/* ... */` and tagged `// TODO[scala3-port]: <feature>`. CI ends green. Codebase is intentionally feature-poor; this PR is the cut-over, not a feature-complete port. 2. **Phase 2+ — one PR per feature area.** Each subsequent PR un-comments one block of TODO-tagged code, ships a Scala 3 implementation, restores affected tests, and removes the entry from `MIGRATION.md` backlog. PRs stack on top of each other (base = prior phase's branch). ## Why this shape Previous attempt (closed PRs #856, #859; merged-but-not-on-`scala-3`: #857, #858) used a cross-build cherry-pick model — `scala/` + `scala-2.13/` + `scala-3/` source dirs and `crossScalaVersions := Seq(scala3Version, scala2Version)`. The cross-axis was carrying ~70-80 files of dead 2.13 weight that the v2 release won't ship anyway. Pivoting to Scala 3 only removes the maintenance cost and clarifies the diff: every PR after Phase 1 is "implement feature X on Scala 3", not "keep both axes building". ## Locked decisions - **Target branch:** `AVSystem/scala-commons:scala-3` (unchanged baseline `1561d8dc`). - **Source layout:** single source dir per module (`src/main/scala`, `src/test/scala`). - **Cherry-picking:** halotukozak's fork `master` is reference only — its `scala-3/` files are read for inspiration during restoration PRs. - **PR conventions:** - title prefix `[Scala 3]` - assigned to this milestone - opened as draft (promoted to ready-for-review manually) - stacked chain — Phase 2 base = Phase 1 branch, Phase 3 base = Phase 2 branch, … - maintainer merges manually; CI must be green - **Code quality (carried from prior plans):** - no `@nowarn` / `-Wconf` introduced — fix at source - no porting of `@deprecated` symbols when a stdlib replacement exists - **`made` dependency:** added - **CI matrix** single Scala 3 axis × Temurin 17 / 21 / 25 = 3 shards. - **MIGRATION.md:** fresh start at repo root. Living backlog — entries added when commented, removed when restored. ## Documentation deliverables Every PR in this milestone updates `MIGRATION.md` so the doc captures the full Scala-3 transition contract for downstream users: - **Will not migrate** — symbols, modules, or features explicitly dropped. Listed with rationale (no longer needed, replaced by stdlib, replaced by external lib, obsolete API). - **Deprecated on Scala 3** — what we keep behind `@deprecated` with a pointer to the replacement. Includes `since` version and `replaceWith` where it makes sense. - **Source-compat breaks** — every place a downstream `import` / call site needs to change to compile under Scala 3. Per-module list. Includes old → new pairings where the rename/move is non-obvious. - **Binary-compat breaks** — separate section, picked up by MiMa once a Scala 3 baseline ships. - **Disabled tests / modules** — anything intentionally not running, with a reason and a "restore in PR #N" pointer if known. This doc is the public contract. Reviewers should be able to read `MIGRATION.md` and understand exactly what changes for a consumer of the library. ## Out of scope (this milestone) - Keeping any Scala 2.13 artifact published. Last 2.13 release is whatever sits on `master`; - Tasty-MiMa enforcement. Activated only once an initial Scala 3 release ships. - `jetty`, `analyzer`, `spring`, RPC: Phase 1 disables; formal retirement decision deferred to a follow-up PR.

    No due date
    10/31 issues closed