diff --git a/migrate/README.md b/migrate/README.md index f2aa56e..d75afd9 100644 --- a/migrate/README.md +++ b/migrate/README.md @@ -152,7 +152,8 @@ unrelated modules. Services are suppressed; the existing `lifecycle/cli.Action` owns signals, cancellation, errors and reverse cleanup. Help and invalid arguments never run setup. Target versions must be nonnegative decimal int64 values, with no extra arguments; malformed usage returns exit 2 through `cli.Run`. Zero follows -Goose: `down-to 0` rolls everything back, while `up-to 0` is a runtime error. +Goose: `down-to 0` rolls everything back; `up-to 0` succeeds if nothing is pending, +but returns a runtime error when pending work reaches Goose's version validation. Resolver/Goose/cleanup and status Writer failures return runtime errors (exit 1). Supply the native command Writer and configured Goose logger for output. diff --git a/migrate/lifecycle/lifecycle_test.go b/migrate/lifecycle/lifecycle_test.go index 111fa7c..c9f6ff2 100644 --- a/migrate/lifecycle/lifecycle_test.go +++ b/migrate/lifecycle/lifecycle_test.go @@ -199,7 +199,7 @@ func TestCommandsSQLite(t *testing.T) { t.Fatal(calls) } } - // Zero is valid syntax; Goose UpTo rejects it after setup, unlike DownTo(0). + // Zero is valid syntax; Goose UpTo rejects it after setup when migrations are pending. code, err := run(t, []string{"up-to", "0"}, []lifecycle.Module{module}, resolver, &out) if code != 1 || err == nil || !strings.Contains(err.Error(), "greater than 0") { t.Fatalf("zero UpTo: code=%d err=%v", code, err)