diff --git a/.claude/skills/deploy-gpu/SKILL.md b/.claude/skills/deploy-gpu/SKILL.md index e4f2e7e..ece276a 100644 --- a/.claude/skills/deploy-gpu/SKILL.md +++ b/.claude/skills/deploy-gpu/SKILL.md @@ -1,32 +1,36 @@ --- name: deploy-gpu -description: Sync this repo's working tree to nik-gpu, refresh the flat runtime paths via setup.sh, and optionally smoke-test one task against the live game. Use when the user asks to deploy, push, sync, or ship code to nik-gpu, or wants to try a task live after an edit. +description: Sync this repo's working tree to nik-gpu, where it runs directly out of the git checkout, and optionally smoke-test one task against the live game. Use when the user asks to deploy, push, sync, or ship code to nik-gpu, or wants to try a task live after an edit. disable-model-invocation: true --- # /deploy-gpu -Deploys the current working tree to `nik-gpu` and refreshes the runtime paths -`~/ba_dailies.sh` actually executes from. See `README.md`'s "Deploying your -changes" section and `CLAUDE.md`'s "Deployment model" for the source of truth -this skill wraps — if either has changed, follow the doc over this file. +Deploys the current working tree to `nik-gpu`. See `README.md`'s "Deploying +your changes" section and `CLAUDE.md`'s "Deployment model" for the source of +truth this skill wraps — if either has changed, follow the doc over this +file. Optional task argument (smoke test): $ARGUMENTS -## Why two steps, not just rsync +## The checkout IS the runtime -`rsync` only updates the git checkout at `nik-gpu:~/repo/ba-auto-daily/`. The -launcher itself runs from separate flat paths (`~/ba_dailies.sh`, -`~/ba_daily.py`, `~/ba_auto/`, `~/ba_assets/`) that only `setup.sh` copies -into. Skipping the `setup.sh` step means nik-gpu keeps executing old code -even though the rsync "succeeded". +As of 2026-07-18, `ba_dailies.sh` runs directly out of the git checkout at +`nik-gpu:~/repo/ba-auto-daily/` — there is no separate flat-path copy +(`~/ba_dailies.sh`, `~/ba_daily.py`, `~/ba_auto/`, `~/ba_assets/`) for +`setup.sh` to keep in sync. If those flat paths turn up on nik-gpu, they're +stale leftovers from the pre-2026-07-18 model — don't assume anything reads +from them. + +This means a plain rsync is normally enough on its own; `setup.sh` is no +longer a required second step for an ordinary code change. ## Steps 1. From the repo root, run: ```bash - rsync -av --delete \ + rsync -av \ --exclude='.git/' \ --exclude='__pycache__/' \ --exclude='*.pyc' \ @@ -37,7 +41,12 @@ even though the rsync "succeeded". ./ nik-gpu:~/repo/ba-auto-daily/ ``` -2. Run: +2. Only run `setup.sh` if this deploy also needs it — a fresh/empty checkout, + a new Python dependency, a new host-level tool requirement (e.g. a + tesseract language pack), or the venv otherwise needs + installing/reinstalling. It's idempotent and safe to re-run, but it no + longer copies any files anywhere, so don't run it out of habit expecting + it to "finish" the deploy — step 1's rsync already did: ```bash ssh nik-gpu "cd ~/repo/ba-auto-daily && ./setup.sh" @@ -47,21 +56,24 @@ even though the rsync "succeeded". missing `tesseract`) rather than treating the deploy as done. 3. **Only if a task name was given in `$ARGUMENTS`** (e.g. `/deploy-gpu - cafe`), run it live as a smoke test: + cafe`), run it live as a smoke test, from the checkout path directly: ```bash - ssh nik-gpu "~/ba_dailies.sh " + ssh nik-gpu "~/repo/ba-auto-daily/ba_dailies.sh " ``` Do not invent a task to run if none was given — several tasks - (`story_sweep`, `shop_common`, `shop_tactical`, `lesson`) spend real AP, - credits, tactical coin, or lesson tickets, and running one without the - user asking for that specific task would be an unrequested spend. + (`story_sweep`, `story_sweep_hard`, `shop_common`, `shop_tactical`, + `lesson`, `arena`, `bounty`, `event_sweep`) spend real AP, credits, + tactical coin, lesson tickets, an arena ticket, or a bounty ticket, and + running one without the user asking for that specific task would be an + unrequested spend. Exit code 0 only means the script ran without a Python exception, not that the in-game action succeeded — surface the task's own log lines (e.g. `claiming all`, `nothing to claim`, `patted N sparkle(s)`) to the user, not just the exit code. -4. Summarize what happened: deploy succeeded/failed, and if a task was - smoke-tested, what its log output actually said. +4. Summarize what happened: deploy succeeded/failed, whether `setup.sh` was + needed/run, and if a task was smoke-tested, what its log output actually + said. diff --git a/ba_auto/config.py b/ba_auto/config.py index 6921a0b..4f1803c 100644 --- a/ba_auto/config.py +++ b/ba_auto/config.py @@ -364,8 +364,8 @@ STORY_SWEEP_TARGETS = [] # ordinal modulo, not the calendar day-of-year, so the cycle doesn't skip or # repeat around a year boundary. Set STORY_SWEEP_ROTATION_REGION to None to # disable this and only sweep STORY_SWEEP_TARGETS. -STORY_SWEEP_ROTATION_REGION = 30 -STORY_SWEEP_ROTATION_STAGE_COUNT = 6 +STORY_SWEEP_ROTATION_REGION = 29 +STORY_SWEEP_ROTATION_STAGE_COUNT = 5 STORY_SWEEP_ROTATION_COUNT = "max" # Hard story AP sweep (module/explore_tasks/sweep_task.py's sweep_hard_task).