Commit Graph
50 Commits
Author SHA1 Message Date
popertots 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
Round-A fresh review (6 agents) + fix + secondary cross-cutting + verification rounds:
- F1: campaign discounts reduce the charged amount (deposit credit + admin PaymentModal discounted total); capDiscountToRemainingObligation prevents over-credit at completion in all four campaign blocks
- F2: sweep replay rescue distinguishes legitimate same-key retries (21h window) from expired-key new charges; ccof blind-fails leave pending + CRITICAL instead of clawing back
- F3: post-start online overflow carved as a tip record (mirrors terminal split builder)
- A1: single-source Square decline-code classification (till delegates to square.IsDefinitivePaymentError)
- A2/A5: refund attempt-cap literals consolidated; refund-failure counter capped + reset on terminal resolutions + admin notifications
- A3/A9: idempotency helpers adopted across derivations; IsExplicitDevOrMockEnv relocated + all gates unified (incl. health-check)
- A7: 2FA user+IP limiter + TRUST_PROXY_HEADERS startup warning; SNAPSHOT_ENC_KEY startup validation; TWO_FACTOR_PEPPER docs corrected
- A8: snapshot encryption on all 6 write sites + marker-aware reuse paths; MPV->SPV effective voucher type (single VAT point)
- A10/A11/A12/A16: gift-card slot scan advances past failed; amount-aware refund reconciliation; completed-booking refund re-check; PaymentWasRefunded on SquareClient interface
- Dedup refund revalidation on tip/terminal/gift-card paths; sweep acknowledged_at IS NULL parity; refund-notification single source (exported payments.InsertRefundFailedNotifications)
- Duplication/modularisation round: shared frontend helpers (sanitizeDecimalInput, campaignDiscountCents, twoFactorBlocksSavedCards getter, generateUUID), single-source MaxIdempotencyKeyLength, notification-helper consolidation, snapshot-guard comments
- Cross-cutting GBP rename: Cents->Pence across backend + frontend + tests (26 identifiers, 16 files)
- Tests: 11 behavior-change tests updated to new invariants; coverage for fixed functions; frontend vitest 55 tests; docs corrected (test counts, 2FA delivery, pre-launch checklist, resolution status)
- gitleaks: allowlist backend/internal/square test fixtures (mock idempotency keys)

All 25 backend packages pass; frontend 55/55 + build clean; env-docs 41/41.
2026-08-22 00:34:50 +01:00
popertots 6d82535780 fix: adversarial review round — replay-rescue double-charge, discount credit, 2FA/per-IP limits, snapshot encryption, refund reconciliation, VAT, frontend parity, tests+docs
Addresses the adversarial fresh-eyes audit (findings A1-A20) plus review-round fixes:
- CRITICAL A1: replay-by-key rescue cross-checks replayed CreatedAt; ccof blind-fail leaves pending with CRITICAL + notification instead of clawing back
- A2/A3/A4: till idempotency key restored to unconditional hash; tip rejected in CreateBookingPayment; campaign discount now reduces the charged amount (deposit credit)
- A5: admin notifications on blind-fail, manual-refund re-arm, cap-stranded charge-group, webhook FAILED/REJECTED refunds
- A6/A10: BuyGiftCard idempotency user-scoped; gift-card slot scan advances past failed rows
- A7/A14/A15: 2FA user+IP limiter, SNAPSHOT_ENC_KEY startup validation, accurate pepper/log-delivery docs
- A8/A9: snapshot encryption on all write+reuse sites; MPV->SPV effective voucher type (single VAT point)
- A11/A12/A13/A16: amount-aware refund reconciliation; completed-booking refund re-validation; till retry dedup; PaymentWasRefunded on SquareClient interface
- A17/A18/A19/A20: CI runs npm test; confirm_overflow_tip frontend dialog; unknown-event admin notification; mock token redaction
- M7 ConfirmOverflowTip, M9 snapshot encryption, C1 discount ordering regression test
- Frontend vitest framework (41 tests), backend coverage for fixed functions, docs corrected (2,269 tests, SUPPORT_EMAIL tokens, resolution status)

All 25 backend packages pass; frontend 41/41; build + env-docs green.
2026-08-22 00:34:50 +01:00
popertots 8ae592d0c5 fix: add golangci config, restore CI timeouts, svelte-check warnings, RespondError helper
CI / Env docs check (push) Successful in 13s
CI / Nginx config check (push) Successful in 36s
CI / Frontend major deps (push) Successful in 37s
CI / Docker compose check (push) Successful in 38s
CI / Frontend deps check (push) Successful in 41s
CI / Secrets scan (push) Successful in 42s
CI / Go build (push) Successful in 42s
CI / Frontend build (push) Successful in 49s
CI / go mod tidy (push) Successful in 26s
CI / Go vet (dev) (push) Has been cancelled
CI / Go vet (prod) (push) Has been cancelled
CI / golangci-lint (push) Has been cancelled
CI / Staticcheck (dev) (push) Has been cancelled
CI / Staticcheck (prod) (push) Has been cancelled
CI / Security scan (dev) (push) Has been cancelled
CI / Security scan (prod) (push) Has been cancelled
CI / Tests (prod) (push) Has been cancelled
CI / Tests (dev) (push) Has been cancelled
CI / Race (prod) (push) Has been cancelled
CI / Race (dev) (push) Has been cancelled
CI / Go vulnerabilities (push) Has been cancelled
CI / Knip (push) Has been cancelled
CI / Frontend a11y check (push) Has been cancelled
CI / Svelte strict check (push) Has been cancelled
CI / Frontend QC (audit) (push) Has been cancelled
CI / Frontend QC (typecheck) (push) Has been cancelled
CI / Frontend QC (lint) (push) Has been cancelled
2026-07-11 17:38:50 +01:00
popertots 0afa642a10 fix: add 60% coverage minimum to CI, scope prettier to staged frontend files 2026-07-11 17:09:37 +01:00
popertots 4d87bf791f fix: replace GO_TESTING with DAV_SKIP_INIT for DAV service initialization
CI / Env docs check (push) Failing after 17s
CI / Docker compose check (push) Successful in 1m29s
CI / Secrets scan (push) Successful in 1m33s
CI / Frontend major deps (push) Successful in 1m31s
CI / Go build (push) Successful in 1m33s
CI / Frontend deps check (push) Successful in 1m33s
CI / Frontend build (push) Successful in 1m32s
CI / Nginx config check (push) Successful in 1m33s
CI / go mod tidy (push) Successful in 1m18s
CI / Go vulnerabilities (push) Failing after 0s
CI / Knip (push) Failing after 0s
CI / Frontend a11y check (push) Failing after 0s
CI / Svelte strict check (push) Has been skipped
CI / Frontend QC (audit) (push) Has been skipped
CI / Frontend QC (typecheck) (push) Has been skipped
CI / Frontend QC (lint) (push) Has been skipped
CI / Go vet (prod) (push) Successful in 1m31s
CI / Go vet (dev) (push) Successful in 1m51s
CI / Staticcheck (prod) (push) Successful in 2m27s
CI / Staticcheck (dev) (push) Successful in 2m55s
CI / golangci-lint (push) Successful in 3m13s
CI / Security scan (prod) (push) Successful in 4m8s
CI / Security scan (dev) (push) Successful in 4m15s
CI / Tests (prod) (push) Has been skipped
CI / Tests (dev) (push) Has been skipped
CI / Race (prod) (push) Has been skipped
CI / Race (dev) (push) Has been skipped
2026-07-11 15:06:16 +01:00
popertots d412dc3cc4 ci: frontend major deps always exits 0 (informational only)
CI / Frontend major deps (push) Successful in 27s
CI / Env docs check (push) Successful in 27s
CI / Frontend deps check (push) Successful in 29s
CI / Docker compose check (push) Successful in 29s
CI / Nginx config check (push) Successful in 34s
CI / Go build (push) Successful in 35s
CI / Frontend build (push) Successful in 45s
CI / Secrets scan (push) Successful in 46s
CI / Knip (push) Successful in 42s
CI / Frontend a11y check (push) Successful in 1m44s
CI / Go vet (prod) (push) Successful in 1m52s
CI / Go vet (dev) (push) Successful in 1m59s
CI / go mod tidy (push) Successful in 33s
CI / Frontend QC (audit) (push) Successful in 1m22s
CI / Go vulnerabilities (push) Successful in 1m34s
CI / Staticcheck (prod) (push) Successful in 3m18s
CI / Staticcheck (dev) (push) Successful in 3m28s
CI / golangci-lint (push) Successful in 3m34s
CI / Frontend QC (typecheck) (push) Successful in 2m36s
CI / Frontend QC (lint) (push) Successful in 1m32s
CI / Security scan (dev) (push) Successful in 4m43s
CI / Security scan (prod) (push) Successful in 4m13s
CI / Svelte strict check (push) Successful in 1m8s
CI / Tests (prod) (push) Successful in 3m16s
CI / Tests (dev) (push) Successful in 3m29s
CI / Race (prod) (push) Successful in 7m0s
CI / Race (dev) (push) Successful in 7m16s
2026-07-11 11:48:20 +01:00
popertots 0b5a6d23ce ci: replace upload-artifact@v4 with inline coverage echo (not compatible with Gitea)
CI / Env docs check (push) Successful in 15s
CI / Docker compose check (push) Successful in 14s
CI / Nginx config check (push) Successful in 15s
CI / Frontend major deps (push) Failing after 25s
CI / Frontend deps check (push) Successful in 27s
CI / Go build (push) Successful in 37s
CI / Secrets scan (push) Successful in 38s
CI / Frontend build (push) Successful in 46s
CI / Knip (push) Successful in 33s
CI / Frontend a11y check (push) Successful in 1m40s
CI / Go vet (prod) (push) Successful in 2m12s
CI / Go vet (dev) (push) Successful in 2m15s
CI / go mod tidy (push) Successful in 1m38s
CI / Staticcheck (prod) (push) Successful in 3m31s
CI / Staticcheck (dev) (push) Successful in 3m34s
CI / golangci-lint (push) Successful in 3m47s
CI / Go vulnerabilities (push) Successful in 2m45s
CI / Frontend QC (audit) (push) Successful in 2m41s
CI / Security scan (prod) (push) Successful in 4m30s
CI / Frontend QC (lint) (push) Successful in 1m23s
CI / Security scan (dev) (push) Successful in 4m46s
CI / Frontend QC (typecheck) (push) Successful in 1m25s
CI / Svelte strict check (push) Successful in 45s
CI / Tests (prod) (push) Successful in 4m15s
CI / Tests (dev) (push) Successful in 4m24s
CI / Race (prod) (push) Successful in 7m59s
CI / Race (dev) (push) Successful in 8m8s
2026-07-11 11:23:23 +01:00
popertots 50ce98d729 fix: remove dead GenerateRefreshToken calls (tokens never consumed) 2026-07-10 20:52:47 +01:00
popertots a4a80246d1 fix: restore S3 error stubs, add CI timeouts, gofmt handlers.go, fix comment
CI / Env docs check (push) Successful in 14s
CI / Docker compose check (push) Successful in 20s
CI / Nginx config check (push) Successful in 20s
CI / Frontend major deps (push) Failing after 30s
CI / Frontend deps check (push) Successful in 31s
CI / Secrets scan (push) Successful in 38s
CI / Go build (push) Successful in 38s
CI / Frontend build (push) Successful in 42s
CI / Knip (push) Successful in 40s
CI / Frontend a11y check (push) Successful in 2m2s
CI / Go vet (prod) (push) Successful in 1m56s
CI / Go vet (dev) (push) Successful in 2m7s
CI / Staticcheck (prod) (push) Successful in 2m51s
CI / Staticcheck (dev) (push) Successful in 3m3s
CI / go mod tidy (push) Successful in 1m17s
CI / Frontend QC (audit) (push) Successful in 1m34s
CI / golangci-lint (push) Successful in 3m44s
CI / Go vulnerabilities (push) Successful in 2m10s
CI / Frontend QC (typecheck) (push) Successful in 1m29s
CI / Security scan (prod) (push) Successful in 4m3s
CI / Security scan (dev) (push) Successful in 4m37s
CI / Frontend QC (lint) (push) Successful in 1m40s
CI / Svelte strict check (push) Successful in 1m22s
CI / Tests (prod) (push) Successful in 3m12s
CI / Tests (dev) (push) Successful in 3m32s
CI / Race (prod) (push) Successful in 7m12s
CI / Race (dev) (push) Successful in 7m22s
- s3.go: restore error returns on prod Upload/Download/Delete stubs
  (silent nil was dangerous — callers would think writes succeeded)
- CI: add -timeout 300s to tests, -timeout 480s to race, GO_TESTING to race env
- handlers.go: gofmt indentation fix for GetCheckoutStatus struct literal
- validators.go: fix comment to include A-F (matched the regex)
2026-07-10 20:39:17 +01:00
popertots e896591098 chore: upgrade npm deps — vite 8, prettier plugins, @types/node, @eslint/compat
CI / Docker compose check (push) Successful in 14s
CI / Env docs check (push) Successful in 15s
CI / Nginx config check (push) Successful in 18s
CI / Frontend deps check (push) Successful in 27s
CI / Frontend major deps (push) Failing after 27s
CI / Go build (push) Successful in 35s
CI / Secrets scan (push) Successful in 41s
CI / Frontend build (push) Successful in 43s
CI / Knip (push) Successful in 28s
CI / Frontend a11y check (push) Successful in 1m35s
CI / Go vet (prod) (push) Successful in 2m11s
CI / go mod tidy (push) Successful in 42s
CI / Go vet (dev) (push) Successful in 2m18s
CI / Frontend QC (audit) (push) Successful in 48s
CI / Staticcheck (prod) (push) Successful in 2m57s
CI / Staticcheck (dev) (push) Successful in 3m1s
CI / Go vulnerabilities (push) Successful in 1m27s
CI / golangci-lint (push) Successful in 3m41s
CI / Frontend QC (typecheck) (push) Successful in 1m35s
CI / Frontend QC (lint) (push) Successful in 1m51s
CI / Security scan (prod) (push) Successful in 4m29s
CI / Security scan (dev) (push) Successful in 4m44s
CI / Svelte strict check (push) Successful in 1m49s
CI / Tests (prod) (push) Successful in 3m30s
CI / Tests (dev) (push) Successful in 3m57s
CI / Race (prod) (push) Successful in 7m14s
CI / Race (dev) (push) Successful in 7m25s
Upgrades applied:
  @types/node: 22.20.1 → 26.1.1
  @eslint/compat: 1.4.1 → 2.1.0
  prettier-plugin-tailwindcss: 0.7.4 → 0.8.0
  prettier-plugin-svelte: 3.5.2 → 4.1.1 (formatted textarea.svelte)
  vite: 7.3.6 → 8.1.4
  @sveltejs/vite-plugin-svelte: 6.2.4 → 7.2.0

Left at current (blocked by deps chain):
  eslint / @eslint/js — typescript-eslint needs eslint 10 support
  typescript — typescript-eslint needs TS 7 support

Added CI TODO note for when vite-plugin-svelte-inspector catches up.
2026-07-10 20:03:41 +01:00
popertots 2cd35ea84a fix: S3-dependent tests skip in prod, add GO_TESTING to CI for dav init
CI / Env docs check (push) Successful in 15s
CI / Nginx config check (push) Successful in 21s
CI / Docker compose check (push) Successful in 22s
CI / Frontend deps check (push) Successful in 22s
CI / Frontend major deps (push) Failing after 40s
CI / Secrets scan (push) Successful in 44s
CI / Go build (push) Successful in 45s
CI / Frontend build (push) Successful in 1m8s
CI / Knip (push) Successful in 41s
CI / Frontend a11y check (push) Successful in 1m20s
CI / go mod tidy (push) Successful in 35s
CI / Go vet (prod) (push) Successful in 2m35s
CI / Go vet (dev) (push) Successful in 2m36s
CI / Go vulnerabilities (push) Successful in 1m27s
CI / Staticcheck (prod) (push) Successful in 3m13s
CI / Frontend QC (audit) (push) Successful in 50s
CI / Staticcheck (dev) (push) Successful in 3m31s
CI / golangci-lint (push) Successful in 4m0s
CI / Frontend QC (typecheck) (push) Successful in 1m35s
CI / Security scan (prod) (push) Successful in 4m28s
CI / Security scan (dev) (push) Successful in 4m33s
CI / Frontend QC (lint) (push) Successful in 1m59s
CI / Svelte strict check (push) Successful in 1m5s
CI / Tests (prod) (push) Successful in 4m8s
CI / Tests (dev) (push) Successful in 4m13s
CI / Race (prod) (push) Successful in 8m3s
CI / Race (dev) (push) Failing after 8m14s
2026-07-10 18:45:18 +01:00
popertots c0442d4ebd ci: enable coverage on Tests (prod), remove unrealistic threshold, fix prettier
CI / Env docs check (push) Successful in 20s
CI / Nginx config check (push) Successful in 20s
CI / Frontend major deps (push) Failing after 26s
CI / Docker compose check (push) Successful in 30s
CI / Frontend deps check (push) Successful in 32s
CI / Secrets scan (push) Successful in 1m0s
CI / Go build (push) Successful in 1m1s
CI / Frontend build (push) Successful in 1m0s
CI / Knip (push) Successful in 58s
CI / Go vet (prod) (push) Successful in 1m38s
CI / Frontend a11y check (push) Successful in 2m12s
CI / Go vet (dev) (push) Successful in 2m2s
CI / go mod tidy (push) Successful in 35s
CI / Frontend QC (audit) (push) Successful in 39s
CI / Staticcheck (prod) (push) Successful in 2m59s
CI / Go vulnerabilities (push) Successful in 1m26s
CI / Staticcheck (dev) (push) Successful in 3m15s
CI / golangci-lint (push) Successful in 3m31s
CI / Frontend QC (typecheck) (push) Successful in 1m31s
CI / Frontend QC (lint) (push) Successful in 2m14s
CI / Security scan (prod) (push) Successful in 4m32s
CI / Security scan (dev) (push) Successful in 5m2s
CI / Svelte strict check (push) Successful in 28s
CI / Tests (prod) (push) Successful in 1m54s
CI / Tests (dev) (push) Failing after 2m20s
CI / Race (prod) (push) Successful in 3m41s
CI / Race (dev) (push) Successful in 5m15s
2026-07-10 13:18:23 +01:00
popertots 6fd3d13540 ci: install openssl for nginx dummy cert generation
CI / Docker compose check (push) Successful in 41s
CI / Env docs check (push) Successful in 44s
CI / Frontend major deps (push) Failing after 43s
CI / Frontend deps check (push) Failing after 45s
CI / Knip (push) Has been skipped
CI / Frontend a11y check (push) Has been skipped
CI / Nginx config check (push) Successful in 46s
CI / Go build (push) Successful in 48s
CI / Secrets scan (push) Successful in 55s
CI / Frontend build (push) Successful in 2m1s
CI / Svelte strict check (push) Has been skipped
CI / Frontend QC (audit) (push) Has been skipped
CI / Frontend QC (typecheck) (push) Has been skipped
CI / Frontend QC (lint) (push) Has been skipped
CI / Go vet (prod) (push) Successful in 2m36s
CI / Go vet (dev) (push) Successful in 2m36s
CI / go mod tidy (push) Successful in 1m29s
CI / Staticcheck (prod) (push) Failing after 2m42s
CI / Staticcheck (dev) (push) Failing after 2m48s
CI / golangci-lint (push) Successful in 3m30s
CI / Go vulnerabilities (push) Successful in 1m30s
CI / Security scan (prod) (push) Failing after 4m21s
CI / Security scan (dev) (push) Failing after 4m31s
CI / Tests (prod) (push) Has been skipped
CI / Tests (dev) (push) Has been skipped
CI / Race (prod) (push) Has been skipped
CI / Race (dev) (push) Has been skipped
2026-07-10 11:13:20 +01:00
popertots f0c5f53f3f ci: nginx needs dummy TLS certs, frontend major deps now visible
CI / Env docs check (push) Successful in 51s
CI / Docker compose check (push) Successful in 51s
CI / Frontend deps check (push) Failing after 52s
CI / Frontend major deps (push) Failing after 53s
CI / Go build (push) Successful in 53s
CI / Knip (push) Has been skipped
CI / Frontend a11y check (push) Has been skipped
CI / Secrets scan (push) Successful in 54s
CI / Frontend build (push) Successful in 56s
CI / Svelte strict check (push) Has been skipped
CI / Frontend QC (audit) (push) Has been skipped
CI / Frontend QC (typecheck) (push) Has been skipped
CI / Frontend QC (lint) (push) Has been skipped
CI / Nginx config check (push) Failing after 1m0s
CI / go mod tidy (push) Successful in 40s
CI / Go vet (dev) (push) Successful in 2m4s
CI / Go vet (prod) (push) Successful in 2m19s
CI / Go vulnerabilities (push) Successful in 1m35s
CI / Staticcheck (prod) (push) Failing after 3m16s
CI / Staticcheck (dev) (push) Failing after 3m17s
CI / golangci-lint (push) Successful in 4m34s
CI / Security scan (prod) (push) Failing after 4m39s
CI / Security scan (dev) (push) Failing after 4m39s
CI / Tests (prod) (push) Has been skipped
CI / Tests (dev) (push) Has been skipped
CI / Race (prod) (push) Has been skipped
CI / Race (dev) (push) Has been skipped
- nginx-check: generate self-signed certs so nginx -t can resolve
  ssl_certificate paths without failing
- frontend-deps-major: exit(1) when major updates found + continue-
  on-error: true so it shows as red/visible but doesn't block pipeline
2026-07-10 11:07:02 +01:00
popertots 5246ed3c64 ci: add hosts entries so nginx -t can resolve upstream service names
CI / Env docs check (push) Successful in 36s
CI / Frontend deps check (push) Failing after 37s
CI / Frontend major deps (push) Successful in 37s
CI / Knip (push) Has been skipped
CI / Frontend a11y check (push) Has been skipped
CI / Go build (push) Successful in 37s
CI / Nginx config check (push) Failing after 41s
CI / Docker compose check (push) Successful in 41s
CI / Frontend build (push) Successful in 1m36s
CI / Secrets scan (push) Successful in 1m38s
CI / Svelte strict check (push) Has been skipped
CI / Frontend QC (audit) (push) Has been skipped
CI / Frontend QC (typecheck) (push) Has been skipped
CI / Frontend QC (lint) (push) Has been skipped
CI / go mod tidy (push) Successful in 42s
CI / Go vet (prod) (push) Successful in 1m43s
CI / Go vet (dev) (push) Successful in 1m55s
CI / Go vulnerabilities (push) Successful in 1m59s
CI / Staticcheck (prod) (push) Failing after 3m37s
CI / Staticcheck (dev) (push) Failing after 3m39s
CI / golangci-lint (push) Successful in 3m40s
CI / Security scan (dev) (push) Failing after 3m58s
CI / Security scan (prod) (push) Failing after 3m26s
CI / Tests (prod) (push) Has been skipped
CI / Tests (dev) (push) Has been skipped
CI / Race (prod) (push) Has been skipped
CI / Race (dev) (push) Has been skipped
2026-07-10 11:00:20 +01:00
popertots 6f557257bb ci: fix nginx http.d dir, golangci-lint timeout, frontend major deps parallel
CI / Docker compose check (push) Successful in 37s
CI / Env docs check (push) Successful in 39s
CI / Frontend deps check (push) Failing after 40s
CI / Go build (push) Successful in 40s
CI / Frontend major deps (push) Successful in 41s
CI / Knip (push) Has been skipped
CI / Frontend a11y check (push) Has been skipped
CI / Nginx config check (push) Failing after 46s
CI / Secrets scan (push) Successful in 57s
CI / Frontend build (push) Successful in 55s
CI / Svelte strict check (push) Has been skipped
CI / Frontend QC (audit) (push) Has been skipped
CI / Frontend QC (typecheck) (push) Has been skipped
CI / Frontend QC (lint) (push) Has been skipped
CI / go mod tidy (push) Successful in 37s
CI / Go vet (prod) (push) Successful in 2m20s
CI / Go vulnerabilities (push) Successful in 1m41s
CI / Go vet (dev) (push) Successful in 2m45s
CI / Staticcheck (prod) (push) Failing after 2m50s
CI / Staticcheck (dev) (push) Failing after 3m3s
CI / golangci-lint (push) Successful in 3m10s
CI / Security scan (prod) (push) Failing after 4m23s
CI / Security scan (dev) (push) Failing after 4m29s
CI / Tests (prod) (push) Has been skipped
CI / Tests (dev) (push) Has been skipped
CI / Race (prod) (push) Has been skipped
CI / Race (dev) (push) Has been skipped
- nginx-check: Alpine's nginx package includes /etc/nginx/conf.d at
  MAIN level and /etc/nginx/http.d at HTTP level. Use http.d so that
  proxy_cache_path, limit_req_zone, and server blocks are valid.
- golangci-lint: add --timeout 5m to prevent timeout on first run
  when Go module cache is cold and many deps must be downloaded
- frontend-deps-major: remove needs dependency so it runs in parallel
  with frontend-deps (provides visibility even when deps check fails)
2026-07-10 10:53:53 +01:00
popertots e0f072b593 ci: split dev/prod jobs, add non-blocking frontend major deps check
CI / Nginx config check (push) Failing after 12s
CI / Docker compose check (push) Successful in 17s
CI / Env docs check (push) Successful in 17s
CI / Frontend deps check (push) Failing after 23s
CI / Frontend major deps (warn only) (push) Has been skipped
CI / Knip (push) Has been skipped
CI / Frontend a11y check (push) Has been skipped
CI / Secrets scan (push) Successful in 37s
CI / Go build (push) Successful in 37s
CI / Frontend build (push) Successful in 1m10s
CI / Svelte strict check (push) Has been skipped
CI / Frontend QC (audit) (push) Has been skipped
CI / Frontend QC (typecheck) (push) Has been skipped
CI / Frontend QC (lint) (push) Has been skipped
CI / go mod tidy (push) Successful in 45s
CI / Go vet (prod) (push) Successful in 1m50s
CI / Go vet (dev) (push) Successful in 2m28s
CI / Staticcheck (prod) (push) Failing after 2m50s
CI / Go vulnerabilities (push) Successful in 2m40s
CI / Staticcheck (dev) (push) Failing after 3m53s
CI / golangci-lint (push) Failing after 3m58s
CI / Security scan (prod) (push) Failing after 4m21s
CI / Security scan (dev) (push) Failing after 4m21s
CI / Tests (prod) (push) Has been skipped
CI / Tests (dev) (push) Has been skipped
CI / Race (prod) (push) Has been skipped
CI / Race (dev) (push) Has been skipped
Split 3 multi-step jobs into separate dev and prod jobs for clearer
parallel execution:
  - go-vet → go-vet-dev + go-vet-prod
  - go-staticcheck → go-staticcheck-dev + go-staticcheck-prod
  - go-gosec → go-gosec-dev + go-gosec-prod

Each split job runs independently with its own setup and cache key.
Updated test/race needs to reference all split job names.

Added frontend-deps-major job (warn-only, exit 0):
  - Detects major/out-of-range npm updates (wanted !== latest)
  - Non-blocking informational check alongside the existing blocking
    frontend-deps job that catches in-range updates
2026-07-10 10:45:29 +01:00
popertots 2a0b81e565 ci: mkdir before cp for nginx config validation
CI / Nginx config check (push) Failing after 34s
CI / Docker compose check (push) Successful in 35s
CI / Env docs check (push) Successful in 36s
CI / Frontend deps check (push) Failing after 37s
CI / Knip (push) Has been skipped
CI / Frontend a11y check (push) Has been skipped
CI / Go build (push) Successful in 45s
CI / Secrets scan (push) Successful in 51s
CI / go mod tidy (push) Successful in 23s
CI / Frontend build (push) Successful in 1m39s
CI / Svelte strict check (push) Has been skipped
CI / Frontend QC (audit) (push) Has been skipped
CI / Frontend QC (typecheck) (push) Has been skipped
CI / Frontend QC (lint) (push) Has been skipped
CI / Go vulnerabilities (push) Successful in 1m12s
CI / Go vet (push) Successful in 1m46s
CI / Staticcheck (push) Failing after 2m2s
CI / golangci-lint (push) Successful in 2m19s
CI / Security scan (gosec) (push) Failing after 2m53s
CI / Tests (prod) (push) Has been skipped
CI / Tests (dev) (push) Has been skipped
CI / Race (prod) (push) Has been skipped
CI / Race (dev) (push) Has been skipped
2026-07-10 10:37:59 +01:00
popertots 9e3c9323c3 ci: fix nginx config check cp path, add R2_ENDPOINT to .env.example
CI / Nginx config check (push) Failing after 11s
CI / Docker compose check (push) Successful in 11s
CI / Env docs check (push) Successful in 12s
CI / Frontend deps check (push) Failing after 24s
CI / Knip (push) Has been skipped
CI / Frontend a11y check (push) Has been skipped
CI / Secrets scan (push) Successful in 38s
CI / Go build (push) Successful in 39s
CI / go mod tidy (push) Successful in 21s
CI / Frontend build (push) Successful in 1m25s
CI / Svelte strict check (push) Has been skipped
CI / Frontend QC (audit) (push) Has been skipped
CI / Frontend QC (typecheck) (push) Has been skipped
CI / Frontend QC (lint) (push) Has been skipped
CI / Go vulnerabilities (push) Successful in 1m38s
CI / Go vet (push) Successful in 1m40s
CI / Staticcheck (push) Failing after 2m19s
CI / golangci-lint (push) Successful in 2m30s
CI / Security scan (gosec) (push) Failing after 2m51s
CI / Tests (prod) (push) Has been skipped
CI / Tests (dev) (push) Has been skipped
CI / Race (prod) (push) Has been skipped
CI / Race (dev) (push) Has been skipped
- nginx-check: cp needs trailing filename when copying to a directory
- .env.example: uncomment R2_ENDPOINT as an active variable so the
  env-docs-check script detects it as documented
2026-07-10 10:33:33 +01:00
popertots 3d5b9350bc ci: install git for gitleaks, use nginx default config for validation
CI / Docker compose check (push) Successful in 21s
CI / Frontend deps check (push) Failing after 22s
CI / Knip (push) Has been skipped
CI / Frontend a11y check (push) Has been skipped
CI / Nginx config check (push) Failing after 26s
CI / Env docs check (push) Failing after 26s
CI / Go build (push) Successful in 32s
CI / Secrets scan (push) Successful in 42s
CI / Frontend build (push) Successful in 59s
CI / Svelte strict check (push) Has been skipped
CI / Frontend QC (audit) (push) Has been skipped
CI / Frontend QC (typecheck) (push) Has been skipped
CI / go mod tidy (push) Successful in 22s
CI / Frontend QC (lint) (push) Has been skipped
CI / Go vulnerabilities (push) Successful in 1m29s
CI / Go vet (push) Successful in 1m45s
CI / Staticcheck (push) Failing after 2m1s
CI / golangci-lint (push) Successful in 2m12s
CI / Security scan (gosec) (push) Failing after 2m44s
CI / Tests (prod) (push) Has been skipped
CI / Tests (dev) (push) Has been skipped
CI / Race (prod) (push) Has been skipped
CI / Race (dev) (push) Has been skipped
- secrets-scan: install git before gitleaks (gitleaks needs git in PATH
  to scan the repository; the node:22-alpine3.21 container lacks it)
- nginx-check: copy site config into /etc/nginx/conf.d/ and use
  'nginx -t' with default config instead of constructing a custom one
  (avoids fastcgi_params resolution issues with relative includes)
2026-07-10 10:27:48 +01:00
popertots fbb8837981 ci: fix gitleaks module path, compose env file, and nginx limit_req_zone scope
CI / Nginx config check (push) Failing after 17s
CI / Docker compose check (push) Successful in 26s
CI / Env docs check (push) Failing after 26s
CI / Frontend deps check (push) Failing after 32s
CI / Knip (push) Has been skipped
CI / Frontend a11y check (push) Has been skipped
CI / Secrets scan (push) Failing after 40s
CI / Go build (push) Successful in 40s
CI / Frontend build (push) Successful in 1m7s
CI / go mod tidy (push) Successful in 22s
CI / Svelte strict check (push) Has been skipped
CI / Frontend QC (audit) (push) Has been skipped
CI / Frontend QC (typecheck) (push) Has been skipped
CI / Frontend QC (lint) (push) Has been skipped
CI / Go vulnerabilities (push) Successful in 1m16s
CI / Go vet (push) Successful in 2m8s
CI / Staticcheck (push) Failing after 2m12s
CI / golangci-lint (push) Successful in 2m19s
CI / Security scan (gosec) (push) Failing after 2m50s
CI / Tests (prod) (push) Has been skipped
CI / Tests (dev) (push) Has been skipped
CI / Race (prod) (push) Has been skipped
CI / Race (dev) (push) Has been skipped
- secrets-scan: gitleaks module path was renamed from
  github.com/gitleaks/gitleaks/v8 to github.com/zricethezav/gitleaks/v8
- docker-compose-check: create backend/.env from .env.example before
  running docker compose config (env file required by compose.yml)
- nginx: move limit_req_zone directives outside server block to http
  level, where nginx requires them
2026-07-10 10:22:32 +01:00
popertots d073172670 ci: fix infra failures — install go/python3/docker/nginx in job containers
CI / Secrets scan (push) Failing after 8s
CI / Nginx config check (push) Failing after 11s
CI / Docker compose check (push) Failing after 12s
CI / Env docs check (push) Failing after 12s
CI / Frontend deps check (push) Failing after 22s
CI / Knip (push) Has been skipped
CI / Frontend a11y check (push) Has been skipped
CI / Go build (push) Successful in 32s
CI / Frontend build (push) Successful in 50s
CI / Svelte strict check (push) Has been skipped
CI / Frontend QC (audit) (push) Has been skipped
CI / Frontend QC (typecheck) (push) Has been skipped
CI / Frontend QC (lint) (push) Has been skipped
CI / go mod tidy (push) Successful in 26s
CI / Go vulnerabilities (push) Successful in 1m2s
CI / Go vet (push) Successful in 1m41s
CI / Staticcheck (push) Failing after 2m2s
CI / golangci-lint (push) Successful in 2m8s
CI / Security scan (gosec) (push) Failing after 2m49s
CI / Tests (prod) (push) Has been skipped
CI / Tests (dev) (push) Has been skipped
CI / Race (prod) (push) Has been skipped
CI / Race (dev) (push) Has been skipped
Four CI jobs failed because the runner's node:22-alpine3.21 container
lacked required tooling (Go, Python3, Docker CLI, nginx):

- secrets-scan: add actions/setup-go@v5 before gitleaks install
- env-docs-check: apk add python3 before running check script
- docker-compose-check: apk add docker-cli docker-compose
- nginx-check: install nginx locally, validate with minimal config
2026-07-10 10:16:01 +01:00
popertotsandSisyphus 9a96a7a8a1 ci: add prod-tag variants to staticcheck and gosec
CI / Docker compose check (push) Failing after 19s
CI / Env docs check (push) Failing after 20s
CI / Secrets scan (push) Failing after 20s
CI / Nginx config check (push) Failing after 21s
CI / Frontend deps check (push) Failing after 25s
CI / Go build (push) Successful in 26s
CI / Knip (push) Has been skipped
CI / Frontend a11y check (push) Has been skipped
CI / go mod tidy (push) Successful in 19s
CI / Frontend build (push) Successful in 1m24s
CI / Svelte strict check (push) Has been skipped
CI / Frontend QC (audit) (push) Has been skipped
CI / Frontend QC (typecheck) (push) Has been skipped
CI / Frontend QC (lint) (push) Has been skipped
CI / Go vulnerabilities (push) Successful in 1m19s
CI / Go vet (push) Successful in 2m38s
CI / Staticcheck (push) Failing after 2m39s
CI / golangci-lint (push) Successful in 2m40s
CI / Security scan (gosec) (push) Failing after 2m46s
CI / Tests (prod) (push) Has been skipped
CI / Tests (dev) (push) Has been skipped
CI / Race (prod) (push) Has been skipped
CI / Race (dev) (push) Has been skipped
Both tools now run under test,dev and test,!dev tags, matching go-vet pattern.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-07-10 09:50:21 +01:00
popertotsandSisyphus f532b05e72 ci: set coverage threshold to 100%, govulncheck gated behind go-build
CI / Nginx config check (push) Failing after 5s
CI / Secrets scan (push) Failing after 6s
CI / Docker compose check (push) Failing after 6s
CI / Env docs check (push) Failing after 7s
CI / Frontend deps check (push) Failing after 21s
CI / Knip (push) Has been skipped
CI / Frontend a11y check (push) Has been skipped
CI / Go build (push) Successful in 26s
CI / go mod tidy (push) Successful in 17s
CI / Frontend build (push) Successful in 1m5s
CI / Svelte strict check (push) Has been skipped
CI / Frontend QC (audit) (push) Has been skipped
CI / Frontend QC (typecheck) (push) Has been skipped
CI / Frontend QC (lint) (push) Has been skipped
CI / Go vulnerabilities (push) Successful in 1m17s
CI / Go vet (push) Successful in 1m42s
CI / Staticcheck (push) Failing after 1m58s
CI / golangci-lint (push) Successful in 2m15s
CI / Security scan (gosec) (push) Failing after 2m48s
CI / Tests (prod) (push) Has been skipped
CI / Tests (dev) (push) Has been skipped
CI / Race (prod) (push) Has been skipped
CI / Race (dev) (push) Has been skipped
Coverage check now requires 100% (fail on any uncovered line).
govulncheck (vulns) now has needs: [go-build], placing it in the gate block alongside vet/lint/staticcheck/gosec.
Test and race already depended on vulns, so the chain is: go-build → gate jobs (incl vulns) → test+race.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-07-10 09:44:47 +01:00
popertotsandSisyphus 5f95abf804 ci: add secrets scanning, staticcheck, gosec, coverage, env docs, compose/nginx validation, a11y
CI / Nginx config check (push) Failing after 7s
CI / Docker compose check (push) Failing after 7s
CI / Secrets scan (push) Failing after 7s
CI / Env docs check (push) Failing after 8s
CI / Frontend deps check (push) Failing after 23s
CI / Knip (push) Has been skipped
CI / Frontend a11y check (push) Has been skipped
CI / Go build (push) Successful in 37s
CI / Go vulnerabilities (push) Successful in 37s
CI / Frontend build (push) Successful in 1m1s
CI / go mod tidy (push) Successful in 24s
CI / Svelte strict check (push) Has been skipped
CI / Frontend QC (audit) (push) Has been skipped
CI / Frontend QC (typecheck) (push) Has been skipped
CI / Frontend QC (lint) (push) Has been skipped
CI / Go vet (push) Successful in 1m31s
CI / Staticcheck (push) Failing after 1m50s
CI / golangci-lint (push) Successful in 2m26s
CI / Security scan (gosec) (push) Failing after 2m38s
CI / Tests (prod) (push) Has been skipped
CI / Tests (dev) (push) Has been skipped
CI / Race (prod) (push) Has been skipped
CI / Race (dev) (push) Has been skipped
New jobs in pipeline:

secrets-scan: gitleaks detection
go-staticcheck: static analysis (complement to golangci-lint)
go-gosec: Go security linter
test: coverage profiling with 50% threshold gate
env-docs-check: verifies all env vars are documented in .env.example
docker-compose-check: validates compose.yml syntax
nginx-check: validates nginx config
frontend-a11y: Svelte a11y accessibility checks

Also: remove orphaned Makefile, update .env.example with 11 missing vars,
create .gitleaks.toml with allowlist, add check-env-docs.py script.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-07-10 09:38:07 +01:00
popertotsandSisyphus b26bf14419 ci: svelte strict check runs after typecheck QC, not before
CI / Frontend deps check (push) Successful in 28s
CI / Go build (push) Successful in 36s
CI / Go vulnerabilities (push) Successful in 37s
CI / go mod tidy (push) Failing after 12s
CI / Knip (push) Failing after 35s
CI / Frontend build (push) Successful in 1m15s
CI / Svelte strict check (push) Has been skipped
CI / Frontend QC (audit) (push) Has been skipped
CI / Frontend QC (typecheck) (push) Has been skipped
CI / Frontend QC (lint) (push) Has been skipped
CI / Go vet (push) Successful in 58s
CI / golangci-lint (push) Failing after 1m14s
CI / Tests (prod) (push) Has been skipped
CI / Tests (dev) (push) Has been skipped
CI / Race (prod) (push) Has been skipped
CI / Race (dev) (push) Has been skipped
frontend-svelte-strict now needs frontend-qc. QC gates on build+knip. Strict runs after QC completes.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-07-09 18:05:20 +01:00
popertotsandSisyphus d272eb7cfe ci: restructure Go gate into separate jobs, add knip and svelte strict check
CI / Frontend deps check (push) Successful in 30s
CI / Go build (push) Successful in 34s
CI / Go vulnerabilities (push) Successful in 34s
CI / go mod tidy (push) Failing after 16s
CI / Frontend build (push) Successful in 1m22s
CI / Knip (push) Failing after 48s
CI / Go vet (push) Successful in 1m0s
CI / golangci-lint (push) Failing after 1m13s
CI / Tests (prod) (push) Has been skipped
CI / Tests (dev) (push) Has been skipped
CI / Race (prod) (push) Has been skipped
CI / Race (dev) (push) Has been skipped
CI / Svelte strict check (push) Successful in 40s
CI / Frontend QC (audit) (push) Has been skipped
CI / Frontend QC (typecheck) (push) Has been skipped
CI / Frontend QC (lint) (push) Has been skipped
Go: go-build gates three parallel jobs (go-vet, golangci-lint, go-mod-tidy) which gate test+race.
Frontend: add knip (between deps and QC) and svelte-check --fail-on-warnings (after build).
QC now gates on build, knip, and svelte strict.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-07-09 18:03:04 +01:00
popertotsandSisyphus b11dee1c49 ci: add golangci-lint and go-mod-tidy to Go gate job
CI / Frontend deps check (push) Successful in 1m27s
CI / Frontend build (push) Successful in 1m25s
CI / Go vulnerabilities (push) Successful in 1m33s
CI / Go gate (push) Failing after 1m34s
CI / Tests (prod) (push) Has been skipped
CI / Tests (dev) (push) Has been skipped
CI / Race (prod) (push) Has been skipped
CI / Race (dev) (push) Has been skipped
CI / Frontend QC (audit) (push) Successful in 18s
CI / Frontend QC (typecheck) (push) Successful in 34s
CI / Frontend QC (lint) (push) Successful in 1m0s
Go gate now runs: build, vet(dev+prod), golangci-lint, and go mod tidy check. Test and race jobs depend on this gate + vulns.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-07-09 17:57:37 +01:00
popertotsandSisyphus 53b0507148 ci: run frontend-deps and frontend-build in parallel, both gate QC
CI / Build & Vet (push) Successful in 1m16s
CI / Go vulnerabilities (push) Successful in 1m17s
CI / Frontend deps check (push) Successful in 1m15s
CI / Frontend build (push) Successful in 1m10s
CI / Frontend QC (audit) (push) Successful in 31s
CI / Tests (prod) (push) Has been cancelled
CI / Tests (dev) (push) Has been cancelled
CI / Race (prod) (push) Has been cancelled
CI / Race (dev) (push) Has been cancelled
CI / Frontend QC (typecheck) (push) Has been cancelled
CI / Frontend QC (lint) (push) Has been cancelled
frontend-deps (dep staleness check) and frontend-build now run concurrently. frontend-qc waits for both. Removed (gate) from build job name.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-07-09 17:54:50 +01:00
popertotsandSisyphus 93883602d9 ci: extract frontend deps checks into separate gating job
CI / Frontend deps check (push) Successful in 39s
CI / Go vulnerabilities (push) Successful in 44s
CI / Build & Vet (push) Successful in 58s
CI / Tests (prod) (push) Has been cancelled
CI / Tests (dev) (push) Has been cancelled
CI / Race (prod) (push) Has been cancelled
CI / Race (dev) (push) Has been cancelled
CI / Frontend build (gate) (push) Has been cancelled
CI / Frontend QC (audit) (push) Has been cancelled
CI / Frontend QC (typecheck) (push) Has been cancelled
CI / Frontend QC (lint) (push) Has been cancelled
frontend-deps runs npm outdated + stale override checks as its own job. frontend-build waits for frontend-deps before starting, so stale deps stop the pipeline before build resources are consumed.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-07-09 17:52:53 +01:00
popertotsandSisyphus 2604f9ab0d ci: add stale override detection to frontend build gate
CI / Go vulnerabilities (push) Successful in 47s
CI / Build & Vet (push) Successful in 1m2s
CI / Tests (prod) (push) Has been cancelled
CI / Tests (dev) (push) Has been cancelled
CI / Race (prod) (push) Has been cancelled
CI / Race (dev) (push) Has been cancelled
CI / Frontend build (gate) (push) Has been cancelled
CI / Frontend QC (audit) (push) Has been cancelled
CI / Frontend QC (typecheck) (push) Has been cancelled
CI / Frontend QC (lint) (push) Has been cancelled
Parses npm explain output for each overridden package. If the parent's required range already satisfies the override target, flags it as stale — dev must remove the override.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-07-09 17:51:32 +01:00
popertotsandSisyphus 4b5d3640bb ci: add dependency staleness check to frontend build gate
CI / Go vulnerabilities (push) Successful in 1m3s
CI / Build & Vet (push) Successful in 1m36s
CI / Frontend build (gate) (push) Successful in 1m36s
CI / Frontend QC (audit) (push) Successful in 1m19s
CI / Frontend QC (typecheck) (push) Successful in 1m30s
CI / Tests (prod) (push) Successful in 1m59s
CI / Tests (dev) (push) Successful in 2m14s
CI / Race (prod) (push) Has been cancelled
CI / Race (dev) (push) Has been cancelled
CI / Frontend QC (lint) (push) Has been cancelled
After npm ci, runs npm outdated --json and fails if any in-range (current != wanted) updates exist. Developer must run npm update locally and commit the lockfile.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-07-09 17:46:54 +01:00
popertotsandSisyphus 914f9993ec ci: remove test/race timeouts, add concurrency cancel-in-progress, fix npm audit vulns
CI / Go vulnerabilities (push) Successful in 35s
CI / Build & Vet (push) Successful in 49s
CI / Frontend build (gate) (push) Successful in 57s
CI / Tests (prod) (push) Has been cancelled
CI / Tests (dev) (push) Has been cancelled
CI / Race (prod) (push) Has been cancelled
CI / Race (dev) (push) Has been cancelled
CI / Frontend QC (audit) (push) Has been cancelled
CI / Frontend QC (typecheck) (push) Has been cancelled
CI / Frontend QC (lint) (push) Has been cancelled
- Remove -timeout 180s/240s from go test and race commands
- Add concurrency group to cancel stale pipelines on new pushes
- Run npm update to bump Vite 7.3.5 -> 7.3.6, fixing nested esbuild vuln
- npm audit now at 0 vulnerabilities

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-07-09 17:43:13 +01:00
popertotsandSisyphus a17d6fd2e6 ci: fail npm audit on any vuln, not just high/critical
CI / Go vulnerabilities (push) Successful in 55s
CI / Build & Vet (push) Successful in 1m15s
CI / Frontend build (gate) (push) Successful in 1m21s
CI / Frontend QC (audit) (push) Failing after 40s
CI / Frontend QC (typecheck) (push) Successful in 1m44s
CI / Tests (prod) (push) Successful in 2m5s
CI / Frontend QC (lint) (push) Successful in 3m10s
CI / Tests (dev) (push) Successful in 3m17s
CI / Race (prod) (push) Successful in 3m55s
CI / Race (dev) (push) Successful in 5m44s
Change audit-level from high to info so low and moderate findings also fail the CI step.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-07-09 17:35:23 +01:00
popertotsandSisyphus 29958620b6 ci: fix literal ${matrix.task} in step names (Gitea does not resolve them)
CI / Go vulnerabilities (push) Successful in 1m34s
CI / Build & Vet (push) Successful in 2m10s
CI / Frontend build (gate) (push) Successful in 1m59s
CI / Frontend QC (audit) (push) Successful in 55s
CI / Tests (prod) (push) Successful in 1m53s
CI / Frontend QC (typecheck) (push) Successful in 1m51s
CI / Tests (dev) (push) Successful in 2m19s
CI / Frontend QC (lint) (push) Successful in 2m43s
CI / Race (prod) (push) Successful in 3m51s
CI / Race (dev) (push) Failing after 6m44s
Replace with static names. Job names still use matrix templates (those work).

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-07-09 17:29:39 +01:00
popertotsandSisyphus ef26bd59e9 ci: fix go-version to 1.26 (no patch) and clean up step names
CI / Go vulnerabilities (push) Successful in 34s
CI / Build & Vet (push) Successful in 43s
CI / Frontend build (gate) (push) Successful in 54s
CI / Frontend QC (audit) (push) Successful in 1m4s
CI / Tests (prod) (push) Successful in 1m56s
CI / Tests (dev) (push) Successful in 1m55s
CI / Frontend QC (typecheck) (push) Successful in 2m38s
CI / Frontend QC (lint) (push) Successful in 2m41s
CI / Race (prod) (push) Successful in 5m8s
CI / Race (dev) (push) Successful in 6m58s
setup-go resolves '1.26' to latest patch (1.26.5). go.mod follows convention with minor version only. All CI steps now have descriptive names.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-07-09 17:22:23 +01:00
popertotsandSisyphus c344d6c54d chore: upgrade Go from 1.25.7 to 1.26.5
CI / Go vulnerabilities (push) Failing after 54s
CI / Frontend build (gate) (push) Successful in 59s
CI / Build & Vet (push) Successful in 1m40s
CI / Frontend audit (push) Successful in 39s
CI / Tests (prod) (push) Has been skipped
CI / Tests (dev) (push) Has been skipped
CI / Race (prod) (push) Has been skipped
CI / Race (dev) (push) Has been skipped
CI / Frontend typecheck (push) Successful in 1m0s
CI / Frontend lint (push) Successful in 1m23s
Go 1.26.5 released Jul 7, 2026. Includes security fix for GO-2026-5856 (crypto/tls ECH leak). Updates: CI runner (4x setup-go), go.mod, README, obsidian docs.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-07-09 17:11:49 +01:00
popertotsandSisyphus f59b7df97f ci: revert go-version to 1.25, add npm ci fallback in frontend QC jobs
CI / Go vulnerabilities (push) Successful in 33s
CI / Build & Vet (push) Successful in 43s
CI / Frontend build (gate) (push) Successful in 53s
CI / Frontend audit (push) Successful in 55s
CI / Frontend typecheck (push) Successful in 1m33s
CI / Tests (prod) (push) Successful in 2m9s
CI / Tests (dev) (push) Successful in 2m29s
CI / Frontend lint (push) Successful in 2m22s
CI / Race (prod) (push) Successful in 3m10s
CI / Race (dev) (push) Failing after 5m47s
1.25.12 unavailable in runner toolcache — revert to '1.25' which resolves to latest patch. The GO-2026-5856 vuln requires a Go patch release not yet available. Frontend QC jobs now run npm ci before their command since cache restore alone doesn't guarantee node_modules.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-07-09 17:07:17 +01:00
popertotsandSisyphus 7fd74dc65e ci: bump Go from 1.25 to 1.25.12 to fix GO-2026-5856
CI / Build & Vet (push) Failing after 25s
CI / Frontend build (gate) (push) Successful in 45s
CI / Go vulnerabilities (push) Successful in 46s
CI / Tests (prod) (push) Has been skipped
CI / Tests (dev) (push) Has been skipped
CI / Race (prod) (push) Has been skipped
CI / Race (dev) (push) Has been skipped
CI / Frontend typecheck (push) Failing after 7s
CI / Frontend lint (push) Failing after 8s
CI / Frontend audit (push) Successful in 9s
govulncheck found crypto/tls vuln fixed in 1.25.12. Bump all 4 setup-go instances.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-07-09 17:03:45 +01:00
popertotsandSisyphus 0a73c07f09 ci: split frontend into build gate then parallel typecheck/lint/audit
CI / Go vulnerabilities (push) Failing after 39s
CI / Build & Vet (push) Successful in 44s
CI / Tests (prod) (push) Has been skipped
CI / Tests (dev) (push) Has been skipped
CI / Race (prod) (push) Has been skipped
CI / Race (dev) (push) Has been skipped
CI / Frontend build (gate) (push) Successful in 55s
CI / Frontend typecheck (push) Failing after 10s
CI / Frontend lint (push) Failing after 12s
CI / Frontend audit (push) Successful in 13s
npm run build runs first as the gate. On success, typecheck, lint, and npm audit fire in parallel — all restoring node_modules from the build job's cache.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-07-09 17:02:21 +01:00
popertotsandSisyphus e5f823eecd ci: gate test and race behind both vet and vulns
CI / Go vulnerabilities (push) Failing after 41s
CI / Build & Vet (push) Successful in 46s
CI / Tests (prod) (push) Has been skipped
CI / Tests (dev) (push) Has been skipped
CI / Race (prod) (push) Has been skipped
CI / Race (dev) (push) Has been skipped
CI / Frontend lint & types (push) Successful in 1m20s
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-07-09 16:58:18 +01:00
popertotsandSisyphus 8326b15e72 ci: split dev/prod test and race jobs into parallel matrix
CI / Go vulnerabilities (push) Successful in 36s
CI / Build & Vet (push) Successful in 46s
CI / Frontend lint & types (push) Successful in 2m13s
CI / Tests (prod) (push) Successful in 1m28s
CI / Tests (dev) (push) Successful in 2m2s
CI / Race (prod) (push) Successful in 3m8s
CI / Race (dev) (push) Successful in 4m44s
Extract Build & Vet into a separate gate job. Use matrix strategy for test and race jobs so dev and prod variants run concurrently after vet passes. Cache keys include label to avoid collisions.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-07-07 00:15:25 +01:00
popertotsandSisyphus f4969645c4 chore: update CI, DB init, and documentation
CI / Go vulnerabilities (push) Successful in 37s
CI / Tests (push) Successful in 1m44s
CI / Frontend lint & types (push) Successful in 1m51s
CI / Race detector (push) Successful in 4m42s
Update CI workflow, PostgreSQL init script, README, and obsidian technical docs.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-07-07 00:10:18 +01:00
popertotsandSisyphus d8dfad2b32 ci: add Go and npm dependency caching via actions/cache
CI / Go vulnerabilities (push) Successful in 58s
CI / Tests (push) Successful in 1m53s
CI / Frontend lint & types (push) Successful in 2m12s
CI / Race detector (push) Successful in 3m59s
Add actions/cache@v4 to all four CI jobs. Go module cache (go/pkg/mod + go-build) keyed on go.sum for test, race, and vulns jobs. npm cache (~/.npm + node_modules) keyed on package-lock.json for frontend job. Cuts dependency download time to near-zero on cache hit.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-07-05 20:37:59 +01:00
popertots a00ed3c283 ci: re-add test and race jobs alongside lint and vulns
CI / Go vulnerabilities (push) Successful in 36s
CI / Tests (push) Successful in 1m34s
CI / Frontend lint & types (push) Successful in 1m41s
CI / Race detector (push) Failing after 3m30s
2026-06-25 19:39:09 +01:00
popertots 82e6f75354 ci: split govulncheck and frontend checks into parallel jobs
Lint & Vuln Scan / Go vulnerabilities (push) Successful in 22s
Lint & Vuln Scan / Frontend lint & types (push) Failing after 30s
2026-06-25 16:41:18 +01:00
popertots c481400215 ci: strip to lint/vulns only, fix Post-step node toolcache
Frontend Lint & Vulns / Lint & vulns (push) Successful in 1m19s
Remove test and race jobs until lint + vulns are fully green.
The node:22-alpine3.21 base image ships node at /usr/local/bin but
actions/setup-node expects it in the toolcache at /opt/hostedtoolcache.
Create a symlink so all Post-action cleanup steps (cache-save) find
node and don't exit 255.
2026-06-25 14:05:57 +01:00
popertots 3f0155597a ci: add CGO_ENABLED, build-base for race; auto-fix prettier before lint
Backend CI / Tests (push) Successful in 1m3s
Backend CI / Race detector (push) Successful in 1m47s
Backend CI / Lint & vulns (push) Failing after 3m21s
- Race job: install build-base (gcc) and set CGO_ENABLED=1 for Go's
  race detector on Alpine (requires cgo)
- Quality job: run npm run format (prettier --write) before lint to
  auto-fix formatting issues instead of failing CI for style nits
- Runner config on server updated to capacity: 8 (parallel jobs)
2026-06-25 13:15:15 +01:00
popertots a4a475a07d ci: fix quality job working-directory and adjust timeouts
Backend CI / Tests (push) Successful in 1m12s
Backend CI / Race detector (push) Failing after 21s
Backend CI / Lint & vulns (push) Failing after 27s
working-directory wasn't being honored for npm steps in the quality
job. Switch to explicit cd frontend && commands.

Reduce race timeout from 300s to 240s.
2026-06-25 13:03:50 +01:00
popertots aa875339b5 ci: add race detector, govulncheck, and frontend quality jobs
Backend CI / Tests (push) Successful in 59s
Backend CI / Race detector (push) Failing after 13s
Backend CI / Lint & vulns (push) Failing after 59s
Three parallel jobs:
- test: existing Go tests (unchanged)
- race: Go tests with -race flag (catches data races)
- quality: govulncheck + svelte-check + eslint/prettier (no PG needed)

Race job has its own PG service container so all three can run in parallel.
2026-06-25 12:57:15 +01:00