Data model - Properties, rooms (+optional floors), assets (typed custom fields + Zod runtime validator + move history), documents (polymorphic scope) - Projects -> work packages -> tasks -> subtasks - Decision events (scoped to project/property/asset/work_package) - Checklist templates + instances, maintenance schedules (time + usage) with auto-materialized checklists on event recording - Wiki (global + per-project) with revisions + tsvector FTS - Property accounts (utility/meter numbers by kind) - Notifications table + per-user channel prefs Infra - RBAC guards (requireCompany / requireAdmin) - Storage abstraction: LocalDiskStorage (HMAC signed URLs) + S3Storage behind the same interface, switchable via STORAGE_BACKEND - CSV export for assets / maintenance / decisions - QR labels: /api/qr SVG endpoint + printable /assets/[id]/label - Notifications: in-app + SMTP (own server via nodemailer) + Matrix (Client-Server API, per-company room) with opt-in per user - Company switcher + auto-select first company on login UI - Topbar: bell with unread count, theme toggle, name, Sign Out (flat) - Sidebar: main nav + dedicated Admin section (Asset types, Users, Company) - Nested-route tabs on property / project / asset detail pages - Admin UIs for users (invite, role, reset pw, deactivate) and company settings (default currency, Matrix room id) - Custom asset type creation + field-def editor with immutable key/type guard and auto-deprecate when removing a field still referenced Graph - graphify-out/ committed: GRAPH_REPORT.md, graph.html, graph.json
38 KiB
Graph Report - C:/dev/build_for_life_project (2026-04-23)
Corpus Check
- 189 files · ~54,875 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)
- Token cost: 0 input · 0 output
Community Hubs (Navigation)
- _COMMUNITY_Auth & Load Helpers
- _COMMUNITY_Documents Service
- _COMMUNITY_Assets Service & CSV
- _COMMUNITY_Email & Markdown
- _COMMUNITY_Property Accounts
- _COMMUNITY_Projects Service
- _COMMUNITY_App Shell & Theme
- _COMMUNITY_Asset Core
- _COMMUNITY_Maintenance Core
- _COMMUNITY_Checklists
- _COMMUNITY_Admin Scripts
- _COMMUNITY_Asset Types Editor
- _COMMUNITY_Rooms & Floors
- _COMMUNITY_Tasks
- _COMMUNITY_User Management
- _COMMUNITY_DB Schema Helpers
- _COMMUNITY_Work Packages
- _COMMUNITY_Storage Layer
- _COMMUNITY_Migration Workflow
- _COMMUNITY_Session Auth
- _COMMUNITY_Companies Service
- _COMMUNITY_Form Utilities
- _COMMUNITY_Custom Fields Design
- _COMMUNITY_Field Types
- _COMMUNITY_Form Helper
- _COMMUNITY_Env Config
- _COMMUNITY_Seed Script
- _COMMUNITY_Asset Location Design
- _COMMUNITY_Decision Design
- _COMMUNITY_Drizzle Config
- _COMMUNITY_Cluster 30
- _COMMUNITY_Cluster 31
- _COMMUNITY_Cluster 32
- _COMMUNITY_Cluster 33
- _COMMUNITY_Cluster 34
- _COMMUNITY_Cluster 35
- _COMMUNITY_Cluster 36
- _COMMUNITY_Cluster 37
- _COMMUNITY_Cluster 38
- _COMMUNITY_Cluster 39
- _COMMUNITY_Cluster 40
- _COMMUNITY_Cluster 41
- _COMMUNITY_Cluster 42
- _COMMUNITY_Cluster 43
- _COMMUNITY_Cluster 44
- _COMMUNITY_Cluster 45
- _COMMUNITY_Cluster 46
- _COMMUNITY_Cluster 47
- _COMMUNITY_Cluster 48
- _COMMUNITY_Cluster 49
- _COMMUNITY_Cluster 50
- _COMMUNITY_Cluster 51
- _COMMUNITY_Cluster 52
- _COMMUNITY_Cluster 53
- _COMMUNITY_Cluster 54
- _COMMUNITY_Cluster 55
- _COMMUNITY_Cluster 56
- _COMMUNITY_Cluster 57
- _COMMUNITY_Cluster 58
- _COMMUNITY_Cluster 59
- _COMMUNITY_Cluster 60
- _COMMUNITY_Cluster 61
- _COMMUNITY_Cluster 62
- _COMMUNITY_Cluster 63
- _COMMUNITY_Cluster 64
- _COMMUNITY_Cluster 65
- _COMMUNITY_Cluster 66
- _COMMUNITY_Cluster 67
- _COMMUNITY_Cluster 68
- _COMMUNITY_Cluster 69
- _COMMUNITY_Cluster 70
- _COMMUNITY_Cluster 71
- _COMMUNITY_Cluster 72
- _COMMUNITY_Cluster 73
- _COMMUNITY_Cluster 74
- _COMMUNITY_Cluster 75
- _COMMUNITY_Cluster 76
- _COMMUNITY_Cluster 77
- _COMMUNITY_Cluster 78
- _COMMUNITY_Cluster 79
- _COMMUNITY_Cluster 80
- _COMMUNITY_Cluster 81
- _COMMUNITY_Cluster 82
- _COMMUNITY_Cluster 83
- _COMMUNITY_Cluster 84
- _COMMUNITY_Cluster 85
- _COMMUNITY_Cluster 86
- _COMMUNITY_Cluster 87
- _COMMUNITY_Cluster 88
- _COMMUNITY_Cluster 89
- _COMMUNITY_Cluster 90
- _COMMUNITY_Cluster 91
- _COMMUNITY_Cluster 92
- _COMMUNITY_Cluster 93
- _COMMUNITY_Cluster 94
- _COMMUNITY_Cluster 95
- _COMMUNITY_Cluster 96
- _COMMUNITY_Cluster 97
- _COMMUNITY_Cluster 98
- _COMMUNITY_Cluster 99
- _COMMUNITY_Cluster 100
- _COMMUNITY_Cluster 101
- _COMMUNITY_Cluster 102
- _COMMUNITY_Cluster 103
- _COMMUNITY_Cluster 104
- _COMMUNITY_Cluster 105
- _COMMUNITY_Cluster 106
- _COMMUNITY_Cluster 107
- _COMMUNITY_Cluster 108
- _COMMUNITY_Cluster 109
- _COMMUNITY_Cluster 110
- _COMMUNITY_Cluster 111
- _COMMUNITY_Cluster 112
- _COMMUNITY_Cluster 113
- _COMMUNITY_Cluster 114
- _COMMUNITY_Cluster 115
- _COMMUNITY_Cluster 116
- _COMMUNITY_Cluster 117
- _COMMUNITY_Cluster 118
- _COMMUNITY_Cluster 119
- _COMMUNITY_Cluster 120
- _COMMUNITY_Cluster 121
- _COMMUNITY_Cluster 122
- _COMMUNITY_Cluster 123
- _COMMUNITY_Cluster 124
- _COMMUNITY_Cluster 125
- _COMMUNITY_Cluster 126
- _COMMUNITY_Cluster 127
- _COMMUNITY_Cluster 128
- _COMMUNITY_Cluster 129
- _COMMUNITY_Cluster 130
God Nodes (most connected - your core abstractions)
load()- 79 edgesGET()- 20 edgesLocalDiskStorage- 10 edgesload()- 9 edgesS3Storage- 8 edgesbuildfor_life_ops- 8 edgesfanOutExternal()- 7 edgesgetTaskWithSubtasks()- 7 edgeshandle()- 6 edgesuploadDocument()- 6 edges
Surprising Connections (you probably didn't know these)
load()--calls-->renderMarkdown()[INFERRED] src\routes(auth)\login+page.server.ts → src\lib\server\markdown.tsload()--calls-->listTemplates()[INFERRED] src\routes(auth)\login+page.server.ts → src\lib\server\services\checklists.tsload()--calls-->getCompany()[INFERRED] src\routes(auth)\login+page.server.ts → src\lib\server\services\companies.tsload()--calls-->listDocumentsForScope()[INFERRED] src\routes(auth)\login+page.server.ts → src\lib\server\services\documents.tsload()--calls-->countOverdueForCompany()[INFERRED] src\routes(auth)\login+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 - "Auth & Load Helpers"
Cohesion: 0.04 Nodes (12): requireAdmin(), requireCompany(), load(), parseSettings(), getPageWithCurrentRevision(), getRevision(), listPagesForScope(), listRevisions() (+4 more)
Community 1 - "Documents Service"
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 - "Email & Markdown"
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"
Cohesion: 0.11 Nodes (6): load(), unreadCountForUser(), getProject(), listProjects(), getProperty(), listProperties()
Community 6 - "App Shell & Theme"
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"
Cohesion: 0.19 Nodes (7): addTemplateItem(), deleteTemplate(), getInstance(), getTemplate(), listTemplates(), removeTemplateItem(), setItemDone()
Community 10 - "Admin Scripts"
Cohesion: 0.24 Nodes (9): main(), readArg(), slugify(), stripSurroundingQuotes(), main(), readArg(), stripSurroundingQuotes(), normalizeEmail() (+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"
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"
Cohesion: 0.48 Nodes (6): assertProject(), createWorkPackage(), getWorkPackage(), listWorkPackagesForProject(), softDeleteWorkPackage(), updateWorkPackage()
Community 17 - "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"
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"
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"
Cohesion: 0.6 Nodes (4): createCompanyWithAdmin(), getCompany(), slugify(), updateCompany()
Community 21 - "Form Utilities"
Cohesion: 0.4 Nodes (1): e2n()
Community 22 - "Custom Fields Design"
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"
Cohesion: 1.0 Nodes (0):
Community 24 - "Form Helper"
Cohesion: 1.0 Nodes (0):
Community 25 - "Env Config"
Cohesion: 1.0 Nodes (2): .env configuration, env.ts (Zod-validated process.env)
Community 26 - "Seed Script"
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"
Cohesion: 1.0 Nodes (2): Decision: decisions scoped to project/property/asset/work_package, Phase 3: Projects + structured decisions
Community 29 - "Drizzle Config"
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 (0):
Community 119 - "Cluster 119"
Cohesion: 1.0 Nodes (0):
Community 120 - "Cluster 120"
Cohesion: 1.0 Nodes (1): npm run db:seed
Community 121 - "Cluster 121"
Cohesion: 1.0 Nodes (1): npm run validate (check + build)
Community 122 - "Cluster 122"
Cohesion: 1.0 Nodes (1): (auth) route group (login shell)
Community 123 - "Cluster 123"
Cohesion: 1.0 Nodes (1): Phase 0: scaffold (shipped)
Community 124 - "Cluster 124"
Cohesion: 1.0 Nodes (1): Phase 2: Checklists + maintenance
Community 125 - "Cluster 125"
Cohesion: 1.0 Nodes (1): Decision: UUID v7 primary keys
Community 126 - "Cluster 126"
Cohesion: 1.0 Nodes (1): Decision: timestamptz UTC everywhere
Community 127 - "Cluster 127"
Cohesion: 1.0 Nodes (1): Decision: soft delete (deleted_at)
Community 128 - "Cluster 128"
Cohesion: 1.0 Nodes (1): Decision: numeric(18,4) + char(3) currency
Community 129 - "Cluster 129"
Cohesion: 1.0 Nodes (1): Decision: company default currency in settings_json
Community 130 - "Cluster 130"
Cohesion: 1.0 Nodes (1): Decision: tabs = nested routes (not query-string)
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) These have ≤1 connection - possible missing edges or undocumented components. - Thin community
Field Types(2 nodes):needsEnumValues(),field-types.tsToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Form Helper(2 nodes):emptyToNull(),+page.server.tsToo 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)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/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)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 decisionsToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Drizzle Config(1 nodes):drizzle.config.tsToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 30(1 nodes):svelte.config.jsToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 31(1 nodes):vite.config.tsToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 32(1 nodes):app.d.tsToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 33(1 nodes):accounts.tsToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 34(1 nodes):notifications.tsToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 35(1 nodes):roles.tsToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 36(1 nodes):CustomFieldsForm.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 37(1 nodes):Sidebar.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 38(1 nodes):TabNav.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 39(1 nodes):ThemeToggle.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 40(1 nodes):TopBar.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 41(1 nodes):env.tsToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 42(1 nodes):types.tsToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 43(1 nodes):client.tsToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 44(1 nodes):accounts.tsToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 45(1 nodes):assets.tsToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 46(1 nodes):checklists.tsToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 47(1 nodes):decisions.tsToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 48(1 nodes):documents.tsToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 49(1 nodes):index.tsToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 50(1 nodes):maintenance.tsToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 51(1 nodes):notifications.tsToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 52(1 nodes):projects.tsToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 53(1 nodes):properties.tsToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 54(1 nodes):rooms.tsToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 55(1 nodes):tenancy.tsToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 56(1 nodes):wiki.tsToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 57(1 nodes):+error.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 58(1 nodes):+layout.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 59(1 nodes):+layout.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 60(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 61(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 62(1 nodes):+page.server.tsToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 63(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 64(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 65(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 66(1 nodes):+page.server.tsToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 67(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 68(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 69(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 70(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 71(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 72(1 nodes):+layout.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 73(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 74(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 75(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 76(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 77(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 78(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 79(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 80(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 81(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 82(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 83(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 84(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 85(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 86(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 87(1 nodes):+layout.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 88(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 89(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 90(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 91(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 92(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 93(1 nodes):+page.server.tsToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 94(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 95(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 96(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 97(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 98(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 99(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 100(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 101(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 102(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 103(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 104(1 nodes):+layout.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 105(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 106(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 107(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 108(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 109(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 110(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 111(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 112(1 nodes):+page.server.tsToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 113(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 114(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 115(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 116(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 117(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 118(1 nodes):+layout.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 119(1 nodes):+page.svelteToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 120(1 nodes):npm run db:seedToo 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)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)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)Too small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 124(1 nodes):Phase 2: Checklists + maintenanceToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 125(1 nodes):Decision: UUID v7 primary keysToo small to be a meaningful cluster - may be noise or needs more connections extracted. - Thin community
Cluster 126(1 nodes):Decision: timestamptz UTC everywhereToo 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)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) currencyToo 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_jsonToo 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)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()connectAuth & Load HelperstoDocuments 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()connectAssets Service & CSVtoAuth & 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()connectUser ManagementtoAuth & Load Helpers? High betweenness centrality (0.040) - this node is a cross-community bridge. - Are the 34 inferred relationships involving
load()(e.g. withcountOverdueForCompany()andlistDueAndOverdue()) actually correct?load()has 34 INFERRED edges - model-reasoned connections that need verification. - Are the 13 inferred relationships involving
GET()(e.g. withsyncFieldDefs()andhandle()) actually correct?GET()has 13 INFERRED edges - model-reasoned connections that need verification. - Are the 5 inferred relationships involving
load()(e.g. withsetActiveCompany()andunreadCountForUser()) actually correct?load()has 5 INFERRED edges - model-reasoned connections that need verification. - What connects
buildfor_life_budget (sibling),buildfor_life_repair (sibling),PostgreSQL 16+ via Drizzle ORM + Zodto the rest of the system? 42 weakly-connected nodes found - possible documentation gaps or missing edges.