ben.stull
2606fbf826
docs(products): operator guide (DOC-1) + domain notes (DOC-4); version 0.5.0
...
ci / check (push) Has been cancelled
ci / check (pull_request) Has been cancelled
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-11 17:00:13 -07:00
ben.stull
ad738adbc0
test(e2e): SLICE-5 scenarios — preview/confirm, errors, rejection, cancel (§6.8)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-11 16:53:59 -07:00
ben.stull
a58f42cf86
test(e2e): stand up Playwright — fresh-DB server harness + sign-up helper
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-11 16:50:59 -07:00
ben.stull
d18a84e135
fix(products-ui): review pass — show-more race, keyboard history access, a11y glyphs/aria-live, label consistency
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-11 16:46:43 -07:00
ben.stull
87a56a66c4
feat(products-ui): import run detail (§5.5, PUC-4/5/8)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-11 16:35:49 -07:00
ben.stull
4141285b89
feat(products-ui): import preview — tiles, drill-in diffs, confirm/cancel (§5.4)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-11 16:34:33 -07:00
ben.stull
188494272a
feat(products-ui): import upload screen (§5.3, PUC-2/5a)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-11 16:30:51 -07:00
ben.stull
26f84cb916
feat(products-ui): admin nav + Products page with import history (§5.2)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-11 16:29:20 -07:00
ben.stull
b5dac8886f
feat(products-ui): typed products API client + admin hash routing
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-11 16:25:37 -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
ben.stull
0ee948b34d
feat(products): SD-0002 §6.3 schema — migration 0002 + nh3/multipart deps (SLICE-5)
...
Also updates test_migrate_from_empty_applies_0001 → test_migrate_from_empty_applies_all
to assert both migrations apply on a fresh DB (mechanical consequence of adding 0002).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-11 14:52:18 -07:00
ben.stull
1267d4f29d
docs: SLICE-5 implementation plan (SD-0002 §7.2 import spine)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-11 14:48:47 -07:00