From 0ee1d495c89418d8d2600fa9436420c8a731c81b Mon Sep 17 00:00:00 2001 From: Nik Afiq Date: Sun, 5 Jul 2026 05:29:30 +0900 Subject: [PATCH] Add manifest.json and implementation plan for ba-auto-daily script - Created manifest.json to track file metadata for the project. - Added plan.md detailing the implementation strategy for the ba-auto-daily automation script, including feature prioritization and prerequisites. --- .gitignore | 2 + graphify-out/.graphify_labels.json | 1 + graphify-out/.graphify_python | 1 + graphify-out/.graphify_root | 1 + graphify-out/GRAPH_REPORT.md | 159 ++ graphify-out/graph.html | 307 +++ graphify-out/graph.json | 3937 ++++++++++++++++++++++++++++ graphify-out/manifest.json | 107 + plan.md | 170 ++ 9 files changed, 4685 insertions(+) create mode 100644 graphify-out/.graphify_labels.json create mode 100644 graphify-out/.graphify_python create mode 100644 graphify-out/.graphify_root create mode 100644 graphify-out/GRAPH_REPORT.md create mode 100644 graphify-out/graph.html create mode 100644 graphify-out/graph.json create mode 100644 graphify-out/manifest.json create mode 100644 plan.md 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).