Part of EPIC: #1978 — Configuration Overhaul (schema v3.0.0)
EPIC position: Subissue #1 of 9. Foundation — all other subissues depend on this. Must be merged before any other subissue begins.
Spec: docs/issues/drafts/configuration-overhaul-copy-v2-to-v3-baseline.md
Goal
Copy the entire packages/configuration/src/v2_0_0/ module to packages/configuration/src/v3_0_0/ as the starting point for all breaking changes in the Configuration Overhaul EPIC. Also copy the crate-root logging.rs (which contains TraceStyle, setup(), and tracing_init()) into both v2_0_0/ and v3_0_0/ so each versioned module is fully self-contained (data types + behaviour). Wire v3_0_0 as the default schema version while keeping v2_0_0 available for backward compatibility during the transition.
Background
The Configuration Overhaul EPIC groups multiple breaking changes to the configuration schema. Rather than modifying v2_0_0 in place (which would break existing consumers), we create a new v3_0_0 module as a copy of v2_0_0. Each subsequent subissue in the EPIC applies its changes to the v3_0_0 module only.
This approach:
- Keeps
v2_0_0 intact for any consumers that still need it
- Provides a clean baseline for all v3 changes
- Allows incremental migration — each subissue modifies only the v3 types
- Makes each versioned module fully self-contained (data types + behaviour)
Scope
In Scope
- Copy
packages/configuration/src/v2_0_0/ → packages/configuration/src/v3_0_0/
- Copy
packages/configuration/src/logging.rs into v2_0_0/logging.rs and v3_0_0/logging.rs
- Update
packages/configuration/src/lib.rs to expose both v2_0_0 and v3_0_0 modules
- Wire
v3_0_0 as the default schema version used by the application
- Update
share/default/config/ files to reference schema_version = "3.0.0"
- Ensure all existing tests still pass (v2_0_0 unchanged)
- Add basic smoke tests for v3_0_0 deserialization
Out of Scope
- Any functional changes to the configuration types (those come in subsequent subissues)
- Removing
v2_0_0 module (deprecated but kept for transition)
- Updating consumers outside
packages/configuration (done in final-cleanup subissue)
Implementation Plan
| ID |
Task |
Notes |
| T1 |
Copy v2_0_0/ directory to v3_0_0/ |
cp -r packages/configuration/src/v2_0_0/ packages/configuration/src/v3_0_0/ |
| T2 |
Update v3_0_0/mod.rs to use crate::v3_0_0 internal paths |
Fix module references within the copied files |
| T3 |
Copy logging.rs into v2_0_0/logging.rs |
Crate-root logging.rs (TraceStyle, setup, tracing_init) → v2_0_0 |
| T4 |
Copy logging.rs into v3_0_0/logging.rs |
Same content as T3; v3 gets its own copy |
| T5 |
Update lib.rs to expose pub mod v3_0_0 |
Alongside existing pub mod v2_0_0 |
| T6 |
Update default config files to schema_version = "3.0.0" |
In share/default/config/ |
| T7 |
Wire application entry point to use v3_0_0 by default |
Update lib.rs or container.rs |
| T8 |
Add smoke tests: deserialize default v3 config |
Verify v3_0_0 can parse the default config |
| T9 |
Run linter all and full test suite |
|
Acceptance Criteria
Part of EPIC: #1978 — Configuration Overhaul (schema v3.0.0)
EPIC position: Subissue #1 of 9. Foundation — all other subissues depend on this. Must be merged before any other subissue begins.
Spec:
docs/issues/drafts/configuration-overhaul-copy-v2-to-v3-baseline.mdGoal
Copy the entire
packages/configuration/src/v2_0_0/module topackages/configuration/src/v3_0_0/as the starting point for all breaking changes in the Configuration Overhaul EPIC. Also copy the crate-rootlogging.rs(which containsTraceStyle,setup(), andtracing_init()) into bothv2_0_0/andv3_0_0/so each versioned module is fully self-contained (data types + behaviour). Wirev3_0_0as the default schema version while keepingv2_0_0available for backward compatibility during the transition.Background
The Configuration Overhaul EPIC groups multiple breaking changes to the configuration schema. Rather than modifying
v2_0_0in place (which would break existing consumers), we create a newv3_0_0module as a copy ofv2_0_0. Each subsequent subissue in the EPIC applies its changes to thev3_0_0module only.This approach:
v2_0_0intact for any consumers that still need itScope
In Scope
packages/configuration/src/v2_0_0/→packages/configuration/src/v3_0_0/packages/configuration/src/logging.rsintov2_0_0/logging.rsandv3_0_0/logging.rspackages/configuration/src/lib.rsto expose bothv2_0_0andv3_0_0modulesv3_0_0as the default schema version used by the applicationshare/default/config/files to referenceschema_version = "3.0.0"Out of Scope
v2_0_0module (deprecated but kept for transition)packages/configuration(done in final-cleanup subissue)Implementation Plan
v2_0_0/directory tov3_0_0/cp -r packages/configuration/src/v2_0_0/ packages/configuration/src/v3_0_0/v3_0_0/mod.rsto usecrate::v3_0_0internal pathslogging.rsintov2_0_0/logging.rslogging.rs(TraceStyle, setup, tracing_init) → v2_0_0logging.rsintov3_0_0/logging.rslib.rsto exposepub mod v3_0_0pub mod v2_0_0schema_version = "3.0.0"share/default/config/v3_0_0by defaultlib.rsorcontainer.rslinter alland full test suiteAcceptance Criteria
packages/configuration/src/v3_0_0/exists as an exact copy ofv2_0_0/lib.rsexposes bothv2_0_0andv3_0_0modulesv3_0_0by defaultschema_version = "3.0.0"linter allexits with code0