scripts/release.ts: reads the latest ## [x.y.z] heading in CHANGELOG.md (skips [Unreleased]), stages package.json with that version plus dist/, tars it, checks the registry (GET), skips with exit 0 if the version exists, else PUTs the npm publish payload to the Gitea registry. No npm publish, no dependencies; the repo keeps its dev version
.gitea/workflows/release.yml: workflow_dispatch only, guarded to main, runs npm ci, npm test, npm run build, then the script. Token is secrets.PACKAGE_TOKEN, falling back to the job token
scripts/smoke.ts (npm run smoke -- "query"): one real search against CRW_API_URL, prints the raw response shape and the mapped results
Tests for the pure parts (version parsing, name encoding, publish payload); 36 tests total. I also ran the script against a local mock registry: first run published, second skipped as already published, tarball contents are package/package.json and package/dist/
Still to verify on the real registry (spec verification item 5): that the job token can write packages; otherwise add a write:package secret named PACKAGE_TOKEN.
Step 4 of the build order in `docs/spec.md`.
- `scripts/release.ts`: reads the latest `## [x.y.z]` heading in `CHANGELOG.md` (skips `[Unreleased]`), stages `package.json` with that version plus `dist/`, tars it, checks the registry (`GET`), skips with exit 0 if the version exists, else `PUT`s the npm publish payload to the Gitea registry. No `npm publish`, no dependencies; the repo keeps its dev version
- `.gitea/workflows/release.yml`: `workflow_dispatch` only, guarded to `main`, runs `npm ci`, `npm test`, `npm run build`, then the script. Token is `secrets.PACKAGE_TOKEN`, falling back to the job token
- `scripts/smoke.ts` (`npm run smoke -- "query"`): one real search against `CRW_API_URL`, prints the raw response shape and the mapped results
- Tests for the pure parts (version parsing, name encoding, publish payload); 36 tests total. I also ran the script against a local mock registry: first run published, second skipped as already published, tarball contents are `package/package.json` and `package/dist/`
Still to verify on the real registry (spec verification item 5): that the job token can write packages; otherwise add a `write:package` secret named `PACKAGE_TOKEN`.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Step 4 of the build order in
docs/spec.md.scripts/release.ts: reads the latest## [x.y.z]heading inCHANGELOG.md(skips[Unreleased]), stagespackage.jsonwith that version plusdist/, tars it, checks the registry (GET), skips with exit 0 if the version exists, elsePUTs the npm publish payload to the Gitea registry. Nonpm publish, no dependencies; the repo keeps its dev version.gitea/workflows/release.yml:workflow_dispatchonly, guarded tomain, runsnpm ci,npm test,npm run build, then the script. Token issecrets.PACKAGE_TOKEN, falling back to the job tokenscripts/smoke.ts(npm run smoke -- "query"): one real search againstCRW_API_URL, prints the raw response shape and the mapped resultspackage/package.jsonandpackage/dist/Still to verify on the real registry (spec verification item 5): that the job token can write packages; otherwise add a
write:packagesecret namedPACKAGE_TOKEN.🤖 Generated with Claude Code