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.
This commit is contained in:
Nik Afiq 2026-07-05 05:29:30 +09:00
parent 92c9578512
commit 0ee1d495c8
9 changed files with 4685 additions and 0 deletions

2
.gitignore vendored
View File

@ -1 +1,3 @@
.claude/settings.local.json .claude/settings.local.json
graphify-out/cost.json
graphify-out/cache/

View File

@ -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"}

View File

@ -0,0 +1 @@
/Users/nik-macbookair/.local/share/uv/tools/graphifyy/bin/python

View File

@ -0,0 +1 @@
/Users/nik-macbookair/repo/ba-auto-daily

View File

@ -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._

307
graphify-out/graph.html Normal file

File diff suppressed because one or more lines are too long

3937
graphify-out/graph.json Normal file

File diff suppressed because it is too large Load Diff

107
graphify-out/manifest.json Normal file
View File

@ -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"
}
}

170
plan.md Normal file
View File

@ -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 (012). 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).