paperclipai/paperclip · error

Database has tables but no migration journal; automatic migr

Error message

Database has tables but no migration journal; automatic migration is unsafe. Initialize migration history manually.

What it means

Safety refusal during automatic migration: the target database already contains tables but has no drizzle migration journal, so the migrator cannot distinguish 'already migrated by other means' from 'diverged schema' and refuses to guess, requiring manual migration-history initialization.

Source

Thrown at packages/db/src/client.ts:836

  return availableMigrations.slice(0, Math.max(0, rows.length));
}

export type MigrationHistoryReconcileResult = {
  repairedMigrations: string[];
  remainingMigrations: string[];
};

export async function reconcilePendingMigrationHistory(
  url: string,
): Promise<MigrationHistoryReconcileResult> {
  const state = await inspectMigrations(url);
  if (state.status !== "needsMigrations" || state.reason !== "pending-migrations") {
    return { repairedMigrations: [], remainingMigrations: [] };
  }

  const sql = createUtilitySql(url);
  const repairedMigrations: string[] = [];

  try {
    const journalEntries = await listJournalMigrationEntries();
    const folderMillisByFile = new Map(journalEntries.map((entry) => [entry.fileName, entry.folderMillis]));
    const migrationTableSchema = await discoverMigrationTableSchema(sql);
    if (!migrationTableSchema) {
      return { repairedMigrations, remainingMigrations: state.pendingMigrations };
    }

    const columnNames = await getMigrationTableColumnNames(sql, migrationTableSchema);
    const qualifiedTable = `${quoteIdentifier(migrationTableSchema)}.${quoteIdentifier(DRIZZLE_MIGRATIONS_TABLE)}`;

    for (const migrationFile of state.pendingMigrations) {
      const migrationContent = await readMigrationFileContent(migrationFile);
      const alreadyApplied = await migrationContentAlreadyApplied(sql, migrationContent);
      if (!alreadyApplied) break;

      const hash = createHash("sha256").update(migrationContent).digest("hex");

View on GitHub (pinned to 01ad858492)

Solutions

  1. Initialize migration history manually (baseline the existing schema) before enabling automatic migration.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at packages/db/src/client.ts:756 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of paperclipai/paperclip@01ad858492 (2026-08-18). Data as JSON: /api/errors/41305bbc50dfaa0b. Report an issue: GitHub.