This website requires JavaScript.
c18ddcc561
Merge pull request 'Pivot: strip storefront → network-service seed (v0.9.0)' (#33 ) from pivot-strip-storefront into main
main
ben.stull
2026-06-12 16:32:49 +00:00
84a2bdbd78
chore(reset): drop e2e run artifacts swept in by git add -A
ben.stull
2026-06-12 09:31:37 -07:00
df92e3f94c
chore(reset)!: strip storefront → network-service seed (v0.9.0)
ben.stull
2026-06-12 09:30:01 -07:00
e2d8b5caae
Merge pull request 'SLICE-8: Shopify dialect — detect/map Shopify export at the codec boundary + DOC-2/3 (SD-0002 §7.2)' (#32 ) from slice-8-shopify-dialect into main
v0.8.0
release/2026-06-12T02-41
ben.stull
2026-06-12 09:37:37 +00:00
a851d3587c
fix(products): conservative dialect detection — canonical-distinctive columns veto Shopify (SLICE-8 review)
ben.stull
2026-06-12 02:36:09 -07:00
cb6b5996f3
chore(products): SLICE-8 complete — bump v0.8.0; §12 traceability audited (SD-0002)
ben.stull
2026-06-12 02:28:18 -07:00
17f3b600fd
test(e2e): e2e_import_shopify_dialect — Shopify export imports directly (PUC-6, SLICE-8)
ben.stull
2026-06-12 02:26:44 -07:00
6459e34480
docs(products): DOC-4 dialect-adapter notes (SLICE-8)
ben.stull
2026-06-12 02:24:44 -07:00
60a06de302
docs(products): DOC-2 column reference served at /api/products/columns.md (SLICE-8)
ben.stull
2026-06-12 02:24:05 -07:00
0aeccf7d2c
feat(products-ui): Shopify 'mapped' label + format help links to column reference (PUC-6/PUC-11, SLICE-8)
ben.stull
2026-06-12 02:22:32 -07:00
a00f5baaec
test(products): INV-10 holds over a partial Shopify import (SLICE-8)
ben.stull
2026-06-12 02:21:34 -07:00
f170950aec
test(products): exhaustive Shopify->canonical mapping fixture (SD-0002 §6.5.1, SLICE-8)
ben.stull
2026-06-12 02:21:05 -07:00
0c7a76a305
feat(products): codec detects + maps Shopify dialect at the boundary (INV-17, SLICE-8)
ben.stull
2026-06-12 02:20:21 -07:00
daa237dd59
feat(products): Shopify dialect adapter — header detection + canonical mapping (SD-0002 §6.5.1, SLICE-8)
ben.stull
2026-06-12 02:19:15 -07:00
e16ec7cf94
docs(plan): SLICE-8 Shopify dialect implementation plan (SD-0002 §7.2)
ben.stull
2026-06-12 02:17:30 -07:00
8ed9b25771
Merge pull request 'SLICE-7: images pipeline end-to-end — fetch/host/serve + INV-12 over images (SD-0002 §7.2)' (#30 ) from worktree-slice-7-images into main
v0.7.0
release/2026-06-12T01-20
ben.stull
2026-06-12 08:00:00 +00:00
c929282e07
fix(products): bomb-safe image processing + per-image error isolation; honest claim/resumability docs (SLICE-7 review)
worktree-slice-7-images
ben.stull
2026-06-12 00:58:10 -07:00
757412ef2a
docs(products): image pipeline ops + seams (DOC-1/DOC-4); overlay bucket config; v0.7.0
ben.stull
2026-06-12 00:48:44 -07:00
0775537d4c
test(e2e): e2e_image_outcomes — fixture image host, per-image outcomes + notice band (SD-0002 §6.8)
ben.stull
2026-06-12 00:41:39 -07:00
d81215be1d
feat(products-ui): run-detail images section + progress poll, image-problems notice band, history images column (SD-0002 §5.2/§5.5)
ben.stull
2026-06-12 00:37:45 -07:00
7f51f5242f
feat(products): app-served image route — storefront-authorized, immutable cache (SD-0002 §6.4, INV-16)
ben.stull
2026-06-12 00:34:04 -07:00
5d5341b29b
feat(products): confirm → fetching_images + post-commit fetch scheduling + startup recovery (SD-0002 §6.5.3/§6.9)
ben.stull
2026-06-12 00:30:08 -07:00
23267c4d4c
feat(products): image-fetch phase — SSRF guard, bounds, renditions, resume (SD-0002 §6.5.4, §6.9, INV-18)
ben.stull
2026-06-12 00:26:26 -07:00
13e74f4c61
feat(products): image-phase repo helpers + run progress/outcomes/counts (SD-0002 §6.5.4)
ben.stull
2026-06-12 00:23:09 -07:00
984dc98dee
feat(products): diff resolves hosted image URLs to existing records — INV-12 over images (SD-0002 §6.3)
ben.stull
2026-06-12 00:19:23 -07:00
906bc87c96
feat(products): export hosted detail URL for fetched images; snapshot carries status (SD-0002 §6.5.5, INV-16)
ben.stull
2026-06-12 00:15:47 -07:00
da5177c950
feat(products): hosted-image URL build/parse helpers (SD-0002 §6.3.1)
ben.stull
2026-06-12 00:13:27 -07:00
0fc29a34dd
feat(platform): objectstore port — local + GCS adapters, config (SD-0002 §6.2)
ben.stull
2026-06-12 00:12:24 -07:00
f27a24353d
feat(platform): images port — decode, resolution bar (Q-3), WebP renditions (SD-0002 §6.2)
ben.stull
2026-06-12 00:09:58 -07:00
385df8d728
Merge pull request 'SLICE-6: export & the round-trip lock — canonical serializer + streamed export (SD-0002 §7.2)' (#29 ) from worktree-slice-6-export-roundtrip into main
v0.6.0
release/2026-06-11T22-23
ben.stull
2026-06-12 05:23:23 +00:00
af72299a57
fix(products): serialize Variant Position explicitly — INV-12 round-trip bug
worktree-slice-6-export-roundtrip
ben.stull
2026-06-11 22:22:11 -07:00
6f22c8b146
chore: version 0.6.0 — SLICE-6 export & round-trip
ben.stull
2026-06-11 22:14:30 -07:00
767011fbae
docs(products): DOC-1 export ops + TEL-3, DOC-4 serializer/round-trip (SLICE-6)
ben.stull
2026-06-11 22:14:30 -07:00
8077f2e07b
test(e2e): e2e_export_download + e2e_roundtrip_noop (SD-0002 §6.8, PUC-9/10)
ben.stull
2026-06-11 22:12:53 -07:00
0a85c4fef8
feat(frontend): Export status-filter menu on the Products page (SD-0002 §5.2, PUC-9)
ben.stull
2026-06-11 22:08:34 -07:00
6f213e1f02
feat(frontend): export URL helper + status-filter list (PUC-9)
ben.stull
2026-06-11 22:07:36 -07:00
155f9bd147
feat(api): GET /api/products/export — streamed canonical CSV, 409 empty_catalog (§6.4, PUC-9)
ben.stull
2026-06-11 22:05:55 -07:00
1c2a6af986
feat(products): streamed export service + TEL-3 + EmptyCatalog (PUC-9, §9.1)
ben.stull
2026-06-11 22:03:09 -07:00
5a97b9dc59
feat(products): status-filtered export_catalog snapshot query (PUC-9)
ben.stull
2026-06-11 22:01:11 -07:00
fce0b5eaed
test(products): decimal/int variant fields round-trip clean (INV-12 coverage)
ben.stull
2026-06-11 21:59:06 -07:00
b40e4d30b5
test(products): INV-12 property test — export round-trips to a no-op (SD-0002 §6.8)
ben.stull
2026-06-11 21:58:47 -07:00
7652e92cbe
feat(products): serialize multi-variant + interleaved images (§6.5.1 row grammar)
ben.stull
2026-06-11 21:58:22 -07:00
627e257d4c
feat(products): canonical serializer skeleton — header + single product row (SD-0002 §6.5.5)
ben.stull
2026-06-11 21:57:48 -07:00
011f4d5dc1
Merge pull request 'SLICE-5: products import spine — canonical CSV → preview → confirm (SD-0002 §7.2)' (#26 ) from worktree-slice-5-import-spine into main
v0.5.0
release/2026-06-11T20-50
ben.stull
2026-06-12 03:50:20 +00:00
2606fbf826
docs(products): operator guide (DOC-1) + domain notes (DOC-4); version 0.5.0
worktree-slice-5-import-spine
ben.stull
2026-06-11 17:00:13 -07:00
ad738adbc0
test(e2e): SLICE-5 scenarios — preview/confirm, errors, rejection, cancel (§6.8)
ben.stull
2026-06-11 16:53:59 -07:00
a58f42cf86
test(e2e): stand up Playwright — fresh-DB server harness + sign-up helper
ben.stull
2026-06-11 16:50:59 -07:00
d18a84e135
fix(products-ui): review pass — show-more race, keyboard history access, a11y glyphs/aria-live, label consistency
ben.stull
2026-06-11 16:46:43 -07:00
87a56a66c4
feat(products-ui): import run detail (§5.5, PUC-4/5/8)
ben.stull
2026-06-11 16:35:49 -07:00
4141285b89
feat(products-ui): import preview — tiles, drill-in diffs, confirm/cancel (§5.4)
ben.stull
2026-06-11 16:34:33 -07:00
188494272a
feat(products-ui): import upload screen (§5.3, PUC-2/5a)
ben.stull
2026-06-11 16:30:51 -07:00
26f84cb916
feat(products-ui): admin nav + Products page with import history (§5.2)
ben.stull
2026-06-11 16:29:20 -07:00
b5dac8886f
feat(products-ui): typed products API client + admin hash routing
ben.stull
2026-06-11 16:25:37 -07:00
4dacc2dafd
feat(products): /api/products/* BFF endpoints + sample.csv (DOC-3)
ben.stull
2026-06-11 16:18:34 -07:00
a8538d3ecc
fix(products): cleared Variant Position resolves to file order, not NULL
ben.stull
2026-06-11 16:14:14 -07:00
0c7865e9e1
feat(products): confirm/apply in one transaction, runs, summary — INV-10/11/14 + TEL-2/6
ben.stull
2026-06-11 16:02:27 -07:00
fcbf1393f5
feat(products): import_validate → draft, preview records, discard + TEL-1
ben.stull
2026-06-11 15:51:03 -07:00
138126ab17
feat(products): repo — catalog snapshot, draft/run SQL, upsert primitives
ben.stull
2026-06-11 15:42:42 -07:00
667a462e0b
fix(products): honest position compare for matched variants in diff
ben.stull
2026-06-11 15:37:59 -07:00
9bc6e4dbd2
feat(products): diff engine — add/update/unchanged/error + INV-11 fingerprint
ben.stull
2026-06-11 15:28:03 -07:00
19ee695c20
feat(products): row validation — §6.5.1 rules + INV-15 sanitization
ben.stull
2026-06-11 15:17:01 -07:00
f64c3fddf9
feat(products): CSV codec — file-level parse + INV-18 caps (PUC-5a)
ben.stull
2026-06-11 14:58:53 -07:00
c39bbd4728
feat(products): domain skeleton — errors, column registry, canonical row model
ben.stull
2026-06-11 14:55:37 -07:00
0ee948b34d
feat(products): SD-0002 §6.3 schema — migration 0002 + nh3/multipart deps (SLICE-5)
ben.stull
2026-06-11 14:52:18 -07:00
1267d4f29d
docs: SLICE-5 implementation plan (SD-0002 §7.2 import spine)
ben.stull
2026-06-11 14:48:47 -07:00
6b405a0f2d
Merge pull request 'fix(signin): key the resend cooldown to the address it was set for (#20 )' (#22 ) from fix-20-signin-cooldown-keying into main
ben.stull
2026-06-11 08:22:08 +00:00
118e925580
fix(signin): key the resend cooldown to the address it was set for (#20 )
fix-20-signin-cooldown-keying
ben.stull
2026-06-11 01:21:23 -07:00
11acb3a5b1
Merge pull request 'docs: land session 0023 plan doc (stray untracked file)' (#18 ) from docs-archive-0023-plan into main
ben.stull
2026-06-11 07:56:34 +00:00
efc9c8edb9
docs: land session 0023's ui-designs-collection plan in-repo (was untracked; content archive already had it)
ben.stull
2026-06-11 00:56:31 -07:00
f7b76d5370
Merge pull request 'SLICE-4: record the first PPE bootstrap rehearsal (PUC-11) — green' (#17 ) from slice-4-rehearsal-record into main
ben.stull
2026-06-11 07:54:50 +00:00
4bb9763633
docs(slice-4): record the first PPE bootstrap rehearsal (PUC-11, 2026-06-11) — green
ben.stull
2026-06-11 00:54:47 -07:00
a456d51f17
Merge pull request 'SLICE-4: deployment.toml — the ecomm PPE record' (#11 ) from slice-4-deployment-record into main
ben.stull
2026-06-11 06:45:08 +00:00
ac3c4ffe36
feat(slice-4): deployment.toml — the ecomm PPE record (launch-app §5.1; Cloud SQL via secret ref)
ben.stull
2026-06-10 23:45:05 -07:00
8a2ec24d86
Merge pull request 'SLICE-4 (part 1): deploy contract — versioned health, backend-served SPA, SmtpMailer + honest 502 (SD-0001 §7.2)' (#10 ) from slice-4-deploy-contract into main
v0.4.0
ben.stull
2026-06-11 06:36:26 +00:00
acff7ac588
docs(slice-4): BOOTSTRAP.md PPE runbook, version 0.4.0, README status
ben.stull
2026-06-10 23:36:24 -07:00
22d738fc74
feat(slice-4): honest delivery failure — send-before-commit + 502 delivery_failed (INV-9; closes #7 )
ben.stull
2026-06-10 23:35:01 -07:00
1b8c60fcb5
feat(slice-4): SmtpMailer — real mail over a configured relay, log-hygienic (INV-8, §6.6)
ben.stull
2026-06-10 23:33:40 -07:00
9f4295b77e
feat(slice-4): backend serves the built SPA — the deployed nginx-proxies-all topology (launch-app §2)
ben.stull
2026-06-10 23:32:22 -07:00
a1c5544694
feat(slice-4): VERSION file + versioned /healthz — the flotilla verify contract (§8.1)
ben.stull
2026-06-10 23:31:20 -07:00
0747181157
Merge pull request 'SLICE-3: storefront — create + INV-4 guard, Create/Admin screens, full entry routing (SD-0001 §7.2)' (#9 ) from slice-3-storefront into main
ben.stull
2026-06-11 05:47:02 +00:00
877be249c7
chore(slice-3): version 0.3, README status, label-input association fix (a11y §6.6)
ben.stull
2026-06-10 22:46:12 -07:00
25ac540171
feat(slice-3): Admin shell + complete entry routing (§5.4/§6.5, PUC-6/8/9)
ben.stull
2026-06-10 22:41:38 -07:00
10d22938f1
feat(slice-3): Create-storefront screen + API helper (§5.3, PUC-4/5/7)
ben.stull
2026-06-10 22:41:04 -07:00
ddc949615e
feat(slice-3): Sign-in re-skinned — code cells, cooldown countdown, honest §5.2 states
ben.stull
2026-06-10 22:40:33 -07:00
0b302ea1e1
feat(slice-3): Landing re-skinned to the Claude Design export (§5.1)
ben.stull
2026-06-10 22:39:57 -07:00
ef1498ba08
feat(slice-3): design-system foundation — Wiggleverse tokens, fonts, brand marks, UI kit (per ui/designs export)
ben.stull
2026-06-10 22:39:30 -07:00
cc9d9dda5f
test(slice-3): INV-1 whole-flow bootstrap test — empty DB to admin answer (§6.8)
ben.stull
2026-06-10 22:37:10 -07:00
306b5c1e5d
feat(slice-3): POST /api/storefronts + storefronts-fed entry routing (§6.4/§6.5)
ben.stull
2026-06-10 22:36:50 -07:00
e11fb032b1
test(slice-3): INV-4 invariants — concurrent-create refusal + many-capable membership schema
ben.stull
2026-06-10 22:34:24 -07:00
ba8b493a31
feat(slice-3): storefronts domain — create + membership + INV-4 guard (§6.5)
ben.stull
2026-06-10 22:33:57 -07:00
1b40bde4a0
Merge pull request 'SLICE-2: identity — email + one-time-code sign-up, sessions, Landing/Sign-in (SD-0001 §7.2)' (#6 ) from slice-2-identity into main
ben.stull
2026-06-10 17:51:18 +00:00
725877c5c6
docs(slice-2): implementation plan for the identity slice
slice-2-identity
ben.stull
2026-06-10 10:43:09 -07:00
bf62f413d7
docs(slice-2): README status — identity slice in place
ben.stull
2026-06-10 10:42:49 -07:00
cfc28d7002
fix(slice-2): surface ecomm.* INFO logs so the one-time code reaches the dev log
ben.stull
2026-06-10 10:42:30 -07:00
b3ffb2d4b6
feat(slice-2): Landing + Sign-in screens, entry routing, API client (§5.1/5.2/6.5)
ben.stull
2026-06-10 10:38:38 -07:00
cfd2b4ecc7
feat(slice-2): BFF /api/auth/* — request-code, verify, me, logout (§6.4)
ben.stull
2026-06-10 10:35:01 -07:00
d2eceac272
feat(slice-2): deps — mailer + session dependencies; build mailer at startup
ben.stull
2026-06-10 10:34:13 -07:00
95680c9960
feat(slice-2): accounts domain — request_code/verify/get_account (INV-2/INV-3/INV-6)
ben.stull
2026-06-10 10:31:32 -07:00
2d15f1a2cb
feat(slice-2): platform/session — stdlib HMAC signed cookie tokens (§6.2)
ben.stull
2026-06-10 10:27:35 -07:00
446c13211a
feat(slice-2): platform/mailer port + LogMailer (dev channel, §6.2/PUC-10)
ben.stull
2026-06-10 10:26:58 -07:00