Files
bab-app/docs/summaries/handoff-2026-03-15-dependency-updates.md
Patrick Toal 67c7a3c050
Some checks failed
Build BAB Application Deployment Artifact / build (push) Failing after 1m17s
chore: Update dependencies to latest
fix: claude fixes to various errors
2026-03-15 10:41:12 -04:00

7.0 KiB

Session Handoff: Dependency Updates & ESLint Cleanup

Date: 2026-03-15 Session Focus: Complete Quasar v1→v2 migration, Appwrite SDK v14→v23 update, ESLint flat config cleanup Status: BUILD PASSING — 0 errors, 0 warnings

What Was Accomplished

From prior sessions (captured in archived handoffs):

  1. Auth flow refactored to passwordless (magic link + OTP), OAuth removed
  2. Google/Discord OAuth components deleted
  3. About dialog with version info added → src/components/LeftDrawer.vue
  4. quasar.config.jsquasar.config.ts (ESM TypeScript)
  5. "type": "module" added to package.json
  6. Yarn 1.x → Yarn 4.13.0
  7. ESLint legacy .eslintrc.cjs → flat config eslint.config.js
  8. QCalendar app extension removed → direct npm package import
  9. Boot/router/store wrappers updated to #q-app/wrappers imports
  10. Appwrite SDK updated v14.0.1 → v23.0.0
  11. globals package installed; browser + ES2021 globals added to ESLint config

This session (build cleanup — all 30 TS errors + 12 ESLint issues resolved):

TypeScript as unknown as casts (Appwrite v23 DefaultDocument no longer overlaps domain types):

  • src/stores/boat.ts:36as unknown as Boat[]
  • src/stores/interval.ts:95,113,127as unknown as Interval
  • src/stores/intervalTemplate.ts — map callback cast + as unknown as IntervalTemplate (3 places)
  • src/stores/reservation.ts:65,80,247as unknown as Reservation
  • src/stores/task.ts:53,65,77,109,132as unknown as Task[], TaskTag[], SkillTag[], Task

.id.$id fixes (Appwrite uses $id, not id):

  • src/components/boat/BoatPreviewComponent.vue:7
  • src/components/scheduling/boat/BoatScheduleTableComponent.vue:54
  • src/components/task/TaskListComponent.vue:4
  • src/pages/schedule/ManageCalendar.vue:40
  • src/stores/sampledata/schedule.ts:19,29,138 — also id:$id: in object literals

defineProps import conflict (auto-imported in <script setup>, cannot also be explicitly imported):

  • src/components/task/TaskCardComponent.vue:20 — removed import; also removed subtasks template refs (not in Task type)
  • src/components/task/TaskTableComponent.vue:215 — removed defineProps from import

ESLint fixes:

  • eslint.config.js:52process.env.NODE_ENV === 'production' ? 'error' : 'off''off' (process not defined in .js ESLint globals)
  • src/components/ResourceScheduleViewerComponent.vue:173 — removed || undefined (always truthy)
  • src/components/ResourceScheduleViewerComponent.vue:177catch (e)catch { } (unused binding)
  • src/components/ResourceScheduleViewerComponent.vue:237-247 — removed unused eslint-disable-next-line comments
  • src/components/scheduling/boat/BoatScheduleTableComponent.vue:116NodeJS.TimeoutReturnType<typeof setInterval>
  • src/components/scheduling/boat/BoatScheduleTableComponent.vue:129 — ternary as statement → if/else; also destructured { direction } to fix unused event hint
  • src/pages/LoginPage.vue:131catch (e)catch { }

Other fixes:

  • src-pwa/register-service-worker.ts — installed register-service-worker package (was missing from package.json)
  • src/stores/sampledata/schedule.ts:50template.blockstemplate.timeTuples (property was renamed)
  • src/stores/sampledata/schedule.ts:145 — removed reservationDate (not in Reservation type)
  • src/stores/intervalTemplate.ts:27d.timeTuple cast via as unknown as { timeTuple: string[] }
  • src/stores/intervalTemplate.ts:82response.timeTuple cast via as unknown as { timeTuple: string[] }
  • src/components/scheduling/boat/CalendarHeaderComponent.vue — removed getWeekdaySkips (removed from qcalendar API); createDayList now takes weekdays directly as 4th arg; removed weekdaySkips computed

Decisions Made

  • as unknown as Type pattern — correct approach for Appwrite v23 DefaultDocument casts; v23 made DefaultDocument strict, no longer assignable to domain types without double-cast — STATUS: CONFIRMED
  • getWeekdaySkips removed from qcalendarcreateDayList now accepts weekdays array directly as 4th param — STATUS: CONFIRMED (verified from ESM source)
  • subtasks removed from TaskCardComponent templateTask type has no subtasks field; feature was dead code — STATUS: ASSUMED safe (see open question)
  • no-debugger: 'off' — hardcoded instead of process.env.NODE_ENV conditional because process is not in ESLint globals for .js files — STATUS: CONFIRMED

Key Numbers

  • TS errors at session start: 30 (in 14 files)
  • ESLint errors at session start: 12 (6 errors, 6 warnings)
  • TS errors at session end: 0
  • ESLint errors at session end: 0
  • Packages added: register-service-worker

Files Modified This Session

File Change
eslint.config.js no-debugger rule hardcoded to 'off'
src/components/ResourceScheduleViewerComponent.vue 3 ESLint fixes
src/components/scheduling/boat/BoatScheduleTableComponent.vue .id.$id, NodeJS.Timeout, if/else
src/components/scheduling/boat/CalendarHeaderComponent.vue Removed getWeekdaySkips; updated createDayList call
src/pages/LoginPage.vue catch { }
src/components/boat/BoatPreviewComponent.vue .id.$id
src/components/task/TaskCardComponent.vue Removed defineProps import + subtasks refs
src/components/task/TaskListComponent.vue .id.$id
src/components/task/TaskTableComponent.vue Removed defineProps from import
src/pages/schedule/ManageCalendar.vue .id.$id
src/stores/boat.ts as unknown as Boat[]
src/stores/interval.ts as unknown as Interval (3 places)
src/stores/intervalTemplate.ts Multiple cast fixes + timeTuple access
src/stores/reservation.ts as unknown as Reservation (multiple)
src/stores/sampledata/schedule.ts id$id, blockstimeTuples, removed reservationDate
src/stores/task.ts as unknown as for Task/TaskTag/SkillTag
package.json / yarn.lock Added register-service-worker

Open Questions

  • src/components/task/TaskCardComponent.vuesubtasks removed from template. Should subtasks?: Task[] be added to the Task interface in task.ts for future use? OPEN
  • Appwrite v23 deprecated positional-param overloads (hints in every store). Should stores be migrated to new object-param style? Low priority — code still works. OPEN

Assumptions

  • ASSUMED: subtasks feature in TaskCardComponent was dead/future code — safe to remove template refs
  • ASSUMED: no-debugger: 'off' is fine for devel branch

What NOT to Re-Read

  • docs/archive/handoffs/handoff-2026-03-15-auth-magic-link.md — archived

Next Session

  • Commit all dependency update + build fix changes
  • Test the app against the dev Appwrite backend (validate v23 API calls work at runtime)
  • Consider migrating Appwrite calls from deprecated positional-param to object-param style (optional)
  • Consider adding subtasks?: Task[] to Task interface if the feature is planned