# Graph Report - test_programs  (2026-09-08)

## Corpus Check
- Corpus is ~5,891 words - fits in a single context window. You may not need a graph.

## Summary
- 75 nodes · 126 edges · 10 communities (7 shown, 3 thin omitted)
- Extraction: 99% EXTRACTED · 1% INFERRED · 0% AMBIGUOUS · INFERRED: 1 edges (avg confidence: 0.85)
- Token cost: 0 input · 0 output

## Community Hubs (Navigation)
- BDP/DSV Login Automation
- SAP GUI Patch Check
- GitHub Login Test
- Feishu Media Capture
- IBP Activation Login
- IBP Activation Logic
- IBP JS String Extraction
- IBP Activate Click
- IBP Planning Area Tiles
- IBP Tile Opening

## God Nodes (most connected - your core abstractions)
1. `main()` - 12 edges
2. `log()` - 10 edges
3. `log()` - 9 edges
4. `main()` - 9 edges
5. `capture_full_page()` - 8 edges
6. `main()` - 8 edges
7. `wait_for_activation_result()` - 6 edges
8. `media_tag()` - 5 edges
9. `login_bdp()` - 5 edges
10. `logout_bdp()` - 5 edges

## Surprising Connections (you probably didn't know these)
- `main()` --calls--> `capture_full_page()`  [EXTRACTED]
  ibp_activate_planning_areas.py → feishu_media.py
- `logout_bdp()` --calls--> `capture_full_page()`  [EXTRACTED]
  monthly_bdp_dsv_login.py → feishu_media.py
- `main()` --calls--> `capture_full_page()`  [EXTRACTED]
  monthly_bdp_dsv_login.py → feishu_media.py
- `main()` --calls--> `capture_full_page()`  [EXTRACTED]
  sapgui800_patch_check.py → feishu_media.py
- `main()` --calls--> `media_tag()`  [EXTRACTED]
  ibp_activate_planning_areas.py → feishu_media.py

## Import Cycles
- None detected.

## Communities (10 total, 3 thin omitted)

### Community 0 - "BDP/DSV Login Automation"
Cohesion: 0.20
Nodes (17): _block_heavy_resources(), _dismiss_tutorial(), log(), login_bdp(), login_dsv(), logout_bdp(), logout_dsv(), main() (+9 more)

### Community 1 - "SAP GUI Patch Check"
Cohesion: 0.26
Nodes (12): extract_table(), find_launchpad_frame(), log(), main(), page_like_wait(), parse_env(), Wait for the download table, parse rows, return list of patch dicts., Frame object has no wait_for_timeout in some API versions; fall back to sync… (+4 more)

### Community 2 - "GitHub Login Test"
Cohesion: 0.27
Nodes (9): attempt_login(), get_credentials(), load_env(), main(), GitHub login test using Playwright (sync API). - Reads GITHUB_* credentials…, Parse KEY=VALUE lines into a dict. Values are never logged here., Return (username, password) or (None, None) if the keys are absent., Drive the browser through GitHub login and report the outcome. (+1 more)

### Community 3 - "Feishu Media Capture"
Cohesion: 0.28
Nodes (8): capture_full_page(), _cdp_full_page(), media_tag(), _note_error(), Return the MEDIA: delivery line for a screenshot path ('' if None)., Shared helpers for cron login scripts: capture full-page screenshots and emit…, CDP Page.captureScreenshot — bypasses Playwright's font-load wait. Playwright's…, Full-page screenshot -> ~/.hermes/logs/shots/<label>_<ts>.png Strategy:…

### Community 4 - "IBP Activation Login"
Cohesion: 0.36
Nodes (8): close_dialog(), go_home(), log(), login(), main(), parse_env(), Return to the FLP Home page via the SAP logo., Append a timestamped progress line to the log file (not stdout).

### Community 5 - "IBP Activation Logic"
Cohesion: 0.38
Nodes (6): classify_result(), is_terminal(), SAP IBP - Monthly: activate all planning areas under 'My Planning Areas'. Full…, Poll the activation dialog + page status until a terminal state. Returns…, Dialog Status field is authoritative; counters add detail., wait_for_activation_result()

### Community 6 - "IBP JS String Extraction"
Cohesion: 0.50
Nodes (4): _extract_js_strings(), Extract the actual string values passed to page.evaluate(...) via AST. Reading…, Validate every embedded JS string with node before launching the browser.…, selfcheck()

## Knowledge Gaps
- **3 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 `main()` connect `IBP Activation Login` to `Feishu Media Capture`, `IBP Activation Logic`, `IBP Activate Click`, `IBP Planning Area Tiles`, `IBP Tile Opening`?**
  _High betweenness centrality (0.140) - this node is a cross-community bridge._
- **Why does `capture_full_page()` connect `Feishu Media Capture` to `BDP/DSV Login Automation`, `SAP GUI Patch Check`, `IBP Activation Login`?**
  _High betweenness centrality (0.136) - this node is a cross-community bridge._
- **Why does `main()` connect `SAP GUI Patch Check` to `Feishu Media Capture`?**
  _High betweenness centrality (0.086) - this node is a cross-community bridge._