ben.stull
ddc949615e
feat(slice-3): Sign-in re-skinned — code cells, cooldown countdown, honest §5.2 states
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-10 22:40:33 -07:00
ben.stull
0b302ea1e1
feat(slice-3): Landing re-skinned to the Claude Design export (§5.1)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-10 22:39:57 -07:00
ben.stull
ef1498ba08
feat(slice-3): design-system foundation — Wiggleverse tokens, fonts, brand marks, UI kit (per ui/designs export)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-10 22:39:30 -07:00
ben.stull
cc9d9dda5f
test(slice-3): INV-1 whole-flow bootstrap test — empty DB to admin answer (§6.8)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-10 22:37:10 -07:00
ben.stull
306b5c1e5d
feat(slice-3): POST /api/storefronts + storefronts-fed entry routing (§6.4/§6.5)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-10 22:36:50 -07:00
ben.stull
e11fb032b1
test(slice-3): INV-4 invariants — concurrent-create refusal + many-capable membership schema
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-10 22:34:24 -07:00
ben.stull
ba8b493a31
feat(slice-3): storefronts domain — create + membership + INV-4 guard (§6.5)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-10 22:33:57 -07:00
ben.stull
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
ci / check (push) Has been cancelled
2026-06-10 17:51:18 +00:00
ben.stull
725877c5c6
docs(slice-2): implementation plan for the identity slice
...
ci / check (push) Has been cancelled
ci / check (pull_request) Has been cancelled
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-10 10:43:09 -07:00
ben.stull
bf62f413d7
docs(slice-2): README status — identity slice in place
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-10 10:42:49 -07:00
ben.stull
cfc28d7002
fix(slice-2): surface ecomm.* INFO logs so the one-time code reaches the dev log
...
uvicorn configures only its own loggers, so the LogMailer INFO line — PUC-10's local dev
channel (the code in the backend log) — was swallowed. Add an idempotent dedicated handler
for the 'ecomm' logger (propagate=False) in create_app so dev.sh/uvicorn runs show the code.
Caught by the SLICE-2 end-to-end walk; unit tests read the in-memory outbox and didn't.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-10 10:42:30 -07:00
ben.stull
b3ffb2d4b6
feat(slice-2): Landing + Sign-in screens, entry routing, API client (§5.1/5.2/6.5)
...
Two-step email + one-time-code sign-in behind both doors; pure entry-routing rule unit-
tested with Vitest (§6.8); storefront routing reaches a SLICE-2 signed-in placeholder with
sign-out (PUC-9). check.sh now runs the frontend unit tests.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-10 10:39:48 -07:00
ben.stull
cfd2b4ecc7
feat(slice-2): BFF /api/auth/* — request-code, verify, me, logout (§6.4)
...
Screen-shaped JSON endpoints; signed-cookie session on verify; §6.4 error envelope;
storefront hard-wired null behind the _storefront_for seam (SLICE-3 fills it). No
enumeration: uniform 204. PUC-9 logout clears the cookie.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-10 10:35:01 -07:00
ben.stull
d2eceac272
feat(slice-2): deps — mailer + session dependencies; build mailer at startup
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-10 10:34:13 -07:00
ben.stull
95680c9960
feat(slice-2): accounts domain — request_code/verify/get_account (INV-2/INV-3/INV-6)
...
Email-canonical get-or-create, peppered-hash one-time codes with 10-min TTL, single-use,
5-attempt cap, and 60s resend cooldown; uniform new-or-known (no enumeration, §6.6). All
identity rules in the domain layer once (INV-6); scenario + invariant tests green.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-10 10:31:32 -07:00
ben.stull
2d15f1a2cb
feat(slice-2): platform/session — stdlib HMAC signed cookie tokens (§6.2)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-10 10:27:35 -07:00
ben.stull
446c13211a
feat(slice-2): platform/mailer port + LogMailer (dev channel, §6.2/PUC-10)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-10 10:26:58 -07:00
ben.stull
7a6b396f65
feat(slice-2): config — session secret, cookie_secure, mailer_kind (INV-8)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-10 10:26:15 -07:00
ben.stull
9373177ed3
Merge pull request 'SLICE-1: walking skeleton (SD-0001 §7.2) — scaffold, dev Postgres, migration runner, /healthz' ( #5 ) from claude/agitated-heyrovsky-1a1f47 into main
ci / check (push) Has been cancelled
2026-06-10 15:50:42 +00:00
ben.stull
f184802f1f
docs(slice-1): README status — walking skeleton in place
...
ci / check (push) Has been cancelled
ci / check (pull_request) Has been cancelled
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-10 08:47:28 -07:00
ben.stull
4d1c957f42
fix(slice-1): dev.sh portable on bash 3.2 — drop wait -n, reap process subtree
...
macOS ships bash 3.2 (no wait -n): poll with kill -0 instead. npm spawns vite as a
grandchild, so cleanup now recurses pgrep -P to reap the whole subtree — Ctrl-C frees
both :8000 and :5173 cleanly. Verified clean-checkout -> dev.sh -> empty self-migrated
Postgres -> /healthz 200, and trap teardown.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-10 08:46:41 -07:00
ben.stull
cd951cca2c
docs(slice-1): BOOTSTRAP.md localhost bring-up runbook (BUC-5)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-10 08:42:00 -07:00
ben.stull
886da73eb6
ci(slice-1): Gitea workflow runs scripts/check.sh against a Postgres service
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-10 08:41:32 -07:00
ben.stull
6744a6ae0d
feat(slice-1): Vite/React shell + /api proxy; scripts/check.sh now fully green
...
Single tsconfig (no project-references split — avoids composite/noEmit friction for
the minimal shell); tsc typechecks src, vite loads its config via esbuild.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-10 08:41:10 -07:00
ben.stull
36046304da
feat(slice-1): scripts/dev.sh — owns dev Postgres lifecycle + backend + Vite
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-10 08:39:37 -07:00
ben.stull
d7b9f81e53
feat(slice-1): scripts/check.sh — the single gate (lint-imports, pytest, frontend build)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-10 08:39:14 -07:00
ben.stull
ef385340e8
feat(slice-1): FastAPI factory + /healthz; self-migrate at startup (INV-1/§6.4)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-10 08:38:42 -07:00
ben.stull
9462423642
feat(slice-1): platform/db migration runner + migration 0001 (INV-7, §6.3 schema)
...
Forward-only, fail-stop, advisory-lock-guarded psycopg runner; migration 0001 lays
the account/auth_code/storefront/membership schema. Tests prove migrate-from-empty
and idempotent re-migrate (INV-1 partial) and the INV-4 many-capable shape.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-10 08:37:09 -07:00
ben.stull
ab4317e105
feat(slice-1): dev Postgres compose — single pinned service, named volume (D-7)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-10 08:35:53 -07:00
ben.stull
346e7f2e22
feat(slice-1): platform/config — single env-driven config surface (INV-8)
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-10 08:35:16 -07:00
ben.stull
4acab40653
feat(slice-1): backend skeleton, deps, and import-linter layer contract
...
Four-layer package (main > domains > platform) per SD-0001 §6.2; GraphQL api layer
deferred. main.py is a stub so the top layer exists from the start (fleshed out in
the /healthz task). lint-imports green on the skeleton.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-10 08:34:38 -07:00
ben.stull
d125317c00
plan(slice-1): SD-0001 walking-skeleton implementation plan
...
Just-in-time plan for SLICE-1 (§7.2): backend 4-layer scaffold + import-linter,
dev Postgres compose, psycopg migration runner + migration 0001, /healthz,
scripts/check.sh + dev.sh, Vite/React shell, CI, docs/BOOTSTRAP.md.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-10 08:32:28 -07:00
ben.stull
0078b0c6da
chore(specs): SD-0001 lives only in wiggleverse-ecomm-content/specs/ ( #4 )
2026-06-10 14:53:13 +00:00
ben.stull
23afcf95ce
Merge pull request 'SD-0001: Solution Design — MVP sign up and create a single storefront (Feature #1 )' ( #2 ) from claude/optimistic-lumiere-ef8b1e into main
2026-06-10 14:12:57 +00:00
ben.stull
45f6ef8b58
spec(self-review): declare storefronts participant, fix §1.8 cross-ref, status → approved (v0.2.0)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-10 07:11:13 -07:00
ben.stull
a6d9bdf135
spec(§8–10): traceability matrix, open questions + decisions log, glossary & references
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-10 07:10:04 -07:00
ben.stull
3120349fc5
spec(§7): delivery plan — SLICE-1..4 (skeleton, identity, storefront, deployed envs), rollout, risks
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-10 07:09:18 -07:00
ben.stull
b2e1f11a85
spec(§6.6–6.9): NFRs, key decisions table, testing strategy, failure modes
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-10 07:08:24 -07:00
ben.stull
0881a4cdf0
spec(§6.5): per-PUC design — entry routing spine, auth + storefront sequences, bootstrap
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-10 07:07:21 -07:00
ben.stull
d8abd5c1d5
spec(§6.1–6.4): invariants INV-1..9, architecture, data model, API contracts
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-10 07:06:38 -07:00
ben.stull
e68692840f
spec(§5): UX layout — landing, sign-in (2-step), create-storefront, admin shell
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-10 07:05:25 -07:00
ben.stull
a32061ac54
spec(§3–4): product personas + product use cases PUC-1..11, grounded in corpus 14.01.* / 01.01.0008
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-10 07:04:47 -07:00
ben.stull
7147e740a1
spec(§2): solution proposal — carry forward prototype shape, invert seed/gate, defer GraphQL+OAuth
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-10 07:03:57 -07:00
ben.stull
a68f59ac85
spec(§1.6–1.9): outcomes, business scope, assumptions, business use cases BUC-1..5
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-10 07:03:13 -07:00
ben.stull
42dbc5048a
spec(§1.1–1.5): business context — summary, background, actors, problem, pains
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-10 07:02:16 -07:00
ben.stull
c7b288a81b
spec(skeleton): SD-0001 front matter + section skeleton from solution-design TEMPLATE
...
Anchors wiggleverse-ecomm#1; authored in session ecomm-0020.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-06-10 07:01:28 -07:00
ben.stull
994bde715e
Initialize wiggleverse-ecomm (clean ecomm rebuild)
...
Greenfield skeleton for the clean ecomm implementation, superseding the R01-R07
reference prototype (wiggleverse-ecomm-prototype). One Name "ecomm"; app.json
wires the code repo, the wiggleverse-ecomm-content collection repo, and the
session-history/ecomm transcript home. No application code yet — architecture is
to be designed in a brainstorming/planning session.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-10 00:37:38 -07:00