diff --git a/.gitignore b/.gitignore
index 42cc7ae..f50b477 100644
--- a/.gitignore
+++ b/.gitignore
@@ -41,3 +41,9 @@ coverage/
.agents/settings.json
.agents/settings.local.json
.agents/skills/gsd-*/
+
+# graphify working dir (build + cache); canonical graph lives in .planning/graphs/
+graphify-out/
+# heavy regenerable graph artifacts (keep GRAPH_COMMUNITIES.md + GRAPH_REPORT.md)
+.planning/graphs/graph.json
+.planning/graphs/graph.html
diff --git a/.planning/config.json b/.planning/config.json
index 90c07e6..fd467d1 100644
--- a/.planning/config.json
+++ b/.planning/config.json
@@ -203,5 +203,11 @@
"standard": "medium",
"heavy": "xhigh"
}
+ },
+ "graphify": {
+ "enabled": true
+ },
+ "mempalace": {
+ "enabled": true
}
}
diff --git a/.planning/graphs/.graphify_labels.json b/.planning/graphs/.graphify_labels.json
new file mode 100644
index 0000000..d5f9f08
--- /dev/null
+++ b/.planning/graphs/.graphify_labels.json
@@ -0,0 +1 @@
+{"0":"Public Stats Routes API","1":"Player Request Repository","2":"Statistics Readiness Service","3":"Admin Rotation Repository","4":"Data Model Rows","5":"Public Stats Read Model","6":"Application Bootstrap","7":"Auth User Repository","8":"Statistics Test Fixtures","9":"Player Stats Payload Models","10":"Full Run Recalculation Service","11":"Repository Test Utilities","12":"Public Stats Database Queries","13":"Statistics Repository Core","14":"Ingest Query Builder","15":"Pagination and Filtering","16":"Player and Squad Aggregation","17":"Statistics Recalculation Adapter","18":"Legacy Stats Export","19":"Replay Event Mapper","20":"Steam Identity and Testing","21":"Filter and Sort Specification","22":"Legacy Database Export","23":"Game Type Classification","24":"Parser Runtime and Messaging","25":"Player Slug and Pagination State","26":"Parse Job Publisher","27":"Replay Promotion Workflow","28":"Parser Artifact Persistence","29":"Ingest Route Schemas","30":"Request and Action Routes","31":"Audit Patch Recalculator","32":"Parser Artifact Mapping","33":"Replay Promotion Service","34":"Ingest Database Adapter","35":"Admin Test Utilities","36":"Parity Diff Contract","37":"Workflow Action Application","38":"Infrastructure Bootstrap","39":"Database Schema and Migrations","40":"Game Type Detection","41":"Parse Job Publishing","42":"Parity Statistics SQL","43":"Authentication Routes","44":"Workflow Applier Tests","45":"Configuration and Operations","46":"Parser Result Status Tracking","47":"Ingest Action Routes","48":"Ingest Repository Tests","49":"Legacy Export Repository","50":"Parse Job Reconciler","51":"Bounty Point Calculation","52":"Health Checks and Operations","53":"Workflow Boundary Guards","54":"Full Run Statistics Repository","55":"Parity Score Formulas","56":"Workflow Tests","57":"Request Moderation Routes","58":"Keyset Cursor Pagination","59":"Cloud Client Factories","60":"Logging and Testing","61":"Player Identity Indexing","62":"Request Moderation Test Suite","63":"OpenAPI Contract Validation","64":"Request Workflow Schemas","65":"Reference Validator Database","66":"Interval Task Scheduler","67":"Commander Side Aggregation","68":"Audit Patch Moderation Routes","69":"Overview and Commander Statistics","70":"History Gap Detection","71":"Replay Sitemap Generation","72":"OpenAPI Pagination Schema","73":"Legacy Export Operation","74":"RabbitMQ Parser Runtime","75":"Admin Role Routes","76":"Steam OpenID Client","77":"Bounty Query Repository","78":"OpenAPI Schema Export","79":"Backup Runbook Validator","80":"Rotation Summary Queries","81":"Module Route Options","82":"Legacy Export Test Utilities","83":"RabbitMQ Topology Setup","84":"Ingest Command Handlers","85":"Action Routes Tests","86":"Show Classification","87":"Request Attachment Storage"}
\ No newline at end of file
diff --git a/.planning/graphs/GRAPH_COMMUNITIES.md b/.planning/graphs/GRAPH_COMMUNITIES.md
new file mode 100644
index 0000000..4ba401f
--- /dev/null
+++ b/.planning/graphs/GRAPH_COMMUNITIES.md
@@ -0,0 +1,94 @@
+# Graph Communities — server-2
+
+_88 communities, named by member analysis (no LLM API used). Source: `.planning/graphs/graph.json`._
+
+| # | Name | Purpose | Key files |
+|---|------|---------|-----------|
+| 0 | **Public Stats Routes API** | HTTP routes and schemas for public player, squad, and replay statistics endpoints. | src/modules/public-stats/routes/routes.ts
src/modules/public-stats/routes/schemas.ts
src/modules/public-stats/routes/models.ts |
+| 1 | **Player Request Repository** | In-memory and database storage for player requests with CRUD operations and audit tracking. | src/modules/requests/routes/memory.ts
src/modules/requests/routes/postgres.ts
src/modules/requests/routes/models.ts |
+| 2 | **Statistics Readiness Service** | Tracks player identity resolution status and readiness reporting for statistics computation. | src/modules/statistics/readiness/readiness.ts
src/modules/statistics/repository/readiness.ts |
+| 3 | **Admin Rotation Repository** | In-memory rotation management with validation and persistent storage for administrative updates. | src/modules/admin/routes/memory.ts
src/modules/admin/routes/rotation-repository.ts |
+| 4 | **Data Model Rows** | Database row types for players, squads, rotations, and bounty aggregation entities. | src/modules/public-stats/repository.ts
src/modules/statistics/bounty/bounty.ts |
+| 5 | **Public Stats Read Model** | Query interface for public statistics with filtering, pagination, and leaderboard aggregation. | src/modules/public-stats/routes/empty-read-model.ts
src/modules/public-stats/repository.ts |
+| 6 | **Application Bootstrap** | Express app factory, authentication config, metrics registry, and module route registration. | src/app.ts
src/infra/metrics/registry.ts |
+| 7 | **Auth User Repository** | In-memory and database storage for Steam user identities and session management. | src/modules/auth/routes/memory.ts
src/modules/auth/routes/postgres.ts |
+| 8 | **Statistics Test Fixtures** | Test data builders and database helpers for statistics integration tests. | src/modules/statistics/repository/tests/postgres.test.ts |
+| 9 | **Player Stats Payload Models** | Response models for player weapons, vehicles, relationships, and weekly statistics. | src/modules/public-stats/routes/models.ts |
+| 10 | **Full Run Recalculation Service** | Orchestrates full-scope statistics recalculation with coverage reporting. | src/modules/statistics/service/full-run-recalculation.ts |
+| 11 | **Repository Test Utilities** | Test clients, fixtures, and assertion helpers for database repository tests. | src/modules/statistics/repository/tests/utilities.ts
src/modules/statistics/repository/tests/fixtures.ts |
+| 12 | **Public Stats Database Queries** | PostgreSQL queries for player/squad data, replay history, and sitemap generation. | src/modules/public-stats/repository.ts |
+| 13 | **Statistics Repository Core** | Parser event storage and rotation assignment for aggregation recalculation. | src/modules/statistics/repository/repository.ts |
+| 14 | **Ingest Query Builder** | Dynamic SQL WHERE clause construction and record filtering for ingest operations. | src/modules/ingest/repository/repository.ts
src/modules/ingest/types.ts |
+| 15 | **Pagination and Filtering** | Cursor-based keyset pagination, filter validation, and sort specification for list endpoints. | src/modules/public-stats/routes/pagination/cursor.ts
src/modules/public-stats/routes/filters.ts |
+| 16 | **Player and Squad Aggregation** | Compute kill/death statistics and squad membership aggregates from replay events. | src/modules/statistics/service/service.ts |
+| 17 | **Statistics Recalculation Adapter** | Delegates statistics recalculation across scopes (parser result, rotation, all-time). | src/modules/statistics/repository/repository.ts |
+| 18 | **Legacy Stats Export** | Backward-compatible JSON export of player/squad/weapon/relationship statistics. | src/modules/statistics/export/legacy-public-export.ts |
+| 19 | **Replay Event Mapper** | Transforms raw replay events into structured sides, participants, and map metadata. | src/modules/public-stats/replay-mapper.ts |
+| 20 | **Steam Identity and Testing** | Steam OpenID authentication, test fixtures, and reference validation mocks. | src/modules/auth/routes/models.ts
src/modules/requests/routes/models.ts |
+| 21 | **Filter and Sort Specification** | Defines allowed sort fields and filter logic for rotation, player, and commander endpoints. | src/modules/public-stats/routes/filters.ts
src/modules/public-stats/routes/pagination/sort.ts |
+| 22 | **Legacy Database Export** | SQL queries extracting player/squad/weapon/relationship data for legacy format export. | src/modules/statistics/repository/legacy-export.ts |
+| 23 | **Game Type Classification** | Classifies replays by game type and manages inclusion/exclusion list overrides. | src/modules/statistics/game-type/game-type-config.ts |
+| 24 | **Parser Runtime and Messaging** | RabbitMQ queue integration and parse job lifecycle message handling. | src/infra/queue/rabbitmq.ts
src/modules/ingest/runtime.ts |
+| 25 | **Player Slug and Pagination State** | Name-based player lookups with Cyrillic transliteration and pagination cursor state. | src/modules/public-stats/routes/slug.ts
src/modules/public-stats/routes/pagination/mask.ts |
+| 26 | **Parse Job Publisher** | Publishes completed parse jobs to downstream consumers with status tracking. | src/modules/ingest/publisher.ts |
+| 27 | **Replay Promotion Workflow** | Manages staging record deduplication and promotion to replay table with evidence tracking. | src/modules/ingest/repository/repository.ts |
+| 28 | **Parser Artifact Persistence** | Persists normalized parser events and coordinates statistics recalculation. | src/modules/statistics/parser-artifact.ts |
+| 29 | **Ingest Route Schemas** | OpenAPI schemas and filters for staging records and parse job list endpoints. | src/modules/ingest/routes/routes.ts |
+| 30 | **Request and Action Routes** | HTTP endpoints for creating/listing player requests and ingest job actions. | src/modules/requests/routes/routes.ts
src/modules/ingest/routes/actions.ts |
+| 31 | **Audit Patch Recalculator** | Applies audit patches to statistics after moderation actions on replay data. | src/modules/requests/routes/audit-recalculator.ts |
+| 32 | **Parser Artifact Mapping** | Maps raw parser output to normalized kill/vehicle/diagnostic events and summaries. | src/modules/statistics/parser-artifact.ts |
+| 33 | **Replay Promotion Service** | Handles source/checksum conflict detection and timestamp resolution for new replays. | src/modules/ingest/service.ts |
+| 34 | **Ingest Database Adapter** | PostgreSQL operations for staging records, parse jobs, and history tracking. | src/modules/ingest/repository/repository.ts |
+| 35 | **Admin Test Utilities** | Rotation management test helpers and admin app builders. | src/modules/admin/routes/tests/utilities.ts |
+| 36 | **Parity Diff Contract** | Defines strict failure codes and known difference policies for statistics validation. | src/modules/statistics/diff/diff-contract.ts |
+| 37 | **Workflow Action Application** | Applies player merge/split/link actions and legacy winner fixes to identity data. | src/modules/requests/routes/workflow-applier.ts |
+| 38 | **Infrastructure Bootstrap** | Database pool creation, logging setup, server initialization and shutdown. | src/infra/db/client.ts
src/server.ts |
+| 39 | **Database Schema and Migrations** | Schema validation, migration runner, and integration test infrastructure. | src/infra/db/migrate.ts |
+| 40 | **Game Type Detection** | Extracts mission names and classifies replays by game type with override rules. | src/modules/statistics/game-type/classify-game-type.ts |
+| 41 | **Parse Job Publishing** | Publishes parse completion messages to RabbitMQ with error handling. | src/infra/queue/messages.ts
src/modules/ingest/publisher.ts |
+| 42 | **Parity Statistics SQL** | Dynamic SQL generation for player/squad/weapon/relationship statistics queries. | src/modules/statistics/repository/parity-sql.ts |
+| 43 | **Authentication Routes** | Steam login/callback routes, session cookies, and role-based access control. | src/modules/auth/routes/routes.ts
src/modules/auth/routes/authorization.ts |
+| 44 | **Workflow Applier Tests** | Test doubles and integration tests for workflow action application and recalculation. | src/modules/requests/routes/workflow-applier.test.ts |
+| 45 | **Configuration and Operations** | Environment loading, statistics recalculation and readiness operations. | src/config/env.ts
src/operations/recalculate-statistics.ts |
+| 46 | **Parser Result Status Tracking** | Query results for rotation assignment, status counts, and parser result metadata. | src/modules/statistics/repository/repository.ts |
+| 47 | **Ingest Action Routes** | HTTP endpoints for parse job retry and manual reparse with role-based authorization. | src/modules/ingest/routes/actions.ts |
+| 48 | **Ingest Repository Tests** | PostgreSQL test helpers for staging records and parse job operations. | src/modules/ingest/repository/tests/postgres.test.ts |
+| 49 | **Legacy Export Repository** | Loads source data from database for legacy statistics export format. | src/modules/statistics/export/legacy-public-export.ts
src/modules/statistics/repository/legacy-export.ts |
+| 50 | **Parse Job Reconciler** | Detects and reconciles stale published parse jobs with completion tracking. | src/modules/ingest/reconciler.ts |
+| 51 | **Bounty Point Calculation** | Computes bounty points from kill events with effectiveness weighting. | src/modules/statistics/bounty/bounty.ts |
+| 52 | **Health Checks and Operations** | System health status, storage client, and operations endpoints. | src/infra/health.ts
src/modules/operations/routes.ts |
+| 53 | **Workflow Boundary Guards** | Validates that request workflow changes follow boundary rules and policies. | src/operations/check-app-boundary-guards.ts |
+| 54 | **Full Run Statistics Repository** | Assigns rotations and classifies game types for full-scope recalculation. | src/modules/statistics/repository/full-run.ts |
+| 55 | **Parity Score Formulas** | Calculates KD ratio, kill coefficients, and weekly score metrics. | src/modules/statistics/parity-formulas.ts |
+| 56 | **Workflow Tests** | Test app builders and test doubles for workflow action application. | src/modules/requests/routes/workflows/tests/utilities.ts |
+| 57 | **Request Moderation Routes** | HTTP endpoints for request approval/rejection and decision responses. | src/modules/requests/routes/moderation/moderation.ts |
+| 58 | **Keyset Cursor Pagination** | Implements keyset-based pagination with sortable columns and state encoding. | src/modules/public-stats/routes/pagination/keyset.ts |
+| 59 | **Cloud Client Factories** | Creates RabbitMQ queue and S3 storage client instances. | src/infra/queue/client.ts
src/infra/storage/client.ts |
+| 60 | **Logging and Testing** | Logger configuration, app-level tests, and Steam ID leak detection. | src/infra/logging/logger.ts
src/test/app.test.ts |
+| 61 | **Player Identity Indexing** | Indexes player identities with priority matching and steam ID validation. | src/modules/statistics/repository/repository.ts |
+| 62 | **Request Moderation Test Suite** | Integration tests for request workflows, audit patches, and moderation. | src/modules/requests/routes/audit-patches/tests/index.test.ts
src/modules/requests/routes/moderation/tests/index.test.ts |
+| 63 | **OpenAPI Contract Validation** | Validates OpenAPI schema for forbidden pagination keys and list schema compliance. | src/openapi/frozen-contract.test.ts |
+| 64 | **Request Workflow Schemas** | OpenAPI schemas for request workflow actions and validation logic. | src/modules/requests/routes/workflows/workflows.ts |
+| 65 | **Reference Validator Database** | PostgreSQL implementation of reference validation for player/squad identities. | src/modules/requests/routes/postgres.ts |
+| 66 | **Interval Task Scheduler** | Periodic task execution with start/stop lifecycle and error handling. | src/infra/runtime/interval-task.ts |
+| 67 | **Commander Side Aggregation** | Computes commander-specific statistics from replay events. | src/modules/statistics/service/commander.ts |
+| 68 | **Audit Patch Moderation Routes** | HTTP endpoints for creating audit patches after request review. | src/modules/requests/routes/audit-patches/audit-patches.ts |
+| 69 | **Overview and Commander Statistics** | Queries rotation overviews and commander side summaries. | src/modules/public-stats/repository.ts |
+| 70 | **History Gap Detection** | Detects and tracks periods of missing player/squad history data. | src/modules/public-stats/routes/history-gaps.ts |
+| 71 | **Replay Sitemap Generation** | Generates XML sitemaps for replay URLs with pagination support. | src/modules/public-stats/routes/sitemap.ts |
+| 72 | **OpenAPI Pagination Schema** | Validates that paginated OpenAPI schemas use standard field conventions. | src/openapi/contract.test.ts |
+| 73 | **Legacy Export Operation** | Orchestrates generation and export of legacy statistics format to output. | src/operations/export-legacy-public-stats.ts |
+| 74 | **RabbitMQ Parser Runtime** | Consumes parser completion messages and routes to result handlers. | src/infra/queue/rabbitmq.ts |
+| 75 | **Admin Role Routes** | HTTP endpoints for viewing and updating user roles. | src/modules/auth/routes/role-routes.ts |
+| 76 | **Steam OpenID Client** | Steam authentication protocol implementation with signature verification. | src/modules/auth/routes/steam-openid.ts |
+| 77 | **Bounty Query Repository** | Queries bounty input data and aggregates for statistics API. | src/modules/public-stats/repository.ts |
+| 78 | **OpenAPI Schema Export** | Generates and exports OpenAPI schema documentation. | src/openapi/export-openapi.ts |
+| 79 | **Backup Runbook Validator** | Ensures critical database backup terms exist in Docker Compose. | src/operations/check-backup-runbook.ts |
+| 80 | **Rotation Summary Queries** | Queries for rotation details, summaries, and listing. | src/modules/public-stats/repository.ts |
+| 81 | **Module Route Options** | Configuration interfaces for registering application modules. | src/app.ts |
+| 82 | **Legacy Export Test Utilities** | Scripted database client for legacy export testing. | src/modules/statistics/repository/tests/legacy-export.test.ts |
+| 83 | **RabbitMQ Topology Setup** | Tests queue and exchange topology configuration assertions. | src/infra/queue/rabbitmq.test.ts |
+| 84 | **Ingest Command Handlers** | Implements retry and manual reparse commands for parse jobs. | src/modules/ingest/routes/actions.ts |
+| 85 | **Action Routes Tests** | Integration tests for parse job retry and reparse endpoints. | src/modules/ingest/routes/tests/actions.test.ts |
+| 86 | **Show Classification** | Computes whether a replay is from a show/tournament game. | src/modules/statistics/game-type/is-show.ts |
+| 87 | **Request Attachment Storage** | Stores and manages file uploads for request moderation attachments. | src/modules/requests/routes/attachment-storage.ts |
diff --git a/.planning/graphs/GRAPH_REPORT.md b/.planning/graphs/GRAPH_REPORT.md
new file mode 100644
index 0000000..c8bd718
--- /dev/null
+++ b/.planning/graphs/GRAPH_REPORT.md
@@ -0,0 +1,485 @@
+# Graph Report - . (2026-06-15)
+
+## Corpus Check
+- cluster-only mode — file stats not available
+
+## Summary
+- 1820 nodes · 3855 edges · 88 communities (82 shown, 6 thin omitted)
+- Extraction: 99% EXTRACTED · 1% INFERRED · 0% AMBIGUOUS · INFERRED: 28 edges (avg confidence: 0.8)
+- Token cost: 0 input · 0 output
+
+## Graph Freshness
+- Built from commit: `144e7350`
+- Run `git rev-parse HEAD` and compare to check if the graph is stale.
+- Run `graphify update .` after code changes (no API cost).
+
+## Community Hubs (Navigation)
+- [[_COMMUNITY_TEST_ZERO_NAME|TEST_ZERO_NAME]]
+- [[_COMMUNITY_Community 1|Community 1]]
+- [[_COMMUNITY_Community 2|Community 2]]
+- [[_COMMUNITY_Community 3|Community 3]]
+- [[_COMMUNITY_Community 4|Community 4]]
+- [[_COMMUNITY_Community 5|Community 5]]
+- [[_COMMUNITY_Community 6|Community 6]]
+- [[_COMMUNITY_Community 7|Community 7]]
+- [[_COMMUNITY_Community 8|Community 8]]
+- [[_COMMUNITY_Community 9|Community 9]]
+- [[_COMMUNITY_Community 10|Community 10]]
+- [[_COMMUNITY_Community 11|Community 11]]
+- [[_COMMUNITY_Community 12|Community 12]]
+- [[_COMMUNITY_Community 13|Community 13]]
+- [[_COMMUNITY_Community 14|Community 14]]
+- [[_COMMUNITY_Community 15|Community 15]]
+- [[_COMMUNITY_Community 16|Community 16]]
+- [[_COMMUNITY_Community 17|Community 17]]
+- [[_COMMUNITY_Community 18|Community 18]]
+- [[_COMMUNITY_Community 19|Community 19]]
+- [[_COMMUNITY_Community 20|Community 20]]
+- [[_COMMUNITY_Community 21|Community 21]]
+- [[_COMMUNITY_Community 22|Community 22]]
+- [[_COMMUNITY_Community 23|Community 23]]
+- [[_COMMUNITY_Community 24|Community 24]]
+- [[_COMMUNITY_Community 25|Community 25]]
+- [[_COMMUNITY_Community 26|Community 26]]
+- [[_COMMUNITY_Community 27|Community 27]]
+- [[_COMMUNITY_Community 28|Community 28]]
+- [[_COMMUNITY_Community 29|Community 29]]
+- [[_COMMUNITY_Community 30|Community 30]]
+- [[_COMMUNITY_Community 31|Community 31]]
+- [[_COMMUNITY_Community 32|Community 32]]
+- [[_COMMUNITY_Community 33|Community 33]]
+- [[_COMMUNITY_Community 34|Community 34]]
+- [[_COMMUNITY_Community 35|Community 35]]
+- [[_COMMUNITY_Community 36|Community 36]]
+- [[_COMMUNITY_Community 37|Community 37]]
+- [[_COMMUNITY_Community 38|Community 38]]
+- [[_COMMUNITY_Community 39|Community 39]]
+- [[_COMMUNITY_Community 40|Community 40]]
+- [[_COMMUNITY_Community 41|Community 41]]
+- [[_COMMUNITY_Community 42|Community 42]]
+- [[_COMMUNITY_Community 43|Community 43]]
+- [[_COMMUNITY_Community 44|Community 44]]
+- [[_COMMUNITY_Community 45|Community 45]]
+- [[_COMMUNITY_Community 46|Community 46]]
+- [[_COMMUNITY_Community 47|Community 47]]
+- [[_COMMUNITY_Community 48|Community 48]]
+- [[_COMMUNITY_Community 49|Community 49]]
+- [[_COMMUNITY_Community 50|Community 50]]
+- [[_COMMUNITY_Community 51|Community 51]]
+- [[_COMMUNITY_Community 52|Community 52]]
+- [[_COMMUNITY_Community 53|Community 53]]
+- [[_COMMUNITY_Community 54|Community 54]]
+- [[_COMMUNITY_Community 55|Community 55]]
+- [[_COMMUNITY_Community 56|Community 56]]
+- [[_COMMUNITY_Community 57|Community 57]]
+- [[_COMMUNITY_Community 58|Community 58]]
+- [[_COMMUNITY_Community 59|Community 59]]
+- [[_COMMUNITY_Community 60|Community 60]]
+- [[_COMMUNITY_Community 61|Community 61]]
+- [[_COMMUNITY_Community 62|Community 62]]
+- [[_COMMUNITY_Community 63|Community 63]]
+- [[_COMMUNITY_Community 64|Community 64]]
+- [[_COMMUNITY_Community 65|Community 65]]
+- [[_COMMUNITY_Community 66|Community 66]]
+- [[_COMMUNITY_Community 67|Community 67]]
+- [[_COMMUNITY_Community 68|Community 68]]
+- [[_COMMUNITY_Community 69|Community 69]]
+- [[_COMMUNITY_Community 70|Community 70]]
+- [[_COMMUNITY_Community 71|Community 71]]
+- [[_COMMUNITY_Community 72|Community 72]]
+- [[_COMMUNITY_Community 73|Community 73]]
+- [[_COMMUNITY_Community 74|Community 74]]
+- [[_COMMUNITY_Community 75|Community 75]]
+- [[_COMMUNITY_Community 76|Community 76]]
+- [[_COMMUNITY_Community 77|Community 77]]
+- [[_COMMUNITY_Community 78|Community 78]]
+- [[_COMMUNITY_Community 79|Community 79]]
+- [[_COMMUNITY_Community 80|Community 80]]
+- [[_COMMUNITY_Community 81|Community 81]]
+- [[_COMMUNITY_Community 82|Community 82]]
+- [[_COMMUNITY_Community 83|Community 83]]
+- [[_COMMUNITY_Community 84|Community 84]]
+- [[_COMMUNITY_Community 85|Community 85]]
+- [[_COMMUNITY_Community 86|Community 86]]
+- [[_COMMUNITY_Community 87|Community 87]]
+
+## God Nodes (most connected - your core abstractions)
+1. `buildApp()` - 56 edges
+2. `PgPublicStatsReadModel` - 41 edges
+3. `FakePublicStatsReadModel` - 41 edges
+4. `PgIngestRepository` - 30 edges
+5. `InMemoryPlayerRequestRepository` - 29 edges
+6. `PgStatisticsRepository` - 29 edges
+7. `PgPlayerRequestRepository` - 24 edges
+8. `ScriptedClient` - 24 edges
+9. `InMemoryAuthUserRepository` - 23 edges
+10. `IngestStagingRecord` - 23 edges
+
+## Surprising Connections (you probably didn't know these)
+- `buildActionsApp()` --calls--> `buildApp()` [EXTRACTED]
+ src/modules/ingest/routes/tests/actions.test.ts → src/app.ts
+- `buildRequestsApp()` --calls--> `buildApp()` [INFERRED]
+ src/modules/requests/routes/tests/fixtures.ts → src/app.ts
+- `buildAdminApp()` --calls--> `buildApp()` [INFERRED]
+ src/modules/admin/routes/tests/utilities.ts → src/app.ts
+- `buildAuditPatchApp()` --calls--> `buildApp()` [INFERRED]
+ src/modules/requests/routes/audit-patches/tests/utilities.ts → src/app.ts
+- `buildModerationApp()` --calls--> `buildApp()` [INFERRED]
+ src/modules/requests/routes/moderation/tests/utilities.ts → src/app.ts
+
+## Import Cycles
+- 1-file cycle: `src/modules/admin/routes/models.ts -> src/modules/admin/routes/models.ts`
+- 1-file cycle: `src/modules/requests/routes/models.ts -> src/modules/requests/routes/models.ts`
+
+## Communities (88 total, 6 thin omitted)
+
+### Community 0 - "TEST_ZERO_NAME"
+Cohesion: 0.03
+Nodes (84): PublicStatsRouteOptions, BountyListQuery, BountyListQueryType, BountyListResponse, BountySummaryResponse, CommanderSideQuery, CommanderSideResponse, LeaderboardQuery (+76 more)
+
+### Community 1 - "Community 1"
+Cohesion: 0.07
+Nodes (37): InMemoryPlayerRequestRepository, isAttachmentInput(), AuditPatch, AuditPatchRepository, CreatePlayerRequestInput, CreateRequestAttachmentInput, CreateRequestWorkflowActionInput, DecideRequestInput (+29 more)
+
+### Community 2 - "Community 2"
+Cohesion: 0.06
+Nodes (30): classifyNoSteamPlayer(), classifyNoSteamPlayers(), identityItem(), IdentityReference, IdentityResolutionStatus, matchingIdentityReferences(), NicknameConflictItem, nicknameConflictItems() (+22 more)
+
+### Community 3 - "Community 3"
+Cohesion: 0.07
+Nodes (30): InMemoryAdminRotationRepository, invalidRange(), slugBase(), AdminRotationRepository, AdminRotationRow, CreateRotationInput, CreateRotationResult, DeleteRotationResult (+22 more)
+
+### Community 4 - "Community 4"
+Cohesion: 0.05
+Nodes (47): BountyPointEventEvidence, addToRelationshipMap(), aggregateRelationshipEntries(), aggregateWeaponEntries(), aggregateWeekEntries(), BountyInputsRow, buildReplayWhere(), CommanderSideRow (+39 more)
+
+### Community 5 - "Community 5"
+Cohesion: 0.12
+Nodes (28): composeBountyWhere(), keysetResult(), KeysetSeek, emptyLeaderboards(), emptySurface(), BountySummary, LeaderboardFilters, PageQuery (+20 more)
+
+### Community 6 - "Community 6"
+Cohesion: 0.08
+Nodes (28): createMetricsRegistry(), OperationalMetrics, registerOperationalMetrics(), registerRequestModerationRoutes(), registerOpenApi(), registerOperationsRoutes(), createEmptyIngestCommandModel(), createEmptyPublicStatsReadModel() (+20 more)
+
+### Community 7 - "Community 7"
+Cohesion: 0.10
+Nodes (18): InMemoryAuthUserRepository, InMemorySessionStore, AuthSession, AuthUser, AuthUserRepository, SessionStore, AuthSessionRow, AuthUserRow (+10 more)
+
+### Community 8 - "Community 8"
+Cohesion: 0.07
+Nodes (30): config, env, pool, repository, aggregateScopePredicate(), aggregateSnapshot(), ClassifiableReplaySeed, CorpusReplayPlayer (+22 more)
+
+### Community 9 - "Community 9"
+Cohesion: 0.05
+Nodes (26): BountyBreakdown, NameHistoryEntry, NameHistoryPayload, PlayerMembershipHistoryEntry, PlayerMembershipHistoryPayload, PlayerReferenceSlug, PlayerRelationshipEntry, PlayerRelationshipsPayload (+18 more)
+
+### Community 10 - "Community 10"
+Cohesion: 0.08
+Nodes (27): ALL_TIME_GAME_TYPES, classifyTarget(), countReason(), failedItem(), FullRunAggregateRows, FullRunAllTimeAggregateRows, FullRunCoverageItem, FullRunCoverageReport (+19 more)
+
+### Community 11 - "Community 11"
+Cohesion: 0.11
+Nodes (13): commanders(), CommanderScenario, eventRow(), parserArtifact(), parserResultRows(), player(), sideFacts(), bountyInsertRows() (+5 more)
+
+### Community 12 - "Community 12"
+Cohesion: 0.14
+Nodes (9): sortRelationships(), sortWeapons(), sortWeeks(), PgPublicStatsReadModel, mapRelationships(), mapWeapons(), mapWeeks(), maxTimestamp() (+1 more)
+
+### Community 13 - "Community 13"
+Cohesion: 0.08
+Nodes (33): aggregateInputsFromRows(), AggregateRecalculationResult, AggregateScope, AssignRotationResult, BountyRecalculationResult, buildPlayerIdentityIndex(), CommanderIdentity, commanderInputsFromRows() (+25 more)
+
+### Community 14 - "Community 14"
+Cohesion: 0.10
+Nodes (24): IngestStatus, PageQuery, PageResult, ParseJobFilters, ParseJobHistoryAction, ParseJobHistoryEntry, ParseJobStatus, PromotionStatus (+16 more)
+
+### Community 15 - "Community 15"
+Cohesion: 0.10
+Nodes (23): CursorPayload, decodeCursor(), encodeCursor(), isPrimitiveSortValue(), parseCursorJson(), ALLOWED_SORTS, BadCursorError, BountySortField (+15 more)
+
+### Community 16 - "Community 16"
+Cohesion: 0.12
+Nodes (27): AggregatePlayerEvidence, AggregateReplayInput, applyAttackerEvent(), applyCounterEvent(), applySquadCounterEvent(), applySquadEvent(), applyVictimDeath(), artifactCounterDeaths() (+19 more)
+
+### Community 17 - "Community 17"
+Cohesion: 0.13
+Nodes (14): assignReplayRotation(), auditScopes(), bountyKillInputs(), loadPreviousBountyEffectiveness(), loadScopedAggregateReplayInputs(), loadScopedCommanderReplayInputs(), PgStatisticsRepository, replaceBountyRows() (+6 more)
+
+### Community 18 - "Community 18"
+Cohesion: 0.10
+Nodes (22): deaths(), LEGACY_PUBLIC_EXPORT_CONTRACT_VERSION, LegacyOtherPlayersExport, LegacyPlayerStatsExport, LegacyPublicStatsExport, LegacyPublicStatsExportOptions, LegacyPublicStatsExportService, LegacyRelationshipInput (+14 more)
+
+### Community 19 - "Community 19"
+Cohesion: 0.13
+Nodes (24): maskSteamId(), buildParticipants(), buildSides(), extractMapName(), extractPlayers(), extractSideFacts(), MAP_CANDIDATE_KEYS, mapReplayDetail() (+16 more)
+
+### Community 20 - "Community 20"
+Cohesion: 0.18
+Nodes (12): ReferenceValidator, SteamIdentity, SteamLoginUrlInput, SteamOpenIdAdapter, createRequest(), buildRequestsApp(), FakeSteamOpenIdAdapter, loginCookie() (+4 more)
+
+### Community 21 - "Community 21"
+Cohesion: 0.11
+Nodes (25): SortDescriptor, assertCursorValueType(), commanderSideFilters(), decodeAfter(), DecodeAfterOptions, decodeFixedCursor(), emptyPage(), leaderboardFilters() (+17 more)
+
+### Community 22 - "Community 22"
+Cohesion: 0.11
+Nodes (24): LegacyOtherPlayersInput, LegacyPlayerReference, LegacyPlayerStatsInput, LegacyRotationStatsInput, LegacySquadStatsInput, LegacyWeaponsInput, LegacyWeekInput, LegacyWeeksInput (+16 more)
+
+### Community 23 - "Community 23"
+Cohesion: 0.12
+Nodes (7): GameType, FullRunLifecycleCounts, ParserResultRecalculationTarget, ScopedRecalculationResult, FakeFullRunRepository, generatedAt, lifecycle
+
+### Community 24 - "Community 24"
+Cohesion: 0.13
+Nodes (18): createIngestRuntime(), IngestRuntime, IngestRuntimeOptions, ParserArtifactLoader, ParserResultRecalculator, completedMessage, failedMessage, parserArtifact (+10 more)
+
+### Community 25 - "Community 25"
+Cohesion: 0.10
+Nodes (15): PageCursorState, CYRILLIC_TRANSLITERATION, shortSuffix(), slugify(), config, env, pool, ALL_SORTS (+7 more)
+
+### Community 26 - "Community 26"
+Cohesion: 0.11
+Nodes (7): ParseJobRepository, FakeParseJobRepository, FakePublisherLogger, FakePublisherObserver, parseJob, ParseJobRecord, FakeReadModel
+
+### Community 27 - "Community 27"
+Cohesion: 0.13
+Nodes (8): FakePromotionRepository, IngestStagingRecord, ReplayRecord, firstParserResultId(), mapReplayRow(), recordEvidence(), requiredRow(), StagingRow
+
+### Community 28 - "Community 28"
+Cohesion: 0.13
+Nodes (9): FullRunRecalculationRepository, ParserResultRecalculationService, ParserResultRecalculationSummary, StatisticsRecalculationRepository, ParserArtifactPersistenceService, StatisticsRepository, NormalizedParserEvent, FakeStatisticsRepository (+1 more)
+
+### Community 29 - "Community 29"
+Cohesion: 0.10
+Nodes (19): assignDefined(), JsonObject, MessageResponse, page(), PaginationQuery, parseJobFilters(), ParseJobHistoryListResponse, ParseJobHistoryResponse (+11 more)
+
+### Community 30 - "Community 30"
+Cohesion: 0.12
+Nodes (20): requireActorUserId(), currentUser(), PlayerRequestType, ReferencedEntityType, AttachmentResponse, AttachmentUploadResponse, CreateAttachmentBody, CreateAttachmentBodyType (+12 more)
+
+### Community 31 - "Community 31"
+Cohesion: 0.27
+Nodes (5): NoopAuditPatchRecalculator, PgAuditPatchRecalculator, AuditPatchRecalculator, CreateAuditPatchInput, FakeAuditPatchRecalculator
+
+### Community 32 - "Community 32"
+Cohesion: 0.13
+Nodes (18): ArtifactStatus, CommanderSideFact, destroyedVehicleEvents(), DestroyedVehicleRow, diagnosticEvents(), DiagnosticRow, EventActorReference, killEvents() (+10 more)
+
+### Community 33 - "Community 33"
+Cohesion: 0.19
+Nodes (10): deriveReplayTimestampFromSourceId(), resolveReplayTimestamp(), conflictDetails(), IngestPromotionService, PromotionRepository, replayRecord, stagingRecord, withResolvedReplayTimestamp() (+2 more)
+
+### Community 34 - "Community 34"
+Cohesion: 0.15
+Nodes (5): mapParseJobRow(), mapStagingRow(), PgIngestRepository, recordParseJobHistory(), updateStagingStatus()
+
+### Community 35 - "Community 35"
+Cohesion: 0.43
+Nodes (4): LoginInput, buildAdminApp(), createRotationId(), validBody()
+
+### Community 36 - "Community 36"
+Cohesion: 0.16
+Nodes (16): createDiffReport(), defaultKnownDifferencePolicy(), DIFF_CONTRACT_VERSION, DiffCorpusScope, DiffInputMetadata, DiffSnapshotMetadata, DiffSummaryCounts, isDefaultKnownDifferenceCode() (+8 more)
+
+### Community 37 - "Community 37"
+Cohesion: 0.20
+Nodes (18): applyLegacyWinnerFix(), applyPlayerMerge(), applyPlayerSplit(), applySteamLink(), assertPlayerExists(), firstId(), IdRow, LEGACY_WINNER_SIDES (+10 more)
+
+### Community 38 - "Community 38"
+Cohesion: 0.14
+Nodes (13): createDatabaseHealthCheck(), createDatabasePool(), createDbClient(), auth, checks, config, databasePool, ingestRepository (+5 more)
+
+### Community 39 - "Community 39"
+Cohesion: 0.13
+Nodes (14): MigrationRecord, migrationsDir, runMigrations(), aggregateTables, ColumnInfo, config, env, pool (+6 more)
+
+### Community 40 - "Community 40"
+Cohesion: 0.20
+Nodes (13): applyIncludeOverride(), classifyGameType(), ClassifyGameTypeInput, extractMissionName(), isSmDateEligible(), MISSION_CANDIDATE_KEYS, unwrapMissionField(), assertExcludeListInvariant() (+5 more)
+
+### Community 41 - "Community 41"
+Cohesion: 0.16
+Nodes (13): noopLogger, noopObserver, parseJobLogBindings(), ParseJobPublisher, ParseJobPublisherLogger, ParseJobPublisherObserver, ParseJobPublisherOptions, ParseJobPublisherRuntimeOptions (+5 more)
+
+### Community 42 - "Community 42"
+Cohesion: 0.25
+Nodes (16): bucketPlaceholder(), bucketValues(), isShowSelect(), ParitySqlBucket, ParitySqlQuery, ParitySqlScope, playerStatsSql(), predicate() (+8 more)
+
+### Community 43 - "Community 43"
+Cohesion: 0.15
+Nodes (14): RequiredRole, expiredSessionCookie(), readCookie(), sessionCookie(), SessionCookieOptions, authCallbackUrl(), CallbackQuery, CallbackQueryType (+6 more)
+
+### Community 44 - "Community 44"
+Cohesion: 0.12
+Nodes (5): PgRequestWorkflowApplier, queryResult(), ScriptedCall, ScriptedClient, ScriptedClientOptions
+
+### Community 45 - "Community 45"
+Cohesion: 0.21
+Nodes (10): AppEnvironment, loadConfig(), redactConfigForLogs(), redactUrl(), redactValue(), baseEnvironment, runStatisticsRecalculationOperation(), mocks (+2 more)
+
+### Community 46 - "Community 46"
+Cohesion: 0.16
+Nodes (14): AssignedRotationRow, ClassificationInputRow, classifyReplay(), CurrentParserResultRow, distinctPlayerCount(), isStale(), mapCurrentParserResultRow(), PARSE_JOB_STATUSES (+6 more)
+
+### Community 47 - "Community 47"
+Cohesion: 0.16
+Nodes (14): JsonObject, ManualReparseBody, ManualReparseBodyType, MessageResponse, ParseJobResponse, registerIngestActionRoutes(), registerManualReparseRoute(), registerRetryRoute() (+6 more)
+
+### Community 48 - "Community 48"
+Cohesion: 0.14
+Nodes (10): config, env, pool, repository, checksumA, checksumB, checksumC, insertStaging() (+2 more)
+
+### Community 49 - "Community 49"
+Cohesion: 0.22
+Nodes (4): LegacyPublicStatsExportData, LegacyPublicStatsExportRepository, PgLegacyPublicStatsExportRepository, FakeLegacyExportRepository
+
+### Community 50 - "Community 50"
+Cohesion: 0.17
+Nodes (9): noopLogger, noopObserver, parseJobLogBindings(), ParseJobReconciler, ParseJobReconcilerLogger, ParseJobReconcilerObserver, ParseJobReconcilerOptions, ParseJobReconcilerRepository (+1 more)
+
+### Community 51 - "Community 51"
+Cohesion: 0.21
+Nodes (12): BountyEffectivenessInput, BountyEventType, bountyEvidence(), BountyKillInput, BountyPointRow, bountyRow(), calculateBountyPoints(), effectiveness() (+4 more)
+
+### Community 52 - "Community 52"
+Cohesion: 0.19
+Nodes (10): checkAll(), HealthCheckable, HealthCheckResult, HealthStatus, HealthSummary, HealthCheckResultSchema, LiveResponse, OperationsRouteOptions (+2 more)
+
+### Community 53 - "Community 53"
+Cohesion: 0.22
+Nodes (10): checkAppWorkflowBoundary(), ForbiddenWorkflowRule, forbiddenWorkflowRules, isMissingDirectoryError(), isWorkflowFile(), readDirectoryEntries(), runAppWorkflowBoundaryGuardOperation(), temporaryDirectories (+2 more)
+
+### Community 54 - "Community 54"
+Cohesion: 0.15
+Nodes (6): countStatuses(), PgFullRunStatisticsRepository, FullRunTargetRow, ScriptedFullRunPool, StatusRow, statusTable()
+
+### Community 55 - "Community 55"
+Cohesion: 0.32
+Nodes (9): playerExport(), weekExport(), playerStats(), squadStats(), kdRatio(), killsFromVehicleCoef(), totalScore(), weeklyScore() (+1 more)
+
+### Community 56 - "Community 56"
+Cohesion: 0.23
+Nodes (10): ApplyRequestWorkflowInput, RequestWorkflowApplier, MoveSelectedIdentityRowsInput, login(), LoginInput, requireCookie(), approveRequest(), buildWorkflowApp() (+2 more)
+
+### Community 57 - "Community 57"
+Cohesion: 0.17
+Nodes (10): DecisionBody, DecisionBodyType, DecisionResponse, DetailResponse, ErrorResponse, ModerationActionResponse, RequestIdParameters, RequestIdParametersType (+2 more)
+
+### Community 58 - "Community 58"
+Cohesion: 0.23
+Nodes (9): buildKeysetPredicate(), KeysetCursorState, KeysetDescriptor, KeysetOptions, KeysetPredicate, orderBy(), KILLS, NAME (+1 more)
+
+### Community 59 - "Community 59"
+Cohesion: 0.27
+Nodes (6): AppConfig, env, createQueueClient(), createStorageClient(), awsMocks, config
+
+### Community 60 - "Community 60"
+Cohesion: 0.22
+Nodes (6): createStaticHealthCheck(), PUBLIC_DETAIL_ROUTES, PUBLIC_LIST_ROUTES, WriteSweepHarness, WriteSweepSession, createLoggerOptions()
+
+### Community 61 - "Community 61"
+Cohesion: 0.20
+Nodes (9): bestPlayerIdentityIndexed(), isNicknameActive(), playerIdentityMatchPriority(), PlayerIdentityRow, ArtifactPlayer, bestPlayerIdentityScan(), IDENTITIES, PLAYERS (+1 more)
+
+### Community 62 - "Community 62"
+Cohesion: 0.15
+Nodes (14): buildWriteSweepApp(), EmptyReferenceValidator, createNoopRequestWorkflowApplier(), createDefaultRequestOptions(), loginAs(), LoginAsInput, requireCookie(), loginAs() (+6 more)
+
+### Community 63 - "Community 63"
+Cohesion: 0.40
+Nodes (8): asJson(), collectListSchemas(), findPaginationOffenders(), FORBIDDEN_PAGINATION_KEYS, getJsonResponseSchema(), isListSchema(), Json, listOffenderKeys()
+
+### Community 64 - "Community 64"
+Cohesion: 0.22
+Nodes (8): RequestWorkflowActionType, ErrorResponse, RequestIdParameters, RequestIdParametersType, WorkflowActionSchema, WorkflowBody, WorkflowBodyType, WorkflowResponse
+
+### Community 65 - "Community 65"
+Cohesion: 0.20
+Nodes (6): PgReferenceValidator, config, env, pool, repository, references
+
+### Community 67 - "Community 67"
+Cohesion: 0.29
+Nodes (8): calculateCommanderSideAggregates(), commanderAggregate(), CommanderEvidence, CommanderOutcomeEvidence, CommanderReplayInput, CommanderSideAggregateRow, MutableCommanderAggregate, normalizedSide()
+
+### Community 68 - "Community 68"
+Cohesion: 0.25
+Nodes (8): AuditPatchBody, AuditPatchBodyType, AuditPatchResponse, ErrorResponse, registerAuditPatchRoutes(), RequestIdParameters, RequestIdParametersType, requireAnyRole()
+
+### Community 69 - "Community 69"
+Cohesion: 0.25
+Nodes (5): rotationWhere(), CommanderSideSummary, OverviewFilters, StatsOverview, commanderSideSummary()
+
+### Community 70 - "Community 70"
+Cohesion: 0.33
+Nodes (5): gapExists(), makeKnown(), TestWindow, UnknownGapEntry, withGaps()
+
+### Community 71 - "Community 71"
+Cohesion: 0.42
+Nodes (6): childSitemapEntry(), escapeXml(), replayUrlEntry(), ReplaySitemapRouteOptions, sitemapIndexXml(), urlsetXml()
+
+### Community 72 - "Community 72"
+Cohesion: 0.25
+Nodes (5): document, paginatedSchemas, REMOVED_OFFSET_FIELDS, SchemaObject, schemaObjects
+
+### Community 73 - "Community 73"
+Cohesion: 0.46
+Nodes (6): argumentValue(), generatedAt(), LegacyExportOperationOptions, parseOperationArguments(), runLegacyPublicStatsExportOperation(), mocks
+
+### Community 75 - "Community 75"
+Cohesion: 0.25
+Nodes (7): AuthErrorResponse, NotFoundResponse, RolesBody, RolesBodyType, UserIdParameters, UserIdParametersType, UserResponse
+
+### Community 77 - "Community 77"
+Cohesion: 0.38
+Nodes (6): BountyRow, bountyRowWithInputs(), bountyRowWithRawInputs(), captureCommanderSidesSql(), CapturedQuery, readModelWithCapture()
+
+### Community 78 - "Community 78"
+Cohesion: 0.47
+Nodes (3): outputPath, createOpenApiSchema(), schemaPath
+
+### Community 79 - "Community 79"
+Cohesion: 0.33
+Nodes (4): missing, requiredComposeTerms, requiredEnvironmentTerms, requiredRunbookTerms
+
+### Community 80 - "Community 80"
+Cohesion: 0.33
+Nodes (3): RotationDetail, RotationSummary, rotationSummary()
+
+### Community 81 - "Community 81"
+Cohesion: 0.53
+Nodes (6): IngestCommandModel, AdminRouteOptions, AuthRouteOptions, RequestRouteOptions, IngestRouteOptions, BuildAppOptions
+
+### Community 84 - "Community 84"
+Cohesion: 0.60
+Nodes (3): ManualReparseResult, RetryParseJobResult, FakeCommands
+
+### Community 85 - "Community 85"
+Cohesion: 0.50
+Nodes (4): buildActionsApp(), job, loginCookie(), requireCookie()
+
+### Community 87 - "Community 87"
+Cohesion: 0.38
+Nodes (6): InMemoryRequestAttachmentStorage, safeFileName(), CreateRequestAttachmentUploadInput, RequestAttachmentStorage, RequestAttachmentUpload, FakeRequestAttachmentStorage
+
+## Knowledge Gaps
+- **427 isolated node(s):** `DefaultAuthConfig`, `baseEnvironment`, `AppEnvironment`, `MigrationRecord`, `migrationsDir` (+422 more)
+ These have ≤1 connection - possible missing edges or undocumented components.
+- **6 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
+
+## Suggested Questions
+_Questions this graph is uniquely positioned to answer:_
+
+- **Why does `PgStatisticsRepository` connect `Community 17` to `Community 37`, `Community 38`, `Community 8`, `Community 11`, `Community 44`, `Community 13`, `Community 46`, `Community 54`, `Community 31`?**
+ _High betweenness centrality (0.139) - this node is a cross-community bridge._
+- **Why does `buildApp()` connect `Community 6` to `Community 35`, `Community 68`, `Community 38`, `Community 39`, `Community 78`, `Community 15`, `Community 20`, `Community 85`, `Community 30`, `Community 56`, `Community 60`, `Community 62`?**
+ _High betweenness centrality (0.057) - this node is a cross-community bridge._
+- **Why does `PgIngestRepository` connect `Community 34` to `Community 38`, `Community 14`, `Community 48`, `Community 24`, `Community 26`, `Community 27`?**
+ _High betweenness centrality (0.044) - this node is a cross-community bridge._
+- **Are the 5 inferred relationships involving `buildApp()` (e.g. with `buildRequestsApp()` and `buildAdminApp()`) actually correct?**
+ _`buildApp()` has 5 INFERRED edges - model-reasoned connections that need verification._
+- **What connects `DefaultAuthConfig`, `baseEnvironment`, `AppEnvironment` to the rest of the system?**
+ _427 weakly-connected nodes found - possible documentation gaps or missing edges._
+- **Should `TEST_ZERO_NAME` be split into smaller, more focused modules?**
+ _Cohesion score 0.033957553058676655 - nodes in this community are weakly interconnected._
+- **Should `Community 1` be split into smaller, more focused modules?**
+ _Cohesion score 0.06553128470936691 - nodes in this community are weakly interconnected._
\ No newline at end of file