Skip to content

Development

Mark Rogers edited this page Oct 27, 2026 · 5 revisions

The repository is a Claude Code plugin: .claude-plugin/ (the plugin and marketplace manifests), skills/ (the three skills, pxw.py and the sw.py shim), tests/, evals/, and the evergreen files at the root. Rules for agents working in it are in AGENTS.md; CLAUDE.md imports it.

Tests

Three scripts, all offline, with their fixtures drawn in code. Run from the repository root; on the released 0.8.4 tag archive (Python 3.14.6, numpy 2.5.2, Pillow 12.3.0):

$ python tests/test_pxw.py
Ran 55 tests in <s>s
OK
$ echo $?
0
$ python tests/test_make.py
Ran 37 tests in <s>s
OK
$ echo $?
0
$ python tests/check_skills.py
ok
$ echo $?
0

Four animation tests cover model_rotate: the test file skips them when tifffile is not installed (python -m pip install tifffile). The 0.8.4 run above skipped none. CI installs only numpy and Pillow, so CI skips those four tests.

check_skills.py checks the manifest version against VERSION in pxw.py, and each skill's front matter, description (at most 1,024 characters) and length (at most 200 lines). It follows relative links in every markdown file and checks LF line endings. It fails on any committed image except .github/images/banner.jpg, and on a home-folder path, a key, AI attribution or a name from the untracked .private-names.txt in any file.

CI

.github/workflows/tests.yml runs the three scripts on every push to main and every pull request:

Runner Python
ubuntu-24.04 3.9
ubuntu-latest 3.14
macos-latest 3.9, 3.14
windows-latest 3.9, 3.14

Ubuntu with 3.9 runs on ubuntu-24.04 rather than ubuntu-latest. The run on the 0.8.2 release commit, 18e320c, passed.

The 0.8.4 fix merged in PR #17, merge commit f3b448ed, and is published as v0.8.4. The archive verification ran the three scripts shown above.

Rules from AGENTS.md

  • pxw.py stays Python 3.9+ with numpy and Pillow only, and runs on Windows, macOS and Linux with no network calls. It prints one JSON object per command (except review) and exits 1 on a failed check, 2 on a usage error.
  • Every new effect, command or gate gets an offline test that fails when the behaviour breaks. An existing effect or make step keeps its output byte-identical unless the CHANGELOG says why it changed.
  • artwright is the judge: call aw.py pixel as a gate, never copy its checks.
  • Skills stay under 200 lines, with descriptions that name the sibling skills owning nearby requests.
  • A release bumps .claude-plugin/plugin.json and VERSION in pxw.py together, with CHANGELOG notes. Tags and releases need the owner's go-ahead.
  • No images in the repository except the README banner, no project or machine names, no absolute paths, no AI attribution.

Evergreen files

The plugin is maintained as an evergreen unit: RESEARCH.md (sources), CHANGELOG.md (every change with its reason), LEARNINGS.md, TESTS.md, evals/evals.json, MAINTENANCE.md and evergreen.json (the refresh schedule). The make eval cases ran in two A/B passes on 2026-10-24 (TESTS.md, T-20261024-2 and T-20261024-3): on synthetic fixtures the skill bought speed, not correctness, and the owner then closed the search for a case the baseline fails (T-20261024-4).

This wiki's checks

The program that printed every output on these pages is ai-docs/notes/2026-10-24-wiki-verify.py, with its saved output beside it. It draws its pictures in code, installs the plugin with claude plugin install into a throwaway configuration folder (or takes --plugin with an installed copy), and runs each page's command. For the next release, run it again and compare:

python ai-docs/notes/2026-10-24-wiki-verify.py --install --old <extracted older release> --aw <artwright aw.py> --port 8799 > new.out.txt

How the wiki was made and how to update it: ai-docs/notes/2026-10-24-github-wiki.md.

Clone this wiki locally