Commit Graph

  • b8e521f4e7 test: frontend store coverage — auth, savedCards, businessInfo reactive stores main popertotsandSisyphus 2026-08-20 16:43:03 +01:00
  • 5051368d9b test: GDPR erasure — fix RetainsEditRequestNotes for anonymised requested_by, PreservesFinancialRows for HMRC audit fields, adversarial test cleanup popertotsandSisyphus 2026-08-20 16:42:29 +01:00
  • 509b2d926d test: payment coverage — gift card daily caps, buildSplitRecords, ValidateAmount edge cases, SquareRefundStatusToLocal popertotsandSisyphus 2026-08-20 16:41:43 +01:00
  • 4d179385e8 test: security regression — IDOR payment-check scoping, CORS preflight 403, rate limiter pruning, services error leakage popertotsandSisyphus 2026-08-20 16:41:00 +01:00
  • a358c8c0ea docs: README test count, Technical Manual default hours table, local-dev-2.sh config popertotsandSisyphus 2026-08-20 16:39:53 +01:00
  • ee49532774 fix: frontend 12h time display — add hour12: true to schedule, GDPR export, reschedule modal, booking create popertotsandSisyphus 2026-08-20 16:38:14 +01:00
  • 8accc2ba6f fix: dev mock parity — GetCheckout/GetPayment return structured NOT_FOUND errors matching prod popertotsandSisyphus 2026-08-20 16:37:39 +01:00
  • c38dee1f62 fix: GDPR erasure — anonymize_user scrubs 17 additional tables, delete_guest_user scrubs disputes.reason, consent default FALSE popertotsandSisyphus 2026-08-20 16:37:06 +01:00
  • d90e25d1ff fix: auth/2FA — password change requires 2FA gate, admin self-deletion blocked, twofa JSON responses, per-IP email-verify budget, OptionalAuth log sanitised popertotsandSisyphus 2026-08-20 16:36:31 +01:00
  • d03ce79c19 fix: rate limiter memory pruning in Check(), services error leakage replaced with generic messages popertotsandSisyphus 2026-08-20 16:35:42 +01:00
  • 37f6723d9e fix: security — CORS preflight origin gating, IDOR payment-existence check scoped to user, per-IP anonymous reservation cap popertotsandSisyphus 2026-08-20 16:35:04 +01:00
  • 348a2e5bfc fix: payment validation — tip cap ValidateAmount, RefundRequest gt=0 tag, float64 pence conversion docs popertotsandSisyphus 2026-08-20 16:34:19 +01:00
  • e5c151f994 fix: gift card safety — fail-closed expiry check on refund, source-card expiry gate on transfer, oldest-first rate limiter eviction popertotsandSisyphus 2026-08-20 16:33:37 +01:00
  • 35572e1d70 fix: persist service price overrides before payment popertots 2026-08-20 14:31:49 +01:00
  • c62ed029b3 style: change partial charge link color from blue to gray popertots 2026-08-20 14:27:55 +01:00
  • bb51c1512f feat: add amount input fields for card and saved card payments popertots 2026-08-20 14:20:39 +01:00
  • 80c5c6ce43 Fix email field height to match other profile fields popertots 2026-08-20 14:03:38 +01:00
  • efea213ccd fix: change cancellation policy icon to calendar popertots 2026-08-20 13:59:33 +01:00
  • e46de8e9e5 fix: email field height, remove GDPR from policies/footer popertots 2026-08-20 13:55:12 +01:00
  • 73f0258b97 fix: mobile UI — touch targets, safe areas, text sizes popertots 2026-08-20 13:12:52 +01:00
  • 4146f8e09a fix: pre-launch review — security, money safety, privacy, legal, code quality popertots 2026-08-20 13:09:42 +01:00
  • 9a12a2d886 fix: round-3 — tip gate asymmetry, webhook VAT align + 503 notifications, cash-tip campaign overcharge, lockout DoS, erasure durability, S3 retry cap, env parsing, per-user rate limiters, consume dead code, frontend 2FA remnants popertotsandSisyphus 2026-08-17 01:11:40 +01:00
  • fba00a10ad ci: pin go install tool versions (gitleaks/golangci-lint/staticcheck/gosec/govulncheck), env-docs check covers getEnv reads, ignore .sisyphus session artifacts popertotsandSisyphus 2026-08-16 18:26:01 +01:00
  • 93be93f86c docs: README + obsidian parity — test counts 2,656, frontend 160, 27 maintenance jobs, 2FA log-relay opt-in contradiction fixed, Future-Work P4 count, stale line refs de-referenced popertotsandSisyphus 2026-08-16 18:25:35 +01:00
  • e3fa8a22b7 chore: remove obsidian editor junk, tracked node_modules, dangling root package-lock popertotsandSisyphus 2026-08-16 18:25:09 +01:00
  • 049c361e16 fix: adminnotify observability — money-critical rows sort first, flood-cap suppression surfaced to operator, stale coordination doc fixed popertotsandSisyphus 2026-08-16 18:22:55 +01:00
  • e9b34d0ad6 fix: dev-mock/prod parity + fail-closed config gates — 402 verification, cnon:sca binding validation, refund reconcile parity, SNAPSHOT_ENC_KEY fail-closed, webhook config gates, access-token startup validation, ClientIP validation popertotsandSisyphus 2026-08-16 18:22:29 +01:00
  • 62dca184df fix: account security + GDPR erasure — current-password lockout budgets (atomic 15/30/60 escalation, uniform 401), DAV + S3 deletion durable in-tx, batch erasure outbox popertotsandSisyphus 2026-08-16 18:22:03 +01:00
  • 1d6d3e2f8d test: round-9/10 adversarial suites — sync-path vs webhook completion, gift-card double-refund, sweep VAT, till lock, account lockout + erasure popertotsandSisyphus 2026-08-16 18:21:34 +01:00
  • 985b114c8b test: payments round-2 — webhook gate/M2 refund, gift-card cancel re-issue, till lock contention, sweep VAT rescue coverage popertotsandSisyphus 2026-08-16 18:21:01 +01:00
  • 77317e4a45 fix: payments money-safety round-2 — webhook booking gate + M2 stranded-charge refund, sync-path status guards, gift-card cancel re-issue reconcile, till-sweep clawback lock, sweep VAT rescue, refund credit routing popertotsandSisyphus 2026-08-16 18:20:29 +01:00
  • 01b20b4420 cleanup popertots 2026-08-16 12:30:28 +01:00
  • 95d2ee3ccf docs: consolidated payments review session report (findings -> fixes, full verification matrix) popertots 2026-08-16 12:27:52 +01:00
  • 6bd952238e docs: README + obsidian parity — 2FA/verification-code delivery is dev/test-only stdout log, production fails closed until email/SMS (P6); fixed posture, counts, tiers popertots 2026-08-16 12:27:21 +01:00
  • 01e7cc575d fix: frontend payment surfaces — SCA wire shapes (explicit token precedence), mock token parity, infinite-loop guard, money display, delete-account re-auth, admin progress UI, mobile touch targets popertots 2026-08-16 12:26:54 +01:00
  • f9e8385d5a fix: auth/2FA security — stdout-log code delivery is dev/test-only, production fails closed until email/SMS; verification-code hashing, lockout recovery, sabredav fail-closed popertots 2026-08-16 12:26:28 +01:00
  • 1429eddd34 fix: payments hardening — SCA wire contract (saved-card ref + tokenize-result), terminal/till token routing, tip-cap overflow carve, completion campaign atomicity, orphan B1-evidence gate, gift-card gates/locks, admin backstops popertots 2026-08-16 12:20:37 +01:00
  • 1d9c87d6d6 docs: README + obsidian parity with SCA-only posture, flood caps, lockout tiers; dev-script secret bootstrap, stale-backend kill, patch-test backdate popertots 2026-08-16 00:21:55 +01:00
  • af685df40c test: rate-limit proxy-header trust (TRUST_PROXY_HEADERS) coverage popertots 2026-08-16 00:21:28 +01:00
  • d0d72d8caf fix: refresh-token reuse grace 60s -> 20s (cross-tab coordinated rotation) popertots 2026-08-16 00:21:09 +01:00
  • 8d9f72b9f0 feat: CardDAV profile sync writes through dav.Service (photo included, DAV_BASE_URL retired) popertots 2026-08-16 00:20:50 +01:00
  • 8dcfe52ac8 fix: till saved-card SCA/consent + ownership invariant (F1/F5), money-F4 top-up expiry gate, 2FA-enforced 402 tests popertots 2026-08-16 00:20:20 +01:00
  • 8ba76aa958 docs: legal pages — SCA/3-D Secure disclosure, gift-card terms route, footer links, GDPR verification-code scrub popertots 2026-08-16 00:19:30 +01:00
  • 0fdb2f02cd feat: frontend SCA-only posture — tokenize-result as charge source (C1), C6 refusal dialog, no 2FA fallback popertots 2026-08-16 00:19:02 +01:00
  • 9a75ebc794 fix: booking hardening — notification flood caps (C5) + pending-release eviction refunds (C4) popertots 2026-08-16 00:18:30 +01:00
  • 69a854d857 fix: admin notification flood caps (C5) at every remaining insert site; gift-card expiry-sweep TOCTOU (M4) popertots 2026-08-16 00:18:03 +01:00
  • 16304bd295 fix: refund sweep — manual-refund audit rows (admin_refund) + refund_failed flood cap popertots 2026-08-16 00:17:35 +01:00
  • 42130865f4 fix: gift-card money fixes — partial clawback surfaces CRITICAL (M6), per-admin daily-cap lock (M7), DB-clock expiry popertots 2026-08-16 00:17:08 +01:00
  • 2a47021673 fix: stale-pending sweep hardening — auto-refund stranded charges (M2), VAT re-apply (M5), single clock source (M3) popertots 2026-08-16 00:16:41 +01:00
  • d25ba16aa7 feat: Square SCA tokenize-result wire contract — token as source_id, byte-identical dev mock popertots 2026-08-16 00:16:13 +01:00
  • 2cdbad0cea feat: SCA-only saved-card charges — 2FA charge fallback removed (C6), versioned consent fields, token provenance popertots 2026-08-16 00:15:45 +01:00
  • 1179293777 fix: 2FA single-use consume is DB-atomic; login lockout escalates 15/30/60m with uniform 401 popertots 2026-08-16 00:15:10 +01:00
  • 3130b39c77 docs: round-2 loop-B changes — B1 webhook parent-resolve, APPROVED refund semantics, 2FA cooldown/StateFor, adminnotify flood cap, admin audit coverage, deposit POLICY consts popertots 2026-08-15 12:56:41 +01:00
  • 4e398a7a2b fix: round-2 loop-B adversarial (503c326 baseline) — B1 webhook race, APPROVED refund semantics, notification cap single-source, 2FA cooldown/StateFor hardening, register bcrypt semaphore popertots 2026-08-15 12:43:25 +01:00
  • 3866cc5963 fix: round-2 loop-A fresh review (503c326 baseline) — B1 replay cap, A6 discount record, 2FA reissue+cooldown, notification flood, lockout saturation, VAT/refund-status consolidation popertots 2026-08-15 11:36:02 +01:00
  • 4e64e32f09 fix: dav prod-tag test panic (DB init in package init), README SPV-only VAT claim popertots 2026-08-15 10:32:07 +01:00
  • dfe856b181 fix: loop-B adversarial (503c326 baseline) — IDEMPOTENCY_KEY_REUSED reclassified ambiguous, 2FA reissue fail-closed alerts, family-cache crash window, consolidation regression checks popertots 2026-08-15 06:08:15 +01:00
  • 36887167c6 fix: loop-A fresh review (503c326 baseline) — overflow-guard bypass, discounted-deposit retry, GDPR audit scrub, till cap, sweep rescue, 2FA reissue + SCA retry, consolidation round popertots 2026-08-15 04:59:09 +01:00
  • b7122be3a0 fix: SCA review round + gitea pipeline green — GDPR audit scrub, backend test gaps, frontend SCA/Square-API, docs parity popertots 2026-08-15 03:21:08 +01:00
  • c4c65d9dd8 feat: proactive saved-card SCA — challenge runs BEFORE the first charge, never a naked ccof attempt popertots 2026-08-15 00:37:33 +01:00
  • 5dae0bba08 feat: Square 3DS2 SCA primary authorisation for saved-card charges; 2FA demoted to audited backup popertots 2026-08-15 00:15:32 +01:00
  • ecef5da516 fix: sweep duplicate detection keys off the sweep's own replay instant, not a flip-flopping row-age window popertots 2026-08-14 21:54:51 +01:00
  • 1543160f6a fix: loop-B full-scope adversarial findings — tip-excluded detail endpoints, £0-charge guard, 24h window, 2FA single-use everywhere popertots 2026-08-14 21:13:48 +01:00
  • 9a182db932 fix: full-scope review — tip-inclusive amount_due, sweep deposit-strand, A6 clamp cap, B13 clawback, 2FA single-use, mint audit, account-deletion re-auth, refresh dedup popertots 2026-08-14 18:51:26 +01:00
  • b46927336b fix: dup/mod secondary round — till 2FA gate parity, mint-cooldown single source, notification parity, pence comments popertots 2026-08-14 16:17:19 +01:00
  • 7c424b28b8 fix: loop-B adversarial findings — tip-type double-charge, tip-refund capacity, loyalty stamp farming, gate ordering, auth amplification, admin audit log popertots 2026-08-14 16:02:20 +01:00
  • 03d85c6d13 fix: admin-scoped 2FA mint targets the CUSTOMER — user authentication for saved cards, never the admin popertots 2026-08-14 15:27:19 +01:00
  • 6d00c3004f fix: convert admin PaymentModal to shared useTwoFactorCodeForSavedCard composable (verification round FAIL) popertots 2026-08-14 15:04:42 +01:00
  • a6a4683b74 fix: review round — B1 clock-skew tolerance + re-poll escalation, refresh-token access-token revocation, shared 2FA composable, per-package-DB test alignment popertots 2026-08-14 14:47:32 +01:00
  • a8bf24ee23 fix: dup/modularisation findings — account gift-card 2FA gate, single-source 2FA predicate, login store delegation popertots 2026-08-14 13:55:10 +01:00
  • 4d5d2cd381 fix: restart-loop-A findings — pending sweep refunds, tip carve on discounts, TOCTOU redemption, single-use 2FA code + mint endpoint, refresh-token family revocation, admin 2FA code UX popertots 2026-08-14 13:50:04 +01:00
  • fe88f2084d fix: review-loop B — adversarial findings (sweep auto-refund, admin clamp, 2FA real challenge, opaque refresh tokens, gated client IP, GBP pence) popertots 2026-08-14 12:58:14 +01:00
  • faceb9809c fix: review-loop A — discount credit on admin payments, campaign over-credit cap, sweep replay window, dedup refund revalidation, duplication/modularisation, GBP pence naming popertots 2026-08-14 11:18:21 +01:00
  • 6d82535780 fix: adversarial review round — replay-rescue double-charge, discount credit, 2FA/per-IP limits, snapshot encryption, refund reconciliation, VAT, frontend parity, tests+docs popertots 2026-08-14 09:25:29 +01:00
  • 78e6d00dc5 fix: payments review rounds — money-safety, GDPR, security, gift-card cancel, modal stacking popertots 2026-08-13 14:02:28 +01:00
  • 9111258461 fix: 2FA disable now requires the verification code (enforced mode) popertots 2026-08-13 01:07:21 +01:00
  • 6691cd5657 fix: rate-limit per-IP keying + dev no-op, admin 2FA recovery, 2FA account UI, admin modals, tip totals popertots 2026-08-13 00:43:58 +01:00
  • 3894f53778 fix: local-dev-2.sh reset order — stop container before port check popertots 2026-08-12 23:55:00 +01:00
  • 5cc5a7f6d2 fix: review round 7 — fresh-eyes audit fixes (6 agents) + full test suites for every backend change popertots 2026-08-12 23:49:19 +01:00
  • 67cf5b9a45 fix: review round 6 — P0 deposit charge, idempotency rotation, dev-safety guard, 2FA/webhook hardening popertots 2026-08-12 22:34:47 +01:00
  • 39cc42b239 docs: round 5 — accurate test counts, correct 2FA disable semantics, document residual lockout risk popertots 2026-08-12 18:14:36 +01:00
  • fdf3f64a13 fix: review round 4 — per-dispute chargeback alerts, single-source clawback, 2FA lockout coherence, docs popertots 2026-08-12 17:49:44 +01:00
  • 9bb812669e fix: fresh-review round — 2FA deliverability, disable re-verification, GDPR batch scrub, dispute alerting, docs accuracy popertots 2026-08-12 17:12:32 +01:00
  • e9b0f0f2a7 fix: review-loop hardening — identical-body replay, 2FA gates, webhook at-least-once, GDPR scrub popertots 2026-08-12 15:59:26 +01:00
  • 4b28e93710 fix: tip double-count, fully-paid auto-completion, discount-refund hardening popertots 2026-08-12 10:31:59 +01:00
  • 5e3dc9b428 fix: comprehensive payment system hardening (4 review passes) popertots 2026-08-05 11:37:39 +01:00
  • 7df983052b README: replace migration section with pre-launch recreate-the-schema policy popertots 2026-08-04 22:47:38 +01:00
  • ea771ffaf5 Till: saved-card payment surface with customer picker and valid-card gating popertots 2026-08-04 22:47:07 +01:00
  • c7d7169cd2 Disable svelte/prefer-svelte-reactivity (SvelteDate purge rationale) popertots 2026-08-04 22:47:00 +01:00
  • 05bb142cfd Frontend: verified-only save-card gating + shared nonce-staleness helper popertots 2026-08-04 22:46:54 +01:00
  • d9c2c5ac2c Schema: purge ALTERs per pre-launch recreate policy; nullable account_id for unredeemed gift-card expiries popertots 2026-08-04 22:44:40 +01:00
  • 3f6250ea81 Remove dead acquireAdvisoryXactLock try variant popertots 2026-08-04 22:44:07 +01:00
  • 2b4c50b4b0 Block guest-role tokens from online payment routes (RequireNonGuest middleware) popertots 2026-08-04 22:43:37 +01:00
  • 858ae87e9c Block card saving for unverified accounts at the charge-handler level popertots 2026-08-04 22:43:05 +01:00
  • bb843fe7dd Till-sale: resolve pending top-ups by gift card to reuse stored idempotency key popertots 2026-08-04 22:42:34 +01:00
  • 39d914417f Sweep lost-response charges by idempotency-key replay (22h cutoff, rescue/fail/WARN) popertots 2026-08-04 22:42:04 +01:00
  • 01ac211408 Square client and dev mock: replay-by-key reconcile, refund classification, mock parity popertots 2026-08-04 22:41:31 +01:00
  • 197d4c4b9b Gift-card rolling expiry, SvelteDate→Date purge, strict DST tests, UTC scan-location + settings legal floor popertots 2026-08-04 10:37:07 +01:00
  • 7f1c649f1e Apply second-round review fixes: idempotency-key length caps, stable-sentinel card keys, test-isolation, naming popertots 2026-08-04 00:54:57 +01:00
  • 63226debb7 Revive soft-deleted saved cards in SaveCardForUser upsert (DO NOTHING → DO UPDATE) popertots 2026-08-04 00:13:21 +01:00