diff --git a/furniture-3d-system/scripts/apply-master-data-foundation-migrations.js b/furniture-3d-system/scripts/apply-master-data-foundation-migrations.js index 199fb5ea..2ed40111 100644 --- a/furniture-3d-system/scripts/apply-master-data-foundation-migrations.js +++ b/furniture-3d-system/scripts/apply-master-data-foundation-migrations.js @@ -116,10 +116,15 @@ function writeJsonReport(outputPath, payload, rootDir = ROOT_DIR) { } function migrationHistoryReady(migrationHistory = {}) { + const unresolvedRolledBackMigrationRows = + migrationHistory.unresolvedRolledBackMigrationRows == null + ? migrationHistory.rolledBackMigrationRows + : migrationHistory.unresolvedRolledBackMigrationRows + return ( migrationHistory.tableExists === true && migrationHistory.unfinishedMigrationRows === 0 && - migrationHistory.rolledBackMigrationRows === 0 + unresolvedRolledBackMigrationRows === 0 ) } @@ -251,7 +256,7 @@ function buildFoundationRequiredMigrationApplyPlan(readiness, options = {}) { if (!migrationHistoryReady(readiness.migrationHistory)) { blockers.push({ key: 'migrationHistory.notReady', - message: '治理迁移/护栏真实应用前,必须先补齐 _prisma_migrations 历史且无失败/回滚记录。', + message: '治理迁移/护栏真实应用前,必须先补齐 _prisma_migrations 历史且无失败/未解决回滚记录。', }) } if (phase === 'finalize' && readiness.pendingStructureMigrationCount > 0) { diff --git a/furniture-3d-system/scripts/run-master-data-foundation-audit.js b/furniture-3d-system/scripts/run-master-data-foundation-audit.js index 53437193..99a888eb 100644 --- a/furniture-3d-system/scripts/run-master-data-foundation-audit.js +++ b/furniture-3d-system/scripts/run-master-data-foundation-audit.js @@ -914,6 +914,10 @@ function buildBaselineRepairPlanSummary(baselineRepairPlan) { function buildFoundationRequiredMigrationApplyPlanSummary(applyPlan) { if (!applyPlan) return null + const unresolvedRolledBackMigrationRows = + applyPlan.migrationHistory?.unresolvedRolledBackMigrationRows == null + ? applyPlan.migrationHistory?.rolledBackMigrationRows + : applyPlan.migrationHistory?.unresolvedRolledBackMigrationRows return { mode: applyPlan.mode || '', dryRun: applyPlan.dryRun !== false, @@ -924,7 +928,7 @@ function buildFoundationRequiredMigrationApplyPlanSummary(applyPlan) { migrationHistoryReady: applyPlan.migrationHistory?.tableExists === true && applyPlan.migrationHistory?.unfinishedMigrationRows === 0 && - applyPlan.migrationHistory?.rolledBackMigrationRows === 0, + unresolvedRolledBackMigrationRows === 0, blockerKeys: Array.isArray(applyPlan.blockers) ? applyPlan.blockers.map((blocker) => blocker.key).filter(Boolean) : [], diff --git a/furniture-3d-system/tests/scripts/apply-master-data-foundation-migrations.test.js b/furniture-3d-system/tests/scripts/apply-master-data-foundation-migrations.test.js index c0ce731f..aac84d80 100644 --- a/furniture-3d-system/tests/scripts/apply-master-data-foundation-migrations.test.js +++ b/furniture-3d-system/tests/scripts/apply-master-data-foundation-migrations.test.js @@ -23,6 +23,8 @@ function readiness(overrides = {}) { appliedMigrationRows: 86, unfinishedMigrationRows: 0, rolledBackMigrationRows: 0, + resolvedRolledBackMigrationRows: 0, + unresolvedRolledBackMigrationRows: 0, }, migrationCount: 43, readyMigrationCount: 11, @@ -77,15 +79,33 @@ describe('apply-master-data-foundation-migrations', () => { it('requires clean Prisma migration history before applying foundation guards', () => { expect(migrationHistoryReady(readiness().migrationHistory)).toBe(true) + expect(migrationHistoryReady({ + tableExists: true, + unfinishedMigrationRows: 0, + rolledBackMigrationRows: 11, + resolvedRolledBackMigrationRows: 11, + unresolvedRolledBackMigrationRows: 0, + })).toBe(true) expect(migrationHistoryReady({ tableExists: false, unfinishedMigrationRows: 0, rolledBackMigrationRows: 0, + resolvedRolledBackMigrationRows: 0, + unresolvedRolledBackMigrationRows: 0, })).toBe(false) expect(migrationHistoryReady({ tableExists: true, unfinishedMigrationRows: 1, rolledBackMigrationRows: 0, + resolvedRolledBackMigrationRows: 0, + unresolvedRolledBackMigrationRows: 0, + })).toBe(false) + expect(migrationHistoryReady({ + tableExists: true, + unfinishedMigrationRows: 0, + rolledBackMigrationRows: 11, + resolvedRolledBackMigrationRows: 10, + unresolvedRolledBackMigrationRows: 1, })).toBe(false) })