Skip to content

scientific(coverage): make execution consume validation-owner window cardinality #751

Open

Description

@seonghobae

Finding

#750 moved the declared rolling-origin window cardinality into CoverageCalibrationDesign::tepp_nominal_95_v1() and bound it into the prospective design fingerprint. The execution owner still keeps an independent EXPECTED_ROLLING_ORIGIN_WINDOW_COUNT: usize = 5 in analysis_engine::coverage_calibration_execution and uses that copied literal for cutoff-shape validation, vector capacity, final window-count validation, and the regression assertion.

The current values agree, so today's numerical result is unchanged. The problem is ownership: a future validation-design revision can change the owner-issued cardinality/fingerprint while the execution path continues to construct and validate a caller-local count. That would either reject the owner design for the wrong reason or, if surrounding geometry also changed, execute a different within-DGP estimand than the fingerprinted design. This is exactly the copied-contract drift #750 was intended to remove.

Required repair

  • remove the analysis-local rolling-origin window-count literal;
  • make coverage_calibration_execution read the count from CoverageCalibrationDesign::tepp_nominal_95_v1().declared_rolling_origin_window_count() for cutoff geometry, allocation, final validation, and regression evidence;
  • keep actual partition construction in analysis_engine; do not move split/cutoff arithmetic into validation_core;
  • preserve FIRST_TRAINING_EVENT_INDEX, simulation config/seed schedule, equal-window aggregation, interval arithmetic, percentile/MCSE methods, 10,000 attempted-DGP count, and undefined numerical-failure acceptability;
  • add an owner-binding regression contract so future cardinality drift fails before scientific acceptance;
  • currentize the stale schema-v6 evidence arithmetic rustdoc to schema v9 while touching the same lane-local owner path;
  • do not claim this repair executes the 10,000-DGP study or closes scientific(selection): add leakage-safe rolling-origin K validation #680.

Boundary

validation_core owns the prospective estimand cardinality; analysis_engine owns how the five current windows are constructed from the scenario and canonical rolling-origin admission. The fix is dependency direction, not a second splitter or a new acceptance criterion.

Refs #639 #680 #733 #741 #750.

Activity

  1. seonghobae commented on Sep 24, 2026

    @seonghobae
    ContributorAuthor

    Implemented ordinary-forward on #639. Exact lineage: 11d46e9fe2314924d269724363a510edc18e3df1 removes the analysis-local EXPECTED_ROLLING_ORIGIN_WINDOW_COUNT authority and makes cutoff geometry/allocation/final validation/regression consume CoverageCalibrationDesign::tepp_nominal_95_v1().declared_rolling_origin_window_count(); 2d146d6a1a605181a2558976340d3fd0c6282ab0 currentizes the study-assembly rustdoc from schema-v6 to schema-v9; c7db4b224084397a39d4877c64739f00c03e4705 adds the CHANGELOG and is the current exact head.

    No synthetic RED is claimed: before this repair both authorities were numerically 5, so the defect was duplicated ownership/future drift, not an observable old-head numerical mismatch. The regression contract now binds execution to the validation owner. This does not execute the 10,000-DGP study, define numerical-failure acceptability, or satisfy #680. Keep #751 open until protected-main inheritance or a fully verified successor.

  2. seonghobae commented on Sep 24, 2026

    @seonghobae
    ContributorAuthor

    #753 is the successor owner-path repair after #751. #751 removed the duplicated analysis-local window-count authority; #753 removes the remaining analysis-local first-training-event literal and makes that temporal start index part of the prospective validation design/fingerprint. Exact #639 head is 5eaa422e318903407c1ed8a2ee0a7e82c07d2b0f; fingerprint domain is v9 with canonical fingerprint f6fd3855ec7ef413309cbb0b48b3572853d4fa87d4c46e47f265e06074aeffa0. #751 should remain open until its valid delta is inherited by protected main; #753 does not supersede or discard the cardinality repair.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    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