This website requires JavaScript.
df191d1e03
fix(security): rate-limit public invite and password-reset endpoints
Hartmut and Claude Sonnet 4.6
2026-04-09 21:38:08 +02:00
9e31c6d972
fix(security): harden cron and API route authentication
Hartmut and Claude Sonnet 4.6
2026-04-09 21:38:02 +02:00
3452464809
fix(security): invalidate sessions on password change and remove hash from permission API responses
Hartmut and Claude Sonnet 4.6
2026-04-09 21:37:56 +02:00
ebeb180f3f
fix(ui): make project detail and scenario pages full width
Hartmut and Claude Sonnet 4.6
2026-04-09 21:14:42 +02:00
5cc177ccf9
fix(dashboard): prevent stale DB data from overwriting newer localStorage layout
Hartmut and Claude Sonnet 4.6
2026-04-09 21:14:36 +02:00
c784b4b378
fix(infra): wait for postgres readiness before running migrations on container start
Hartmut and Claude Sonnet 4.6
2026-04-09 21:14:31 +02:00
43de66e982
feat(api): add audit helpers, tool registry, shared tool manifest types, and UI primitives
Hartmut and Claude Sonnet 4.6
2026-04-09 21:14:26 +02:00
1a67af6761
fix(dashboard): measure grid container width after hydration completes, not just on mount
Hartmut
2026-04-09 20:58:57 +02:00
5ad1048519
feat(dashboard): expand grid to 16 columns with auto-migration for saved 12-col layouts
Hartmut
2026-04-09 20:50:40 +02:00
446aea5319
feat(dashboard): combine vertical + horizontal compaction for gap-free widget layout
Hartmut
2026-04-09 20:42:49 +02:00
4eac7b1888
fix(infra): apply missing migrations, fix Dockerfile.dev ui package reference
Hartmut
2026-04-09 20:29:21 +02:00
4875096b13
fix(dashboard): restore vertical compaction so widgets auto-align when dragged
Hartmut
2026-04-09 20:19:24 +02:00
c83bd5f97f
Merge branch 'worktree-agent-a8de1898' - Phase 2A entitlement use-cases
Hartmut
2026-04-09 20:16:38 +02:00
999626cf70
feat(application): extract entitlement use-cases from API router layer
Hartmut and Claude Sonnet 4.6
2026-04-09 20:14:35 +02:00
1a8ea11331
feat(db): add deletedAt audit timestamp to soft-deletable models
Hartmut and Claude Sonnet 4.6
2026-04-09 20:03:38 +02:00
f7407bd882
fix(api): add centralized Prisma → TRPCError middleware on protectedProcedure
Hartmut and Claude Sonnet 4.6
2026-04-09 19:58:00 +02:00
245b59723a
fix(api): update resource-router tests for select-based listStaff queries
Hartmut and Claude Sonnet 4.6
2026-04-09 19:33:58 +02:00
db83933ea1
Merge branch 'worktree-agent-aed43cff'
Hartmut
2026-04-09 19:31:50 +02:00
36900a1219
Merge branch 'worktree-agent-a7de1005'
Hartmut
2026-04-09 19:31:11 +02:00
6c7245db93
test(e2e): add Playwright tests for core workflows
Hartmut and Claude Sonnet 4.6
2026-04-09 19:30:43 +02:00
6f3bdd81e8
perf(api): add explicit Prisma selects on hot read paths
Hartmut and Claude Sonnet 4.6
2026-04-09 19:24:55 +02:00
d737a251b2
fix(api): replace ctx.session.user lookups with ctx.dbUser
Hartmut and Claude Sonnet 4.6
2026-04-09 19:18:39 +02:00
d7a35b2d7a
feat(web): add React error boundaries and Next.js error.tsx fallbacks
Hartmut and Claude Sonnet 4.6
2026-04-09 19:16:26 +02:00
070be70848
refactor(application): extract vacation management into application use-cases
Hartmut and Claude Sonnet 4.6
2026-04-09 17:11:37 +02:00
6bf60c8e07
feat(web): persist list-page filters in URL search params
Hartmut and Claude Sonnet 4.6
2026-04-09 17:00:30 +02:00
7264f0728a
perf(timeline): add useCallback/useMemo to timeline components
Hartmut and Claude Sonnet 4.6
2026-04-09 16:54:38 +02:00
dda049075f
refactor(application): extract vacation management into application use-cases
Hartmut and Claude Sonnet 4.6
2026-04-09 16:49:45 +02:00
485e220c49
fix(api,web): env startup validation, QueryClient defaults, warn on missing REDIS_URL
Hartmut and Claude Sonnet 4.6
2026-04-09 16:42:34 +02:00
3c0179fcec
fix(api): wrap audit log writes inside their parent transactions
Hartmut and Claude Sonnet 4.6
2026-04-09 16:40:10 +02:00
a01f99561d
fix(api): fix import paths missed by router reorganisation
Hartmut and Claude Sonnet 4.6
2026-04-09 14:47:16 +02:00
1a8ed97d5e
Merge branch 'worktree-agent-a2939317'
Hartmut
2026-04-09 14:44:51 +02:00
b2c8d98b25
refactor(api): reorganise allocation router into allocation/ subdirectory
Hartmut and Claude Sonnet 4.6
2026-04-09 14:44:17 +02:00
75167d6129
fix(merge): resolve post-merge type errors from batch-1 agents
Hartmut and Claude Sonnet 4.6
2026-04-09 14:38:32 +02:00
0fcb481350
Merge branch 'worktree-agent-a90e1bc2'
Hartmut
2026-04-09 14:19:18 +02:00
b573a1d554
Merge branch 'worktree-agent-a74dc5bc'
Hartmut
2026-04-09 14:18:50 +02:00
a2613f6e93
Merge branch 'worktree-agent-a0063a64'
Hartmut
2026-04-09 14:18:47 +02:00
96679f5fec
Merge branch 'worktree-agent-acdb74a3'
Hartmut
2026-04-09 14:18:27 +02:00
b9fd7fdb03
perf(staffing): replace day-by-day capacity loop with range arithmetic
Hartmut and Claude Sonnet 4.6
2026-04-09 14:17:26 +02:00
fbca017eaa
test(application): add unit tests for demand fill logic and capacity vacation overlap
Hartmut and Claude Sonnet 4.6
2026-04-09 14:15:00 +02:00
9a42615a21
fix(api): add Zod bounds on financial fields, type vacation router, type scenarioData
Hartmut and Claude Sonnet 4.6
2026-04-09 14:08:16 +02:00
aebe5bc57d
fix(db): add SetNull cascade on Assignment→DemandRequirement + composite indexes
Hartmut and Claude Sonnet 4.6
2026-04-09 14:03:11 +02:00
f3cb75bfc7
feat(mobile): add mobile summary view for 320-428px viewports (Sprint 4c)
Hartmut and Claude Sonnet 4.6
2026-04-09 13:37:08 +02:00
ab4ec91e02
feat(digest): add weekly capacity digest email cron
Hartmut and Claude Sonnet 4.6
2026-04-09 13:33:12 +02:00
607af1a857
feat(bench): add Resource Bench Board page
Hartmut and Claude Sonnet 4.6
2026-04-09 13:30:44 +02:00
1df208dbcc
feat(timeline): add pulse animation for in-flight drag mutations
Hartmut and Claude Sonnet 4.6
2026-04-09 13:28:46 +02:00
7a5e98e2e9
perf(timeline): add horizontal virtualization for allocation bars
Hartmut and Claude Sonnet 4.6
2026-04-09 13:26:38 +02:00
e75d966b8d
feat(timeline): add inline allocation editor on double-click
Hartmut and Claude Sonnet 4.6
2026-04-09 13:24:43 +02:00
fa54ef4cbd
feat(timeline): add keyboard navigation with shortcut overlay
Hartmut and Claude Sonnet 4.6
2026-04-09 13:20:32 +02:00
05f6eba5d8
refactor(staffing): decompose 735-line StaffingPanel into focused components
Hartmut and Claude Sonnet 4.6
2026-04-09 13:17:55 +02:00
594ae4f10b
feat(allocations): add Excel export button to allocations toolbar
Hartmut and Claude Sonnet 4.6
2026-04-09 13:14:58 +02:00
7435fdc125
feat(timeline): Sprint 2b — AI staffing suggestions in DemandPopover
Hartmut and Claude Sonnet 4.6
2026-04-09 13:11:36 +02:00
16ce6db07e
feat(allocations): Sprint 2a — bulk date shift via BatchActionBar
Hartmut and Claude Sonnet 4.6
2026-04-09 13:10:06 +02:00
6831e199c6
feat(ux): Sprint 1 — quick wins: EmptyState, DateRangePresets, debounce, save feedback, scenarios nav
Hartmut and Claude Sonnet 4.6
2026-04-09 13:08:19 +02:00
a16c41e739
fix(dashboard): show skeleton instead of default layout until hydration completes
Hartmut and Claude Sonnet 4.6
2026-04-09 10:20:50 +02:00
24435a1824
test(allocation): add conflict check tests for checkConflicts query
Hartmut and Claude Sonnet 4.6
2026-04-09 10:20:37 +02:00
3e8df09cd8
feat(web): overbooking and vacation conflict warnings in AllocationModal
Hartmut and Claude Sonnet 4.6
2026-04-09 10:15:37 +02:00
61e52e9995
feat(api,application): add checkConflicts query and soften overbooking block
Hartmut and Claude Sonnet 4.6
2026-04-09 10:13:18 +02:00
b944a17572
feat(db,shared): add overbookingAcknowledged field and conflict check types
Hartmut and Claude Sonnet 4.6
2026-04-09 10:11:02 +02:00
60d267fa0a
feat(api): add SSE subscriber isolation, token pruning and E2E rate-limit guard
Hartmut and Claude Sonnet 4.6
2026-04-09 08:35:39 +02:00
472d87c829
feat(web): add error boundaries, loading skeletons, render fixes and tree-shaking
Hartmut and Claude Sonnet 4.6
2026-04-09 08:35:28 +02:00
1204c186ef
perf(api): eliminate N+1 queries, add query guards and missing indexes
Hartmut and Claude Sonnet 4.6
2026-04-09 08:35:13 +02:00
1d6d75ecf6
fix(api): wrap critical mutations in transactions and fix TOCTOU race conditions
Hartmut and Claude Sonnet 4.6
2026-04-09 08:34:59 +02:00
b103e79e92
feat(ux): prevent wizard close on backdrop click
Hartmut and Claude Sonnet 4.6
2026-04-07 16:09:22 +02:00
4accee95a4
refactor(dispo): clean up validate UI in NewImportModal
Hartmut and Claude Sonnet 4.6
2026-04-07 16:06:58 +02:00
444fa70a19
fix(ui): remove !important amber-50 dark override from globals.css
Hartmut and Claude Sonnet 4.6
2026-04-06 10:39:34 +02:00
f89da5d93b
fix(ui): use amber-950/30 for pending approvals dark background (not gray-800)
Hartmut and Claude Sonnet 4.6
2026-04-06 10:34:49 +02:00
813b21d1a0
fix(ui): add dark mode styles to amber warning boxes app-wide
Hartmut and Claude Sonnet 4.6
2026-04-06 10:28:35 +02:00
d2caba8d7c
fix(test): use relative dates in insights summary test
Hartmut and Claude Sonnet 4.6
2026-04-06 09:40:14 +02:00
8f464f2150
feat(dispo): add dry-run Validate button to New Import modal
Hartmut and Claude Sonnet 4.6
2026-04-06 09:32:23 +02:00
bdb55f23d3
fix(insights): suppress AI credentials warning during loading state
Hartmut and Claude Sonnet 4.6
2026-04-06 09:05:00 +02:00
a9ad1ed8b6
feat(G-08): chapter field uses live datalist from resource.chapters
Hartmut and Claude Sonnet 4.6
2026-04-06 08:10:36 +02:00
4a49ec4f05
fix(sanity): resolve 15 gaps from sanity check audit (G-01 through G-15)
Hartmut and Claude Sonnet 4.6
2026-04-06 00:11:12 +02:00
fba65387fe
feat(resources): add hard-delete action to resource list (per-row and batch)
Hartmut and claude-flow
2026-04-03 23:18:30 +02:00
f5e41f7efe
fix(ux): improve empty-state messaging for tickets #49 and #57
Hartmut and claude-flow
2026-04-03 17:51:14 +02:00
bc0bb5bdb8
test: add coverage for gitlooper ticket sweep
Hartmut and claude-flow
2026-04-03 17:33:27 +02:00
9241f22993
fix(ux): resolve tickets #58 #60 — wizard review labels and assignment CTA clarity
Hartmut and claude-flow
2026-04-03 16:17:16 +02:00
2da29c8191
fix(ux): resolve tickets #59 #66 #67 — project feedback and demand summary
Hartmut and claude-flow
2026-04-03 16:05:29 +02:00
b7bb6d05af
fix(nav): redirect /blueprints to /admin/blueprints (#52 )
Hartmut and claude-flow
2026-04-03 15:46:38 +02:00
65db330a4d
fix(ux): resolve tickets #55 #56 — resource modal stability and success feedback
Hartmut and claude-flow
2026-04-03 15:43:12 +02:00
0d0707264d
feat(admin): hard-delete resources (admin-only)
Hartmut and claude-flow
2026-04-03 15:23:30 +02:00
3979d342c8
fix(ux): resolve tickets #51 #53 #54 from gitlooper sweep
Hartmut and claude-flow
2026-04-03 12:27:43 +02:00
aef4c61dcc
test(e2e): add nav-smoke spec covering all 35 sidebar routes (#50 )
Hartmut and claude-flow
2026-04-03 12:11:37 +02:00
5a8dc6c166
fix: resolve 3 UX bugs from gitlooper ticket sweep (#45 #47 #48 )
Hartmut and claude-flow
2026-04-03 11:25:42 +02:00
339ae47540
docs: learning — Auth.js v5 Edge split + session expiry redirect pattern
Hartmut
2026-04-03 10:42:31 +02:00
bf8577dbaf
feat(auth): proactive session expiry redirect across all delivery paths
Hartmut and claude-flow
2026-04-03 10:42:10 +02:00
ed4d4e4640
test(api): fill router auth and security coverage gaps
Hartmut and claude-flow
2026-04-02 23:31:26 +02:00
1d02afddfd
ci(e2e): add Playwright smoke tests to deploy-test workflow
Hartmut and claude-flow
2026-04-02 23:25:12 +02:00
0f7d70cac8
docs(learnings): record Gitea API token location and usage patterns
Hartmut and claude-flow
2026-04-02 23:07:33 +02:00
8c9ba5363c
docs: mark P1 timeline/SSE/scenario work complete in plan and roadmap
Hartmut and claude-flow
2026-04-02 21:34:15 +02:00
e3c585a403
test(scenario): add unit regression coverage for all four scenario modules
Hartmut and claude-flow
2026-04-02 21:30:46 +02:00
1ec56aac13
docs: expand .env.example with full documented variable reference
Hartmut and claude-flow
2026-04-02 21:28:51 +02:00
e7e525df49
fix(timeline): clear multi-select on drag start and lock in SSE edge-case coverage
Hartmut and claude-flow
2026-04-02 21:16:10 +02:00
8d9e26872b
fix(timeline): stabilize popovers on internal scroll + expand test coverage
Hartmut and claude-flow
2026-04-02 20:49:08 +02:00
d4641e27aa
feat: first-run setup wizard, CLI seed script, and installation docs
Hartmut and claude-flow
2026-04-02 20:45:15 +02:00
41eb722369
feat: user invite flow, deactivate/delete, favicon, dashboard loading fix, admin full-width
Hartmut and claude-flow
2026-04-02 20:19:26 +02:00
dc5bbdc47d
feat: centralize app base URL — no localhost fallback in production
Hartmut and claude-flow
2026-04-02 14:19:19 +02:00
7c0110df91
fix(e2e): make email E2E tests green end-to-end
Hartmut and claude-flow
2026-04-02 13:53:47 +02:00
fceceeee4b
feat: SMTP full ENV override, password reset flow, and E2E email testing
Hartmut and claude-flow
2026-04-02 08:55:39 +02:00
e5ecea81c5
fix(auth): resolve MFA post-activation login failures — tickets #38 #40 #41
Hartmut and claude-flow
2026-04-02 00:20:47 +02:00
435c871e1f
security: implement tickets #28-#35 + architecture decision #30
Hartmut and claude-flow
2026-04-01 23:25:06 +02:00