Initial commit of Descrybe v2 without local scratch artifacts.
Drop one-shot tmp/axe scripts and agent i18n scratch so the Gitea tree is deployable.
This commit is contained in:
@@ -0,0 +1,250 @@
|
||||
{
|
||||
"generated_at": "2026-08-04T00:38:05Z",
|
||||
"mode": "live",
|
||||
"domains": "settings,formulas,tags,woo,usage",
|
||||
"resume": true,
|
||||
"counts": {
|
||||
"companies": 27,
|
||||
"company_settings_skipped": 5,
|
||||
"demo_memberships": 30,
|
||||
"demo_user": 1,
|
||||
"feed_tags_skipped": 1,
|
||||
"field_groups_skipped": 23,
|
||||
"memberships": 15,
|
||||
"standard_fields_skipped": 145,
|
||||
"structured_description_fields_skipped": 28,
|
||||
"usage_metrics": 5,
|
||||
"users": 21,
|
||||
"woocommerce_configs": 0
|
||||
},
|
||||
"validation": {
|
||||
"mode": "live",
|
||||
"counts": [
|
||||
{
|
||||
"entity": "companies",
|
||||
"mysql": 27,
|
||||
"postgres": 30,
|
||||
"delta": 3
|
||||
},
|
||||
{
|
||||
"entity": "profiles",
|
||||
"mysql": 21,
|
||||
"postgres": 77,
|
||||
"delta": 56,
|
||||
"note": "profiles → memberships"
|
||||
},
|
||||
{
|
||||
"entity": "users",
|
||||
"mysql": -1,
|
||||
"postgres": 25,
|
||||
"delta": 0,
|
||||
"note": "no password_hash imported mysql_missing"
|
||||
},
|
||||
{
|
||||
"entity": "admin_users",
|
||||
"mysql": 1,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "folded into users.is_platform_admin"
|
||||
},
|
||||
{
|
||||
"entity": "plans",
|
||||
"mysql": 5,
|
||||
"postgres": 9,
|
||||
"delta": 4
|
||||
},
|
||||
{
|
||||
"entity": "company_plans",
|
||||
"mysql": 5,
|
||||
"postgres": 10,
|
||||
"delta": 5
|
||||
},
|
||||
{
|
||||
"entity": "credit_balances",
|
||||
"mysql": 6,
|
||||
"postgres": 8,
|
||||
"delta": 2
|
||||
},
|
||||
{
|
||||
"entity": "categories",
|
||||
"mysql": 8278,
|
||||
"postgres": 8280,
|
||||
"delta": 2
|
||||
},
|
||||
{
|
||||
"entity": "attributes",
|
||||
"mysql": 95292,
|
||||
"postgres": 57630,
|
||||
"delta": -37662
|
||||
},
|
||||
{
|
||||
"entity": "category_attributes",
|
||||
"mysql": 74377,
|
||||
"postgres": 74377,
|
||||
"delta": 0
|
||||
},
|
||||
{
|
||||
"entity": "custom_variables",
|
||||
"mysql": 36,
|
||||
"postgres": 37,
|
||||
"delta": 1,
|
||||
"note": "label/example → value"
|
||||
},
|
||||
{
|
||||
"entity": "xml_feeds",
|
||||
"mysql": 31,
|
||||
"postgres": 34,
|
||||
"delta": 3,
|
||||
"note": "xml_feeds → input_feeds"
|
||||
},
|
||||
{
|
||||
"entity": "raw_products",
|
||||
"mysql": 126516,
|
||||
"postgres": 124426,
|
||||
"delta": -2090
|
||||
},
|
||||
{
|
||||
"entity": "processed_products",
|
||||
"mysql": 7219,
|
||||
"postgres": 7221,
|
||||
"delta": 2
|
||||
},
|
||||
{
|
||||
"entity": "export_feeds",
|
||||
"mysql": 8,
|
||||
"postgres": 9,
|
||||
"delta": 1
|
||||
},
|
||||
{
|
||||
"entity": "files",
|
||||
"mysql": 1,
|
||||
"postgres": 3,
|
||||
"delta": 2,
|
||||
"note": "metadata only; blobs not copied"
|
||||
}
|
||||
],
|
||||
"postgres_counts": {
|
||||
"attributes": 57630,
|
||||
"categories": 8280,
|
||||
"category_attributes": 74377,
|
||||
"companies": 30,
|
||||
"company_plans": 10,
|
||||
"credit_balances": 8,
|
||||
"custom_variables": 37,
|
||||
"export_feeds": 9,
|
||||
"feed_mappings": 25,
|
||||
"files": 3,
|
||||
"input_feeds": 34,
|
||||
"memberships": 77,
|
||||
"plans": 9,
|
||||
"processed_products": 7221,
|
||||
"raw_products": 124426,
|
||||
"users": 25
|
||||
},
|
||||
"orphans": [
|
||||
{
|
||||
"check": "memberships_missing_user",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "memberships_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "categories_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "attributes_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "custom_variables_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "raw_products_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "raw_products_missing_feed",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "processed_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "processed_missing_raw",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "processed_missing_feed",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "export_feeds_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "export_feeds_missing_source",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "feed_mappings_missing_feed",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "files_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "company_plans_missing_plan",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "platform_admins",
|
||||
"count": 3,
|
||||
"pass": true
|
||||
}
|
||||
],
|
||||
"orphan_summary": {
|
||||
"passed": 16,
|
||||
"failed": 0,
|
||||
"total": 16
|
||||
},
|
||||
"ok": true
|
||||
},
|
||||
"demo": {
|
||||
"email": "demo@descrybe.local",
|
||||
"password_set": true,
|
||||
"user_id": "276d5d0e-665a-40e4-ac78-1cf27e807b10",
|
||||
"primary_company": "ee246275-dec0-4446-9e83-58d0c16c258a",
|
||||
"primary_company_name": "Local Demo Co",
|
||||
"memberships_admin": 30,
|
||||
"platform_admin": true,
|
||||
"note": "Password documented in docs/portable-mysql-pg-migration.md (not written to report JSON)."
|
||||
},
|
||||
"notes": [
|
||||
"Clerk is excluded: users mapped by email only; no Clerk API.",
|
||||
"Legacy password hashes are never imported.",
|
||||
"API key secrets are not migrated; use seed-demo / ensure-demo for local keys.",
|
||||
"File blobs are metadata-only; resync object storage separately."
|
||||
],
|
||||
"elapsed_ms": 2235
|
||||
}
|
||||
@@ -0,0 +1,251 @@
|
||||
{
|
||||
"generated_at": "2026-08-04T00:38:48Z",
|
||||
"mode": "live",
|
||||
"domains": "settings,formulas,tags,woo,usage",
|
||||
"resume": true,
|
||||
"counts": {
|
||||
"companies": 27,
|
||||
"company_settings": 5,
|
||||
"demo_memberships": 30,
|
||||
"demo_user": 1,
|
||||
"feed_tags": 1,
|
||||
"field_groups": 23,
|
||||
"memberships": 15,
|
||||
"standard_fields": 145,
|
||||
"structured_description_fields": 28,
|
||||
"usage_limits": 2,
|
||||
"usage_metrics": 5,
|
||||
"users": 21,
|
||||
"woocommerce_configs": 0
|
||||
},
|
||||
"validation": {
|
||||
"mode": "live",
|
||||
"counts": [
|
||||
{
|
||||
"entity": "companies",
|
||||
"mysql": 27,
|
||||
"postgres": 30,
|
||||
"delta": 3
|
||||
},
|
||||
{
|
||||
"entity": "profiles",
|
||||
"mysql": 21,
|
||||
"postgres": 77,
|
||||
"delta": 56,
|
||||
"note": "profiles → memberships"
|
||||
},
|
||||
{
|
||||
"entity": "users",
|
||||
"mysql": -1,
|
||||
"postgres": 25,
|
||||
"delta": 0,
|
||||
"note": "no password_hash imported mysql_missing"
|
||||
},
|
||||
{
|
||||
"entity": "admin_users",
|
||||
"mysql": 1,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "folded into users.is_platform_admin"
|
||||
},
|
||||
{
|
||||
"entity": "plans",
|
||||
"mysql": 5,
|
||||
"postgres": 9,
|
||||
"delta": 4
|
||||
},
|
||||
{
|
||||
"entity": "company_plans",
|
||||
"mysql": 5,
|
||||
"postgres": 10,
|
||||
"delta": 5
|
||||
},
|
||||
{
|
||||
"entity": "credit_balances",
|
||||
"mysql": 6,
|
||||
"postgres": 8,
|
||||
"delta": 2
|
||||
},
|
||||
{
|
||||
"entity": "categories",
|
||||
"mysql": 8278,
|
||||
"postgres": 8280,
|
||||
"delta": 2
|
||||
},
|
||||
{
|
||||
"entity": "attributes",
|
||||
"mysql": 95292,
|
||||
"postgres": 57630,
|
||||
"delta": -37662
|
||||
},
|
||||
{
|
||||
"entity": "category_attributes",
|
||||
"mysql": 74377,
|
||||
"postgres": 74377,
|
||||
"delta": 0
|
||||
},
|
||||
{
|
||||
"entity": "custom_variables",
|
||||
"mysql": 36,
|
||||
"postgres": 37,
|
||||
"delta": 1,
|
||||
"note": "label/example → value"
|
||||
},
|
||||
{
|
||||
"entity": "xml_feeds",
|
||||
"mysql": 31,
|
||||
"postgres": 34,
|
||||
"delta": 3,
|
||||
"note": "xml_feeds → input_feeds"
|
||||
},
|
||||
{
|
||||
"entity": "raw_products",
|
||||
"mysql": 126516,
|
||||
"postgres": 124426,
|
||||
"delta": -2090
|
||||
},
|
||||
{
|
||||
"entity": "processed_products",
|
||||
"mysql": 7219,
|
||||
"postgres": 7221,
|
||||
"delta": 2
|
||||
},
|
||||
{
|
||||
"entity": "export_feeds",
|
||||
"mysql": 8,
|
||||
"postgres": 9,
|
||||
"delta": 1
|
||||
},
|
||||
{
|
||||
"entity": "files",
|
||||
"mysql": 1,
|
||||
"postgres": 3,
|
||||
"delta": 2,
|
||||
"note": "metadata only; blobs not copied"
|
||||
}
|
||||
],
|
||||
"postgres_counts": {
|
||||
"attributes": 57630,
|
||||
"categories": 8280,
|
||||
"category_attributes": 74377,
|
||||
"companies": 30,
|
||||
"company_plans": 10,
|
||||
"credit_balances": 8,
|
||||
"custom_variables": 37,
|
||||
"export_feeds": 9,
|
||||
"feed_mappings": 25,
|
||||
"files": 3,
|
||||
"input_feeds": 34,
|
||||
"memberships": 77,
|
||||
"plans": 9,
|
||||
"processed_products": 7221,
|
||||
"raw_products": 124426,
|
||||
"users": 25
|
||||
},
|
||||
"orphans": [
|
||||
{
|
||||
"check": "memberships_missing_user",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "memberships_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "categories_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "attributes_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "custom_variables_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "raw_products_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "raw_products_missing_feed",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "processed_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "processed_missing_raw",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "processed_missing_feed",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "export_feeds_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "export_feeds_missing_source",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "feed_mappings_missing_feed",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "files_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "company_plans_missing_plan",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "platform_admins",
|
||||
"count": 3,
|
||||
"pass": true
|
||||
}
|
||||
],
|
||||
"orphan_summary": {
|
||||
"passed": 16,
|
||||
"failed": 0,
|
||||
"total": 16
|
||||
},
|
||||
"ok": true
|
||||
},
|
||||
"demo": {
|
||||
"email": "demo@descrybe.local",
|
||||
"password_set": true,
|
||||
"user_id": "276d5d0e-665a-40e4-ac78-1cf27e807b10",
|
||||
"primary_company": "ee246275-dec0-4446-9e83-58d0c16c258a",
|
||||
"primary_company_name": "Local Demo Co",
|
||||
"memberships_admin": 30,
|
||||
"platform_admin": true,
|
||||
"note": "Password documented in docs/portable-mysql-pg-migration.md (not written to report JSON)."
|
||||
},
|
||||
"notes": [
|
||||
"Clerk is excluded: users mapped by email only; no Clerk API.",
|
||||
"Legacy password hashes are never imported.",
|
||||
"API key secrets are not migrated; use seed-demo / ensure-demo for local keys.",
|
||||
"File blobs are metadata-only; resync object storage separately."
|
||||
],
|
||||
"elapsed_ms": 2591
|
||||
}
|
||||
@@ -0,0 +1,188 @@
|
||||
{
|
||||
"generated_at": "2026-08-04T21:28:02Z",
|
||||
"mode": "dry-run",
|
||||
"domains": "all",
|
||||
"resume": false,
|
||||
"counts": {
|
||||
"admin_users": 1,
|
||||
"attributes": 198319,
|
||||
"categories": 8465,
|
||||
"category_attributes": 177404,
|
||||
"companies": 31,
|
||||
"company_plans": 3,
|
||||
"company_plans_skipped": 2,
|
||||
"company_settings": 7,
|
||||
"credit_balances": 7,
|
||||
"credit_balances_skipped": 1,
|
||||
"custom_variables": 54,
|
||||
"export_feeds": 11,
|
||||
"feed_mappings": 26,
|
||||
"feed_tags": 1,
|
||||
"field_groups": 26,
|
||||
"files": 1,
|
||||
"input_feeds": 33,
|
||||
"memberships": 20,
|
||||
"plans": 5,
|
||||
"processed_products": 7953,
|
||||
"raw_products": 131641,
|
||||
"raw_products_gtin_deduped": 27429,
|
||||
"set_password_hooks_skipped_dry_run": 1,
|
||||
"standard_fields": 176,
|
||||
"structured_description_fields": 40,
|
||||
"usage_metrics": 6,
|
||||
"users": 27,
|
||||
"woocommerce_configs": 0
|
||||
},
|
||||
"validation": {
|
||||
"mode": "dry-run",
|
||||
"counts": [
|
||||
{
|
||||
"entity": "companies",
|
||||
"mysql": 31,
|
||||
"postgres": -1,
|
||||
"delta": 0
|
||||
},
|
||||
{
|
||||
"entity": "profiles",
|
||||
"mysql": 27,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "profiles → memberships"
|
||||
},
|
||||
{
|
||||
"entity": "users",
|
||||
"mysql": -1,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "no password_hash imported mysql_missing"
|
||||
},
|
||||
{
|
||||
"entity": "admin_users",
|
||||
"mysql": 1,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "folded into users.is_platform_admin"
|
||||
},
|
||||
{
|
||||
"entity": "plans",
|
||||
"mysql": 5,
|
||||
"postgres": -1,
|
||||
"delta": 0
|
||||
},
|
||||
{
|
||||
"entity": "company_plans",
|
||||
"mysql": 5,
|
||||
"postgres": -1,
|
||||
"delta": 0
|
||||
},
|
||||
{
|
||||
"entity": "credit_balances",
|
||||
"mysql": 8,
|
||||
"postgres": -1,
|
||||
"delta": 0
|
||||
},
|
||||
{
|
||||
"entity": "categories",
|
||||
"mysql": 8465,
|
||||
"postgres": -1,
|
||||
"delta": 0
|
||||
},
|
||||
{
|
||||
"entity": "attributes",
|
||||
"mysql": 198319,
|
||||
"postgres": -1,
|
||||
"delta": 0
|
||||
},
|
||||
{
|
||||
"entity": "category_attributes",
|
||||
"mysql": 177404,
|
||||
"postgres": -1,
|
||||
"delta": 0
|
||||
},
|
||||
{
|
||||
"entity": "custom_variables",
|
||||
"mysql": 54,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "label/example → value"
|
||||
},
|
||||
{
|
||||
"entity": "xml_feeds",
|
||||
"mysql": 33,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "xml_feeds → input_feeds"
|
||||
},
|
||||
{
|
||||
"entity": "raw_products",
|
||||
"mysql": 159070,
|
||||
"postgres": -1,
|
||||
"delta": 0
|
||||
},
|
||||
{
|
||||
"entity": "processed_products",
|
||||
"mysql": 7953,
|
||||
"postgres": -1,
|
||||
"delta": 0
|
||||
},
|
||||
{
|
||||
"entity": "export_feeds",
|
||||
"mysql": 11,
|
||||
"postgres": -1,
|
||||
"delta": 0
|
||||
},
|
||||
{
|
||||
"entity": "files",
|
||||
"mysql": 1,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "metadata only; blobs not copied"
|
||||
},
|
||||
{
|
||||
"entity": "company_settings",
|
||||
"mysql": 7,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "partial: language + merge_products only"
|
||||
},
|
||||
{
|
||||
"entity": "api_keys",
|
||||
"mysql": 4,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "not migrated; clients must mint new keys"
|
||||
},
|
||||
{
|
||||
"entity": "processing_jobs",
|
||||
"mysql": 1023,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "ephemeral history not migrated"
|
||||
}
|
||||
],
|
||||
"orphans": [
|
||||
{
|
||||
"check": "skipped_dry_run",
|
||||
"count": 0,
|
||||
"sample": "orphan FK checks require a live Postgres load",
|
||||
"pass": true
|
||||
}
|
||||
],
|
||||
"orphan_summary": {
|
||||
"passed": 1,
|
||||
"failed": 0,
|
||||
"total": 1
|
||||
},
|
||||
"ok": true
|
||||
},
|
||||
"notes": [
|
||||
"Clerk is excluded: users mapped by email only; no Clerk API.",
|
||||
"Legacy password hashes are never imported.",
|
||||
"API key secrets are not migrated; clients must mint new keys (seed-demo / ensure-demo for local).",
|
||||
"File blobs are metadata-only; resync object storage separately.",
|
||||
"Job history (processing_jobs / queues) is ephemeral and not migrated.",
|
||||
"company_settings: language + merge_products only (domain settings); other legacy settings fields are not imported.",
|
||||
"woocommerce_configs: migrated from wc_* custom_fields when domain woo is enabled."
|
||||
],
|
||||
"elapsed_ms": 15654
|
||||
}
|
||||
@@ -0,0 +1,188 @@
|
||||
{
|
||||
"generated_at": "2026-08-04T21:30:58Z",
|
||||
"mode": "dry-run",
|
||||
"domains": "all",
|
||||
"company_filter": [
|
||||
"97e1a309-3d23-4aa2-b518-8e8d7afdfec7"
|
||||
],
|
||||
"resume": false,
|
||||
"counts": {
|
||||
"admin_users": 1,
|
||||
"attributes": 303,
|
||||
"categories": 119,
|
||||
"category_attributes": 307,
|
||||
"companies": 1,
|
||||
"company_plans": 1,
|
||||
"company_plans_skipped": 4,
|
||||
"company_settings": 1,
|
||||
"credit_balances": 1,
|
||||
"credit_balances_skipped": 7,
|
||||
"custom_variables": 3,
|
||||
"export_feeds": 2,
|
||||
"feed_mappings": 11,
|
||||
"field_groups": 1,
|
||||
"input_feeds": 12,
|
||||
"memberships": 5,
|
||||
"plans": 5,
|
||||
"processed_products": 4378,
|
||||
"raw_products": 29115,
|
||||
"raw_products_gtin_deduped": 27017,
|
||||
"set_password_hooks_skipped_dry_run": 1,
|
||||
"standard_fields": 22,
|
||||
"usage_metrics": 1,
|
||||
"users": 27,
|
||||
"woocommerce_configs": 0
|
||||
},
|
||||
"validation": {
|
||||
"mode": "dry-run",
|
||||
"counts": [
|
||||
{
|
||||
"entity": "companies",
|
||||
"mysql": 31,
|
||||
"postgres": -1,
|
||||
"delta": 0
|
||||
},
|
||||
{
|
||||
"entity": "profiles",
|
||||
"mysql": 27,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "profiles → memberships"
|
||||
},
|
||||
{
|
||||
"entity": "users",
|
||||
"mysql": -1,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "no password_hash imported mysql_missing"
|
||||
},
|
||||
{
|
||||
"entity": "admin_users",
|
||||
"mysql": 1,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "folded into users.is_platform_admin"
|
||||
},
|
||||
{
|
||||
"entity": "plans",
|
||||
"mysql": 5,
|
||||
"postgres": -1,
|
||||
"delta": 0
|
||||
},
|
||||
{
|
||||
"entity": "company_plans",
|
||||
"mysql": 5,
|
||||
"postgres": -1,
|
||||
"delta": 0
|
||||
},
|
||||
{
|
||||
"entity": "credit_balances",
|
||||
"mysql": 8,
|
||||
"postgres": -1,
|
||||
"delta": 0
|
||||
},
|
||||
{
|
||||
"entity": "categories",
|
||||
"mysql": 8465,
|
||||
"postgres": -1,
|
||||
"delta": 0
|
||||
},
|
||||
{
|
||||
"entity": "attributes",
|
||||
"mysql": 198319,
|
||||
"postgres": -1,
|
||||
"delta": 0
|
||||
},
|
||||
{
|
||||
"entity": "category_attributes",
|
||||
"mysql": 177404,
|
||||
"postgres": -1,
|
||||
"delta": 0
|
||||
},
|
||||
{
|
||||
"entity": "custom_variables",
|
||||
"mysql": 54,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "label/example → value"
|
||||
},
|
||||
{
|
||||
"entity": "xml_feeds",
|
||||
"mysql": 33,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "xml_feeds → input_feeds"
|
||||
},
|
||||
{
|
||||
"entity": "raw_products",
|
||||
"mysql": 159070,
|
||||
"postgres": -1,
|
||||
"delta": 0
|
||||
},
|
||||
{
|
||||
"entity": "processed_products",
|
||||
"mysql": 7953,
|
||||
"postgres": -1,
|
||||
"delta": 0
|
||||
},
|
||||
{
|
||||
"entity": "export_feeds",
|
||||
"mysql": 11,
|
||||
"postgres": -1,
|
||||
"delta": 0
|
||||
},
|
||||
{
|
||||
"entity": "files",
|
||||
"mysql": 1,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "metadata only; blobs not copied"
|
||||
},
|
||||
{
|
||||
"entity": "company_settings",
|
||||
"mysql": 7,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "partial: language + merge_products only"
|
||||
},
|
||||
{
|
||||
"entity": "api_keys",
|
||||
"mysql": 4,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "not migrated; clients must mint new keys"
|
||||
},
|
||||
{
|
||||
"entity": "processing_jobs",
|
||||
"mysql": 1023,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "ephemeral history not migrated"
|
||||
}
|
||||
],
|
||||
"orphans": [
|
||||
{
|
||||
"check": "skipped_dry_run",
|
||||
"count": 0,
|
||||
"sample": "orphan FK checks require a live Postgres load",
|
||||
"pass": true
|
||||
}
|
||||
],
|
||||
"orphan_summary": {
|
||||
"passed": 1,
|
||||
"failed": 0,
|
||||
"total": 1
|
||||
},
|
||||
"ok": true
|
||||
},
|
||||
"notes": [
|
||||
"Clerk is excluded: users mapped by email only; no Clerk API.",
|
||||
"Legacy password hashes are never imported.",
|
||||
"API key secrets are not migrated; clients must mint new keys (seed-demo / ensure-demo for local).",
|
||||
"File blobs are metadata-only; resync object storage separately.",
|
||||
"Job history (processing_jobs / queues) is ephemeral and not migrated.",
|
||||
"company_settings: language + merge_products only (domain settings); other legacy settings fields are not imported.",
|
||||
"woocommerce_configs: migrated from wc_* custom_fields when domain woo is enabled."
|
||||
],
|
||||
"elapsed_ms": 13288
|
||||
}
|
||||
@@ -0,0 +1,296 @@
|
||||
{
|
||||
"generated_at": "2026-08-04T21:31:12Z",
|
||||
"mode": "live",
|
||||
"domains": "all",
|
||||
"company_filter": [
|
||||
"97e1a309-3d23-4aa2-b518-8e8d7afdfec7"
|
||||
],
|
||||
"resume": true,
|
||||
"counts": {
|
||||
"admin_users": 1,
|
||||
"attributes": 303,
|
||||
"categories": 119,
|
||||
"category_attributes": 307,
|
||||
"companies": 1,
|
||||
"company_plans": 1,
|
||||
"company_plans_skipped": 4,
|
||||
"company_settings": 1,
|
||||
"credit_balances": 1,
|
||||
"credit_balances_skipped": 7,
|
||||
"custom_variables": 3,
|
||||
"demo_memberships": 1,
|
||||
"demo_user": 1,
|
||||
"export_feeds": 2,
|
||||
"feed_mappings": 11,
|
||||
"field_groups": 1,
|
||||
"input_feeds": 12,
|
||||
"memberships": 5,
|
||||
"plans": 5,
|
||||
"processed_products": 4378,
|
||||
"raw_products": 29115,
|
||||
"raw_products_gtin_deduped": 27017,
|
||||
"standard_fields": 22,
|
||||
"usage_metrics": 1,
|
||||
"users": 27,
|
||||
"woocommerce_configs": 0
|
||||
},
|
||||
"validation": {
|
||||
"mode": "live",
|
||||
"counts": [
|
||||
{
|
||||
"entity": "companies",
|
||||
"mysql": 31,
|
||||
"postgres": 1,
|
||||
"delta": -30
|
||||
},
|
||||
{
|
||||
"entity": "profiles",
|
||||
"mysql": 27,
|
||||
"postgres": 5,
|
||||
"delta": -22,
|
||||
"note": "profiles → memberships"
|
||||
},
|
||||
{
|
||||
"entity": "users",
|
||||
"mysql": -1,
|
||||
"postgres": 27,
|
||||
"delta": 0,
|
||||
"note": "no password_hash imported mysql_missing"
|
||||
},
|
||||
{
|
||||
"entity": "admin_users",
|
||||
"mysql": 1,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "folded into users.is_platform_admin"
|
||||
},
|
||||
{
|
||||
"entity": "plans",
|
||||
"mysql": 5,
|
||||
"postgres": 5,
|
||||
"delta": 0
|
||||
},
|
||||
{
|
||||
"entity": "company_plans",
|
||||
"mysql": 5,
|
||||
"postgres": 1,
|
||||
"delta": -4
|
||||
},
|
||||
{
|
||||
"entity": "credit_balances",
|
||||
"mysql": 8,
|
||||
"postgres": 1,
|
||||
"delta": -7
|
||||
},
|
||||
{
|
||||
"entity": "categories",
|
||||
"mysql": 8465,
|
||||
"postgres": 119,
|
||||
"delta": -8346
|
||||
},
|
||||
{
|
||||
"entity": "attributes",
|
||||
"mysql": 198319,
|
||||
"postgres": 303,
|
||||
"delta": -198016
|
||||
},
|
||||
{
|
||||
"entity": "category_attributes",
|
||||
"mysql": 177404,
|
||||
"postgres": 307,
|
||||
"delta": -177097
|
||||
},
|
||||
{
|
||||
"entity": "custom_variables",
|
||||
"mysql": 54,
|
||||
"postgres": 3,
|
||||
"delta": -51,
|
||||
"note": "label/example → value"
|
||||
},
|
||||
{
|
||||
"entity": "xml_feeds",
|
||||
"mysql": 33,
|
||||
"postgres": 12,
|
||||
"delta": -21,
|
||||
"note": "xml_feeds → input_feeds"
|
||||
},
|
||||
{
|
||||
"entity": "raw_products",
|
||||
"mysql": 159070,
|
||||
"postgres": 29115,
|
||||
"delta": -129955
|
||||
},
|
||||
{
|
||||
"entity": "processed_products",
|
||||
"mysql": 7953,
|
||||
"postgres": 4378,
|
||||
"delta": -3575
|
||||
},
|
||||
{
|
||||
"entity": "export_feeds",
|
||||
"mysql": 11,
|
||||
"postgres": 2,
|
||||
"delta": -9
|
||||
},
|
||||
{
|
||||
"entity": "files",
|
||||
"mysql": 1,
|
||||
"postgres": 0,
|
||||
"delta": -1,
|
||||
"note": "metadata only; blobs not copied"
|
||||
},
|
||||
{
|
||||
"entity": "company_settings",
|
||||
"mysql": 7,
|
||||
"postgres": 1,
|
||||
"delta": -6,
|
||||
"note": "partial: language + merge_products only"
|
||||
},
|
||||
{
|
||||
"entity": "api_keys",
|
||||
"mysql": 4,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "not migrated; clients must mint new keys"
|
||||
},
|
||||
{
|
||||
"entity": "processing_jobs",
|
||||
"mysql": 1023,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "ephemeral history not migrated"
|
||||
}
|
||||
],
|
||||
"postgres_counts": {
|
||||
"attributes": 303,
|
||||
"categories": 119,
|
||||
"category_attributes": 307,
|
||||
"companies": 1,
|
||||
"company_plans": 1,
|
||||
"credit_balances": 1,
|
||||
"custom_variables": 3,
|
||||
"export_feeds": 2,
|
||||
"feed_mappings": 11,
|
||||
"files": 0,
|
||||
"input_feeds": 12,
|
||||
"memberships": 5,
|
||||
"plans": 5,
|
||||
"processed_products": 4378,
|
||||
"raw_products": 29115,
|
||||
"users": 27
|
||||
},
|
||||
"orphans": [
|
||||
{
|
||||
"check": "memberships_missing_user",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "memberships_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "categories_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "attributes_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "custom_variables_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "raw_products_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "raw_products_missing_feed",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "processed_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "processed_missing_raw",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "processed_missing_feed",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "export_feeds_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "export_feeds_missing_source",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "feed_mappings_missing_feed",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "files_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "company_plans_missing_plan",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "companies_without_active_plan",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "platform_admins",
|
||||
"count": 1,
|
||||
"pass": true
|
||||
}
|
||||
],
|
||||
"orphan_summary": {
|
||||
"passed": 17,
|
||||
"failed": 0,
|
||||
"total": 17
|
||||
},
|
||||
"ok": true
|
||||
},
|
||||
"demo": {
|
||||
"email": "demo@descrybe.local",
|
||||
"password_set": true,
|
||||
"user_id": "72b9ebb4-786a-4091-b3cc-671cf58cff4f",
|
||||
"primary_company": "604f23a8-b66e-4b21-8b45-0d72b68f4790",
|
||||
"primary_company_name": "Local Demo Co",
|
||||
"memberships_admin": 1,
|
||||
"platform_admin": true,
|
||||
"note": "Password documented in docs/portable-mysql-pg-migration.md (not written to report JSON)."
|
||||
},
|
||||
"notes": [
|
||||
"Clerk is excluded: users mapped by email only; no Clerk API.",
|
||||
"Legacy password hashes are never imported.",
|
||||
"API key secrets are not migrated; clients must mint new keys (seed-demo / ensure-demo for local).",
|
||||
"File blobs are metadata-only; resync object storage separately.",
|
||||
"Job history (processing_jobs / queues) is ephemeral and not migrated.",
|
||||
"company_settings: language + merge_products only (domain settings); other legacy settings fields are not imported.",
|
||||
"woocommerce_configs: migrated from wc_* custom_fields when domain woo is enabled."
|
||||
],
|
||||
"elapsed_ms": 31389
|
||||
}
|
||||
@@ -0,0 +1,268 @@
|
||||
{
|
||||
"generated_at": "2026-08-04T22:48:50Z",
|
||||
"mode": "live",
|
||||
"domains": "jobs",
|
||||
"company_filter": [
|
||||
"97e1a309-3d23-4aa2-b518-8e8d7afdfec7"
|
||||
],
|
||||
"resume": true,
|
||||
"counts": {
|
||||
"companies": 1,
|
||||
"memberships": 5,
|
||||
"processing_job_products": 156,
|
||||
"processing_job_products_skipped": 206,
|
||||
"processing_jobs": 280,
|
||||
"processing_jobs_skipped": 51,
|
||||
"tasks_skipped": 2,
|
||||
"users": 27
|
||||
},
|
||||
"validation": {
|
||||
"mode": "live",
|
||||
"counts": [
|
||||
{
|
||||
"entity": "companies",
|
||||
"mysql": 31,
|
||||
"postgres": 1,
|
||||
"delta": -30
|
||||
},
|
||||
{
|
||||
"entity": "profiles",
|
||||
"mysql": 27,
|
||||
"postgres": 7,
|
||||
"delta": -20,
|
||||
"note": "profiles → memberships"
|
||||
},
|
||||
{
|
||||
"entity": "users",
|
||||
"mysql": -1,
|
||||
"postgres": 7,
|
||||
"delta": 0,
|
||||
"note": "no password_hash imported mysql_missing"
|
||||
},
|
||||
{
|
||||
"entity": "admin_users",
|
||||
"mysql": 1,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "folded into users.is_platform_admin"
|
||||
},
|
||||
{
|
||||
"entity": "plans",
|
||||
"mysql": 5,
|
||||
"postgres": 9,
|
||||
"delta": 4
|
||||
},
|
||||
{
|
||||
"entity": "company_plans",
|
||||
"mysql": 5,
|
||||
"postgres": 2,
|
||||
"delta": -3
|
||||
},
|
||||
{
|
||||
"entity": "credit_balances",
|
||||
"mysql": 8,
|
||||
"postgres": 1,
|
||||
"delta": -7
|
||||
},
|
||||
{
|
||||
"entity": "categories",
|
||||
"mysql": 8465,
|
||||
"postgres": 119,
|
||||
"delta": -8346
|
||||
},
|
||||
{
|
||||
"entity": "attributes",
|
||||
"mysql": 198319,
|
||||
"postgres": 303,
|
||||
"delta": -198016
|
||||
},
|
||||
{
|
||||
"entity": "category_attributes",
|
||||
"mysql": 177404,
|
||||
"postgres": 307,
|
||||
"delta": -177097
|
||||
},
|
||||
{
|
||||
"entity": "custom_variables",
|
||||
"mysql": 54,
|
||||
"postgres": 3,
|
||||
"delta": -51,
|
||||
"note": "label/example → value"
|
||||
},
|
||||
{
|
||||
"entity": "xml_feeds",
|
||||
"mysql": 33,
|
||||
"postgres": 12,
|
||||
"delta": -21,
|
||||
"note": "xml_feeds → input_feeds"
|
||||
},
|
||||
{
|
||||
"entity": "raw_products",
|
||||
"mysql": 159070,
|
||||
"postgres": 29115,
|
||||
"delta": -129955
|
||||
},
|
||||
{
|
||||
"entity": "processed_products",
|
||||
"mysql": 7953,
|
||||
"postgres": 4378,
|
||||
"delta": -3575
|
||||
},
|
||||
{
|
||||
"entity": "export_feeds",
|
||||
"mysql": 11,
|
||||
"postgres": 2,
|
||||
"delta": -9
|
||||
},
|
||||
{
|
||||
"entity": "files",
|
||||
"mysql": 1,
|
||||
"postgres": 0,
|
||||
"delta": -1,
|
||||
"note": "metadata only; blobs not copied"
|
||||
},
|
||||
{
|
||||
"entity": "company_settings",
|
||||
"mysql": 7,
|
||||
"postgres": 1,
|
||||
"delta": -6,
|
||||
"note": "partial: language + merge_products only"
|
||||
},
|
||||
{
|
||||
"entity": "api_keys",
|
||||
"mysql": 4,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "not migrated; clients must mint new keys"
|
||||
},
|
||||
{
|
||||
"entity": "processing_jobs",
|
||||
"mysql": 1023,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "migrated when domain jobs enabled (ai_provider_mode=migrated) pg_error"
|
||||
}
|
||||
],
|
||||
"postgres_counts": {
|
||||
"attributes": 303,
|
||||
"categories": 119,
|
||||
"category_attributes": 307,
|
||||
"companies": 1,
|
||||
"company_plans": 2,
|
||||
"credit_balances": 1,
|
||||
"custom_variables": 3,
|
||||
"export_feeds": 2,
|
||||
"feed_mappings": 16,
|
||||
"files": 0,
|
||||
"input_feeds": 12,
|
||||
"memberships": 7,
|
||||
"plans": 9,
|
||||
"processed_products": 4378,
|
||||
"raw_products": 29115,
|
||||
"users": 7
|
||||
},
|
||||
"orphans": [
|
||||
{
|
||||
"check": "memberships_missing_user",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "memberships_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "categories_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "attributes_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "custom_variables_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "raw_products_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "raw_products_missing_feed",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "processed_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "processed_missing_raw",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "processed_missing_feed",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "export_feeds_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "export_feeds_missing_source",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "feed_mappings_missing_feed",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "files_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "company_plans_missing_plan",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "companies_without_active_plan",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "platform_admins",
|
||||
"count": 2,
|
||||
"pass": true
|
||||
}
|
||||
],
|
||||
"orphan_summary": {
|
||||
"passed": 17,
|
||||
"failed": 0,
|
||||
"total": 17
|
||||
},
|
||||
"ok": true
|
||||
},
|
||||
"notes": [
|
||||
"Clerk is excluded: users mapped by email only; no Clerk API.",
|
||||
"Legacy password hashes are never imported.",
|
||||
"API key secrets are not migrated; clients must mint new keys (seed-demo / ensure-demo for local).",
|
||||
"File blobs are metadata-only; resync object storage separately.",
|
||||
"Job history: domain jobs migrates processing_jobs (+ best-effort job_products) and tasks; tagged ai_provider_mode=migrated so retention keeps them.",
|
||||
"company_settings: language + merge_products only (domain settings); other legacy settings fields are not imported.",
|
||||
"woocommerce_configs: migrated from wc_* custom_fields when domain woo is enabled."
|
||||
],
|
||||
"elapsed_ms": 4588
|
||||
}
|
||||
@@ -0,0 +1,268 @@
|
||||
{
|
||||
"generated_at": "2026-08-04T22:49:07Z",
|
||||
"mode": "live",
|
||||
"domains": "jobs",
|
||||
"company_filter": [
|
||||
"97e1a309-3d23-4aa2-b518-8e8d7afdfec7"
|
||||
],
|
||||
"resume": true,
|
||||
"counts": {
|
||||
"companies": 1,
|
||||
"memberships": 5,
|
||||
"processing_job_products": 156,
|
||||
"processing_job_products_skipped": 206,
|
||||
"processing_jobs": 331,
|
||||
"processing_jobs_user_missing": 51,
|
||||
"tasks": 2,
|
||||
"users": 27
|
||||
},
|
||||
"validation": {
|
||||
"mode": "live",
|
||||
"counts": [
|
||||
{
|
||||
"entity": "companies",
|
||||
"mysql": 31,
|
||||
"postgres": 1,
|
||||
"delta": -30
|
||||
},
|
||||
{
|
||||
"entity": "profiles",
|
||||
"mysql": 27,
|
||||
"postgres": 7,
|
||||
"delta": -20,
|
||||
"note": "profiles → memberships"
|
||||
},
|
||||
{
|
||||
"entity": "users",
|
||||
"mysql": -1,
|
||||
"postgres": 7,
|
||||
"delta": 0,
|
||||
"note": "no password_hash imported mysql_missing"
|
||||
},
|
||||
{
|
||||
"entity": "admin_users",
|
||||
"mysql": 1,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "folded into users.is_platform_admin"
|
||||
},
|
||||
{
|
||||
"entity": "plans",
|
||||
"mysql": 5,
|
||||
"postgres": 9,
|
||||
"delta": 4
|
||||
},
|
||||
{
|
||||
"entity": "company_plans",
|
||||
"mysql": 5,
|
||||
"postgres": 2,
|
||||
"delta": -3
|
||||
},
|
||||
{
|
||||
"entity": "credit_balances",
|
||||
"mysql": 8,
|
||||
"postgres": 1,
|
||||
"delta": -7
|
||||
},
|
||||
{
|
||||
"entity": "categories",
|
||||
"mysql": 8465,
|
||||
"postgres": 119,
|
||||
"delta": -8346
|
||||
},
|
||||
{
|
||||
"entity": "attributes",
|
||||
"mysql": 198319,
|
||||
"postgres": 303,
|
||||
"delta": -198016
|
||||
},
|
||||
{
|
||||
"entity": "category_attributes",
|
||||
"mysql": 177404,
|
||||
"postgres": 307,
|
||||
"delta": -177097
|
||||
},
|
||||
{
|
||||
"entity": "custom_variables",
|
||||
"mysql": 54,
|
||||
"postgres": 3,
|
||||
"delta": -51,
|
||||
"note": "label/example → value"
|
||||
},
|
||||
{
|
||||
"entity": "xml_feeds",
|
||||
"mysql": 33,
|
||||
"postgres": 12,
|
||||
"delta": -21,
|
||||
"note": "xml_feeds → input_feeds"
|
||||
},
|
||||
{
|
||||
"entity": "raw_products",
|
||||
"mysql": 159070,
|
||||
"postgres": 29115,
|
||||
"delta": -129955
|
||||
},
|
||||
{
|
||||
"entity": "processed_products",
|
||||
"mysql": 7953,
|
||||
"postgres": 4378,
|
||||
"delta": -3575
|
||||
},
|
||||
{
|
||||
"entity": "export_feeds",
|
||||
"mysql": 11,
|
||||
"postgres": 2,
|
||||
"delta": -9
|
||||
},
|
||||
{
|
||||
"entity": "files",
|
||||
"mysql": 1,
|
||||
"postgres": 0,
|
||||
"delta": -1,
|
||||
"note": "metadata only; blobs not copied"
|
||||
},
|
||||
{
|
||||
"entity": "company_settings",
|
||||
"mysql": 7,
|
||||
"postgres": 1,
|
||||
"delta": -6,
|
||||
"note": "partial: language + merge_products only"
|
||||
},
|
||||
{
|
||||
"entity": "api_keys",
|
||||
"mysql": 4,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "not migrated; clients must mint new keys"
|
||||
},
|
||||
{
|
||||
"entity": "processing_jobs",
|
||||
"mysql": 1023,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "migrated when domain jobs enabled (ai_provider_mode=migrated) pg_error"
|
||||
}
|
||||
],
|
||||
"postgres_counts": {
|
||||
"attributes": 303,
|
||||
"categories": 119,
|
||||
"category_attributes": 307,
|
||||
"companies": 1,
|
||||
"company_plans": 2,
|
||||
"credit_balances": 1,
|
||||
"custom_variables": 3,
|
||||
"export_feeds": 2,
|
||||
"feed_mappings": 16,
|
||||
"files": 0,
|
||||
"input_feeds": 12,
|
||||
"memberships": 7,
|
||||
"plans": 9,
|
||||
"processed_products": 4378,
|
||||
"raw_products": 29115,
|
||||
"users": 7
|
||||
},
|
||||
"orphans": [
|
||||
{
|
||||
"check": "memberships_missing_user",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "memberships_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "categories_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "attributes_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "custom_variables_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "raw_products_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "raw_products_missing_feed",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "processed_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "processed_missing_raw",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "processed_missing_feed",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "export_feeds_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "export_feeds_missing_source",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "feed_mappings_missing_feed",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "files_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "company_plans_missing_plan",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "companies_without_active_plan",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "platform_admins",
|
||||
"count": 2,
|
||||
"pass": true
|
||||
}
|
||||
],
|
||||
"orphan_summary": {
|
||||
"passed": 17,
|
||||
"failed": 0,
|
||||
"total": 17
|
||||
},
|
||||
"ok": true
|
||||
},
|
||||
"notes": [
|
||||
"Clerk is excluded: users mapped by email only; no Clerk API.",
|
||||
"Legacy password hashes are never imported.",
|
||||
"API key secrets are not migrated; clients must mint new keys (seed-demo / ensure-demo for local).",
|
||||
"File blobs are metadata-only; resync object storage separately.",
|
||||
"Job history: domain jobs migrates processing_jobs (+ best-effort job_products) and tasks; tagged ai_provider_mode=migrated so retention keeps them.",
|
||||
"company_settings: language + merge_products only (domain settings); other legacy settings fields are not imported.",
|
||||
"woocommerce_configs: migrated from wc_* custom_fields when domain woo is enabled."
|
||||
],
|
||||
"elapsed_ms": 4801
|
||||
}
|
||||
@@ -0,0 +1,268 @@
|
||||
{
|
||||
"generated_at": "2026-08-04T22:49:33Z",
|
||||
"mode": "live",
|
||||
"domains": "jobs",
|
||||
"company_filter": [
|
||||
"97e1a309-3d23-4aa2-b518-8e8d7afdfec7"
|
||||
],
|
||||
"resume": true,
|
||||
"counts": {
|
||||
"companies": 1,
|
||||
"memberships": 5,
|
||||
"processing_job_products": 332,
|
||||
"processing_job_products_skipped": 30,
|
||||
"processing_jobs": 331,
|
||||
"processing_jobs_user_missing": 51,
|
||||
"tasks": 2,
|
||||
"users": 27
|
||||
},
|
||||
"validation": {
|
||||
"mode": "live",
|
||||
"counts": [
|
||||
{
|
||||
"entity": "companies",
|
||||
"mysql": 31,
|
||||
"postgres": 1,
|
||||
"delta": -30
|
||||
},
|
||||
{
|
||||
"entity": "profiles",
|
||||
"mysql": 27,
|
||||
"postgres": 7,
|
||||
"delta": -20,
|
||||
"note": "profiles → memberships"
|
||||
},
|
||||
{
|
||||
"entity": "users",
|
||||
"mysql": -1,
|
||||
"postgres": 7,
|
||||
"delta": 0,
|
||||
"note": "no password_hash imported mysql_missing"
|
||||
},
|
||||
{
|
||||
"entity": "admin_users",
|
||||
"mysql": 1,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "folded into users.is_platform_admin"
|
||||
},
|
||||
{
|
||||
"entity": "plans",
|
||||
"mysql": 5,
|
||||
"postgres": 9,
|
||||
"delta": 4
|
||||
},
|
||||
{
|
||||
"entity": "company_plans",
|
||||
"mysql": 5,
|
||||
"postgres": 2,
|
||||
"delta": -3
|
||||
},
|
||||
{
|
||||
"entity": "credit_balances",
|
||||
"mysql": 8,
|
||||
"postgres": 1,
|
||||
"delta": -7
|
||||
},
|
||||
{
|
||||
"entity": "categories",
|
||||
"mysql": 8465,
|
||||
"postgres": 119,
|
||||
"delta": -8346
|
||||
},
|
||||
{
|
||||
"entity": "attributes",
|
||||
"mysql": 198319,
|
||||
"postgres": 303,
|
||||
"delta": -198016
|
||||
},
|
||||
{
|
||||
"entity": "category_attributes",
|
||||
"mysql": 177404,
|
||||
"postgres": 307,
|
||||
"delta": -177097
|
||||
},
|
||||
{
|
||||
"entity": "custom_variables",
|
||||
"mysql": 54,
|
||||
"postgres": 3,
|
||||
"delta": -51,
|
||||
"note": "label/example → value"
|
||||
},
|
||||
{
|
||||
"entity": "xml_feeds",
|
||||
"mysql": 33,
|
||||
"postgres": 12,
|
||||
"delta": -21,
|
||||
"note": "xml_feeds → input_feeds"
|
||||
},
|
||||
{
|
||||
"entity": "raw_products",
|
||||
"mysql": 159070,
|
||||
"postgres": 29115,
|
||||
"delta": -129955
|
||||
},
|
||||
{
|
||||
"entity": "processed_products",
|
||||
"mysql": 7953,
|
||||
"postgres": 4378,
|
||||
"delta": -3575
|
||||
},
|
||||
{
|
||||
"entity": "export_feeds",
|
||||
"mysql": 11,
|
||||
"postgres": 2,
|
||||
"delta": -9
|
||||
},
|
||||
{
|
||||
"entity": "files",
|
||||
"mysql": 1,
|
||||
"postgres": 0,
|
||||
"delta": -1,
|
||||
"note": "metadata only; blobs not copied"
|
||||
},
|
||||
{
|
||||
"entity": "company_settings",
|
||||
"mysql": 7,
|
||||
"postgres": 1,
|
||||
"delta": -6,
|
||||
"note": "partial: language + merge_products only"
|
||||
},
|
||||
{
|
||||
"entity": "api_keys",
|
||||
"mysql": 4,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "not migrated; clients must mint new keys"
|
||||
},
|
||||
{
|
||||
"entity": "processing_jobs",
|
||||
"mysql": 1023,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "migrated when domain jobs enabled (ai_provider_mode=migrated) pg_error"
|
||||
}
|
||||
],
|
||||
"postgres_counts": {
|
||||
"attributes": 303,
|
||||
"categories": 119,
|
||||
"category_attributes": 307,
|
||||
"companies": 1,
|
||||
"company_plans": 2,
|
||||
"credit_balances": 1,
|
||||
"custom_variables": 3,
|
||||
"export_feeds": 2,
|
||||
"feed_mappings": 16,
|
||||
"files": 0,
|
||||
"input_feeds": 12,
|
||||
"memberships": 7,
|
||||
"plans": 9,
|
||||
"processed_products": 4378,
|
||||
"raw_products": 29115,
|
||||
"users": 7
|
||||
},
|
||||
"orphans": [
|
||||
{
|
||||
"check": "memberships_missing_user",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "memberships_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "categories_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "attributes_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "custom_variables_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "raw_products_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "raw_products_missing_feed",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "processed_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "processed_missing_raw",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "processed_missing_feed",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "export_feeds_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "export_feeds_missing_source",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "feed_mappings_missing_feed",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "files_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "company_plans_missing_plan",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "companies_without_active_plan",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "platform_admins",
|
||||
"count": 2,
|
||||
"pass": true
|
||||
}
|
||||
],
|
||||
"orphan_summary": {
|
||||
"passed": 17,
|
||||
"failed": 0,
|
||||
"total": 17
|
||||
},
|
||||
"ok": true
|
||||
},
|
||||
"notes": [
|
||||
"Clerk is excluded: users mapped by email only; no Clerk API.",
|
||||
"Legacy password hashes are never imported.",
|
||||
"API key secrets are not migrated; clients must mint new keys (seed-demo / ensure-demo for local).",
|
||||
"File blobs are metadata-only; resync object storage separately.",
|
||||
"Job history: domain jobs migrates processing_jobs (+ best-effort job_products) and tasks; tagged ai_provider_mode=migrated so retention keeps them.",
|
||||
"company_settings: language + merge_products only (domain settings); other legacy settings fields are not imported.",
|
||||
"woocommerce_configs: migrated from wc_* custom_fields when domain woo is enabled."
|
||||
],
|
||||
"elapsed_ms": 5436
|
||||
}
|
||||
@@ -0,0 +1,300 @@
|
||||
{
|
||||
"generated_at": "2026-08-08T07:51:11Z",
|
||||
"mode": "live",
|
||||
"domains": "all",
|
||||
"company_filter": [
|
||||
"97e1a309-3d23-4aa2-b518-8e8d7afdfec7"
|
||||
],
|
||||
"resume": false,
|
||||
"counts": {
|
||||
"admin_users": 1,
|
||||
"attributes": 303,
|
||||
"categories": 119,
|
||||
"category_attributes": 307,
|
||||
"companies": 1,
|
||||
"company_plans": 1,
|
||||
"company_plans_skipped": 4,
|
||||
"company_settings": 1,
|
||||
"credit_balances": 1,
|
||||
"credit_balances_skipped": 7,
|
||||
"custom_variables": 3,
|
||||
"demo_memberships": 1,
|
||||
"demo_user": 1,
|
||||
"export_feeds": 2,
|
||||
"feed_mappings": 11,
|
||||
"field_groups": 1,
|
||||
"input_feeds": 12,
|
||||
"memberships": 3,
|
||||
"plans": 5,
|
||||
"processed_products": 4330,
|
||||
"processing_job_products": 177,
|
||||
"processing_job_products_skipped": 20,
|
||||
"processing_jobs": 179,
|
||||
"raw_products": 23748,
|
||||
"raw_products_gtin_deduped": 7320,
|
||||
"standard_fields": 22,
|
||||
"tasks": 2,
|
||||
"usage_metrics": 1,
|
||||
"users": 27,
|
||||
"woocommerce_configs": 0
|
||||
},
|
||||
"validation": {
|
||||
"mode": "live",
|
||||
"counts": [
|
||||
{
|
||||
"entity": "companies",
|
||||
"mysql": 31,
|
||||
"postgres": 1,
|
||||
"delta": -30
|
||||
},
|
||||
{
|
||||
"entity": "profiles",
|
||||
"mysql": 27,
|
||||
"postgres": 3,
|
||||
"delta": -24,
|
||||
"note": "profiles → memberships"
|
||||
},
|
||||
{
|
||||
"entity": "users",
|
||||
"mysql": -1,
|
||||
"postgres": 27,
|
||||
"delta": 0,
|
||||
"note": "no password_hash imported mysql_missing"
|
||||
},
|
||||
{
|
||||
"entity": "admin_users",
|
||||
"mysql": 1,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "folded into users.is_platform_admin"
|
||||
},
|
||||
{
|
||||
"entity": "plans",
|
||||
"mysql": 5,
|
||||
"postgres": 5,
|
||||
"delta": 0
|
||||
},
|
||||
{
|
||||
"entity": "company_plans",
|
||||
"mysql": 5,
|
||||
"postgres": 1,
|
||||
"delta": -4
|
||||
},
|
||||
{
|
||||
"entity": "credit_balances",
|
||||
"mysql": 8,
|
||||
"postgres": 1,
|
||||
"delta": -7
|
||||
},
|
||||
{
|
||||
"entity": "categories",
|
||||
"mysql": 8465,
|
||||
"postgres": 119,
|
||||
"delta": -8346
|
||||
},
|
||||
{
|
||||
"entity": "attributes",
|
||||
"mysql": 198319,
|
||||
"postgres": 303,
|
||||
"delta": -198016
|
||||
},
|
||||
{
|
||||
"entity": "category_attributes",
|
||||
"mysql": 177404,
|
||||
"postgres": 307,
|
||||
"delta": -177097
|
||||
},
|
||||
{
|
||||
"entity": "custom_variables",
|
||||
"mysql": 54,
|
||||
"postgres": 3,
|
||||
"delta": -51,
|
||||
"note": "label/example → value"
|
||||
},
|
||||
{
|
||||
"entity": "xml_feeds",
|
||||
"mysql": 33,
|
||||
"postgres": 12,
|
||||
"delta": -21,
|
||||
"note": "xml_feeds → input_feeds"
|
||||
},
|
||||
{
|
||||
"entity": "raw_products",
|
||||
"mysql": 134006,
|
||||
"postgres": 23748,
|
||||
"delta": -110258
|
||||
},
|
||||
{
|
||||
"entity": "processed_products",
|
||||
"mysql": 7905,
|
||||
"postgres": 4330,
|
||||
"delta": -3575
|
||||
},
|
||||
{
|
||||
"entity": "export_feeds",
|
||||
"mysql": 11,
|
||||
"postgres": 2,
|
||||
"delta": -9
|
||||
},
|
||||
{
|
||||
"entity": "files",
|
||||
"mysql": 1,
|
||||
"postgres": 0,
|
||||
"delta": -1,
|
||||
"note": "metadata only; blobs not copied"
|
||||
},
|
||||
{
|
||||
"entity": "company_settings",
|
||||
"mysql": 7,
|
||||
"postgres": 1,
|
||||
"delta": -6,
|
||||
"note": "partial: language + merge_products only"
|
||||
},
|
||||
{
|
||||
"entity": "api_keys",
|
||||
"mysql": 4,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "not migrated; clients must mint new keys"
|
||||
},
|
||||
{
|
||||
"entity": "processing_jobs",
|
||||
"mysql": 863,
|
||||
"postgres": 179,
|
||||
"delta": -684,
|
||||
"note": "migrated when domain jobs enabled (ai_provider_mode=migrated)"
|
||||
}
|
||||
],
|
||||
"postgres_counts": {
|
||||
"attributes": 303,
|
||||
"categories": 119,
|
||||
"category_attributes": 307,
|
||||
"companies": 1,
|
||||
"company_plans": 1,
|
||||
"credit_balances": 1,
|
||||
"custom_variables": 3,
|
||||
"export_feeds": 2,
|
||||
"feed_mappings": 11,
|
||||
"files": 0,
|
||||
"input_feeds": 12,
|
||||
"memberships": 3,
|
||||
"plans": 5,
|
||||
"processed_products": 4330,
|
||||
"raw_products": 23748,
|
||||
"users": 27
|
||||
},
|
||||
"orphans": [
|
||||
{
|
||||
"check": "memberships_missing_user",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "memberships_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "categories_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "attributes_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "custom_variables_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "raw_products_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "raw_products_missing_feed",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "processed_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "processed_missing_raw",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "processed_missing_feed",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "export_feeds_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "export_feeds_missing_source",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "feed_mappings_missing_feed",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "files_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "company_plans_missing_plan",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "companies_without_active_plan",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "platform_admins",
|
||||
"count": 1,
|
||||
"pass": true
|
||||
}
|
||||
],
|
||||
"orphan_summary": {
|
||||
"passed": 17,
|
||||
"failed": 0,
|
||||
"total": 17
|
||||
},
|
||||
"ok": true
|
||||
},
|
||||
"demo": {
|
||||
"email": "demo@descrybe.local",
|
||||
"password_set": true,
|
||||
"user_id": "0bfa93b5-4b08-4ae8-a231-9260d0a7ad96",
|
||||
"primary_company": "5f6fd76d-fc48-43a1-ba81-bee5544a2ade",
|
||||
"primary_company_name": "A1 Slovenija",
|
||||
"memberships_admin": 1,
|
||||
"platform_admin": true,
|
||||
"note": "Password documented in docs/portable-mysql-pg-migration.md (not written to report JSON)."
|
||||
},
|
||||
"notes": [
|
||||
"Clerk is excluded: users mapped by email only; no Clerk API.",
|
||||
"Legacy password hashes are never imported.",
|
||||
"API key secrets are not migrated; clients must mint new keys (seed-demo / ensure-demo for local).",
|
||||
"File blobs are metadata-only; resync object storage separately.",
|
||||
"Job history: domain jobs migrates processing_jobs (+ best-effort job_products) and tasks; tagged ai_provider_mode=migrated so retention keeps them.",
|
||||
"company_settings: language + merge_products only (domain settings); other legacy settings fields are not imported.",
|
||||
"woocommerce_configs: migrated from wc_* custom_fields when domain woo is enabled."
|
||||
],
|
||||
"elapsed_ms": 22245
|
||||
}
|
||||
@@ -0,0 +1,267 @@
|
||||
{
|
||||
"generated_at": "2026-08-08T07:51:34Z",
|
||||
"mode": "live",
|
||||
"domains": "jobs",
|
||||
"company_filter": [
|
||||
"97e1a309-3d23-4aa2-b518-8e8d7afdfec7"
|
||||
],
|
||||
"resume": true,
|
||||
"counts": {
|
||||
"companies": 1,
|
||||
"memberships": 3,
|
||||
"processing_job_products": 177,
|
||||
"processing_job_products_skipped": 20,
|
||||
"processing_jobs": 179,
|
||||
"tasks": 2,
|
||||
"users": 27
|
||||
},
|
||||
"validation": {
|
||||
"mode": "live",
|
||||
"counts": [
|
||||
{
|
||||
"entity": "companies",
|
||||
"mysql": 31,
|
||||
"postgres": 1,
|
||||
"delta": -30
|
||||
},
|
||||
{
|
||||
"entity": "profiles",
|
||||
"mysql": 27,
|
||||
"postgres": 4,
|
||||
"delta": -23,
|
||||
"note": "profiles → memberships"
|
||||
},
|
||||
{
|
||||
"entity": "users",
|
||||
"mysql": -1,
|
||||
"postgres": 28,
|
||||
"delta": 0,
|
||||
"note": "no password_hash imported mysql_missing"
|
||||
},
|
||||
{
|
||||
"entity": "admin_users",
|
||||
"mysql": 1,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "folded into users.is_platform_admin"
|
||||
},
|
||||
{
|
||||
"entity": "plans",
|
||||
"mysql": 5,
|
||||
"postgres": 5,
|
||||
"delta": 0
|
||||
},
|
||||
{
|
||||
"entity": "company_plans",
|
||||
"mysql": 5,
|
||||
"postgres": 1,
|
||||
"delta": -4
|
||||
},
|
||||
{
|
||||
"entity": "credit_balances",
|
||||
"mysql": 8,
|
||||
"postgres": 1,
|
||||
"delta": -7
|
||||
},
|
||||
{
|
||||
"entity": "categories",
|
||||
"mysql": 8465,
|
||||
"postgres": 119,
|
||||
"delta": -8346
|
||||
},
|
||||
{
|
||||
"entity": "attributes",
|
||||
"mysql": 198319,
|
||||
"postgres": 303,
|
||||
"delta": -198016
|
||||
},
|
||||
{
|
||||
"entity": "category_attributes",
|
||||
"mysql": 177404,
|
||||
"postgres": 307,
|
||||
"delta": -177097
|
||||
},
|
||||
{
|
||||
"entity": "custom_variables",
|
||||
"mysql": 54,
|
||||
"postgres": 3,
|
||||
"delta": -51,
|
||||
"note": "label/example → value"
|
||||
},
|
||||
{
|
||||
"entity": "xml_feeds",
|
||||
"mysql": 33,
|
||||
"postgres": 12,
|
||||
"delta": -21,
|
||||
"note": "xml_feeds → input_feeds"
|
||||
},
|
||||
{
|
||||
"entity": "raw_products",
|
||||
"mysql": 134006,
|
||||
"postgres": 23748,
|
||||
"delta": -110258
|
||||
},
|
||||
{
|
||||
"entity": "processed_products",
|
||||
"mysql": 7905,
|
||||
"postgres": 4330,
|
||||
"delta": -3575
|
||||
},
|
||||
{
|
||||
"entity": "export_feeds",
|
||||
"mysql": 11,
|
||||
"postgres": 2,
|
||||
"delta": -9
|
||||
},
|
||||
{
|
||||
"entity": "files",
|
||||
"mysql": 1,
|
||||
"postgres": 0,
|
||||
"delta": -1,
|
||||
"note": "metadata only; blobs not copied"
|
||||
},
|
||||
{
|
||||
"entity": "company_settings",
|
||||
"mysql": 7,
|
||||
"postgres": 1,
|
||||
"delta": -6,
|
||||
"note": "partial: language + merge_products only"
|
||||
},
|
||||
{
|
||||
"entity": "api_keys",
|
||||
"mysql": 4,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "not migrated; clients must mint new keys"
|
||||
},
|
||||
{
|
||||
"entity": "processing_jobs",
|
||||
"mysql": 863,
|
||||
"postgres": 179,
|
||||
"delta": -684,
|
||||
"note": "migrated when domain jobs enabled (ai_provider_mode=migrated)"
|
||||
}
|
||||
],
|
||||
"postgres_counts": {
|
||||
"attributes": 303,
|
||||
"categories": 119,
|
||||
"category_attributes": 307,
|
||||
"companies": 1,
|
||||
"company_plans": 1,
|
||||
"credit_balances": 1,
|
||||
"custom_variables": 3,
|
||||
"export_feeds": 2,
|
||||
"feed_mappings": 11,
|
||||
"files": 0,
|
||||
"input_feeds": 12,
|
||||
"memberships": 4,
|
||||
"plans": 5,
|
||||
"processed_products": 4330,
|
||||
"raw_products": 23748,
|
||||
"users": 28
|
||||
},
|
||||
"orphans": [
|
||||
{
|
||||
"check": "memberships_missing_user",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "memberships_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "categories_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "attributes_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "custom_variables_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "raw_products_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "raw_products_missing_feed",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "processed_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "processed_missing_raw",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "processed_missing_feed",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "export_feeds_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "export_feeds_missing_source",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "feed_mappings_missing_feed",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "files_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "company_plans_missing_plan",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "companies_without_active_plan",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "platform_admins",
|
||||
"count": 2,
|
||||
"pass": true
|
||||
}
|
||||
],
|
||||
"orphan_summary": {
|
||||
"passed": 17,
|
||||
"failed": 0,
|
||||
"total": 17
|
||||
},
|
||||
"ok": true
|
||||
},
|
||||
"notes": [
|
||||
"Clerk is excluded: users mapped by email only; no Clerk API.",
|
||||
"Legacy password hashes are never imported.",
|
||||
"API key secrets are not migrated; clients must mint new keys (seed-demo / ensure-demo for local).",
|
||||
"File blobs are metadata-only; resync object storage separately.",
|
||||
"Job history: domain jobs migrates processing_jobs (+ best-effort job_products) and tasks; tagged ai_provider_mode=migrated so retention keeps them.",
|
||||
"company_settings: language + merge_products only (domain settings); other legacy settings fields are not imported.",
|
||||
"woocommerce_configs: migrated from wc_* custom_fields when domain woo is enabled."
|
||||
],
|
||||
"elapsed_ms": 3043
|
||||
}
|
||||
@@ -0,0 +1,300 @@
|
||||
{
|
||||
"generated_at": "2026-08-08T07:52:07Z",
|
||||
"mode": "live",
|
||||
"domains": "all",
|
||||
"company_filter": [
|
||||
"97e1a309-3d23-4aa2-b518-8e8d7afdfec7"
|
||||
],
|
||||
"resume": true,
|
||||
"counts": {
|
||||
"admin_users": 1,
|
||||
"attributes": 303,
|
||||
"categories": 119,
|
||||
"category_attributes": 307,
|
||||
"companies": 1,
|
||||
"company_plans": 1,
|
||||
"company_plans_skipped": 4,
|
||||
"company_settings": 1,
|
||||
"credit_balances": 1,
|
||||
"credit_balances_skipped": 7,
|
||||
"custom_variables": 3,
|
||||
"demo_memberships": 1,
|
||||
"demo_user": 1,
|
||||
"export_feeds": 2,
|
||||
"feed_mappings": 11,
|
||||
"field_groups": 1,
|
||||
"input_feeds": 12,
|
||||
"memberships": 3,
|
||||
"plans": 5,
|
||||
"processed_products": 4330,
|
||||
"processing_job_products": 177,
|
||||
"processing_job_products_skipped": 20,
|
||||
"processing_jobs": 179,
|
||||
"raw_products": 23748,
|
||||
"raw_products_gtin_deduped": 7320,
|
||||
"standard_fields": 22,
|
||||
"tasks": 2,
|
||||
"usage_metrics": 1,
|
||||
"users": 27,
|
||||
"woocommerce_configs": 0
|
||||
},
|
||||
"validation": {
|
||||
"mode": "live",
|
||||
"counts": [
|
||||
{
|
||||
"entity": "companies",
|
||||
"mysql": 31,
|
||||
"postgres": 1,
|
||||
"delta": -30
|
||||
},
|
||||
{
|
||||
"entity": "profiles",
|
||||
"mysql": 27,
|
||||
"postgres": 3,
|
||||
"delta": -24,
|
||||
"note": "profiles → memberships"
|
||||
},
|
||||
{
|
||||
"entity": "users",
|
||||
"mysql": -1,
|
||||
"postgres": 27,
|
||||
"delta": 0,
|
||||
"note": "no password_hash imported mysql_missing"
|
||||
},
|
||||
{
|
||||
"entity": "admin_users",
|
||||
"mysql": 1,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "folded into users.is_platform_admin"
|
||||
},
|
||||
{
|
||||
"entity": "plans",
|
||||
"mysql": 5,
|
||||
"postgres": 5,
|
||||
"delta": 0
|
||||
},
|
||||
{
|
||||
"entity": "company_plans",
|
||||
"mysql": 5,
|
||||
"postgres": 1,
|
||||
"delta": -4
|
||||
},
|
||||
{
|
||||
"entity": "credit_balances",
|
||||
"mysql": 8,
|
||||
"postgres": 1,
|
||||
"delta": -7
|
||||
},
|
||||
{
|
||||
"entity": "categories",
|
||||
"mysql": 8465,
|
||||
"postgres": 119,
|
||||
"delta": -8346
|
||||
},
|
||||
{
|
||||
"entity": "attributes",
|
||||
"mysql": 198319,
|
||||
"postgres": 303,
|
||||
"delta": -198016
|
||||
},
|
||||
{
|
||||
"entity": "category_attributes",
|
||||
"mysql": 177404,
|
||||
"postgres": 307,
|
||||
"delta": -177097
|
||||
},
|
||||
{
|
||||
"entity": "custom_variables",
|
||||
"mysql": 54,
|
||||
"postgres": 3,
|
||||
"delta": -51,
|
||||
"note": "label/example → value"
|
||||
},
|
||||
{
|
||||
"entity": "xml_feeds",
|
||||
"mysql": 33,
|
||||
"postgres": 12,
|
||||
"delta": -21,
|
||||
"note": "xml_feeds → input_feeds"
|
||||
},
|
||||
{
|
||||
"entity": "raw_products",
|
||||
"mysql": 134006,
|
||||
"postgres": 23748,
|
||||
"delta": -110258
|
||||
},
|
||||
{
|
||||
"entity": "processed_products",
|
||||
"mysql": 7905,
|
||||
"postgres": 4330,
|
||||
"delta": -3575
|
||||
},
|
||||
{
|
||||
"entity": "export_feeds",
|
||||
"mysql": 11,
|
||||
"postgres": 2,
|
||||
"delta": -9
|
||||
},
|
||||
{
|
||||
"entity": "files",
|
||||
"mysql": 1,
|
||||
"postgres": 0,
|
||||
"delta": -1,
|
||||
"note": "metadata only; blobs not copied"
|
||||
},
|
||||
{
|
||||
"entity": "company_settings",
|
||||
"mysql": 7,
|
||||
"postgres": 1,
|
||||
"delta": -6,
|
||||
"note": "partial: language + merge_products only"
|
||||
},
|
||||
{
|
||||
"entity": "api_keys",
|
||||
"mysql": 4,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "not migrated; clients must mint new keys"
|
||||
},
|
||||
{
|
||||
"entity": "processing_jobs",
|
||||
"mysql": 863,
|
||||
"postgres": 179,
|
||||
"delta": -684,
|
||||
"note": "migrated when domain jobs enabled (ai_provider_mode=migrated)"
|
||||
}
|
||||
],
|
||||
"postgres_counts": {
|
||||
"attributes": 303,
|
||||
"categories": 119,
|
||||
"category_attributes": 307,
|
||||
"companies": 1,
|
||||
"company_plans": 1,
|
||||
"credit_balances": 1,
|
||||
"custom_variables": 3,
|
||||
"export_feeds": 2,
|
||||
"feed_mappings": 11,
|
||||
"files": 0,
|
||||
"input_feeds": 12,
|
||||
"memberships": 3,
|
||||
"plans": 5,
|
||||
"processed_products": 4330,
|
||||
"raw_products": 23748,
|
||||
"users": 27
|
||||
},
|
||||
"orphans": [
|
||||
{
|
||||
"check": "memberships_missing_user",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "memberships_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "categories_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "attributes_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "custom_variables_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "raw_products_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "raw_products_missing_feed",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "processed_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "processed_missing_raw",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "processed_missing_feed",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "export_feeds_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "export_feeds_missing_source",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "feed_mappings_missing_feed",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "files_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "company_plans_missing_plan",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "companies_without_active_plan",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "platform_admins",
|
||||
"count": 1,
|
||||
"pass": true
|
||||
}
|
||||
],
|
||||
"orphan_summary": {
|
||||
"passed": 17,
|
||||
"failed": 0,
|
||||
"total": 17
|
||||
},
|
||||
"ok": true
|
||||
},
|
||||
"demo": {
|
||||
"email": "demo@descrybe.local",
|
||||
"password_set": true,
|
||||
"user_id": "117936ea-c76e-4604-b7e5-8f23907ad057",
|
||||
"primary_company": "604f23a8-b66e-4b21-8b45-0d72b68f4790",
|
||||
"primary_company_name": "A1 Slovenija",
|
||||
"memberships_admin": 1,
|
||||
"platform_admin": true,
|
||||
"note": "Password documented in docs/portable-mysql-pg-migration.md (not written to report JSON)."
|
||||
},
|
||||
"notes": [
|
||||
"Clerk is excluded: users mapped by email only; no Clerk API.",
|
||||
"Legacy password hashes are never imported.",
|
||||
"API key secrets are not migrated; clients must mint new keys (seed-demo / ensure-demo for local).",
|
||||
"File blobs are metadata-only; resync object storage separately.",
|
||||
"Job history: domain jobs migrates processing_jobs (+ best-effort job_products) and tasks; tagged ai_provider_mode=migrated so retention keeps them.",
|
||||
"company_settings: language + merge_products only (domain settings); other legacy settings fields are not imported.",
|
||||
"woocommerce_configs: migrated from wc_* custom_fields when domain woo is enabled."
|
||||
],
|
||||
"elapsed_ms": 20738
|
||||
}
|
||||
@@ -0,0 +1,267 @@
|
||||
{
|
||||
"generated_at": "2026-08-08T07:52:28Z",
|
||||
"mode": "live",
|
||||
"domains": "jobs",
|
||||
"company_filter": [
|
||||
"97e1a309-3d23-4aa2-b518-8e8d7afdfec7"
|
||||
],
|
||||
"resume": true,
|
||||
"counts": {
|
||||
"companies": 1,
|
||||
"memberships": 3,
|
||||
"processing_job_products": 177,
|
||||
"processing_job_products_skipped": 20,
|
||||
"processing_jobs": 179,
|
||||
"tasks": 2,
|
||||
"users": 27
|
||||
},
|
||||
"validation": {
|
||||
"mode": "live",
|
||||
"counts": [
|
||||
{
|
||||
"entity": "companies",
|
||||
"mysql": 31,
|
||||
"postgres": 1,
|
||||
"delta": -30
|
||||
},
|
||||
{
|
||||
"entity": "profiles",
|
||||
"mysql": 27,
|
||||
"postgres": 4,
|
||||
"delta": -23,
|
||||
"note": "profiles → memberships"
|
||||
},
|
||||
{
|
||||
"entity": "users",
|
||||
"mysql": -1,
|
||||
"postgres": 28,
|
||||
"delta": 0,
|
||||
"note": "no password_hash imported mysql_missing"
|
||||
},
|
||||
{
|
||||
"entity": "admin_users",
|
||||
"mysql": 1,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "folded into users.is_platform_admin"
|
||||
},
|
||||
{
|
||||
"entity": "plans",
|
||||
"mysql": 5,
|
||||
"postgres": 5,
|
||||
"delta": 0
|
||||
},
|
||||
{
|
||||
"entity": "company_plans",
|
||||
"mysql": 5,
|
||||
"postgres": 1,
|
||||
"delta": -4
|
||||
},
|
||||
{
|
||||
"entity": "credit_balances",
|
||||
"mysql": 8,
|
||||
"postgres": 1,
|
||||
"delta": -7
|
||||
},
|
||||
{
|
||||
"entity": "categories",
|
||||
"mysql": 8465,
|
||||
"postgres": 119,
|
||||
"delta": -8346
|
||||
},
|
||||
{
|
||||
"entity": "attributes",
|
||||
"mysql": 198319,
|
||||
"postgres": 303,
|
||||
"delta": -198016
|
||||
},
|
||||
{
|
||||
"entity": "category_attributes",
|
||||
"mysql": 177404,
|
||||
"postgres": 307,
|
||||
"delta": -177097
|
||||
},
|
||||
{
|
||||
"entity": "custom_variables",
|
||||
"mysql": 54,
|
||||
"postgres": 3,
|
||||
"delta": -51,
|
||||
"note": "label/example → value"
|
||||
},
|
||||
{
|
||||
"entity": "xml_feeds",
|
||||
"mysql": 33,
|
||||
"postgres": 12,
|
||||
"delta": -21,
|
||||
"note": "xml_feeds → input_feeds"
|
||||
},
|
||||
{
|
||||
"entity": "raw_products",
|
||||
"mysql": 134006,
|
||||
"postgres": 23748,
|
||||
"delta": -110258
|
||||
},
|
||||
{
|
||||
"entity": "processed_products",
|
||||
"mysql": 7905,
|
||||
"postgres": 4330,
|
||||
"delta": -3575
|
||||
},
|
||||
{
|
||||
"entity": "export_feeds",
|
||||
"mysql": 11,
|
||||
"postgres": 2,
|
||||
"delta": -9
|
||||
},
|
||||
{
|
||||
"entity": "files",
|
||||
"mysql": 1,
|
||||
"postgres": 0,
|
||||
"delta": -1,
|
||||
"note": "metadata only; blobs not copied"
|
||||
},
|
||||
{
|
||||
"entity": "company_settings",
|
||||
"mysql": 7,
|
||||
"postgres": 1,
|
||||
"delta": -6,
|
||||
"note": "partial: language + merge_products only"
|
||||
},
|
||||
{
|
||||
"entity": "api_keys",
|
||||
"mysql": 4,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "not migrated; clients must mint new keys"
|
||||
},
|
||||
{
|
||||
"entity": "processing_jobs",
|
||||
"mysql": 863,
|
||||
"postgres": 179,
|
||||
"delta": -684,
|
||||
"note": "migrated when domain jobs enabled (ai_provider_mode=migrated)"
|
||||
}
|
||||
],
|
||||
"postgres_counts": {
|
||||
"attributes": 303,
|
||||
"categories": 119,
|
||||
"category_attributes": 307,
|
||||
"companies": 1,
|
||||
"company_plans": 1,
|
||||
"credit_balances": 1,
|
||||
"custom_variables": 3,
|
||||
"export_feeds": 2,
|
||||
"feed_mappings": 11,
|
||||
"files": 0,
|
||||
"input_feeds": 12,
|
||||
"memberships": 4,
|
||||
"plans": 5,
|
||||
"processed_products": 4330,
|
||||
"raw_products": 23748,
|
||||
"users": 28
|
||||
},
|
||||
"orphans": [
|
||||
{
|
||||
"check": "memberships_missing_user",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "memberships_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "categories_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "attributes_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "custom_variables_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "raw_products_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "raw_products_missing_feed",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "processed_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "processed_missing_raw",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "processed_missing_feed",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "export_feeds_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "export_feeds_missing_source",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "feed_mappings_missing_feed",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "files_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "company_plans_missing_plan",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "companies_without_active_plan",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "platform_admins",
|
||||
"count": 2,
|
||||
"pass": true
|
||||
}
|
||||
],
|
||||
"orphan_summary": {
|
||||
"passed": 17,
|
||||
"failed": 0,
|
||||
"total": 17
|
||||
},
|
||||
"ok": true
|
||||
},
|
||||
"notes": [
|
||||
"Clerk is excluded: users mapped by email only; no Clerk API.",
|
||||
"Legacy password hashes are never imported.",
|
||||
"API key secrets are not migrated; clients must mint new keys (seed-demo / ensure-demo for local).",
|
||||
"File blobs are metadata-only; resync object storage separately.",
|
||||
"Job history: domain jobs migrates processing_jobs (+ best-effort job_products) and tasks; tagged ai_provider_mode=migrated so retention keeps them.",
|
||||
"company_settings: language + merge_products only (domain settings); other legacy settings fields are not imported.",
|
||||
"woocommerce_configs: migrated from wc_* custom_fields when domain woo is enabled."
|
||||
],
|
||||
"elapsed_ms": 3036
|
||||
}
|
||||
@@ -0,0 +1,296 @@
|
||||
{
|
||||
"generated_at": "2026-08-04T21:31:12Z",
|
||||
"mode": "live",
|
||||
"domains": "all",
|
||||
"company_filter": [
|
||||
"97e1a309-3d23-4aa2-b518-8e8d7afdfec7"
|
||||
],
|
||||
"resume": true,
|
||||
"counts": {
|
||||
"admin_users": 1,
|
||||
"attributes": 303,
|
||||
"categories": 119,
|
||||
"category_attributes": 307,
|
||||
"companies": 1,
|
||||
"company_plans": 1,
|
||||
"company_plans_skipped": 4,
|
||||
"company_settings": 1,
|
||||
"credit_balances": 1,
|
||||
"credit_balances_skipped": 7,
|
||||
"custom_variables": 3,
|
||||
"demo_memberships": 1,
|
||||
"demo_user": 1,
|
||||
"export_feeds": 2,
|
||||
"feed_mappings": 11,
|
||||
"field_groups": 1,
|
||||
"input_feeds": 12,
|
||||
"memberships": 5,
|
||||
"plans": 5,
|
||||
"processed_products": 4378,
|
||||
"raw_products": 29115,
|
||||
"raw_products_gtin_deduped": 27017,
|
||||
"standard_fields": 22,
|
||||
"usage_metrics": 1,
|
||||
"users": 27,
|
||||
"woocommerce_configs": 0
|
||||
},
|
||||
"validation": {
|
||||
"mode": "live",
|
||||
"counts": [
|
||||
{
|
||||
"entity": "companies",
|
||||
"mysql": 31,
|
||||
"postgres": 1,
|
||||
"delta": -30
|
||||
},
|
||||
{
|
||||
"entity": "profiles",
|
||||
"mysql": 27,
|
||||
"postgres": 5,
|
||||
"delta": -22,
|
||||
"note": "profiles → memberships"
|
||||
},
|
||||
{
|
||||
"entity": "users",
|
||||
"mysql": -1,
|
||||
"postgres": 27,
|
||||
"delta": 0,
|
||||
"note": "no password_hash imported mysql_missing"
|
||||
},
|
||||
{
|
||||
"entity": "admin_users",
|
||||
"mysql": 1,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "folded into users.is_platform_admin"
|
||||
},
|
||||
{
|
||||
"entity": "plans",
|
||||
"mysql": 5,
|
||||
"postgres": 5,
|
||||
"delta": 0
|
||||
},
|
||||
{
|
||||
"entity": "company_plans",
|
||||
"mysql": 5,
|
||||
"postgres": 1,
|
||||
"delta": -4
|
||||
},
|
||||
{
|
||||
"entity": "credit_balances",
|
||||
"mysql": 8,
|
||||
"postgres": 1,
|
||||
"delta": -7
|
||||
},
|
||||
{
|
||||
"entity": "categories",
|
||||
"mysql": 8465,
|
||||
"postgres": 119,
|
||||
"delta": -8346
|
||||
},
|
||||
{
|
||||
"entity": "attributes",
|
||||
"mysql": 198319,
|
||||
"postgres": 303,
|
||||
"delta": -198016
|
||||
},
|
||||
{
|
||||
"entity": "category_attributes",
|
||||
"mysql": 177404,
|
||||
"postgres": 307,
|
||||
"delta": -177097
|
||||
},
|
||||
{
|
||||
"entity": "custom_variables",
|
||||
"mysql": 54,
|
||||
"postgres": 3,
|
||||
"delta": -51,
|
||||
"note": "label/example → value"
|
||||
},
|
||||
{
|
||||
"entity": "xml_feeds",
|
||||
"mysql": 33,
|
||||
"postgres": 12,
|
||||
"delta": -21,
|
||||
"note": "xml_feeds → input_feeds"
|
||||
},
|
||||
{
|
||||
"entity": "raw_products",
|
||||
"mysql": 159070,
|
||||
"postgres": 29115,
|
||||
"delta": -129955
|
||||
},
|
||||
{
|
||||
"entity": "processed_products",
|
||||
"mysql": 7953,
|
||||
"postgres": 4378,
|
||||
"delta": -3575
|
||||
},
|
||||
{
|
||||
"entity": "export_feeds",
|
||||
"mysql": 11,
|
||||
"postgres": 2,
|
||||
"delta": -9
|
||||
},
|
||||
{
|
||||
"entity": "files",
|
||||
"mysql": 1,
|
||||
"postgres": 0,
|
||||
"delta": -1,
|
||||
"note": "metadata only; blobs not copied"
|
||||
},
|
||||
{
|
||||
"entity": "company_settings",
|
||||
"mysql": 7,
|
||||
"postgres": 1,
|
||||
"delta": -6,
|
||||
"note": "partial: language + merge_products only"
|
||||
},
|
||||
{
|
||||
"entity": "api_keys",
|
||||
"mysql": 4,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "not migrated; clients must mint new keys"
|
||||
},
|
||||
{
|
||||
"entity": "processing_jobs",
|
||||
"mysql": 1023,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "ephemeral history not migrated"
|
||||
}
|
||||
],
|
||||
"postgres_counts": {
|
||||
"attributes": 303,
|
||||
"categories": 119,
|
||||
"category_attributes": 307,
|
||||
"companies": 1,
|
||||
"company_plans": 1,
|
||||
"credit_balances": 1,
|
||||
"custom_variables": 3,
|
||||
"export_feeds": 2,
|
||||
"feed_mappings": 11,
|
||||
"files": 0,
|
||||
"input_feeds": 12,
|
||||
"memberships": 5,
|
||||
"plans": 5,
|
||||
"processed_products": 4378,
|
||||
"raw_products": 29115,
|
||||
"users": 27
|
||||
},
|
||||
"orphans": [
|
||||
{
|
||||
"check": "memberships_missing_user",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "memberships_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "categories_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "attributes_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "custom_variables_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "raw_products_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "raw_products_missing_feed",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "processed_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "processed_missing_raw",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "processed_missing_feed",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "export_feeds_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "export_feeds_missing_source",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "feed_mappings_missing_feed",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "files_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "company_plans_missing_plan",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "companies_without_active_plan",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "platform_admins",
|
||||
"count": 1,
|
||||
"pass": true
|
||||
}
|
||||
],
|
||||
"orphan_summary": {
|
||||
"passed": 17,
|
||||
"failed": 0,
|
||||
"total": 17
|
||||
},
|
||||
"ok": true
|
||||
},
|
||||
"demo": {
|
||||
"email": "demo@descrybe.local",
|
||||
"password_set": true,
|
||||
"user_id": "72b9ebb4-786a-4091-b3cc-671cf58cff4f",
|
||||
"primary_company": "604f23a8-b66e-4b21-8b45-0d72b68f4790",
|
||||
"primary_company_name": "Local Demo Co",
|
||||
"memberships_admin": 1,
|
||||
"platform_admin": true,
|
||||
"note": "Password documented in docs/portable-mysql-pg-migration.md (not written to report JSON)."
|
||||
},
|
||||
"notes": [
|
||||
"Clerk is excluded: users mapped by email only; no Clerk API.",
|
||||
"Legacy password hashes are never imported.",
|
||||
"API key secrets are not migrated; clients must mint new keys (seed-demo / ensure-demo for local).",
|
||||
"File blobs are metadata-only; resync object storage separately.",
|
||||
"Job history (processing_jobs / queues) is ephemeral and not migrated.",
|
||||
"company_settings: language + merge_products only (domain settings); other legacy settings fields are not imported.",
|
||||
"woocommerce_configs: migrated from wc_* custom_fields when domain woo is enabled."
|
||||
],
|
||||
"elapsed_ms": 31389
|
||||
}
|
||||
@@ -0,0 +1,267 @@
|
||||
{
|
||||
"generated_at": "2026-08-08T07:52:28Z",
|
||||
"mode": "live",
|
||||
"domains": "jobs",
|
||||
"company_filter": [
|
||||
"97e1a309-3d23-4aa2-b518-8e8d7afdfec7"
|
||||
],
|
||||
"resume": true,
|
||||
"counts": {
|
||||
"companies": 1,
|
||||
"memberships": 3,
|
||||
"processing_job_products": 177,
|
||||
"processing_job_products_skipped": 20,
|
||||
"processing_jobs": 179,
|
||||
"tasks": 2,
|
||||
"users": 27
|
||||
},
|
||||
"validation": {
|
||||
"mode": "live",
|
||||
"counts": [
|
||||
{
|
||||
"entity": "companies",
|
||||
"mysql": 31,
|
||||
"postgres": 1,
|
||||
"delta": -30
|
||||
},
|
||||
{
|
||||
"entity": "profiles",
|
||||
"mysql": 27,
|
||||
"postgres": 4,
|
||||
"delta": -23,
|
||||
"note": "profiles → memberships"
|
||||
},
|
||||
{
|
||||
"entity": "users",
|
||||
"mysql": -1,
|
||||
"postgres": 28,
|
||||
"delta": 0,
|
||||
"note": "no password_hash imported mysql_missing"
|
||||
},
|
||||
{
|
||||
"entity": "admin_users",
|
||||
"mysql": 1,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "folded into users.is_platform_admin"
|
||||
},
|
||||
{
|
||||
"entity": "plans",
|
||||
"mysql": 5,
|
||||
"postgres": 5,
|
||||
"delta": 0
|
||||
},
|
||||
{
|
||||
"entity": "company_plans",
|
||||
"mysql": 5,
|
||||
"postgres": 1,
|
||||
"delta": -4
|
||||
},
|
||||
{
|
||||
"entity": "credit_balances",
|
||||
"mysql": 8,
|
||||
"postgres": 1,
|
||||
"delta": -7
|
||||
},
|
||||
{
|
||||
"entity": "categories",
|
||||
"mysql": 8465,
|
||||
"postgres": 119,
|
||||
"delta": -8346
|
||||
},
|
||||
{
|
||||
"entity": "attributes",
|
||||
"mysql": 198319,
|
||||
"postgres": 303,
|
||||
"delta": -198016
|
||||
},
|
||||
{
|
||||
"entity": "category_attributes",
|
||||
"mysql": 177404,
|
||||
"postgres": 307,
|
||||
"delta": -177097
|
||||
},
|
||||
{
|
||||
"entity": "custom_variables",
|
||||
"mysql": 54,
|
||||
"postgres": 3,
|
||||
"delta": -51,
|
||||
"note": "label/example → value"
|
||||
},
|
||||
{
|
||||
"entity": "xml_feeds",
|
||||
"mysql": 33,
|
||||
"postgres": 12,
|
||||
"delta": -21,
|
||||
"note": "xml_feeds → input_feeds"
|
||||
},
|
||||
{
|
||||
"entity": "raw_products",
|
||||
"mysql": 134006,
|
||||
"postgres": 23748,
|
||||
"delta": -110258
|
||||
},
|
||||
{
|
||||
"entity": "processed_products",
|
||||
"mysql": 7905,
|
||||
"postgres": 4330,
|
||||
"delta": -3575
|
||||
},
|
||||
{
|
||||
"entity": "export_feeds",
|
||||
"mysql": 11,
|
||||
"postgres": 2,
|
||||
"delta": -9
|
||||
},
|
||||
{
|
||||
"entity": "files",
|
||||
"mysql": 1,
|
||||
"postgres": 0,
|
||||
"delta": -1,
|
||||
"note": "metadata only; blobs not copied"
|
||||
},
|
||||
{
|
||||
"entity": "company_settings",
|
||||
"mysql": 7,
|
||||
"postgres": 1,
|
||||
"delta": -6,
|
||||
"note": "partial: language + merge_products only"
|
||||
},
|
||||
{
|
||||
"entity": "api_keys",
|
||||
"mysql": 4,
|
||||
"postgres": -1,
|
||||
"delta": 0,
|
||||
"note": "not migrated; clients must mint new keys"
|
||||
},
|
||||
{
|
||||
"entity": "processing_jobs",
|
||||
"mysql": 863,
|
||||
"postgres": 179,
|
||||
"delta": -684,
|
||||
"note": "migrated when domain jobs enabled (ai_provider_mode=migrated)"
|
||||
}
|
||||
],
|
||||
"postgres_counts": {
|
||||
"attributes": 303,
|
||||
"categories": 119,
|
||||
"category_attributes": 307,
|
||||
"companies": 1,
|
||||
"company_plans": 1,
|
||||
"credit_balances": 1,
|
||||
"custom_variables": 3,
|
||||
"export_feeds": 2,
|
||||
"feed_mappings": 11,
|
||||
"files": 0,
|
||||
"input_feeds": 12,
|
||||
"memberships": 4,
|
||||
"plans": 5,
|
||||
"processed_products": 4330,
|
||||
"raw_products": 23748,
|
||||
"users": 28
|
||||
},
|
||||
"orphans": [
|
||||
{
|
||||
"check": "memberships_missing_user",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "memberships_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "categories_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "attributes_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "custom_variables_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "raw_products_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "raw_products_missing_feed",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "processed_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "processed_missing_raw",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "processed_missing_feed",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "export_feeds_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "export_feeds_missing_source",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "feed_mappings_missing_feed",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "files_missing_company",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "company_plans_missing_plan",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "companies_without_active_plan",
|
||||
"count": 0,
|
||||
"pass": true
|
||||
},
|
||||
{
|
||||
"check": "platform_admins",
|
||||
"count": 2,
|
||||
"pass": true
|
||||
}
|
||||
],
|
||||
"orphan_summary": {
|
||||
"passed": 17,
|
||||
"failed": 0,
|
||||
"total": 17
|
||||
},
|
||||
"ok": true
|
||||
},
|
||||
"notes": [
|
||||
"Clerk is excluded: users mapped by email only; no Clerk API.",
|
||||
"Legacy password hashes are never imported.",
|
||||
"API key secrets are not migrated; clients must mint new keys (seed-demo / ensure-demo for local).",
|
||||
"File blobs are metadata-only; resync object storage separately.",
|
||||
"Job history: domain jobs migrates processing_jobs (+ best-effort job_products) and tasks; tagged ai_provider_mode=migrated so retention keeps them.",
|
||||
"company_settings: language + merge_products only (domain settings); other legacy settings fields are not imported.",
|
||||
"woocommerce_configs: migrated from wc_* custom_fields when domain woo is enabled."
|
||||
],
|
||||
"elapsed_ms": 3036
|
||||
}
|
||||
Reference in New Issue
Block a user