The resume scope (#1573, #1582) covers pipeline name, --filter, and TARGET routing. It records nothing about the source. A [source] edit between runs still skips silently.
Reproduce
- Run a replication pipeline to success.
- Edit its
[source] block — point source.discovery.adapter at another adapter, or change schema_pattern so discovery maps different source tables onto the same target names.
rocky run --resume-latest after a failure. completed_keys matches the checkpoint's Success entries by TARGET key, so tables never copied from the new source are skipped and the run exits 0.
Same code path as the endpoint hole #1582 closes, one field short.
The decision
What defines "the same run"? Two candidate shapes:
Refusing more is fail-closed; refusing everything makes --resume-latest useless after any tweak. This is a contract call, not a patch.
Found by independent adversarial review (Codex) of #1582's branch; the reproduction was verified against the real code path before filing.
The resume scope (#1573, #1582) covers pipeline name,
--filter, and TARGET routing. It records nothing about the source. A[source]edit between runs still skips silently.Reproduce
[source]block — pointsource.discovery.adapterat another adapter, or changeschema_patternso discovery maps different source tables onto the same target names.rocky run --resume-latestafter a failure.completed_keysmatches the checkpoint'sSuccessentries by TARGET key, so tables never copied from the new source are skipped and the run exits 0.Same code path as the endpoint hole #1582 closes, one field short.
The decision
What defines "the same run"? Two candidate shapes:
endpoint_identity()plus the schema pattern toResumeTarget. Narrow, matches fix(engine): structure the resume scope and sweep checkpoints with run records #1582's pattern.load_rocky_config_fingerprintedalready computes, and refuse (or warn) on mismatch. Total, but refuses resume on ANY pipeline edit, harmless ones included.Refusing more is fail-closed; refusing everything makes
--resume-latestuseless after any tweak. This is a contract call, not a patch.Found by independent adversarial review (Codex) of #1582's branch; the reproduction was verified against the real code path before filing.