# Graph Report - /Users/etlab/orca/workspaces/maxai-ops/et-claude-review  (2026-08-02)

## Corpus Check
- 310 files · ~369,321 words
- Verdict: corpus is large enough that graph structure adds value.

## Summary
- 3562 nodes · 7744 edges · 54 communities detected
- Extraction: 80% EXTRACTED · 20% INFERRED · 0% AMBIGUOUS · INFERRED: 1523 edges (avg confidence: 0.77)
- 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]]

## God Nodes (most connected - your core abstractions)
1. `calculate_score()` - 293 edges
2. `connect()` - 64 edges
3. `template_register()` - 42 edges
4. `ingest_life_record()` - 36 edges
5. `recommend_candidates()` - 33 edges
6. `AcademyApiClient` - 31 edges
7. `run()` - 29 edges
8. `resolve_and_execute_academy_request()` - 29 edges
9. `register()` - 26 edges
10. `AcademyApiError` - 26 edges

## Surprising Connections (you probably didn't know these)
- `test_pdf_text_parser_reads_spaced_subject_note_heading()` --calls--> `extract_from_pdf_text()`  [INFERRED]
  /Users/etlab/orca/workspaces/maxai-ops/et-claude-review/hermes/plugins/tests/test_life_record_text_pdf_fast_path.py → /Users/etlab/orca/workspaces/maxai-ops/et-claude-review/hermes/plugins/life_record/pdf_text_source.py
- `test_pdf_text_extracts_career_achievement_ratios()` --calls--> `extract_from_pdf_text()`  [INFERRED]
  /Users/etlab/orca/workspaces/maxai-ops/et-claude-review/hermes/plugins/tests/test_life_record_achievement_ratios.py → /Users/etlab/orca/workspaces/maxai-ops/et-claude-review/hermes/plugins/life_record/pdf_text_source.py
- `test_e2e_run_meets_the_plan_acceptance_criteria()` --calls--> `run()`  [INFERRED]
  /Users/etlab/orca/workspaces/maxai-ops/et-claude-review/experiments/schema-vs-mcp-20260728T194216Z/tests/test_life_schema.py → /Users/etlab/orca/workspaces/maxai-ops/et-claude-review/hermes/plugins/academy_ops/server.py
- `calculate_score()` --calls--> `_official_selected_academic_subjects()`  [INFERRED]
  /Users/etlab/orca/workspaces/maxai-ops/et-claude-review/hermes/plugins/susi_ops/calculation.py → /Users/etlab/orca/workspaces/maxai-ops/et-claude-review/hermes/plugins/susi_ops/formula_adapter.py
- `_calculate_handler()` --calls--> `calculate_score()`  [INFERRED]
  /Users/etlab/orca/workspaces/maxai-ops/et-claude-review/hermes/plugins/susi_ops/__init__.py → /Users/etlab/orca/workspaces/maxai-ops/et-claude-review/hermes/plugins/susi_ops/calculation.py

## Communities

### Community 0 - "Community 0"
Cohesion: 0.01
Nodes (432): calculate_score(), _grade_value(), _keyword_matches_subject(), _missing_achievement_ratio_inputs(), _norm_subject_area(), Grade-selection and grade-table fallback engine., semester_limit(예: '1학년 1학기~3학년 1학기(졸업생 포함)') 마지막 학년/학기까지만 반영., # NOTE: do not use bare "국어" — it matches "중국어" as a substring. (+424 more)

### Community 1 - "Community 1"
Cohesion: 0.02
Nodes (203): AcademyApiClient, _conflict_message(), Authenticated PACA/Peak API client for academy operations., API 지도(map call) 전용 generic 호출 — 화이트리스트 검증은 호출자 책임., _student_rows(), _to_int(), _academy_schedule_message(), _academy_schedule_range_tool_handler() (+195 more)

### Community 2 - "Community 2"
Cohesion: 0.02
Nodes (196): _with_consultation_candidate_image(), AttendanceCalendarImageRenderer, AttendanceCalendarRenderError, HTML-first PNG renderer for student attendance calendars., _absence_note_html(), _absence_notes(), _attendance_rows(), _brand_html() (+188 more)

### Community 3 - "Community 3"
Cohesion: 0.02
Nodes (137): calc_anyang_2027(), _evidence(), _group(), _include_semester(), _practical_score(), 안양대 공식 모집표에 없는 잔존 행 차단 및 스포츠과학과 산출., _record_score(), _round2() (+129 more)

### Community 4 - "Community 4"
Cohesion: 0.02
Nodes (161): _all_candidates_key(), artifact_fingerprint(), _comparison_rows(), current_turn_reviewed_artifact(), _hakjong_key(), _is_reviewed_artifact(), _manifest_hint(), _norm() (+153 more)

### Community 5 - "Community 5"
Cohesion: 0.02
Nodes (157): _achievement_ratios(), _code_size(), compare(), _delta(), load_students(), main(), _rank_grade(), iterations 회 실행 후 (마지막 결과, 회당 중앙값 ms). (+149 more)

### Community 6 - "Community 6"
Cohesion: 0.03
Nodes (153): normalize_ratio_map(), parse_ratio_text(), Parse and normalize 성취도별 분포비율 (A/B/C student %)., A(58.0) B(25.9) C(16.0)' -> {'A': 58.0, 'B': 25.9, 'C': 16.0}., Accept dict-like A/B/C maps or ratio text., Pull ratios from a grade dict or its stored raw_row JSON payload., ratios_from_grade_row(), central_db_path() (+145 more)

### Community 7 - "Community 7"
Cohesion: 0.03
Nodes (125): AcademyLoginResult, complete_login(), _complete_remote_pending(), consume_pending_login(), create_login_link(), has_pending_login_for_user(), load_pending_logins(), LoginLink (+117 more)

### Community 8 - "Community 8"
Cohesion: 0.02
Nodes (128): _absence_range_matches(), attendance_absence_days(), _first_nonzero(), normalize_attendance(), _number_or_zero(), _parse_special_note_counts(), Attendance score helpers for official 수시 calculations., Parse notes like '결석:질병 . / 미인정 9 / 기타 . 조퇴:질병 14 / 미인정 9'. (+120 more)

### Community 9 - "Community 9"
Cohesion: 0.03
Nodes (131): plan_commentary_aux_defaults(), Routing defaults for Academy LLM commentary tasks., _call_llm(), _enabled(), _messages(), naturalize_guidance_response(), _preserves_required_fragments(), LLM-polished Korean copy for academy guidance messages. (+123 more)

### Community 10 - "Community 10"
Cohesion: 0.02
Nodes (115): AdapterResult, _attendance_slot(), _award_slot(), _build(), build_life_record(), _confidence(), _course_type(), _extract_mhtml() (+107 more)

### Community 11 - "Community 11"
Cohesion: 0.03
Nodes (123): all_confirmed(), _key(), _majority_threshold(), needs_recheck_fields(), _norm_obj(), _norm_scalar(), Self-consistency reconciliation across multiple vision extractions.  A field/row, Full reconciliation of N extraction results into one consensus structure. (+115 more)

### Community 12 - "Community 12"
Cohesion: 0.04
Nodes (84): _activate(), _active_row(), _allowed_source_roots(), _assert_under(), _audit(), _build(), _commit_version(), _connect() (+76 more)

### Community 13 - "Community 13"
Cohesion: 0.03
Nodes (120): codex_provider(), commentary_fallback_models(), commentary_model(), critical_model(), deep_model(), _env(), _fallbacks(), Codex model role policy for fast academy operations. (+112 more)

### Community 14 - "Community 14"
Cohesion: 0.04
Nodes (93): AcademyApiError, Raised when PACA/Peak data cannot be fetched safely., Read-only PACA/Peak tools and guarded write drafts., ConsultationCandidateRenderError, Tool handlers for local academy consultation notes., AcademyLoginError, login_paca(), _parse_login_payload() (+85 more)

### Community 15 - "Community 15"
Cohesion: 0.05
Nodes (70): _api_map(), _api_query_tool_handler(), _fit_result(), _map_call(), _map_search(), _match_template(), Read-only generic PACA/Peak API query for requests no specialized tool covers., 실제 호출 path를 지도 템플릿(:param 세그먼트)과 대조 — 등재된 것만 통과. (+62 more)

### Community 16 - "Community 16"
Cohesion: 0.08
Nodes (68): _attendance_row(), _attendance_section(), _behavior_notes(), _clean(), _clean_note_text(), _dedupe_grades(), _dedupe_notes(), _extract_attendance() (+60 more)

### Community 17 - "Community 17"
Cohesion: 0.06
Nodes (59): _append_profile(), build_faculty_research(), bundle_sources_match_university(), _clean_korean_name(), _clean_name(), _contains_any(), _english_variants(), extract_faculty_profiles() (+51 more)

### Community 18 - "Community 18"
Cohesion: 0.08
Nodes (55): _attendance_row(), _behavior_notes(), _clean(), _clean_note_text(), _dedupe_grades(), _dedupe_notes(), _extract_attendance(), _extract_awards() (+47 more)

### Community 19 - "Community 19"
Cohesion: 0.09
Nodes (33): HTMLParser, _achievement_count(), _best_name(), _clean(), _clean_multiline(), _extract_attendance(), _extract_creative_activity(), _extract_grades() (+25 more)

### Community 20 - "Community 20"
Cohesion: 0.08
Nodes (33): main(), _apply_track_cut_override(), _bridge_token_from_tenant(), build_targets_from_catalog(), _catalog_raw_lookup(), _default_student_regions(), _evaluate_one_target(), expand_regions() (+25 more)

### Community 21 - "Community 21"
Cohesion: 0.13
Nodes (25): _cached_font_path(), _download_to_cache(), _find_system_goyang_font(), goyang_font_css(), Goyang typeface resolver for academy card rendering., resolve_goyang_font(), _select_font_member(), CSS for academy student-card image rendering. (+17 more)

### Community 22 - "Community 22"
Cohesion: 0.15
Nodes (25): _api_get(), _as_rows(), _clamp_limit(), _compact_row(), _filter_client(), formula_shadow_compare(), formula_shadow_ping(), _normalize_sport() (+17 more)

### Community 23 - "Community 23"
Cohesion: 0.15
Nodes (18): academy_accuracy_contract(), build_accuracy_receipt(), Accuracy contracts shared by academy admission tools., validate_accuracy_receipt(), _accuracy_receipt(), build_all_candidates_content(), _candidate_key(), _candidate_row() (+10 more)

### Community 24 - "Community 24"
Cohesion: 0.19
Nodes (20): _achievement_letter(), calc_hoseo_2027(), _career_grade(), _career_ratio(), _evidence(), _group(), _include_semester(), _is_career_course() (+12 more)

### Community 25 - "Community 25"
Cohesion: 0.19
Nodes (17): academy_schedules_for_range(), AcademyCalendarClient, _attendance_slot_rows(), _consultation_row(), consultation_schedules_for_range(), _contains_trial_marker(), _count_status(), _days() (+9 more)

### Community 26 - "Community 26"
Cohesion: 0.11
Nodes (2): loadSusiTenants(), main()

### Community 27 - "Community 27"
Cohesion: 0.16
Nodes (18): _apply_central_achievement_ratios(), _grade_row_from_central(), _int_or_none(), _load_park_sihyun_achievement_ratios(), _parse_career_ratio_table(), _parse_ratio_row(), parse_raw_score(), Student record loading helpers for Susi calculations. (+10 more)

### Community 28 - "Community 28"
Cohesion: 0.28
Nodes (18): account_for(), chown_tree(), die(), ensure_shared_node(), ensure_tenant_node(), hermes_home(), install_node(), install_pip() (+10 more)

### Community 29 - "Community 29"
Cohesion: 0.22
Nodes (18): _attendance_days(), _attendance_score(), calc_hanseo_2027(), _candidate(), _course_score(), _group(), _has_practical_input(), _input_float() (+10 more)

### Community 30 - "Community 30"
Cohesion: 0.26
Nodes (16): calc_jungbu_2027(), _converted_grade(), _evidence(), _group(), _include_semester(), _point_for_average(), _practical_reflection(), _practical_score() (+8 more)

### Community 31 - "Community 31"
Cohesion: 0.24
Nodes (15): _as_text(), _bool_value(), build_hakjong_storm_plan(), _build_outline(), _clean_text(), _first_profile(), _format_question(), _handler() (+7 more)

### Community 32 - "Community 32"
Cohesion: 0.31
Nodes (15): assignment_count_followup_response(), _assignment_html(), _assignment_image_height(), _assignment_image_response(), _assignment_table_rows(), _class_line(), _dict_rows(), _esc() (+7 more)

### Community 33 - "Community 33"
Cohesion: 0.27
Nodes (11): class_roster_for_range(), ClassRosterClient, Read-only PACA class-schedule roster aggregation (who attends class today)., Index every academy student's school/grade by student_id.      The schedule-atte, _roster_for_schedule(), _schedule_date(), _schedule_row(), _student_profiles() (+3 more)

### Community 34 - "Community 34"
Cohesion: 0.27
Nodes (14): _append_names(), _clean_heading(), _current_thread_dir(), _duplicates(), _match_key(), _message(), parse_markdown_rosters(), Thread-stored academy roster lookup. (+6 more)

### Community 35 - "Community 35"
Cohesion: 0.3
Nodes (12): _attendance_row(), _compact(), _date_text(), _instructor_summaries(), _matched_instructors(), _months_between(), Read-only PACA instructor attendance aggregation., staff_attendance_for_day() (+4 more)

### Community 36 - "Community 36"
Cohesion: 0.36
Nodes (10): _assignment_slots(), AssignmentClient, assignments_for_day(), _class_row(), _dict_rows(), _instructor_row(), Read-only Peak class assignment lookup., _student_row() (+2 more)

### Community 37 - "Community 37"
Cohesion: 0.35
Nodes (9): _id_text(), _list_payload(), _list_value(), plan_lookup_for_day(), PlanLookupClient, Read-only Peak daily plan lookup., _safe_exercise(), _safe_plan() (+1 more)

### Community 38 - "Community 38"
Cohesion: 0.31
Nodes (9): _dedupe_rows(), _dict_rows(), Read-only Peak instructor schedule aggregation., _scheduled_row(), _scheduled_slots(), _slot_instructors(), staff_schedule_for_day(), StaffScheduleClient (+1 more)

### Community 39 - "Community 39"
Cohesion: 0.31
Nodes (9): _call_plan_commentary_llm(), _fallback_plan_commentary(), generate_plan_commentary(), plan_commentary_facts(), plan_commentary_messages(), LLM-only commentary for Peak daily plan facts., schedule_plan_commentary(), _send_commentary() (+1 more)

### Community 40 - "Community 40"
Cohesion: 0.46
Nodes (7): analyze_file(), analyze_plugins(), deep_check_priority(), first_uni(), main(), Manual deep checks for known golden / recently patched schools., snip()

### Community 41 - "Community 41"
Cohesion: 0.5
Nodes (7): apply_skin_css(), default_skin(), esc(), file_url(), load_yaml(), main(), row_html()

### Community 42 - "Community 42"
Cohesion: 0.43
Nodes (6): adapt_for_graduate(), _graduate_actions(), _metric_value(), Graduate-mode content adapter for hakjong audit reports., Convert enrolled-student planning content into completed-record review mode., _track_source()

### Community 43 - "Community 43"
Cohesion: 0.7
Nodes (4): analyze(), main(), plugins(), uni()

### Community 44 - "Community 44"
Cohesion: 0.7
Nodes (4): analyze_file(), analyze_plugins(), first_uni(), main()

### Community 45 - "Community 45"
Cohesion: 0.7
Nodes (4): a_status(), b_status(), main(), uni()

### Community 46 - "Community 46"
Cohesion: 0.67
Nodes (3): main(), patch_mcp_messages(), Replace basename-only file hint with full path + MEDIA line.

### Community 47 - "Community 47"
Cohesion: 0.5
Nodes (3): academy_preflight_decision(), Optional deterministic preflight for academy natural routing., Defer natural PACA/Peak routing to the semantic router.      Korean natural-lang

### Community 48 - "Community 48"
Cohesion: 0.5
Nodes (1): Academy request rewrite guard.  Natural-language PACA/Peak requests must stay in

### Community 49 - "Community 49"
Cohesion: 0.5
Nodes (3): Periodic warm-up for the codex router (intent-classifier) connection.  The codex, Fire one tiny router-model call to keep the codex connection warm.      Returns, warm_router_connection()

### Community 50 - "Community 50"
Cohesion: 1.0
Nodes (2): main(), patch()

### 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 (1): Put the experiment ``src`` on sys.path — the harness is not an installed package

## Knowledge Gaps
- **477 isolated node(s):** `Manual deep checks for known golden / recently patched schools.`, `청운대학교 2027 수시 — 스포츠과학과 일반전형(실기).  근거: 2027학년도 청운대학교 수시 모집요강 - 일반전형 스포츠과학과: 교과 38`, `Resolve a document argument under the pinned data root. No escapes, no absolute`, `생기부 PDF/MHTML 을 LifeRecordSchema v1 로 채워 검증한다. 저장 없음, 읽기 전용.`, `문서에서 채운 스키마와 중앙 생기부를 슬롯별로 대조한다. 중앙 DB 는 읽기 전용으로만 연다.` (+472 more)
  These have ≤1 connection - possible missing edges or undocumented components.
- **Thin community `Community 51`** (2 nodes): `main()`, `_audit_yogang_final_table.py`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 52`** (2 nodes): `main()`, `_audit_formula_ach_grad.py`
  Too small to be a meaningful cluster - may be noise or needs more connections extracted.
- **Thin community `Community 53`** (2 nodes): `Put the experiment ``src`` on sys.path — the harness is not an installed package`, `conftest.py`
  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 `calculate_score()` connect `Community 0` to `Community 8`, `Community 6`?**
  _High betweenness centrality (0.252) - this node is a cross-community bridge._
- **Why does `connect()` connect `Community 6` to `Community 1`, `Community 4`, `Community 5`, `Community 7`, `Community 8`, `Community 9`, `Community 10`, `Community 11`, `Community 12`, `Community 13`, `Community 15`, `Community 17`, `Community 27`?**
  _High betweenness centrality (0.214) - this node is a cross-community bridge._
- **Why does `test_calculate_score_unverified_rule_refused()` connect `Community 6` to `Community 0`?**
  _High betweenness centrality (0.067) - this node is a cross-community bridge._
- **Are the 287 inferred relationships involving `calculate_score()` (e.g. with `normalize_attendance()` and `_connect()`) actually correct?**
  _`calculate_score()` has 287 INFERRED edges - model-reasoned connections that need verification._
- **Are the 53 inferred relationships involving `connect()` (e.g. with `life_schema_diff_central()` and `enforce_fixed_scope()`) actually correct?**
  _`connect()` has 53 INFERRED edges - model-reasoned connections that need verification._
- **Are the 32 inferred relationships involving `template_register()` (e.g. with `.test_unknown_kind_rejected()` and `.test_kinds_are_independent()`) actually correct?**
  _`template_register()` has 32 INFERRED edges - model-reasoned connections that need verification._
- **Are the 26 inferred relationships involving `ingest_life_record()` (e.g. with `test_mhtml_ingest_accepts_already_stored_original()` and `test_mhtml_reingest_replaces_superseded_thread_and_central_rows()`) actually correct?**
  _`ingest_life_record()` has 26 INFERRED edges - model-reasoned connections that need verification._