diff --git a/.planning/graphs/GRAPH_REPORT.md b/.planning/graphs/GRAPH_REPORT.md index 5b81d34..a9025e7 100644 --- a/.planning/graphs/GRAPH_REPORT.md +++ b/.planning/graphs/GRAPH_REPORT.md @@ -1,16 +1,16 @@ # Graph Report - familysync (2026-06-09) ## Corpus Check -- 205 files · ~256,858 words +- 257 files · ~528,165 words - Verdict: corpus is large enough that graph structure adds value. ## Summary -- 2182 nodes · 2228 edges · 210 communities (185 shown, 25 thin omitted) +- 4090 nodes · 4249 edges · 427 communities (402 shown, 25 thin omitted) - Extraction: 100% EXTRACTED · 0% INFERRED · 0% AMBIGUOUS · INFERRED: 5 edges (avg confidence: 0.8) - Token cost: 0 input · 0 output ## Graph Freshness -- Built from commit: `00cbbb41` +- Built from commit: `d521839a` - Run `git rev-parse HEAD` and compare to check if the graph is stale. - Run `graphify update .` after code changes (no API cost). @@ -210,18 +210,235 @@ - [[_COMMUNITY_Community 193|Community 193]] - [[_COMMUNITY_Community 194|Community 194]] - [[_COMMUNITY_Community 195|Community 195]] +- [[_COMMUNITY_Community 210|Community 210]] +- [[_COMMUNITY_Community 211|Community 211]] +- [[_COMMUNITY_Community 212|Community 212]] +- [[_COMMUNITY_Community 213|Community 213]] +- [[_COMMUNITY_Community 214|Community 214]] +- [[_COMMUNITY_Community 215|Community 215]] +- [[_COMMUNITY_Community 216|Community 216]] +- [[_COMMUNITY_Community 217|Community 217]] +- [[_COMMUNITY_Community 218|Community 218]] +- [[_COMMUNITY_Community 219|Community 219]] +- [[_COMMUNITY_Community 220|Community 220]] +- [[_COMMUNITY_Community 221|Community 221]] +- [[_COMMUNITY_Community 222|Community 222]] +- [[_COMMUNITY_Community 223|Community 223]] +- [[_COMMUNITY_Community 224|Community 224]] +- [[_COMMUNITY_Community 225|Community 225]] +- [[_COMMUNITY_Community 226|Community 226]] +- [[_COMMUNITY_Community 227|Community 227]] +- [[_COMMUNITY_Community 228|Community 228]] +- [[_COMMUNITY_Community 229|Community 229]] +- [[_COMMUNITY_Community 230|Community 230]] +- [[_COMMUNITY_Community 231|Community 231]] +- [[_COMMUNITY_Community 232|Community 232]] +- [[_COMMUNITY_Community 233|Community 233]] +- [[_COMMUNITY_Community 234|Community 234]] +- [[_COMMUNITY_Community 235|Community 235]] +- [[_COMMUNITY_Community 236|Community 236]] +- [[_COMMUNITY_Community 237|Community 237]] +- [[_COMMUNITY_Community 238|Community 238]] +- [[_COMMUNITY_Community 239|Community 239]] +- [[_COMMUNITY_Community 240|Community 240]] +- [[_COMMUNITY_Community 241|Community 241]] +- [[_COMMUNITY_Community 242|Community 242]] +- [[_COMMUNITY_Community 243|Community 243]] +- [[_COMMUNITY_Community 244|Community 244]] +- [[_COMMUNITY_Community 245|Community 245]] +- [[_COMMUNITY_Community 246|Community 246]] +- [[_COMMUNITY_Community 247|Community 247]] +- [[_COMMUNITY_Community 248|Community 248]] +- [[_COMMUNITY_Community 249|Community 249]] +- [[_COMMUNITY_Community 250|Community 250]] +- [[_COMMUNITY_Community 251|Community 251]] +- [[_COMMUNITY_Community 252|Community 252]] +- [[_COMMUNITY_Community 253|Community 253]] +- [[_COMMUNITY_Community 254|Community 254]] +- [[_COMMUNITY_Community 255|Community 255]] +- [[_COMMUNITY_Community 256|Community 256]] +- [[_COMMUNITY_Community 257|Community 257]] +- [[_COMMUNITY_Community 258|Community 258]] +- [[_COMMUNITY_Community 259|Community 259]] +- [[_COMMUNITY_Community 260|Community 260]] +- [[_COMMUNITY_Community 261|Community 261]] +- [[_COMMUNITY_Community 262|Community 262]] +- [[_COMMUNITY_Community 263|Community 263]] +- [[_COMMUNITY_Community 264|Community 264]] +- [[_COMMUNITY_Community 265|Community 265]] +- [[_COMMUNITY_Community 266|Community 266]] +- [[_COMMUNITY_Community 267|Community 267]] +- [[_COMMUNITY_Community 268|Community 268]] +- [[_COMMUNITY_Community 269|Community 269]] +- [[_COMMUNITY_Community 270|Community 270]] +- [[_COMMUNITY_Community 271|Community 271]] +- [[_COMMUNITY_Community 272|Community 272]] +- [[_COMMUNITY_Community 273|Community 273]] +- [[_COMMUNITY_Community 274|Community 274]] +- [[_COMMUNITY_Community 275|Community 275]] +- [[_COMMUNITY_Community 276|Community 276]] +- [[_COMMUNITY_Community 277|Community 277]] +- [[_COMMUNITY_Community 278|Community 278]] +- [[_COMMUNITY_Community 279|Community 279]] +- [[_COMMUNITY_Community 280|Community 280]] +- [[_COMMUNITY_Community 281|Community 281]] +- [[_COMMUNITY_Community 282|Community 282]] +- [[_COMMUNITY_Community 283|Community 283]] +- [[_COMMUNITY_Community 284|Community 284]] +- [[_COMMUNITY_Community 285|Community 285]] +- [[_COMMUNITY_Community 286|Community 286]] +- [[_COMMUNITY_Community 287|Community 287]] +- [[_COMMUNITY_Community 288|Community 288]] +- [[_COMMUNITY_Community 289|Community 289]] +- [[_COMMUNITY_Community 290|Community 290]] +- [[_COMMUNITY_Community 291|Community 291]] +- [[_COMMUNITY_Community 292|Community 292]] +- [[_COMMUNITY_Community 293|Community 293]] +- [[_COMMUNITY_Community 294|Community 294]] +- [[_COMMUNITY_Community 295|Community 295]] +- [[_COMMUNITY_Community 296|Community 296]] +- [[_COMMUNITY_Community 297|Community 297]] +- [[_COMMUNITY_Community 298|Community 298]] +- [[_COMMUNITY_Community 299|Community 299]] +- [[_COMMUNITY_Community 300|Community 300]] +- [[_COMMUNITY_Community 301|Community 301]] +- [[_COMMUNITY_Community 302|Community 302]] +- [[_COMMUNITY_Community 303|Community 303]] +- [[_COMMUNITY_Community 304|Community 304]] +- [[_COMMUNITY_Community 305|Community 305]] +- [[_COMMUNITY_Community 306|Community 306]] +- [[_COMMUNITY_Community 307|Community 307]] +- [[_COMMUNITY_Community 308|Community 308]] +- [[_COMMUNITY_Community 309|Community 309]] +- [[_COMMUNITY_Community 310|Community 310]] +- [[_COMMUNITY_Community 311|Community 311]] +- [[_COMMUNITY_Community 312|Community 312]] +- [[_COMMUNITY_Community 313|Community 313]] +- [[_COMMUNITY_Community 314|Community 314]] +- [[_COMMUNITY_Community 315|Community 315]] +- [[_COMMUNITY_Community 316|Community 316]] +- [[_COMMUNITY_Community 317|Community 317]] +- [[_COMMUNITY_Community 318|Community 318]] +- [[_COMMUNITY_Community 319|Community 319]] +- [[_COMMUNITY_Community 320|Community 320]] +- [[_COMMUNITY_Community 321|Community 321]] +- [[_COMMUNITY_Community 322|Community 322]] +- [[_COMMUNITY_Community 323|Community 323]] +- [[_COMMUNITY_Community 324|Community 324]] +- [[_COMMUNITY_Community 325|Community 325]] +- [[_COMMUNITY_Community 326|Community 326]] +- [[_COMMUNITY_Community 327|Community 327]] +- [[_COMMUNITY_Community 328|Community 328]] +- [[_COMMUNITY_Community 329|Community 329]] +- [[_COMMUNITY_Community 330|Community 330]] +- [[_COMMUNITY_Community 331|Community 331]] +- [[_COMMUNITY_Community 332|Community 332]] +- [[_COMMUNITY_Community 333|Community 333]] +- [[_COMMUNITY_Community 334|Community 334]] +- [[_COMMUNITY_Community 335|Community 335]] +- [[_COMMUNITY_Community 336|Community 336]] +- [[_COMMUNITY_Community 337|Community 337]] +- [[_COMMUNITY_Community 338|Community 338]] +- [[_COMMUNITY_Community 339|Community 339]] +- [[_COMMUNITY_Community 340|Community 340]] +- [[_COMMUNITY_Community 341|Community 341]] +- [[_COMMUNITY_Community 342|Community 342]] +- [[_COMMUNITY_Community 343|Community 343]] +- [[_COMMUNITY_Community 344|Community 344]] +- [[_COMMUNITY_Community 345|Community 345]] +- [[_COMMUNITY_Community 346|Community 346]] +- [[_COMMUNITY_Community 347|Community 347]] +- [[_COMMUNITY_Community 348|Community 348]] +- [[_COMMUNITY_Community 349|Community 349]] +- [[_COMMUNITY_Community 350|Community 350]] +- [[_COMMUNITY_Community 351|Community 351]] +- [[_COMMUNITY_Community 352|Community 352]] +- [[_COMMUNITY_Community 353|Community 353]] +- [[_COMMUNITY_Community 354|Community 354]] +- [[_COMMUNITY_Community 355|Community 355]] +- [[_COMMUNITY_Community 356|Community 356]] +- [[_COMMUNITY_Community 357|Community 357]] +- [[_COMMUNITY_Community 358|Community 358]] +- [[_COMMUNITY_Community 359|Community 359]] +- [[_COMMUNITY_Community 360|Community 360]] +- [[_COMMUNITY_Community 361|Community 361]] +- [[_COMMUNITY_Community 362|Community 362]] +- [[_COMMUNITY_Community 363|Community 363]] +- [[_COMMUNITY_Community 364|Community 364]] +- [[_COMMUNITY_Community 365|Community 365]] +- [[_COMMUNITY_Community 366|Community 366]] +- [[_COMMUNITY_Community 367|Community 367]] +- [[_COMMUNITY_Community 368|Community 368]] +- [[_COMMUNITY_Community 369|Community 369]] +- [[_COMMUNITY_Community 370|Community 370]] +- [[_COMMUNITY_Community 371|Community 371]] +- [[_COMMUNITY_Community 372|Community 372]] +- [[_COMMUNITY_Community 373|Community 373]] +- [[_COMMUNITY_Community 374|Community 374]] +- [[_COMMUNITY_Community 375|Community 375]] +- [[_COMMUNITY_Community 376|Community 376]] +- [[_COMMUNITY_Community 377|Community 377]] +- [[_COMMUNITY_Community 378|Community 378]] +- [[_COMMUNITY_Community 379|Community 379]] +- [[_COMMUNITY_Community 380|Community 380]] +- [[_COMMUNITY_Community 381|Community 381]] +- [[_COMMUNITY_Community 382|Community 382]] +- [[_COMMUNITY_Community 383|Community 383]] +- [[_COMMUNITY_Community 384|Community 384]] +- [[_COMMUNITY_Community 385|Community 385]] +- [[_COMMUNITY_Community 386|Community 386]] +- [[_COMMUNITY_Community 387|Community 387]] +- [[_COMMUNITY_Community 388|Community 388]] +- [[_COMMUNITY_Community 389|Community 389]] +- [[_COMMUNITY_Community 390|Community 390]] +- [[_COMMUNITY_Community 391|Community 391]] +- [[_COMMUNITY_Community 392|Community 392]] +- [[_COMMUNITY_Community 393|Community 393]] +- [[_COMMUNITY_Community 394|Community 394]] +- [[_COMMUNITY_Community 395|Community 395]] +- [[_COMMUNITY_Community 396|Community 396]] +- [[_COMMUNITY_Community 397|Community 397]] +- [[_COMMUNITY_Community 398|Community 398]] +- [[_COMMUNITY_Community 399|Community 399]] +- [[_COMMUNITY_Community 400|Community 400]] +- [[_COMMUNITY_Community 401|Community 401]] +- [[_COMMUNITY_Community 402|Community 402]] +- [[_COMMUNITY_Community 403|Community 403]] +- [[_COMMUNITY_Community 404|Community 404]] +- [[_COMMUNITY_Community 405|Community 405]] +- [[_COMMUNITY_Community 406|Community 406]] +- [[_COMMUNITY_Community 407|Community 407]] +- [[_COMMUNITY_Community 408|Community 408]] +- [[_COMMUNITY_Community 409|Community 409]] +- [[_COMMUNITY_Community 410|Community 410]] +- [[_COMMUNITY_Community 411|Community 411]] +- [[_COMMUNITY_Community 412|Community 412]] +- [[_COMMUNITY_Community 413|Community 413]] +- [[_COMMUNITY_Community 414|Community 414]] +- [[_COMMUNITY_Community 415|Community 415]] +- [[_COMMUNITY_Community 416|Community 416]] +- [[_COMMUNITY_Community 417|Community 417]] +- [[_COMMUNITY_Community 418|Community 418]] +- [[_COMMUNITY_Community 419|Community 419]] +- [[_COMMUNITY_Community 420|Community 420]] +- [[_COMMUNITY_Community 421|Community 421]] +- [[_COMMUNITY_Community 422|Community 422]] +- [[_COMMUNITY_Community 423|Community 423]] +- [[_COMMUNITY_Community 424|Community 424]] +- [[_COMMUNITY_Community 425|Community 425]] +- [[_COMMUNITY_Community 426|Community 426]] ## God Nodes (most connected - your core abstractions) -1. `workflow` - 32 edges -2. `Phase 4: Shared Lists + Live Sync — Research` - 29 edges -3. `Phase 3: Event Write-Back + PWA Install — Research` - 27 edges -4. `Phase 2: Calendar Display - Research` - 20 edges -5. `Phase 1: Foundation + Broker Spike — Research` - 19 edges -6. `Critical Pitfalls` - 19 edges -7. `Pattern Assignments` - 18 edges -8. `Phase 2 — UI Design Contract` - 18 edges -9. `Dev` - 16 edges -10. `compilerOptions` - 15 edges +1. `Communities (210 total, 25 thin omitted)` - 171 edges +2. `entries` - 39 edges +3. `workflow` - 32 edges +4. `Phase 4: Shared Lists + Live Sync — Research` - 29 edges +5. `Phase 3: Event Write-Back + PWA Install — Research` - 27 edges +6. `entries` - 26 edges +7. `entries` - 21 edges +8. `API Surface` - 21 edges +9. `entries` - 20 edges +10. `Phase 2: Calendar Display - Research` - 20 edges ## Surprising Connections (you probably didn't know these) - `loadClientForUser()` --calls--> `createFastmailClient()` [EXTRACTED] @@ -230,23 +447,23 @@ apps/api/src/broker/spike.ts → apps/api/src/broker/client.ts - `loadClientForUser()` --calls--> `decryptPassword()` [EXTRACTED] apps/api/src/broker/outboxWorker.ts → apps/api/src/broker/crypto.ts -- `runPoll()` --calls--> `decryptPassword()` [EXTRACTED] - apps/api/src/broker/poller.ts → apps/api/src/broker/crypto.ts - `triggerTargetedResync()` --calls--> `syncCalendar()` [EXTRACTED] apps/api/src/broker/outboxWorker.ts → apps/api/src/broker/sync.ts +- `ListCardProps` --references--> `List` [EXTRACTED] + apps/pwa/src/components/ListCard.tsx → apps/pwa/src/api/listsClient.ts ## Import Cycles - None detected. -## Communities (210 total, 25 thin omitted) +## Communities (427 total, 25 thin omitted) ### Community 0 - "Community 0" Cohesion: 0.05 Nodes (43): 60 / 30 / 10 split, Agenda view (default: phone), AgendaRow, AppNav, Base palette, Breakpoints, Calendar config constant, Calendar Display (+35 more) ### Community 1 - "Community 1" -Cohesion: 0.06 -Nodes (35): dependencies, ical.js, lucide-react, react, react-dom, @schedule-x/calendar, @schedule-x/calendar-controls, @schedule-x/event-modal (+27 more) +Cohesion: 0.05 +Nodes (39): dependencies, @dnd-kit/core, @dnd-kit/sortable, fractional-indexing, ical.js, lucide-react, react, react-dom (+31 more) ### Community 2 - "Community 2" Cohesion: 0.06 @@ -262,7 +479,7 @@ Nodes (31): Android install, CalendarPicker (within EventForm — conditional, D ### Community 5 - "Community 5" Cohesion: 0.06 -Nodes (31): dependencies, drizzle-orm, hono, @hono/node-server, @hono/oidc-auth, @hono/zod-validator, ical.js, mysql2 (+23 more) +Nodes (32): dependencies, drizzle-orm, fractional-indexing, hono, @hono/node-server, @hono/oidc-auth, @hono/zod-validator, ical.js (+24 more) ### Community 6 - "Community 6" Cohesion: 0.06 @@ -305,12 +522,12 @@ Cohesion: 0.09 Nodes (22): Canonical References, Claude's Discretion (deferred to research/planner), Deferred Ideas, Entry gate & transport, Established Patterns, Existing Code Insights, Implementation Decisions, Integration Points (+14 more) ### Community 16 - "Community 16" -Cohesion: 0.14 -Nodes (18): createEvent(), CreateEventPayload, CreateEventResponse, fetchSyncStatus(), fetchWritableCalendars(), MeResponse, MeUser, OccurrencesResponse (+10 more) +Cohesion: 0.18 +Nodes (13): createEvent(), CreateEventPayload, fetchWritableCalendars(), RecurrencePreset, updateEvent(), EventForm(), exclusiveEndToInclusiveDate(), initFormDateTime() (+5 more) ### Community 17 - "Community 17" -Cohesion: 0.16 -Nodes (14): ContextVariableMap, DEV_USER, devAuthBypass(), claimStr(), deriveDisplayName(), upsertUser(), eventFieldsSchema, eventsQuerySchema (+6 more) +Cohesion: 0.11 +Nodes (22): ContextVariableMap, DEV_USER, devAuthBypass(), claimStr(), COLOR_PALETTE, deriveDisplayName(), mockDb, upsertUser() (+14 more) ### Community 18 - "Community 18" Cohesion: 0.09 @@ -374,7 +591,7 @@ Nodes (17): CR-01: Event edit/delete ownership check resolves an arbitrary membe ### Community 33 - "Community 33" Cohesion: 0.11 -Nodes (17): compilerOptions, declaration, declarationMap, esModuleInterop, forceConsistentCasingInFileNames, lib, module, moduleResolution (+9 more) +Nodes (18): compilerOptions, declaration, declarationMap, esModuleInterop, forceConsistentCasingInFileNames, lib, module, moduleResolution (+10 more) ### Community 34 - "Community 34" Cohesion: 0.12 @@ -413,8 +630,8 @@ Cohesion: 0.12 Nodes (15): 1. Register FamilySync as an Authelia OIDC confidential client, 2. Set OIDC_AUTH_EXTERNAL_URL in the app's .env, 3. Expose via Pangolin / Newt (Mode A local rig), 4. Apply database schema (first deploy only), 5. Bring up the app and confirm /health over the tunnel, Gate 2 Checklist, Header, /health Tunnel Verification (+7 more) ### Community 43 - "Community 43" -Cohesion: 0.23 -Nodes (11): createFastmailClient(), FastmailClient, runPoll(), startBrokerPoller(), main(), syncCalendar(), calendarEvents, calendarOutbox (+3 more) +Cohesion: 0.18 +Nodes (13): createFastmailClient(), FastmailClient, decryptPassword(), EncryptedPayload, encryptPassword(), getKey(), getCrypto(), runPoll() (+5 more) ### Community 44 - "Community 44" Cohesion: 0.13 @@ -449,8 +666,8 @@ Cohesion: 0.13 Nodes (14): Auto-fixed Issues, BUG 1 — Missing join on PATCH/:uid/edit and DELETE/:uid (BLOCKING), BUG 2 — Blank displayName from weak OIDC claim reading, BUG 3 — GET /api/events returning all users' events, Bug Details, Deviations from Plan, Known Stubs, Operator Actions Required (+6 more) ### Community 52 - "Community 52" -Cohesion: 0.16 -Nodes (11): fetchEvents(), fetchMe(), ALLDAY_OCCURRENCE, makeQueryClient(), mockEventsServiceSet, renderWithClient(), TIMED_OCCURRENCE, CalendarOccurrence (+3 more) +Cohesion: 0.13 +Nodes (17): fetchEvents(), fetchMe(), CalendarShell(), isPhone(), resolveDefaultView(), ALLDAY_OCCURRENCE, makeQueryClient(), mockEventsServiceSet (+9 more) ### Community 53 - "Community 53" Cohesion: 0.13 @@ -581,20 +798,16 @@ Cohesion: 0.18 Nodes (10): Deviations from Plan, Known Stubs, Quick Task 260606-tv8: Fix Missing Sign-in Redirect in the PWA — Summary, Self-Check: PASSED, Task 1: GET /api/login backend route + tests (commit 237ec49), Task 2: One-shot login-redirect helper + tests (commit 6dc9ccd), Task 3: CalendarShell meQuery wiring (commit c2e0ab1), Threat Flags (+2 more) ### Community 85 - "Community 85" -Cohesion: 0.25 -Nodes (9): CalendarOccurrence, EventDetailPopover(), formatDateTime(), ScheduleXEventModalProps, ALLDAY_OCCURRENCE, { - mockSetOpenEventId, - mockSetEventForm, - mockSetDeleteDialog, -}, OCCURRENCE_WITH_HTML, TIMED_OCCURRENCE (+1 more) +Cohesion: 0.13 +Nodes (18): CalendarOccurrence, CreateEventResponse, deleteEvent(), fetchSyncStatus(), MeResponse, MeUser, OccurrencesResponse, SyncStatus (+10 more) ### Community 86 - "Community 86" -Cohesion: 0.25 -Nodes (8): CalendarOccurrence, expandOccurrences(), formatUtcOffset(), makeOccurrenceId(), OccurrenceMeta, serializeTime(), __dirname, FIXTURES +Cohesion: 0.14 +Nodes (14): CalendarOccurrence, expandOccurrences(), formatUtcOffset(), makeOccurrenceId(), OccurrenceMeta, serializeTime(), __dirname, FIXTURES (+6 more) ### Community 87 - "Community 87" -Cohesion: 0.29 -Nodes (6): CalendarShell(), isPhone(), resolveDefaultView(), clearLoginRedirect(), maybeRedirectToLogin(), locationStub +Cohesion: 0.06 +Nodes (38): addItem(), apiFetch(), createList(), deleteItem(), deleteList(), fetchListItems(), fetchLists(), List (+30 more) ### Community 88 - "Community 88" Cohesion: 0.18 @@ -609,8 +822,8 @@ Cohesion: 0.20 Nodes (9): IN-01: `RRULE_PRESETS` round-trip is lossy for any parameterized RRULE, IN-02: Move-path RRULE preservation depends silently on `rawVevent` being non-empty, Info, Iteration-2 fixes — verified, Phase 3: Code Review Report (Re-Review, Iteration 3 — final --auto pass), Summary, Warnings, WR-01: Missing cached etag still produces an unconditional PUT/DELETE (D-08 gap) (+1 more) ### Community 91 - "Community 91" -Cohesion: 0.24 -Nodes (5): COLOR_PALETTE, mockDb, db, pool, healthRouter +Cohesion: 0.01 +Nodes (171): Communities (210 total, 25 thin omitted), Community 0 - "Community 0", Community 100 - "Community 100", Community 101 - "Community 101", Community 102 - "Community 102", Community 103 - "Community 103", Community 104 - "Community 104", Community 105 - "Community 105" (+163 more) ### Community 92 - "Community 92" Cohesion: 0.20 @@ -701,14 +914,14 @@ Cohesion: 0.25 Nodes (7): Commits, Deviations from Plan, Evidence Recorded (verbatim), Quick Task 260607-u8o: Record SSE-over-Pangolin Smoke Test PASS Summary, Self-Check: PASSED, Verification, What Was Done ### Community 114 - "Community 114" -Cohesion: 0.25 -Nodes (7): WritableCalendar, EDIT_OCCURRENCE, LATE_OCCURRENCE, { +Cohesion: 0.13 +Nodes (11): WritableCalendar, renderPopover(), EDIT_OCCURRENCE, LATE_OCCURRENCE, { mockSetEventForm, mockSetLastSyncedUid, mockCreateEvent, mockUpdateEvent, mockFetchWritableCalendars, -}, ONE_CALENDAR, RECURRING_OCCURRENCE, TWO_CALENDARS +}, ONE_CALENDAR, RECURRING_OCCURRENCE, renderForm() (+3 more) ### Community 115 - "Community 115" Cohesion: 0.25 @@ -735,20 +948,16 @@ Cohesion: 0.25 Nodes (4): ErrorBoundary, ErrorBoundaryProps, ErrorBoundaryState, queryClient ### Community 119 - "Community 119" -Cohesion: 0.25 -Nodes (5): renderPopover(), renderForm(), SyncStateToast(), { - mockLastSyncedUid, - mockSetLastSyncedUid, - mockFetchSyncStatus, -}, renderToast() +Cohesion: 0.07 +Nodes (29): auth, build_system, cache, calendar_backend, calendar_ui, client_state, content_formats, database (+21 more) ### Community 120 - "Community 120" Cohesion: 0.29 Nodes (6): Architectural Decisions, Capability Proven End-to-End, Out of Scope (Deferred to Later Slices), Stack Touched in Phase 1, Subsequent Slice Plan, Walking Skeleton — FamilySync ### Community 121 - "Community 121" -Cohesion: 0.33 -Nodes (5): deleteEvent(), DeleteConfirmationDialog(), makeQueryClient(), { +Cohesion: 0.50 +Nodes (4): DeleteConfirmationDialog(), makeQueryClient(), { mockDeleteEvent, mockSetDeleteDialog, mockSetLastSyncedUid, @@ -758,8 +967,8 @@ Nodes (5): deleteEvent(), DeleteConfirmationDialog(), makeQueryClient(), { }, renderDialog() ### Community 122 - "Community 122" -Cohesion: 0.38 -Nodes (5): decryptPassword(), EncryptedPayload, encryptPassword(), getKey(), getCrypto() +Cohesion: 0.07 +Nodes (30): checkConstraint, compositePrimaryKeys, foreignKeys, columns, name, indexes, name, uniqueConstraints (+22 more) ### Community 123 - "Community 123" Cohesion: 0.29 @@ -905,6 +1114,10 @@ Nodes (4): Phase Requirements → Test Map, Test Framework, Validation Architect Cohesion: 0.50 Nodes (3): Infrastructure State, Open Decisions for the Planner (intentionally NOT pre-decided), Required Reading (in order) +### Community 159 - "Community 159" +Cohesion: 0.09 +Nodes (21): API Surface, `DELETE /api/events/:uid`, `DELETE /api/list-items/:itemId`, `DELETE /api/lists/:id`, `GET /api/events`, `GET /api/events/sync-status`, `GET /api/events/writable-calendars`, `GET /api/lists` (+13 more) + ### Community 160 - "Community 160" Cohesion: 0.50 Nodes (3): Adopt drizzle generate+migrate workflow (retire db:push on MariaDB), Goal, Tasks @@ -949,25 +1162,889 @@ Nodes (3): Core (already installed — no new installs needed), New Dependencies Cohesion: 0.67 Nodes (3): plan_review, source_grounding, source_grounding_authority +### Community 210 - "Community 210" +Cohesion: 0.16 +Nodes (7): listItems, lists, listShares, memberCredentials, users, getAccessibleListIds(), getApp() + +### Community 211 - "Community 211" +Cohesion: 0.11 +Nodes (19): columns, autoincrement, name, notNull, primaryKey, type, color, ctag (+11 more) + +### Community 212 - "Community 212" +Cohesion: 0.11 +Nodes (17): 10. Live sync between two members (within seconds), 11. Live sync survives a brief reconnect, 12. Private-list isolation (no cross-leak), 1. Cold Start Smoke Test, 2. Navigate to Lists (bottom tab bar), 3. Create a named list (defaults to Shared), 4. Delete a list with confirmation, 5. Open a list and add items (+9 more) + +### Community 213 - "Community 213" +Cohesion: 0.12 +Nodes (16): 10. Coverage check (goal-backward against the phase user story), 1. Cold-start smoke — app boots and renders after the fixes, 2. Create-event UI flow → enqueue → sync feedback, 3. All-day toggle hides time inputs, 4. Edit mode pre-fill + recurrence preserved (WR-01 / WR-02 fix), 5. Member-scoped read (CR-01 GET path), 6. CR-01/CR-02 member-scoped edit/delete + freshest-etag (byte/SQL level), 7. CR-03 all-day inclusive/exclusive round-trip (byte level) (+8 more) + +### Community 214 - "Community 214" +Cohesion: 0.12 +Nodes (16): CR-01: Sharee can de-share or re-share a list — privilege escalation on `isShared` toggle, CR-02: SSE subscription scope is stale — newly shared lists never delivered to live subscribers, CR-03: `Number(c.req.param(...))` — NaN propagates silently into DB queries, Critical Issues, IN-01: `useListSSE` connects to `/api/sse/lists` — not scoped to the current `listId`, IN-02: `getAccessibleListIds` issues two sequential DB round-trips that could be one query, IN-03: The 401 test in `lists.test.ts` is a no-op assertion, Info (+8 more) + +### Community 215 - "Community 215" +Cohesion: 0.12 +Nodes (17): checkConstraint, compositePrimaryKeys, foreignKeys, columns, name, indexes, name, uniqueConstraints (+9 more) + +### Community 216 - "Community 216" +Cohesion: 0.12 +Nodes (17): list_items_id, list_items_list_id_lists_id_fk, checkConstraint, compositePrimaryKeys, foreignKeys, columns, name, columnsFrom (+9 more) + +### Community 217 - "Community 217" +Cohesion: 0.12 +Nodes (17): list_shares_id, columns, isUnique, name, idx_list_shares_user_id, checkConstraint, columns, compositePrimaryKeys (+9 more) + +### Community 218 - "Community 218" +Cohesion: 0.12 +Nodes (17): list_shares_list_id_lists_id_fk, list_shares_user_id_users_id_fk, foreignKeys, columnsFrom, columnsTo, name, onDelete, onUpdate (+9 more) + +### Community 219 - "Community 219" +Cohesion: 0.12 +Nodes (15): Accomplishments, Decisions Made, Dependency graph, Deviations from Plan, Files Created/Modified, Issues Encountered, Metrics, Must-Haves Verification (+7 more) + +### Community 220 - "Community 220" +Cohesion: 0.13 +Nodes (14): API Tests, Auto-fixed Issues, Deviations from Plan, Existing Tests, Full API Suite, Known Stubs, Phase 4 Plan 3: List CRUD Vertical Slice Summary, Playwright Browser Check (+6 more) + +### Community 221 - "Community 221" +Cohesion: 0.13 +Nodes (14): Anti-Patterns Found, Behavioral Spot-Checks, Data-Flow Trace (Level 4), Gap Closure Detail: LIST-03 Rank Collation, Gap Closure Detail: T-04-08 / T-04-05 Owner Guard, Gaps Summary, Goal Achievement, Human Verification Required (+6 more) + +### Community 222 - "Community 222" +Cohesion: 0.14 +Nodes (13): Auto-fixed Issues, Deviations from Plan, Known Stubs, Migration, Phase 4 Plan 1: Foundation Shell Summary, Playwright Browser Check (per CLAUDE.md convention), Self-Check: PASSED, Tasks Completed (+5 more) + +### Community 223 - "Community 223" +Cohesion: 0.14 +Nodes (13): Auto-fixed Issues, Deviations from Plan, Full API Suite, ioredis Check, Known Stubs, Phase 4 Plan 2: Scoped Fan-out Primitives Summary, Self-Check: PASSED, Tasks Completed (+5 more) + +### Community 224 - "Community 224" +Cohesion: 0.14 +Nodes (13): API Tests, Auto-fixed Issues, Deviations from Plan, Known Stubs, Phase 4 Plan 4: Item CRUD + Checked-Sink Vertical Slice Summary, Playwright Browser Check, PWA Tests, Self-Check: PASSED (+5 more) + +### Community 225 - "Community 225" +Cohesion: 0.14 +Nodes (13): API Tests, Deviations from Plan, Known Stubs, Phase 4 Plan 6: Live-Sync SSE Vertical Slice Summary, Playwright Browser Check, PWA Tests, Self-Check: PASSED, SSE Endpoint Verification (+5 more) + +### Community 226 - "Community 226" +Cohesion: 0.15 +Nodes (12): API Tests, Auto-fixed Issues, Deviations from Plan, Known Stubs, Phase 4 Plan 5: Drag-to-Reorder Vertical Slice Summary, Playwright Browser Check, PWA Tests, PWA TypeScript (+4 more) + +### Community 227 - "Community 227" +Cohesion: 0.15 +Nodes (13): indexes, columns, isUnique, name, columns, isUnique, name, columns (+5 more) + +### Community 228 - "Community 228" +Cohesion: 0.15 +Nodes (13): columns, group_id, last_error, autoincrement, name, notNull, primaryKey, type (+5 more) + +### Community 229 - "Community 229" +Cohesion: 0.15 +Nodes (13): list_id, user_id, autoincrement, name, notNull, primaryKey, type, columns (+5 more) + +### Community 230 - "Community 230" +Cohesion: 0.15 +Nodes (13): name, owner_id, columns, autoincrement, name, notNull, primaryKey, type (+5 more) + +### Community 231 - "Community 231" +Cohesion: 0.15 +Nodes (13): rank, text, columns, autoincrement, name, notNull, primaryKey, type (+5 more) + +### Community 232 - "Community 232" +Cohesion: 0.15 +Nodes (13): indexes, columns, isUnique, name, columns, isUnique, name, columns (+5 more) + +### Community 233 - "Community 233" +Cohesion: 0.15 +Nodes (13): autoincrement, name, notNull, primaryKey, type, columns, autoincrement, name (+5 more) + +### Community 234 - "Community 234" +Cohesion: 0.15 +Nodes (13): indexes, columns, isUnique, name, columns, isUnique, name, columns (+5 more) + +### Community 235 - "Community 235" +Cohesion: 0.15 +Nodes (13): name, owner_id, columns, autoincrement, name, notNull, primaryKey, type (+5 more) + +### Community 236 - "Community 236" +Cohesion: 0.15 +Nodes (13): rank, text, columns, autoincrement, name, notNull, primaryKey, type (+5 more) + +### Community 237 - "Community 237" +Cohesion: 0.17 +Nodes (12): checkConstraint, compositePrimaryKeys, foreignKeys, columns, name, name, uniqueConstraints, calendar_events_id (+4 more) + +### Community 238 - "Community 238" +Cohesion: 0.17 +Nodes (12): list_shares_id, checkConstraint, compositePrimaryKeys, foreignKeys, columns, name, name, uniqueConstraints (+4 more) + +### Community 239 - "Community 239" +Cohesion: 0.17 +Nodes (12): checkConstraint, compositePrimaryKeys, foreignKeys, columns, name, name, uniqueConstraints, calendar_events_id (+4 more) + +### Community 240 - "Community 240" +Cohesion: 0.18 +Nodes (10): Accepted Risks Log, Audit Observations (non-blocking, from 04-REVIEW.md), Closed Threat Detail (Plan 04-07), Phase 4 — Security, Security Audit Trail, Sign-Off, T-04-05 — isShared reconciliation runs for any allowed user — CLOSED, T-04-08 — Sharee can rewrite list_shares via PATCH `isShared` — CLOSED (+2 more) + +### Community 241 - "Community 241" +Cohesion: 0.18 +Nodes (10): Community Hubs (Navigation), Corpus Check, God Nodes (most connected - your core abstractions), Graph Freshness, Graph Report - familysync (2026-06-09), Import Cycles, Knowledge Gaps, Suggested Questions (+2 more) + +### Community 242 - "Community 242" +Cohesion: 0.18 +Nodes (3): MockEventSource, MockEventSourceInstance, mockInstances + +### Community 243 - "Community 243" +Cohesion: 0.18 +Nodes (11): lists_owner_id_users_id_fk, columns, isUnique, name, idx_lists_owner_id, foreignKeys, indexes, name (+3 more) + +### Community 244 - "Community 244" +Cohesion: 0.18 +Nodes (11): lists_owner_id_users_id_fk, columns, isUnique, name, idx_lists_owner_id, foreignKeys, indexes, name (+3 more) + +### Community 245 - "Community 245" +Cohesion: 0.22 +Nodes (9): PATCH /api/events/:uid/edit, auth, body, description, file, method, params, path (+1 more) + +### Community 246 - "Community 246" +Cohesion: 0.22 +Nodes (9): PATCH /api/list-items/:itemId, auth, body, description, file, method, params, path (+1 more) + +### Community 247 - "Community 247" +Cohesion: 0.22 +Nodes (9): PATCH /api/lists/:id, auth, body, description, file, method, params, path (+1 more) + +### Community 248 - "Community 248" +Cohesion: 0.22 +Nodes (9): POST /api/lists/:id/items, auth, body, description, file, method, params, path (+1 more) + +### Community 249 - "Community 249" +Cohesion: 0.22 +Nodes (9): columns, isUnique, name, columns, isUnique, name, idx_list_items_list_id_checked, idx_list_items_list_id_rank (+1 more) + +### Community 250 - "Community 250" +Cohesion: 0.22 +Nodes (9): checkConstraint, compositePrimaryKeys, foreignKeys, columns, name, name, uniqueConstraints, calendar_outbox_id (+1 more) + +### Community 251 - "Community 251" +Cohesion: 0.22 +Nodes (9): foreignKeys, columnsFrom, columnsTo, name, onDelete, onUpdate, tableFrom, tableTo (+1 more) + +### Community 252 - "Community 252" +Cohesion: 0.22 +Nodes (9): list_items_id, checkConstraint, compositePrimaryKeys, foreignKeys, columns, name, name, uniqueConstraints (+1 more) + +### Community 253 - "Community 253" +Cohesion: 0.22 +Nodes (9): columns, isUnique, name, columns, isUnique, name, idx_list_items_list_id_checked, idx_list_items_list_id_rank (+1 more) + +### Community 254 - "Community 254" +Cohesion: 0.25 +Nodes (8): auth, description, file, method, params, path, response, DELETE /api/events/:uid + +### Community 255 - "Community 255" +Cohesion: 0.25 +Nodes (8): auth, description, file, method, params, path, response, DELETE /api/list-items/:itemId + +### Community 256 - "Community 256" +Cohesion: 0.25 +Nodes (8): auth, description, file, method, params, path, response, DELETE /api/lists/:id + +### Community 257 - "Community 257" +Cohesion: 0.25 +Nodes (8): GET /api/events, auth, description, file, method, params, path, response + +### Community 258 - "Community 258" +Cohesion: 0.25 +Nodes (8): GET /api/events/sync-status, auth, description, file, method, params, path, response + +### Community 259 - "Community 259" +Cohesion: 0.25 +Nodes (8): GET /api/lists/:id/items, auth, description, file, method, params, path, response + +### Community 260 - "Community 260" +Cohesion: 0.25 +Nodes (8): POST /api/events/create, auth, body, description, file, method, path, response + +### Community 261 - "Community 261" +Cohesion: 0.25 +Nodes (8): POST /api/lists, auth, body, description, file, method, path, response + +### Community 262 - "Community 262" +Cohesion: 0.25 +Nodes (8): columnsFrom, columnsTo, name, onDelete, onUpdate, tableFrom, tableTo, calendar_events_calendar_id_calendars_id_fk + +### Community 263 - "Community 263" +Cohesion: 0.25 +Nodes (8): columnsFrom, columnsTo, name, onDelete, onUpdate, tableFrom, tableTo, calendars_user_id_users_id_fk + +### Community 264 - "Community 264" +Cohesion: 0.25 +Nodes (8): updated_at, autoincrement, default, name, notNull, onUpdate, primaryKey, type + +### Community 265 - "Community 265" +Cohesion: 0.25 +Nodes (8): list_shares_list_id_lists_id_fk, columnsFrom, columnsTo, name, onDelete, onUpdate, tableFrom, tableTo + +### Community 266 - "Community 266" +Cohesion: 0.25 +Nodes (8): list_shares_user_id_users_id_fk, columnsFrom, columnsTo, name, onDelete, onUpdate, tableFrom, tableTo + +### Community 267 - "Community 267" +Cohesion: 0.25 +Nodes (8): columnsFrom, columnsTo, name, onDelete, onUpdate, tableFrom, tableTo, calendar_events_calendar_id_calendars_id_fk + +### Community 268 - "Community 268" +Cohesion: 0.25 +Nodes (8): columnsFrom, columnsTo, name, onDelete, onUpdate, tableFrom, tableTo, calendar_outbox_user_id_users_id_fk + +### Community 269 - "Community 269" +Cohesion: 0.25 +Nodes (8): checkConstraint, columns, compositePrimaryKeys, columns, name, name, calendars_id, calendars + +### Community 270 - "Community 270" +Cohesion: 0.25 +Nodes (8): updated_at, autoincrement, default, name, notNull, onUpdate, primaryKey, type + +### Community 271 - "Community 271" +Cohesion: 0.25 +Nodes (8): list_items_list_id_lists_id_fk, columnsFrom, columnsTo, name, onDelete, onUpdate, tableFrom, tableTo + +### Community 272 - "Community 272" +Cohesion: 0.29 +Nodes (6): Accepted Risks Log, Phase 03 — Security, Security Audit Trail, Sign-Off, Threat Register, Trust Boundaries + +### Community 273 - "Community 273" +Cohesion: 0.29 +Nodes (7): GET /api/events/writable-calendars, auth, description, file, method, path, response + +### Community 274 - "Community 274" +Cohesion: 0.29 +Nodes (7): GET /api/lists, auth, description, file, method, path, response + +### Community 275 - "Community 275" +Cohesion: 0.29 +Nodes (7): GET /api/me, auth, description, file, method, path, response + +### Community 276 - "Community 276" +Cohesion: 0.29 +Nodes (7): GET /api/sse/heartbeat, auth, description, file, method, path, response + +### Community 277 - "Community 277" +Cohesion: 0.29 +Nodes (7): GET /api/sse/lists, auth, description, file, method, path, response + +### Community 278 - "Community 278" +Cohesion: 0.29 +Nodes (7): autoincrement, default, name, notNull, primaryKey, type, all_day + +### Community 279 - "Community 279" +Cohesion: 0.29 +Nodes (7): autoincrement, default, name, notNull, primaryKey, type, attempt_count + +### Community 280 - "Community 280" +Cohesion: 0.29 +Nodes (7): columns, autoincrement, name, notNull, primaryKey, type, calendar_id + +### Community 281 - "Community 281" +Cohesion: 0.29 +Nodes (7): autoincrement, default, name, notNull, primaryKey, type, checked + +### Community 282 - "Community 282" +Cohesion: 0.29 +Nodes (7): created_at, autoincrement, default, name, notNull, primaryKey, type + +### Community 283 - "Community 283" +Cohesion: 0.29 +Nodes (7): has_rrule, autoincrement, default, name, notNull, primaryKey, type + +### Community 284 - "Community 284" +Cohesion: 0.29 +Nodes (7): is_shared, autoincrement, default, name, notNull, primaryKey, type + +### Community 285 - "Community 285" +Cohesion: 0.29 +Nodes (7): next_attempt_at, autoincrement, default, name, notNull, primaryKey, type + +### Community 286 - "Community 286" +Cohesion: 0.29 +Nodes (7): status, autoincrement, default, name, notNull, primaryKey, type + +### Community 287 - "Community 287" +Cohesion: 0.29 +Nodes (7): autoincrement, default, name, notNull, primaryKey, type, all_day + +### Community 288 - "Community 288" +Cohesion: 0.29 +Nodes (7): autoincrement, default, name, notNull, primaryKey, type, attempt_count + +### Community 289 - "Community 289" +Cohesion: 0.29 +Nodes (7): columns, autoincrement, name, notNull, primaryKey, type, calendar_id + +### Community 290 - "Community 290" +Cohesion: 0.29 +Nodes (7): autoincrement, default, name, notNull, primaryKey, type, checked + +### Community 291 - "Community 291" +Cohesion: 0.29 +Nodes (7): created_at, autoincrement, default, name, notNull, primaryKey, type + +### Community 292 - "Community 292" +Cohesion: 0.29 +Nodes (7): has_rrule, autoincrement, default, name, notNull, primaryKey, type + +### Community 293 - "Community 293" +Cohesion: 0.29 +Nodes (7): is_shared, autoincrement, default, name, notNull, primaryKey, type + +### Community 294 - "Community 294" +Cohesion: 0.29 +Nodes (7): next_attempt_at, autoincrement, default, name, notNull, primaryKey, type + +### Community 295 - "Community 295" +Cohesion: 0.29 +Nodes (7): status, autoincrement, default, name, notNull, primaryKey, type + +### Community 296 - "Community 296" +Cohesion: 0.33 +Nodes (5): entries, _meta, commit, updated_at, version + +### Community 297 - "Community 297" +Cohesion: 0.33 +Nodes (6): GET /api/login, auth, description, file, method, path + +### Community 298 - "Community 298" +Cohesion: 0.33 +Nodes (6): GET /callback, auth, description, file, method, path + +### Community 299 - "Community 299" +Cohesion: 0.33 +Nodes (6): GET /health, auth, description, file, method, path + +### Community 300 - "Community 300" +Cohesion: 0.33 +Nodes (5): entries, _meta, commit, updated_at, version + +### Community 301 - "Community 301" +Cohesion: 0.33 +Nodes (6): invocation, type, used_by, version, workspace, @dnd-kit/core + +### Community 302 - "Community 302" +Cohesion: 0.33 +Nodes (6): invocation, type, used_by, version, workspace, @dnd-kit/sortable + +### Community 303 - "Community 303" +Cohesion: 0.33 +Nodes (6): invocation, type, used_by, version, workspace, drizzle-kit + +### Community 304 - "Community 304" +Cohesion: 0.33 +Nodes (6): invocation, type, used_by, version, workspace, drizzle-orm + +### Community 305 - "Community 305" +Cohesion: 0.33 +Nodes (6): fractional-indexing, invocation, type, used_by, version, workspace + +### Community 306 - "Community 306" +Cohesion: 0.33 +Nodes (6): hono, invocation, type, used_by, version, workspace + +### Community 307 - "Community 307" +Cohesion: 0.33 +Nodes (6): @hono/node-server, invocation, type, used_by, version, workspace + +### Community 308 - "Community 308" +Cohesion: 0.33 +Nodes (6): @hono/oidc-auth, invocation, type, used_by, version, workspace + +### Community 309 - "Community 309" +Cohesion: 0.33 +Nodes (6): @hono/zod-validator, invocation, type, used_by, version, workspace + +### Community 310 - "Community 310" +Cohesion: 0.33 +Nodes (6): ical.js, invocation, type, used_by, version, workspace + +### Community 311 - "Community 311" +Cohesion: 0.33 +Nodes (6): lucide-react, invocation, type, used_by, version, workspace + +### Community 312 - "Community 312" +Cohesion: 0.33 +Nodes (6): mysql2, invocation, type, used_by, version, workspace + +### Community 313 - "Community 313" +Cohesion: 0.33 +Nodes (6): node-cron, invocation, type, used_by, version, workspace + +### Community 314 - "Community 314" +Cohesion: 0.33 +Nodes (6): react, invocation, type, used_by, version, workspace + +### Community 315 - "Community 315" +Cohesion: 0.33 +Nodes (6): react-router, invocation, type, used_by, version, workspace + +### Community 316 - "Community 316" +Cohesion: 0.33 +Nodes (6): @schedule-x/calendar, invocation, type, used_by, version, workspace + +### Community 317 - "Community 317" +Cohesion: 0.33 +Nodes (6): @schedule-x/react, invocation, type, used_by, version, workspace + +### Community 318 - "Community 318" +Cohesion: 0.33 +Nodes (6): @tanstack/react-query, invocation, type, used_by, version, workspace + +### Community 319 - "Community 319" +Cohesion: 0.33 +Nodes (6): temporal-polyfill, invocation, type, used_by, version, workspace + +### Community 320 - "Community 320" +Cohesion: 0.33 +Nodes (6): tsdav, invocation, type, used_by, version, workspace + +### Community 321 - "Community 321" +Cohesion: 0.33 +Nodes (6): vite, invocation, type, used_by, version, workspace + +### Community 322 - "Community 322" +Cohesion: 0.33 +Nodes (6): vite-plugin-pwa, invocation, type, used_by, version, workspace + +### Community 323 - "Community 323" +Cohesion: 0.33 +Nodes (6): vitest, invocation, type, used_by, version, workspace + +### Community 324 - "Community 324" +Cohesion: 0.33 +Nodes (6): zod, invocation, type, used_by, version, workspace + +### Community 325 - "Community 325" +Cohesion: 0.33 +Nodes (6): zustand, invocation, type, used_by, version, workspace + +### Community 326 - "Community 326" +Cohesion: 0.33 +Nodes (5): entries, _meta, commit, updated_at, version + +### Community 327 - "Community 327" +Cohesion: 0.53 +Nodes (4): emitter, ListEvent, publishListEvent(), subscribeListEvents() + +### Community 328 - "Community 328" +Cohesion: 0.33 +Nodes (6): autoincrement, name, notNull, primaryKey, type, calendar_object_url + +### Community 329 - "Community 329" +Cohesion: 0.33 +Nodes (6): autoincrement, name, notNull, primaryKey, type, calendar_url + +### Community 330 - "Community 330" +Cohesion: 0.33 +Nodes (6): dtstart_date, autoincrement, name, notNull, primaryKey, type + +### Community 331 - "Community 331" +Cohesion: 0.33 +Nodes (6): dtstart_utc, autoincrement, name, notNull, primaryKey, type + +### Community 332 - "Community 332" +Cohesion: 0.33 +Nodes (6): etag, autoincrement, name, notNull, primaryKey, type + +### Community 333 - "Community 333" +Cohesion: 0.33 +Nodes (6): id, autoincrement, name, notNull, primaryKey, type + +### Community 334 - "Community 334" +Cohesion: 0.33 +Nodes (6): last_synced_at, autoincrement, name, notNull, primaryKey, type + +### Community 335 - "Community 335" +Cohesion: 0.33 +Nodes (6): object_url, autoincrement, name, notNull, primaryKey, type + +### Community 336 - "Community 336" +Cohesion: 0.33 +Nodes (6): operation, autoincrement, name, notNull, primaryKey, type + +### Community 337 - "Community 337" +Cohesion: 0.33 +Nodes (6): payload, autoincrement, name, notNull, primaryKey, type + +### Community 338 - "Community 338" +Cohesion: 0.33 +Nodes (6): raw_vevent, autoincrement, name, notNull, primaryKey, type + +### Community 339 - "Community 339" +Cohesion: 0.33 +Nodes (6): sync_token, autoincrement, name, notNull, primaryKey, type + +### Community 340 - "Community 340" +Cohesion: 0.33 +Nodes (6): uid, autoincrement, name, notNull, primaryKey, type + +### Community 341 - "Community 341" +Cohesion: 0.33 +Nodes (6): url, autoincrement, name, notNull, primaryKey, type + +### Community 342 - "Community 342" +Cohesion: 0.33 +Nodes (6): autoincrement, name, notNull, primaryKey, type, color + +### Community 343 - "Community 343" +Cohesion: 0.33 +Nodes (6): ctag, autoincrement, name, notNull, primaryKey, type + +### Community 344 - "Community 344" +Cohesion: 0.33 +Nodes (6): display_name, autoincrement, name, notNull, primaryKey, type + +### Community 345 - "Community 345" +Cohesion: 0.33 +Nodes (6): dtstart_date, autoincrement, name, notNull, primaryKey, type + +### Community 346 - "Community 346" +Cohesion: 0.33 +Nodes (6): dtstart_utc, autoincrement, name, notNull, primaryKey, type + +### Community 347 - "Community 347" +Cohesion: 0.33 +Nodes (6): etag, autoincrement, name, notNull, primaryKey, type + +### Community 348 - "Community 348" +Cohesion: 0.33 +Nodes (6): group_id, autoincrement, name, notNull, primaryKey, type + +### Community 349 - "Community 349" +Cohesion: 0.33 +Nodes (6): id, autoincrement, name, notNull, primaryKey, type + +### Community 350 - "Community 350" +Cohesion: 0.33 +Nodes (6): last_error, autoincrement, name, notNull, primaryKey, type + +### Community 351 - "Community 351" +Cohesion: 0.33 +Nodes (6): last_synced_at, autoincrement, name, notNull, primaryKey, type + +### Community 352 - "Community 352" +Cohesion: 0.33 +Nodes (6): list_id, autoincrement, name, notNull, primaryKey, type + +### Community 353 - "Community 353" +Cohesion: 0.33 +Nodes (6): object_url, autoincrement, name, notNull, primaryKey, type + +### Community 354 - "Community 354" +Cohesion: 0.33 +Nodes (6): operation, autoincrement, name, notNull, primaryKey, type + +### Community 355 - "Community 355" +Cohesion: 0.33 +Nodes (6): payload, autoincrement, name, notNull, primaryKey, type + +### Community 356 - "Community 356" +Cohesion: 0.33 +Nodes (6): raw_vevent, autoincrement, name, notNull, primaryKey, type + +### Community 357 - "Community 357" +Cohesion: 0.33 +Nodes (6): sync_token, autoincrement, name, notNull, primaryKey, type + +### Community 358 - "Community 358" +Cohesion: 0.33 +Nodes (6): uid, autoincrement, name, notNull, primaryKey, type + +### Community 359 - "Community 359" +Cohesion: 0.33 +Nodes (6): url, autoincrement, name, notNull, primaryKey, type + +### Community 360 - "Community 360" +Cohesion: 0.33 +Nodes (6): user_id, autoincrement, name, notNull, primaryKey, type + +### Community 361 - "Community 361" +Cohesion: 0.40 +Nodes (4): _meta, commit, updated_at, version + +### Community 362 - "Community 362" +Cohesion: 0.40 +Nodes (5): decision, files, title, entries, D-08-per-field-lww-patch + +### Community 363 - "Community 363" +Cohesion: 0.40 +Nodes (5): exports, imports, notes, type, apps/api/src/auth/devBypass.ts + +### Community 364 - "Community 364" +Cohesion: 0.40 +Nodes (5): exports, imports, notes, type, apps/api/src/auth/middleware.ts + +### Community 365 - "Community 365" +Cohesion: 0.40 +Nodes (5): exports, imports, notes, type, apps/api/src/auth/user.ts + +### Community 366 - "Community 366" +Cohesion: 0.40 +Nodes (5): exports, imports, notes, type, apps/api/src/broker/client.ts + +### Community 367 - "Community 367" +Cohesion: 0.40 +Nodes (5): exports, imports, notes, type, apps/api/src/broker/crypto.ts + +### Community 368 - "Community 368" +Cohesion: 0.40 +Nodes (5): exports, imports, notes, type, apps/api/src/broker/expand.ts + +### Community 369 - "Community 369" +Cohesion: 0.40 +Nodes (5): exports, imports, notes, type, apps/api/src/broker/outboxWorker.ts + +### Community 370 - "Community 370" +Cohesion: 0.40 +Nodes (5): exports, imports, notes, type, apps/api/src/broker/poller.ts + +### Community 371 - "Community 371" +Cohesion: 0.40 +Nodes (5): exports, imports, notes, type, apps/api/src/broker/sync.ts + +### Community 372 - "Community 372" +Cohesion: 0.40 +Nodes (5): exports, imports, notes, type, apps/api/src/broker/vevent.ts + +### Community 373 - "Community 373" +Cohesion: 0.40 +Nodes (5): exports, imports, notes, type, apps/api/src/broker/write.ts + +### Community 374 - "Community 374" +Cohesion: 0.40 +Nodes (5): exports, imports, notes, type, apps/api/src/db/client.ts + +### Community 375 - "Community 375" +Cohesion: 0.40 +Nodes (5): exports, imports, notes, type, apps/api/src/db/schema.ts + +### Community 376 - "Community 376" +Cohesion: 0.40 +Nodes (5): exports, imports, notes, type, apps/api/src/index.ts + +### Community 377 - "Community 377" +Cohesion: 0.40 +Nodes (5): exports, imports, notes, type, apps/api/src/lib/listAccess.ts + +### Community 378 - "Community 378" +Cohesion: 0.40 +Nodes (5): exports, imports, notes, type, apps/api/src/lib/listEmitter.ts + +### Community 379 - "Community 379" +Cohesion: 0.40 +Nodes (5): exports, imports, notes, type, apps/api/src/lib/rank.ts + +### Community 380 - "Community 380" +Cohesion: 0.40 +Nodes (5): exports, imports, notes, type, apps/api/src/routes/events.ts + +### Community 381 - "Community 381" +Cohesion: 0.40 +Nodes (5): exports, imports, notes, type, apps/api/src/routes/health.ts + +### Community 382 - "Community 382" +Cohesion: 0.40 +Nodes (5): exports, imports, notes, type, apps/api/src/routes/lists.ts + +### Community 383 - "Community 383" +Cohesion: 0.40 +Nodes (5): exports, imports, notes, type, apps/api/src/routes/me.ts + +### Community 384 - "Community 384" +Cohesion: 0.40 +Nodes (5): exports, imports, notes, type, apps/api/src/routes/sse.ts + +### Community 385 - "Community 385" +Cohesion: 0.40 +Nodes (5): exports, imports, notes, type, apps/pwa/src/api/client.ts + +### Community 386 - "Community 386" +Cohesion: 0.40 +Nodes (5): exports, imports, notes, type, apps/pwa/src/api/listsClient.ts + +### Community 387 - "Community 387" +Cohesion: 0.40 +Nodes (5): exports, imports, notes, type, apps/pwa/src/App.tsx + +### Community 388 - "Community 388" +Cohesion: 0.40 +Nodes (5): exports, imports, notes, type, apps/pwa/src/components/BottomTabBar.tsx + +### Community 389 - "Community 389" +Cohesion: 0.40 +Nodes (5): exports, imports, notes, type, apps/pwa/src/components/CalendarShell.tsx + +### Community 390 - "Community 390" +Cohesion: 0.40 +Nodes (5): exports, imports, notes, type, apps/pwa/src/hooks/useListSSE.ts + +### Community 391 - "Community 391" +Cohesion: 0.40 +Nodes (5): exports, imports, notes, type, apps/pwa/src/lib/calendarConfig.ts + +### Community 392 - "Community 392" +Cohesion: 0.40 +Nodes (5): exports, imports, notes, type, apps/pwa/src/lib/colorUtils.ts + +### Community 393 - "Community 393" +Cohesion: 0.40 +Nodes (5): exports, imports, notes, type, apps/pwa/src/lib/eventDateTime.ts + +### Community 394 - "Community 394" +Cohesion: 0.40 +Nodes (5): exports, imports, notes, type, apps/pwa/src/lib/hydrateEvents.ts + +### Community 395 - "Community 395" +Cohesion: 0.40 +Nodes (5): exports, imports, notes, type, apps/pwa/src/lib/loginRedirect.ts + +### Community 396 - "Community 396" +Cohesion: 0.40 +Nodes (5): exports, imports, notes, type, apps/pwa/src/main.tsx + +### Community 397 - "Community 397" +Cohesion: 0.40 +Nodes (5): exports, imports, notes, type, apps/pwa/src/routes/ListDetail.tsx + +### Community 398 - "Community 398" +Cohesion: 0.40 +Nodes (5): exports, imports, notes, type, apps/pwa/src/routes/ListsIndex.tsx + +### Community 399 - "Community 399" +Cohesion: 0.40 +Nodes (5): exports, imports, notes, type, apps/pwa/src/store/calendarStore.ts + +### Community 400 - "Community 400" +Cohesion: 0.40 +Nodes (5): exports, imports, notes, type, apps/pwa/src/store/listsStore.ts + +### Community 401 - "Community 401" +Cohesion: 0.40 +Nodes (4): dialect, id, prevId, version + +### Community 402 - "Community 402" +Cohesion: 0.40 +Nodes (5): columns, isUnique, name, idx_list_shares_user_id, indexes + +### Community 403 - "Community 403" +Cohesion: 0.40 +Nodes (4): dialect, id, prevId, version + +### Community 404 - "Community 404" +Cohesion: 0.40 +Nodes (5): indexes, columns, isUnique, name, idx_calendars_user_id + +### Community 405 - "Community 405" +Cohesion: 0.50 +Nodes (3): Artifacts this phase produces, STRIDE Threat Register, Trust Boundaries + +### Community 406 - "Community 406" +Cohesion: 0.50 +Nodes (4): decision, files, title, broker-cache-api-pattern + +### Community 407 - "Community 407" +Cohesion: 0.50 +Nodes (4): decision, files, title, D-01-D-02-list-sharing + +### Community 408 - "Community 408" +Cohesion: 0.50 +Nodes (4): decision, files, title, D-03-writable-set + +### Community 409 - "Community 409" +Cohesion: 0.50 +Nodes (4): decision, files, title, D-04-scoped-sse-fan-out + +### Community 410 - "Community 410" +Cohesion: 0.50 +Nodes (4): decision, files, title, D-10-D-11-D-12-sse-resilience + +### Community 411 - "Community 411" +Cohesion: 0.50 +Nodes (4): decision, files, title, D-13-dual-field-dtstart + +### Community 412 - "Community 412" +Cohesion: 0.50 +Nodes (4): decision, files, title, D-13-fractional-rank + +### Community 413 - "Community 413" +Cohesion: 0.50 +Nodes (4): decision, files, title, D-16-shared-fastmail-account + +### Community 414 - "Community 414" +Cohesion: 0.50 +Nodes (4): decision, files, title, dev-auth-bypass + +### Community 415 - "Community 415" +Cohesion: 0.50 +Nodes (4): identity-keying, decision, files, title + +### Community 416 - "Community 416" +Cohesion: 0.50 +Nodes (4): lists-storage-mariadb-not-caldav, decision, files, title + +### Community 417 - "Community 417" +Cohesion: 0.50 +Nodes (4): oidc-behind-pangolin, decision, files, title + +### Community 418 - "Community 418" +Cohesion: 0.50 +Nodes (4): outbox-status-machine, decision, files, title + +### Community 419 - "Community 419" +Cohesion: 0.50 +Nodes (4): pwa-static-serving, decision, files, title + +### Community 420 - "Community 420" +Cohesion: 0.50 +Nodes (4): react-router-spa-shell, decision, files, title + +### Community 421 - "Community 421" +Cohesion: 0.50 +Nodes (4): schedule-x-routing, decision, files, title + +### Community 422 - "Community 422" +Cohesion: 0.50 +Nodes (4): state-ownership, decision, files, title + +### Community 423 - "Community 423" +Cohesion: 0.50 +Nodes (4): write-broker-boundary, decision, files, title + +### Community 425 - "Community 425" +Cohesion: 0.50 +Nodes (4): uniqueConstraints, columns, name, uniq_calendar_user_url + +### Community 426 - "Community 426" +Cohesion: 0.50 +Nodes (3): dialect, entries, version + ## Knowledge Gaps -- **1565 isolated node(s):** `allow`, `version`, `timestamp`, `phase`, `phase_name` (+1560 more) +- **3025 isolated node(s):** `allow`, `version`, `timestamp`, `phase`, `phase_name` (+3020 more) These have ≤1 connection - possible missing edges or undocumented components. - **25 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes. ## Suggested Questions _Questions this graph is uniquely positioned to answer:_ -- **Why does `InstallPrompt()` connect `Community 59` to `Community 87`?** - _High betweenness centrality (0.001) - this node is a cross-community bridge._ -- **Why does `ErrorBoundary` connect `Community 118` to `Community 119`?** - _High betweenness centrality (0.001) - this node is a cross-community bridge._ -- **Why does `useCalendarStore` connect `Community 85` to `Community 16`, `Community 114`, `Community 87`, `Community 119`, `Community 121`, `Community 124`?** - _High betweenness centrality (0.001) - this node is a cross-community bridge._ +- **Why does `columns` connect `Community 228` to `Community 229`, `Community 122`, `Community 328`, `Community 329`, `Community 264`, `Community 332`, `Community 333`, `Community 336`, `Community 337`, `Community 340`, `Community 279`, `Community 282`, `Community 285`, `Community 286`?** + _High betweenness centrality (0.006) - this node is a cross-community bridge._ +- **Why does `tables` connect `Community 243` to `Community 237`, `Community 238`, `Community 401`, `Community 215`, `Community 216`, `Community 122`?** + _High betweenness centrality (0.004) - this node is a cross-community bridge._ +- **Why does `tables` connect `Community 244` to `Community 269`, `Community 239`, `Community 403`, `Community 217`, `Community 250`, `Community 252`?** + _High betweenness centrality (0.004) - this node is a cross-community bridge._ - **What connects `allow`, `version`, `timestamp` to the rest of the system?** - _1565 weakly-connected nodes found - possible documentation gaps or missing edges._ + _3025 weakly-connected nodes found - possible documentation gaps or missing edges._ - **Should `Community 0` be split into smaller, more focused modules?** _Cohesion score 0.045454545454545456 - nodes in this community are weakly interconnected._ - **Should `Community 1` be split into smaller, more focused modules?** - _Cohesion score 0.05555555555555555 - nodes in this community are weakly interconnected._ + _Cohesion score 0.05 - nodes in this community are weakly interconnected._ - **Should `Community 2` be split into smaller, more focused modules?** _Cohesion score 0.05555555555555555 - nodes in this community are weakly interconnected._ \ No newline at end of file diff --git a/.planning/graphs/graph.html b/.planning/graphs/graph.html index 3058dd8..70e5d3a 100644 --- a/.planning/graphs/graph.html +++ b/.planning/graphs/graph.html @@ -63,12 +63,12 @@
-
2182 nodes · 2228 edges · 210 communities
+
4090 nodes · 4249 edges · 427 communities