Improve skills and document updates

This commit is contained in:
pleb
2026-10-21 17:47:56 -07:00
committed by pleb
parent ed71a6d081
commit 4d6f9b8be0
13 changed files with 148 additions and 52 deletions
@@ -22,19 +22,9 @@ Before acting, read the shared policy references:
test -f pyproject.toml && test -d src/plugin_helper && test -d registry && test -d locks
```
2. Read the local helper behavior before changing files.
Inspect at least:
```bash
sed -n '1,220p' README.md
sed -n '1,260p' src/plugin_helper/cli.py
sed -n '1,260p' src/plugin_helper/planner.py
sed -n '1,220p' src/plugin_helper/models.py
sed -n '1,220p' registry/plugins.toml
sed -n '1,220p' locks/<instance>.lock.toml
sed -n '1,220p' docs/SMOKETEST.md
```
2. Read the locked plugin entry and its registry file before changing them.
Open `src/plugin_helper` only when the command output disagrees with the
lock. `docs/SMOKETEST.md` is for the smoke after apply.
3. Determine the instance.
@@ -103,22 +93,22 @@ release URL only.
curl -sS https://api.github.com/repos/<owner>/<repo>/releases/tags/<tag>
```
Pick the asset that matches the Beat Saber instance/version. Prefer an exact versioned asset such as `1.40.8.zip` over broad or source archives. If multiple plausible assets remain, ask the user.
Pick the asset that matches the Beat Saber instance/version. Prefer an exact versioned asset such as `1.40.8.zip` over broad or source archives. If multiple plausible assets remain, ask the user. When a release ships one zip per game version, record the asset name and the `gameVersion` string embedded in the DLL. A stale manifest is a warning on the chosen asset. It is not a reason to select a lower-named zip.
5. Inspect the asset before selecting an install strategy.
Download to the helper state directory:
Download to the helper cache the planner searches:
```bash
mkdir -p .state/instances/<instance>/downloads/<plugin-id>
curl -L --fail -o .state/instances/<instance>/downloads/<plugin-id>/<asset-name> "<browser_download_url>"
sha256sum .state/instances/<instance>/downloads/<plugin-id>/<asset-name>
mkdir -p .state/cache/downloads/<instance>/<plugin-id>
curl -L --fail -o .state/cache/downloads/<instance>/<plugin-id>/<asset-name> "<browser_download_url>"
sha256sum .state/cache/downloads/<instance>/<plugin-id>/<asset-name>
```
Match the checksum against GitHub's `digest` when available. Inspect zip contents:
```bash
unzip -l .state/instances/<instance>/downloads/<plugin-id>/<asset-name>
unzip -l .state/cache/downloads/<instance>/<plugin-id>/<asset-name>
```
Use the install strategy guide in the artifact policy.
@@ -152,15 +142,22 @@ release URL only.
7. Use the helper to validate, plan, and apply.
Always pass `--state-dir .state` so the helper uses the repo-local downloaded asset:
Pass `--state-dir .state` so the helper uses the repo-local download. On a
native Windows BSManager install, also pass
`--config plugin-helper.windows.toml.example --profile windows` when
`plugin-helper.local.toml` is absent. `--state-dir .state` alone selects the
`default` install id, which is a different bootstrap record from the
`windows` profile.
```bash
PYTHONPATH=src .venv/bin/python -m plugin_helper --state-dir .state check --instance <instance>
PYTHONPATH=src .venv/bin/python -m plugin_helper --state-dir .state plan --instance <instance> --plugin <plugin-id>
PYTHONPATH=src .venv/bin/python -m plugin_helper --state-dir .state apply <generated-plan-path>
PYTHONPATH=src .venv/bin/python -m plugin_helper --config plugin-helper.windows.toml.example --profile windows --state-dir .state check --instance <instance>
PYTHONPATH=src .venv/bin/python -m plugin_helper --config plugin-helper.windows.toml.example --profile windows --state-dir .state plan --instance <instance> --plugin <plugin-id>
PYTHONPATH=src .venv/bin/python -m plugin_helper --config plugin-helper.windows.toml.example --profile windows --state-dir .state apply <generated-plan-path>
```
Before applying, read or summarize the generated plan enough to confirm it changes only the intended plugin files.
`plan` keeps the dependency closure in `unchanged` when those live files
already match. `changes` is what `apply` writes. Confirm `Changes:` is the
intended plugin before applying.
8. Verify the result.
@@ -1,6 +1,6 @@
---
name: beatsaber-plugin-update-auditor
description: Audit Beat Saber plugin-helper locks for available plugin updates and follow-up work. Use when the user asks to check all Beat Saber plugins for updates, compare locked mods against GitHub or BeatMods, review plugin/version compatibility tracking notes, identify PR/local/manual builds that need follow-up, or skip paid/private Patreon and Discord plugin sources during update checks.
description: Audit Beat Saber plugin-helper locks for available plugin updates and follow-up work. Use when the user asks to check all Beat Saber plugins for updates, compare locked mods against GitHub or BeatMods, review plugin/version compatibility tracking notes, identify PR/local/manual builds that need follow-up, or skip paid/private Patreon and Discord plugin sources during update checks. Read docs/notes/update-checks/<version>/ before the audit and add a new markdown file there when the audit finishes.
---
# Beat Saber Plugin Update Auditor
@@ -32,7 +32,14 @@ Before auditing, read the shared policy references:
PYTHONPATH=src .venv/bin/python -m plugin_helper instances
```
3. Run the update audit with repo-local state unless the user explicitly targets
3. Read the update journal for that Beat Saber version before drawing
conclusions. Journals live under `docs/notes/update-checks/<version>/`, one
directory per game version, with as many markdown files as needed (usually
one dated file per check). List the directory and read the recent files.
Treat them as prior findings, not as a substitute for a fresh audit. If the
directory does not exist yet, create it when recording this check.
4. Run the update audit with repo-local state unless the user explicitly targets
another configured profile:
```bash
@@ -44,7 +51,7 @@ Before auditing, read the shared policy references:
verified metadata, skips `patreon/` and `discord/` sources, and marks local,
PR, manual, failed-trial, or pending-smoke entries as review items.
4. Read the active compatibility tracker before proposing updates for review
5. Read the active compatibility tracker before proposing updates for review
items. For the current migration notes, inspect:
```bash
@@ -53,15 +60,22 @@ Before auditing, read the shared policy references:
```
Follow up on rows marked failed, omitted, currently failed, smoke blocked,
manual resmoke pending, local build, PR build, or local/private. Do not
reinstall failed or omitted plugins unless the notes identify a newer
compatible source.
manual resmoke pending, local build, PR build, or local/private. The lock
`reason` and `docs/notes/update-checks/<version>/` are the current record.
When an older note says a plugin was removed and the lock still has a local
or pull-request build, the lock wins. Correct that note in the same change.
Do not reinstall failed or omitted plugins unless the lock or journal
identifies a newer compatible source.
5. For each public update candidate, inspect source notes before changing the
To see what BeatMods has for one mod, query `status=all` for that game
version and filter by mod name in the client. BeatMods ignores `search` and
`name`. An empty verified list is not the whole catalog.
6. For each public update candidate, inspect source notes before changing the
lock. Follow the shared artifact policy for GitHub-first sourcing and
BeatMods fallback cases.
6. Do not attempt automated public update checks for:
7. Do not attempt automated public update checks for:
- `patreon/NalulunaModAssistant` or Naluluna bundles
- `discord/BeatSaberPlus` or BeatSaberPlus/ChatPlexSDK bundles
@@ -69,7 +83,7 @@ Before auditing, read the shared policy references:
Report them as skipped/manual follow-up only.
7. If the user asks to apply an update, switch to the `beatsaber-plugin-manager`
8. If the user asks to apply an update, switch to the `beatsaber-plugin-manager`
workflow for download, lock update, planning, apply, and smoketest.
## Output
@@ -84,3 +98,15 @@ Summarize in four groups:
Mention BeatMods/GitHub API errors separately from "no update found"; those are
unknowns, not proof that the plugin is current.
## Journal
After the audit, add a new markdown file. Do not rewrite earlier journal files.
```text
docs/notes/update-checks/<beat-saber-version>/<YYYY-MM-DD>.md
```
Use `<YYYY-MM-DD>-<short-slug>.md` when that date already has an entry. Keep
the note short: date, instance, the four summary groups, and any comparison
that changed a recommendation. A version directory may hold many files.
+1 -1
View File
@@ -50,7 +50,7 @@ dependency closure before downloading.
- Download artifacts into the selected helper state directory, normally:
```bash
<state_dir>/instances/<instance>/downloads/<plugin-id>/
<state_dir>/cache/downloads/<instance>/<plugin-id>/
```
- Record SHA-256 checksums for downloaded or built artifacts.
+5 -1
View File
@@ -9,8 +9,12 @@ Use this policy when a task changes or verifies a live BSManager instance.
the current duration in `docs/SMOKETEST.md` unless the user requested a
different duration.
- Do not rely on `timeout` to kill the full game process tree.
- Prefer the documented foreground Proton launch with a background watchdog that
- On Linux, prefer the documented foreground Proton launch with a background watchdog that
sleeps for the smoke window, then terminates Beat Saber by process name.
- On native Windows, launch `Beat Saber.exe --no-yeet fpfc` from the instance
directory. Wait until `Logs/_latest.log` shows `MainSystemInit`, or about 20
seconds, then stop the `Beat Saber` process. See the Windows section in
`docs/SMOKETEST.md`.
- After the run, confirm no Beat Saber process remains. If cleanup fails, say so
and ask the user to close it manually.
@@ -29,7 +29,8 @@ checkout locations.
## Profiles
- Read `plugin-helper.local.toml` before choosing a configured profile:
- `--state-dir .state` without a profile uses the `default` install id. A native Windows BSManager tree is the `windows` profile. When `plugin-helper.local.toml` is absent, pass `--config plugin-helper.windows.toml.example --profile windows`.
- Read `plugin-helper.local.toml` before choosing a configured profile when that file exists:
```bash
sed -n '1,220p' plugin-helper.local.toml