diff --git a/.gitignore b/.gitignore
index d6b130c..cf5310d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,3 @@
.claude/settings.local.json
+graphify-out/cost.json
+graphify-out/cache/
diff --git a/graphify-out/.graphify_labels.json b/graphify-out/.graphify_labels.json
new file mode 100644
index 0000000..a8ba52c
--- /dev/null
+++ b/graphify-out/.graphify_labels.json
@@ -0,0 +1 @@
+{"0": "Detection Pipeline & Architecture", "1": "ba_dailies.sh Script & Cafe Claim", "2": "Combat/Story Feature Roadmap", "3": "AP/Task Sweep Features", "4": "Cafe Room 2 UI & Detector", "5": "Cafe Income Popup UI", "6": "Cafe Room 1 UI", "7": "Cafe Income Reference Capture", "8": "Game Main Screen UI", "9": "Student Rotation Popup", "10": "Shop Automation (Planned)", "11": "Sparkle Zoomed-Out Calibration", "12": "Student Rank-Up Popup Stage 1", "13": "Sparkle Template Asset", "14": "Group/Mini Story (Planned)", "15": "Student Rank-Up Popup Stage 2", "16": "Battle Pass Claim (Planned)", "17": "Crafting Automation (Planned)", "18": "Club/Group AP Claim (Planned)", "19": "Sparkle Zoomed-Centered Precondition", "20": "Sparkle Speech-Bubble Occlusion", "21": "Rank-Up Popup Dismissal Flow", "22": "Sparkle Sample Reference"}
\ No newline at end of file
diff --git a/graphify-out/.graphify_python b/graphify-out/.graphify_python
new file mode 100644
index 0000000..d036ca8
--- /dev/null
+++ b/graphify-out/.graphify_python
@@ -0,0 +1 @@
+/Users/nik-macbookair/.local/share/uv/tools/graphifyy/bin/python
\ No newline at end of file
diff --git a/graphify-out/.graphify_root b/graphify-out/.graphify_root
new file mode 100644
index 0000000..82aab5f
--- /dev/null
+++ b/graphify-out/.graphify_root
@@ -0,0 +1 @@
+/Users/nik-macbookair/repo/ba-auto-daily
diff --git a/graphify-out/GRAPH_REPORT.md b/graphify-out/GRAPH_REPORT.md
new file mode 100644
index 0000000..d501cb7
--- /dev/null
+++ b/graphify-out/GRAPH_REPORT.md
@@ -0,0 +1,159 @@
+# Graph Report - . (2026-07-05)
+
+## Corpus Check
+- Large corpus: 21 files · ~974,160 words. Semantic extraction will be expensive (many Claude tokens). Consider running on a subfolder.
+
+## Summary
+- 159 nodes · 176 edges · 23 communities (16 shown, 7 thin omitted)
+- Extraction: 90% EXTRACTED · 10% INFERRED · 1% AMBIGUOUS · INFERRED: 17 edges (avg confidence: 0.8)
+- Token cost: 320,012 input · 0 output
+
+## Community Hubs (Navigation)
+- [[_COMMUNITY_Detection Pipeline & Architecture|Detection Pipeline & Architecture]]
+- [[_COMMUNITY_ba_dailies.sh Script & Cafe Claim|ba_dailies.sh Script & Cafe Claim]]
+- [[_COMMUNITY_CombatStory Feature Roadmap|Combat/Story Feature Roadmap]]
+- [[_COMMUNITY_APTask Sweep Features|AP/Task Sweep Features]]
+- [[_COMMUNITY_Cafe Room 2 UI & Detector|Cafe Room 2 UI & Detector]]
+- [[_COMMUNITY_Cafe Income Popup UI|Cafe Income Popup UI]]
+- [[_COMMUNITY_Cafe Room 1 UI|Cafe Room 1 UI]]
+- [[_COMMUNITY_Cafe Income Reference Capture|Cafe Income Reference Capture]]
+- [[_COMMUNITY_Game Main Screen UI|Game Main Screen UI]]
+- [[_COMMUNITY_Student Rotation Popup|Student Rotation Popup]]
+- [[_COMMUNITY_Shop Automation (Planned)|Shop Automation (Planned)]]
+- [[_COMMUNITY_Sparkle Zoomed-Out Calibration|Sparkle Zoomed-Out Calibration]]
+- [[_COMMUNITY_Student Rank-Up Popup Stage 1|Student Rank-Up Popup Stage 1]]
+- [[_COMMUNITY_Sparkle Template Asset|Sparkle Template Asset]]
+- [[_COMMUNITY_GroupMini Story (Planned)|Group/Mini Story (Planned)]]
+- [[_COMMUNITY_Student Rank-Up Popup Stage 2|Student Rank-Up Popup Stage 2]]
+- [[_COMMUNITY_Battle Pass Claim (Planned)|Battle Pass Claim (Planned)]]
+- [[_COMMUNITY_Crafting Automation (Planned)|Crafting Automation (Planned)]]
+- [[_COMMUNITY_ClubGroup AP Claim (Planned)|Club/Group AP Claim (Planned)]]
+- [[_COMMUNITY_Sparkle Zoomed-Centered Precondition|Sparkle Zoomed-Centered Precondition]]
+- [[_COMMUNITY_Sparkle Speech-Bubble Occlusion|Sparkle Speech-Bubble Occlusion]]
+- [[_COMMUNITY_Rank-Up Popup Dismissal Flow|Rank-Up Popup Dismissal Flow]]
+- [[_COMMUNITY_Sparkle Sample Reference|Sparkle Sample Reference]]
+
+## God Nodes (most connected - your core abstractions)
+1. `do_cafe()` - 17 edges
+2. `detect_and_click.py (color-masked template-match sparkle detector/clicker)` - 12 edges
+3. `ba-auto-daily Implementation Plan` - 12 edges
+4. `Cafe Room 2 Reference Screenshot` - 11 edges
+5. `Event content (Activities) sweep feature` - 8 edges
+6. `do_mailbox()` - 7 edges
+7. `ba_dailies.sh (entry-point automation script)` - 6 edges
+8. `Cafe Income Popup (カフェの収入)` - 6 edges
+9. `Cafe Room 1 Reference Screenshot` - 6 edges
+10. `Blue Archive Main/Home Screen Screenshot` - 6 edges
+
+## Surprising Connections (you probably didn't know these)
+- `Lesson/Schedule (affection farming via classes) feature` --semantically_similar_to--> `do_cafe()` [INFERRED] [semantically similar]
+ plan.md → ba_dailies.sh
+- `Cafe Reward Menu Popup Screenshot` --rationale_for--> `do_cafe()` [INFERRED]
+ screenshots/cafe/cafe_reward/02_cafe_reward_menu_popup.png → ba_dailies.sh
+- `Receive Button (受取 / Enter)` --rationale_for--> `do_cafe()` [INFERRED]
+ screenshots/cafe/cafe_reward/02_cafe_reward_menu_popup.png → ba_dailies.sh
+- `Cafe Button (Bottom Navigation)` --references--> `do_cafe()` [INFERRED]
+ screenshots/main/main.png → ba_dailies.sh
+- `Blue Archive Main/Home Screen Screenshot` --references--> `focus_game()` [INFERRED]
+ screenshots/main/main.png → ba_dailies.sh
+
+## Import Cycles
+- None detected.
+
+## Hyperedges (group relationships)
+- **Tier 1 — high-priority, no-OCR-needed features** — plan_stamina_ap_sweep, plan_club_group_ap_claim, plan_momo_talk [EXTRACTED 1.00]
+- **Tier 2 — sweep-style AP consumption features sharing the buy-tickets/sweep-N-times/color-detect shape** — plan_commissions, plan_scrimmage, plan_bounty, plan_story_ap_sweep [EXTRACTED 1.00]
+- **Cafe sparkle-click automation pipeline (focus -> loop-detect-click -> claim)** — ba_dailies_script, ba_dailies_focus_game, ba_dailies_do_cafe, scripts_detect_and_click_script, assets_cafe_sparkle_image [EXTRACTED 1.00]
+
+## Communities (23 total, 7 thin omitted)
+
+### Community 0 - "Detection Pipeline & Architecture"
+Cohesion: 0.10
+Nodes (26): cafe_sparkle.png (template image for sparkle detection), cafe_sparkle.png Template Image, scp/rsync + ssh deployment of scripts/assets to nik-gpu, Single local screenshot->detect->click pipeline on nik-gpu (avoids SSH round-trip for the fast-moving sparkle), nik-gpu (Linux box running the Blue Archive client and X display), nik-macbookair (macOS development machine), numpy dependency, opencv-python dependency (+18 more)
+
+### Community 1 - "ba_dailies.sh Script & Cafe Claim"
+Cohesion: 0.18
+Nodes (17): CAFE_MAX_CLICKS_PER_ROOM constant, click(), DISPLAY, do_cafe(), do_cafe_room(), do_mailbox(), focus_game(), press_enter() (+9 more)
+
+### Community 2 - "Combat/Story Feature Roadmap"
+Cohesion: 0.12
+Nodes (19): baas module/arena.py (173 lines), baas module/explore_tasks/explore_task.py, baas module/main_story.py (auto_fight/enter_battle), baas module/momo_talk.py (183 lines, getConversationState), Known gap: unconfirmed rotated-student popup / zoom-center / rank-up popup handling in do_cafe, Arena (PvP ladder) feature, Auto-fight primitive (shared start-fight/max-speed/auto-mode/detect-result routine), baas reference project (pur1fying/blue_archive_auto_script, GPL-3.0, read-only research reference) (+11 more)
+
+### Community 3 - "AP/Task Sweep Features"
+Cohesion: 0.13
+Nodes (15): baas module/activities/activity_utils.py, baas module/clear_special_task_power.py (148 lines), baas module/collect_daily_free_power.py, baas module/collect_daily_task_power.py, baas module/explore_tasks/sweep_task.py, baas module/explore_tasks/task_utils.py, baas module/rewarded_task.py (204 lines), baas module/scrimmage.py (166 lines) (+7 more)
+
+### Community 4 - "Cafe Room 2 UI & Detector"
+Cohesion: 0.13
+Nodes (11): Green Swirl Markers Above Two Students (possible status/affection indicator), Bottom Edit Toolbar (編集モード / 贈り物 / 家具情報 / プリセット / すべて収納), Comfort Level Indicator (快適度 5500), Top HUD: AP / Gold / Gems Counters, Cafe Furnishings Layout (arcade cabinets, crane machine, sofas, plants), Cafe Income Rate Display (カフェの収入 4.1%), Invitation Ticket Purchase Prompt with Countdown Timer, "Move to Store 1" Button (1号店に移動) (+3 more)
+
+### Community 5 - "Cafe Income Popup UI"
+Cohesion: 0.29
+Nodes (7): Cafe Reward Menu Popup Screenshot, Cafe Income Popup (カフェの収入), Popup Close Button (X), Receive Button (受取 / Enter), Store 1 AP Income Panel (1号店 AP), Store 1 Credits Income Panel (1号店 Credits), Store 2 Credits Income Panel (2号店 Credits)
+
+### Community 6 - "Cafe Room 1 UI"
+Cohesion: 0.29
+Nodes (7): Cafe Edit-Mode Bottom Toolbar (edit/gift/furniture-info/preset/store-all), Cafe Income (カフェの収入) and Comfort Level (快適度) Display, Cafe Room 1 Reference Screenshot, "Move to Shop 2" (2号店に移動) Navigation Button, Cafe Room 1 Furniture Layout (train set, animal pen, swing, car, music stand), Student Characters Scattered in Cafe Room 1 (potential sparkle click targets), Designated Visit / Random Visit Icons (指定訪問・ランダム訪問)
+
+### Community 7 - "Cafe Income Reference Capture"
+Cohesion: 0.33
+Nodes (6): Cafe Income Percentage Display (カフェの収入 8.3%), Cafe Room Interior Scene (furniture, students, train set), Comfort Level Meter (快適度 5500), Invitation Ticket Buttons (招待券 / 追加招待券) with Countdown Timer, Cafe Top Navigation Bar (AP / Gold / Gems, Back Button, Visit Buttons), Cafe Reward Screen Screenshot (Cursor on Top)
+
+### Community 8 - "Game Main Screen UI"
+Cohesion: 0.33
+Nodes (6): Bottom Navigation Bar (Cafe, Schedule, Students, Formation, Social, Manufacture, Shop, Recruit, Work), Cafe Button (Bottom Navigation), Currency/Resource Display (AP, Credits, Gems), Mailbox/Envelope Icon (Top Bar), Blue Archive Main/Home Screen Screenshot, nik-gpu Window Title Bar
+
+### Community 9 - "Student Rotation Popup"
+Cohesion: 0.40
+Nodes (5): Popup Close (X) Button, top-right corner, Student Rotation Popup Screenshot, OK Button (Enter-bound) below student list, Visited Student List Popup ("案内"), 訪問した生徒リスト (Visited Student List row of 5 avatars)
+
+### Community 10 - "Shop Automation (Planned)"
+Cohesion: 0.50
+Nodes (4): baas module/shop/common_shop.py, baas module/shop/shop_utils.py, baas module/shop/tactical_challenge_shop.py, Common Shop + Tactical (Arena) Shop feature
+
+### Community 11 - "Sparkle Zoomed-Out Calibration"
+Cohesion: 0.50
+Nodes (4): Cafe HUD (currency, comfort/kaitekido 5500, income 0.0%, timer 17:41:20), Cafe Room Interior (Zoomed Out, Full Layout), Yellow/White Affection Sparkle (visible near plush character), Cafe Zoomed-Out Calibration Screenshot
+
+### Community 12 - "Student Rank-Up Popup Stage 1"
+Cohesion: 0.67
+Nodes (4): Bond Rank Heart Indicator (Rank 4), Conditional Rank-Up Popup Close (Automation Gap), Student Bond Rank-Up Popup Screenshot, "Attack +12" Stat Boost Banner
+
+### Community 13 - "Sparkle Template Asset"
+Cohesion: 1.00
+Nodes (3): Cafe Affection Sparkle UI Element, Cafe Sparkle Template Image, Yellow/White Sparkle Color Signature
+
+### Community 14 - "Group/Mini Story (Planned)"
+Cohesion: 0.67
+Nodes (3): baas module/group_story.py, baas module/mini_story.py, Group Story / Mini Story cleanup feature
+
+### Community 15 - "Student Rank-Up Popup Stage 2"
+Cohesion: 1.00
+Nodes (3): Bond Rank-Up Popup UI (絆ランクアップ! banner over portrait, stat-gain footer), Depicted Student (white/silver-haired, halo motif, off-shoulder outfit, Max HP +144), Rank-Up Popup Screenshot (Student B, Bond Rank 4, Max HP +144)
+
+## Ambiguous Edges - Review These
+- `Cafe Room 2 Reference Screenshot` → `Green Swirl Markers Above Two Students (possible status/affection indicator)` [AMBIGUOUS]
+ screenshots/cafe/room2.png · relation: conceptually_related_to
+
+## Knowledge Gaps
+- **78 isolated node(s):** `DISPLAY`, `XAUTHORITY`, `nik-macbookair (macOS development machine)`, `opencv-python dependency`, `numpy dependency` (+73 more)
+ These have ≤1 connection - possible missing edges or undocumented components.
+- **7 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
+
+## Suggested Questions
+_Questions this graph is uniquely positioned to answer:_
+
+- **What is the exact relationship between `Cafe Room 2 Reference Screenshot` and `Green Swirl Markers Above Two Students (possible status/affection indicator)`?**
+ _Edge tagged AMBIGUOUS (relation: conceptually_related_to) - confidence is low._
+- **Why does `do_cafe()` connect `ba_dailies.sh Script & Cafe Claim` to `Detection Pipeline & Architecture`, `Game Main Screen UI`, `Combat/Story Feature Roadmap`, `Cafe Income Popup UI`?**
+ _High betweenness centrality (0.216) - this node is a cross-community bridge._
+- **Why does `ba-auto-daily Implementation Plan` connect `Combat/Story Feature Roadmap` to `ba_dailies.sh Script & Cafe Claim`?**
+ _High betweenness centrality (0.148) - this node is a cross-community bridge._
+- **Why does `detect_and_click.py (color-masked template-match sparkle detector/clicker)` connect `Detection Pipeline & Architecture` to `ba_dailies.sh Script & Cafe Claim`?**
+ _High betweenness centrality (0.114) - this node is a cross-community bridge._
+- **Are the 5 inferred relationships involving `do_cafe()` (e.g. with `Lesson/Schedule (affection farming via classes) feature` and `Cafe Reward Menu Popup Screenshot`) actually correct?**
+ _`do_cafe()` has 5 INFERRED edges - model-reasoned connections that need verification._
+- **What connects `DISPLAY`, `XAUTHORITY`, `nik-macbookair (macOS development machine)` to the rest of the system?**
+ _86 weakly-connected nodes found - possible documentation gaps or missing edges._
+- **Should `Detection Pipeline & Architecture` be split into smaller, more focused modules?**
+ _Cohesion score 0.10461538461538461 - nodes in this community are weakly interconnected._
\ No newline at end of file
diff --git a/graphify-out/graph.html b/graphify-out/graph.html
new file mode 100644
index 0000000..9b10a42
--- /dev/null
+++ b/graphify-out/graph.html
@@ -0,0 +1,307 @@
+
+
+
+
+graphify - graphify-out/graph.html
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/graphify-out/graph.json b/graphify-out/graph.json
new file mode 100644
index 0000000..d55ad5f
--- /dev/null
+++ b/graphify-out/graph.json
@@ -0,0 +1,3937 @@
+{
+ "directed": false,
+ "multigraph": false,
+ "graph": {
+ "hyperedges": [
+ {
+ "id": "tier1_no_ocr_features",
+ "label": "Tier 1 \u2014 high-priority, no-OCR-needed features",
+ "nodes": [
+ "plan_stamina_ap_sweep",
+ "plan_club_group_ap_claim",
+ "plan_momo_talk"
+ ],
+ "relation": "form",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md"
+ },
+ {
+ "id": "tier2_sweep_style_features",
+ "label": "Tier 2 \u2014 sweep-style AP consumption features sharing the buy-tickets/sweep-N-times/color-detect shape",
+ "nodes": [
+ "plan_commissions",
+ "plan_scrimmage",
+ "plan_bounty",
+ "plan_story_ap_sweep"
+ ],
+ "relation": "form",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md"
+ },
+ {
+ "id": "cafe_automation_pipeline",
+ "label": "Cafe sparkle-click automation pipeline (focus -> loop-detect-click -> claim)",
+ "nodes": [
+ "ba_dailies_script",
+ "ba_dailies_focus_game",
+ "ba_dailies_do_cafe",
+ "scripts_detect_and_click_script",
+ "assets_cafe_sparkle_image"
+ ],
+ "relation": "participate_in",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "CLAUDE.md"
+ }
+ ]
+ },
+ "nodes": [
+ {
+ "label": "ba_dailies.sh",
+ "file_type": "code",
+ "source_file": "ba_dailies.sh",
+ "source_location": "L1",
+ "metadata": {
+ "language": "bash",
+ "kind": "file"
+ },
+ "_origin": "ast",
+ "id": "ba_dailies",
+ "community": 1,
+ "norm_label": "ba_dailies.sh"
+ },
+ {
+ "label": "ba_dailies.sh script",
+ "file_type": "code",
+ "source_file": "ba_dailies.sh",
+ "source_location": "L1",
+ "metadata": {
+ "language": "bash",
+ "kind": "bash_entrypoint"
+ },
+ "_origin": "ast",
+ "id": "ba_dailies_sh__entry",
+ "community": 1,
+ "norm_label": "ba_dailies.sh script"
+ },
+ {
+ "label": "DISPLAY",
+ "file_type": "code",
+ "source_file": "ba_dailies.sh",
+ "source_location": "L2",
+ "metadata": {
+ "language": "bash",
+ "kind": "code"
+ },
+ "_origin": "ast",
+ "id": "ba_dailies_display",
+ "community": 1,
+ "norm_label": "display"
+ },
+ {
+ "label": "XAUTHORITY",
+ "file_type": "code",
+ "source_file": "ba_dailies.sh",
+ "source_location": "L3",
+ "metadata": {
+ "language": "bash",
+ "kind": "code"
+ },
+ "_origin": "ast",
+ "id": "ba_dailies_xauthority",
+ "community": 1,
+ "norm_label": "xauthority"
+ },
+ {
+ "label": "get_window()",
+ "file_type": "code",
+ "source_file": "ba_dailies.sh",
+ "source_location": "L16",
+ "metadata": {
+ "language": "bash",
+ "kind": "bash_function"
+ },
+ "_origin": "ast",
+ "id": "ba_dailies_get_window",
+ "community": 1,
+ "norm_label": "get_window()"
+ },
+ {
+ "label": "click()",
+ "file_type": "code",
+ "source_file": "ba_dailies.sh",
+ "source_location": "L20",
+ "metadata": {
+ "language": "bash",
+ "kind": "bash_function"
+ },
+ "_origin": "ast",
+ "id": "ba_dailies_click",
+ "community": 1,
+ "norm_label": "click()"
+ },
+ {
+ "label": "press_enter()",
+ "file_type": "code",
+ "source_file": "ba_dailies.sh",
+ "source_location": "L26",
+ "metadata": {
+ "language": "bash",
+ "kind": "bash_function"
+ },
+ "_origin": "ast",
+ "id": "ba_dailies_press_enter",
+ "community": 1,
+ "norm_label": "press_enter()"
+ },
+ {
+ "label": "press_esc()",
+ "file_type": "code",
+ "source_file": "ba_dailies.sh",
+ "source_location": "L31",
+ "metadata": {
+ "language": "bash",
+ "kind": "bash_function"
+ },
+ "_origin": "ast",
+ "id": "ba_dailies_press_esc",
+ "community": 1,
+ "norm_label": "press_esc()"
+ },
+ {
+ "label": "focus_game()",
+ "file_type": "code",
+ "source_file": "ba_dailies.sh",
+ "source_location": "L36",
+ "metadata": {
+ "language": "bash",
+ "kind": "bash_function"
+ },
+ "_origin": "ast",
+ "id": "ba_dailies_focus_game",
+ "community": 1,
+ "norm_label": "focus_game()"
+ },
+ {
+ "label": "do_mailbox()",
+ "file_type": "code",
+ "source_file": "ba_dailies.sh",
+ "source_location": "L47",
+ "metadata": {
+ "language": "bash",
+ "kind": "bash_function"
+ },
+ "_origin": "ast",
+ "id": "ba_dailies_do_mailbox",
+ "community": 1,
+ "norm_label": "do_mailbox()"
+ },
+ {
+ "label": "do_cafe_room()",
+ "file_type": "code",
+ "source_file": "ba_dailies.sh",
+ "source_location": "L63",
+ "metadata": {
+ "language": "bash",
+ "kind": "bash_function"
+ },
+ "_origin": "ast",
+ "id": "ba_dailies_do_cafe_room",
+ "community": 1,
+ "norm_label": "do_cafe_room()"
+ },
+ {
+ "label": "do_cafe()",
+ "file_type": "code",
+ "source_file": "ba_dailies.sh",
+ "source_location": "L74",
+ "metadata": {
+ "language": "bash",
+ "kind": "bash_function"
+ },
+ "_origin": "ast",
+ "id": "ba_dailies_do_cafe",
+ "community": 1,
+ "norm_label": "do_cafe()"
+ },
+ {
+ "label": "detect_and_click.py",
+ "file_type": "code",
+ "source_file": "scripts/detect_and_click.py",
+ "source_location": "L1",
+ "_origin": "ast",
+ "id": "scripts_detect_and_click",
+ "community": 4,
+ "norm_label": "detect_and_click.py"
+ },
+ {
+ "label": "screenshot()",
+ "file_type": "code",
+ "source_file": "scripts/detect_and_click.py",
+ "source_location": "L26",
+ "_origin": "ast",
+ "id": "scripts_detect_and_click_screenshot",
+ "community": 4,
+ "norm_label": "screenshot()"
+ },
+ {
+ "label": "find_sparkles()",
+ "file_type": "code",
+ "source_file": "scripts/detect_and_click.py",
+ "source_location": "L33",
+ "_origin": "ast",
+ "id": "scripts_detect_and_click_find_sparkles",
+ "community": 4,
+ "norm_label": "find_sparkles()"
+ },
+ {
+ "label": "click()",
+ "file_type": "code",
+ "source_file": "scripts/detect_and_click.py",
+ "source_location": "L53",
+ "_origin": "ast",
+ "id": "scripts_detect_and_click_click",
+ "community": 4,
+ "norm_label": "click()"
+ },
+ {
+ "label": "CLAUDE.md \u2014 Project Guidance for ba-auto-daily",
+ "file_type": "document",
+ "source_file": "CLAUDE.md",
+ "source_location": "L1-3",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "claude_overview",
+ "community": 0,
+ "norm_label": "claude.md \u2014 project guidance for ba-auto-daily"
+ },
+ {
+ "label": "Two-machine architecture (dev on macOS, run on nik-gpu)",
+ "file_type": "rationale",
+ "source_file": "CLAUDE.md",
+ "source_location": "L9-11",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "claude_two_machine_architecture",
+ "community": 0,
+ "norm_label": "two-machine architecture (dev on macos, run on nik-gpu)"
+ },
+ {
+ "label": "nik-macbookair (macOS development machine)",
+ "file_type": "concept",
+ "source_file": "CLAUDE.md",
+ "source_location": "L11",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "claude_nik_macbookair",
+ "community": 0,
+ "norm_label": "nik-macbookair (macos development machine)"
+ },
+ {
+ "label": "nik-gpu (Linux box running the Blue Archive client and X display)",
+ "file_type": "concept",
+ "source_file": "CLAUDE.md",
+ "source_location": "L11",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "claude_nik_gpu",
+ "community": 0,
+ "norm_label": "nik-gpu (linux box running the blue archive client and x display)"
+ },
+ {
+ "label": "scp/rsync + ssh deployment of scripts/assets to nik-gpu",
+ "file_type": "rationale",
+ "source_file": "CLAUDE.md",
+ "source_location": "L13-15",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "claude_deployment_pipeline",
+ "community": 0,
+ "norm_label": "scp/rsync + ssh deployment of scripts/assets to nik-gpu"
+ },
+ {
+ "label": "Single local screenshot->detect->click pipeline on nik-gpu (avoids SSH round-trip for the fast-moving sparkle)",
+ "file_type": "rationale",
+ "source_file": "CLAUDE.md",
+ "source_location": "L16",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "claude_local_detection_pipeline",
+ "community": 0,
+ "norm_label": "single local screenshot->detect->click pipeline on nik-gpu (avoids ssh round-trip for the fast-moving sparkle)"
+ },
+ {
+ "label": "screenshots/ reference-capture directory",
+ "file_type": "concept",
+ "source_file": "CLAUDE.md",
+ "source_location": "L17",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "claude_screenshots_dir",
+ "community": 0,
+ "norm_label": "screenshots/ reference-capture directory"
+ },
+ {
+ "label": "./scratchpad working-file convention",
+ "file_type": "concept",
+ "source_file": "CLAUDE.md",
+ "source_location": "L38",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "claude_scratchpad_dir",
+ "community": 0,
+ "norm_label": "./scratchpad working-file convention"
+ },
+ {
+ "label": "~/.venvs/ba-auto-daily Python venv (opencv-python, numpy)",
+ "file_type": "concept",
+ "source_file": "CLAUDE.md",
+ "source_location": "L15,30",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "claude_venv",
+ "community": 0,
+ "norm_label": "~/.venvs/ba-auto-daily python venv (opencv-python, numpy)"
+ },
+ {
+ "label": "xdotool (window focus, clicks, keypresses dependency)",
+ "file_type": "concept",
+ "source_file": "CLAUDE.md",
+ "source_location": "L28",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "claude_xdotool",
+ "community": 0,
+ "norm_label": "xdotool (window focus, clicks, keypresses dependency)"
+ },
+ {
+ "label": "scrot (screenshot capture dependency)",
+ "file_type": "concept",
+ "source_file": "CLAUDE.md",
+ "source_location": "L29",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "claude_scrot",
+ "community": 0,
+ "norm_label": "scrot (screenshot capture dependency)"
+ },
+ {
+ "label": "opencv-python dependency",
+ "file_type": "concept",
+ "source_file": "CLAUDE.md",
+ "source_location": "L30",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "claude_opencv_python",
+ "community": 0,
+ "norm_label": "opencv-python dependency"
+ },
+ {
+ "label": "numpy dependency",
+ "file_type": "concept",
+ "source_file": "CLAUDE.md",
+ "source_location": "L30",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "claude_numpy",
+ "community": 0,
+ "norm_label": "numpy dependency"
+ },
+ {
+ "label": "Known gap: unconfirmed rotated-student popup / zoom-center / rank-up popup handling in do_cafe",
+ "file_type": "rationale",
+ "source_file": "CLAUDE.md",
+ "source_location": "L51",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "claude_known_gap_cafe_flow",
+ "community": 2,
+ "norm_label": "known gap: unconfirmed rotated-student popup / zoom-center / rank-up popup handling in do_cafe"
+ },
+ {
+ "label": "Performance note: per-attempt Python/OpenCV cold start (200-500ms) risk against a fast-moving sparkle",
+ "file_type": "rationale",
+ "source_file": "CLAUDE.md",
+ "source_location": "L59",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "claude_performance_note_cold_start",
+ "community": 0,
+ "norm_label": "performance note: per-attempt python/opencv cold start (200-500ms) risk against a fast-moving sparkle"
+ },
+ {
+ "label": "ba_dailies.sh (entry-point automation script)",
+ "file_type": "code",
+ "source_file": "CLAUDE.md",
+ "source_location": "L40-49",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "ba_dailies_script",
+ "community": 1,
+ "norm_label": "ba_dailies.sh (entry-point automation script)"
+ },
+ {
+ "label": "CAFE_MAX_CLICKS_PER_ROOM constant",
+ "file_type": "code",
+ "source_file": "CLAUDE.md",
+ "source_location": "L49",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "ba_dailies_cafe_max_clicks_per_room",
+ "community": 1,
+ "norm_label": "cafe_max_clicks_per_room constant"
+ },
+ {
+ "label": "detect_and_click.py (color-masked template-match sparkle detector/clicker)",
+ "file_type": "code",
+ "source_file": "CLAUDE.md",
+ "source_location": "L53-55",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "scripts_detect_and_click_script",
+ "community": 0,
+ "norm_label": "detect_and_click.py (color-masked template-match sparkle detector/clicker)"
+ },
+ {
+ "label": "THRESHOLD = 0.97 (match-confidence constant)",
+ "file_type": "code",
+ "source_file": "CLAUDE.md",
+ "source_location": "L57",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "scripts_detect_and_click_threshold",
+ "community": 0,
+ "norm_label": "threshold = 0.97 (match-confidence constant)"
+ },
+ {
+ "label": "OFFSET_X (click-point offset correction, x-axis)",
+ "file_type": "code",
+ "source_file": "CLAUDE.md",
+ "source_location": "L57",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "scripts_detect_and_click_offset_x",
+ "community": 0,
+ "norm_label": "offset_x (click-point offset correction, x-axis)"
+ },
+ {
+ "label": "OFFSET_Y (click-point offset correction, y-axis)",
+ "file_type": "code",
+ "source_file": "CLAUDE.md",
+ "source_location": "L57",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "scripts_detect_and_click_offset_y",
+ "community": 0,
+ "norm_label": "offset_y (click-point offset correction, y-axis)"
+ },
+ {
+ "label": "cafe_sparkle.png (template image for sparkle detection)",
+ "file_type": "image",
+ "source_file": "CLAUDE.md",
+ "source_location": "L14,55",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "assets_cafe_sparkle_image",
+ "community": 0,
+ "norm_label": "cafe_sparkle.png (template image for sparkle detection)"
+ },
+ {
+ "label": "ba-auto-daily Implementation Plan",
+ "file_type": "document",
+ "source_file": "plan.md",
+ "source_location": "L1-5",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "plan_overview",
+ "community": 2,
+ "norm_label": "ba-auto-daily implementation plan"
+ },
+ {
+ "label": "baas reference project (pur1fying/blue_archive_auto_script, GPL-3.0, read-only research reference)",
+ "file_type": "concept",
+ "source_file": "plan.md",
+ "source_location": "L7-12",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "plan_baas_reference",
+ "community": 2,
+ "norm_label": "baas reference project (pur1fying/blue_archive_auto_script, gpl-3.0, read-only research reference)"
+ },
+ {
+ "label": "OCR prerequisite (Tesseract vs PaddleOCR, not yet set up)",
+ "file_type": "concept",
+ "source_file": "plan.md",
+ "source_location": "L24-27",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "plan_ocr_prerequisite",
+ "community": 2,
+ "norm_label": "ocr prerequisite (tesseract vs paddleocr, not yet set up)"
+ },
+ {
+ "label": "Auto-fight primitive (shared start-fight/max-speed/auto-mode/detect-result routine)",
+ "file_type": "concept",
+ "source_file": "plan.md",
+ "source_location": "L28-31",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "plan_auto_fight_primitive",
+ "community": 2,
+ "norm_label": "auto-fight primitive (shared start-fight/max-speed/auto-mode/detect-result routine)"
+ },
+ {
+ "label": "Stamina/AP sweep feature (free 10 AP + task-menu rewards)",
+ "file_type": "concept",
+ "source_file": "plan.md",
+ "source_location": "L37-41",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "plan_stamina_ap_sweep",
+ "community": 3,
+ "norm_label": "stamina/ap sweep feature (free 10 ap + task-menu rewards)"
+ },
+ {
+ "label": "Club/Group AP claim feature",
+ "file_type": "concept",
+ "source_file": "plan.md",
+ "source_location": "L43-45",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "plan_club_group_ap_claim",
+ "community": 18,
+ "norm_label": "club/group ap claim feature"
+ },
+ {
+ "label": "Momo Talk (chat app conversations + relationship rank-up beats) automation feature",
+ "file_type": "concept",
+ "source_file": "plan.md",
+ "source_location": "L47-52",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "plan_momo_talk",
+ "community": 2,
+ "norm_label": "momo talk (chat app conversations + relationship rank-up beats) automation feature"
+ },
+ {
+ "label": "Commissions (Special Task / \u59d4\u8a17) feature",
+ "file_type": "concept",
+ "source_file": "plan.md",
+ "source_location": "L63-65",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "plan_commissions",
+ "community": 3,
+ "norm_label": "commissions (special task / \u59d4\u8a17) feature"
+ },
+ {
+ "label": "Scrimmage (\u5b66\u9662\u4ea4\u6d41\u4f1a) feature",
+ "file_type": "concept",
+ "source_file": "plan.md",
+ "source_location": "L67-69",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "plan_scrimmage",
+ "community": 3,
+ "norm_label": "scrimmage (\u5b66\u9662\u4ea4\u6d41\u4f1a) feature"
+ },
+ {
+ "label": "Bounty (Rewarded Task / \u60ac\u8d4f\u901a\u7f09) feature",
+ "file_type": "concept",
+ "source_file": "plan.md",
+ "source_location": "L71-74",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "plan_bounty",
+ "community": 3,
+ "norm_label": "bounty (rewarded task / \u60ac\u8d4f\u901a\u7f09) feature"
+ },
+ {
+ "label": "Normal/Hard story AP sweep feature (re-clear cleared stages)",
+ "file_type": "concept",
+ "source_file": "plan.md",
+ "source_location": "L76-80",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "plan_story_ap_sweep",
+ "community": 3,
+ "norm_label": "normal/hard story ap sweep feature (re-clear cleared stages)"
+ },
+ {
+ "label": "Battle Pass claim feature",
+ "file_type": "concept",
+ "source_file": "plan.md",
+ "source_location": "L88-91",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "plan_battle_pass_claim",
+ "community": 16,
+ "norm_label": "battle pass claim feature"
+ },
+ {
+ "label": "Common Shop + Tactical (Arena) Shop feature",
+ "file_type": "concept",
+ "source_file": "plan.md",
+ "source_location": "L93-97",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "plan_common_shop_tactical_shop",
+ "community": 10,
+ "norm_label": "common shop + tactical (arena) shop feature"
+ },
+ {
+ "label": "Arena (PvP ladder) feature",
+ "file_type": "concept",
+ "source_file": "plan.md",
+ "source_location": "L99-104",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "plan_arena",
+ "community": 2,
+ "norm_label": "arena (pvp ladder) feature"
+ },
+ {
+ "label": "Lesson/Schedule (affection farming via classes) feature",
+ "file_type": "concept",
+ "source_file": "plan.md",
+ "source_location": "L110-117",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "plan_lesson_schedule",
+ "community": 1,
+ "norm_label": "lesson/schedule (affection farming via classes) feature"
+ },
+ {
+ "label": "Crafting (\u81ea\u52a8\u5236\u9020) feature",
+ "file_type": "concept",
+ "source_file": "plan.md",
+ "source_location": "L119-124",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "plan_crafting",
+ "community": 17,
+ "norm_label": "crafting (\u81ea\u52a8\u5236\u9020) feature"
+ },
+ {
+ "label": "Main story / Normal-Hard story push (auto-clear next uncleared stage) feature",
+ "file_type": "concept",
+ "source_file": "plan.md",
+ "source_location": "L126-132",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "plan_main_story_push",
+ "community": 2,
+ "norm_label": "main story / normal-hard story push (auto-clear next uncleared stage) feature"
+ },
+ {
+ "label": "Group Story / Mini Story cleanup feature",
+ "file_type": "concept",
+ "source_file": "plan.md",
+ "source_location": "L134-137",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "plan_group_mini_story",
+ "community": 14,
+ "norm_label": "group story / mini story cleanup feature"
+ },
+ {
+ "label": "Event content (Activities) sweep feature",
+ "file_type": "concept",
+ "source_file": "plan.md",
+ "source_location": "L139-147",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "plan_event_content",
+ "community": 3,
+ "norm_label": "event content (activities) sweep feature"
+ },
+ {
+ "label": "Skip: Total Assault (raid) \u2014 stubbed/dead upstream code, disabled by default",
+ "file_type": "rationale",
+ "source_file": "plan.md",
+ "source_location": "L155",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "plan_skip_total_assault",
+ "community": 2,
+ "norm_label": "skip: total assault (raid) \u2014 stubbed/dead upstream code, disabled by default"
+ },
+ {
+ "label": "Skip: Joint Firing Drill (\u7efc\u5408\u6218\u672f\u6d4b\u8bd5) \u2014 hard-disabled for JP server upstream",
+ "file_type": "rationale",
+ "source_file": "plan.md",
+ "source_location": "L156",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "plan_skip_joint_firing_drill",
+ "community": 2,
+ "norm_label": "skip: joint firing drill (\u7efc\u5408\u6218\u672f\u6d4b\u8bd5) \u2014 hard-disabled for jp server upstream"
+ },
+ {
+ "label": "Skip: De-clothes localization toggle \u2014 CN-only",
+ "file_type": "rationale",
+ "source_file": "plan.md",
+ "source_location": "L157",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "plan_skip_declothes_toggle",
+ "community": 2,
+ "norm_label": "skip: de-clothes localization toggle \u2014 cn-only"
+ },
+ {
+ "label": "Skip: Restart/refresh-uiautomator2 \u2014 Android/ADB housekeeping, not applicable to PC/Steam/Proton",
+ "file_type": "rationale",
+ "source_file": "plan.md",
+ "source_location": "L158",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "plan_skip_restart_uiautomator2",
+ "community": 2,
+ "norm_label": "skip: restart/refresh-uiautomator2 \u2014 android/adb housekeeping, not applicable to pc/steam/proton"
+ },
+ {
+ "label": "Skip: Auto-unfriend \u2014 disabled by default upstream, low value and risky",
+ "file_type": "rationale",
+ "source_file": "plan.md",
+ "source_location": "L159",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "plan_skip_auto_unfriend",
+ "community": 2,
+ "norm_label": "skip: auto-unfriend \u2014 disabled by default upstream, low value and risky"
+ },
+ {
+ "label": "Skip: Daily minigame dispatcher \u2014 event-specific, not a stable feature to pre-build",
+ "file_type": "rationale",
+ "source_file": "plan.md",
+ "source_location": "L160",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "plan_skip_daily_minigame_dispatcher",
+ "community": 2,
+ "norm_label": "skip: daily minigame dispatcher \u2014 event-specific, not a stable feature to pre-build"
+ },
+ {
+ "label": "Cadence notes (cafe/Momo ~3h, Arena resets 06:00/20:00 UTC, rest reset 20:00 UTC)",
+ "file_type": "concept",
+ "source_file": "plan.md",
+ "source_location": "L164-170",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "plan_cadence_notes",
+ "community": 2,
+ "norm_label": "cadence notes (cafe/momo ~3h, arena resets 06:00/20:00 utc, rest reset 20:00 utc)"
+ },
+ {
+ "label": "baas module/main_story.py (auto_fight/enter_battle)",
+ "file_type": "code",
+ "source_file": "plan.md",
+ "source_location": "L31,132",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "baas_module_main_story",
+ "community": 2,
+ "norm_label": "baas module/main_story.py (auto_fight/enter_battle)"
+ },
+ {
+ "label": "baas module/collect_daily_free_power.py",
+ "file_type": "code",
+ "source_file": "plan.md",
+ "source_location": "L41",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "baas_module_collect_daily_free_power",
+ "community": 3,
+ "norm_label": "baas module/collect_daily_free_power.py"
+ },
+ {
+ "label": "baas module/collect_daily_task_power.py",
+ "file_type": "code",
+ "source_file": "plan.md",
+ "source_location": "L41",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "baas_module_collect_daily_task_power",
+ "community": 3,
+ "norm_label": "baas module/collect_daily_task_power.py"
+ },
+ {
+ "label": "baas module/group.py (29 lines)",
+ "file_type": "code",
+ "source_file": "plan.md",
+ "source_location": "L45",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "baas_module_group",
+ "community": 18,
+ "norm_label": "baas module/group.py (29 lines)"
+ },
+ {
+ "label": "baas module/momo_talk.py (183 lines, getConversationState)",
+ "file_type": "code",
+ "source_file": "plan.md",
+ "source_location": "L52",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "baas_module_momo_talk",
+ "community": 2,
+ "norm_label": "baas module/momo_talk.py (183 lines, getconversationstate)"
+ },
+ {
+ "label": "baas module/clear_special_task_power.py (148 lines)",
+ "file_type": "code",
+ "source_file": "plan.md",
+ "source_location": "L65",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "baas_module_clear_special_task_power",
+ "community": 3,
+ "norm_label": "baas module/clear_special_task_power.py (148 lines)"
+ },
+ {
+ "label": "baas module/scrimmage.py (166 lines)",
+ "file_type": "code",
+ "source_file": "plan.md",
+ "source_location": "L69",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "baas_module_scrimmage",
+ "community": 3,
+ "norm_label": "baas module/scrimmage.py (166 lines)"
+ },
+ {
+ "label": "baas module/rewarded_task.py (204 lines)",
+ "file_type": "code",
+ "source_file": "plan.md",
+ "source_location": "L74",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "baas_module_rewarded_task",
+ "community": 3,
+ "norm_label": "baas module/rewarded_task.py (204 lines)"
+ },
+ {
+ "label": "baas module/explore_tasks/sweep_task.py",
+ "file_type": "code",
+ "source_file": "plan.md",
+ "source_location": "L80",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "baas_module_explore_tasks_sweep_task",
+ "community": 3,
+ "norm_label": "baas module/explore_tasks/sweep_task.py"
+ },
+ {
+ "label": "baas module/explore_tasks/task_utils.py",
+ "file_type": "code",
+ "source_file": "plan.md",
+ "source_location": "L80",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "baas_module_explore_tasks_task_utils",
+ "community": 3,
+ "norm_label": "baas module/explore_tasks/task_utils.py"
+ },
+ {
+ "label": "baas module/collect_pass_reward.py (146 lines)",
+ "file_type": "code",
+ "source_file": "plan.md",
+ "source_location": "L91",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "baas_module_collect_pass_reward",
+ "community": 16,
+ "norm_label": "baas module/collect_pass_reward.py (146 lines)"
+ },
+ {
+ "label": "baas module/shop/common_shop.py",
+ "file_type": "code",
+ "source_file": "plan.md",
+ "source_location": "L96-97",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "baas_module_shop_common_shop",
+ "community": 10,
+ "norm_label": "baas module/shop/common_shop.py"
+ },
+ {
+ "label": "baas module/shop/tactical_challenge_shop.py",
+ "file_type": "code",
+ "source_file": "plan.md",
+ "source_location": "L96-97",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "baas_module_shop_tactical_challenge_shop",
+ "community": 10,
+ "norm_label": "baas module/shop/tactical_challenge_shop.py"
+ },
+ {
+ "label": "baas module/shop/shop_utils.py",
+ "file_type": "code",
+ "source_file": "plan.md",
+ "source_location": "L96-97",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "baas_module_shop_shop_utils",
+ "community": 10,
+ "norm_label": "baas module/shop/shop_utils.py"
+ },
+ {
+ "label": "baas module/arena.py (173 lines)",
+ "file_type": "code",
+ "source_file": "plan.md",
+ "source_location": "L104",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "baas_module_arena",
+ "community": 2,
+ "norm_label": "baas module/arena.py (173 lines)"
+ },
+ {
+ "label": "baas module/lesson.py (615 lines)",
+ "file_type": "code",
+ "source_file": "plan.md",
+ "source_location": "L117",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "baas_module_lesson",
+ "community": 1,
+ "norm_label": "baas module/lesson.py (615 lines)"
+ },
+ {
+ "label": "baas module/create.py (1028 lines)",
+ "file_type": "code",
+ "source_file": "plan.md",
+ "source_location": "L124",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "baas_module_create",
+ "community": 17,
+ "norm_label": "baas module/create.py (1028 lines)"
+ },
+ {
+ "label": "baas module/explore_tasks/explore_task.py",
+ "file_type": "code",
+ "source_file": "plan.md",
+ "source_location": "L132",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "baas_module_explore_tasks_explore_task",
+ "community": 2,
+ "norm_label": "baas module/explore_tasks/explore_task.py"
+ },
+ {
+ "label": "baas module/group_story.py",
+ "file_type": "code",
+ "source_file": "plan.md",
+ "source_location": "L137",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "baas_module_group_story",
+ "community": 14,
+ "norm_label": "baas module/group_story.py"
+ },
+ {
+ "label": "baas module/mini_story.py",
+ "file_type": "code",
+ "source_file": "plan.md",
+ "source_location": "L137",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "baas_module_mini_story",
+ "community": 14,
+ "norm_label": "baas module/mini_story.py"
+ },
+ {
+ "label": "baas module/activities/activity_utils.py",
+ "file_type": "code",
+ "source_file": "plan.md",
+ "source_location": "L147",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "baas_module_activities_activity_utils",
+ "community": 3,
+ "norm_label": "baas module/activities/activity_utils.py"
+ },
+ {
+ "label": "baas module/sweep_activity.py",
+ "file_type": "code",
+ "source_file": "plan.md",
+ "source_location": "L147",
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "baas_module_sweep_activity",
+ "community": 3,
+ "norm_label": "baas module/sweep_activity.py"
+ },
+ {
+ "label": "Cafe Sparkle Template Image",
+ "file_type": "image",
+ "source_file": "assets/cafe_sparkle.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "assets_cafe_sparkle_sparkletemplate",
+ "community": 13,
+ "norm_label": "cafe sparkle template image"
+ },
+ {
+ "label": "Yellow/White Sparkle Color Signature",
+ "file_type": "concept",
+ "source_file": "assets/cafe_sparkle.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "assets_cafe_sparkle_yellow_white_sparkle_color",
+ "community": 13,
+ "norm_label": "yellow/white sparkle color signature"
+ },
+ {
+ "label": "Cafe Affection Sparkle UI Element",
+ "file_type": "concept",
+ "source_file": "assets/cafe_sparkle.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "assets_cafe_sparkle_affection_sparkle_ui_element",
+ "community": 13,
+ "norm_label": "cafe affection sparkle ui element"
+ },
+ {
+ "label": "Cafe Reward Screen Screenshot (Cursor on Top)",
+ "file_type": "image",
+ "source_file": "screenshots/cafe/cafe_reward/01_cafe_reward_cursor_on_top.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_cafe_reward_01_cafe_reward_cursor_on_top_screenshot",
+ "community": 7,
+ "norm_label": "cafe reward screen screenshot (cursor on top)"
+ },
+ {
+ "label": "Cafe Income Percentage Display (\u30ab\u30d5\u30a7\u306e\u53ce\u5165 8.3%)",
+ "file_type": "concept",
+ "source_file": "screenshots/cafe/cafe_reward/01_cafe_reward_cursor_on_top.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_cafe_reward_01_cafe_reward_cursor_on_top_cafe_income_display",
+ "community": 7,
+ "norm_label": "cafe income percentage display (\u30ab\u30d5\u30a7\u306e\u53ce\u5165 8.3%)"
+ },
+ {
+ "label": "Invitation Ticket Buttons (\u62db\u5f85\u5238 / \u8ffd\u52a0\u62db\u5f85\u5238) with Countdown Timer",
+ "file_type": "concept",
+ "source_file": "screenshots/cafe/cafe_reward/01_cafe_reward_cursor_on_top.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_cafe_reward_01_cafe_reward_cursor_on_top_invitation_tickets",
+ "community": 7,
+ "norm_label": "invitation ticket buttons (\u62db\u5f85\u5238 / \u8ffd\u52a0\u62db\u5f85\u5238) with countdown timer"
+ },
+ {
+ "label": "Comfort Level Meter (\u5feb\u9069\u5ea6 5500)",
+ "file_type": "concept",
+ "source_file": "screenshots/cafe/cafe_reward/01_cafe_reward_cursor_on_top.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_cafe_reward_01_cafe_reward_cursor_on_top_comfort_meter",
+ "community": 7,
+ "norm_label": "comfort level meter (\u5feb\u9069\u5ea6 5500)"
+ },
+ {
+ "label": "Cafe Room Interior Scene (furniture, students, train set)",
+ "file_type": "concept",
+ "source_file": "screenshots/cafe/cafe_reward/01_cafe_reward_cursor_on_top.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_cafe_reward_01_cafe_reward_cursor_on_top_cafe_room_scene",
+ "community": 7,
+ "norm_label": "cafe room interior scene (furniture, students, train set)"
+ },
+ {
+ "label": "Cafe Top Navigation Bar (AP / Gold / Gems, Back Button, Visit Buttons)",
+ "file_type": "concept",
+ "source_file": "screenshots/cafe/cafe_reward/01_cafe_reward_cursor_on_top.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_cafe_reward_01_cafe_reward_cursor_on_top_nav_bar",
+ "community": 7,
+ "norm_label": "cafe top navigation bar (ap / gold / gems, back button, visit buttons)"
+ },
+ {
+ "label": "Cafe Reward Menu Popup Screenshot",
+ "file_type": "image",
+ "source_file": "screenshots/cafe/cafe_reward/02_cafe_reward_menu_popup.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_cafe_reward_02_cafe_reward_menu_popup",
+ "community": 5,
+ "norm_label": "cafe reward menu popup screenshot"
+ },
+ {
+ "label": "Cafe Income Popup (\u30ab\u30d5\u30a7\u306e\u53ce\u5165)",
+ "file_type": "image",
+ "source_file": "screenshots/cafe/cafe_reward/02_cafe_reward_menu_popup.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_cafe_reward_02_cafe_reward_menu_popup_cafeincomepopup",
+ "community": 5,
+ "norm_label": "cafe income popup (\u30ab\u30d5\u30a7\u306e\u53ce\u5165)"
+ },
+ {
+ "label": "Receive Button (\u53d7\u53d6 / Enter)",
+ "file_type": "image",
+ "source_file": "screenshots/cafe/cafe_reward/02_cafe_reward_menu_popup.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_cafe_reward_02_cafe_reward_menu_popup_receivebutton",
+ "community": 5,
+ "norm_label": "receive button (\u53d7\u53d6 / enter)"
+ },
+ {
+ "label": "Popup Close Button (X)",
+ "file_type": "image",
+ "source_file": "screenshots/cafe/cafe_reward/02_cafe_reward_menu_popup.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_cafe_reward_02_cafe_reward_menu_popup_closebutton",
+ "community": 5,
+ "norm_label": "popup close button (x)"
+ },
+ {
+ "label": "Store 1 Credits Income Panel (1\u53f7\u5e97 Credits)",
+ "file_type": "image",
+ "source_file": "screenshots/cafe/cafe_reward/02_cafe_reward_menu_popup.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_cafe_reward_02_cafe_reward_menu_popup_store1creditscard",
+ "community": 5,
+ "norm_label": "store 1 credits income panel (1\u53f7\u5e97 credits)"
+ },
+ {
+ "label": "Store 1 AP Income Panel (1\u53f7\u5e97 AP)",
+ "file_type": "image",
+ "source_file": "screenshots/cafe/cafe_reward/02_cafe_reward_menu_popup.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_cafe_reward_02_cafe_reward_menu_popup_store1apincome",
+ "community": 5,
+ "norm_label": "store 1 ap income panel (1\u53f7\u5e97 ap)"
+ },
+ {
+ "label": "Store 2 Credits Income Panel (2\u53f7\u5e97 Credits)",
+ "file_type": "image",
+ "source_file": "screenshots/cafe/cafe_reward/02_cafe_reward_menu_popup.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_cafe_reward_02_cafe_reward_menu_popup_store2creditscard",
+ "community": 5,
+ "norm_label": "store 2 credits income panel (2\u53f7\u5e97 credits)"
+ },
+ {
+ "label": "Cafe Reward Claim Popup Screenshot",
+ "file_type": "image",
+ "source_file": "screenshots/cafe/cafe_reward/03_cafe_reward_claim_popup.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_cafe_reward_03_cafe_reward_claim_popup_screenshot",
+ "community": 1,
+ "norm_label": "cafe reward claim popup screenshot"
+ },
+ {
+ "label": "Reward Display Panel (Credit Points / AP)",
+ "file_type": "concept",
+ "source_file": "screenshots/cafe/cafe_reward/03_cafe_reward_claim_popup.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_cafe_reward_03_cafe_reward_claim_popup_reward_display",
+ "community": 1,
+ "norm_label": "reward display panel (credit points / ap)"
+ },
+ {
+ "label": "\u53d7\u53d6 (Claim) Button",
+ "file_type": "concept",
+ "source_file": "screenshots/cafe/cafe_reward/03_cafe_reward_claim_popup.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_cafe_reward_03_cafe_reward_claim_popup_claim_button",
+ "community": 1,
+ "norm_label": "\u53d7\u53d6 (claim) button"
+ },
+ {
+ "label": "Cafe Room 1 Reference Screenshot",
+ "file_type": "image",
+ "source_file": "screenshots/cafe/room1.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_room1_png",
+ "community": 6,
+ "norm_label": "cafe room 1 reference screenshot"
+ },
+ {
+ "label": "Cafe Room 1 Furniture Layout (train set, animal pen, swing, car, music stand)",
+ "file_type": "image",
+ "source_file": "screenshots/cafe/room1.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_room1_room_layout",
+ "community": 6,
+ "norm_label": "cafe room 1 furniture layout (train set, animal pen, swing, car, music stand)"
+ },
+ {
+ "label": "\"Move to Shop 2\" (2\u53f7\u5e97\u306b\u79fb\u52d5) Navigation Button",
+ "file_type": "image",
+ "source_file": "screenshots/cafe/room1.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_room1_room2_nav_button",
+ "community": 6,
+ "norm_label": "\"move to shop 2\" (2\u53f7\u5e97\u306b\u79fb\u52d5) navigation button"
+ },
+ {
+ "label": "Cafe Income (\u30ab\u30d5\u30a7\u306e\u53ce\u5165) and Comfort Level (\u5feb\u9069\u5ea6) Display",
+ "file_type": "image",
+ "source_file": "screenshots/cafe/room1.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_room1_income_comfort_display",
+ "community": 6,
+ "norm_label": "cafe income (\u30ab\u30d5\u30a7\u306e\u53ce\u5165) and comfort level (\u5feb\u9069\u5ea6) display"
+ },
+ {
+ "label": "Cafe Edit-Mode Bottom Toolbar (edit/gift/furniture-info/preset/store-all)",
+ "file_type": "image",
+ "source_file": "screenshots/cafe/room1.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_room1_edit_toolbar",
+ "community": 6,
+ "norm_label": "cafe edit-mode bottom toolbar (edit/gift/furniture-info/preset/store-all)"
+ },
+ {
+ "label": "Designated Visit / Random Visit Icons (\u6307\u5b9a\u8a2a\u554f\u30fb\u30e9\u30f3\u30c0\u30e0\u8a2a\u554f)",
+ "file_type": "image",
+ "source_file": "screenshots/cafe/room1.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_room1_visit_icons",
+ "community": 6,
+ "norm_label": "designated visit / random visit icons (\u6307\u5b9a\u8a2a\u554f\u30fb\u30e9\u30f3\u30bf\u30e0\u8a2a\u554f)"
+ },
+ {
+ "label": "Student Characters Scattered in Cafe Room 1 (potential sparkle click targets)",
+ "file_type": "image",
+ "source_file": "screenshots/cafe/room1.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_room1_students_present",
+ "community": 6,
+ "norm_label": "student characters scattered in cafe room 1 (potential sparkle click targets)"
+ },
+ {
+ "label": "Cafe Room 2 Reference Screenshot",
+ "file_type": "image",
+ "source_file": "screenshots/cafe/room2.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_room2_screenshot",
+ "community": 4,
+ "norm_label": "cafe room 2 reference screenshot"
+ },
+ {
+ "label": "Top HUD: AP / Gold / Gems Counters",
+ "file_type": "image",
+ "source_file": "screenshots/cafe/room2.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_room2_currency_hud",
+ "community": 4,
+ "norm_label": "top hud: ap / gold / gems counters"
+ },
+ {
+ "label": "Comfort Level Indicator (\u5feb\u9069\u5ea6 5500)",
+ "file_type": "image",
+ "source_file": "screenshots/cafe/room2.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_room2_comfort_meter",
+ "community": 4,
+ "norm_label": "comfort level indicator (\u5feb\u9069\u5ea6 5500)"
+ },
+ {
+ "label": "Cafe Income Rate Display (\u30ab\u30d5\u30a7\u306e\u53ce\u5165 4.1%)",
+ "file_type": "image",
+ "source_file": "screenshots/cafe/room2.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_room2_income_rate",
+ "community": 4,
+ "norm_label": "cafe income rate display (\u30ab\u30d5\u30a7\u306e\u53ce\u5165 4.1%)"
+ },
+ {
+ "label": "\"Move to Store 1\" Button (1\u53f7\u5e97\u306b\u79fb\u52d5)",
+ "file_type": "image",
+ "source_file": "screenshots/cafe/room2.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_room2_move_to_store1_button",
+ "community": 4,
+ "norm_label": "\"move to store 1\" button (1\u53f7\u5e97\u306b\u79fb\u52d5)"
+ },
+ {
+ "label": "Bottom Edit Toolbar (\u7de8\u96c6\u30e2\u30fc\u30c9 / \u8d08\u308a\u7269 / \u5bb6\u5177\u60c5\u5831 / \u30d7\u30ea\u30bb\u30c3\u30c8 / \u3059\u3079\u3066\u53ce\u7d0d)",
+ "file_type": "image",
+ "source_file": "screenshots/cafe/room2.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_room2_bottom_toolbar",
+ "community": 4,
+ "norm_label": "bottom edit toolbar (\u7de8\u96c6\u30e2\u30fc\u30c8 / \u8d08\u308a\u7269 / \u5bb6\u5177\u60c5\u5831 / \u30d5\u30ea\u30bb\u30c3\u30c8 / \u3059\u3078\u3066\u53ce\u7d0d)"
+ },
+ {
+ "label": "Student Characters Seated/Standing in Room 2",
+ "file_type": "image",
+ "source_file": "screenshots/cafe/room2.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_room2_students",
+ "community": 4,
+ "norm_label": "student characters seated/standing in room 2"
+ },
+ {
+ "label": "Invitation Ticket Purchase Prompt with Countdown Timer",
+ "file_type": "image",
+ "source_file": "screenshots/cafe/room2.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_room2_invitation_ticket_prompt",
+ "community": 4,
+ "norm_label": "invitation ticket purchase prompt with countdown timer"
+ },
+ {
+ "label": "Cafe Furnishings Layout (arcade cabinets, crane machine, sofas, plants)",
+ "file_type": "image",
+ "source_file": "screenshots/cafe/room2.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_room2_furnishings",
+ "community": 4,
+ "norm_label": "cafe furnishings layout (arcade cabinets, crane machine, sofas, plants)"
+ },
+ {
+ "label": "Visit Menu Buttons (\u6307\u5b9a\u8a2a\u554f / \u30e9\u30f3\u30c0\u30e0\u8a2a\u554f)",
+ "file_type": "image",
+ "source_file": "screenshots/cafe/room2.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_room2_visit_menu",
+ "community": 4,
+ "norm_label": "visit menu buttons (\u6307\u5b9a\u8a2a\u554f / \u30e9\u30f3\u30bf\u30e0\u8a2a\u554f)"
+ },
+ {
+ "label": "Green Swirl Markers Above Two Students (possible status/affection indicator)",
+ "file_type": "image",
+ "source_file": "screenshots/cafe/room2.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_room2_affection_marker_candidate",
+ "community": 4,
+ "norm_label": "green swirl markers above two students (possible status/affection indicator)"
+ },
+ {
+ "label": "Cafe View Zoomed and Centered (Calibration Screenshot)",
+ "file_type": "image",
+ "source_file": "screenshots/cafe/sparkle/01_sparke_zoomed_centered.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_sparkle_01_sparke_zoomed_centered_screenshot",
+ "community": 19,
+ "norm_label": "cafe view zoomed and centered (calibration screenshot)"
+ },
+ {
+ "label": "Zoomed/Centered Cafe View Precondition",
+ "file_type": "concept",
+ "source_file": "screenshots/cafe/sparkle/01_sparke_zoomed_centered.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_sparkle_01_sparke_zoomed_centered_precondition_state",
+ "community": 19,
+ "norm_label": "zoomed/centered cafe view precondition"
+ },
+ {
+ "label": "Sparkle Calibration Screenshot: Cursor on Student Head (Zoomed)",
+ "file_type": "image",
+ "source_file": "screenshots/cafe/sparkle/02_sparke_zoomed_cursor_on_head.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_sparkle_02_sparke_zoomed_cursor_on_head_image",
+ "community": 0,
+ "norm_label": "sparkle calibration screenshot: cursor on student head (zoomed)"
+ },
+ {
+ "label": "Cursor Position on Student's Head After Sparkle Click",
+ "file_type": "concept",
+ "source_file": "screenshots/cafe/sparkle/02_sparke_zoomed_cursor_on_head.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_sparkle_02_sparke_zoomed_cursor_on_head_cursoronhead",
+ "community": 0,
+ "norm_label": "cursor position on student's head after sparkle click"
+ },
+ {
+ "label": "Cafe Room UI Scene (zoomed, post-click state)",
+ "file_type": "concept",
+ "source_file": "screenshots/cafe/sparkle/02_sparke_zoomed_cursor_on_head.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_sparkle_02_sparke_zoomed_cursor_on_head_cafescene",
+ "community": 0,
+ "norm_label": "cafe room ui scene (zoomed, post-click state)"
+ },
+ {
+ "label": "Cafe Zoomed-Out Calibration Screenshot",
+ "file_type": "image",
+ "source_file": "screenshots/cafe/sparkle/03_sparkle_zoomed_out.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_sparkle_03_sparkle_zoomed_out_zoomedoutview",
+ "community": 11,
+ "norm_label": "cafe zoomed-out calibration screenshot"
+ },
+ {
+ "label": "Cafe Room Interior (Zoomed Out, Full Layout)",
+ "file_type": "image",
+ "source_file": "screenshots/cafe/sparkle/03_sparkle_zoomed_out.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_sparkle_03_sparkle_zoomed_out_caferoom",
+ "community": 11,
+ "norm_label": "cafe room interior (zoomed out, full layout)"
+ },
+ {
+ "label": "Yellow/White Affection Sparkle (visible near plush character)",
+ "file_type": "image",
+ "source_file": "screenshots/cafe/sparkle/03_sparkle_zoomed_out.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_sparkle_03_sparkle_zoomed_out_sparkleicon",
+ "community": 11,
+ "norm_label": "yellow/white affection sparkle (visible near plush character)"
+ },
+ {
+ "label": "Cafe HUD (currency, comfort/kaitekido 5500, income 0.0%, timer 17:41:20)",
+ "file_type": "image",
+ "source_file": "screenshots/cafe/sparkle/03_sparkle_zoomed_out.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_sparkle_03_sparkle_zoomed_out_cafehud",
+ "community": 11,
+ "norm_label": "cafe hud (currency, comfort/kaitekido 5500, income 0.0%, timer 17:41:20)"
+ },
+ {
+ "label": "Speech Bubble/Sparkle Text-Overlap Calibration Screenshot",
+ "file_type": "image",
+ "source_file": "screenshots/cafe/sparkle/04_sparke_speech_text_overlap.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_sparkle_04_sparke_speech_text_overlap_screenshot",
+ "community": 20,
+ "norm_label": "speech bubble/sparkle text-overlap calibration screenshot"
+ },
+ {
+ "label": "Speech Bubble Occlusion Edge Case (sparkle detection)",
+ "file_type": "concept",
+ "source_file": "screenshots/cafe/sparkle/04_sparke_speech_text_overlap.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_sparkle_04_sparke_speech_text_overlap_speechbubbleocclusion",
+ "community": 20,
+ "norm_label": "speech bubble occlusion edge case (sparkle detection)"
+ },
+ {
+ "label": "Sparkle Calibration Screenshot: Student Hidden",
+ "file_type": "image",
+ "source_file": "screenshots/cafe/sparkle/05_sparkle_student_hidden.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_sparkle_05_sparkle_student_hidden_screenshot",
+ "community": 0,
+ "norm_label": "sparkle calibration screenshot: student hidden"
+ },
+ {
+ "label": "Student/Sparkle Occlusion Edge Case",
+ "file_type": "concept",
+ "source_file": "screenshots/cafe/sparkle/05_sparkle_student_hidden.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_sparkle_05_sparkle_student_hidden_occlusionedgecase",
+ "community": 0,
+ "norm_label": "student/sparkle occlusion edge case"
+ },
+ {
+ "label": "Sparkle Detection Reliability",
+ "file_type": "concept",
+ "source_file": "screenshots/cafe/sparkle/05_sparkle_student_hidden.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_sparkle_05_sparkle_student_hidden_detectionreliability",
+ "community": 0,
+ "norm_label": "sparkle detection reliability"
+ },
+ {
+ "label": "cafe_sparkle.png Template Image",
+ "file_type": "image",
+ "source_file": "assets/cafe_sparkle.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "assets_cafe_sparkle_template",
+ "community": 0,
+ "norm_label": "cafe_sparkle.png template image"
+ },
+ {
+ "label": "Sparkle Sample Screenshot 06 (cafe sparkle calibration reference)",
+ "file_type": "image",
+ "source_file": "screenshots/cafe/sparkle/06_sparkle_sample.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_sparkle_06_sparkle_sample_sparklesample",
+ "community": 22,
+ "norm_label": "sparkle sample screenshot 06 (cafe sparkle calibration reference)"
+ },
+ {
+ "label": "Student Bond Rank-Up Popup Screenshot",
+ "file_type": "image",
+ "source_file": "screenshots/cafe/student/01_student_rank_up_popup.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_student_01_student_rank_up_popup_rankuppopup",
+ "community": 12,
+ "norm_label": "student bond rank-up popup screenshot"
+ },
+ {
+ "label": "Bond Rank Heart Indicator (Rank 4)",
+ "file_type": "image",
+ "source_file": "screenshots/cafe/student/01_student_rank_up_popup.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_student_01_student_rank_up_popup_bondheartindicator",
+ "community": 12,
+ "norm_label": "bond rank heart indicator (rank 4)"
+ },
+ {
+ "label": "\"Attack +12\" Stat Boost Banner",
+ "file_type": "image",
+ "source_file": "screenshots/cafe/student/01_student_rank_up_popup.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_student_01_student_rank_up_popup_statboostbanner",
+ "community": 12,
+ "norm_label": "\"attack +12\" stat boost banner"
+ },
+ {
+ "label": "Conditional Rank-Up Popup Close (Automation Gap)",
+ "file_type": "rationale",
+ "source_file": "screenshots/cafe/student/01_student_rank_up_popup.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_student_01_student_rank_up_popup_conditionalpopupclosegap",
+ "community": 12,
+ "norm_label": "conditional rank-up popup close (automation gap)"
+ },
+ {
+ "label": "Rank-Up Popup Screenshot (Student B, Bond Rank 4, Max HP +144)",
+ "file_type": "image",
+ "source_file": "screenshots/cafe/student/02_student_rank_up_popup.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_student_02_student_rank_up_popup_popupscreenshot",
+ "community": 15,
+ "norm_label": "rank-up popup screenshot (student b, bond rank 4, max hp +144)"
+ },
+ {
+ "label": "Bond Rank-Up Popup UI (\u7d46\u30e9\u30f3\u30af\u30a2\u30c3\u30d7\uff01 banner over portrait, stat-gain footer)",
+ "file_type": "concept",
+ "source_file": "screenshots/cafe/student/02_student_rank_up_popup.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_student_02_student_rank_up_popup_bondrankuppopupui",
+ "community": 15,
+ "norm_label": "bond rank-up popup ui (\u7d46\u30e9\u30f3\u30af\u30a2\u30c3\u30d5! banner over portrait, stat-gain footer)"
+ },
+ {
+ "label": "Depicted Student (white/silver-haired, halo motif, off-shoulder outfit, Max HP +144)",
+ "file_type": "concept",
+ "source_file": "screenshots/cafe/student/02_student_rank_up_popup.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_student_02_student_rank_up_popup_depictedstudent",
+ "community": 15,
+ "norm_label": "depicted student (white/silver-haired, halo motif, off-shoulder outfit, max hp +144)"
+ },
+ {
+ "label": "Cafe View After Rank-Up Popup Closed",
+ "file_type": "image",
+ "source_file": "screenshots/cafe/student/03_student_rank_up_popup_closed.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_student_03_student_rank_up_popup_closed_cafeviewafterpopupclosed",
+ "community": 21,
+ "norm_label": "cafe view after rank-up popup closed"
+ },
+ {
+ "label": "Student Rank-Up Popup Dismissal Flow",
+ "file_type": "concept",
+ "source_file": "screenshots/cafe/student/03_student_rank_up_popup_closed.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_student_03_student_rank_up_popup_closed_rankuppopupdismissalflow",
+ "community": 21,
+ "norm_label": "student rank-up popup dismissal flow"
+ },
+ {
+ "label": "Student Rotation Popup Screenshot",
+ "file_type": "image",
+ "source_file": "screenshots/cafe/student/04_student_rotation_popup.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_student_04_student_rotation_popup_image",
+ "community": 9,
+ "norm_label": "student rotation popup screenshot"
+ },
+ {
+ "label": "Visited Student List Popup (\"\u6848\u5185\")",
+ "file_type": "concept",
+ "source_file": "screenshots/cafe/student/04_student_rotation_popup.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_student_04_student_rotation_popup_rotationpopup",
+ "community": 9,
+ "norm_label": "visited student list popup (\"\u6848\u5185\")"
+ },
+ {
+ "label": "Popup Close (X) Button, top-right corner",
+ "file_type": "concept",
+ "source_file": "screenshots/cafe/student/04_student_rotation_popup.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_student_04_student_rotation_popup_closebutton",
+ "community": 9,
+ "norm_label": "popup close (x) button, top-right corner"
+ },
+ {
+ "label": "OK Button (Enter-bound) below student list",
+ "file_type": "concept",
+ "source_file": "screenshots/cafe/student/04_student_rotation_popup.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_student_04_student_rotation_popup_okbutton",
+ "community": 9,
+ "norm_label": "ok button (enter-bound) below student list"
+ },
+ {
+ "label": "\u8a2a\u554f\u3057\u305f\u751f\u5f92\u30ea\u30b9\u30c8 (Visited Student List row of 5 avatars)",
+ "file_type": "concept",
+ "source_file": "screenshots/cafe/student/04_student_rotation_popup.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_cafe_student_04_student_rotation_popup_visitedstudentlist",
+ "community": 9,
+ "norm_label": "\u8a2a\u554f\u3057\u305f\u751f\u5f92\u30ea\u30b9\u30c8 (visited student list row of 5 avatars)"
+ },
+ {
+ "label": "Blue Archive Main/Home Screen Screenshot",
+ "file_type": "image",
+ "source_file": "screenshots/main/main.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_main_main_mainscreen",
+ "community": 8,
+ "norm_label": "blue archive main/home screen screenshot"
+ },
+ {
+ "label": "Cafe Button (Bottom Navigation)",
+ "file_type": "image",
+ "source_file": "screenshots/main/main.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_main_main_cafe_button",
+ "community": 8,
+ "norm_label": "cafe button (bottom navigation)"
+ },
+ {
+ "label": "Mailbox/Envelope Icon (Top Bar)",
+ "file_type": "image",
+ "source_file": "screenshots/main/main.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_main_main_mailbox_icon",
+ "community": 8,
+ "norm_label": "mailbox/envelope icon (top bar)"
+ },
+ {
+ "label": "Bottom Navigation Bar (Cafe, Schedule, Students, Formation, Social, Manufacture, Shop, Recruit, Work)",
+ "file_type": "image",
+ "source_file": "screenshots/main/main.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_main_main_bottom_navigation",
+ "community": 8,
+ "norm_label": "bottom navigation bar (cafe, schedule, students, formation, social, manufacture, shop, recruit, work)"
+ },
+ {
+ "label": "nik-gpu Window Title Bar",
+ "file_type": "image",
+ "source_file": "screenshots/main/main.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_main_main_window_titlebar",
+ "community": 8,
+ "norm_label": "nik-gpu window title bar"
+ },
+ {
+ "label": "Currency/Resource Display (AP, Credits, Gems)",
+ "file_type": "image",
+ "source_file": "screenshots/main/main.png",
+ "source_location": null,
+ "source_url": null,
+ "captured_at": null,
+ "author": null,
+ "contributor": null,
+ "id": "screenshots_main_main_currency_bar",
+ "community": 8,
+ "norm_label": "currency/resource display (ap, credits, gems)"
+ }
+ ],
+ "links": [
+ {
+ "relation": "defines",
+ "confidence": "EXTRACTED",
+ "source_file": "ba_dailies.sh",
+ "source_location": "L20",
+ "weight": 1.0,
+ "source": "ba_dailies",
+ "target": "ba_dailies_click",
+ "confidence_score": 1.0
+ },
+ {
+ "relation": "defines",
+ "confidence": "EXTRACTED",
+ "source_file": "ba_dailies.sh",
+ "source_location": "L2",
+ "weight": 1.0,
+ "source": "ba_dailies",
+ "target": "ba_dailies_display",
+ "confidence_score": 1.0
+ },
+ {
+ "relation": "defines",
+ "confidence": "EXTRACTED",
+ "source_file": "ba_dailies.sh",
+ "source_location": "L74",
+ "weight": 1.0,
+ "source": "ba_dailies",
+ "target": "ba_dailies_do_cafe",
+ "confidence_score": 1.0
+ },
+ {
+ "relation": "defines",
+ "confidence": "EXTRACTED",
+ "source_file": "ba_dailies.sh",
+ "source_location": "L63",
+ "weight": 1.0,
+ "source": "ba_dailies",
+ "target": "ba_dailies_do_cafe_room",
+ "confidence_score": 1.0
+ },
+ {
+ "relation": "defines",
+ "confidence": "EXTRACTED",
+ "source_file": "ba_dailies.sh",
+ "source_location": "L47",
+ "weight": 1.0,
+ "source": "ba_dailies",
+ "target": "ba_dailies_do_mailbox",
+ "confidence_score": 1.0
+ },
+ {
+ "relation": "defines",
+ "confidence": "EXTRACTED",
+ "source_file": "ba_dailies.sh",
+ "source_location": "L36",
+ "weight": 1.0,
+ "source": "ba_dailies",
+ "target": "ba_dailies_focus_game",
+ "confidence_score": 1.0
+ },
+ {
+ "relation": "defines",
+ "confidence": "EXTRACTED",
+ "source_file": "ba_dailies.sh",
+ "source_location": "L16",
+ "weight": 1.0,
+ "source": "ba_dailies",
+ "target": "ba_dailies_get_window",
+ "confidence_score": 1.0
+ },
+ {
+ "relation": "defines",
+ "confidence": "EXTRACTED",
+ "source_file": "ba_dailies.sh",
+ "source_location": "L26",
+ "weight": 1.0,
+ "source": "ba_dailies",
+ "target": "ba_dailies_press_enter",
+ "confidence_score": 1.0
+ },
+ {
+ "relation": "defines",
+ "confidence": "EXTRACTED",
+ "source_file": "ba_dailies.sh",
+ "source_location": "L31",
+ "weight": 1.0,
+ "source": "ba_dailies",
+ "target": "ba_dailies_press_esc",
+ "confidence_score": 1.0
+ },
+ {
+ "relation": "contains",
+ "confidence": "EXTRACTED",
+ "source_file": "ba_dailies.sh",
+ "source_location": "L1",
+ "weight": 1.0,
+ "source": "ba_dailies",
+ "target": "ba_dailies_sh__entry",
+ "confidence_score": 1.0
+ },
+ {
+ "relation": "defines",
+ "confidence": "EXTRACTED",
+ "source_file": "ba_dailies.sh",
+ "source_location": "L3",
+ "weight": 1.0,
+ "source": "ba_dailies",
+ "target": "ba_dailies_xauthority",
+ "confidence_score": 1.0
+ },
+ {
+ "relation": "calls",
+ "confidence": "EXTRACTED",
+ "source_file": "ba_dailies.sh",
+ "source_location": "L109",
+ "weight": 1.0,
+ "context": "call",
+ "source": "ba_dailies_sh__entry",
+ "target": "ba_dailies_do_cafe",
+ "confidence_score": 1.0
+ },
+ {
+ "relation": "calls",
+ "confidence": "EXTRACTED",
+ "source_file": "ba_dailies.sh",
+ "source_location": "L105",
+ "weight": 1.0,
+ "context": "call",
+ "source": "ba_dailies_sh__entry",
+ "target": "ba_dailies_do_mailbox",
+ "confidence_score": 1.0
+ },
+ {
+ "relation": "calls",
+ "confidence": "EXTRACTED",
+ "source_file": "ba_dailies.sh",
+ "source_location": "L104",
+ "weight": 1.0,
+ "context": "call",
+ "source": "ba_dailies_sh__entry",
+ "target": "ba_dailies_focus_game",
+ "confidence_score": 1.0
+ },
+ {
+ "relation": "calls",
+ "confidence": "EXTRACTED",
+ "source_file": "ba_dailies.sh",
+ "source_location": "L76",
+ "weight": 1.0,
+ "context": "call",
+ "source": "ba_dailies_do_cafe",
+ "target": "ba_dailies_click",
+ "confidence_score": 1.0
+ },
+ {
+ "relation": "calls",
+ "confidence": "EXTRACTED",
+ "source_file": "ba_dailies.sh",
+ "source_location": "L49",
+ "weight": 1.0,
+ "context": "call",
+ "source": "ba_dailies_do_mailbox",
+ "target": "ba_dailies_click",
+ "confidence_score": 1.0
+ },
+ {
+ "relation": "calls",
+ "confidence": "EXTRACTED",
+ "source_file": "ba_dailies.sh",
+ "source_location": "L78",
+ "weight": 1.0,
+ "context": "call",
+ "source": "ba_dailies_do_cafe",
+ "target": "ba_dailies_press_enter",
+ "confidence_score": 1.0
+ },
+ {
+ "relation": "calls",
+ "confidence": "EXTRACTED",
+ "source_file": "ba_dailies.sh",
+ "source_location": "L70",
+ "weight": 1.0,
+ "context": "call",
+ "source": "ba_dailies_do_cafe_room",
+ "target": "ba_dailies_press_enter",
+ "confidence_score": 1.0
+ },
+ {
+ "relation": "calls",
+ "confidence": "EXTRACTED",
+ "source_file": "ba_dailies.sh",
+ "source_location": "L55",
+ "weight": 1.0,
+ "context": "call",
+ "source": "ba_dailies_do_mailbox",
+ "target": "ba_dailies_press_enter",
+ "confidence_score": 1.0
+ },
+ {
+ "relation": "calls",
+ "confidence": "EXTRACTED",
+ "source_file": "ba_dailies.sh",
+ "source_location": "L95",
+ "weight": 1.0,
+ "context": "call",
+ "source": "ba_dailies_do_cafe",
+ "target": "ba_dailies_press_esc",
+ "confidence_score": 1.0
+ },
+ {
+ "relation": "calls",
+ "confidence": "EXTRACTED",
+ "source_file": "ba_dailies.sh",
+ "source_location": "L58",
+ "weight": 1.0,
+ "context": "call",
+ "source": "ba_dailies_do_mailbox",
+ "target": "ba_dailies_press_esc",
+ "confidence_score": 1.0
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "CLAUDE.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "ba_dailies_script",
+ "target": "ba_dailies_focus_game"
+ },
+ {
+ "relation": "references",
+ "confidence": "INFERRED",
+ "confidence_score": 0.65,
+ "source_file": "screenshots/main/main.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_main_main_mainscreen",
+ "target": "ba_dailies_focus_game"
+ },
+ {
+ "relation": "references",
+ "confidence": "INFERRED",
+ "confidence_score": 0.95,
+ "source_file": "CLAUDE.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "ba_dailies_script",
+ "target": "ba_dailies_do_mailbox"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": "L18",
+ "weight": 1.0,
+ "source": "plan_overview",
+ "target": "ba_dailies_do_mailbox"
+ },
+ {
+ "relation": "calls",
+ "confidence": "EXTRACTED",
+ "source_file": "ba_dailies.sh",
+ "source_location": "L80",
+ "weight": 1.0,
+ "context": "call",
+ "source": "ba_dailies_do_cafe",
+ "target": "ba_dailies_do_cafe_room",
+ "confidence_score": 1.0
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "CLAUDE.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "ba_dailies_do_cafe",
+ "target": "ba_dailies_cafe_max_clicks_per_room"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "CLAUDE.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "ba_dailies_do_cafe",
+ "target": "scripts_detect_and_click_script"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "CLAUDE.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "ba_dailies_script",
+ "target": "ba_dailies_do_cafe"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "CLAUDE.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "claude_known_gap_cafe_flow",
+ "target": "ba_dailies_do_cafe"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "plan_cadence_notes",
+ "target": "ba_dailies_do_cafe"
+ },
+ {
+ "relation": "semantically_similar_to",
+ "confidence": "INFERRED",
+ "confidence_score": 0.75,
+ "source_file": "plan.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "plan_lesson_schedule",
+ "target": "ba_dailies_do_cafe"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": "L19",
+ "weight": 1.0,
+ "source": "plan_overview",
+ "target": "ba_dailies_do_cafe"
+ },
+ {
+ "relation": "rationale_for",
+ "confidence": "INFERRED",
+ "confidence_score": 0.85,
+ "source_file": "screenshots/cafe/cafe_reward/02_cafe_reward_menu_popup.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_cafe_reward_02_cafe_reward_menu_popup",
+ "target": "ba_dailies_do_cafe"
+ },
+ {
+ "relation": "rationale_for",
+ "confidence": "INFERRED",
+ "confidence_score": 0.75,
+ "source_file": "screenshots/cafe/cafe_reward/02_cafe_reward_menu_popup.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_cafe_reward_02_cafe_reward_menu_popup_receivebutton",
+ "target": "ba_dailies_do_cafe"
+ },
+ {
+ "relation": "references",
+ "confidence": "INFERRED",
+ "confidence_score": 0.75,
+ "source_file": "screenshots/cafe/cafe_reward/03_cafe_reward_claim_popup.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_cafe_reward_03_cafe_reward_claim_popup_screenshot",
+ "target": "ba_dailies_do_cafe"
+ },
+ {
+ "relation": "references",
+ "confidence": "INFERRED",
+ "confidence_score": 0.65,
+ "source_file": "screenshots/main/main.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_main_main_cafe_button",
+ "target": "ba_dailies_do_cafe"
+ },
+ {
+ "relation": "references",
+ "confidence": "INFERRED",
+ "confidence_score": 0.65,
+ "source_file": "screenshots/cafe/room2.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_room2_screenshot",
+ "target": "scripts_detect_and_click"
+ },
+ {
+ "relation": "contains",
+ "confidence": "EXTRACTED",
+ "source_file": "scripts/detect_and_click.py",
+ "source_location": "L53",
+ "weight": 1.0,
+ "source": "scripts_detect_and_click",
+ "target": "scripts_detect_and_click_click",
+ "confidence_score": 1.0
+ },
+ {
+ "relation": "contains",
+ "confidence": "EXTRACTED",
+ "source_file": "scripts/detect_and_click.py",
+ "source_location": "L33",
+ "weight": 1.0,
+ "source": "scripts_detect_and_click",
+ "target": "scripts_detect_and_click_find_sparkles",
+ "confidence_score": 1.0
+ },
+ {
+ "relation": "contains",
+ "confidence": "EXTRACTED",
+ "source_file": "scripts/detect_and_click.py",
+ "source_location": "L26",
+ "weight": 1.0,
+ "source": "scripts_detect_and_click",
+ "target": "scripts_detect_and_click_screenshot",
+ "confidence_score": 1.0
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "CLAUDE.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "claude_overview",
+ "target": "claude_scratchpad_dir"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "CLAUDE.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "claude_overview",
+ "target": "claude_scrot"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "CLAUDE.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "claude_overview",
+ "target": "claude_two_machine_architecture"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "CLAUDE.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "claude_overview",
+ "target": "claude_venv"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "CLAUDE.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "claude_overview",
+ "target": "claude_xdotool"
+ },
+ {
+ "relation": "rationale_for",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "CLAUDE.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "claude_two_machine_architecture",
+ "target": "claude_deployment_pipeline"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "CLAUDE.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "claude_two_machine_architecture",
+ "target": "claude_nik_gpu"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "CLAUDE.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "claude_two_machine_architecture",
+ "target": "claude_nik_macbookair"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "CLAUDE.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "claude_deployment_pipeline",
+ "target": "claude_nik_gpu"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "CLAUDE.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "claude_local_detection_pipeline",
+ "target": "claude_nik_gpu"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "CLAUDE.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "claude_deployment_pipeline",
+ "target": "assets_cafe_sparkle_image"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "CLAUDE.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "claude_deployment_pipeline",
+ "target": "ba_dailies_script"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "CLAUDE.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "claude_deployment_pipeline",
+ "target": "scripts_detect_and_click_script"
+ },
+ {
+ "relation": "rationale_for",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "CLAUDE.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "claude_local_detection_pipeline",
+ "target": "scripts_detect_and_click_script"
+ },
+ {
+ "relation": "conceptually_related_to",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "CLAUDE.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "claude_scratchpad_dir",
+ "target": "claude_screenshots_dir"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "CLAUDE.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "claude_screenshots_dir",
+ "target": "assets_cafe_sparkle_image"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "CLAUDE.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "scripts_detect_and_click_threshold",
+ "target": "claude_screenshots_dir"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "CLAUDE.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "ba_dailies_script",
+ "target": "claude_venv"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "CLAUDE.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "claude_venv",
+ "target": "claude_numpy"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "CLAUDE.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "claude_venv",
+ "target": "claude_opencv_python"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "CLAUDE.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "scripts_detect_and_click_script",
+ "target": "claude_venv"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "CLAUDE.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "ba_dailies_script",
+ "target": "claude_xdotool"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "CLAUDE.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "scripts_detect_and_click_script",
+ "target": "claude_scrot"
+ },
+ {
+ "relation": "semantically_similar_to",
+ "confidence": "INFERRED",
+ "confidence_score": 0.85,
+ "source_file": "plan.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "plan_momo_talk",
+ "target": "claude_known_gap_cafe_flow"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "CLAUDE.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "claude_performance_note_cold_start",
+ "target": "scripts_detect_and_click_script"
+ },
+ {
+ "relation": "conceptually_related_to",
+ "confidence": "INFERRED",
+ "confidence_score": 0.85,
+ "source_file": "screenshots/cafe/sparkle/05_sparkle_student_hidden.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_sparkle_05_sparkle_student_hidden_detectionreliability",
+ "target": "scripts_detect_and_click_script"
+ },
+ {
+ "relation": "rationale_for",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/sparkle/05_sparkle_student_hidden.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_sparkle_05_sparkle_student_hidden_screenshot",
+ "target": "scripts_detect_and_click_script"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "CLAUDE.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "scripts_detect_and_click_script",
+ "target": "assets_cafe_sparkle_image"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "CLAUDE.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "scripts_detect_and_click_script",
+ "target": "scripts_detect_and_click_offset_x"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "CLAUDE.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "scripts_detect_and_click_script",
+ "target": "scripts_detect_and_click_offset_y"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "CLAUDE.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "scripts_detect_and_click_script",
+ "target": "scripts_detect_and_click_threshold"
+ },
+ {
+ "relation": "rationale_for",
+ "confidence": "INFERRED",
+ "confidence_score": 0.85,
+ "source_file": "screenshots/cafe/sparkle/02_sparke_zoomed_cursor_on_head.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_sparkle_02_sparke_zoomed_cursor_on_head_cursoronhead",
+ "target": "scripts_detect_and_click_offset_x"
+ },
+ {
+ "relation": "rationale_for",
+ "confidence": "INFERRED",
+ "confidence_score": 0.85,
+ "source_file": "screenshots/cafe/sparkle/02_sparke_zoomed_cursor_on_head.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_sparkle_02_sparke_zoomed_cursor_on_head_cursoronhead",
+ "target": "scripts_detect_and_click_offset_y"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "plan_overview",
+ "target": "plan_auto_fight_primitive"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "plan_overview",
+ "target": "plan_baas_reference"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "plan_overview",
+ "target": "plan_cadence_notes"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "plan_overview",
+ "target": "plan_ocr_prerequisite"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "plan_overview",
+ "target": "plan_skip_auto_unfriend"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "plan_overview",
+ "target": "plan_skip_daily_minigame_dispatcher"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "plan_overview",
+ "target": "plan_skip_declothes_toggle"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "plan_overview",
+ "target": "plan_skip_joint_firing_drill"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "plan_overview",
+ "target": "plan_skip_restart_uiautomator2"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "plan_overview",
+ "target": "plan_skip_total_assault"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "plan_arena",
+ "target": "plan_ocr_prerequisite"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "plan_arena",
+ "target": "plan_auto_fight_primitive"
+ },
+ {
+ "relation": "cites",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "plan_auto_fight_primitive",
+ "target": "baas_module_main_story"
+ },
+ {
+ "relation": "semantically_similar_to",
+ "confidence": "INFERRED",
+ "confidence_score": 0.75,
+ "source_file": "plan.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "plan_auto_fight_primitive",
+ "target": "plan_event_content"
+ },
+ {
+ "relation": "conceptually_related_to",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": "L141-143",
+ "weight": 1.0,
+ "source": "plan_event_content",
+ "target": "plan_stamina_ap_sweep"
+ },
+ {
+ "relation": "cites",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "plan_stamina_ap_sweep",
+ "target": "baas_module_collect_daily_free_power"
+ },
+ {
+ "relation": "cites",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "plan_stamina_ap_sweep",
+ "target": "baas_module_collect_daily_task_power"
+ },
+ {
+ "relation": "cites",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "plan_club_group_ap_claim",
+ "target": "baas_module_group"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "plan_cadence_notes",
+ "target": "plan_momo_talk"
+ },
+ {
+ "relation": "cites",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "plan_momo_talk",
+ "target": "baas_module_momo_talk"
+ },
+ {
+ "relation": "cites",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "plan_commissions",
+ "target": "baas_module_clear_special_task_power"
+ },
+ {
+ "relation": "conceptually_related_to",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": "L141-143",
+ "weight": 1.0,
+ "source": "plan_event_content",
+ "target": "plan_commissions"
+ },
+ {
+ "relation": "conceptually_related_to",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": "L141-143",
+ "weight": 1.0,
+ "source": "plan_event_content",
+ "target": "plan_scrimmage"
+ },
+ {
+ "relation": "cites",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "plan_scrimmage",
+ "target": "baas_module_scrimmage"
+ },
+ {
+ "relation": "cites",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "plan_bounty",
+ "target": "baas_module_rewarded_task"
+ },
+ {
+ "relation": "conceptually_related_to",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": "L141-143",
+ "weight": 1.0,
+ "source": "plan_event_content",
+ "target": "plan_bounty"
+ },
+ {
+ "relation": "conceptually_related_to",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": "L141-143",
+ "weight": 1.0,
+ "source": "plan_event_content",
+ "target": "plan_story_ap_sweep"
+ },
+ {
+ "relation": "cites",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "plan_story_ap_sweep",
+ "target": "baas_module_explore_tasks_sweep_task"
+ },
+ {
+ "relation": "cites",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "plan_story_ap_sweep",
+ "target": "baas_module_explore_tasks_task_utils"
+ },
+ {
+ "relation": "cites",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "plan_battle_pass_claim",
+ "target": "baas_module_collect_pass_reward"
+ },
+ {
+ "relation": "cites",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "plan_common_shop_tactical_shop",
+ "target": "baas_module_shop_common_shop"
+ },
+ {
+ "relation": "cites",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "plan_common_shop_tactical_shop",
+ "target": "baas_module_shop_shop_utils"
+ },
+ {
+ "relation": "cites",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "plan_common_shop_tactical_shop",
+ "target": "baas_module_shop_tactical_challenge_shop"
+ },
+ {
+ "relation": "cites",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "plan_arena",
+ "target": "baas_module_arena"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "plan_cadence_notes",
+ "target": "plan_arena"
+ },
+ {
+ "relation": "cites",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "plan_lesson_schedule",
+ "target": "baas_module_lesson"
+ },
+ {
+ "relation": "cites",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "plan_crafting",
+ "target": "baas_module_create"
+ },
+ {
+ "relation": "cites",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "plan_main_story_push",
+ "target": "baas_module_explore_tasks_explore_task"
+ },
+ {
+ "relation": "cites",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "plan_main_story_push",
+ "target": "baas_module_main_story"
+ },
+ {
+ "relation": "cites",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "plan_group_mini_story",
+ "target": "baas_module_group_story"
+ },
+ {
+ "relation": "cites",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "plan_group_mini_story",
+ "target": "baas_module_mini_story"
+ },
+ {
+ "relation": "cites",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "plan_event_content",
+ "target": "baas_module_activities_activity_utils"
+ },
+ {
+ "relation": "cites",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "plan_event_content",
+ "target": "baas_module_sweep_activity"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "assets/cafe_sparkle.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "assets_cafe_sparkle_sparkletemplate",
+ "target": "assets_cafe_sparkle_affection_sparkle_ui_element"
+ },
+ {
+ "relation": "shares_data_with",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "assets/cafe_sparkle.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "assets_cafe_sparkle_sparkletemplate",
+ "target": "assets_cafe_sparkle_yellow_white_sparkle_color"
+ },
+ {
+ "relation": "conceptually_related_to",
+ "confidence": "INFERRED",
+ "confidence_score": 0.85,
+ "source_file": "assets/cafe_sparkle.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "assets_cafe_sparkle_yellow_white_sparkle_color",
+ "target": "assets_cafe_sparkle_affection_sparkle_ui_element"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/cafe_reward/01_cafe_reward_cursor_on_top.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_cafe_reward_01_cafe_reward_cursor_on_top_screenshot",
+ "target": "screenshots_cafe_cafe_reward_01_cafe_reward_cursor_on_top_cafe_income_display"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/cafe_reward/01_cafe_reward_cursor_on_top.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_cafe_reward_01_cafe_reward_cursor_on_top_screenshot",
+ "target": "screenshots_cafe_cafe_reward_01_cafe_reward_cursor_on_top_cafe_room_scene"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/cafe_reward/01_cafe_reward_cursor_on_top.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_cafe_reward_01_cafe_reward_cursor_on_top_screenshot",
+ "target": "screenshots_cafe_cafe_reward_01_cafe_reward_cursor_on_top_comfort_meter"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/cafe_reward/01_cafe_reward_cursor_on_top.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_cafe_reward_01_cafe_reward_cursor_on_top_screenshot",
+ "target": "screenshots_cafe_cafe_reward_01_cafe_reward_cursor_on_top_invitation_tickets"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/cafe_reward/01_cafe_reward_cursor_on_top.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_cafe_reward_01_cafe_reward_cursor_on_top_screenshot",
+ "target": "screenshots_cafe_cafe_reward_01_cafe_reward_cursor_on_top_nav_bar"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/cafe_reward/02_cafe_reward_menu_popup.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_cafe_reward_02_cafe_reward_menu_popup",
+ "target": "screenshots_cafe_cafe_reward_02_cafe_reward_menu_popup_cafeincomepopup"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/cafe_reward/02_cafe_reward_menu_popup.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_cafe_reward_02_cafe_reward_menu_popup_cafeincomepopup",
+ "target": "screenshots_cafe_cafe_reward_02_cafe_reward_menu_popup_closebutton"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/cafe_reward/02_cafe_reward_menu_popup.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_cafe_reward_02_cafe_reward_menu_popup_cafeincomepopup",
+ "target": "screenshots_cafe_cafe_reward_02_cafe_reward_menu_popup_receivebutton"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/cafe_reward/02_cafe_reward_menu_popup.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_cafe_reward_02_cafe_reward_menu_popup_cafeincomepopup",
+ "target": "screenshots_cafe_cafe_reward_02_cafe_reward_menu_popup_store1apincome"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/cafe_reward/02_cafe_reward_menu_popup.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_cafe_reward_02_cafe_reward_menu_popup_cafeincomepopup",
+ "target": "screenshots_cafe_cafe_reward_02_cafe_reward_menu_popup_store1creditscard"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/cafe_reward/02_cafe_reward_menu_popup.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_cafe_reward_02_cafe_reward_menu_popup_cafeincomepopup",
+ "target": "screenshots_cafe_cafe_reward_02_cafe_reward_menu_popup_store2creditscard"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/cafe_reward/03_cafe_reward_claim_popup.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_cafe_reward_03_cafe_reward_claim_popup_screenshot",
+ "target": "screenshots_cafe_cafe_reward_03_cafe_reward_claim_popup_claim_button"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/cafe_reward/03_cafe_reward_claim_popup.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_cafe_reward_03_cafe_reward_claim_popup_screenshot",
+ "target": "screenshots_cafe_cafe_reward_03_cafe_reward_claim_popup_reward_display"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/room1.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_room1_png",
+ "target": "screenshots_cafe_room1_edit_toolbar"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/room1.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_room1_png",
+ "target": "screenshots_cafe_room1_income_comfort_display"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/room1.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_room1_png",
+ "target": "screenshots_cafe_room1_room2_nav_button"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/room1.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_room1_png",
+ "target": "screenshots_cafe_room1_room_layout"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/room1.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_room1_png",
+ "target": "screenshots_cafe_room1_students_present"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/room1.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_room1_png",
+ "target": "screenshots_cafe_room1_visit_icons"
+ },
+ {
+ "relation": "conceptually_related_to",
+ "confidence": "AMBIGUOUS",
+ "confidence_score": 0.3,
+ "source_file": "screenshots/cafe/room2.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_room2_screenshot",
+ "target": "screenshots_cafe_room2_affection_marker_candidate"
+ },
+ {
+ "relation": "conceptually_related_to",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/room2.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_room2_screenshot",
+ "target": "screenshots_cafe_room2_bottom_toolbar"
+ },
+ {
+ "relation": "conceptually_related_to",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/room2.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_room2_screenshot",
+ "target": "screenshots_cafe_room2_comfort_meter"
+ },
+ {
+ "relation": "conceptually_related_to",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/room2.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_room2_screenshot",
+ "target": "screenshots_cafe_room2_currency_hud"
+ },
+ {
+ "relation": "conceptually_related_to",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/room2.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_room2_screenshot",
+ "target": "screenshots_cafe_room2_furnishings"
+ },
+ {
+ "relation": "conceptually_related_to",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/room2.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_room2_screenshot",
+ "target": "screenshots_cafe_room2_income_rate"
+ },
+ {
+ "relation": "conceptually_related_to",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/room2.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_room2_screenshot",
+ "target": "screenshots_cafe_room2_invitation_ticket_prompt"
+ },
+ {
+ "relation": "conceptually_related_to",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/room2.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_room2_screenshot",
+ "target": "screenshots_cafe_room2_move_to_store1_button"
+ },
+ {
+ "relation": "conceptually_related_to",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/room2.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_room2_screenshot",
+ "target": "screenshots_cafe_room2_students"
+ },
+ {
+ "relation": "conceptually_related_to",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/room2.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_room2_screenshot",
+ "target": "screenshots_cafe_room2_visit_menu"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/sparkle/01_sparke_zoomed_centered.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_sparkle_01_sparke_zoomed_centered_screenshot",
+ "target": "screenshots_cafe_sparkle_01_sparke_zoomed_centered_precondition_state"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/sparkle/02_sparke_zoomed_cursor_on_head.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_sparkle_02_sparke_zoomed_cursor_on_head_image",
+ "target": "screenshots_cafe_sparkle_02_sparke_zoomed_cursor_on_head_cafescene"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/sparkle/02_sparke_zoomed_cursor_on_head.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_sparkle_02_sparke_zoomed_cursor_on_head_image",
+ "target": "screenshots_cafe_sparkle_02_sparke_zoomed_cursor_on_head_cursoronhead"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/sparkle/03_sparkle_zoomed_out.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_sparkle_03_sparkle_zoomed_out_zoomedoutview",
+ "target": "screenshots_cafe_sparkle_03_sparkle_zoomed_out_cafehud"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/sparkle/03_sparkle_zoomed_out.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_sparkle_03_sparkle_zoomed_out_zoomedoutview",
+ "target": "screenshots_cafe_sparkle_03_sparkle_zoomed_out_caferoom"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/sparkle/03_sparkle_zoomed_out.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_sparkle_03_sparkle_zoomed_out_zoomedoutview",
+ "target": "screenshots_cafe_sparkle_03_sparkle_zoomed_out_sparkleicon"
+ },
+ {
+ "relation": "rationale_for",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/sparkle/04_sparke_speech_text_overlap.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_sparkle_04_sparke_speech_text_overlap_screenshot",
+ "target": "screenshots_cafe_sparkle_04_sparke_speech_text_overlap_speechbubbleocclusion"
+ },
+ {
+ "relation": "conceptually_related_to",
+ "confidence": "INFERRED",
+ "confidence_score": 0.85,
+ "source_file": "screenshots/cafe/sparkle/05_sparkle_student_hidden.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_sparkle_05_sparkle_student_hidden_screenshot",
+ "target": "assets_cafe_sparkle_template"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/sparkle/05_sparkle_student_hidden.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_sparkle_05_sparkle_student_hidden_screenshot",
+ "target": "screenshots_cafe_sparkle_05_sparkle_student_hidden_occlusionedgecase"
+ },
+ {
+ "relation": "conceptually_related_to",
+ "confidence": "INFERRED",
+ "confidence_score": 0.85,
+ "source_file": "screenshots/cafe/sparkle/05_sparkle_student_hidden.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_sparkle_05_sparkle_student_hidden_occlusionedgecase",
+ "target": "screenshots_cafe_sparkle_05_sparkle_student_hidden_detectionreliability"
+ },
+ {
+ "relation": "conceptually_related_to",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/student/01_student_rank_up_popup.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_student_01_student_rank_up_popup_rankuppopup",
+ "target": "screenshots_cafe_student_01_student_rank_up_popup_bondheartindicator"
+ },
+ {
+ "relation": "rationale_for",
+ "confidence": "INFERRED",
+ "confidence_score": 0.85,
+ "source_file": "screenshots/cafe/student/01_student_rank_up_popup.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_student_01_student_rank_up_popup_rankuppopup",
+ "target": "screenshots_cafe_student_01_student_rank_up_popup_conditionalpopupclosegap"
+ },
+ {
+ "relation": "conceptually_related_to",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/student/01_student_rank_up_popup.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_student_01_student_rank_up_popup_rankuppopup",
+ "target": "screenshots_cafe_student_01_student_rank_up_popup_statboostbanner"
+ },
+ {
+ "relation": "shares_data_with",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/student/01_student_rank_up_popup.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_student_01_student_rank_up_popup_bondheartindicator",
+ "target": "screenshots_cafe_student_01_student_rank_up_popup_statboostbanner"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/student/02_student_rank_up_popup.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_student_02_student_rank_up_popup_popupscreenshot",
+ "target": "screenshots_cafe_student_02_student_rank_up_popup_bondrankuppopupui"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/student/02_student_rank_up_popup.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_student_02_student_rank_up_popup_popupscreenshot",
+ "target": "screenshots_cafe_student_02_student_rank_up_popup_depictedstudent"
+ },
+ {
+ "relation": "conceptually_related_to",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/student/02_student_rank_up_popup.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_student_02_student_rank_up_popup_bondrankuppopupui",
+ "target": "screenshots_cafe_student_02_student_rank_up_popup_depictedstudent"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/student/03_student_rank_up_popup_closed.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_student_03_student_rank_up_popup_closed_cafeviewafterpopupclosed",
+ "target": "screenshots_cafe_student_03_student_rank_up_popup_closed_rankuppopupdismissalflow"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/student/04_student_rotation_popup.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_student_04_student_rotation_popup_image",
+ "target": "screenshots_cafe_student_04_student_rotation_popup_rotationpopup"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/student/04_student_rotation_popup.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_student_04_student_rotation_popup_rotationpopup",
+ "target": "screenshots_cafe_student_04_student_rotation_popup_closebutton"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/student/04_student_rotation_popup.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_student_04_student_rotation_popup_rotationpopup",
+ "target": "screenshots_cafe_student_04_student_rotation_popup_okbutton"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/cafe/student/04_student_rotation_popup.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_cafe_student_04_student_rotation_popup_rotationpopup",
+ "target": "screenshots_cafe_student_04_student_rotation_popup_visitedstudentlist"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/main/main.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_main_main_bottom_navigation",
+ "target": "screenshots_main_main_mainscreen"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/main/main.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_main_main_cafe_button",
+ "target": "screenshots_main_main_mainscreen"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/main/main.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_main_main_currency_bar",
+ "target": "screenshots_main_main_mainscreen"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/main/main.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_main_main_mailbox_icon",
+ "target": "screenshots_main_main_mainscreen"
+ },
+ {
+ "relation": "references",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "screenshots/main/main.png",
+ "source_location": null,
+ "weight": 1.0,
+ "source": "screenshots_main_main_window_titlebar",
+ "target": "screenshots_main_main_mainscreen"
+ }
+ ],
+ "hyperedges": [
+ {
+ "id": "tier1_no_ocr_features",
+ "label": "Tier 1 \u2014 high-priority, no-OCR-needed features",
+ "nodes": [
+ "plan_stamina_ap_sweep",
+ "plan_club_group_ap_claim",
+ "plan_momo_talk"
+ ],
+ "relation": "form",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md"
+ },
+ {
+ "id": "tier2_sweep_style_features",
+ "label": "Tier 2 \u2014 sweep-style AP consumption features sharing the buy-tickets/sweep-N-times/color-detect shape",
+ "nodes": [
+ "plan_commissions",
+ "plan_scrimmage",
+ "plan_bounty",
+ "plan_story_ap_sweep"
+ ],
+ "relation": "form",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "plan.md"
+ },
+ {
+ "id": "cafe_automation_pipeline",
+ "label": "Cafe sparkle-click automation pipeline (focus -> loop-detect-click -> claim)",
+ "nodes": [
+ "ba_dailies_script",
+ "ba_dailies_focus_game",
+ "ba_dailies_do_cafe",
+ "scripts_detect_and_click_script",
+ "assets_cafe_sparkle_image"
+ ],
+ "relation": "participate_in",
+ "confidence": "EXTRACTED",
+ "confidence_score": 1.0,
+ "source_file": "CLAUDE.md"
+ }
+ ],
+ "built_at_commit": "92c957851272a2de24c08743026ff8d5fe775faf"
+}
\ No newline at end of file
diff --git a/graphify-out/manifest.json b/graphify-out/manifest.json
new file mode 100644
index 0000000..bc2f55e
--- /dev/null
+++ b/graphify-out/manifest.json
@@ -0,0 +1,107 @@
+{
+ "ba_dailies.sh": {
+ "mtime": 1783193775.9898694,
+ "ast_hash": "3f9c9e34478f3994aba15b17db0444a5",
+ "semantic_hash": "3f9c9e34478f3994aba15b17db0444a5"
+ },
+ "scripts/detect_and_click.py": {
+ "mtime": 1783192949.1083212,
+ "ast_hash": "9fd14f914a7cd6b93513229654d09b32",
+ "semantic_hash": "9fd14f914a7cd6b93513229654d09b32"
+ },
+ "CLAUDE.md": {
+ "mtime": 1783193888.424986,
+ "ast_hash": "90b44a4d6d8d4fe6d2aedee977f7f9ab",
+ "semantic_hash": "90b44a4d6d8d4fe6d2aedee977f7f9ab"
+ },
+ "plan.md": {
+ "mtime": 1783194711.9961307,
+ "ast_hash": "fab3982bdb49cd35c41f5b7625f2b9e9",
+ "semantic_hash": "fab3982bdb49cd35c41f5b7625f2b9e9"
+ },
+ "assets/cafe_sparkle.png": {
+ "mtime": 1783181613.5588827,
+ "ast_hash": "1d4b19e525fd22d6b0d372f6b0aa66a0",
+ "semantic_hash": "1d4b19e525fd22d6b0d372f6b0aa66a0"
+ },
+ "screenshots/cafe/cafe_reward/01_cafe_reward_cursor_on_top.png": {
+ "mtime": 1783191694.4495065,
+ "ast_hash": "05ea29842233f181b16d4447e5ebbc73",
+ "semantic_hash": "05ea29842233f181b16d4447e5ebbc73"
+ },
+ "screenshots/cafe/cafe_reward/02_cafe_reward_menu_popup.png": {
+ "mtime": 1783191698.6395793,
+ "ast_hash": "aba65fd0be7b8da3ba97289ce92f723e",
+ "semantic_hash": "aba65fd0be7b8da3ba97289ce92f723e"
+ },
+ "screenshots/cafe/cafe_reward/03_cafe_reward_claim_popup.png": {
+ "mtime": 1783191702.4029067,
+ "ast_hash": "deab6fbf571e356250410062e3ebed13",
+ "semantic_hash": "deab6fbf571e356250410062e3ebed13"
+ },
+ "screenshots/cafe/room1.png": {
+ "mtime": 1783179797.5240161,
+ "ast_hash": "4b468505d248b4db2176736e1381573a",
+ "semantic_hash": "4b468505d248b4db2176736e1381573a"
+ },
+ "screenshots/cafe/room2.png": {
+ "mtime": 1783179863.061459,
+ "ast_hash": "5207a8f1fcfa106b0da99cf1c149a87b",
+ "semantic_hash": "5207a8f1fcfa106b0da99cf1c149a87b"
+ },
+ "screenshots/cafe/sparkle/01_sparke_zoomed_centered.png": {
+ "mtime": 1783181200.3681042,
+ "ast_hash": "6f4583196baefaaf6d614f2456601e38",
+ "semantic_hash": "6f4583196baefaaf6d614f2456601e38"
+ },
+ "screenshots/cafe/sparkle/02_sparke_zoomed_cursor_on_head.png": {
+ "mtime": 1783181200.3742974,
+ "ast_hash": "6f004191111f34dafbfcbf66d5498f69",
+ "semantic_hash": "6f004191111f34dafbfcbf66d5498f69"
+ },
+ "screenshots/cafe/sparkle/03_sparkle_zoomed_out.png": {
+ "mtime": 1783181200.388494,
+ "ast_hash": "6457807fda08a2c1d5745745b8bb1c9b",
+ "semantic_hash": "6457807fda08a2c1d5745745b8bb1c9b"
+ },
+ "screenshots/cafe/sparkle/04_sparke_speech_text_overlap.png": {
+ "mtime": 1783181200.4004235,
+ "ast_hash": "0cccb33cd4a4d1a7bcf4706f0ccb6ae9",
+ "semantic_hash": "0cccb33cd4a4d1a7bcf4706f0ccb6ae9"
+ },
+ "screenshots/cafe/sparkle/05_sparkle_student_hidden.png": {
+ "mtime": 1783181200.4113557,
+ "ast_hash": "bf6aaaaa2b12f737afd57257222c5b0c",
+ "semantic_hash": "bf6aaaaa2b12f737afd57257222c5b0c"
+ },
+ "screenshots/cafe/sparkle/06_sparkle_sample.png": {
+ "mtime": 1783181200.417372,
+ "ast_hash": "aaf6ba6a74419a70fd2bfa308e5c2360",
+ "semantic_hash": "aaf6ba6a74419a70fd2bfa308e5c2360"
+ },
+ "screenshots/cafe/student/01_student_rank_up_popup.png": {
+ "mtime": 1783191828.3826306,
+ "ast_hash": "c253443a605acac2261a71fe9f6a797d",
+ "semantic_hash": "c253443a605acac2261a71fe9f6a797d"
+ },
+ "screenshots/cafe/student/02_student_rank_up_popup.png": {
+ "mtime": 1783191828.3954592,
+ "ast_hash": "761a0dd7d76e5bba664bc6de54606e8d",
+ "semantic_hash": "761a0dd7d76e5bba664bc6de54606e8d"
+ },
+ "screenshots/cafe/student/03_student_rank_up_popup_closed.png": {
+ "mtime": 1783191872.4982038,
+ "ast_hash": "c04bb13964c820bff48a8e5fe8a1cc0d",
+ "semantic_hash": "c04bb13964c820bff48a8e5fe8a1cc0d"
+ },
+ "screenshots/cafe/student/04_student_rotation_popup.png": {
+ "mtime": 1783192210.4112637,
+ "ast_hash": "d2f57180b8add30d27c4e31d7117c74a",
+ "semantic_hash": "d2f57180b8add30d27c4e31d7117c74a"
+ },
+ "screenshots/main/main.png": {
+ "mtime": 1783179791.8902233,
+ "ast_hash": "c798e4f4d70763a987aa81af07562eca",
+ "semantic_hash": "c798e4f4d70763a987aa81af07562eca"
+ }
+}
\ No newline at end of file
diff --git a/plan.md b/plan.md
new file mode 100644
index 0000000..249a539
--- /dev/null
+++ b/plan.md
@@ -0,0 +1,170 @@
+# ba-auto-daily implementation plan
+
+Personal Blue Archive **JP** daily-automation script. Controls the game via `xdotool`
+over a remote X11 session (Steam+Proton on `nik-gpu`), using OpenCV template/color
+matching for detection. No OCR is set up yet (see Prerequisites).
+
+Feature list and priority ordering below is derived from studying
+`~/repo/baas-reference` (pur1fying/blue_archive_auto_script, GPL-3.0, read-only
+reference — **not copied from**, reimplemented fresh in our own style). Its own
+default scheduler priority, complexity, and JP-relevance were used to rank the
+backlog. See "Reference" under each feature for the baas file(s) that describe the
+mechanic, for research purposes only.
+
+## Status snapshot
+
+| Feature | Status |
+|---|---|
+| Mailbox claim | ✅ Done (`do_mailbox`) |
+| Cafe (pats + income) | ✅ Done (`do_cafe`) |
+| Everything else below | Not started |
+
+## Prerequisites (cross-cutting, unblock multiple tiers)
+
+- **OCR.** Not set up. Needed for currency/ticket-count readouts, region/tab name
+ search, and a few other read-a-number moments. When we get there, evaluate
+ Tesseract vs PaddleOCR in the existing `~/.venvs/ba-auto-daily` venv. Until then,
+ stick to features that are pure color-check / template-match.
+- **Auto-fight primitive.** A shared "start fight → max speed + auto-mode →
+ detect win/lose" routine that Arena, and any future story/raid automation, all
+ need. Build once, early, before Tier 3 combat features.
+ Reference: `module/main_story.py` (`auto_fight`/`enter_battle`).
+
+---
+
+## Tier 1 — High priority, no OCR needed
+
+### Stamina/AP sweep (free + task-menu power)
+Claim the daily free 10 AP purchase and the daily task-menu AP/pyroxene rewards.
+Pure color-check state detection, fixed clicks. High value: AP is capped and this
+is free currency/materials left on the table every day.
+Reference: `module/collect_daily_free_power.py`, `module/collect_daily_task_power.py`.
+
+### Club/Group AP claim
+Claim 10 AP from the club/dorm menu. Trivial fixed click + color check.
+Reference: `module/group.py` (29 lines).
+
+### Momo Talk (chat app conversations)
+Auto-complete unread chat conversations, including relationship-rank-up story
+beats, claim pyroxene. No OCR — pure pixel-column scanning state machine
+(reply bubble / "enter story" prompt detection by color). Runs on its own ~3h
+cadence like cafe. Moderate build effort but no new dependencies.
+Reference: `module/momo_talk.py` (183 lines, `getConversationState`).
+
+---
+
+## Tier 2 — Medium priority, sweep-style AP consumption
+
+These three share the same shape: buy tickets (optional), sweep N times per
+sub-area, detected mostly by color (a multi-pixel "sss/star-rank" signature, not
+OCR). Minor OCR only for optional coin-balance readouts — can hardcode/skip that
+part initially and just sweep until out of stamina/tickets.
+
+### Commissions ("Special Task" / 委託)
+Two sub-dungeons (Base Defense = EXP, Item Retrieval = credits).
+Reference: `module/clear_special_task_power.py` (148 lines).
+
+### Scrimmage (学院交流会)
+Three academies, ticket purchase available on JP.
+Reference: `module/scrimmage.py` (166 lines).
+
+### Bounty ("Rewarded Task" / 悬赏通缉)
+Three sub-areas, ticket purchase (0–12). Needs a little OCR for bounty-coin
+balance if we want auto-refresh; otherwise skippable.
+Reference: `module/rewarded_task.py` (204 lines).
+
+### Normal/Hard story AP sweep (re-clear already-cleared stages)
+Sweep already-cleared main-story stages by region/mission count to burn AP.
+Needs OCR for current-region-number + a fuzzy swipe-search over mission
+buttons — more OCR-dependent than the three above, so ranked after them.
+Reference: `module/explore_tasks/sweep_task.py`, `module/explore_tasks/task_utils.py`.
+
+---
+
+## Tier 3 — Needs real OCR investment
+
+Do these once OCR is actually set up.
+
+### Battle Pass claim (JP-only feature upstream — relevant to us)
+Claim pass mission points + tier rewards. Simple template claim-flow; OCR only
+needed for the optional level/points stat readout (can stub that part).
+Reference: `module/collect_pass_reward.py` (146 lines).
+
+### Common Shop + Tactical (Arena) Shop
+Auto-buy configured items, auto-refresh when affordable. OCR needed for
+currency balances and shop-tab name search.
+Reference: `module/shop/common_shop.py`, `module/shop/tactical_challenge_shop.py`,
+`module/shop/shop_utils.py`.
+
+### Arena (PvP ladder)
+Fight until out of tickets or rank 1, claim season + daily rewards. Needs the
+Tier-1-prerequisite auto-fight primitive, plus OCR for ticket count and
+self/opponent level. High value (decays twice daily, at 06:00/20:00 reset) but
+gated on OCR + auto-fight both being ready.
+Reference: `module/arena.py` (173 lines).
+
+---
+
+## Tier 4 — Heavy investment, lower ROI (defer)
+
+### Lesson / Schedule (affection farming via classes)
+Structurally the most complex non-crafting feature: fuzzy OCR region-name
+matching, per-region student-portrait templates, multi-page swipe search, and a
+bespoke isometric-grid pixel-sampling helper for locating a specific favorite
+student. A stripped-down "just pick the highest-affection lesson in a fixed
+region" version would be much cheaper than full favorite-student targeting —
+consider that subset first if we ever pick this up.
+Reference: `module/lesson.py` (615 lines).
+
+### Crafting (自动制造)
+The single most complex feature in the reference project (1000+ lines): 3-phase
+material selection, priority-list + rarity-tier config, quantity-stepper OCR,
+filter/sort UI manipulation. Large one-time build cost for recurring but
+non-urgent value (crafting mats don't decay the way AP/tickets do).
+Reference: `module/create.py` (1028 lines).
+
+### Main story / Normal-Hard story "push" (auto-clear next uncleared stage)
+Distinct from the Tier-1/2 "sweep already-cleared stages" — this is unlocking
+new content. baas ships ~920KB of hand-authored per-stage click/formation-swap
+JSON scripts for "grid mode"; "simple mode" (plain auto-fight, no positioning)
+is far cheaper but doesn't work on every stage. Only worth building incrementally,
+per-stage, on demand — not a batch feature.
+Reference: `module/main_story.py`, `module/explore_tasks/explore_task.py`.
+
+### Group Story / Mini Story (side-plot cleanup)
+OCR-detect a "NEW" badge across a paged grid, clear each unread plot. Pure
+convenience, optional.
+Reference: `module/group_story.py`, `module/mini_story.py`.
+
+### Event content (Activities: story/mission/challenge push)
+Shape mirrors Tier-2 sweep work, but the content is 100% ephemeral — a new
+JSON/script per event, expires when the event ends. Recommendation: only build
+the generic "event AP sweep" (reuses Tier-1/2 sweep logic almost as-is) as a
+standing capability; don't try to pre-build specific named events. Note also
+that per baas's own docs, current JP/Global events have mostly moved away from
+grid-walking challenges, so "challenge push" content increasingly needs manual
+play anyway — low automation ROI there specifically.
+Reference: `module/activities/activity_utils.py`, `module/sweep_activity.py`.
+
+---
+
+## Skip list (not relevant to this project)
+
+| Feature | Why skip |
+|---|---|
+| Total Assault (raid) | Stubbed/dead code upstream too (`return True` before any real logic) and disabled by default; low value to chase. |
+| Joint Firing Drill (综合战术测试) | Hard-disabled for JP server in baas's own code (`if self.server == "JP": return True`) despite being in their README — it's a no-op on JP regardless. |
+| De-clothes localization toggle | CN-only. |
+| Restart / refresh-uiautomator2 | Android/ADB housekeeping for baas's mobile control backend; not applicable to our PC/Steam/Proton setup. |
+| Auto-unfriend | Disabled by default upstream too; low value, mildly risky (deletes friends). |
+| Daily minigame dispatcher | Event-specific and changes every campaign — not a stable feature to pre-build. Handle ad hoc if/when a specific live minigame is worth automating. |
+
+---
+
+## Notes on cadence
+
+Several features are time-decaying rather than "any time" farmable, which should
+inform how often the script runs (cron/scheduler), not just build order:
+- Cafe income + Momo Talk: effectively continuous, ~3h internal cadence.
+- Arena: resets twice daily (06:00, 20:00 UTC).
+- Everything else: once-daily, JP/Global reset at 20:00 UTC (03:00 UTC+8).