chore(graph): refresh graphify after sub-property feature
Deploy to LXC / deploy (push) Successful in 15s
Validate / validate (push) Successful in 30s

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>
This commit is contained in:
2026-04-27 15:47:00 +07:00
parent c3aaf82642
commit 011e7a2165
48 changed files with 5348 additions and 2428 deletions
+249 -205
View File
@@ -1,45 +1,45 @@
# Graph Report - C:/dev/build_for_life_project (2026-04-23)
# Graph Report - . (2026-04-27)
## Corpus Check
- 189 files · ~54,875 words
- 47 files · ~0 words
- Verdict: corpus is large enough that graph structure adds value.
## Summary
- 453 nodes · 486 edges · 131 communities detected
- Extraction: 80% EXTRACTED · 20% INFERRED · 0% AMBIGUOUS · INFERRED: 97 edges (avg confidence: 0.8)
- 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_Auth & Load Helpers|Auth & Load Helpers]]
- [[_COMMUNITY_Documents Service|Documents Service]]
- [[_COMMUNITY_Assets Service & CSV|Assets Service & CSV]]
- [[_COMMUNITY_Email & Markdown|Email & Markdown]]
- [[_COMMUNITY_Property Accounts|Property Accounts]]
- [[_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_App Shell & Theme|App Shell & Theme]]
- [[_COMMUNITY_Asset Core|Asset Core]]
- [[_COMMUNITY_Maintenance Core|Maintenance Core]]
- [[_COMMUNITY_Checklists|Checklists]]
- [[_COMMUNITY_Admin Scripts|Admin Scripts]]
- [[_COMMUNITY_Asset Types Editor|Asset Types Editor]]
- [[_COMMUNITY_Rooms & Floors|Rooms & Floors]]
- [[_COMMUNITY_Tasks|Tasks]]
- [[_COMMUNITY_User Management|User Management]]
- [[_COMMUNITY_DB Schema Helpers|DB Schema Helpers]]
- [[_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_Storage Layer|Storage Layer]]
- [[_COMMUNITY_Migration Workflow|Migration Workflow]]
- [[_COMMUNITY_Session Auth|Session Auth]]
- [[_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_Form Utilities|Form Utilities]]
- [[_COMMUNITY_Custom Fields Design|Custom Fields Design]]
- [[_COMMUNITY_Field Types|Field Types]]
- [[_COMMUNITY_Form Helper|Form Helper]]
- [[_COMMUNITY_Env Config|Env Config]]
- [[_COMMUNITY_Seed Script|Seed Script]]
- [[_COMMUNITY_Asset Location Design|Asset Location Design]]
- [[_COMMUNITY_Decision Design|Decision Design]]
- [[_COMMUNITY_Drizzle Config|Drizzle Config]]
- [[_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]]
@@ -141,30 +141,36 @@
- [[_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()` - 79 edges
2. `GET()` - 20 edges
3. `LocalDiskStorage` - 10 edges
4. `load()` - 9 edges
5. `S3Storage` - 8 edges
6. `buildfor_life_ops` - 8 edges
7. `fanOutExternal()` - 7 edges
8. `getTaskWithSubtasks()` - 7 edges
9. `handle()` - 6 edges
10. `uploadDocument()` - 6 edges
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\(auth)\login\+page.server.ts → src\lib\server\markdown.ts
src\routes\(app)\properties\[id]\todos\+page.server.ts → src\lib\server\markdown.ts
- `load()` --calls--> `listTemplates()` [INFERRED]
src\routes\(auth)\login\+page.server.ts → src\lib\server\services\checklists.ts
src\routes\(app)\properties\[id]\todos\+page.server.ts → src\lib\server\services\checklists.ts
- `load()` --calls--> `getCompany()` [INFERRED]
src\routes\(auth)\login\+page.server.ts → src\lib\server\services\companies.ts
src\routes\(app)\properties\[id]\todos\+page.server.ts → src\lib\server\services\companies.ts
- `load()` --calls--> `listDocumentsForScope()` [INFERRED]
src\routes\(auth)\login\+page.server.ts → src\lib\server\services\documents.ts
src\routes\(app)\properties\[id]\todos\+page.server.ts → src\lib\server\services\documents.ts
- `load()` --calls--> `countOverdueForCompany()` [INFERRED]
src\routes\(auth)\login\+page.server.ts → src\lib\server\services\maintenance.ts
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]
@@ -173,123 +179,123 @@
## Communities
### Community 0 - "Auth & Load Helpers"
### Community 0 - "Page Server Loaders"
Cohesion: 0.04
Nodes (12): requireAdmin(), requireCompany(), load(), parseSettings(), getPageWithCurrentRevision(), getRevision(), listPagesForScope(), listRevisions() (+4 more)
Nodes (15): requireAdmin(), requireCompany(), e2n(), flattenTree(), load(), parseRange(), parseSettings(), getPageWithCurrentRevision() (+7 more)
### Community 1 - "Documents Service"
### 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 2 - "Assets Service & CSV"
Cohesion: 0.11
Nodes (13): listAssets(), csvResponse(), toCsv(), gatherCustomFieldsFromForm(), createDecision(), decisionScopeLink(), listDecisionsForScope(), clamp() (+5 more)
### Community 3 - "Auth Sessions & Catalog"
Cohesion: 0.1
Nodes (20): assertProperty(), createAccount(), deleteAccount(), listAccounts(), addFieldDef(), createCompanyAssetType(), deleteCompanyAssetType(), loadEditableType() (+12 more)
### Community 3 - "Email & Markdown"
### 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 4 - "Property Accounts"
Cohesion: 0.15
Nodes (12): assertProperty(), createAccount(), deleteAccount(), listAccounts(), handle(), deleteFloor(), handleLogout(), createSession() (+4 more)
### Community 5 - "Projects Service"
### Community 7 - "Projects Service"
Cohesion: 0.11
Nodes (6): load(), unreadCountForUser(), getProject(), listProjects(), getProperty(), listProperties()
Nodes (13): load(), unreadCountForUser(), getProject(), listProjects(), assertNoCycle(), assertParentInCompany(), createProperty(), getAncestorIds() (+5 more)
### Community 6 - "App Shell & Theme"
### 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 7 - "Asset Core"
Cohesion: 0.22
Nodes (10): assertContainer(), createAsset(), loadTypeWithFields(), moveAsset(), updateAsset(), validateCustomFields(), buildCustomFieldsSchema(), getCachedCustomFieldsSchema() (+2 more)
### Community 8 - "Maintenance Core"
Cohesion: 0.22
Nodes (13): addInterval(), assertAsset(), countOverdueForCompany(), createSchedule(), deleteSchedule(), getSchedule(), listDueAndOverdue(), listEventsForAsset() (+5 more)
### Community 9 - "Checklists"
### Community 12 - "Checklists Service"
Cohesion: 0.19
Nodes (7): addTemplateItem(), deleteTemplate(), getInstance(), getTemplate(), listTemplates(), removeTemplateItem(), setItemDone()
Nodes (7): addTemplateItem(), getInstance(), getTemplate(), listInstancesForProperties(), listTemplates(), removeTemplateItem(), setItemDone()
### Community 10 - "Admin Scripts"
Cohesion: 0.24
Nodes (9): main(), readArg(), slugify(), stripSurroundingQuotes(), main(), readArg(), stripSurroundingQuotes(), normalizeEmail() (+1 more)
### Community 13 - "Rooms & Floors Service"
Cohesion: 0.29
Nodes (9): assertProperty(), createFloor(), createRoom(), deleteFloor(), getRoom(), listFloors(), listRoomsWithCounts(), softDeleteRoom() (+1 more)
### Community 11 - "Asset Types Editor"
Cohesion: 0.31
Nodes (8): addFieldDef(), createCompanyAssetType(), deleteCompanyAssetType(), loadEditableType(), normalizeFieldKey(), removeFieldDef(), slugifyTypeSlug(), updateCompanyAssetType()
### Community 12 - "Rooms & Floors"
Cohesion: 0.33
Nodes (8): assertProperty(), createFloor(), createRoom(), getRoom(), listFloors(), listRoomsWithCounts(), softDeleteRoom(), updateRoom()
### Community 13 - "Tasks"
### Community 14 - "Tasks & Subtasks"
Cohesion: 0.36
Nodes (9): addSubtask(), assertWorkPackage(), createTask(), getTaskWithSubtasks(), listTasksForWorkPackage(), removeSubtask(), softDeleteTask(), toggleSubtask() (+1 more)
### Community 14 - "User Management"
Cohesion: 0.38
Nodes (8): assertMembership(), countAdmins(), listCompanyUsers(), removeUserFromCompany(), resetUserPassword(), setUserActive(), setUserRoleInCompany(), updateDisplayName()
### Community 15 - "DB Schema Helpers"
Cohesion: 0.29
Nodes (0):
### Community 16 - "Work Packages"
### Community 15 - "Work Packages"
Cohesion: 0.48
Nodes (6): assertProject(), createWorkPackage(), getWorkPackage(), listWorkPackagesForProject(), softDeleteWorkPackage(), updateWorkPackage()
### Community 17 - "Storage Layer"
### 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 18 - "Migration Workflow"
### 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 19 - "Session Auth"
### 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 20 - "Companies Service"
### Community 19 - "Companies Service"
Cohesion: 0.6
Nodes (4): createCompanyWithAdmin(), getCompany(), slugify(), updateCompany()
### Community 21 - "Form Utilities"
Cohesion: 0.4
Nodes (1): e2n()
### Community 22 - "Custom Fields Design"
### 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 23 - "Field Types"
### Community 21 - "Cluster 21"
Cohesion: 1.0
Nodes (2): parseCsv(), parseCsvDict()
### Community 22 - "Cluster 22"
Cohesion: 1.0
Nodes (0):
### Community 24 - "Form Helper"
Cohesion: 1.0
Nodes (0):
### Community 25 - "Env Config"
### Community 23 - "Cluster 23"
Cohesion: 1.0
Nodes (2): .env configuration, env.ts (Zod-validated process.env)
### Community 26 - "Seed Script"
### Community 24 - "Cluster 24"
Cohesion: 1.0
Nodes (2): npm run create-user script, src/lib/server/db/schema/
### Community 27 - "Asset Location Design"
Cohesion: 1.0
Nodes (2): Decision: asset_location_history (movable assets), Decision: XOR asset location (project XOR property)
### Community 28 - "Decision Design"
### Community 25 - "Cluster 25"
Cohesion: 1.0
Nodes (2): Decision: decisions scoped to project/property/asset/work_package, Phase 3: Projects + structured decisions
### Community 29 - "Drizzle Config"
### 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):
@@ -647,146 +653,172 @@ Nodes (0):
### Community 118 - "Cluster 118"
Cohesion: 1.0
Nodes (0):
Nodes (1): npm run db:seed
### Community 119 - "Cluster 119"
Cohesion: 1.0
Nodes (0):
Nodes (1): npm run validate (check + build)
### Community 120 - "Cluster 120"
Cohesion: 1.0
Nodes (1): npm run db:seed
Nodes (1): (auth) route group (login shell)
### Community 121 - "Cluster 121"
Cohesion: 1.0
Nodes (1): npm run validate (check + build)
Nodes (1): Phase 0: scaffold (shipped)
### Community 122 - "Cluster 122"
Cohesion: 1.0
Nodes (1): (auth) route group (login shell)
Nodes (1): Phase 2: Checklists + maintenance
### Community 123 - "Cluster 123"
Cohesion: 1.0
Nodes (1): Phase 0: scaffold (shipped)
Nodes (1): Decision: UUID v7 primary keys
### Community 124 - "Cluster 124"
Cohesion: 1.0
Nodes (1): Phase 2: Checklists + maintenance
Nodes (1): Decision: timestamptz UTC everywhere
### Community 125 - "Cluster 125"
Cohesion: 1.0
Nodes (1): Decision: UUID v7 primary keys
Nodes (1): Decision: soft delete (deleted_at)
### Community 126 - "Cluster 126"
Cohesion: 1.0
Nodes (1): Decision: timestamptz UTC everywhere
Nodes (1): Decision: numeric(18,4) + char(3) currency
### Community 127 - "Cluster 127"
Cohesion: 1.0
Nodes (1): Decision: soft delete (deleted_at)
Nodes (1): Decision: company default currency in settings_json
### Community 128 - "Cluster 128"
Cohesion: 1.0
Nodes (1): Decision: numeric(18,4) + char(3) currency
Nodes (1): Decision: tabs = nested routes (not query-string)
### Community 129 - "Cluster 129"
Cohesion: 1.0
Nodes (1): Decision: company default currency in settings_json
Nodes (0):
### Community 130 - "Cluster 130"
Cohesion: 1.0
Nodes (1): Decision: tabs = nested routes (not query-string)
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
- **42 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` (+37 more)
- **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 `Field Types`** (2 nodes): `needsEnumValues()`, `field-types.ts`
- **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 `Form Helper`** (2 nodes): `emptyToNull()`, `+page.server.ts`
- **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 `Env Config`** (2 nodes): `.env configuration`, `env.ts (Zod-validated process.env)`
- **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 `Seed Script`** (2 nodes): `npm run create-user script`, `src/lib/server/db/schema/`
- **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 `Asset Location Design`** (2 nodes): `Decision: asset_location_history (movable assets)`, `Decision: XOR asset location (project XOR property)`
- **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 `Decision Design`** (2 nodes): `Decision: decisions scoped to project/property/asset/work_package`, `Phase 3: Projects + structured decisions`
- **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 `Drizzle Config`** (1 nodes): `drizzle.config.ts`
- **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 30`** (1 nodes): `svelte.config.js`
- **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 31`** (1 nodes): `vite.config.ts`
- **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 32`** (1 nodes): `app.d.ts`
- **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 33`** (1 nodes): `accounts.ts`
- **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 34`** (1 nodes): `notifications.ts`
- **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 35`** (1 nodes): `roles.ts`
- **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 36`** (1 nodes): `CustomFieldsForm.svelte`
- **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 37`** (1 nodes): `Sidebar.svelte`
- **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 38`** (1 nodes): `TabNav.svelte`
- **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 39`** (1 nodes): `ThemeToggle.svelte`
- **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 40`** (1 nodes): `TopBar.svelte`
- **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 41`** (1 nodes): `env.ts`
- **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 42`** (1 nodes): `types.ts`
- **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 43`** (1 nodes): `client.ts`
- **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 44`** (1 nodes): `accounts.ts`
- **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 45`** (1 nodes): `assets.ts`
- **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 46`** (1 nodes): `checklists.ts`
- **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 47`** (1 nodes): `decisions.ts`
- **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 48`** (1 nodes): `documents.ts`
- **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 49`** (1 nodes): `index.ts`
- **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 50`** (1 nodes): `maintenance.ts`
- **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 51`** (1 nodes): `notifications.ts`
- **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 52`** (1 nodes): `projects.ts`
- **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 53`** (1 nodes): `properties.ts`
- **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 54`** (1 nodes): `rooms.ts`
- **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 55`** (1 nodes): `tenancy.ts`
- **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 56`** (1 nodes): `wiki.ts`
- **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 57`** (1 nodes): `+error.svelte`
- **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 58`** (1 nodes): `+layout.svelte`
- **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 59`** (1 nodes): `+layout.svelte`
- **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 60`** (1 nodes): `+page.svelte`
- **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.server.ts`
- **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.svelte`
- **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.server.ts`
- **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.
@@ -794,11 +826,11 @@ Nodes (1): 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 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): `+page.svelte`
- **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): `+layout.svelte`
- **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.
@@ -824,11 +856,11 @@ Nodes (1): 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 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): `+page.svelte`
- **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): `+layout.svelte`
- **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.
@@ -836,11 +868,11 @@ Nodes (1): 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 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.svelte`
- **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.server.ts`
- **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.
@@ -858,11 +890,11 @@ Nodes (1): 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 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): `+page.svelte`
- **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): `+layout.svelte`
- **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.
@@ -874,11 +906,11 @@ Nodes (1): 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 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.svelte`
- **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.server.ts`
- **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.
@@ -886,51 +918,63 @@ Nodes (1): 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 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): `+page.svelte`
- **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): `+layout.svelte`
- **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): `+page.svelte`
- **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): `npm run db:seed`
- **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): `npm run validate (check + build)`
- **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): `(auth) route group (login shell)`
- **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): `Phase 0: scaffold (shipped)`
- **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): `Phase 2: Checklists + maintenance`
- **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: UUID v7 primary keys`
- **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: timestamptz UTC everywhere`
- **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: soft delete (deleted_at)`
- **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: numeric(18,4) + char(3) currency`
- **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): `Decision: company default currency in settings_json`
- **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): `Decision: tabs = nested routes (not query-string)`
- **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 `Auth & Load Helpers` to `Documents Service`, `Assets Service & CSV`, `Email & Markdown`, `Property Accounts`, `Projects Service`, `Asset Core`, `Maintenance Core`, `Checklists`, `Rooms & Floors`, `Tasks`, `User Management`, `Work Packages`, `Companies Service`, `Form Utilities`?**
_High betweenness centrality (0.298) - this node is a cross-community bridge._
- **Why does `GET()` connect `Assets Service & CSV` to `Auth & Load Helpers`, `Documents Service`, `Property Accounts`, `Asset Core`, `Maintenance Core`?**
_High betweenness centrality (0.120) - this node is a cross-community bridge._
- **Why does `listCompanyUsers()` connect `User Management` to `Auth & Load Helpers`?**
_High betweenness centrality (0.040) - this node is a cross-community bridge._
- **Are the 34 inferred relationships involving `load()` (e.g. with `countOverdueForCompany()` and `listDueAndOverdue()`) actually correct?**
_`load()` has 34 INFERRED edges - model-reasoned connections that need verification._
- **Are the 13 inferred relationships involving `GET()` (e.g. with `syncFieldDefs()` and `handle()`) actually correct?**
_`GET()` has 13 INFERRED edges - model-reasoned connections that need verification._
- **Are the 5 inferred relationships involving `load()` (e.g. with `setActiveCompany()` and `unreadCountForUser()`) actually correct?**
_`load()` has 5 INFERRED edges - model-reasoned connections that need verification._
- **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?**
_42 weakly-connected nodes found - possible documentation gaps or missing edges._
_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._