# Graph Report - /Users/etlab/projects/maxtest  (2026-08-24)

## Corpus Check
- 347 files · ~805,999 words
- Verdict: corpus is large enough that graph structure adds value.

## Summary
- 2121 nodes · 7547 edges · 135 communities detected
- Extraction: 32% EXTRACTED · 68% INFERRED · 0% AMBIGUOUS · INFERRED: 5148 edges (avg confidence: 0.64)
- Token cost: 0 input · 0 output

## Community Hubs (Navigation)
- [[_COMMUNITY_Community 0|Community 0]]
- [[_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]]
- [[_COMMUNITY_Community 88|Community 88]]
- [[_COMMUNITY_Community 89|Community 89]]
- [[_COMMUNITY_Community 90|Community 90]]
- [[_COMMUNITY_Community 91|Community 91]]
- [[_COMMUNITY_Community 92|Community 92]]
- [[_COMMUNITY_Community 93|Community 93]]
- [[_COMMUNITY_Community 94|Community 94]]
- [[_COMMUNITY_Community 95|Community 95]]
- [[_COMMUNITY_Community 96|Community 96]]
- [[_COMMUNITY_Community 97|Community 97]]
- [[_COMMUNITY_Community 98|Community 98]]
- [[_COMMUNITY_Community 99|Community 99]]
- [[_COMMUNITY_Community 100|Community 100]]
- [[_COMMUNITY_Community 101|Community 101]]
- [[_COMMUNITY_Community 102|Community 102]]
- [[_COMMUNITY_Community 103|Community 103]]
- [[_COMMUNITY_Community 104|Community 104]]
- [[_COMMUNITY_Community 105|Community 105]]
- [[_COMMUNITY_Community 106|Community 106]]
- [[_COMMUNITY_Community 107|Community 107]]
- [[_COMMUNITY_Community 108|Community 108]]
- [[_COMMUNITY_Community 109|Community 109]]
- [[_COMMUNITY_Community 110|Community 110]]
- [[_COMMUNITY_Community 111|Community 111]]
- [[_COMMUNITY_Community 112|Community 112]]
- [[_COMMUNITY_Community 113|Community 113]]
- [[_COMMUNITY_Community 114|Community 114]]
- [[_COMMUNITY_Community 115|Community 115]]
- [[_COMMUNITY_Community 116|Community 116]]
- [[_COMMUNITY_Community 117|Community 117]]
- [[_COMMUNITY_Community 118|Community 118]]
- [[_COMMUNITY_Community 119|Community 119]]
- [[_COMMUNITY_Community 120|Community 120]]
- [[_COMMUNITY_Community 121|Community 121]]
- [[_COMMUNITY_Community 122|Community 122]]
- [[_COMMUNITY_Community 123|Community 123]]
- [[_COMMUNITY_Community 124|Community 124]]
- [[_COMMUNITY_Community 125|Community 125]]
- [[_COMMUNITY_Community 126|Community 126]]
- [[_COMMUNITY_Community 127|Community 127]]
- [[_COMMUNITY_Community 128|Community 128]]
- [[_COMMUNITY_Community 129|Community 129]]
- [[_COMMUNITY_Community 130|Community 130]]
- [[_COMMUNITY_Community 131|Community 131]]
- [[_COMMUNITY_Community 132|Community 132]]
- [[_COMMUNITY_Community 133|Community 133]]
- [[_COMMUNITY_Community 134|Community 134]]

## God Nodes (most connected - your core abstractions)
1. `AppException` - 182 edges
2. `TestGroup` - 181 edges
3. `Student` - 176 edges
4. `TestGroupStudent` - 172 edges
5. `Test` - 164 edges
6. `Attendance` - 153 edges
7. `GroupPosition` - 149 edges
8. `Record` - 141 edges
9. `ApiResponse` - 131 edges
10. `NotFoundException` - 118 edges

## Surprising Connections (you probably didn't know these)
- `isTenColumnRoster()` --calls--> `Test`  [INFERRED]
  /Users/etlab/projects/maxtest/frontend/src/features/students/student-roster-import.ts → /Users/etlab/projects/maxtest/backend/app/models/test.py
- `AppException` --uses--> `Validation rules for scoring preset mutations.`  [INFERRED]
  /Users/etlab/projects/maxtest/backend/app/core/exceptions.py → /Users/etlab/projects/maxtest/backend/app/services/scoring_preset_validation.py
- `AppException` --uses--> `Every saved event must include at least one M and one F bracket.`  [INFERRED]
  /Users/etlab/projects/maxtest/backend/app/core/exceptions.py → /Users/etlab/projects/maxtest/backend/app/services/scoring_preset_validation.py
- `Decide whether an anonymous live-results surface may expose data.` --uses--> `Test`  [INFERRED]
  /Users/etlab/projects/maxtest/backend/app/services/public_live_access.py → /Users/etlab/projects/maxtest/backend/app/models/test.py
- `Return only non-sensitive metadata after the anonymous window closes.` --uses--> `Test`  [INFERRED]
  /Users/etlab/projects/maxtest/backend/app/services/public_live_access.py → /Users/etlab/projects/maxtest/backend/app/models/test.py

## Communities

### Community 0 - "Community 0"
Cohesion: 0.02
Nodes (147): sum(), announcement_ws(), get_dashboard_academies(), RateLimitMiddleware, Pure ASGI middleware — no BaseHTTPMiddleware overhead.  SecurityMiddleware: bloc, Periodically remove expired entries to prevent memory leak., Pure ASGI — zero thread-per-request overhead., Simple sliding-window rate limiter for public API endpoints.      Limits per cli (+139 more)

### Community 1 - "Community 1"
Cohesion: 0.05
Nodes (205): Attendance, Bulk upsert attendance statuses; duplicate students use the last value., Assign a substitute for an absent student.          The substitute inherits the, Assign a substitute for an absent student.          The substitute inherits the, Assign a substitute for an absent student.          The substitute inherits the, Get attendance list for a test (includes bib_number from group assignment)., Get attendance list for a test (includes bib_number from group assignment)., Bulk upsert attendance statuses; duplicate students use the last value. (+197 more)

### Community 2 - "Community 2"
Cohesion: 0.03
Nodes (139): create_academy(), delete_academy(), get_academy(), list_academies(), 학원 완전 삭제. 소속 학생·출결·기록·조배정·기록원 데이터까지 cascade 삭제., update_academy(), Academy, AcademyCreate (+131 more)

### Community 3 - "Community 3"
Cohesion: 0.02
Nodes (124): _broadcast_pending(), process_attendance_change(), Post-commit recorder notification for attendance and roster changes., reset_attendance_fanout_state(), Exception, _build_event_rows(), _build_ranking_rows(), _event_mapping() (+116 more)

### Community 4 - "Community 4"
Cohesion: 0.03
Nodes (77): hash_password(), generate_bib(), next_bib_sequence(), 조 세션과 라벨 유형에 따른 수험번호 생성 규칙., get_dashboard(), acquire_postgres_init_lock(), database_init_lock(), initialize_database() (+69 more)

### Community 5 - "Community 5"
Cohesion: 0.05
Nodes (70): AttendanceBulkUpdate, AttendanceService, AttendanceUpdateItem, AttendanceAudit, AttendanceAuditService, Bulk upsert attendance statuses; duplicate students use the last value., Get attendance list for a test (includes bib_number from group assignment)., SubstituteRequest (+62 more)

### Community 6 - "Community 6"
Cohesion: 0.05
Nodes (62): Publish to Redis so ALL workers broadcast to their local clients., day_add_student(), arrive_group(), auto_arrive(), complete_and_rotate(), dispatch_group(), _enforce_recorder_station(), RotationFlowSupport (+54 more)

### Community 7 - "Community 7"
Cohesion: 0.03
Nodes (50): ApiError, clearCachedToken(), getActiveApiBase(), getActiveWsHost(), getActiveWsUrl(), getToken(), getTokenApiBase(), request() (+42 more)

### Community 8 - "Community 8"
Cohesion: 0.05
Nodes (61): register_attendance_change(), validate_shirt_size(), get_session(), Register RecordService fanout that runs only through a successful get_session co, HTTP request scoped session with automatic commit/rollback.     - Success → comm, register_post_commit_callback(), _run_post_commit_callback(), _number() (+53 more)

### Community 9 - "Community 9"
Cohesion: 0.04
Nodes (58): cancel_substitute_student(), get_attendance(), get_attendance_audit(), substitute_student(), update_attendance(), _LocalFallback, Redis-backed TTL cache for hot read endpoints (multi-worker safe).  Falls back t, In-memory fallback when Redis is down. (+50 more)

### Community 10 - "Community 10"
Cohesion: 0.04
Nodes (34): getAttendanceSaveErrorMessage(), getScoringPresetSaveErrorMessage(), getSubstitutionCancelErrorMessage(), cancelSubstitution(), checkAuth(), closeModals(), fetchAttendance(), fetchData() (+26 more)

### Community 11 - "Community 11"
Cohesion: 0.06
Nodes (42): AnnouncementConnectionManager, AnnouncementCreate, AnnouncementRead, AnnouncementService, ClientInfo, Local WebSocket connections + Redis Pub/Sub for cross-worker broadcast., create_announcement(), get_unread_announcements() (+34 more)

### Community 12 - "Community 12"
Cohesion: 0.1
Nodes (21): _actual_run(), _client_ip(), main(), _measured_request(), MetricBucket, _paced(), percentile(), Run repeatable Smoke, Mid, and Peak-lite rehearsal load scenarios. (+13 more)

### Community 13 - "Community 13"
Cohesion: 0.08
Nodes (28): addBracket(), deleteStudent(), focusCell(), handleBulkSave(), handleCellKeyDown(), handleCellPaste(), handleNewRowKeyDown(), handlePaste() (+20 more)

### Community 14 - "Community 14"
Cohesion: 0.12
Nodes (29): award_category(), _award_events(), AwardEventResult, AwardGroup, AwardService, AwardsResponse, AwardWinner, build_award_groups() (+21 more)

### Community 15 - "Community 15"
Cohesion: 0.13
Nodes (22): admin_login(), AdminLoginRequest, AuthService, get_me(), LoginResponse, pin_login(), PinLoginRequest, UserMe (+14 more)

### Community 16 - "Community 16"
Cohesion: 0.12
Nodes (21): ScoringService, Tests for ScoringService., Non-existent event_id should raise NotFoundException., FOUL should return preset min_score (1)., No raw_value and no foul should return 0., Male, 250cm jump should score 18 (240-260 bracket)., Male, 270cm jump should score 20 (260+ bracket)., Female, 200cm jump should score 15 (180-220 bracket). (+13 more)

### Community 17 - "Community 17"
Cohesion: 0.16
Nodes (16): mergeRankingEntries(), collect_am_close_blockers(), _group_label(), Public endpoints must not leak result data after the scheduled cutoff., test_public_result_endpoints_return_only_safe_metadata_after_cutoff(), _add_stations(), _assignments(), _student() (+8 more)

### Community 18 - "Community 18"
Cohesion: 0.15
Nodes (0): 

### Community 19 - "Community 19"
Cohesion: 0.21
Nodes (10): build_closed_public_live_payload(), get_public_live_access(), PublicLiveAccess, Decide whether an anonymous live-results surface may expose data., Return only non-sensitive metadata after the anonymous window closes., _to_naive_kst(), Scheduled access rules for the public live result surface., test_supermax13_live_access_is_closed_at_cutoff() (+2 more)

### Community 20 - "Community 20"
Cohesion: 0.22
Nodes (4): attendanceAuditChangeLabel(), attendanceStatusLabel(), recordAuditValue(), recordAuditValueChange()

### Community 21 - "Community 21"
Cohesion: 0.18
Nodes (2): handleSaveRotation(), getRotationSetupSession()

### Community 22 - "Community 22"
Cohesion: 0.31
Nodes (4): assert_production_health_url(), HealthDecision, Read-only production health guard for shared-host isolated rehearsals., HealthDecisionTest

### Community 23 - "Community 23"
Cohesion: 0.29
Nodes (2): assignSession(), buildSessionAssignmentConfirmation()

### Community 24 - "Community 24"
Cohesion: 0.33
Nodes (6): Protocol, BracketLike, PresetEventLike, Validation rules for scoring preset mutations., Every saved event must include at least one M and one F bracket., validate_gender_brackets()

### Community 25 - "Community 25"
Cohesion: 0.33
Nodes (1): MockSocket

### Community 26 - "Community 26"
Cohesion: 0.33
Nodes (2): toggle(), recordingGroupPolicyErrorMessage()

### Community 27 - "Community 27"
Cohesion: 0.4
Nodes (0): 

### Community 28 - "Community 28"
Cohesion: 0.6
Nodes (3): getStationSubtitle(), getStationTitle(), isStandbyStation()

### Community 29 - "Community 29"
Cohesion: 0.4
Nodes (0): 

### Community 30 - "Community 30"
Cohesion: 0.4
Nodes (0): 

### Community 31 - "Community 31"
Cohesion: 0.4
Nodes (1): Student roster API contract tests.

### Community 32 - "Community 32"
Cohesion: 0.5
Nodes (0): 

### Community 33 - "Community 33"
Cohesion: 0.5
Nodes (2): BaseSettings, Settings

### Community 34 - "Community 34"
Cohesion: 0.67
Nodes (0): 

### Community 35 - "Community 35"
Cohesion: 0.67
Nodes (0): 

### Community 36 - "Community 36"
Cohesion: 0.67
Nodes (0): 

### Community 37 - "Community 37"
Cohesion: 0.67
Nodes (0): 

### Community 38 - "Community 38"
Cohesion: 0.67
Nodes (0): 

### Community 39 - "Community 39"
Cohesion: 0.67
Nodes (0): 

### Community 40 - "Community 40"
Cohesion: 0.67
Nodes (0): 

### Community 41 - "Community 41"
Cohesion: 0.67
Nodes (1): Database access for feature services.

### Community 42 - "Community 42"
Cohesion: 1.0
Nodes (1): Insert 메디신볼 records via API - correct range (meters, not cm).

### Community 43 - "Community 43"
Cohesion: 1.0
Nodes (1): Insert 500 records via API so scoring system calculates scores properly.

### Community 44 - "Community 44"
Cohesion: 1.0
Nodes (1): Fill ALL remaining records via API. Every student gets all 5 events.

### Community 45 - "Community 45"
Cohesion: 1.0
Nodes (1): Fill all records for TEST (test_id=11) via API.

### Community 46 - "Community 46"
Cohesion: 1.0
Nodes (0): 

### Community 47 - "Community 47"
Cohesion: 1.0
Nodes (0): 

### Community 48 - "Community 48"
Cohesion: 1.0
Nodes (0): 

### Community 49 - "Community 49"
Cohesion: 1.0
Nodes (0): 

### Community 50 - "Community 50"
Cohesion: 1.0
Nodes (0): 

### Community 51 - "Community 51"
Cohesion: 1.0
Nodes (0): 

### Community 52 - "Community 52"
Cohesion: 1.0
Nodes (0): 

### Community 53 - "Community 53"
Cohesion: 1.0
Nodes (0): 

### Community 54 - "Community 54"
Cohesion: 1.0
Nodes (0): 

### Community 55 - "Community 55"
Cohesion: 1.0
Nodes (0): 

### Community 56 - "Community 56"
Cohesion: 1.0
Nodes (0): 

### Community 57 - "Community 57"
Cohesion: 1.0
Nodes (0): 

### Community 58 - "Community 58"
Cohesion: 1.0
Nodes (0): 

### Community 59 - "Community 59"
Cohesion: 1.0
Nodes (0): 

### Community 60 - "Community 60"
Cohesion: 1.0
Nodes (0): 

### Community 61 - "Community 61"
Cohesion: 1.0
Nodes (0): 

### Community 62 - "Community 62"
Cohesion: 1.0
Nodes (0): 

### Community 63 - "Community 63"
Cohesion: 1.0
Nodes (0): 

### Community 64 - "Community 64"
Cohesion: 1.0
Nodes (0): 

### Community 65 - "Community 65"
Cohesion: 1.0
Nodes (0): 

### Community 66 - "Community 66"
Cohesion: 1.0
Nodes (0): 

### Community 67 - "Community 67"
Cohesion: 1.0
Nodes (0): 

### Community 68 - "Community 68"
Cohesion: 1.0
Nodes (0): 

### Community 69 - "Community 69"
Cohesion: 1.0
Nodes (0): 

### Community 70 - "Community 70"
Cohesion: 1.0
Nodes (0): 

### Community 71 - "Community 71"
Cohesion: 1.0
Nodes (0): 

### Community 72 - "Community 72"
Cohesion: 1.0
Nodes (0): 

### Community 73 - "Community 73"
Cohesion: 1.0
Nodes (0): 

### Community 74 - "Community 74"
Cohesion: 1.0
Nodes (0): 

### Community 75 - "Community 75"
Cohesion: 1.0
Nodes (0): 

### Community 76 - "Community 76"
Cohesion: 1.0
Nodes (0): 

### Community 77 - "Community 77"
Cohesion: 1.0
Nodes (0): 

### Community 78 - "Community 78"
Cohesion: 1.0
Nodes (1): Configured public live-result windows.

### Community 79 - "Community 79"
Cohesion: 1.0
Nodes (1): Fixed local rehearsal timing and score distributions.

### Community 80 - "Community 80"
Cohesion: 1.0
Nodes (0): 

### Community 81 - "Community 81"
Cohesion: 1.0
Nodes (0): 

### Community 82 - "Community 82"
Cohesion: 1.0
Nodes (0): 

### Community 83 - "Community 83"
Cohesion: 1.0
Nodes (0): 

### Community 84 - "Community 84"
Cohesion: 1.0
Nodes (0): 

### Community 85 - "Community 85"
Cohesion: 1.0
Nodes (0): 

### Community 86 - "Community 86"
Cohesion: 1.0
Nodes (0): 

### Community 87 - "Community 87"
Cohesion: 1.0
Nodes (0): 

### Community 88 - "Community 88"
Cohesion: 1.0
Nodes (0): 

### Community 89 - "Community 89"
Cohesion: 1.0
Nodes (0): 

### Community 90 - "Community 90"
Cohesion: 1.0
Nodes (0): 

### Community 91 - "Community 91"
Cohesion: 1.0
Nodes (0): 

### Community 92 - "Community 92"
Cohesion: 1.0
Nodes (0): 

### Community 93 - "Community 93"
Cohesion: 1.0
Nodes (0): 

### Community 94 - "Community 94"
Cohesion: 1.0
Nodes (0): 

### Community 95 - "Community 95"
Cohesion: 1.0
Nodes (0): 

### Community 96 - "Community 96"
Cohesion: 1.0
Nodes (0): 

### Community 97 - "Community 97"
Cohesion: 1.0
Nodes (0): 

### Community 98 - "Community 98"
Cohesion: 1.0
Nodes (0): 

### Community 99 - "Community 99"
Cohesion: 1.0
Nodes (0): 

### Community 100 - "Community 100"
Cohesion: 1.0
Nodes (0): 

### Community 101 - "Community 101"
Cohesion: 1.0
Nodes (0): 

### Community 102 - "Community 102"
Cohesion: 1.0
Nodes (0): 

### Community 103 - "Community 103"
Cohesion: 1.0
Nodes (0): 

### Community 104 - "Community 104"
Cohesion: 1.0
Nodes (0): 

### Community 105 - "Community 105"
Cohesion: 1.0
Nodes (0): 

### Community 106 - "Community 106"
Cohesion: 1.0
Nodes (0): 

### Community 107 - "Community 107"
Cohesion: 1.0
Nodes (0): 

### Community 108 - "Community 108"
Cohesion: 1.0
Nodes (0): 

### Community 109 - "Community 109"
Cohesion: 1.0
Nodes (0): 

### Community 110 - "Community 110"
Cohesion: 1.0
Nodes (0): 

### Community 111 - "Community 111"
Cohesion: 1.0
Nodes (0): 

### Community 112 - "Community 112"
Cohesion: 1.0
Nodes (0): 

### Community 113 - "Community 113"
Cohesion: 1.0
Nodes (0): 

### Community 114 - "Community 114"
Cohesion: 1.0
Nodes (0): 

### Community 115 - "Community 115"
Cohesion: 1.0
Nodes (0): 

### Community 116 - "Community 116"
Cohesion: 1.0
Nodes (0): 

### Community 117 - "Community 117"
Cohesion: 1.0
Nodes (0): 

### Community 118 - "Community 118"
Cohesion: 1.0
Nodes (0): 

### Community 119 - "Community 119"
Cohesion: 1.0
Nodes (0): 

### Community 120 - "Community 120"
Cohesion: 1.0
Nodes (0): 

### Community 121 - "Community 121"
Cohesion: 1.0
Nodes (0): 

### Community 122 - "Community 122"
Cohesion: 1.0
Nodes (0): 

### Community 123 - "Community 123"
Cohesion: 1.0
Nodes (1): Clear process-local locks for deterministic tests.

### Community 124 - "Community 124"
Cohesion: 1.0
Nodes (1): Retry a non-blocking advisory lock so waiting workers stay healthy.

### Community 125 - "Community 125"
Cohesion: 1.0
Nodes (1): Initialize schema and seed exactly once per persistent schema version.

### Community 126 - "Community 126"
Cohesion: 1.0
Nodes (1): Pure ASGI — zero thread-per-request overhead.

### Community 127 - "Community 127"
Cohesion: 1.0
Nodes (1): Simple sliding-window rate limiter for public API endpoints.      Limits per cli

### Community 128 - "Community 128"
Cohesion: 1.0
Nodes (1): Periodically remove expired entries to prevent memory leak.

### Community 129 - "Community 129"
Cohesion: 1.0
Nodes (1): 기록 감사 이력 — 누가/언제 입력/수정했는지 (KST)

### Community 130 - "Community 130"
Cohesion: 1.0
Nodes (1): Clear process-local locks for deterministic tests.

### Community 131 - "Community 131"
Cohesion: 1.0
Nodes (1): Retry a non-blocking advisory lock so waiting workers stay healthy.

### Community 132 - "Community 132"
Cohesion: 1.0
Nodes (1): Use PostgreSQL advisory locking; SQLite tests need only the local lock.

### Community 133 - "Community 133"
Cohesion: 1.0
Nodes (1): 기록 감사 이력 — 누가/언제 입력/수정했는지 (KST)

### Community 134 - "Community 134"
Cohesion: 1.0
Nodes (1): Reject every destination except the one explicit local demo origin.

## Knowledge Gaps
- **85 isolated node(s):** `Insert 메디신볼 records via API - correct range (meters, not cm).`, `Insert 500 records via API so scoring system calculates scores properly.`, `Fill ALL remaining records via API. Every student gets all 5 events.`, `Fill all records for TEST (test_id=11) via API.`, `Single-path schema initialization guarded across PostgreSQL workers.` (+80 more)
  These have ≤1 connection - possible missing edges or undocumented components.
- **Thin community `Community 42`** (2 nodes): `Insert 메디신볼 records via API - correct range (meters, not cm).`, `seed_medi.py`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 43`** (2 nodes): `Insert 500 records via API so scoring system calculates scores properly.`, `seed_500_via_api.py`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 44`** (2 nodes): `Fill ALL remaining records via API. Every student gets all 5 events.`, `seed_fill_all.py`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 45`** (2 nodes): `Fill all records for TEST (test_id=11) via API.`, `seed_test11_records.py`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 46`** (2 nodes): `prepareSessionPage()`, `session-operations.spec.ts`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 47`** (2 nodes): `useAdminSession()`, `task2-operational-safety.spec.ts`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 48`** (2 nodes): `mockLiveApi()`, `live-ranking.spec.ts`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 49`** (2 nodes): `prepareGroupsPage()`, `session-group-assignment.spec.ts`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 50`** (2 nodes): `RootLayout()`, `layout.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 51`** (2 nodes): `Home()`, `page.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 52`** (2 nodes): `AcademyLayout()`, `layout.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 53`** (2 nodes): `AcademyStudentsRedirect()`, `page.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 54`** (2 nodes): `RankBadge()`, `rank-badge.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 55`** (2 nodes): `AnnouncementsPage()`, `page.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 56`** (2 nodes): `ScoringPage()`, `page.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 57`** (2 nodes): `MonitoringPage()`, `page.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 58`** (2 nodes): `toggleSection()`, `page.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 59`** (2 nodes): `SetupStepBadge()`, `setup-step-badge.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 60`** (2 nodes): `groupLabel()`, `rotation-placement-board.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 61`** (2 nodes): `submit()`, `day-add-student-modal.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 62`** (2 nodes): `restore()`, `absent-restore-modal.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 63`** (2 nodes): `sendAnnouncement()`, `announcement-section.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 64`** (2 nodes): `MonitoringSection()`, `monitoring-section.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 65`** (2 nodes): `AdminStudentTableHeader()`, `admin-student-table-header.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 66`** (2 nodes): `formatSessionSummary()`, `session-operations-panel.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 67`** (2 nodes): `ArrivalButton()`, `arrival-button.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 68`** (2 nodes): `BatchFoulDialog()`, `batch-foul-dialog.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 69`** (2 nodes): `LiveRankingTabs()`, `live-ranking-tabs.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 70`** (2 nodes): `LiveTiebreakNotice()`, `live-tiebreak-notice.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 71`** (2 nodes): `LiveClosingNotice()`, `live-closing-notice.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 72`** (2 nodes): `formatRemaining()`, `live-waiting.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 73`** (2 nodes): `formatUpdatedAt()`, `live-brand-header.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 74`** (2 nodes): `LiveRehearsalBanner()`, `live-rehearsal-banner.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 75`** (2 nodes): `formatRecord()`, `live-ranking-list.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 76`** (2 nodes): `submit()`, `live-personal-record.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 77`** (2 nodes): `LiveGenderFilter()`, `live-gender-filter.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 78`** (2 nodes): `Configured public live-result windows.`, `live_schedule.py`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 79`** (2 nodes): `Fixed local rehearsal timing and score distributions.`, `rehearsal_rotation_config.py`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 80`** (1 nodes): `postcss.config.mjs`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 81`** (1 nodes): `next-env.d.ts`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 82`** (1 nodes): `playwright.config.ts`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 83`** (1 nodes): `next.config.ts`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 84`** (1 nodes): `live-closure.spec.ts`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 85`** (1 nodes): `rotation-standby.spec.ts`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 86`** (1 nodes): `auth-failover.spec.ts`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 87`** (1 nodes): `page.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 88`** (1 nodes): `ranking-page-types.ts`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 89`** (1 nodes): `page.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 90`** (1 nodes): `page.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 91`** (1 nodes): `page.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 92`** (1 nodes): `setup-types.ts`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 93`** (1 nodes): `event-station-settings.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 94`** (1 nodes): `test-dashboard-types.ts`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 95`** (1 nodes): `attendance-audit-section.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 96`** (1 nodes): `record-audit-section.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 97`** (1 nodes): `award-winner-list.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 98`** (1 nodes): `shirt-distribution-section.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 99`** (1 nodes): `awards-section.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 100`** (1 nodes): `group-progress-section.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 101`** (1 nodes): `dashboard-summary.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 102`** (1 nodes): `shirt-size-field.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 103`** (1 nodes): `recorder-types.ts`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 104`** (1 nodes): `recorder-student-view.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 105`** (1 nodes): `recorder-screen.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 106`** (1 nodes): `record-entry-modal.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 107`** (1 nodes): `recorder-group-view.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 108`** (1 nodes): `recorder-constants.ts`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 109`** (1 nodes): `live-farewell.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 110`** (1 nodes): `live-guidelines.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 111`** (1 nodes): `live-ranking-types.ts`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 112`** (1 nodes): `MorningCloseDialog.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 113`** (1 nodes): `AnnouncementModal.tsx`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 114`** (1 nodes): `__init__.py`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 115`** (1 nodes): `__init__.py`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 116`** (1 nodes): `__init__.py`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 117`** (1 nodes): `__init__.py`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 118`** (1 nodes): `__init__.py`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 119`** (1 nodes): `__init__.py`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 120`** (1 nodes): `__init__.py`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 121`** (1 nodes): `__init__.py`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 122`** (1 nodes): `__init__.py`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 123`** (1 nodes): `Clear process-local locks for deterministic tests.`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 124`** (1 nodes): `Retry a non-blocking advisory lock so waiting workers stay healthy.`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 125`** (1 nodes): `Initialize schema and seed exactly once per persistent schema version.`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 126`** (1 nodes): `Pure ASGI — zero thread-per-request overhead.`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 127`** (1 nodes): `Simple sliding-window rate limiter for public API endpoints.      Limits per cli`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 128`** (1 nodes): `Periodically remove expired entries to prevent memory leak.`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 129`** (1 nodes): `기록 감사 이력 — 누가/언제 입력/수정했는지 (KST)`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 130`** (1 nodes): `Clear process-local locks for deterministic tests.`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 131`** (1 nodes): `Retry a non-blocking advisory lock so waiting workers stay healthy.`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 132`** (1 nodes): `Use PostgreSQL advisory locking; SQLite tests need only the local lock.`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 133`** (1 nodes): `기록 감사 이력 — 누가/언제 입력/수정했는지 (KST)`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 134`** (1 nodes): `Reject every destination except the one explicit local demo origin.`
  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 `AppException` connect `Community 1` to `Community 2`, `Community 3`, `Community 4`, `Community 5`, `Community 6`, `Community 9`, `Community 15`, `Community 24`?**
  _High betweenness centrality (0.056) - this node is a cross-community bridge._
- **Why does `ApiResponse` connect `Community 2` to `Community 0`, `Community 1`, `Community 4`, `Community 5`, `Community 6`, `Community 8`, `Community 9`, `Community 11`, `Community 14`, `Community 15`?**
  _High betweenness centrality (0.035) - this node is a cross-community bridge._
- **Why does `fetch()` connect `Community 7` to `Community 0`?**
  _High betweenness centrality (0.034) - this node is a cross-community bridge._
- **Are the 172 inferred relationships involving `AppException` (e.g. with `LabelTypeUpdate` and `ManualGroupUpdate`) actually correct?**
  _`AppException` has 172 INFERRED edges - model-reasoned connections that need verification._
- **Are the 179 inferred relationships involving `TestGroup` (e.g. with `DayAddRequest` and `RestoreRequest`) actually correct?**
  _`TestGroup` has 179 INFERRED edges - model-reasoned connections that need verification._
- **Are the 174 inferred relationships involving `Student` (e.g. with `ShirtDistributionRepository` and `기록 변경 전후 값과 행위자를 시간순으로 반환한다.`) actually correct?**
  _`Student` has 174 INFERRED edges - model-reasoned connections that need verification._
- **Are the 170 inferred relationships involving `TestGroupStudent` (e.g. with `기록 변경 전후 값과 행위자를 시간순으로 반환한다.` and `DayAddRequest`) actually correct?**
  _`TestGroupStudent` has 170 INFERRED edges - model-reasoned connections that need verification._