Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# snapjaw — Developer Guide

## Quality Gates

Before declaring a task done, run:

uv run pytest -q
uv run ruff check src/ tests/
uv run ruff format --check src/ tests/
uv run mypy src/

All four must pass clean. `ruff format --check` is independent of
`ruff check` — the linter does not enforce formatting and the formatter
does not lint. CI runs both. If `ruff format --check` reports
differences, run `uv run ruff format src/ tests/` to fix them.

The project's CI runs the same checks on Linux and Windows; if any of
them fails on either OS, treat as a blocker.

## Workflow Rules

- **TDD**: write tests before implementation code, always.
- **No intermediate commits during plan execution.** Work the task to
completion; the user commits when they review and approve. Never run
`git commit` (or any publishing action: `push`, PR, merge) without
an explicit user request, even if a skill prescribes committing as
part of its checklist.
- **Verification before completion.** Don't claim a task is done until
the full quality gates above pass. Evidence (command output) before
assertion.

## Agent & Subagent Rules

These rules override any conflicting defaults or skills (including
superpowers). Apply whenever you are executing work or dispatching a
subagent.

- **Opus only.** Every subagent spawn passes `model: "opus"`. No
Sonnet, no Haiku, even for cheap jobs like file surveys. If a skill
default picks another model, override it.
- **Parallelise by default.** Independent work — unrelated surveys,
non-conflicting edits, research across separate modules — goes out
as multiple agents in one message. Serial dispatch is only for
genuine data dependencies.
- **No worktrees.** Work directly in the main checkout. Skip any skill
step that suggests creating a git worktree, even when the skill
names it as mandatory.
- **TDD, strict and unconditional.** Failing test before production
code, for every feature and every bugfix. No exceptions for "too
small" or "will add later".
- **100% coverage on all new or touched code — lines AND branches.**
Uncovered branches block completion. Measure before claiming done.
- **Review loops to zero.** After implementation, dispatch a separate
code-reviewer agent (never self-review). Address every comment.
Re-dispatch review after fixes. Repeat until the reviewer returns
zero comments. Only zero-comment review closes the task.
16 changes: 15 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
# snapjaw: Vanilla World of Warcraft AddOn manager
# snapjaw: World of Warcraft AddOn manager (vanilla and WotLK 3.3.5)
[![CI](https://github.com/refaim/snapjaw/actions/workflows/ci.yml/badge.svg)](https://github.com/refaim/snapjaw/actions/workflows/ci.yml)
[![codecov](https://codecov.io/gh/refaim/snapjaw/graph/badge.svg)](https://codecov.io/gh/refaim/snapjaw)
[![Python 3.12](https://img.shields.io/badge/python-3.12-blue.svg)](https://www.python.org/downloads/release/python-3120/)
[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)
[![GitHub release](https://img.shields.io/github/v/release/refaim/snapjaw)](https://github.com/refaim/snapjaw/releases/latest)

## Features
- Supports vanilla (1.12) and WotLK (3.3.5) clients, including custom launchers like Project Ascension (`Ascension.exe`)
- Support for Git repositories as addon sources
- Detection of outdated and/or modified addons
- Automatic handling of folder naming and nested addon folders
Expand Down Expand Up @@ -86,6 +87,19 @@ snapjaw update ShaguTweaks
2022-11-01 01:53:01,610 [INFO] Done!
```

### Overriding game version detection

snapjaw auto-detects whether you're on vanilla or WotLK by reading
`WoW.exe` or `Ascension.exe` in your game directory. If detection fails
(missing exe, unusual client) you can specify the version explicitly:

```
snapjaw --addons-dir /path/to/Interface/Addons --game-version wotlk status
```

Supported values: `vanilla` (Interface 1.x, Interface ≤ 11200) and
`wotlk` (Interface 3.x, 30000 ≤ Interface ≤ 30300).

## Requirements for developers
- [Python 3.12](https://www.python.org)
- [uv](https://docs.astral.sh/uv/)
Loading
Loading