-
8075b4e1e1
docs: close QA-B0-04 (@ts-nocheck 38->8) in QA plan + CODE_STANDARDS
dev
null
2026-07-11 07:20:13 -0500
-
7ce5fb66f5
refactor(types): type-check server.cts + document the 8 intentional @ts-nocheck files
null
2026-07-11 07:17:55 -0500
-
1f6073823b
test(e2e): harden control census against count-driven label churn
null
2026-07-11 07:14:05 -0500
-
e0bc82b229
refactor(types): type-check batch 4 — transactions.cts (the 116-error monster)
null
2026-07-11 07:08:36 -0500
-
197fdd1733
refactor(types): type-check batch 3 — 4 large routes (bills/snowball/aboutAdmin/summary)
null
2026-07-11 07:03:23 -0500
-
6c915a62c8
refactor(types): type-check batch 2 — 7 medium routes + 2 real fixes
null
2026-07-11 06:57:41 -0500
-
345a159288
refactor(types): type-check batch 1 — 8 tail routes (spending/auth/dataSources/status/profile/import/notifications/categories)
null
2026-07-11 06:53:27 -0500
-
25404ec4ed
docs(qa): record /code-review outcome — 8 fixes + 5 backlog refactors (IMP-CODE-08..11, IMP-UX-03)
null
2026-07-10 22:58:41 -0500
-
a17ce13f07
fix(integrity): transaction-wrap three multi-statement writes + review cleanups
null
2026-07-10 22:57:10 -0500
-
2a07e762a2
fix: four review-confirmed regressions in auth + OIDC flows
null
2026-07-10 22:57:07 -0500
-
a00013d778
fix(ui): restore row-status tints lost in the tailwind 4 codemod
null
2026-07-10 22:49:35 -0500
-
044bdbe1f1
docs(qa): archive the 2026-07-10 recon+fix cycle; release v0.42.0
null
2026-07-10 22:31:18 -0500
-
787d3cf694
chore(ops): deploy checklist + standing dependency guards (Phase 8)
null
2026-07-10 22:24:42 -0500
-
64ab37ae39
test(e2e): census gets its own project, ordered before the mutating probes
null
2026-07-10 22:23:35 -0500
-
e7974cf4c0
Polish brand presentation
null
2026-07-10 19:49:20 -0500
-
562da73a76
Polish product artwork and branding
null
2026-07-10 19:10:42 -0500
-
92439e74e6
test(e2e): automated per-page control census (Phase 7, IMP-CODE-07)
null
2026-07-10 18:21:46 -0500
-
db539545e3
refactor(types): drop @ts-nocheck from the 9 smallest routes (Phase 6 starter)
null
2026-07-10 18:17:13 -0500
-
a31a774f95
chore: dead-code sweep — knip now clean and blocking in CI (Phase 5)
null
2026-07-10 18:15:04 -0500
-
10eaf73e90
chore(deps): pin typescript at 6.x (4k deferred) + oidc header comment v5 -> v6
null
2026-07-10 18:08:06 -0500
-
1627e75b29
chore(deps)!: openid-client 5 -> 6 (4j)
null
2026-07-10 18:05:57 -0500
-
522eaaf101
chore(deps)!: tailwind 3 -> 4 via @tailwindcss/vite (4i)
null
2026-07-10 18:03:15 -0500
-
d8365d0e22
chore(deps)!: vite 8 (rolldown) + @vitejs/plugin-react 6 (4h)
null
2026-07-10 17:53:27 -0500
-
a1b7011149
fix(standards): make the error-shape ratchet see require(); convert the 4 files it exposed
null
2026-07-10 17:53:24 -0500
-
bdff5ad932
refactor(routes/calendar): replace errorFormatter with ValidationError throws
null
2026-07-10 17:52:47 -0500
-
e9f52b7472
refactor(routes/user): replace errorFormatter with ApiError/ValidationError throws
null
2026-07-10 17:52:32 -0500
-
a325c94dd4
chore(brand): refresh SVG lockup + regenerate all PNG assets
null
2026-07-10 17:52:14 -0500
-
4e3523b2e7
chore(eslint): replace no-restricted-imports with no-restricted-syntax for require() compat
null
2026-07-10 17:51:59 -0500
-
b76772b8eb
chore(deps): eslint 10 stack — @eslint/js 10, react-hooks 7, react-refresh 0.5 (4f)
null
2026-07-10 17:36:50 -0500
-
8248575b1e
chore(deps): low-risk majors — bcryptjs 3, sonner 2, lucide-react 1.x, concurrently 10 (4e)
null
2026-07-10 17:35:39 -0500
-
af20d8de07
fix(deps)!: clear both high-severity vulns; CI audit gate raised to high
null
2026-07-10 17:34:51 -0500
-
94ed0b63f3
chore(deps): semver-safe update sweep (4a)
null
2026-07-10 17:33:34 -0500
-
55b2baee5f
release: v0.41.1 — passkeys shipped + QA blind-spot fixes + standards unification
null
2026-07-10 17:31:27 -0500
-
88a32a983f
feat(auth): passkey / security-key UI — WebAuthn ships end to end
null
2026-07-10 17:30:14 -0500
-
68ca7cbb43
feat(standards): enforcement ratchets — error-shape + no-console; client toApiError
null
2026-07-10 17:20:42 -0500
-
c481a5bdbf
refactor(routes): throw-pattern for profile, transactions, admin, aboutAdmin
null
2026-07-10 17:18:28 -0500
-
d0ab375f9a
refactor(auth): throw-pattern for auth.cts (login, TOTP, WebAuthn flows)
null
2026-07-10 17:06:08 -0500
-
c0c3c2f347
refactor(routes): throw-pattern for bills.cts (largest route, 43+ sites)
null
2026-07-10 17:00:01 -0500
-
543e94288e
refactor(routes): throw-pattern for payments + subscriptions
null
2026-07-10 16:53:20 -0500
-
c4219b6020
refactor(routes): throw-pattern for summary, matches, snowball, dataSources
null
2026-07-10 16:44:19 -0500
-
a8f8446743
fix(routes): stop leaking raw err.message on 5xx responses
null
2026-07-10 16:36:27 -0500
-
9efa74e12b
fix(client): redirect to login when the session expires mid-use
null
2026-07-10 16:33:01 -0500
-
e73f51e91b
fix(version): sync package.json to v0.41.0 + guard against future drift
null
2026-07-10 16:30:41 -0500
-
73915d38ce
refactor(auth): remove dead duplicate admin routes from auth.cts
null
2026-07-10 16:30:04 -0500
-
3c82c30f3c
fix(auth): handle requires_webauthn in POST /login — was a 500 self-lockout
null
2026-07-10 16:29:08 -0500
-
d9545d6fd5
refactor(categories): adopt Kysely for the /groups query (real production use)
null
2026-07-06 16:25:30 -0500
-
35a0e4262e
feat(db): Kysely typed-SQL POC — sync builder, proven parity (Pillar E)
null
2026-07-06 16:23:50 -0500
-
0cad1626b1
test(money): property-based proof of cent-exact invariants (fast-check, Pillar F)
null
2026-07-06 16:08:50 -0500
-
b4634a8080
feat(logging): redacted, level-gated logger; migrate all server console.* (Pillar D)
null
2026-07-06 16:05:18 -0500
-
a75ff1a466
refactor(routes): monthly-starting-amounts → throw pattern; doc exemplar
null
2026-07-06 15:03:52 -0500
-
3b016d4876
refactor(routes): version → throw pattern; keep graceful update-status fallback
null
2026-07-06 15:01:35 -0500
-
59c2917e1d
refactor(routes): analytics + tracker → throw pattern (batch 1)
null
2026-07-06 14:59:29 -0500
-
26d976e272
feat(config): boot-time env validation — fail-fast + prod key warning (Pillar D)
null
2026-07-06 14:51:04 -0500
-
7390c458ed
refactor(routes): categories → uniform Express-5 throw pattern (Pillar B template)
null
2026-07-06 14:46:32 -0500
-
aee23d6025
feat(security): CI secret-scan + dep-audit, SECURITY.md, auth-coverage test (Pillar C)
null
2026-07-06 14:40:17 -0500
-
e7196abbdf
fix(security): patch react-router open-redirect (non-breaking audit fix)
null
2026-07-06 14:36:18 -0500
-
5ad3c4e18e
refactor(errors): one canonical error handler + process resilience (Pillar B)
null
2026-07-06 14:33:38 -0500
-
88674fa2f5
docs(standards): add CODE_STANDARDS.md + CONTRIBUTING.md
null
2026-07-06 14:28:05 -0500
-
5aaf292b2e
ci(enforce): run the full gate in CI + add lefthook pre-commit + Knip
null
2026-07-06 14:27:03 -0500
-
f587d09d4a
style: apply Prettier across client + server (no behavior change)
null
2026-07-06 14:23:53 -0500
-
f65138a114
chore(tooling): add Prettier + editorconfig, extend ESLint to the server
null
2026-07-06 14:23:53 -0500
-
c41f1a8a7b
feat(tracker): status row border-left indicators, refined metric cards, search filter, and CSS polish
null
2026-07-06 13:47:34 -0500
-
df1f61d6cc
feat(brand): render the real product glyph SVGs (not inline approximations)
null
2026-07-06 13:32:37 -0500
-
1238ac5b14
feat(demo): full "take it for a ride" seed + surgical, correct removal
null
2026-07-06 13:06:47 -0500
-
b25be070ed
Add complete brand asset pack
null
2026-07-06 12:54:29 -0500
-
40dfd6e3c1
Polish tracker command header
null
2026-07-06 12:54:11 -0500
-
23f79c31e0
feat(ui): layout refinements — sidebar, nav pill, command palette, brand block
null
2026-07-06 12:28:25 -0500
-
f71b433323
feat(ui): refine OnboardingWizard, LoginPage, and SettingsPage
null
2026-07-06 12:22:47 -0500
-
3a14c50e08
chore(brand): update PWA icons, release notes, and About page
null
2026-07-06 12:13:01 -0500
-
abb9f7d443
fix(migration): repair server.js/.cts launch + require refs missed in the JS→TS migration
null
2026-07-06 12:05:24 -0500
-
20d2e8965b
refactor(server): migrate app entry point to TypeScript (.cts) — server migration 100%
null
2026-07-06 11:41:56 -0500
-
135bd98c6a
refactor(server): migrate middleware, workers, and db layer to TypeScript (.cts)
null
2026-07-06 11:34:08 -0500
-
866ba52890
refactor(server): migrate all 29 route controllers to TypeScript (.cts)
null
2026-07-06 11:26:50 -0500
-
409b8a5618
refactor(server): finish services layer — subscription/spreadsheet/oidc/userDbImport → .cts
null
2026-07-06 11:22:44 -0500
-
99e4927640
refactor(server): migrate csvTransactionImportService to TypeScript (.cts)
null
2026-07-06 11:20:29 -0500
-
310eb07b9b
refactor(server): migrate trackerService to TypeScript (.cts)
null
2026-07-06 11:16:14 -0500
-
0db5a77adc
refactor(server): migrate billsService + notificationService to TypeScript (.cts)
null
2026-07-06 11:12:06 -0500
-
6746d42380
refactor(server): migrate 5 more services to TypeScript (.cts)
null
2026-07-06 11:06:05 -0500
-
5fbc793bcb
refactor(server): migrate 6 more services to TypeScript (.cts)
null
2026-07-06 11:00:01 -0500
-
3f891602f9
refactor(server): migrate 6 mid-tier services to TypeScript (.cts)
null
2026-07-06 10:54:10 -0500
-
a6c9b6cb1c
refactor(server): migrate 8 leaf services + apiError to TypeScript (.cts)
null
2026-07-06 10:47:16 -0500
-
005b0b7b64
refactor(server): migrate 10 services to TypeScript (.cts)
null
2026-07-06 10:35:29 -0500
-
343cc3a36f
feat(tracker): persist Overdue/Drift panel collapse + inline hide
null
2026-07-06 10:34:39 -0500
-
384748feeb
chore(gitignore): ignore QA_DB_SETUP.md (sensitive info)
null
2026-07-06 09:31:25 -0500
-
f909e8f587
fix(docker): regenerate lockfile with npm 10 so `npm ci` works in build
null
2026-07-05 19:44:23 -0500
-
1457de487f
feat(security): show a key fingerprint (not the key) in the encryption status
null
2026-07-05 19:15:32 -0500
-
f3f46a73f0
chore(deploy): harden Docker/compose from the deployment audit
null
2026-07-05 18:54:50 -0500
-
a03216ee55
perf(simplefin): batch sync writes in a transaction + align dedup key
null
2026-07-05 18:54:34 -0500
-
4638d24a1d
fix(payoff): correctness, data-integrity & clarity of the payoff simulator
null
2026-07-05 18:09:12 -0500
-
c9d90a125f
docs(brand): add BRAND.md guidelines
null
2026-07-05 17:50:18 -0500
-
68e57cf45b
chore(brand): favicon + PWA manifest follow the new SVG lockup
null
2026-07-05 17:50:11 -0500
-
1c04dfdf8c
feat(brand): BrandMark/Wordmark/Lockup consume the new SVGs
null
2026-07-05 17:50:04 -0500
-
720d31b56e
feat(brand): SVG lockups + mark + social preview assets
null
2026-07-05 17:49:55 -0500
-
4b81600afe
fix(brand): finish the "BillTracker" → "Bill Tracker" rename (display copy)
null
2026-07-05 17:31:14 -0500
-
ecd907e508
refactor: remove orphan StatusBadge.tsx (dead-code audit follow-up)
null
2026-07-05 17:22:49 -0500
-
86733d457a
refactor: remove verified dead code — orphan file, dead HOC, unused api wrappers
null
2026-07-05 17:21:31 -0500
-
3de91af13d
docs: HISTORY + README track the v0.42.0 brand refresh
null
2026-07-05 17:19:17 -0500
-
8ceea06659
chore(lib): trackerUtils + version track the brand refresh
null
2026-07-05 17:19:10 -0500
-
1807456da7
refactor(brand): adopt new primitives in admin + data + dialogs
null
2026-07-05 17:19:03 -0500
-
0eb024de74
refactor(brand): adopt new primitives in pages
null
2026-07-05 17:18:56 -0500