This website requires JavaScript.
b8e521f4e7
test: frontend store coverage — auth, savedCards, businessInfo reactive stores
main
popertots and Sisyphus
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
popertots and Sisyphus
2026-08-20 16:42:29 +01:00
509b2d926d
test: payment coverage — gift card daily caps, buildSplitRecords, ValidateAmount edge cases, SquareRefundStatusToLocal
popertots and Sisyphus
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
popertots and Sisyphus
2026-08-20 16:41:00 +01:00
a358c8c0ea
docs: README test count, Technical Manual default hours table, local-dev-2.sh config
popertots and Sisyphus
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
popertots and Sisyphus
2026-08-20 16:38:14 +01:00
8accc2ba6f
fix: dev mock parity — GetCheckout/GetPayment return structured NOT_FOUND errors matching prod
popertots and Sisyphus
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
popertots and Sisyphus
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
popertots and Sisyphus
2026-08-20 16:36:31 +01:00
d03ce79c19
fix: rate limiter memory pruning in Check(), services error leakage replaced with generic messages
popertots and Sisyphus
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
popertots and Sisyphus
2026-08-20 16:35:04 +01:00
348a2e5bfc
fix: payment validation — tip cap ValidateAmount, RefundRequest gt=0 tag, float64 pence conversion docs
popertots and Sisyphus
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
popertots and Sisyphus
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
popertots and Sisyphus
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
popertots and Sisyphus
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
popertots and Sisyphus
2026-08-16 18:25:35 +01:00
e3fa8a22b7
chore: remove obsidian editor junk, tracked node_modules, dangling root package-lock
popertots and Sisyphus
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
popertots and Sisyphus
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
popertots and Sisyphus
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
popertots and Sisyphus
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
popertots and Sisyphus
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
popertots and Sisyphus
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
popertots and Sisyphus
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