Current state
Phase 0 foundation
A local preparation workspace. All catalog data shown is a labelled audit snapshot or a synthetic fixture. No store, database or model is contacted from this workspace.
Implemented capabilities
Status reflects what exists in this repository, not an intention.
- Versioned typed data contractimplemented
src/data/contract.ts, schema tfdk.package.v1.
- Catalog adapter + local snapshot providerimplemented
Mock mode only; no network call.
- Source-derived examples seededimplemented
5 audit examples + 1 synthetic multi-variant fixture. Not the 243 or 96 record sets.
- Local JSON import/exportimplemented
Schema check, per-row errors, identity deduplication, preview and explicit apply, manual download.
- Service knowledge review surfaceimplemented
Read-only source policies and 6 decision cards vs unset target policies; 2 static drafts.
- da/en dictionary and glossaryimplemented
Approval status per locale; unresolved entries visible in admin only.
- Connection readiness (informational)implemented
Journey described. No connect action, no secret fields.
- Local checksimplemented
Vitest suite for round-trip, dedup, missing SKU, conflicts, variant identity, locale isolation, offline mode.
- Authenticationplanned
Not required while data is local demo data. Boundary documented in docs/PROJECT_CONTRACT.md.
Phase 1 readiness
States, not percentages. Nothing here indicates that a data migration has taken place: the catalog still contains only the supplied examples.
- Phase 1 infrastructureimplemented
Reconciliation, conflict review, distributor-export adapter, media role mapping, DA/EN knowledge, shared resolver and portable export all exist and are covered by local checks.
- Source data transferimplemented
TenderMate source payload imported: 43 files hash-verified (202.6 MB), 96 stored product records, 499 page snapshots, 667 media references, 243 historical rows, 114 service-knowledge records. Stored in source-data/tfdk-source-data.
- Live Shopify catalogblocked
distributor_catalog is empty in the source: no variants, prices or stock exist. None are invented.
- Image binariesblocked
Zero binaries transferred this round: references only. 565 copies remain in the source runtime; 102 source binaries are missing (99 private objects, 3 public 404s).
- Factual conflictsblocked
Rock 90 and Glow Alto dimensions remain unresolved. The imported payload documents the conflict, it does not settle it.
- Danish native reviewblocked
Every Danish string is a draft; no native reviewer has approved any of them.
- Local commercial policyblocked
Return window, warranty wording, shipping territory and rates, seller identity and return address are unset. NL/DE source terms are historical context only.
- Shopify connectionplanned
Deliberately not connected in this phase. No app, no credentials, no store.
Remaining Phase 1 exit criteria
- A live Shopify catalog export with variants, prices and stock is transferred; distributor_catalog is empty in the current source payload.
- The 565 copied image binaries are transferred and bound to their roles, and the 102 missing binaries are resolved or explicitly written off.
- Every raw record carries a real source id; no visibly synthetic id remains.
- Every identity link is either linked by source id or decided by a named reviewer; no ambiguous match is left applied.
- Rock 90 and Glow Alto dimensions are resolved with a named, dated evidence source and approved by a reviewer.
- Every required field per category is present, approved or explicitly not applicable.
- Each of the four image roles is either mapped to a single reference or explicitly recorded as missing; no ambiguity remains unreviewed.
- A native Danish reviewer has approved the dictionary, glossary and all thirteen service topics.
- The distributor has confirmed Danish commercial terms so the target policies can leave the unset state.
Phase 1 capabilities
Implemented infrastructure is separated from what is blocked awaiting authorization, evidence or a decision.
- Source reconciliation workspaceimplemented
Raw records, normalized candidates and identity links kept separate; SKU only proposes.
- Conflict review workflowimplemented
Alternatives, required evidence, decision with rationale/source/reviewer. Nothing auto-approved.
- Distributor export adapterimplemented
tendermate.distributor_export.v1: nested validation, preview, apply, unknown fields preserved.
- Media role mapping surfaceimplemented
Four documented roles; missing and ambiguous states preserved; staging cannot validate a missing image.
- DA/EN service knowledgeimplemented
9 topics with Danish and English drafts, English rationale; native review pending on all.
- Shared answer resolverimplemented
One resolver for every future surface; explicit English fallback for unsupported locales.
- Portable local exportimplemented
Manifest with versions, counts, limitations and missing dependencies. No credentials, no customer data.
- Source data importimplemented
TenderMate data payload imported and hash-verified: 96 stored records (real Shopify GIDs), 499 page snapshots, 667 media references, 243 historical rows, 114 service records. No live catalog, no image binaries.
- Conflict resolutionblocked
Rock 90 and Glow Alto dimensions remain unresolved; evidence is not available in this project.
- Danish native reviewblocked
No native reviewer has approved any Danish string.
- Danish commercial policyblocked
Return window, warranty wording, shipping, territory, seller identity and return address are unset.
Source provenance
Read-only audit facts from 10 September 2026. They describe the source system; they were not imported into this workspace.
| Item | Value | Caveat |
|---|---|---|
| Historical catalog | 243 unique TF-SKU rows | Imported as source rows. Historical rows are not confirmed active products. |
| Stored product records | 96 (herp_product_identity) | Imported with real Shopify product GIDs. Source records, not approved canonical facts. |
| Visual profiles / reference assets | 87 profiles, 667 reference rows | References only: zero image binaries transferred. Not proof that all Shopify data or images are complete. |
| Primary roles populated | packshot 53, grey 53, spec 48, mood 48 | Counts from the imported media manifest; 465 references carry no role key. |
| Site page snapshots | 499 imported (about 199 MB of bodies) | Kept in the offline repo archive; the app shows text excerpts only, never rendered source HTML. |
| Distributor catalog tables | empty | Both distributor_catalog and its translations: no variants, prices or stock exist. |
| Knowledge base | 10 articles, 30 templates, 6 decision cards, 68 intents; 0 DA | No Danish source content exists. |
| AI evaluation cases | 20 (14 NL, 4 EN, 2 DE, 0 DA) | Some historical unsafe claims; not current release evidence. |
| Loaded in this workspace | 5 source-derived examples + 1 synthetic fixture, plus the imported source indexes | The seeded examples stay samples; the synthetic fixture is excluded from every source total. |
Open issues
- Rock 90 dimensions conflict (40 × 24.5 × 24.5 cm vs 40 × 23.5 × 130 cm). Unresolved.
- Glow Alto dimensions conflict (130 × 14.5 × 14.5 cm vs 40 × 14.5 × 130 cm). Unresolved.
- Cycloflame Wall Bundle has no primary SKU and unknown components.
- Glass Café 18 cm compatibility requires review; not asserted.
- Rock 90 grey studio image has two file references; ambiguity preserved.
- No Danish source knowledge base or templates exist; all Danish text is candidate only.
- Target return address, seller identity, shipping territory/rates and warranty wording are unset.
- Shopify scopes, API versions and authorization route for a third-party store are unverified.
Phase plan
Phases 1–6 are documented plans. Nothing runs automatically; each phase needs an explicit instruction and must pass its gate.
- Phase 0 — Foundationimplemented
Local preparation workspace, typed data contract, mock adapter, local package I/O, knowledge review.
Acceptance gate
Docs persisted, workspace runs offline, import/export round-trips, conflicts surface, Shopify not connected. - Phase 1 — Approved portable source packagein_progress
Infrastructure built: reconciliation workspace, conflict review workflow, versioned distributor-export adapter, media role mapping, DA/EN service knowledge, shared answer resolver, portable export. The audit dossier is parsed (96 Appendix A rows, 243 Appendix B rows) and the TenderMate source data payload is imported and hash-verified (96 stored product records with real Shopify GIDs, 499 page snapshots, 667 media references, 114 service records). Still absent: a live Shopify catalog with variants/prices/stock, and every image binary.
Acceptance gate
Zero unresolved conflicts; every fact approved or explicitly not applicable; named reviewer per approval; a live catalog export and the image binaries transferred. - Phase 2 — Public website on the mock adapterplanned
Danish-first site: navigation, templates, comparison, compatible parts, deterministic media, search, cart simulation.
Acceptance gate
Adapter-only data, DA default with EN alternate, no Dutch, unresolved translations blocked from customer views. - Phase 3 — Internal English service dashboardplanned
English dashboard, Danish/English drafts from shared approved knowledge, synthetic scenarios first.
Acceptance gate
One shared resolver, policy citation per draft, auth boundary in place before real ticket data. - Phase 4 — Distributor self-connectplanned
Central-source read adapter, target Storefront API, target server-side Admin API; credentials per store.
Acceptance gate
Owner-authorized installation, scopes read back and verified, store identity verified, no Admin secret in the browser. - Phase 5 — Full target sync and verificationplanned
Sync with remapped IDs, real prices/stock/shipping/payment, test checkout, order identity and service tests.
Acceptance gate
Idempotent re-sync with zero unintended diffs; verified test order before any sale. - Phase 6 — Explicit user-authorized launchplanned
Go-live only on written authorization. Marketplaces later.
Acceptance gate
Written go-live authorization referencing Phase 5 evidence.