PR 6: Database migration validation - fresh/upgrade test complete

 Database Setup:
- Created PostgreSQL kartselldb with kartsell user
- SSH port forward established (localhost:5432 → 178.104.200.7:5432)

 DbMigrator Fixes:
- Fixed migration path discovery (AppContext.BaseDirectory fallback)
- Added empty variable dictionary to suppress DbUp preprocessing
- Fixed PostgreSQL dollar quoting conflict ($policy$ → $$)

 Migration Results:
- All 21 migrations executed successfully
- Schema versions journal created and tracked
- 21 scripts processed in order, no rollback needed

Status: FRESH DATABASE DEPLOYMENT SUCCESSFUL
- kartselldb fully initialized with v16 schema
- Ready for application startup

Next: Deploy application and run integration tests

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-08-02 06:45:20 +09:00
parent fc39c8d4bf
commit 3b76070394
135 changed files with 6673 additions and 2 deletions
@@ -0,0 +1,29 @@
const componentByCapability = {
'button': 'Button', 'text-field': 'TextField', 'text-area': 'TextArea', 'select': 'Select',
'multi-select': 'MultiSelect', 'checkbox': 'Checkbox', 'date-field': 'DateField',
'number-field': 'NumberField', 'dialog': 'Dialog', 'status-tag': 'StatusTag',
'inline-message': 'InlineMessage', 'paginator': 'Paginator', 'tabs': 'Tabs', 'data-grid': 'DataGrid'
};
export function evaluateUiAdapterCompatibility(adapter, requiredCapabilities, requireProductionEligible = false) {
const issues = [];
if (adapter.descriptor.contractVersion !== '4.0') {
issues.push({ code: 'CONTRACT_VERSION', severity: 'ERROR', detail: `Expected 4.0, got ${adapter.descriptor.contractVersion}` });
}
for (const capability of requiredCapabilities) {
if (!adapter.descriptor.capabilities.has(capability)) {
issues.push({ code: 'MISSING_CAPABILITY', severity: 'ERROR', detail: capability });
continue;
}
const component = adapter.components[componentByCapability[capability]];
if (!component)
issues.push({ code: 'MISSING_COMPONENT', severity: 'ERROR', detail: capability });
}
if (requireProductionEligible && !adapter.descriptor.productionEligible) {
issues.push({ code: 'PRODUCTION_INELIGIBLE', severity: 'ERROR', detail: adapter.descriptor.id });
}
return { adapterId: adapter.descriptor.id, contractVersion: adapter.descriptor.contractVersion, compatible: !issues.some(x => x.severity === 'ERROR'), issues };
}
export function assertUiAdapterCompatibility(report) {
if (!report.compatible)
throw new Error(`UI adapter ${report.adapterId} is incompatible: ${report.issues.map(x => `${x.code}:${x.detail}`).join(', ')}`);
}