A1 Slovenija tenant seed (Postgres COPY archive, gzipped) File: a1-demo-data.sql.gz Company id: 604f23a8-b66e-4b21-8b45-0d72b68f4790 Legacy MySQL id: 97e1a309-3d23-4aa2-b518-8e8d7afdfec7 Source of truth for a clean local DB (2026-08-08 reseed): MySQL dump → C:\Users\Green Eclipse\Downloads\descrybe_new (1).sql Loaded into Laragon MySQL DB `descrybe_new`, then A1-only migrator (`-company 97e1a309-3d23-4aa2-b518-8e8d7afdfec7`) + seed-demo + user cleanup. See docs/migrate-from-descrybe-new.md and docs/demo-user.md. Expected A1 snapshot (dump-faithful, no local QA/Iso pollution): companies=1 (A1 Slovenija only, plus internal __platform_settings__) users=3 (demo@descrybe.local, demo@descrybe.test, a1-primary@descrybe.local) memberships=3 categories=119 (108 with AI prompts via overlay) attributes=303 category_attributes=307 input_feeds=12 / feed_mappings=11 / export_feeds=2 raw_products=~25355 / processed_products=0 (demo seed clears processed) processing_jobs=0 / processing_job_products=0 plan=A1 wallet total=2500 used=163 remaining=2337 mapped coverage (typical): description ~98%, feed attrs ~99%, category ~17% (4330 dump-assigned) Category assignment (dump -> PG): MySQL processed_products.category holds category unique_id (e.g. 46, 120). Feed XML / feed_mappings do NOT include a category field - assignment was historical processing output. Archive restores raw mapped_data (description, specs/attrs, category when present). seed-a1 then refreshes mapped_data.category from a MySQL dump when available. Dump path (first match wins): 1. -mysql-dump flag / admin body mysql_dump 2. SEED_A1_MYSQL_DUMP (API process env on Git-Syncer) 3. Auto-detect: scripts/seed/descrybe_new.sql (deploy root), ~/Downloads/descrybe_new (1).sql or descrybe_new.sql Git-Syncer / production: copy the dump onto the API host, e.g. /scripts/seed/descrybe_new.sql or set SEED_A1_MYSQL_DUMP=/absolute/path/descrybe_new.sql in the API env. Then use Admin → Companies → Sync A1 (no CLI DATABASE_URL needed). One-off without wipe (CLI; loads monorepo-root .env when unset): go run ./cmd/seed-a1 -mode backfill-categories Admin Sync A1 = dump category backfill (when dump present) + Fix hygiene (prompts, weak hashes, bidirectional category backfill, attr sanitize). It does NOT wipe/reimport the ~25k catalog. Note: MySQL processed description/attributes are usually NULL; feed-origin original description + specs live on raw_products.mapped_data in the archive. A1 demo seed keeps processed=0 / jobs=0. Who sees what: demo@descrybe.local � platform admin + membership on Platform Demo only (switch/impersonate to a1-primary to act on A1; do not use demo API key for A1) a1-primary@descrybe.local � A1 member only (same A1 catalog; no other tenants) Category prompts overlay (committed WP dump + JSON fallback): wp_product_categories.sql — primary Sync A1 / repair source of truth a1-category-prompts.json — JSON fallback when WP SQL is absent Applied automatically after every `npm run seed:a1` reimport (match by normalized category name; rewrites {""OPIS IZDELKA""} -> {{description}}, {""STARO IME IZDELKA""} -> {{name}}). Skip with -skip-category-prompts, or re-apply without wipe: go run ./cmd/seed-a1 -mode apply-category-prompts -file ../../scripts/seed/a1-demo-data.sql.gz go run ./cmd/repair-category-prompts -apply # uses scripts/seed/wp_product_categories.sql by default (SEED_A1_WP_CATEGORIES overrides) Normal use (loads DATABASE_URL from repo-root .env if unset): npm run seed:a1 # wipe A1-only rows, import archive, prompts + mapped category backfill npm run reimport:a1 # alias of seed:a1 Requires migrations already applied. Does not wipe other companies. Does not run export — it only imports scripts/seed/a1-demo-data.sql.gz. A1 demo seed skips processed_products / processing_jobs (processed=0, jobs=0). Use -mode recover-jobs only when restoring legacy job history from a MySQL dump. feed_sync_jobs stay ephemeral and are not restored; raw_products.sync_job_id is exported as NULL for that reason. Archive is Postgres COPY text inside gzip, not MySQL dump SQL. Full clean rebuild from MySQL dump (when archive is wrong / polluted): 1. mysql: DROP/CREATE descrybe_new; stream-import the Adminer dump 2. docker: DROP/CREATE postgres descrybe; goose up 3. migrator -company -resume -ensure-demo -skip-post-import 4. migrator -domains jobs -resume 5. go run ./cmd/seed-demo 6. keep only demo + a1-primary memberships; delete orphan users / Iso test cos 7. go run ./cmd/seed-a1 -mode apply-category-prompts 8. npm run seed:a1:export # refresh a1-demo-data.sql.gz then commit Export copies EVERY A1 processing_jobs / processing_job_products row (no LIMIT). If the archive only has a couple of jobs, live Postgres was missing history — recover from the MySQL dump first, then re-export: set SEED_A1_MYSQL_DUMP=D:\path\descrybe_new.sql go run ./cmd/seed-a1 -mode recover-jobs npm run seed:a1:export Maintainer only — regenerate the snapshot when live A1 data must be re-captured: npm run seed:a1:export # snapshot live A1 → a1-demo-data.sql.gz (then commit) Not part of the day-to-day reset workflow. Support Knowledge articles (platform FAQ /admin/support/knowledge): support-kb-articles.json � product/user corpus (Agent 6) support-kb-articles-tech.json � technical/ops/admin corpus (Agent 7; tech-* slugs) Markdown sources for tech bodies (optional edit then regenerate JSON): apps/api/cmd/seed-support-kb/content/*.md Seed (from apps/api, DATABASE_URL set): go run ./cmd/seed-support-kb go run ./cmd/seed-support-kb -file ../../scripts/seed/support-kb-articles-tech.json Idempotent ON CONFLICT (slug). Do not reuse product slugs for tech articles.