ben.stull
5a97b9dc59
feat(products): status-filtered export_catalog snapshot query (PUC-9)
2026-06-11 22:01:11 -07:00
ben.stull
7652e92cbe
feat(products): serialize multi-variant + interleaved images (§6.5.1 row grammar)
2026-06-11 21:58:22 -07:00
ben.stull
627e257d4c
feat(products): canonical serializer skeleton — header + single product row (SD-0002 §6.5.5)
2026-06-11 21:57:48 -07:00
ben.stull
4dacc2dafd
feat(products): /api/products/* BFF endpoints + sample.csv (DOC-3)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-11 16:18:34 -07:00
ben.stull
a8538d3ecc
fix(products): cleared Variant Position resolves to file order, not NULL
...
A blank Variant Position cell previewed position->null and aborted the
confirm transaction (variant.position is NOT NULL). Resolve the clear to
the variant's file order at diff time so preview and apply stay in
lockstep; carry file_order on VariantPlan instead of an identity-keyed
map; release the read snapshot before PreviewStale/NothingToApply.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-11 16:14:14 -07:00
ben.stull
0c7865e9e1
feat(products): confirm/apply in one transaction, runs, summary — INV-10/11/14 + TEL-2/6
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-11 16:02:27 -07:00
ben.stull
fcbf1393f5
feat(products): import_validate → draft, preview records, discard + TEL-1
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-11 15:51:03 -07:00
ben.stull
138126ab17
feat(products): repo — catalog snapshot, draft/run SQL, upsert primitives
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-11 15:42:42 -07:00
ben.stull
667a462e0b
fix(products): honest position compare for matched variants in diff
...
A Variant Position column previously produced a spurious update with a
false before:None (CatalogVariant keeps position as an attribute, not in
fields{}). Compare against the attribute, like images already do.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-11 15:37:59 -07:00
ben.stull
9bc6e4dbd2
feat(products): diff engine — add/update/unchanged/error + INV-11 fingerprint
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-11 15:28:03 -07:00
ben.stull
19ee695c20
feat(products): row validation — §6.5.1 rules + INV-15 sanitization
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-11 15:17:01 -07:00
ben.stull
f64c3fddf9
feat(products): CSV codec — file-level parse + INV-18 caps (PUC-5a)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-11 14:58:53 -07:00
ben.stull
c39bbd4728
feat(products): domain skeleton — errors, column registry, canonical row model
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-11 14:55:37 -07:00