Some checks are pending
Bidi Control Character Guard / bidi-control-guard (push) Waiting to run
Circular Dependency Check / Check for new circular dependencies (push) Waiting to run
Citus Migration Smoke / Combined migrations on single-node Citus (push) Waiting to run
E2E Fresh Install Tests / fresh-install-e2e (push) Waiting to run
ext-v2 guardrails / Run ext-v2 guard and ESLint (push) Waiting to run
Integration Tests / Check for relevant changes (push) Waiting to run
Integration Tests / ${{ (github.event_name == 'schedule' || github.event.inputs.suite == 'full') && 'Full integration suite' || 'Tier-1 integration subset' }} (push) Blocked by required conditions
Mobile checks / Mobile lint + typecheck (push) Waiting to run
Mobile checks / Mobile unit tests (push) Waiting to run
Mobile checks / Mobile dependency audit (report) (push) Waiting to run
Mobile checks / Mobile reproducibility checks (push) Waiting to run
Secrets guard (env backups) / Ensure no tracked env backup files (push) Waiting to run
Temporal Readiness / fast-readiness (push) Waiting to run
Temporal Readiness / docker-parity (push) Waiting to run
TypeScript Type Check / Nx affected typecheck (push) Waiting to run
Unit Tests / Skipped-test budget (push) Waiting to run
Unit Tests / Nx affected unit tests (push) Waiting to run
Unit Tests / Server unit coverage (informational) (push) Waiting to run
Validate Tenant Management Schema / Check for relevant changes (push) Waiting to run
Validate Tenant Management Schema / Validate Tenant Management Schema (push) Blocked by required conditions
EE Workflows Build Guard / ee-workflows-build-guard (push) Waiting to run
Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz Source: /opt/alga-psa on psa.joliet.tech
11 KiB
11 KiB
Scratchpad — Scheduling Context Facade
- Plan slug:
scheduling-context-facade - Created:
2026-02-05
Decisions
- (2026-02-05) Use React Context facade pattern instead of direct imports or prop threading. Reason: avoids cross-package deps AND avoids 3-4 layer prop threading for InteractionDetails/TaskForm.
- (2026-02-05) Context defined in
@alga-psa/ui(all packages already depend on it). Real implementations in@alga-psa/scheduling. Provider inmsp-composition. - (2026-02-05) Option A for server page wrapping: wrap individual pages (tickets, contacts, projects), not the MSP layout. Keeps blast radius small.
- (2026-02-05) AgentScheduleView defaults to week view (not month). Better UX for drawer width.
- (2026-02-05) AgentScheduleView lives in scheduling package (not tickets). It uses scheduling internals directly — no cross-package concern since it's in the same package.
- (2026-02-05) Yesterday's materials drawer used direct @alga-psa/billing dependency — user noted this was architecturally incorrect and should also use facade pattern in the future.
Discoveries / Constraints
- (2026-02-05) Old AgentScheduleDrawer was 632 lines (commit c6e3612d2). Full React Big Calendar with drag-and-drop, event CRUD, color-coded events, EntryPopup integration.
- (2026-02-05) Current ScheduleCalendar.tsx has NO props (fully self-contained, 1040 lines). Cannot be embedded in a drawer as-is.
- (2026-02-05) Old time entry handlers: validated prerequisites → fetched time period → created timesheet → built IExtendedWorkItem → opened TimeEntryDialog in drawer.
- (2026-02-05) InteractionDetails is 3 layers deep from server page (ContactDetailsView → InteractionsFeed → InteractionDetails). No existing composition wrapper for clients.
- (2026-02-05) TaskForm is 4 layers deep (ProjectPage → ProjectDetail → TaskQuickAdd/TaskEdit → TaskForm). No existing composition wrapper for projects.
- (2026-02-05) TagContext is a good pattern reference — context defined in package, provides callbacks to deeply nested consumers.
- (2026-02-05) InteractionDetails already imports AgentScheduleDrawer from @alga-psa/tickets, so updating the stub there fixes both ticket and interaction entry points.
- (2026-02-05) TimeEntryDialog supports
inDrawer: trueprop for drawer mode. - (2026-02-05) Timer state (elapsedTime, isRunning, timeDescription) is local to TicketDetails — passed through context params, not stored in the context itself.
Commands / Runbooks
- View old AgentScheduleDrawer:
git show c6e3612d2 -- packages/tickets/src/components/ticket/AgentScheduleDrawer.tsx - View old time entry handlers:
git log --all -p -S "TimeEntryDialog" -- packages/tickets/src/components/ticket/TicketDetails.tsx | head -200 - The modularization commit:
c43321e4c("refactor: continue modularization of actions and components")
Links / References
- Old AgentScheduleDrawer styles:
packages/tickets/src/components/ticket/AgentScheduleDrawerStyles.tsx - ScheduleCalendar:
packages/scheduling/src/components/schedule/ScheduleCalendar.tsx - EntryPopup:
packages/scheduling/src/components/schedule/EntryPopup.tsx - DynamicBigCalendar:
packages/scheduling/src/components/schedule/DynamicBigCalendar.tsx - CalendarStyleProvider:
packages/scheduling/src/components/schedule/CalendarStyleProvider.tsx - TimeEntryDialog:
packages/scheduling/src/components/time-management/time-entry/time-sheet/TimeEntryDialog.tsx - TimeEntryProvider:
packages/scheduling/src/components/time-management/time-entry/time-sheet/TimeEntryProvider.tsx - scheduleActions:
packages/scheduling/src/actions/scheduleActions.ts - timeEntryCrudActions:
packages/scheduling/src/actions/timeEntryCrudActions.ts - MspTicketDetailsContainerClient:
packages/msp-composition/src/tickets/MspTicketDetailsContainerClient.tsx - Existing stubs: AgentScheduleDrawer.tsx, TicketDetails.tsx:975, InteractionDetails.tsx:229, TaskForm.tsx:831
Open Questions
- None currently blocking.
Updates
- (2026-02-05) Added TimeEntryWorkItemContext to
packages/types/src/interfaces/scheduling.interfaces.tsfor shared work-item launch context. - (2026-02-05) Added
SchedulingContextinpackages/ui/src/context/SchedulingContext.tsxwith no-op defaults and hook. - (2026-02-05) Re-exported
SchedulingContextfrompackages/ui/src/context/index.ts. - (2026-02-05) Created
packages/scheduling/src/components/schedule/AgentScheduleView.tsxandAgentScheduleDrawerStyles.tsxfor single-agent calendar drawer view. - (2026-02-05) AgentScheduleView now loads entries via
getScheduleEntriesscoped to agentId and current date range. - (2026-02-05) AgentScheduleView uses DynamicBigCalendar with week/day/month views and default week view.
- (2026-02-05) AgentScheduleView applies work-item color mapping via eventPropGetter.
- (2026-02-05) AgentScheduleView opens EntryPopup on event click (view-only mode).
- (2026-02-05) AgentScheduleView auto-scrolls to 8 AM on initial render.
- (2026-02-05) AgentScheduleView gates viewing by user_schedule permissions and shows a permission error when disallowed.
- (2026-02-05) AgentScheduleView includes CalendarStyleProvider and AgentScheduleDrawerStyles for drawer styling.
- (2026-02-05) Added
packages/scheduling/src/lib/timeEntryLauncher.tsxto orchestrate time entry dialog launch from work-item context. - (2026-02-05) timeEntryLauncher now toasts when no active time period exists.
- (2026-02-05) timeEntryLauncher opens TimeEntryDialog in drawer mode with time period and time sheet context.
- (2026-02-05) timeEntryLauncher saves time entry, closes drawer, and triggers onComplete on success.
- (2026-02-05) Added
MspSchedulingProviderin msp-composition to supply scheduling callbacks via context. - (2026-02-05) Added
@alga-psa/schedulingdependency and exports to msp-composition package.json. - (2026-02-05) Wrapped ticket detail page with
MspSchedulingProvider. - (2026-02-05) Wrapped contact detail and activity pages with
MspSchedulingProvider. - (2026-02-05) Wrapped project detail page with
MspSchedulingProvider. - (2026-02-05) Updated AgentScheduleDrawer to use SchedulingContext renderAgentSchedule callback.
- (2026-02-05) TicketDetails now launches time entry via SchedulingContext with ticket timer context.
- (2026-02-05) InteractionDetails now launches time entry via SchedulingContext with interaction context.
- (2026-02-05) TaskForm now launches time entry via SchedulingContext with project/phase/task and service context.
- (2026-02-05) Default SchedulingContext callbacks provide alert/toast fallbacks when no provider is present.
- (2026-02-05) Added helper builders for time entry contexts in tickets/clients/projects to simplify test coverage.
- (2026-02-05) Added type-level test for TimeEntryWorkItemContext in
packages/scheduling/tests/timeEntryWorkItemContext.test.ts. - (2026-02-05) Added SchedulingContext hook default test in
packages/ui/src/context/SchedulingContext.test.tsx. - (2026-02-05) Added SchedulingContext default renderAgentSchedule fallback test.
- (2026-02-05) Added SchedulingContext default launchTimeEntry toast test.
- (2026-02-05) Added SchedulingCallbackProvider override test.
- (2026-02-05) Added context index re-export test for SchedulingContext.
- (2026-02-05) Added initial AgentScheduleView render test with mocked calendar dependencies.
- (2026-02-05) Added AgentScheduleView getScheduleEntries call verification test.
- (2026-02-05) Added AgentScheduleView loading state test.
- (2026-02-05) Added AgentScheduleView default week view test.
- (2026-02-05) Added AgentScheduleView view-switching test.
- (2026-02-05) Added AgentScheduleView event color mapping test.
- (2026-02-05) Added AgentScheduleView EntryPopup open-on-click test.
- (2026-02-05) Added AgentScheduleView scroll-to-8am test via scrollToTime prop.
- (2026-02-05) Added AgentScheduleView permission test for user_schedule:read (own-only).
- (2026-02-05) Added AgentScheduleView permission test for user_schedule:read:all.
- (2026-02-05) Added AgentScheduleView style provider render test.
- (2026-02-05) Added timeEntryLauncher test for current time period fetch.
- (2026-02-05) Added timeEntryLauncher test for time sheet fetch/create.
- (2026-02-05) Added timeEntryLauncher ticket work item build test.
- (2026-02-05) Added timeEntryLauncher interaction work item build test.
- (2026-02-05) Added timeEntryLauncher project task work item build test.
- (2026-02-05) Added timeEntryLauncher missing time period toast test.
- (2026-02-05) Added timeEntryLauncher drawer mode props test.
- (2026-02-05) Added timeEntryLauncher service prefill test for project tasks.
- (2026-02-05) Added timeEntryLauncher save-and-close test.
- (2026-02-05) Added timeEntryLauncher onComplete callback test.
- (2026-02-05) Added msp-composition SchedulingProvider tests and vitest config.
- (2026-02-05) Added MspSchedulingProvider launchTimeEntry wiring test.
- (2026-02-05) Added msp-composition package dependency test for scheduling.
- (2026-02-05) Added server page provider presence tests for ticket/contact/project pages.
- (2026-02-05) Verified contact detail/activity pages include scheduling provider via server page tests.
- (2026-02-05) Verified project detail page includes scheduling provider via server page tests.
- (2026-02-05) Added AgentScheduleDrawer tests for provider rendering and fallback alert.
- (2026-02-05) Verified AgentScheduleDrawer fallback alert without provider.
- (2026-02-05) Added TicketDetails schedule drawer wiring test via source inspection.
- (2026-02-05) Added InteractionDetails schedule drawer wiring test via source inspection.
- (2026-02-05) Added ticket time entry context helper tests.
- (2026-02-05) Verified ticket time entry context includes elapsedTime and timeDescription.
- (2026-02-05) Verified ticket time entry onComplete resets timer state.
- (2026-02-05) Added interaction time entry context helper test.
- (2026-02-05) Added task time entry context helper test and projects vitest config.
- (2026-02-05) Added fallback toast test for time entry without provider.
- (2026-02-05) Fixed SchedulingContext test mock hoisting for react-hot-toast.
- (2026-02-05) Fixed msp-composition test mock hoisting for timeEntryLauncher.
- (2026-02-05) Fixed tickets test config aliasing for @shared and toast mock hoisting.
- (2026-02-05) Added tickets test alias for @alga-psa/event-schemas to unblock existing tests.
- (2026-02-05) Added tickets package aliasing for @alga-psa/tickets to fix existing SLA tests.
Test Runs
npx vitest --config vitest.config.ts --run --root packages/uinpx vitest --config vitest.config.ts --run --root packages/schedulingnpx vitest --config vitest.config.ts --run --root packages/msp-compositionnpx vitest --config vitest.config.ts --run --root packages/ticketsnpx vitest --config vitest.config.ts --run --root packages/clientsnpx vitest --config vitest.config.ts --run --root packages/projects