docs: add Phase 18 (timezone) to roadmap; refresh knowledge graph

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Lucas Berger
2026-06-13 21:54:54 -04:00
co-authored by Claude Opus 4.8
parent e169b138f9
commit 7d070a6b69
5 changed files with 18545 additions and 2254 deletions
+11
View File
@@ -617,3 +617,14 @@ Plans:
Plans:
- [ ] TBD (promote with /gsd-review-backlog when ready)
### Phase 18: Auto timezone detection and ability to change timezone
**Goal:** [To be planned]
**Requirements**: TBD
**Depends on:** Phase 17
**Plans:** 0 plans
Plans:
- [ ] TBD (run /gsd-plan-phase 18 to break down)
+1
View File
@@ -189,6 +189,7 @@ Recent decisions affecting current work:
- **v1.1 roadmap reordered (2026-06-10):** same 6 phases / 17 mappings, new order/numbering. Phase 7 = Mobile Test Harness (was 12), Phase 8 = Gitea CI (was 11), Phase 9 = Faster Write-Back (was 7), Phase 10 = Admin Role & Settings (was 8, carries the DB migration), Phase 11 = Per-Event Reminders (was 10), Phase 12 = Initial Setup Wizard (was 9). **Phase 8 (CI) scope extended:** the PR regression now also runs the Phase 7 mobile harness as a UI-regression step, bringing up the dev stack (API + PWA dev servers + MariaDB service container + DEV_AUTH_BYPASS) in the runner — so **Phase 8 now depends on Phase 7**. New critical path: **7 → 8** (CI consumes the harness); **9** independent; **10 → 11** and **10 → 12** (admin migration precedes reminders + wizard). Parallelizable once prerequisites met: 9 anytime; 11 and 12 in parallel after 10; 7 then 8.
- **Phase 16 added (2026-06-12, /gsd-phase):** CI Dependency Audit, Security Checks & Image Hygiene — extend the Phase 8 Gitea CI workflow with outdated-dependency reporting (`pnpm outdated`), a vulnerability audit (`pnpm audit` at a chosen severity), and a baseline of additional security checks (secret scan / image scan). User requested a 16 integer phase (not a decimal insert) — they've been running independent/CI phases ahead of the admin chain. **Depends on Phase 8; independent of the admin chain (1012).** Scope still needs definition — run /gsd-discuss-phase 16. Milestone window now Phases 716.
- **Backlog 999.17 folded into Phase 16 + removed (2026-06-12, /gsd-phase):** the dev/prod image-boundary item (confine `DEV_AUTH_BYPASS` to dev via build/boot-time enforcement; ensure no `.env`/secrets/encryption keys/`DEV_USER` seed/family data ship in published images; CI assertion in the publish job) was pulled into Phase 16 — shared CI surface and overlapping secret/image scanning made a separate phase redundant. The 999.17 backlog entry + its phase dir were **deleted** (not retained-for-history) since the scope now lives in an active phase; this also clears the recycled-number collision with Phase 15's historical "promoted from 999.17" provenance (the markdown-lint item that became Phase 15 had reused 999.17 first).
- **Phase 18 added (2026-06-13, /gsd-phase):** Auto timezone detection and ability to change timezone — let the app auto-detect the household timezone and allow changing it. User invoked `/gsd-phase --insert 18` but Phase 18 didn't exist (17 was the last integer phase), so after confirmation it was added as an integer phase at the end of the milestone, not a decimal insert. Motivated by the Phase 11 all-day-reminder dependency on a correct server `TZ` (all-day reminders fire at 9 AM local, computed from `process.env.TZ`). Scope still needs definition — run /gsd-discuss-phase 18. Milestone window now Phases 718.
### Pending Todos
+322 -103
View File
@@ -1,16 +1,16 @@
# Graph Report - familysync (2026-06-13)
## Corpus Check
- 485 files · ~924,212 words
- 516 files · ~1,006,917 words
- Verdict: corpus is large enough that graph structure adds value.
## Summary
- 6798 nodes · 6885 edges · 664 communities (601 shown, 63 thin omitted)
- 7565 nodes · 7716 edges · 713 communities (646 shown, 67 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: `382b346b`
- Built from commit: `feec0305`
- Run `git rev-parse HEAD` and compare to check if the graph is stale.
- Run `graphify update .` after code changes (no API cost).
@@ -648,35 +648,82 @@
- [[_COMMUNITY_Community 661|Community 661]]
- [[_COMMUNITY_Community 662|Community 662]]
- [[_COMMUNITY_Community 663|Community 663]]
- [[_COMMUNITY_Community 664|Community 664]]
- [[_COMMUNITY_Community 665|Community 665]]
- [[_COMMUNITY_Community 666|Community 666]]
- [[_COMMUNITY_Community 667|Community 667]]
- [[_COMMUNITY_Community 668|Community 668]]
- [[_COMMUNITY_Community 669|Community 669]]
- [[_COMMUNITY_Community 670|Community 670]]
- [[_COMMUNITY_Community 671|Community 671]]
- [[_COMMUNITY_Community 672|Community 672]]
- [[_COMMUNITY_Community 673|Community 673]]
- [[_COMMUNITY_Community 674|Community 674]]
- [[_COMMUNITY_Community 675|Community 675]]
- [[_COMMUNITY_Community 676|Community 676]]
- [[_COMMUNITY_Community 677|Community 677]]
- [[_COMMUNITY_Community 678|Community 678]]
- [[_COMMUNITY_Community 679|Community 679]]
- [[_COMMUNITY_Community 680|Community 680]]
- [[_COMMUNITY_Community 681|Community 681]]
- [[_COMMUNITY_Community 682|Community 682]]
- [[_COMMUNITY_Community 683|Community 683]]
- [[_COMMUNITY_Community 684|Community 684]]
- [[_COMMUNITY_Community 685|Community 685]]
- [[_COMMUNITY_Community 686|Community 686]]
- [[_COMMUNITY_Community 687|Community 687]]
- [[_COMMUNITY_Community 688|Community 688]]
- [[_COMMUNITY_Community 689|Community 689]]
- [[_COMMUNITY_Community 690|Community 690]]
- [[_COMMUNITY_Community 691|Community 691]]
- [[_COMMUNITY_Community 692|Community 692]]
- [[_COMMUNITY_Community 693|Community 693]]
- [[_COMMUNITY_Community 694|Community 694]]
- [[_COMMUNITY_Community 695|Community 695]]
- [[_COMMUNITY_Community 696|Community 696]]
- [[_COMMUNITY_Community 697|Community 697]]
- [[_COMMUNITY_Community 698|Community 698]]
- [[_COMMUNITY_Community 699|Community 699]]
- [[_COMMUNITY_Community 700|Community 700]]
- [[_COMMUNITY_Community 701|Community 701]]
- [[_COMMUNITY_Community 702|Community 702]]
- [[_COMMUNITY_Community 703|Community 703]]
- [[_COMMUNITY_Community 704|Community 704]]
- [[_COMMUNITY_Community 705|Community 705]]
- [[_COMMUNITY_Community 706|Community 706]]
- [[_COMMUNITY_Community 707|Community 707]]
- [[_COMMUNITY_Community 708|Community 708]]
- [[_COMMUNITY_Community 711|Community 711]]
- [[_COMMUNITY_Community 712|Community 712]]
## God Nodes (most connected - your core abstractions)
1. `Communities (648 total, 62 thin omitted)` - 556 edges
1. `Communities (711 total, 67 thin omitted)` - 612 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. `Phase 16: CI Dependency Audit, Security Checks & Image Hygiene - Research` - 24 edges
8. `Phase 5: Web Push Notifications — Research` - 22 edges
9. `entries` - 21 edges
10. `API Surface` - 21 edges
7. `db` - 26 edges
8. `Phase 16: CI Dependency Audit, Security Checks & Image Hygiene - Research` - 24 edges
9. `Phase 5: Web Push Notifications — Research` - 22 edges
10. `entries` - 21 edges
## Surprising Connections (you probably didn't know these)
- `loadClientForUser()` --calls--> `createFastmailClient()` [EXTRACTED]
apps/api/src/broker/outboxWorker.ts → apps/api/src/broker/client.ts
- `initialCalendarRange()` --calls--> `localDateISO()` [EXTRACTED]
apps/pwa/src/store/calendarStore.ts → apps/pwa/src/lib/eventDateTime.ts
- `main()` --calls--> `createFastmailClient()` [EXTRACTED]
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
- `triggerTargetedResync()` --calls--> `syncCalendar()` [EXTRACTED]
apps/api/src/broker/outboxWorker.ts → apps/api/src/broker/sync.ts
- `triggerTargetedResync()` --calls--> `dispatchEventChange()` [EXTRACTED]
apps/api/src/broker/outboxWorker.ts → apps/api/src/lib/eventChangeDispatcher.ts
- `dispatchEventChange()` --calls--> `dispatchPush()` [EXTRACTED]
apps/api/src/lib/eventChangeDispatcher.ts → apps/api/src/lib/pushDispatcher.ts
- `sendListChangePush()` --calls--> `dispatchPush()` [EXTRACTED]
apps/api/src/lib/listChangeDispatcher.ts → apps/api/src/lib/pushDispatcher.ts
- `ListCardProps` --references--> `List` [EXTRACTED]
apps/pwa/src/components/ListCard.tsx → apps/pwa/src/api/listsClient.ts
## Import Cycles
- None detected.
## Communities (664 total, 63 thin omitted)
## Communities (713 total, 67 thin omitted)
### Community 0 - "Community 0"
Cohesion: 0.05
@@ -728,7 +775,7 @@ Nodes (27): Alternatives Considered, Architecture, Authelia OIDC Integration, Ba
### Community 12 - "Community 12"
Cohesion: 0.09
Nodes (31): assembleRruleString(), BACKOFF_SECONDS, DispatchResult, dispatchRow(), HARD_FAIL_STATUSES, initOutboxTrigger(), loadClientForUser(), OutboxPayloadFields (+23 more)
Nodes (30): assembleRruleString(), BACKOFF_SECONDS, DispatchResult, dispatchRow(), HARD_FAIL_STATUSES, initOutboxTrigger(), OutboxPayloadFields, outboxPayloadSchema (+22 more)
### Community 13 - "Community 13"
Cohesion: 0.08
@@ -743,16 +790,16 @@ 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.22
Nodes (11): CreateEventPayload, RecurrencePreset, EventForm(), exclusiveEndToInclusiveDate(), initFormDateTime(), isPhoneBreakpoint(), parseDateTime(), SeriesEditPrompt() (+3 more)
Cohesion: 0.15
Nodes (20): CreateEventPayload, RecurrencePreset, EventForm(), exclusiveEndToInclusiveDate(), initFormDateTime(), isPhoneBreakpoint(), parseDateTime(), SeriesEditPrompt() (+12 more)
### Community 17 - "Community 17"
Cohesion: 0.09
Nodes (26): ContextVariableMap, DEV_USER, devAuthBypass(), persistSessionCookie(), claimStr(), COLOR_PALETTE, deriveDisplayName(), mockDb (+18 more)
Nodes (27): ContextVariableMap, DEV_USER, devAuthBypass(), persistSessionCookie(), claimStr(), COLOR_PALETTE, deriveDisplayName(), mockDb (+19 more)
### Community 18 - "Community 18"
Cohesion: 0.07
Nodes (27): Backlog, Milestones, Phase 10: Admin Role & Settings, Phase 11: Per-Event Reminders, Phase 12: Initial Setup Wizard, Phase 13: Real Lint Gate (ESLint), Phase 14: Desktop E2E Coverage, Phase 15: Doc-Only CI Skip (+19 more)
Nodes (28): Backlog, Milestones, Phase 10: Admin Role & Settings, Phase 11: Per-Event Reminders, Phase 12: Initial Setup Wizard, Phase 13: Real Lint Gate (ESLint), Phase 14: Desktop E2E Coverage, Phase 15: Doc-Only CI Skip (+20 more)
### Community 19 - "Community 19"
Cohesion: 0.17
@@ -851,8 +898,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.16
Nodes (15): createFastmailClient(), FastmailClient, decryptPassword(), EncryptedPayload, encryptPassword(), getKey(), getCrypto(), runPoll() (+7 more)
Cohesion: 0.15
Nodes (20): createFastmailClient(), FastmailClient, validateEncryptAndStoreCredential(), decryptPassword(), EncryptedPayload, encryptPassword(), getKey(), getCrypto() (+12 more)
### Community 44 - "Community 44"
Cohesion: 0.13
@@ -915,8 +962,8 @@ Cohesion: 0.14
Nodes (13): Architectural Constraints & Anti-Patterns, Codebase Concerns, Dependencies at Risk, Fragile Areas, Infrastructure & Deployment Concerns, Known Bugs, Known Limitations (Documented as Design Decisions), Missing Critical Features (+5 more)
### Community 59 - "Community 59"
Cohesion: 0.12
Nodes (10): ANDROID_STEPS, InstructionSheet(), InstructionSheetProps, IOS_STEPS, isIOS(), PushPermissionPrompt(), PushPermissionPromptProps, SettingsSheet() (+2 more)
Cohesion: 0.06
Nodes (21): BeforeInstallPromptEvent, InstallPrompt(), IOS_STEPS, isIOSSafariNonStandalone(), useAndroidInstallPrompt(), WalkthroughSheetProps, ANDROID_STEPS, InstructionSheet() (+13 more)
### Community 60 - "Community 60"
Cohesion: 0.14
@@ -1019,16 +1066,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.18
Nodes (14): createEvent(), CreateEventResponse, deleteEvent(), fetchEvents(), fetchMe(), fetchSyncStatus(), fetchWritableCalendars(), handleAuthResponse() (+6 more)
Cohesion: 0.08
Nodes (33): AdminCalendar, AdminCalendarsResponse, AdminMember, AdminMembersResponse, createEvent(), CreateEventResponse, deleteEvent(), fetchAdminCalendars() (+25 more)
### Community 86 - "Community 86"
Cohesion: 0.25
Nodes (8): CalendarOccurrence, expandOccurrences(), formatUtcOffset(), makeOccurrenceId(), OccurrenceMeta, serializeTime(), __dirname, FIXTURES
### Community 87 - "Community 87"
Cohesion: 0.19
Nodes (14): addItem(), apiFetch(), createList(), deleteItem(), deleteList(), fetchListItems(), fetchLists(), ListItem (+6 more)
Cohesion: 0.08
Nodes (35): addItem(), apiFetch(), createList(), deleteItem(), deleteList(), fetchListItems(), fetchLists(), List (+27 more)
### Community 88 - "Community 88"
Cohesion: 0.08
@@ -1044,7 +1091,7 @@ Nodes (9): IN-01: `RRULE_PRESETS` round-trip is lossy for any parameterized RRUL
### Community 91 - "Community 91"
Cohesion: 0.00
Nodes (556): Communities (648 total, 62 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" (+548 more)
Nodes (612): Communities (711 total, 67 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" (+604 more)
### Community 92 - "Community 92"
Cohesion: 0.20
@@ -1135,8 +1182,8 @@ 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.09
Nodes (22): CalendarOccurrence, WritableCalendar, EventDetailPopover(), formatDateTime(), ScheduleXEventModalProps, ALLDAY_OCCURRENCE, { mockSetOpenEventId, mockSetEventForm, mockSetDeleteDialog }, OCCURRENCE_WITH_HTML (+14 more)
Cohesion: 0.08
Nodes (25): CalendarOccurrence, SessionExpiredError, WritableCalendar, EventDetailPopover(), formatDateTime(), ScheduleXEventModalProps, ALLDAY_OCCURRENCE, { mockSetOpenEventId, mockSetEventForm, mockSetDeleteDialog } (+17 more)
### Community 115 - "Community 115"
Cohesion: 0.07
@@ -1151,8 +1198,8 @@ Cohesion: 0.25
Nodes (7): Codebase Structure, Directory Layout, Directory Purposes, Key File Locations, Naming Conventions, Special Directories, Where to Add New Code
### Community 118 - "Community 118"
Cohesion: 0.18
Nodes (5): SessionExpiredError, ErrorBoundary, ErrorBoundaryProps, ErrorBoundaryState, queryClient
Cohesion: 0.04
Nodes (46): Architectural Responsibility Map, Architecture Patterns, Assumptions Log, Building a VALARM for all-day events (absolute DATE-TIME trigger), Building a VALARM sub-component (timed event, relative DURATION trigger), Claude's Discretion, Code Examples, Common Pitfalls (+38 more)
### Community 119 - "Community 119"
Cohesion: 0.07
@@ -1175,8 +1222,8 @@ Cohesion: 0.29
Nodes (4): shimmerStyle, SkeletonCalendar(), SkeletonCalendarProps, SkeletonVariant
### Community 124 - "Community 124"
Cohesion: 0.22
Nodes (15): addDaysISO(), computeNewAllDayEnd(), computeNewTimedEnd(), dateDiffDays(), localDateISO(), localTimeHHMM(), localWallClockToUtcIso(), pad2() (+7 more)
Cohesion: 0.16
Nodes (12): emitter, ListEvent, publishListEvent(), subscribeListEvents(), rankBetween(), rankForAppend(), createItemSchema, createListSchema (+4 more)
### Community 125 - "Community 125"
Cohesion: 0.33
@@ -1371,12 +1418,12 @@ Cohesion: 0.67
Nodes (3): graphify, auto_update, enabled
### Community 210 - "Community 210"
Cohesion: 0.11
Nodes (13): db, pool, listItems, lists, listShares, pushSubscriptions, users, getAccessibleListIds() (+5 more)
Cohesion: 0.09
Nodes (15): db, pool, appConfig, listItems, lists, listShares, pushSubscriptions, users (+7 more)
### Community 211 - "Community 211"
Cohesion: 0.08
Nodes (25): columns, autoincrement, name, notNull, primaryKey, type, color, display_name (+17 more)
Nodes (25): columns, autoincrement, name, notNull, primaryKey, type, color, ctag (+17 more)
### Community 212 - "Community 212"
Cohesion: 0.11
@@ -1448,11 +1495,11 @@ Nodes (32): API Reference, Authentication, Calendar Events, `DELETE /api/events/
### Community 229 - "Community 229"
Cohesion: 0.10
Nodes (20): created_at, rank, text, autoincrement, default, name, notNull, primaryKey (+12 more)
Nodes (20): autoincrement, default, name, notNull, primaryKey, type, checked, rank (+12 more)
### Community 230 - "Community 230"
Cohesion: 0.10
Nodes (21): name, owner_id, updated_at, columns, autoincrement, name, notNull, primaryKey (+13 more)
Cohesion: 0.08
Nodes (24): created_at, name, owner_id, autoincrement, default, name, notNull, primaryKey (+16 more)
### Community 231 - "Community 231"
Cohesion: 0.08
@@ -1487,8 +1534,8 @@ Cohesion: 0.12
Nodes (17): list_shares_id, columns, isUnique, name, idx_list_shares_user_id, checkConstraint, compositePrimaryKeys, foreignKeys (+9 more)
### Community 239 - "Community 239"
Cohesion: 0.16
Nodes (15): runReminderCheck(), sentReminders, startReminderScheduler(), yyyyMmDd(), buildCopy(), dispatchEventChange(), EventChangeOperation, isMeaningfulChange() (+7 more)
Cohesion: 0.19
Nodes (12): runReminderCheck(), sentReminders, startReminderScheduler(), yyyyMmDd(), calendarEvents, sendListChangePush(), getDispatchPushMock(), buildPushBody() (+4 more)
### Community 240 - "Community 240"
Cohesion: 0.18
@@ -1527,8 +1574,8 @@ 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)
Cohesion: 0.07
Nodes (26): Analog Search Scope, `apps/api/src/auth/user.ts` — first-login-wins is_admin bootstrap, `apps/api/src/broker/outboxWorker.ts` — promote triggerTargetedResync, `apps/api/src/db/migrations/0001_v1_1_foundation.sql` (NEW, generated), `apps/api/src/db/schema.ts` — add columns + new table, `apps/api/src/index.ts` — mount adminRouter, `apps/api/src/lib/requireAdmin.ts` (NEW) — role middleware, `apps/api/src/routes/admin.ts` (NEW) — admin sub-router (+18 more)
### Community 250 - "Community 250"
Cohesion: 0.09
@@ -1583,16 +1630,16 @@ Cohesion: 0.10
Nodes (20): Canonical References, Carried forward — locked, NOT re-discussed, Claude's Discretion (researcher / planner decide), Deferred Ideas, Established Patterns, Existing Code Insights, Implementation Decisions, Integration code (read before implementing) (+12 more)
### Community 263 - "Community 263"
Cohesion: 0.25
Nodes (8): columnsFrom, columnsTo, name, onDelete, onUpdate, tableFrom, tableTo, calendars_user_id_users_id_fk
Cohesion: 0.14
Nodes (7): CredentialValidationError, calendars, memberCredentials, adminRouter, credentialSchema, FetchCalendarsResult, getApp()
### Community 264 - "Community 264"
Cohesion: 0.09
Nodes (21): Audit + Outdated Policy, CI assertion depth, Claude's Discretion, Deferred Ideas, Doc-only PR behavior, .dockerignore scope, Enforcement mechanism (multiSelect), Gating & Noise Posture (+13 more)
### Community 265 - "Community 265"
Cohesion: 0.16
Nodes (12): emitter, ListEvent, publishListEvent(), subscribeListEvents(), rankBetween(), rankForAppend(), createItemSchema, createListSchema (+4 more)
Cohesion: 0.33
Nodes (6): autoincrement, name, notNull, primaryKey, type, color
### Community 266 - "Community 266"
Cohesion: 0.25
@@ -1643,28 +1690,28 @@ Cohesion: 0.29
Nodes (7): GET /api/sse/lists, auth, description, file, method, path, response
### Community 278 - "Community 278"
Cohesion: 0.10
Nodes (20): columns, autoincrement, name, notNull, primaryKey, type, calendar_id, dtstart_date (+12 more)
Cohesion: 0.29
Nodes (7): has_rrule, autoincrement, default, name, notNull, primaryKey, type
### Community 279 - "Community 279"
Cohesion: 0.10
Nodes (20): autoincrement, name, notNull, primaryKey, type, columns, autoincrement, name (+12 more)
Nodes (20): autoincrement, default, name, notNull, primaryKey, type, autoincrement, name (+12 more)
### Community 280 - "Community 280"
Cohesion: 0.19
Nodes (12): List, ListsResponse, CreateListSheet(), itemCountLabel(), ListCard(), ListCardProps, ListDeleteDialog(), ListDeleteDialogProps (+4 more)
Cohesion: 0.09
Nodes (21): All-day reminder semantics, Canonical References, Claude's Discretion, Deferred Ideas, Established Patterns, Existing Code Insights, Existing / non-preset alarms on edit (preserve — CAL-14), Implementation Decisions (+13 more)
### Community 281 - "Community 281"
Cohesion: 0.29
Nodes (7): autoincrement, default, name, notNull, primaryKey, type, attempt_count
Cohesion: 0.09
Nodes (21): Accessibility, All-day options (shown when `allDay`, swapped — D-02/D-03), Checker Sign-Off, Color, Component Inventory, Copywriting Contract, Design System, Edit mode: loading existing reminder (+13 more)
### Community 282 - "Community 282"
Cohesion: 0.10
Nodes (20): Backlog, Overview, Phase 1: Foundation + Broker Spike, Phase 2: Calendar Display, Phase 3: Event Write-Back + PWA Install, Phase 4: Shared Lists + Live Sync, Phase 5: Web Push Notifications, Phase 6: UX Polish (+12 more)
### Community 283 - "Community 283"
Cohesion: 0.18
Nodes (6): BeforeInstallPromptEvent, InstallPrompt(), IOS_STEPS, isIOSSafariNonStandalone(), useAndroidInstallPrompt(), WalkthroughSheetProps
Cohesion: 0.10
Nodes (21): columns, key, updated_at, value, autoincrement, name, notNull, primaryKey (+13 more)
### Community 284 - "Community 284"
Cohesion: 0.10
@@ -1887,16 +1934,16 @@ Cohesion: 0.12
Nodes (16): Decisions Made, Deviations from Plan, Grep sanity, Known Stubs, Phase quick-260610-hbu Plan 01: Reminder Scheduler Resilience Summary, pnpm --filter @familysync/api test (full suite), pnpm --filter @familysync/api test (reminderScheduler only), pnpm --filter @familysync/api typecheck (+8 more)
### Community 339 - "Community 339"
Cohesion: 0.17
Nodes (11): Database migrations, Development, Environment variables, @familysync/api, Further reading, Prerequisites, Production, Running in the workspace (+3 more)
Cohesion: 0.15
Nodes (12): Database migrations, Development, Environment variables, @familysync/api, Further reading, Prerequisites, Production, Running API tests locally (+4 more)
### Community 340 - "Community 340"
Cohesion: 0.18
Nodes (10): Commits, Deviations from Plan, .gitea/workflows/ci.yml (modified), .gitea/workflows/publish.yml (created), Quick Task 260611-ozt: Split publish job into standalone Gitea workflow, README.md (modified), Self-Check: PASSED, What Changed (+2 more)
### Community 341 - "Community 341"
Cohesion: 0.33
Nodes (6): url, autoincrement, name, notNull, primaryKey, type
Cohesion: 0.06
Nodes (33): columnsFrom, columnsTo, name, onDelete, onUpdate, tableFrom, tableTo, checkConstraint (+25 more)
### Community 342 - "Community 342"
Cohesion: 0.20
@@ -1927,8 +1974,8 @@ Cohesion: 0.22
Nodes (8): Auto-fixed Issues, Deviations from Plan, Known Stubs, Phase 07 Plan 02: globalSetup Readiness Gate + DB Seed Summary, Self-Check: PASSED, Threat Surface Scan, Verification Evidence, What Was Built
### Community 349 - "Community 349"
Cohesion: 0.33
Nodes (6): ctag, autoincrement, name, notNull, primaryKey, type
Cohesion: 0.10
Nodes (20): created_at, list_id, user_id, autoincrement, default, name, notNull, primaryKey (+12 more)
### Community 350 - "Community 350"
Cohesion: 0.22
@@ -2135,8 +2182,8 @@ Cohesion: 0.40
Nodes (5): exports, imports, notes, type, apps/pwa/src/store/listsStore.ts
### Community 401 - "Community 401"
Cohesion: 0.20
Nodes (9): dialect, id, idx_lists_owner_id, indexes, name, prevId, tables, lists (+1 more)
Cohesion: 0.08
Nodes (25): list_shares_id, list_shares_list_id_lists_id_fk, columns, isUnique, name, idx_list_shares_user_id, checkConstraint, compositePrimaryKeys (+17 more)
### Community 402 - "Community 402"
Cohesion: 0.14
@@ -2363,8 +2410,8 @@ Cohesion: 0.20
Nodes (9): Anti-Patterns Found, Behavioral Spot-Checks (Vitest), Goal Achievement, Human Verification Required, Key Link Verification, Observable Truths, Phase 260610-k1z: Persist OIDC Session Cookie with Max-Age — Verification Report, Required Artifacts (+1 more)
### Community 458 - "Community 458"
Cohesion: 0.25
Nodes (8): list_shares_list_id_lists_id_fk, columnsFrom, columnsTo, name, onDelete, onUpdate, tableFrom, tableTo
Cohesion: 0.11
Nodes (18): CR-01: Shared-calendar PUT can clear the only shared calendar and report success, Critical Issues, IN-01: Two in-scope files were not reviewable (sandbox denial), IN-02: `noEchoHook` / `meNoEchoHook` are byte-identical duplicates, IN-03: `resolveAdminAndSetupStatus` issues two sequential round-trips per `/api/me`, IN-04: `parseInt` without explicit radix appears once; the shared-cal route correctly passes radix 10, IN-05: AdminPage error copy collapses all mutation failures to "Something went wrong", Info (+10 more)
### Community 459 - "Community 459"
Cohesion: 0.22
@@ -2591,8 +2638,8 @@ Cohesion: 0.67
Nodes (3): Applicable ASVS Categories, Known Threat Patterns for This Phase, Security Domain
### Community 524 - "Community 524"
Cohesion: 0.33
Nodes (6): object_url, autoincrement, name, notNull, primaryKey, type
Cohesion: 0.11
Nodes (19): columns, autoincrement, name, notNull, primaryKey, type, calendar_id, dtstart_date (+11 more)
### Community 525 - "Community 525"
Cohesion: 0.17
@@ -2743,8 +2790,8 @@ Cohesion: 0.18
Nodes (11): Anti-Patterns to Avoid, Architecture Patterns, Pattern 1: requireAdmin Middleware Inside adminRouter (Pitfall 9), Pattern 2: Zod Validator Hook — No Password Echo (Pitfall 7), Pattern 3: Drizzle-Kit Generate + Migrate Workflow, Pattern 4: Validate → Encrypt → Initial-Sync (Shared Code Path), Pattern 5: First-Login-Wins Admin Bootstrap, Pattern 6: Provider Discriminator on member_credentials (+3 more)
### Community 596 - "Community 596"
Cohesion: 0.25
Nodes (8): list_items_list_id_lists_id_fk, columnsFrom, columnsTo, name, onDelete, onUpdate, tableFrom, tableTo
Cohesion: 0.08
Nodes (25): columns, autoincrement, name, notNull, primaryKey, type, calendar_id, dtstart_utc (+17 more)
### Community 597 - "Community 597"
Cohesion: 0.29
@@ -2759,16 +2806,16 @@ Cohesion: 0.29
Nodes (6): Deviations from Plan, Phase quick-260613-dmw Plan 01: Exclude .gitea/** from CI code paths-filter Summary, Self-Check: PASSED, Tasks Completed, Verification Results, What Was Done
### Community 600 - "Community 600"
Cohesion: 0.29
Nodes (5): notifyListChange(), coalesceListPush(), DispatchFn, pending, PendingEntry
Cohesion: 0.08
Nodes (25): autoincrement, name, notNull, primaryKey, type, columns, calendar_object_url, last_error (+17 more)
### Community 601 - "Community 601"
Cohesion: 0.29
Nodes (7): autoincrement, default, name, notNull, primaryKey, type, checked
Cohesion: 0.10
Nodes (20): autoincrement, default, name, notNull, primaryKey, type, checked, rank (+12 more)
### Community 602 - "Community 602"
Cohesion: 0.29
Nodes (7): is_shared, autoincrement, default, name, notNull, primaryKey, type
Cohesion: 0.07
Nodes (30): checkConstraint, compositePrimaryKeys, foreignKeys, columns, name, indexes, name, uniqueConstraints (+22 more)
### Community 603 - "Community 603"
Cohesion: 0.33
@@ -2799,8 +2846,8 @@ Cohesion: 0.33
Nodes (5): Change, must_haves, Problem, Quick Task 260613-fp9: Skip Docker publish for `.gitea`/`.planning`-only pushes, Tasks
### Community 610 - "Community 610"
Cohesion: 0.27
Nodes (5): PermissionDeniedBanner(), fetchVapidKey(), prefetchVapidKey(), readNotificationsEnabled(), UsePushSubscriptionReturn
Cohesion: 0.17
Nodes (12): checkConstraint, compositePrimaryKeys, foreignKeys, columns, name, name, uniqueConstraints, calendars_id (+4 more)
### Community 611 - "Community 611"
Cohesion: 0.33
@@ -2899,20 +2946,20 @@ Cohesion: 0.67
Nodes (3): D-15: Job Decomposition, Full `security` Job Skeleton, Recommended Layout
### Community 648 - "Community 648"
Cohesion: 0.28
Nodes (6): BottomTabBar(), isPhone(), tabActiveOverride, tabBase, App(), isPhone()
Cohesion: 0.22
Nodes (8): BottomTabBar(), BottomTabBarProps, isPhone(), tabActiveOverride, tabBase, AdminPage(), App(), isPhone()
### Community 649 - "Community 649"
Cohesion: 0.28
Nodes (7): LiveSyncIndicator(), LiveSyncIndicatorProps, BACKOFF_STEPS_MS, SyncState, useListSSE(), UseListSSEOptions, ListDetail()
Cohesion: 0.12
Nodes (17): list_items_id, list_items_list_id_lists_id_fk, checkConstraint, compositePrimaryKeys, foreignKeys, columns, name, columnsFrom (+9 more)
### Community 650 - "Community 650"
Cohesion: 0.22
Nodes (9): checkConstraint, compositePrimaryKeys, foreignKeys, columns, name, name, uniqueConstraints, calendar_outbox_id (+1 more)
Cohesion: 0.12
Nodes (17): checkConstraint, compositePrimaryKeys, foreignKeys, columns, name, name, uniqueConstraints, columnsFrom (+9 more)
### Community 651 - "Community 651"
Cohesion: 0.25
Nodes (8): columnsFrom, columnsTo, name, onDelete, onUpdate, tableFrom, tableTo, calendar_outbox_user_id_users_id_fk
Cohesion: 0.14
Nodes (13): Anti-Patterns Found, Behavioral Spot-Checks, Deferred Code Review Warnings (recorded, not blocking), Deferred Items, Goal Achievement, Human Verification Required, Key Link Verification, Known Audit Coverage Limitations (+5 more)
### Community 652 - "Community 652"
Cohesion: 0.29
@@ -2927,8 +2974,8 @@ Cohesion: 0.33
Nodes (6): /api/me Response Extension, Code Examples, createFastmailClient + fetchCalendars (CalDAV PROPFIND Validation), Drizzle Upsert Pattern for member_credentials, encryptPassword Reuse, Resolved User ID Pattern (existing, for requireAdmin)
### Community 655 - "Community 655"
Cohesion: 0.33
Nodes (6): last_error, autoincrement, name, notNull, primaryKey, type
Cohesion: 0.14
Nodes (13): apps/api/README.md (modified), apps/api/test/global-setup.ts (new, 108 lines), apps/api/test/setup.ts (modified), apps/api/vitest.config.ts (modified), Auto-fixed Issues, Deviations from Plan, Known Stubs, Quick Task 260613-ndv: Test DB Isolation Summary (+5 more)
### Community 656 - "Community 656"
Cohesion: 0.33
@@ -2939,15 +2986,15 @@ Cohesion: 0.40
Nodes (5): Phase Requirements → Test Map, Sampling Rate, Test Framework, Validation Architecture, Wave 0 Gaps
### Community 658 - "Community 658"
Cohesion: 0.50
Nodes (4): DeleteConfirmationDialog(), makeQueryClient(), {
Cohesion: 0.11
Nodes (12): DeleteConfirmationDialog(), makeQueryClient(), {
mockDeleteEvent,
mockSetDeleteDialog,
mockSetLastSyncedUid,
mockSetOpenEventId,
mockDeleteDialogOpen,
mockDeleteDialogUid,
}, renderDialog()
}, renderDialog(), ErrorBoundary, ErrorBoundaryProps, ErrorBoundaryState, renderPopover() (+4 more)
### Community 659 - "Community 659"
Cohesion: 0.50
@@ -2965,22 +3012,194 @@ Nodes (3): Applicable ASVS Categories, Known Threat Patterns, Security Domain
Cohesion: 0.67
Nodes (3): Core (already installed), Package Legitimacy Audit, Standard Stack
### Community 663 - "Community 663"
Cohesion: 0.15
Nodes (12): Auto-fixed Issues, Deviations from Plan, Known Stubs, Phase 10 Plan 04: React PWA Admin Surfaces Summary, Playwright-CLI Supplementary Observations, Self-Check: PASSED, Task 1: Extend client.ts, Task 2: CredentialSheet + SetupBanner (+4 more)
### Community 664 - "Community 664"
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 665 - "Community 665"
Cohesion: 0.25
Nodes (8): columnsFrom, columnsTo, name, onDelete, onUpdate, tableFrom, tableTo, calendars_user_id_users_id_fk
### Community 666 - "Community 666"
Cohesion: 0.17
Nodes (11): Auto-fixed Issues, Deviations from Plan, Known Stubs, Phase 10 Plan 01: v1.1 DB Foundation Summary, Self-Check: PASSED, Task 1: Schema additions, Task 2: Migration generation and application, Task 3: E2E dev-bypass admin seed (+3 more)
### Community 667 - "Community 667"
Cohesion: 0.17
Nodes (11): Auto-fixed Issues, Deviations from Plan, Known Stubs, Phase 10 Plan 02: Admin Role Primitives Summary, Self-Check: PASSED, Task 1: requireAdmin middleware, Task 2: First-login-wins is_admin bootstrap in upsertUser, Task 3: /api/me extended with isAdmin + needsProviderSetup (+3 more)
### Community 668 - "Community 668"
Cohesion: 0.25
Nodes (8): list_items_list_id_lists_id_fk, columnsFrom, columnsTo, name, onDelete, onUpdate, tableFrom, tableTo
### Community 669 - "Community 669"
Cohesion: 0.20
Nodes (9): Deviations from Plan, Known Stubs, Phase 10 Plan 03: Admin API Surface + Shared Credential Helper Summary, Self-Check: PASSED, Task 1: Promote broker resync helpers to exports, Task 2+3: RED → GREEN, Tasks Completed, Threat Flags (+1 more)
### Community 670 - "Community 670"
Cohesion: 0.20
Nodes (10): checkConstraint, compositePrimaryKeys, foreignKeys, indexes, columns, name, name, uniqueConstraints (+2 more)
### Community 671 - "Community 671"
Cohesion: 0.25
Nodes (8): list_shares_list_id_lists_id_fk, columnsFrom, columnsTo, name, onDelete, onUpdate, tableFrom, tableTo
### Community 672 - "Community 672"
Cohesion: 0.13
Nodes (14): id, dialect, id, autoincrement, name, notNull, primaryKey, type (+6 more)
### Community 673 - "Community 673"
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 674 - "Community 674"
Cohesion: 0.25
Nodes (7): Manual-Only Verifications, Per-Task Verification Map, Phase 10 — Validation Strategy, Sampling Rate, Test Infrastructure, Validation Sign-Off, Wave 0 Requirements
### Community 675 - "Community 675"
Cohesion: 0.25
Nodes (7): All-day treatment, Claude's Discretion, Deferred Ideas, Existing-alarm display (edit / preserve), Notification copy, Phase 11: Per-Event Reminders - Discussion Log, Recurring events
### Community 676 - "Community 676"
Cohesion: 0.25
Nodes (8): list_shares_user_id_users_id_fk, columnsFrom, columnsTo, name, onDelete, onUpdate, tableFrom, tableTo
### Community 677 - "Community 677"
Cohesion: 0.25
Nodes (8): updated_at, autoincrement, default, name, notNull, onUpdate, primaryKey, type
### Community 678 - "Community 678"
Cohesion: 0.25
Nodes (8): columnsFrom, columnsTo, name, onDelete, onUpdate, tableFrom, tableTo, calendars_user_id_users_id_fk
### Community 679 - "Community 679"
Cohesion: 0.29
Nodes (5): notifyListChange(), coalesceListPush(), DispatchFn, pending, PendingEntry
### Community 680 - "Community 680"
Cohesion: 0.29
Nodes (7): next_attempt_at, autoincrement, default, name, notNull, primaryKey, type
### Community 681 - "Community 681"
Cohesion: 0.29
Nodes (7): autoincrement, default, name, notNull, primaryKey, type, all_day
### Community 682 - "Community 682"
Cohesion: 0.29
Nodes (7): autoincrement, default, name, notNull, primaryKey, type, attempt_count
### Community 683 - "Community 683"
Cohesion: 0.29
Nodes (7): is_shared, autoincrement, default, name, notNull, primaryKey, type
### Community 684 - "Community 684"
Cohesion: 0.29
Nodes (7): has_rrule, autoincrement, default, name, notNull, primaryKey, type
### Community 685 - "Community 685"
Cohesion: 0.29
Nodes (7): is_shared, autoincrement, default, name, notNull, primaryKey, type
### Community 686 - "Community 686"
Cohesion: 0.29
Nodes (7): next_attempt_at, autoincrement, default, name, notNull, primaryKey, type
### Community 687 - "Community 687"
Cohesion: 0.29
Nodes (7): status, autoincrement, default, name, notNull, primaryKey, type
### Community 688 - "Community 688"
Cohesion: 0.33
Nodes (5): dialect, id, prevId, tables, version
### Community 689 - "Community 689"
Cohesion: 0.33
Nodes (6): last_error, autoincrement, name, notNull, primaryKey, type
### Community 690 - "Community 690"
Cohesion: 0.33
Nodes (6): sync_token, autoincrement, name, notNull, primaryKey, type
### Community 691 - "Community 691"
Cohesion: 0.33
Nodes (6): url, autoincrement, name, notNull, primaryKey, type
### Community 692 - "Community 692"
Cohesion: 0.29
Nodes (7): columns, display_name, autoincrement, name, notNull, primaryKey, type
### Community 693 - "Community 693"
Cohesion: 0.33
Nodes (6): etag, autoincrement, name, notNull, primaryKey, type
### Community 694 - "Community 694"
Cohesion: 0.33
Nodes (6): group_id, autoincrement, name, notNull, primaryKey, type
### Community 695 - "Community 695"
Cohesion: 0.33
Nodes (6): autoincrement, name, notNull, primaryKey, type, calendar_url
### Community 696 - "Community 696"
Cohesion: 0.33
Nodes (6): ctag, autoincrement, name, notNull, primaryKey, type
### Community 697 - "Community 697"
Cohesion: 0.33
Nodes (6): dtstart_date, autoincrement, name, notNull, primaryKey, type
### Community 698 - "Community 698"
Cohesion: 0.33
Nodes (6): raw_vevent, autoincrement, name, notNull, primaryKey, type
### Community 699 - "Community 699"
Cohesion: 0.33
Nodes (6): sync_token, autoincrement, name, notNull, primaryKey, type
### Community 700 - "Community 700"
Cohesion: 0.33
Nodes (6): title, autoincrement, name, notNull, primaryKey, type
### Community 701 - "Community 701"
Cohesion: 0.33
Nodes (6): uid, autoincrement, name, notNull, primaryKey, type
### Community 702 - "Community 702"
Cohesion: 0.33
Nodes (5): Disposition, Fix sketch (CSS-only, no behaviour change), Not a Phase 10 regression, Problem, Reproduction
### Community 703 - "Community 703"
Cohesion: 0.33
Nodes (6): last_synced_at, autoincrement, name, notNull, primaryKey, type
### Community 711 - "Community 711"
Cohesion: 0.33
Nodes (6): url, autoincrement, name, notNull, primaryKey, type
### Community 712 - "Community 712"
Cohesion: 0.40
Nodes (5): indexes, columns, isUnique, name, idx_calendars_user_id
## Knowledge Gaps
- **5083 isolated node(s):** `allow`, `baseRef`, `version`, `timestamp`, `phase` (+5078 more)
- **5648 isolated node(s):** `allow`, `baseRef`, `version`, `timestamp`, `phase` (+5643 more)
These have ≤1 connection - possible missing edges or undocumented components.
- **63 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
- **67 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 `Communities (648 total, 62 thin omitted)` connect `Community 91` to `Community 241`?**
_High betweenness centrality (0.005) - this node is a cross-community bridge._
- **Why does `columns` connect `Community 278` to `Community 513`, `Community 481`, `Community 227`, `Community 612`, `Community 230`, `Community 331`, `Community 524`, `Community 332`, `Community 653`, `Community 656`?**
_High betweenness centrality (0.002) - this node is a cross-community bridge._
- **Why does `tables` connect `Community 401` to `Community 227`, `Community 650`, `Community 238`, `Community 215`, `Community 216`?**
- **Why does `Communities (711 total, 67 thin omitted)` connect `Community 91` to `Community 241`?**
_High betweenness centrality (0.009) - this node is a cross-community bridge._
- **Why does `id` connect `Community 513` to `Community 229`, `Community 230`, `Community 524`, `Community 211`, `Community 279`?**
_High betweenness centrality (0.001) - this node is a cross-community bridge._
- **Why does `tables` connect `Community 688` to `Community 227`, `Community 230`, `Community 650`, `Community 238`, `Community 215`, `Community 216`?**
_High betweenness centrality (0.001) - this node is a cross-community bridge._
- **What connects `allow`, `baseRef`, `version` to the rest of the system?**
_5083 weakly-connected nodes found - possible documentation gaps or missing edges._
_5648 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?**
+18210 -2151
View File
File diff suppressed because it is too large Load Diff