Hartmut
a3d75973ee
test(web): add 291 tests for parsers, hooks, and UI components
...
Lib utilities: scopeImportParser (31), status-styles (58),
planningEntryIds (10), uuid (11).
Hooks: useFilters (28), useRowOrder (18), usePermissions (30),
useViewPrefs (24).
Components: AnimatedModal (14), DateInput (22), InfoTooltip (13),
ProgressRing (19).
Web test suite: 75 → 87 files, 553 → 844 tests.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-04-10 17:14:11 +02:00
Hartmut
98dca6126f
test(web): add 210 tests for lib utils, hooks, and UI components
...
Lib utilities: format (38), sanitize (12), project-colors (18),
csv-export (14).
Hooks: useDebounce (8), useTableSort (22), useLocalStorage (18),
useColumnConfig (19).
Components: BatchActionBar (17), SortableColumnHeader (14),
FilterChips (14), ErrorBoundary (16).
Web test suite: 63 → 75 files, 343 → 553 tests.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-04-10 17:11:00 +02:00
Hartmut
c0ba062460
test(web): add 57 UI component and hook tests with jsdom cleanup
...
Fix jsdom environment: add esbuild automatic JSX transform and
afterEach cleanup to prevent DOM leakage between tests.
Components: Badge (8), Button (13), FilterBar (5), EmptyState (8),
ConfirmDialog (8), useSelection hook (15).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-04-10 17:06:42 +02:00
Hartmut
82acc56b8d
chore: add pre-commit hooks, tighten ESLint, activate Sentry DSN, publish CI coverage (Phase 1)
...
- Install husky v9 + lint-staged: pre-commit runs eslint --fix and prettier on staged files
- Tighten ESLint base config: no-console→error, ban-ts-comment (ts-ignore banned, ts-expect-error with description allowed), reportUnusedDisableDirectives→error
- Migrate web app from deprecated `next lint` to `eslint src/` with flat config and react-hooks plugin
- Convert all 5 @ts-ignore to @ts-expect-error with descriptions, remove stale disable comments
- Add NEXT_PUBLIC_SENTRY_DSN to docker-compose.prod.yml and .env.example
- Add coverage artifact upload step to CI test job
- Pre-existing violations (102 warnings) downgraded to warn in web config for Phase 2 cleanup
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-10 14:49:29 +02:00
Hartmut
05aa864359
refactor(ui): replace inline INPUT_CLS/LABEL_CLS/BTN_DANGER constants and action link classes with CSS component classes
...
Remove duplicated Tailwind class string constants from 15 component files.
Use app-input, app-select, app-label, app-action-danger-btn, and
app-action-delete CSS component classes from globals.css instead.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-10 09:21:03 +02:00
Hartmut
9b5cd8549d
refactor(ui): replace inline INPUT_CLS/BTN_DANGER/action link constants with component classes
...
- Replace 13 local INPUT_CLS/SELECT_CLS/LABEL_CLS/BTN_DANGER constants with
app-input, app-select, app-label, app-action-danger-btn component classes
(CustomFieldFilterBar, RolePresetsEditor, FieldCard, BlueprintFieldCatalog,
BlueprintFieldEditor, BlueprintsClient, EstimateWizard, EstimateWorkspace-
DraftEditor, DemandLineEditor, ScopeItemEditor, AssumptionEditor,
ProjectWizard, BulkEditModal)
- Replace inline text-blue-600/text-red-500 action link strings with
app-action-edit / app-action-delete in AllocationsClient, ProjectsClient,
ScenarioPlanner, ProjectDemandsTable, RolesClient, BlueprintsClient,
CreateTaskModal, RateCardsClient, UsersClient, ManagementLevelsClient
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-10 07:02:08 +02:00
Hartmut
d1a21a79b2
fix(ui): comprehensive dark-theme hardcoded color pass
...
Phase 1 — globals.css: add ~45 new dark-mode override rules covering 250+
component instances at once:
- bg-*-50 (red/green/blue/yellow/amber/purple/indigo/orange/brand/emerald)
- border-*-200 (colored alert/badge borders)
- hover:bg-*-50/100 (colored hover states)
- text-amber-700/orange-600/green-600/emerald-700/brand-700 (missing overrides)
- divide-gray-50 (ChargeabilityWidget sticky section dividers)
Phase 2 — targeted component fixes:
- Button.tsx: add dark variants to secondary (bg-gray-800) and ghost variants
- DynamicFieldEditor.tsx: add dark variants to INPUT_NORMAL and INPUT_ERROR constants
- WidgetContainer.tsx: replace slate-900 (blue-tinted) gradient with neutral
surface-card values (rgb 22,23,26 / 16,17,19)
- status-styles.ts: add explicit dark variants to PROJECT_STATUS_BADGE and
ORDER_TYPE_BADGE (consistent with other badge maps in same file)
Phase 3 — dashboard widget tables:
- TopValueWidget: dark thead, tbody divider, row hover
- DemandWidget: dark thead, tbody divider, row hover
- ChargeabilityWidget: dark sticky h3 headers (bg-white→surface-card),
border-gray-100 thead rows, divide-gray-50 tbodys
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-09 22:37:43 +02:00
Hartmut
43de66e982
feat(api): add audit helpers, tool registry, shared tool manifest types, and UI primitives
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-09 21:14:26 +02:00
Hartmut
36900a1219
Merge branch 'worktree-agent-a7de1005'
2026-04-09 19:31:11 +02:00
Hartmut
d7a35b2d7a
feat(web): add React error boundaries and Next.js error.tsx fallbacks
...
Runtime errors in components now show a friendly "Something went wrong"
screen instead of a white page. Timeline and staffing panel are
individually wrapped. Route-level error.tsx handles server component errors.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-09 19:16:26 +02:00
Hartmut
1df208dbcc
feat(timeline): add pulse animation for in-flight drag mutations
...
Allocation bars that have active optimistic overrides (post-drag,
awaiting server confirmation) now pulse subtly via animate-pulse.
The pending set is derived from the existing optimisticAllocations
map keys, requiring no additional state.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-09 13:28:46 +02:00
Hartmut
6831e199c6
feat(ux): Sprint 1 — quick wins: EmptyState, DateRangePresets, debounce, save feedback, scenarios nav
...
- EmptyState shared component; replace AllocationsClient inline empty state
- DateRangePresets (this month/quarter/3 months/year) integrated into AllocationModal
- Debounce conflict-check inputs in AllocationModal (400ms) using existing useDebounce
- Dashboard layout save feedback via SuccessToast after DB write completes
- Scenarios nav item in Planning sidebar + /scenarios list page
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-09 13:08:19 +02:00
Hartmut
b103e79e92
feat(ux): prevent wizard close on backdrop click
...
AnimatedModal: add disableBackdropClose prop (default false, no impact
on existing consumers). When true, overlay onClick is removed.
ProjectWizard: remove handleBackdropClick — backdrop click no longer
closes the wizard. Only the X button and Cancel close it.
EstimateWizard already had no backdrop-click handler; no change needed.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-07 16:09:22 +02:00
Hartmut
8c5be51251
feat(platform): checkpoint current implementation state
2026-04-01 07:42:03 +02:00
Hartmut
ea2efabd7f
fix(web): portal autocomplete overlays
2026-03-30 14:14:15 +02:00
Hartmut
9268a38df4
fix(web): restore comment typing and portal combobox menus
2026-03-30 13:32:51 +02:00
Hartmut
5b60cf5553
fix(web): portal skill tag suggestions
2026-03-30 13:29:28 +02:00
Hartmut
819345acfa
feat(platform): harden access scoping and delivery baseline
2026-03-30 00:27:31 +02:00
Hartmut
4f48afe7b4
feat(planning): ship holiday-aware planning and assistant upgrades
2026-03-28 22:49:28 +01:00
Hartmut
cd78f72f33
chore: full technical rename planarchy → capakraken
...
Complete rename of all technical identifiers across the codebase:
Package names (11 packages):
- @planarchy/* → @capakraken/* in all package.json, tsconfig, imports
Import statements: 277 files, 548 occurrences replaced
Database & Docker:
- PostgreSQL user/db: planarchy → capakraken
- Docker volumes: planarchy_pgdata → capakraken_pgdata
- Connection strings updated in docker-compose, .env, CI
CI/CD:
- GitHub Actions workflow: all filter commands updated
- Test database credentials updated
Infrastructure:
- Redis channel: planarchy:sse → capakraken:sse
- Logger service name: planarchy-api → capakraken-api
- Anonymization seed updated
- Start/stop/restart scripts updated
Test data:
- Seed emails: @planarchy.dev → @capakraken.dev
- E2E test credentials: all 11 spec files updated
- Email defaults: @planarchy.app → @capakraken.app
- localStorage keys: planarchy_* → capakraken_*
Documentation: 30+ .md files updated
Verification:
- pnpm install: workspace resolution works
- TypeScript: only pre-existing TS2589 (no new errors)
- Engine: 310/310 tests pass
- Staffing: 37/37 tests pass
Co-Authored-By: claude-flow <ruv@ruv.net >
2026-03-27 13:18:09 +01:00
Hartmut
66878f18f4
feat: Activity History system — full audit coverage, UI, AI tools
...
Infrastructure (Phase 1):
- AuditLog schema: add source, entityName, summary fields + index
- createAuditEntry() helper: auto-diff, auto-summary, fire-and-forget
- auditLog query router: list, getByEntity, getTimeline, getActivitySummary
Audit Coverage (Phase 2 — 14 routers, 50+ mutations):
- vacation: create, approve, reject, cancel, batch ops (8 mutations)
- user: create, updateRole, setPermissions, resetPermissions (5 mutations)
- entitlement: set, bulkSet (3 mutations)
- client: create, update, delete, batchUpdateSortOrder
- org-unit: create, update, deactivate
- country: create, update, createCity, updateCity, deleteCity
- management-level: createGroup, updateGroup, createLevel, updateLevel, deleteLevel
- settings: updateSystemSettings (sensitive fields sanitized), testSmtp
- blueprint: create, update, updateRolePresets, delete, batchDelete, setGlobal
- rate-card: create, update, deactivate, addLine, updateLine, deleteLine, replaceLines
- calculation-rules: create, update, delete
- effort-rule: create, update, delete
- experience-multiplier: create, update, delete
- utilization-category: create, update
Admin UI (Phase 3):
- /admin/activity-log page with global searchable timeline
- Filters: entity type, action, user, date range, text search
- Expandable before/after diff view per entry
- Summary cards showing top entity types by change count
- EntityHistory reusable component for entity detail pages
- Sidebar nav link with clock icon
AI Assistant (Phase 4):
- query_change_history tool: "Who changed project X?"
- get_entity_timeline tool: "What happened to resource Y?"
Regression: 283 engine + 37 staffing tests pass. TypeScript clean.
Co-Authored-By: claude-flow <ruv@ruv.net >
2026-03-22 22:39:30 +01:00
Hartmut
ac845d72b7
refactor: deduplicate modals, notifications, confirms, comboboxes, proficiency
...
Modal Overlay (Finding 1 — 6 admin files):
- Migrated CountriesClient, ManagementLevelsClient, OrgUnitsClient,
CalculationRulesClient, UtilizationCategoriesClient, RoleModal
from inline fixed-overlay to AnimatedModal component
- Gains: animated transitions, backdrop blur, escape key for free
Notification Helper (Finding 9 — 9 API files, 14 call sites):
- New createNotification() + createNotificationsForUsers() in
packages/api/src/lib/create-notification.ts
- Handles exactOptionalPropertyTypes spread + SSE emit internally
- Simplified: budget-alerts, estimate-reminders, auto-staffing,
vacation-conflicts, chargeability-alerts, comment, vacation, notification
ConfirmDialog (Finding 3 — 11 files):
- Replaced all window.confirm() calls with ConfirmDialog component
- Files: CommentThread, EffortRules, ExperienceMultipliers,
ManagementLevels, CalculationRules, Countries, RateCards,
ApplyEffortRules, ApplyExperienceMultipliers, NotificationCenter,
ReminderModal
EntityCombobox (Finding 4 — 3 files):
- New generic EntityCombobox<T> with customization hooks
- ResourceCombobox + ProjectCombobox rewritten as thin wrappers
- All consumers unchanged (backwards-compatible props)
Proficiency Constants (Finding 2 — 2 files):
- SkillsAnalytics + SkillMarketplace now import from skills/shared.tsx
- Deleted ~70 LOC of local duplicate definitions
Regression: 283 engine + 37 staffing tests pass. TypeScript clean.
AI Assistant: all 87 tools verified accessible.
Co-Authored-By: claude-flow <ruv@ruv.net >
2026-03-22 21:50:39 +01:00
Hartmut
f1f1be21c7
feat: Sprint 3 — delight, polish, and responsive sidebar
...
Celebration micro-interactions:
- SuccessToast: auto-dismissing pill toast (success/info/warning variants)
- ConfettiBurst: pure CSS 20-particle confetti on project creation
- Project wizard: confetti + toast on successful creation
- Vacation approval/rejection: contextual toasts
- Allocation status change: success toast
- Button: active:scale-[0.97] press feedback on all variants
Collapsible sidebar + responsive:
- Desktop: toggle collapse (72px icons-only mode) with localStorage persistence
- NavTooltip: hover labels on collapsed icons
- Mobile: hamburger menu + slide-in overlay with backdrop
- Auto-close sidebar on mobile navigation
- Scroll-to-top on route change (smooth behavior)
Hover polish + accessibility:
- Table rows: animated left-border accent + hover-lift
- Stat cards + widgets: hover elevation + border glow
- Timeline blocks: scale(1.02) + shadow-md on hover
- Smooth scroll globally with prefers-reduced-motion fallback
- Filter chips: framer-motion scale+fade enter/exit
- Dropdowns: scaleY origin-top reveal animation
- Preferences modal: scale+fade entrance
- Link underline: animated ::after width expansion on hover
Co-Authored-By: claude-flow <ruv@ruv.net >
2026-03-19 01:02:51 +01:00
Hartmut
ae92923c28
feat: Sprint 1 — Alive Enterprise animation foundation
...
Animation primitives (6 new components):
- AnimatedNumber: count-up with easeOutExpo, de-DE locale formatting
- ShimmerSkeleton: diagonal gradient sweep replacing animate-pulse
- FadeIn: framer-motion viewport-triggered fade + slide
- StaggerList/StaggerItem: staggered children entrance
- Sparkline: pure SVG inline trend chart with draw-in animation
- ProgressRing: animated circular progress with CSS transitions
Sidebar & page transitions:
- Sliding nav indicator (framer-motion layoutId animation)
- Icon frame hover glow (brand-color shadow)
- Smooth section collapse/expand (AnimatePresence height animation)
- PageTransition wrapper (fade-up on route change)
- AnimatedModal component (scale + fade with custom bezier)
- Notification badge bounce on count increase
Dashboard animations:
- StatCards: AnimatedNumber count-up + staggered FadeIn + budget color tinting
- WidgetContainer: fade-slide-up on mount
- Chargeability: animated percentages + inline utilization bars
- ProjectTable/MyProjects: animated numbers + staggered row entrance
Shimmer skeletons & table animations:
- Replaced animate-pulse across 20+ loading states with shimmer gradient
- Staggered row entrance (fadeSlideIn) on Resources, Projects, Allocations tables
- hover-lift utility class for subtle card/row elevation on hover
- Content-shaped skeletons (avatars, text bars, badges)
Light mode surface depth:
- Mesh gradient page background (subtle accent-tinted corners)
- Enhanced card shadows (two-layer depth)
- Sidebar glassmorphism upgrade (bg-white/60, backdrop-blur-2xl, saturate-150)
- Toolbar sticky backdrop blur
- Enhanced focus ring with brand-color glow
Co-Authored-By: claude-flow <ruv@ruv.net >
2026-03-19 00:48:55 +01:00
Hartmut
2a9a400cd4
fix: rewrite combobox components to inline-input pattern with dark mode (Gitea #12 )
...
Replace button+dropdown pattern with single input that becomes editable on focus.
Fixes "second bar appearing" UX bug, adds dark mode, fixes z-index overlap.
Co-Authored-By: claude-flow <ruv@ruv.net >
2026-03-17 10:29:12 +01:00
Hartmut
625a842d89
feat: dashboard overhaul, chargeability reports, dispo import enhancements, UI polish
...
Dashboard: expanded chargeability widget, resource/project table widgets
with sorting and filters, stat cards with formatMoney integration.
Chargeability: new report client with filtering, chargeability-bookings
use case, updated dashboard overview logic.
Dispo import: TBD project handling, parse-dispo-matrix improvements,
stage-dispo-projects resource value scores, new tests.
Estimates: CommercialTermsEditor component, commercial-terms engine
module, expanded estimate schemas and types.
UI: AppShell navigation updates, timeline filter/toolbar enhancements,
role management improvements, signin page redesign, Tailwind/globals
polish, SystemSettings SMTP section, anonymization support.
Tests: new router tests (anonymization, chargeability, effort-rule,
entitlement, estimate, experience-multiplier, notification, resource,
staffing, vacation).
Co-Authored-By: claude-flow <ruv@ruv.net >
2026-03-14 23:29:07 +01:00
Hartmut
dd55d0e78b
chore(repo): initialize planarchy workspace
2026-03-14 14:31:09 +01:00