$npx -y skills add HLND2T/CS2_VibeSignatures --skill restore-from-snapshotRestore versioned symbol YAML from a canonical same-version snapshot, optionally replace trusted YAML, or explicitly force a different base GAMEVER snapshot after user confirmation while skipping target trust checks. Use when asked to restore, unpack, hydrate, or seed game-symbol
| 1 | # Restore From Snapshot |
| 2 | |
| 3 | Use the bundled script as the only entry point. Keep trusted same-version restoration separate from cross-version forced |
| 4 | restoration, and never describe a forced base restore as trusted or verified. |
| 5 | |
| 6 | ## Resolve GAMEVER |
| 7 | |
| 8 | Use an exact target GAMEVER from the caller or user. If omitted, read `CS2VIBE_GAMEVER` from `.env`; if it is absent or |
| 9 | empty, ask the user and wait. Reject versions absent from `download.yaml`. |
| 10 | |
| 11 | ## Restore Trusted Snapshot |
| 12 | |
| 13 | Run from the repository root: |
| 14 | |
| 15 | ```powershell |
| 16 | uv run python .claude/skills/restore-from-snapshot/scripts/restore_from_snapshot.py <GAMEVER> |
| 17 | ``` |
| 18 | |
| 19 | When `gamesymbols/<GAMEVER>.yaml` exists, the script restores without overwriting different YAML and then verifies the |
| 20 | complete target against `configs/<GAMEVER>.yaml`. Do not retry with replacement after a conflict unless the user |
| 21 | explicitly requests replacement. For an explicit trusted replacement, run: |
| 22 | |
| 23 | ```powershell |
| 24 | uv run python .claude/skills/restore-from-snapshot/scripts/restore_from_snapshot.py <GAMEVER> --replace |
| 25 | ``` |
| 26 | |
| 27 | ## Offer Forced Base Restore |
| 28 | |
| 29 | When the trusted command reports `Symbol snapshot: unavailable; no YAML restored` and prints |
| 30 | `Suggested base snapshot: gamesymbols/<BASE_GAMEVER>.yaml`, ask exactly: |
| 31 | |
| 32 | `Force restore gamesymbols/<BASE_GAMEVER>.yaml to bin/<GAMEVER> without trust checks? (yes/no)` / |
| 33 | `是否跳过信任检查,强制将 gamesymbols/<BASE_GAMEVER>.yaml 还原到 bin/<GAMEVER>?(yes/no)` depending on the |
| 34 | user's preferred language. Wait for an explicit yes or no. |
| 35 | |
| 36 | - If the user answers no, report that no YAML was restored and finish successfully. |
| 37 | - If the user answers yes, warn that symbol addresses may be stale, then run: |
| 38 | |
| 39 | ```powershell |
| 40 | uv run python .claude/skills/restore-from-snapshot/scripts/restore_from_snapshot.py <GAMEVER> --force-base-snapshot <BASE_GAMEVER> |
| 41 | ``` |
| 42 | |
| 43 | The forced mode skips target GAMEVER, config digest, contract, and verification checks. It still validates snapshot |
| 44 | schema, base filename/payload consistency, safe relative YAML paths, and real target directories. It deletes and replaces |
| 45 | only `.yaml` files under `bin/<GAMEVER>`; binaries and IDA databases remain unchanged. Never pass the force option without |
| 46 | the user's explicit yes. |
| 47 | |
| 48 | ## Handle Result |
| 49 | |
| 50 | Treat only these outputs as success: |
| 51 | |
| 52 | - `Symbol snapshot: restored and verified` |
| 53 | - `Symbol snapshot: restored and verified with replacement` |
| 54 | - `Symbol snapshot: force-restored without trust checks from gamesymbols/<BASE_GAMEVER>.yaml` |
| 55 | - `Symbol snapshot: unavailable; no YAML restored` after the user answers no or no base suggestion exists |
| 56 | |
| 57 | If the command fails, stop and report its exact error inside: |
| 58 | |
| 59 | ```text |
| 60 | <skill_error>ERROR REASON</skill_error> |
| 61 | ``` |