Skip to content

Copy configuration schema v2_0_0 to v3_0_0 as baseline #1979

Description

@josecelano

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

  • packages/configuration/src/v3_0_0/ exists as an exact copy of v2_0_0/
  • lib.rs exposes both v2_0_0 and v3_0_0 modules
  • Application uses v3_0_0 by default
  • All existing tests pass (v2 unchanged)
  • Default config files reference schema_version = "3.0.0"
  • linter all exits with code 0

Metadata

Metadata

Assignees

Type

Fields

No fields configured for Task.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions