Skip to content

Module 10: Migration, Governance, and DVC Boundaries

Page Maps

graph LR
  family["Reproducible Research"]
  program["Deep Dive DVC"]
  section["Migration Governance DVC Boundaries"]
  page["Module 10: Migration, Governance, and DVC Boundaries"]
  capstone["Capstone evidence"]

  family --> program --> section --> page
  page -.applies in.-> capstone
flowchart LR
  review["review claims"] --> migrate["govern one boundary change"]
  migrate --> intervene["repair trust failures"]
  intervene --> own["assign system authority"]
  own --> handoff["leave an independent handoff"]

This module turns the course's individual DVC contracts into a stewardship method. You will review claims rather than appearances, migrate one state boundary without changing release meaning, write governance that can be executed, intervene on shortcuts with repair evidence, and decide where DVC's authority ends.

The module is built around one decision:

May an approved release move from publish/v1/ to a registry location while consumers, rollback, identity, and ownership remain trustworthy?

You will not answer from a hypothetical checklist. The capstone creates one approved specimen and seven deliberately blocked variants.

What you should already know

This final module assumes you can:

  • distinguish Git revision, DVC metadata, cache, workspace, and remote state;
  • read dvc.yaml beside dvc.lock;
  • identify declared dependencies and parameters;
  • explain why metric semantics precede numeric comparison;
  • distinguish an experiment from a promoted release;
  • run a clean recovery route for protected state.

If those distinctions are unclear, use this diagnostic:

If you cannot yet explain Revisit
why a path is not content identity Module 2
why current success may hide runtime drift Module 3
why undeclared inputs break invalidation Module 4
why equal metric names may not be comparable Module 5
why experiment evidence is not release approval Modules 6 and 9
why a working workspace does not prove recovery Module 8

You do not need an external registry account. The local specimen models the contract and decision evidence without network access.

Learning outcomes

By the end, you should be able to:

  • express repository promises as falsifiable claims;
  • classify evidence as verified, contradicted, unverified, or out of scope;
  • write a finding with consequence, repair, and closure proof;
  • define a migration change budget and preserved invariants;
  • require independent consumer and rollback evidence;
  • govern consequential changes with triggers, evidence, owners, and receipts;
  • bound exceptions with expiry and removal conditions;
  • assign authority across Git, DVC, CI, registry, deployment, access, and incident systems;
  • hand the repository to a maintainer who missed the class.

The executable case

The source is the capstone's verified promoted bundle:

capstone/publish/v1/
├── data-profile.json
├── manifest.json
├── metrics.json
├── model.json
├── params.yaml
├── predictions.csv
└── report.md

The proposed target is:

incident-escalation/2026-07

The migration may change only consumer location. It must preserve inventory, bytes, release meaning, and source provenance.

flowchart TB
  S["verified source release"] --> C["migration contract"]
  C --> T["candidate target"]
  T --> I["inventory and digest comparison"]
  T --> U["consumer retrieval"]
  S --> R["retained rollback"]
  I --> D{"cutover decision"}
  U --> D
  R --> D
  O["correct owners and current exceptions"] --> D

Prepare the study environment

Run from the repository root:

make PROGRAM=reproducible-research/deep-dive-dvc \
  capstone-boundary-migration-audit

make PROGRAM=reproducible-research/deep-dive-dvc \
  capstone-boundary-migration-selftest

The audit bundle appears at:

artifacts/audit/reproducible-research/deep-dive-dvc/boundary-migration/

Confirm that report.json contains one APPROVE_CUTOVER and seven BLOCK_CUTOVER decisions. If the command fails, keep the error output and use the capstone README plus make ... capstone-install to restore the environment. Do not continue by imagining what the report would contain.

A serious-session route

Plan about four hours without the optional extensions.

Time Study surface Work product
25 min this overview and audit guide written decision question
40 min repository review lesson claims/evidence table
45 min migration lesson and audit contrasts invariant and rollback map
35 min governance and exception lesson governance register
35 min anti-pattern and ownership lessons intervention and owner map
35 min worked investigation independent cutover finding
45 min exercises cumulative stewardship packet
20 min answer review corrected reasoning notes

Pause after migration if you cannot explain why UNBOUNDED_CHANGE blocks while its file inventories still match. Pause after ownership if you cannot explain why non-empty owner fields can still be wrong.

Reading route

Page What it teaches Evidence to keep open
Repository Review without Wishful Thinking turns promises into falsifiable findings capstone declarations, publish contract, audit reports
Safe Migration Plans for State Boundaries defines change budgets, invariants, dual boundaries, and rollback migration contract and eight assessments
Governance Rules for Long-Lived Repositories connects triggers to proof, authority, receipts, and exceptions Make targets, tests, stale-exception case
Anti-Patterns and Review Interventions diagnoses mechanisms and writes bounded repairs rejected specimen cases
DVC Tool Boundaries and System Ownership separates capability, evidence, and authority ownerless and ownership-overreach cases
Worked Investigation: Blocking an Unsafe Boundary Cutover investigates one block from claim through closure proof partial-copy assessment
Exercises produces ten cumulative review artifacts all audit evidence
Exercise Answers models reasoning and proof limits your completed packet
Glossary distinguishes migration and governance terms use when decision language blurs

Read in order on the first pass. For later review, enter through the problem:

  • uncertain repository claim → repository review;
  • moving a state location → migration;
  • recurring risky change → governance;
  • vague or scolding review comment → interventions;
  • conflict between DVC and another platform → ownership.

How to read an assessment

Each case has assessment.json. Read these fields first:

jq '{
  finding,
  decision,
  failed_checks,
  checks
}' artifacts/audit/reproducible-research/deep-dive-dvc/boundary-migration/workspace/partial-copy/assessment.json

Then inspect only the evidence related to the failed check. Avoid reading the implementation first; code familiarity can make you accept the tool's status without reconstructing its argument.

Use one contrast at a time:

Accepted control Rejected contrast Distinction learned
complete cutover partial copy byte and inventory identity
complete cutover unbounded change one-boundary budget
complete cutover no rollback target success versus reversibility
complete cutover unverified consumer producer proof versus consumer proof
complete cutover ownerless target evidence versus accountability
complete cutover stale exception temporary bypass lifecycle
complete cutover ownership overreach owner completeness versus correctness

Evidence language

Use four result words consistently:

Result Meaning
verified direct evidence supports the bounded claim
contradicted direct evidence shows the claim is false
unverified the required observation is absent
out of scope this repository or route does not promise the claim

Example:

  • target inventory in PARTIAL_COPY is contradicted;
  • a real production load objective is out of scope for the specimen;
  • a consumer check never attempted is unverified;
  • complete specimen inventory equality is verified.

This vocabulary prevents missing evidence from becoming wishful approval.

Commands to keep close

From the repository root:

# governed consumer-location migration
make PROGRAM=reproducible-research/deep-dive-dvc \
  capstone-boundary-migration-audit

# protected-history remote migration
make PROGRAM=reproducible-research/deep-dive-dvc \
  capstone-recovery-readiness-audit

# immutable candidate promotion
make PROGRAM=reproducible-research/deep-dive-dvc \
  capstone-promotion-integrity-audit

# semantic experiment comparison
make PROGRAM=reproducible-research/deep-dive-dvc \
  capstone-experiment-comparability-audit

Use the route that matches the decision. More checks are not automatically better; irrelevant checks can obscure the missing premise.

Proof limits

The module proves:

  • how to structure and enforce a boundary-cutover argument;
  • exact file identity for the local specimen;
  • isolated rejection of seven unsafe cases;
  • deterministic exception evaluation;
  • tests for the modeled decision rule.

It does not prove:

  • production registry availability or load behavior;
  • organization-wide access policy;
  • deployment health;
  • legal retention compliance;
  • recovery objectives beyond the modeled route;
  • that every real repository influence is declared.

Do not convert a passing local audit into any of those broader claims.

Optional extensions

After the required packet:

  • add a measured rollback case without weakening the existing specimen;
  • model a DVC remote migration across two protected revisions;
  • draft a metric-schema contract that forbids comparisons across versions;
  • create a handoff receipt between the promoted manifest and a deployment release identity;
  • review a repository you maintain using the four evidence result words.

Keep each extension focused on one decision boundary.

Completion standard

You have completed the module when you can, without instructor help:

  • run and navigate the audit bundle;
  • explain why every rejected case blocks;
  • write a finding that stays inside observed evidence;
  • distinguish cutover approval from source retirement;
  • define consumer and rollback proofs independently;
  • write a rule with trigger, contract, proof, owner, and receipt;
  • remove or renew an exception through an explicit decision;
  • assign DVC only the responsibilities its evidence can support;
  • give another maintainer a durable route with proof limits.

The final skill is not using DVC for every concern. It is preserving artifact lineage while state crosses boundaries that other systems own.