Skip to content

wikiwright 0.5.0

Choose a tag to compare

@m4bwav m4bwav released this 29 Sep 18:31
· 88 commits to master since this release

wikiwright 0.5.0. Entries from CHANGELOG.md, newest first.

C-20260929-6 · 2026-09-29 · Release 0.5.0: tools that save tokens, a tuned network rule, other hosts, the fifth real run (release-0.5.0)

  • because: user request (the 0.5.0 kickoff); C-20260929-2 to C-20260929-5; T-20260929-2; R-20260929-1
  • files: .claude-plugin/plugin.json, scripts/wikiwright.py (VERSION), SKILL.md (metadata.version), evergreen.json (version, counts, tests, history), README
  • 0.5.0 gathers the entries below. wikiwright.py releasecheck 0.5.0 checks the four version fields, this entry and T-20260929-2.
  • Measured load, before and after:
    • SKILL.md: 3,059 words before, 2,834 after the trim. The tune, the draft-only paragraph and the other hosts added 194, for 3,028 in the release.
    • The npm template: 15,606 bytes before, 13,428 after. The host-name code moved to the 10,793-byte kit, and a run reads only its 2,648-byte header.
    • A nine-run action suite now prints 1,363 bytes into the calling session. The full grades are 7,953 bytes, and the 0.4.0 session also read its driver's output by hand.
    • cachecheck and releasecheck each replace a hand check with one line.
    • The fifth run was one headless session: $11.35, 32 minutes, 158 turns. Its report reached this session at 11 KB. The subagents that measured the hosts kept about 530,000 tokens of their own out of the main context.
  • The fifth run's script was 47.7 KB, against 48.9 KB for the fourth. It imported the kit instead of rebuilding the proxy, and spent its size on more cases: 93 page outputs, against 55.

C-20260929-5 · 2026-09-29 · Lessons of the fifth run, stack-exchange-markdown-retriever (fifth-run-lessons)

  • because: the fifth real run (wiki commit 348a628, the repository's PR #23); its report; L-128, L-129; L-018 (the four-change note)
  • files: templates/npm/host-fixture.mjs (runtimeEnv without NODE_OPTIONS for Deno and Bun, the .invalid gate, the npx warm-up, the connect-retry leak, close() closes this process's agent); templates/npm/wiki-verify.template.mjs (cli() takes CLI_ENV; the golden section counts answers, timing and requests apart); templates/pages/_Sidebar.md (a Commands slot); SKILL.md Step 6 (--address ''); references/npm.md (package-modernize's template now removes all four patches); references/page-sets.md (the seventh wiki, the CLI set tested a fourth time); references/hosts.md (three bold labels the prose checker flagged); tests (51 unit tests; the kit test checks runtimeEnv and NO_PROXY); LEARNINGS.md (L-128, L-129)
  • The run passed every check (outputs 93 of 93, golden replay 90 of 90 and 20 of 20 on 1.1.7, Node 20 run). It also listed eleven places where the skill was wrong, missing or confusing. Each one is now a kit or template change, a line of guidance, or a learning. The exception is Step 8's push and overlay update, which the request had overridden.

C-20260929-4 · 2026-09-29 · Other hosts measured without an account; preflight, check and live learn Gitea, Forgejo, GitLab and Azure DevOps (other-hosts-measured)

  • because: user request (0.5.0 kickoff: verify every host claim that can be verified without an account); R-20260929-1; L-123 to L-127; package-modernize L-125 (NO_PROXY); T-20260929-2 (L-118's npx.cmd addendum)
  • files: scripts/wikiwright.py (parse_remote with ports and Azure's ssh form, detect_kind, preflight for Gitea and Forgejo with --seed, GitLab, Azure DevOps, --kind; check --host; live for each host; page names quoted; probes compared without whitespace); tests/test_wikiwright.py (50 tests: a local fake host with the measured status codes, no network); references/hosts.md (rewritten from measurements); RESEARCH.md (R-20260929-1, the open question answered); SKILL.md (Steps 1 and 3); references/page-sets.md; templates/npm/host-fixture.mjs (NO_PROXY names the loopback); templates/npm/wiki-verify.template.mjs (the npx.cmd note); README; LEARNINGS.md (L-123 to L-127)
  • What changed and why:
    • hosts.md was docs-only. Local Gitea 1.27.3, Forgejo 16.0.5 and GitLab CE 19.4.1, plus anonymous reads of Codeberg, gitlab.com and Azure DevOps, measured every claim. Three contradicted the docs. Forgejo does not hide _ files. Anonymous GitLab project JSON has no wiki fields. A pushed GitLab file keeps its spaces.
    • The biggest difference from GitHub: on Gitea and Forgejo a push never creates the wiki, but one API call does, with no browser. preflight --seed makes that call.
    • preflight used to stop at any non-GitHub remote. It now reports each host's state, and it ran against the local instances (no-wiki-repo, has-pages, --seed answering 201), Codeberg, gitlab.com and Azure DevOps.
    • check --host applies each host's navigation files, wikilink tolerance, file-name limits and anchor slugs.
    • live checks pages through each host's API as well as the web. Gitea and Forgejo answer 200 before a first page and 303 for a missing page, and GitLab renders pages in the browser.
    • What still needs an account (writes on Azure DevOps, gitlab.com write behaviour, a footer on GitLab) is marked unverified.
    • The kit set NO_PROXY empty. package-modernize found that this sends a client's connection to the stand-in proxy through the proxy under NODE_USE_ENV_PROXY=1, so the kit now names the loopback.

C-20260929-3 · 2026-09-29 · Tune after T-20260929-2: sample content, never a live recording; draft-only updates in SKILL.md (sample-content-not-live)

  • because: T-20260929-2 (three of six skill runs against stack-exchange-markdown-retriever requested the real API); L-121 (rejected), L-122; L-107 (helpful 7, promoted)
  • files: SKILL.md (Step 4, a bullet on remote content; Update mode, draft-only requests); evals/grade-action.py (--forbid-host, live_requests); evals/run-action.sh (forbid.txt for the retriever); LEARNINGS.md (L-121 rejected, L-122, L-107 promoted)
  • The runs put a post's real markdown on the page by recording a live answer, because the fixture's content is invented. Step 4 now says what to do instead: show the stand-in's output labelled as sample content and link the real post. The grader fails a run that calls the package's service. L-107's draft-only layout, missed by every update-mode eval run because only LEARNINGS.md had it, is now a paragraph of Update mode.

C-20260929-2 · 2026-09-29 · 0.5.0, step 1: suite driver, cachecheck, releasecheck, the host-fixture kit, the 0.4.1 fixes (tools-before-suite)

  • because: user request (the 0.5.0 kickoff: token-saving tools before the suite); L-012, L-017, L-116 to L-119
  • files: evals/run-suite.sh (new); scripts/wikiwright.py (cachecheck, releasecheck, outputs node markers and --node, diffout path masks and --keep-paths, UTF-8 stdout); tests/test_wikiwright.py (41 tests); templates/npm/host-fixture.mjs (new) and tests/host-fixture.test.mjs (new, run in CI with Node 24); templates/npm/wiki-verify.template.mjs ("by host name" is an import, OLDEST_NODE copies the binary alone, shell()); SKILL.md (intro, Step 4, Step 6, Update mode step 3); references/page-sets.md (new section "How wikiwright.py outputs reads a page", moved from SKILL.md Step 6); references/npm.md (the kit, the oldest Node); AGENTS.md; .github/workflows/tests.yml
  • What changed and why:
    • The 0.4.0 session drove its suite by hand and read each grade into its context. evals/run-suite.sh runs the action cases one at a time with and without the skill, moves aside any <target>.wiki clone a run makes, records the targets' git status, prints one line per run and ends with the plugin source's git status --short, so eval-written files cannot hide (L-017).
    • A stale plugin cache ran old text twice (L-012); cachecheck compares every tracked file under skills/ and .claude-plugin/ with the installed copy by SHA-256. On its first use it found three files changed since the 0.4.0 install. releasecheck X.Y.Z checks the four version fields, a CHANGELOG entry naming the version, a TESTS run the last tag did not have, and that the tag is free.
    • L-118: OLDEST_NODE put the npm node package's bin folder first on PATH, which Git Bash skips; it now copies the binary alone into its own folder, and the template's shell() prints the Node each shell case ran.
    • L-119: diffout crashed on a cp1252 console and saved local paths; it now writes UTF-8 with replacement and masks the new output's folder, the temp folder and the home folder (<scratch>, <temp>, <home>; --keep-paths turns it off). outputs reads <!-- outputs: node>=22 --> and checks such a block only against outputs from those Node lines, so the oldest Node's output can be checked without false misses.
    • The fourth run's script rebuilt the proxy, the CA, the guard, the route preload and the probe inline (about 150 lines of a 48 KB script). They are now one module, templates/npm/host-fixture.mjs, that also tests the guard before anything runs (L-117) and refuses to start when Node 20 has no undici; the template imports it.
    • Token measure (before, after): SKILL.md 3,059 words (19,869 bytes), now 2,834 (18,591); the npm template 15,606 bytes, now 12,560 plus a 9,343-byte kit a run reads only for requests by host name, and then only its 2 KB header.