Repository navigation
wikiwright 0.5.0
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.0checks 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.
cachecheckandreleasecheckeach 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 (
runtimeEnvwithoutNODE_OPTIONSfor Deno and Bun, the.invalidgate, the npx warm-up, the connect-retry leak,close()closes this process's agent); templates/npm/wiki-verify.template.mjs (cli()takesCLI_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 checksruntimeEnvandNO_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.cmdaddendum) - files: scripts/wikiwright.py (
parse_remotewith ports and Azure's ssh form,detect_kind,preflightfor Gitea and Forgejo with--seed, GitLab, Azure DevOps,--kind;check --host;livefor 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_PROXYnames the loopback); templates/npm/wiki-verify.template.mjs (thenpx.cmdnote); 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 --seedmakes that call. preflightused 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,--seedanswering 201), Codeberg, gitlab.com and Azure DevOps.check --hostapplies each host's navigation files, wikilink tolerance, file-name limits and anchor slugs.livechecks 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_PROXYempty. package-modernize found that this sends a client's connection to the stand-in proxy through the proxy underNODE_USE_ENV_PROXY=1, so the kit now names the loopback.
- 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
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.txtfor 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,outputsnode markers and--node,diffoutpath 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_NODEcopies the binary alone,shell()); SKILL.md (intro, Step 4, Step 6, Update mode step 3); references/page-sets.md (new section "Howwikiwright.py outputsreads 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.shruns the action cases one at a time with and without the skill, moves aside any<target>.wikiclone a run makes, records the targets'git status, prints one line per run and ends with the plugin source'sgit status --short, so eval-written files cannot hide (L-017). - A stale plugin cache ran old text twice (L-012);
cachecheckcompares every tracked file underskills/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.Zchecks 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_NODEput the npmnodepackage's bin folder first on PATH, which Git Bash skips; it now copies the binary alone into its own folder, and the template'sshell()prints the Node each shell case ran. - L-119:
diffoutcrashed 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-pathsturns it off).outputsreads<!-- 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.
- The 0.4.0 session drove its suite by hand and read each grade into its context.