Skip to content

Development

m4bwav edited this page Oct 4, 2026 · 1 revision

The repository holds one plugin with one skill. AGENTS.md at the root has the rules for anyone, person or agent, changing it; CLAUDE.md imports it.

Layout

Path What it holds
.claude-plugin/ plugin.json (name, version, keywords) and marketplace.json, which makes the repository its own marketplace
skills/wikiwright/SKILL.md the eight steps, update mode, the hand-over with package-modernize
skills/wikiwright/references/ page sets, publishing, other hosts, and one core file per registry (npm.md, nuget.md) plus files read only for a package's traits: requests, files on disk, golden captures, a command line, external programs and media, time and state
skills/wikiwright/templates/ the npm and NuGet verification templates, the host-fixture and file-tree kits, the sidebar and footer, and the wiki note template
skills/wikiwright/scripts/wikiwright.py the helper, one standard-library file
skills/wikiwright/ evergreen files evergreen.json (state and schedule), RESEARCH.md, CHANGELOG.md, LEARNINGS.md and its archive, TESTS.md, MAINTENANCE.md, evals/evals.json
evals/ the eval cases' prompts and graders, the suite driver and the action grader
tests/ the helper's unit tests, the three Node suites, and fixtures/good-wiki
ai-docs/ handoff, log, decisions and notes from past sessions

Running the tests

From the repository root:

$ python tests/test_wikiwright.py 2>&1 | tail -3
Ran 94 tests in 11.625s

OK
$ node --test tests/host-fixture.test.mjs tests/file-tree.test.mjs tests/snippet.test.mjs | grep -E ' (tests|pass|fail|skipped) [0-9]'
ℹ tests 22
ℹ pass 21
ℹ fail 0
ℹ skipped 1

That was on Windows with Python 3.14.6 and Node 24.18.0; Python 3.9.25 also passed all 94. The skipped Node test sets a folder's mode, which Windows ignores. The host-fixture tests need OpenSSL 3 and skip themselves without it; they make no network requests. node --test here ran with Node 24, the version CI uses.

Continuous integration

.github/workflows/tests.yml runs on every push to master and every pull request, on Ubuntu, macOS and Windows with Python 3.9 and 3.13 and Node 24. It runs the unit tests, the three Node suites, wikiwright.py --version, and check on tests/fixtures/good-wiki.

Rules for changes

  • wikiwright.py stays one standard-library file that runs on Python 3.9 or later on Windows, macOS and Linux. Every change to it gets a test in tests/test_wikiwright.py.
  • Every change to the skill is logged in skills/wikiwright/CHANGELOG.md with its reason. Lessons from real runs go in LEARNINGS.md with an ID and a code name; claims about GitHub or the registries carry the date they were checked.
  • The repository is public: no names of people other than the author and the maintainers of public packages the skill was tested on, no machine names or paths, no private projects, no credentials. Those belong in the private overlay.
  • Prose people read is checked with the everwrite checker, with no strong findings.
  • No AI attribution in commits, pull requests, releases or files.

The eval suite

skills/wikiwright/evals/evals.json holds nine cases: three trigger prompts that must load the skill, two decoys that must not (one asks to edit a README), three action cases graded on evidence in the run's trace, and one outcome case. Triggers and decoys run with claude plugin eval; the action cases run through evals/run-suite.sh, with and without the skill, and are graded by evals/grade-action.py. The last recorded run, T-20261001-1 on 2026-10-01, passed 9 of 9. The suite was not run for this wiki.

Headless eval runs can write into the source folder, so the driver ends by printing git status --short. Commit before a suite and edit nothing under skills/ while one runs.

Evergreen

The skill is an evergreen unit, tier fast, checked every 14 days: GitHub's wiki rules, the registries' APIs and the tools for checking documentation examples are re-researched from primary sources. evergreen.json says the next check is due on 2026-10-12. MAINTENANCE.md is a self-contained copy of the protocol for machines without the evergreen plugin.

Making a release

  1. Bump the version in .claude-plugin/plugin.json, VERSION in wikiwright.py, metadata.version in SKILL.md and version in evergreen.json.
  2. Add the CHANGELOG entry and record a test run in TESTS.md.
  3. Run python skills/wikiwright/scripts/wikiwright.py releasecheck X.Y.Z until it passes (Commands shows its output).
  4. Tag vX.Y.Z and publish a GitHub Release with the CHANGELOG entry as notes.
  5. Where the plugin is installed from a local marketplace, uninstall and install it again, and run cachecheck until every file is equal.

This wiki

These pages were written with the skill itself. Their examples come from a verification program run against a fresh clone of master at a809eff; it and its output are kept outside the repository with the run's notes. The install transcripts were run by hand.

Clone this wiki locally