diff --git a/apps/cli/src/legacy/commands/db/reset/reset.errors.ts b/apps/cli/src/legacy/commands/db/reset/reset.errors.ts index bfb4c3e539..80d2cba332 100644 --- a/apps/cli/src/legacy/commands/db/reset/reset.errors.ts +++ b/apps/cli/src/legacy/commands/db/reset/reset.errors.ts @@ -21,8 +21,10 @@ export class LegacyDbResetVersionFlagsError extends Data.TaggedError( }> {} /** - * `--version` is not a valid integer. Byte-matches Go's - * `failed to parse : invalid version number` (`repair.go:24-29`). + * `--version` is not a valid integer. Byte-matches Go's bare + * `repair.ErrInvalidVersion` = `invalid version number`, returned unwrapped by + * `reset.Run` (`reset.go:35-36`) — the `failed to parse :` wrapper is the + * `migration repair` path only (`repair.go:29`). */ export class LegacyDbResetInvalidVersionError extends Data.TaggedError( "LegacyDbResetInvalidVersionError", diff --git a/apps/cli/src/legacy/commands/db/reset/reset.handler.ts b/apps/cli/src/legacy/commands/db/reset/reset.handler.ts index d20ee20bb4..7c9d10c01c 100644 --- a/apps/cli/src/legacy/commands/db/reset/reset.handler.ts +++ b/apps/cli/src/legacy/commands/db/reset/reset.handler.ts @@ -190,9 +190,11 @@ export const legacyDbReset = Effect.fn("legacy.db.reset")(function* (flags: Lega if (Option.isSome(flags.version)) { const v = flags.version.value; if (!INTEGER_PATTERN.test(v)) { + // Go's reset.Run returns the bare repair.ErrInvalidVersion (reset.go:35-36); + // the `failed to parse :` wrapper belongs to `migration repair` only. return yield* Effect.fail( new LegacyDbResetInvalidVersionError({ - message: `failed to parse ${v}: invalid version number`, + message: "invalid version number", }), ); } diff --git a/apps/cli/src/legacy/commands/db/reset/reset.integration.test.ts b/apps/cli/src/legacy/commands/db/reset/reset.integration.test.ts index 48d25519c8..5c4a521ee0 100644 --- a/apps/cli/src/legacy/commands/db/reset/reset.integration.test.ts +++ b/apps/cli/src/legacy/commands/db/reset/reset.integration.test.ts @@ -702,8 +702,15 @@ describe("legacy db reset", () => { version: Option.some("not-a-number"), }).pipe(Effect.provide(layer), Effect.exit); expect(Exit.isFailure(exit)).toBe(true); - if (Exit.isFailure(exit)) - expect(JSON.stringify(exit.cause)).toContain("invalid version number"); + if (Exit.isFailure(exit)) { + const failure = Cause.findErrorOption(exit.cause); + expect(Option.isSome(failure) && failure.value._tag).toBe( + "LegacyDbResetInvalidVersionError", + ); + // Go's reset.Run returns the bare repair.ErrInvalidVersion (reset.go:35-36) — + // no `failed to parse :` wrapper (that belongs to `migration repair`). + expect(Option.isSome(failure) && failure.value.message).toBe("invalid version number"); + } }); }); diff --git a/apps/cli/src/legacy/commands/migration/repair/repair.integration.test.ts b/apps/cli/src/legacy/commands/migration/repair/repair.integration.test.ts index a7d335cddd..d00cb96677 100644 --- a/apps/cli/src/legacy/commands/migration/repair/repair.integration.test.ts +++ b/apps/cli/src/legacy/commands/migration/repair/repair.integration.test.ts @@ -217,6 +217,11 @@ describe("legacy migration repair", () => { expect(Option.isSome(failure) && failure.value._tag).toBe( "LegacyMigrationInvalidVersionError", ); + // Guard: unlike `db reset` (bare `invalid version number`, reset.go:35-36), + // `migration repair` keeps Go's `failed to parse :` wrapper (repair.go:29). + expect(Option.isSome(failure) && failure.value.message).toBe( + "failed to parse not-a-number: invalid version number", + ); } }).pipe(Effect.provide(layer)); });