Files
buildfor_life_ops/graphify-out/GRAPH_REPORT.md
T
grabowski 011e7a2165
Deploy to LXC / deploy (push) Successful in 15s
Validate / validate (push) Successful in 30s
chore(graph): refresh graphify after sub-property feature
Re-extracted 42 changed code files via AST and 3 changed docs
(README, DEPLOYMENT, drizzle/README) via one semantic subagent.
Merged into the existing graph: 453→555 nodes, 486→633 edges,
137 communities.

Top god nodes now reflect the new shape: load() at the center of
every page-server route, buildfor_life_ops as the doc-side anchor,
and Drizzle ORM + Zod as the bridge between expenses and the rest
of the service layer.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 15:47:00 +07:00

980 lines
40 KiB
Markdown

# Graph Report - . (2026-04-27)
## Corpus Check
- 47 files · ~0 words
- Verdict: corpus is large enough that graph structure adds value.
## Summary
- 555 nodes · 633 edges · 137 communities detected
- Extraction: 83% EXTRACTED · 17% INFERRED · 0% AMBIGUOUS · INFERRED: 109 edges (avg confidence: 0.8)
- Token cost: 0 input · 0 output
## Community Hubs (Navigation)
- [[_COMMUNITY_Page Server Loaders|Page Server Loaders]]
- [[_COMMUNITY_Stack & Deployment Concepts|Stack & Deployment Concepts]]
- [[_COMMUNITY_Documents & Storage Adapters|Documents & Storage Adapters]]
- [[_COMMUNITY_Auth Sessions & Catalog|Auth Sessions & Catalog]]
- [[_COMMUNITY_CSV & API Endpoints|CSV & API Endpoints]]
- [[_COMMUNITY_Expenses Service|Expenses Service]]
- [[_COMMUNITY_Email & Markdown Rendering|Email & Markdown Rendering]]
- [[_COMMUNITY_Projects Service|Projects Service]]
- [[_COMMUNITY_Bootstrap Scripts|Bootstrap Scripts]]
- [[_COMMUNITY_Maintenance Schedules|Maintenance Schedules]]
- [[_COMMUNITY_Assets Service|Assets Service]]
- [[_COMMUNITY_App Shell & Bootstrap|App Shell & Bootstrap]]
- [[_COMMUNITY_Checklists Service|Checklists Service]]
- [[_COMMUNITY_Rooms & Floors Service|Rooms & Floors Service]]
- [[_COMMUNITY_Tasks & Subtasks|Tasks & Subtasks]]
- [[_COMMUNITY_Work Packages|Work Packages]]
- [[_COMMUNITY_Signed URL Storage Layer|Signed URL Storage Layer]]
- [[_COMMUNITY_Drizzle Migration Conventions|Drizzle Migration Conventions]]
- [[_COMMUNITY_Auth Model|Auth Model]]
- [[_COMMUNITY_Companies Service|Companies Service]]
- [[_COMMUNITY_JSONB Custom Fields Policy|JSONB Custom Fields Policy]]
- [[_COMMUNITY_Cluster 21|Cluster 21]]
- [[_COMMUNITY_Cluster 22|Cluster 22]]
- [[_COMMUNITY_Cluster 23|Cluster 23]]
- [[_COMMUNITY_Cluster 24|Cluster 24]]
- [[_COMMUNITY_Cluster 25|Cluster 25]]
- [[_COMMUNITY_Cluster 26|Cluster 26]]
- [[_COMMUNITY_Cluster 27|Cluster 27]]
- [[_COMMUNITY_Cluster 28|Cluster 28]]
- [[_COMMUNITY_Cluster 29|Cluster 29]]
- [[_COMMUNITY_Cluster 30|Cluster 30]]
- [[_COMMUNITY_Cluster 31|Cluster 31]]
- [[_COMMUNITY_Cluster 32|Cluster 32]]
- [[_COMMUNITY_Cluster 33|Cluster 33]]
- [[_COMMUNITY_Cluster 34|Cluster 34]]
- [[_COMMUNITY_Cluster 35|Cluster 35]]
- [[_COMMUNITY_Cluster 36|Cluster 36]]
- [[_COMMUNITY_Cluster 37|Cluster 37]]
- [[_COMMUNITY_Cluster 38|Cluster 38]]
- [[_COMMUNITY_Cluster 39|Cluster 39]]
- [[_COMMUNITY_Cluster 40|Cluster 40]]
- [[_COMMUNITY_Cluster 41|Cluster 41]]
- [[_COMMUNITY_Cluster 42|Cluster 42]]
- [[_COMMUNITY_Cluster 43|Cluster 43]]
- [[_COMMUNITY_Cluster 44|Cluster 44]]
- [[_COMMUNITY_Cluster 45|Cluster 45]]
- [[_COMMUNITY_Cluster 46|Cluster 46]]
- [[_COMMUNITY_Cluster 47|Cluster 47]]
- [[_COMMUNITY_Cluster 48|Cluster 48]]
- [[_COMMUNITY_Cluster 49|Cluster 49]]
- [[_COMMUNITY_Cluster 50|Cluster 50]]
- [[_COMMUNITY_Cluster 51|Cluster 51]]
- [[_COMMUNITY_Cluster 52|Cluster 52]]
- [[_COMMUNITY_Cluster 53|Cluster 53]]
- [[_COMMUNITY_Cluster 54|Cluster 54]]
- [[_COMMUNITY_Cluster 55|Cluster 55]]
- [[_COMMUNITY_Cluster 56|Cluster 56]]
- [[_COMMUNITY_Cluster 57|Cluster 57]]
- [[_COMMUNITY_Cluster 58|Cluster 58]]
- [[_COMMUNITY_Cluster 59|Cluster 59]]
- [[_COMMUNITY_Cluster 60|Cluster 60]]
- [[_COMMUNITY_Cluster 61|Cluster 61]]
- [[_COMMUNITY_Cluster 62|Cluster 62]]
- [[_COMMUNITY_Cluster 63|Cluster 63]]
- [[_COMMUNITY_Cluster 64|Cluster 64]]
- [[_COMMUNITY_Cluster 65|Cluster 65]]
- [[_COMMUNITY_Cluster 66|Cluster 66]]
- [[_COMMUNITY_Cluster 67|Cluster 67]]
- [[_COMMUNITY_Cluster 68|Cluster 68]]
- [[_COMMUNITY_Cluster 69|Cluster 69]]
- [[_COMMUNITY_Cluster 70|Cluster 70]]
- [[_COMMUNITY_Cluster 71|Cluster 71]]
- [[_COMMUNITY_Cluster 72|Cluster 72]]
- [[_COMMUNITY_Cluster 73|Cluster 73]]
- [[_COMMUNITY_Cluster 74|Cluster 74]]
- [[_COMMUNITY_Cluster 75|Cluster 75]]
- [[_COMMUNITY_Cluster 76|Cluster 76]]
- [[_COMMUNITY_Cluster 77|Cluster 77]]
- [[_COMMUNITY_Cluster 78|Cluster 78]]
- [[_COMMUNITY_Cluster 79|Cluster 79]]
- [[_COMMUNITY_Cluster 80|Cluster 80]]
- [[_COMMUNITY_Cluster 81|Cluster 81]]
- [[_COMMUNITY_Cluster 82|Cluster 82]]
- [[_COMMUNITY_Cluster 83|Cluster 83]]
- [[_COMMUNITY_Cluster 84|Cluster 84]]
- [[_COMMUNITY_Cluster 85|Cluster 85]]
- [[_COMMUNITY_Cluster 86|Cluster 86]]
- [[_COMMUNITY_Cluster 87|Cluster 87]]
- [[_COMMUNITY_Cluster 88|Cluster 88]]
- [[_COMMUNITY_Cluster 89|Cluster 89]]
- [[_COMMUNITY_Cluster 90|Cluster 90]]
- [[_COMMUNITY_Cluster 91|Cluster 91]]
- [[_COMMUNITY_Cluster 92|Cluster 92]]
- [[_COMMUNITY_Cluster 93|Cluster 93]]
- [[_COMMUNITY_Cluster 94|Cluster 94]]
- [[_COMMUNITY_Cluster 95|Cluster 95]]
- [[_COMMUNITY_Cluster 96|Cluster 96]]
- [[_COMMUNITY_Cluster 97|Cluster 97]]
- [[_COMMUNITY_Cluster 98|Cluster 98]]
- [[_COMMUNITY_Cluster 99|Cluster 99]]
- [[_COMMUNITY_Cluster 100|Cluster 100]]
- [[_COMMUNITY_Cluster 101|Cluster 101]]
- [[_COMMUNITY_Cluster 102|Cluster 102]]
- [[_COMMUNITY_Cluster 103|Cluster 103]]
- [[_COMMUNITY_Cluster 104|Cluster 104]]
- [[_COMMUNITY_Cluster 105|Cluster 105]]
- [[_COMMUNITY_Cluster 106|Cluster 106]]
- [[_COMMUNITY_Cluster 107|Cluster 107]]
- [[_COMMUNITY_Cluster 108|Cluster 108]]
- [[_COMMUNITY_Cluster 109|Cluster 109]]
- [[_COMMUNITY_Cluster 110|Cluster 110]]
- [[_COMMUNITY_Cluster 111|Cluster 111]]
- [[_COMMUNITY_Cluster 112|Cluster 112]]
- [[_COMMUNITY_Cluster 113|Cluster 113]]
- [[_COMMUNITY_Cluster 114|Cluster 114]]
- [[_COMMUNITY_Cluster 115|Cluster 115]]
- [[_COMMUNITY_Cluster 116|Cluster 116]]
- [[_COMMUNITY_Cluster 117|Cluster 117]]
- [[_COMMUNITY_Cluster 118|Cluster 118]]
- [[_COMMUNITY_Cluster 119|Cluster 119]]
- [[_COMMUNITY_Cluster 120|Cluster 120]]
- [[_COMMUNITY_Cluster 121|Cluster 121]]
- [[_COMMUNITY_Cluster 122|Cluster 122]]
- [[_COMMUNITY_Cluster 123|Cluster 123]]
- [[_COMMUNITY_Cluster 124|Cluster 124]]
- [[_COMMUNITY_Cluster 125|Cluster 125]]
- [[_COMMUNITY_Cluster 126|Cluster 126]]
- [[_COMMUNITY_Cluster 127|Cluster 127]]
- [[_COMMUNITY_Cluster 128|Cluster 128]]
- [[_COMMUNITY_Cluster 129|Cluster 129]]
- [[_COMMUNITY_Cluster 130|Cluster 130]]
- [[_COMMUNITY_Cluster 131|Cluster 131]]
- [[_COMMUNITY_Cluster 132|Cluster 132]]
- [[_COMMUNITY_Cluster 133|Cluster 133]]
- [[_COMMUNITY_Cluster 134|Cluster 134]]
- [[_COMMUNITY_Cluster 135|Cluster 135]]
- [[_COMMUNITY_Cluster 136|Cluster 136]]
## God Nodes (most connected - your core abstractions)
1. `load()` - 95 edges
2. `buildfor_life_ops` - 26 edges
3. `GET()` - 23 edges
4. `Drizzle ORM + Zod` - 14 edges
5. `LocalDiskStorage` - 10 edges
6. `load()` - 9 edges
7. `S3Storage` - 8 edges
8. `buildfor_life_ops` - 8 edges
9. `Drizzle migrations (drizzle/)` - 8 edges
10. `fanOutExternal()` - 7 edges
## Surprising Connections (you probably didn't know these)
- `load()` --calls--> `renderMarkdown()` [INFERRED]
src\routes\(app)\properties\[id]\todos\+page.server.ts → src\lib\server\markdown.ts
- `load()` --calls--> `listTemplates()` [INFERRED]
src\routes\(app)\properties\[id]\todos\+page.server.ts → src\lib\server\services\checklists.ts
- `load()` --calls--> `getCompany()` [INFERRED]
src\routes\(app)\properties\[id]\todos\+page.server.ts → src\lib\server\services\companies.ts
- `load()` --calls--> `listDocumentsForScope()` [INFERRED]
src\routes\(app)\properties\[id]\todos\+page.server.ts → src\lib\server\services\documents.ts
- `load()` --calls--> `countOverdueForCompany()` [INFERRED]
src\routes\(app)\properties\[id]\todos\+page.server.ts → src\lib\server\services\maintenance.ts
## Hyperedges (group relationships)
- **Session auth flow (cookie, hash, hook, gate)** — readme_auth_model, readme_sha256_cookie_hash, readme_sliding_renewal, readme_hooks_server, readme_layout_app_group [EXTRACTED 0.95]
- **Storage abstraction (adapter, local impl, signed URLs, file route)** — readme_storage_adapter, readme_local_disk_storage, readme_hmac_signed_urls, readme_api_files_route, readme_storage_model [EXTRACTED 0.95]
- **Cross-sibling theme propagation via localStorage** — readme_decision_theme_key, apphtml_theme_bootstrap, readme_buildfor_life_budget, readme_buildfor_life_repair [INFERRED 0.80]
## Communities
### Community 0 - "Page Server Loaders"
Cohesion: 0.04
Nodes (15): requireAdmin(), requireCompany(), e2n(), flattenTree(), load(), parseRange(), parseSettings(), getPageWithCurrentRevision() (+7 more)
### Community 1 - "Stack & Deployment Concepts"
Cohesion: 0.04
Nodes (59): Argon2id sessions (@node-rs/argon2), asset_location_history (movable assets), XOR location: asset at project OR property (CHECK), Blob storage snapshot/rsync backup, 10M upload size cap (BODY_SIZE_LIMIT + client_max_body_size), buildfor_life_budget (sibling), buildfor_life_ops, buildfor_life_repair (sibling) (+51 more)
### Community 2 - "Documents & Storage Adapters"
Cohesion: 0.07
Nodes (13): assertScope(), deleteDocument(), getDocument(), listDocumentsForScope(), signedUrlForDocument(), uploadDocument(), getStorage(), LocalDiskStorage (+5 more)
### Community 3 - "Auth Sessions & Catalog"
Cohesion: 0.1
Nodes (20): assertProperty(), createAccount(), deleteAccount(), listAccounts(), addFieldDef(), createCompanyAssetType(), deleteCompanyAssetType(), loadEditableType() (+12 more)
### Community 4 - "CSV & API Endpoints"
Cohesion: 0.11
Nodes (12): csvResponse(), toCsv(), gatherCustomFieldsFromForm(), createDecision(), decisionScopeLink(), listDecisionsForScope(), clamp(), GET() (+4 more)
### Community 5 - "Expenses Service"
Cohesion: 0.12
Nodes (13): Drizzle ORM + Zod, assertAccountInProperty(), assertProperty(), createExpense(), importExpenses(), listExpensesForProperties(), listExpensesForProperty(), monthlySeriesForProperties() (+5 more)
### Community 6 - "Email & Markdown Rendering"
Cohesion: 0.13
Nodes (15): getTransport(), isEmailConfigured(), sendEmail(), escapeHtml(), html(), renderMarkdown(), buildBodies(), isMatrixConfigured() (+7 more)
### Community 7 - "Projects Service"
Cohesion: 0.11
Nodes (13): load(), unreadCountForUser(), getProject(), listProjects(), assertNoCycle(), assertParentInCompany(), createProperty(), getAncestorIds() (+5 more)
### Community 8 - "Bootstrap Scripts"
Cohesion: 0.15
Nodes (17): main(), readArg(), slugify(), stripSurroundingQuotes(), main(), readArg(), stripSurroundingQuotes(), normalizeEmail() (+9 more)
### Community 9 - "Maintenance Schedules"
Cohesion: 0.18
Nodes (15): addInterval(), assertAsset(), countOverdueForCompany(), createSchedule(), deleteSchedule(), getSchedule(), listDueAndOverdue(), listEventsForAsset() (+7 more)
### Community 10 - "Assets Service"
Cohesion: 0.2
Nodes (11): assertContainer(), createAsset(), listAssets(), loadTypeWithFields(), moveAsset(), updateAsset(), validateCustomFields(), buildCustomFieldsSchema() (+3 more)
### Community 11 - "App Shell & Bootstrap"
Cohesion: 0.13
Nodes (16): data-sveltekit-preload-data=hover, app.html root document, %sveltekit.head% / %sveltekit.body% placeholders, Tailwind body classes with dark: variants, Dark-mode bootstrap inline script (localStorage['theme']), Argon2id sessions (@node-rs/argon2 + @oslojs/crypto), buildfor_life_budget (sibling), buildfor_life_ops (+8 more)
### Community 12 - "Checklists Service"
Cohesion: 0.19
Nodes (7): addTemplateItem(), getInstance(), getTemplate(), listInstancesForProperties(), listTemplates(), removeTemplateItem(), setItemDone()
### Community 13 - "Rooms & Floors Service"
Cohesion: 0.29
Nodes (9): assertProperty(), createFloor(), createRoom(), deleteFloor(), getRoom(), listFloors(), listRoomsWithCounts(), softDeleteRoom() (+1 more)
### Community 14 - "Tasks & Subtasks"
Cohesion: 0.36
Nodes (9): addSubtask(), assertWorkPackage(), createTask(), getTaskWithSubtasks(), listTasksForWorkPackage(), removeSubtask(), softDeleteTask(), toggleSubtask() (+1 more)
### Community 15 - "Work Packages"
Cohesion: 0.48
Nodes (6): assertProject(), createWorkPackage(), getWorkPackage(), listWorkPackagesForProject(), softDeleteWorkPackage(), updateWorkPackage()
### Community 16 - "Signed URL Storage Layer"
Cohesion: 0.38
Nodes (7): /api/files route (signature verification + streaming), HMAC-signed short-lived file URLs, LocalDiskStorage, Phase 5: QR, notifications, S3, S3Storage (future), StorageAdapter interface, Storage model (opaque storage_key)
### Community 17 - "Drizzle Migration Conventions"
Cohesion: 0.29
Nodes (7): Use CONCURRENTLY on large-table index changes, Drizzle migrations directory, Review SQL after generate: enum/index/custom_fields, npm run db:generate, npm run db:migrate, npm run db:push (dev only), npm run db:studio (Drizzle Studio)
### Community 18 - "Auth Model"
Cohesion: 0.33
Nodes (6): Auth model (sessions + hashed cookies), company_users role mapping, hooks.server.ts (session validation), (app) route group (authed shell), SHA-256 cookie hashing before DB lookup, Sliding session renewal (30d/15d)
### Community 19 - "Companies Service"
Cohesion: 0.6
Nodes (4): createCompanyWithAdmin(), getCompany(), slugify(), updateCompany()
### Community 20 - "JSONB Custom Fields Policy"
Cohesion: 0.5
Nodes (4): Immutable-key policy reference, Decision: immutable custom-field keys, Decision: JSONB custom fields + asset_field_defs, Phase 1: Properties + Assets
### Community 21 - "Cluster 21"
Cohesion: 1.0
Nodes (2): parseCsv(), parseCsvDict()
### Community 22 - "Cluster 22"
Cohesion: 1.0
Nodes (0):
### Community 23 - "Cluster 23"
Cohesion: 1.0
Nodes (2): .env configuration, env.ts (Zod-validated process.env)
### Community 24 - "Cluster 24"
Cohesion: 1.0
Nodes (2): npm run create-user script, src/lib/server/db/schema/
### Community 25 - "Cluster 25"
Cohesion: 1.0
Nodes (2): Decision: decisions scoped to project/property/asset/work_package, Phase 3: Projects + structured decisions
### Community 26 - "Cluster 26"
Cohesion: 1.0
Nodes (2): Decision: asset_location_history (movable assets), Decision: XOR asset location (project XOR property)
### Community 27 - "Cluster 27"
Cohesion: 1.0
Nodes (0):
### Community 28 - "Cluster 28"
Cohesion: 1.0
Nodes (0):
### Community 29 - "Cluster 29"
Cohesion: 1.0
Nodes (0):
### Community 30 - "Cluster 30"
Cohesion: 1.0
Nodes (0):
### Community 31 - "Cluster 31"
Cohesion: 1.0
Nodes (0):
### Community 32 - "Cluster 32"
Cohesion: 1.0
Nodes (0):
### Community 33 - "Cluster 33"
Cohesion: 1.0
Nodes (0):
### Community 34 - "Cluster 34"
Cohesion: 1.0
Nodes (0):
### Community 35 - "Cluster 35"
Cohesion: 1.0
Nodes (0):
### Community 36 - "Cluster 36"
Cohesion: 1.0
Nodes (0):
### Community 37 - "Cluster 37"
Cohesion: 1.0
Nodes (0):
### Community 38 - "Cluster 38"
Cohesion: 1.0
Nodes (0):
### Community 39 - "Cluster 39"
Cohesion: 1.0
Nodes (0):
### Community 40 - "Cluster 40"
Cohesion: 1.0
Nodes (0):
### Community 41 - "Cluster 41"
Cohesion: 1.0
Nodes (0):
### Community 42 - "Cluster 42"
Cohesion: 1.0
Nodes (0):
### Community 43 - "Cluster 43"
Cohesion: 1.0
Nodes (0):
### Community 44 - "Cluster 44"
Cohesion: 1.0
Nodes (0):
### Community 45 - "Cluster 45"
Cohesion: 1.0
Nodes (0):
### Community 46 - "Cluster 46"
Cohesion: 1.0
Nodes (0):
### Community 47 - "Cluster 47"
Cohesion: 1.0
Nodes (0):
### Community 48 - "Cluster 48"
Cohesion: 1.0
Nodes (0):
### Community 49 - "Cluster 49"
Cohesion: 1.0
Nodes (0):
### Community 50 - "Cluster 50"
Cohesion: 1.0
Nodes (0):
### Community 51 - "Cluster 51"
Cohesion: 1.0
Nodes (0):
### Community 52 - "Cluster 52"
Cohesion: 1.0
Nodes (0):
### Community 53 - "Cluster 53"
Cohesion: 1.0
Nodes (0):
### Community 54 - "Cluster 54"
Cohesion: 1.0
Nodes (0):
### Community 55 - "Cluster 55"
Cohesion: 1.0
Nodes (0):
### Community 56 - "Cluster 56"
Cohesion: 1.0
Nodes (0):
### Community 57 - "Cluster 57"
Cohesion: 1.0
Nodes (0):
### Community 58 - "Cluster 58"
Cohesion: 1.0
Nodes (0):
### Community 59 - "Cluster 59"
Cohesion: 1.0
Nodes (0):
### Community 60 - "Cluster 60"
Cohesion: 1.0
Nodes (0):
### Community 61 - "Cluster 61"
Cohesion: 1.0
Nodes (0):
### Community 62 - "Cluster 62"
Cohesion: 1.0
Nodes (0):
### Community 63 - "Cluster 63"
Cohesion: 1.0
Nodes (0):
### Community 64 - "Cluster 64"
Cohesion: 1.0
Nodes (0):
### Community 65 - "Cluster 65"
Cohesion: 1.0
Nodes (0):
### Community 66 - "Cluster 66"
Cohesion: 1.0
Nodes (0):
### Community 67 - "Cluster 67"
Cohesion: 1.0
Nodes (0):
### Community 68 - "Cluster 68"
Cohesion: 1.0
Nodes (0):
### Community 69 - "Cluster 69"
Cohesion: 1.0
Nodes (0):
### Community 70 - "Cluster 70"
Cohesion: 1.0
Nodes (0):
### Community 71 - "Cluster 71"
Cohesion: 1.0
Nodes (0):
### Community 72 - "Cluster 72"
Cohesion: 1.0
Nodes (0):
### Community 73 - "Cluster 73"
Cohesion: 1.0
Nodes (0):
### Community 74 - "Cluster 74"
Cohesion: 1.0
Nodes (0):
### Community 75 - "Cluster 75"
Cohesion: 1.0
Nodes (0):
### Community 76 - "Cluster 76"
Cohesion: 1.0
Nodes (0):
### Community 77 - "Cluster 77"
Cohesion: 1.0
Nodes (0):
### Community 78 - "Cluster 78"
Cohesion: 1.0
Nodes (0):
### Community 79 - "Cluster 79"
Cohesion: 1.0
Nodes (0):
### Community 80 - "Cluster 80"
Cohesion: 1.0
Nodes (0):
### Community 81 - "Cluster 81"
Cohesion: 1.0
Nodes (0):
### Community 82 - "Cluster 82"
Cohesion: 1.0
Nodes (0):
### Community 83 - "Cluster 83"
Cohesion: 1.0
Nodes (0):
### Community 84 - "Cluster 84"
Cohesion: 1.0
Nodes (0):
### Community 85 - "Cluster 85"
Cohesion: 1.0
Nodes (0):
### Community 86 - "Cluster 86"
Cohesion: 1.0
Nodes (0):
### Community 87 - "Cluster 87"
Cohesion: 1.0
Nodes (0):
### Community 88 - "Cluster 88"
Cohesion: 1.0
Nodes (0):
### Community 89 - "Cluster 89"
Cohesion: 1.0
Nodes (0):
### Community 90 - "Cluster 90"
Cohesion: 1.0
Nodes (0):
### Community 91 - "Cluster 91"
Cohesion: 1.0
Nodes (0):
### Community 92 - "Cluster 92"
Cohesion: 1.0
Nodes (0):
### Community 93 - "Cluster 93"
Cohesion: 1.0
Nodes (0):
### Community 94 - "Cluster 94"
Cohesion: 1.0
Nodes (0):
### Community 95 - "Cluster 95"
Cohesion: 1.0
Nodes (0):
### Community 96 - "Cluster 96"
Cohesion: 1.0
Nodes (0):
### Community 97 - "Cluster 97"
Cohesion: 1.0
Nodes (0):
### Community 98 - "Cluster 98"
Cohesion: 1.0
Nodes (0):
### Community 99 - "Cluster 99"
Cohesion: 1.0
Nodes (0):
### Community 100 - "Cluster 100"
Cohesion: 1.0
Nodes (0):
### Community 101 - "Cluster 101"
Cohesion: 1.0
Nodes (0):
### Community 102 - "Cluster 102"
Cohesion: 1.0
Nodes (0):
### Community 103 - "Cluster 103"
Cohesion: 1.0
Nodes (0):
### Community 104 - "Cluster 104"
Cohesion: 1.0
Nodes (0):
### Community 105 - "Cluster 105"
Cohesion: 1.0
Nodes (0):
### Community 106 - "Cluster 106"
Cohesion: 1.0
Nodes (0):
### Community 107 - "Cluster 107"
Cohesion: 1.0
Nodes (0):
### Community 108 - "Cluster 108"
Cohesion: 1.0
Nodes (0):
### Community 109 - "Cluster 109"
Cohesion: 1.0
Nodes (0):
### Community 110 - "Cluster 110"
Cohesion: 1.0
Nodes (0):
### Community 111 - "Cluster 111"
Cohesion: 1.0
Nodes (0):
### Community 112 - "Cluster 112"
Cohesion: 1.0
Nodes (0):
### Community 113 - "Cluster 113"
Cohesion: 1.0
Nodes (0):
### Community 114 - "Cluster 114"
Cohesion: 1.0
Nodes (0):
### Community 115 - "Cluster 115"
Cohesion: 1.0
Nodes (0):
### Community 116 - "Cluster 116"
Cohesion: 1.0
Nodes (0):
### Community 117 - "Cluster 117"
Cohesion: 1.0
Nodes (0):
### Community 118 - "Cluster 118"
Cohesion: 1.0
Nodes (1): npm run db:seed
### Community 119 - "Cluster 119"
Cohesion: 1.0
Nodes (1): npm run validate (check + build)
### Community 120 - "Cluster 120"
Cohesion: 1.0
Nodes (1): (auth) route group (login shell)
### Community 121 - "Cluster 121"
Cohesion: 1.0
Nodes (1): Phase 0: scaffold (shipped)
### Community 122 - "Cluster 122"
Cohesion: 1.0
Nodes (1): Phase 2: Checklists + maintenance
### Community 123 - "Cluster 123"
Cohesion: 1.0
Nodes (1): Decision: UUID v7 primary keys
### Community 124 - "Cluster 124"
Cohesion: 1.0
Nodes (1): Decision: timestamptz UTC everywhere
### Community 125 - "Cluster 125"
Cohesion: 1.0
Nodes (1): Decision: soft delete (deleted_at)
### Community 126 - "Cluster 126"
Cohesion: 1.0
Nodes (1): Decision: numeric(18,4) + char(3) currency
### Community 127 - "Cluster 127"
Cohesion: 1.0
Nodes (1): Decision: company default currency in settings_json
### Community 128 - "Cluster 128"
Cohesion: 1.0
Nodes (1): Decision: tabs = nested routes (not query-string)
### Community 129 - "Cluster 129"
Cohesion: 1.0
Nodes (0):
### Community 130 - "Cluster 130"
Cohesion: 1.0
Nodes (0):
### Community 131 - "Cluster 131"
Cohesion: 1.0
Nodes (0):
### Community 132 - "Cluster 132"
Cohesion: 1.0
Nodes (0):
### Community 133 - "Cluster 133"
Cohesion: 1.0
Nodes (0):
### Community 134 - "Cluster 134"
Cohesion: 1.0
Nodes (0):
### Community 135 - "Cluster 135"
Cohesion: 1.0
Nodes (0):
### Community 136 - "Cluster 136"
Cohesion: 1.0
Nodes (0):
## Knowledge Gaps
- **73 isolated node(s):** `buildfor_life_budget (sibling)`, `buildfor_life_repair (sibling)`, `PostgreSQL 16+ via Drizzle ORM + Zod`, `Argon2id sessions (@node-rs/argon2 + @oslojs/crypto)`, `Sharp image thumbnails` (+68 more)
These have ≤1 connection - possible missing edges or undocumented components.
- **Thin community `Cluster 22`** (2 nodes): `needsEnumValues()`, `field-types.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 23`** (2 nodes): `.env configuration`, `env.ts (Zod-validated process.env)`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 24`** (2 nodes): `npm run create-user script`, `src/lib/server/db/schema/`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 25`** (2 nodes): `Decision: decisions scoped to project/property/asset/work_package`, `Phase 3: Projects + structured decisions`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 26`** (2 nodes): `Decision: asset_location_history (movable assets)`, `Decision: XOR asset location (project XOR property)`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 27`** (1 nodes): `drizzle.config.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 28`** (1 nodes): `svelte.config.js`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 29`** (1 nodes): `vite.config.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 30`** (1 nodes): `app.d.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 31`** (1 nodes): `accounts.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 32`** (1 nodes): `notifications.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 33`** (1 nodes): `roles.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 34`** (1 nodes): `CustomFieldsForm.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 35`** (1 nodes): `Sidebar.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 36`** (1 nodes): `TabNav.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 37`** (1 nodes): `ThemeToggle.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 38`** (1 nodes): `TopBar.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 39`** (1 nodes): `env.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 40`** (1 nodes): `types.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 41`** (1 nodes): `client.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 42`** (1 nodes): `accounts.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 43`** (1 nodes): `assets.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 44`** (1 nodes): `checklists.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 45`** (1 nodes): `decisions.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 46`** (1 nodes): `documents.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 47`** (1 nodes): `index.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 48`** (1 nodes): `maintenance.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 49`** (1 nodes): `notifications.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 50`** (1 nodes): `projects.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 51`** (1 nodes): `properties.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 52`** (1 nodes): `rooms.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 53`** (1 nodes): `tenancy.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 54`** (1 nodes): `wiki.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 55`** (1 nodes): `+error.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 56`** (1 nodes): `+layout.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 57`** (1 nodes): `+layout.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 58`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 59`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 60`** (1 nodes): `+page.server.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 61`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 62`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 63`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 64`** (1 nodes): `+page.server.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 65`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 66`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 67`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 68`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 69`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 70`** (1 nodes): `+layout.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 71`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 72`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 73`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 74`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 75`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 76`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 77`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 78`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 79`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 80`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 81`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 82`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 83`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 84`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 85`** (1 nodes): `+layout.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 86`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 87`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 88`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 89`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 90`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 91`** (1 nodes): `+page.server.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 92`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 93`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 94`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 95`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 96`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 97`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 98`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 99`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 100`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 101`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 102`** (1 nodes): `+layout.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 103`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 104`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 105`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 106`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 107`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 108`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 109`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 110`** (1 nodes): `+page.server.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 111`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 112`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 113`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 114`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 115`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 116`** (1 nodes): `+layout.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 117`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 118`** (1 nodes): `npm run db:seed`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 119`** (1 nodes): `npm run validate (check + build)`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 120`** (1 nodes): `(auth) route group (login shell)`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 121`** (1 nodes): `Phase 0: scaffold (shipped)`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 122`** (1 nodes): `Phase 2: Checklists + maintenance`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 123`** (1 nodes): `Decision: UUID v7 primary keys`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 124`** (1 nodes): `Decision: timestamptz UTC everywhere`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 125`** (1 nodes): `Decision: soft delete (deleted_at)`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 126`** (1 nodes): `Decision: numeric(18,4) + char(3) currency`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 127`** (1 nodes): `Decision: company default currency in settings_json`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 128`** (1 nodes): `Decision: tabs = nested routes (not query-string)`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 129`** (1 nodes): `expenses.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 130`** (1 nodes): `ExpenseChart.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 131`** (1 nodes): `expenses.ts`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 132`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 133`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 134`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 135`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Cluster 136`** (1 nodes): `+page.svelte`
Too small to be a meaningful cluster - may be noise or needs more connections extracted.
## Suggested Questions
_Questions this graph is uniquely positioned to answer:_
- **Why does `load()` connect `Page Server Loaders` to `Documents & Storage Adapters`, `Auth Sessions & Catalog`, `CSV & API Endpoints`, `Expenses Service`, `Email & Markdown Rendering`, `Projects Service`, `Bootstrap Scripts`, `Maintenance Schedules`, `Assets Service`, `Checklists Service`, `Rooms & Floors Service`, `Tasks & Subtasks`, `Work Packages`, `Companies Service`?**
_High betweenness centrality (0.308) - this node is a cross-community bridge._
- **Why does `Drizzle ORM + Zod` connect `Expenses Service` to `Page Server Loaders`, `Stack & Deployment Concepts`, `Projects Service`, `Bootstrap Scripts`, `Maintenance Schedules`, `Assets Service`, `Checklists Service`?**
_High betweenness centrality (0.173) - this node is a cross-community bridge._
- **Why does `buildfor_life_ops` connect `Stack & Deployment Concepts` to `Expenses Service`?**
_High betweenness centrality (0.137) - this node is a cross-community bridge._
- **Are the 41 inferred relationships involving `load()` (e.g. with `renderMarkdown()` and `requireCompany()`) actually correct?**
_`load()` has 41 INFERRED edges - model-reasoned connections that need verification._
- **Are the 15 inferred relationships involving `GET()` (e.g. with `syncFieldDefs()` and `handle()`) actually correct?**
_`GET()` has 15 INFERRED edges - model-reasoned connections that need verification._
- **What connects `buildfor_life_budget (sibling)`, `buildfor_life_repair (sibling)`, `PostgreSQL 16+ via Drizzle ORM + Zod` to the rest of the system?**
_73 weakly-connected nodes found - possible documentation gaps or missing edges._
- **Should `Page Server Loaders` be split into smaller, more focused modules?**
_Cohesion score 0.04 - nodes in this community are weakly interconnected._