--- id: WHYNOT-WP-0004 type: workplan title: "Move @whynot/design publication to Forgejo Packages" domain: infotech repo: whynot-design status: finished owner: codex topic_slug: forgejo-npm-migration created: "2026-09-04" updated: "2026-09-04" state_hub_workstream_id: "a1483ac2-09c6-5c57-ba56-99a8f28cadb8" --- ## Reconcile the package release state ```task id: WHYNOT-WP-0004-T01 status: done priority: high state_hub_task_id: "c191d55f-302b-5f29-aee1-526516f57ad7" ``` Audit the partially completed Forgejo migration, choose a new immutable package version when the existing Gitea release cannot be reused safely, and verify the release contents before any credentialed write. This work promotes routed intake `01a06e08-6936-7762-a347-f832182b7705`. ## Publish and verify the Forgejo package ```task id: WHYNOT-WP-0004-T02 status: done priority: high state_hub_task_id: "93e4835b-b3eb-5af8-ac83-557ea4c59921" ``` Use the governed `whynot-design-npm-publish` credential lane to publish the new version to `https://forgejo.coulomb.social/api/packages/coulomb/npm/`. Verify an authenticated exact-version install and the shipped IR/version contract without printing or persisting the credential. ## Align consumer and operator documentation ```task id: WHYNOT-WP-0004-T03 status: done priority: medium state_hub_task_id: "f0614332-75a3-5e99-8fef-c749c76987ac" ``` Make Forgejo the single canonical npm endpoint in current package, consumer, and release guidance. Hand the verified endpoint to ops-warden for catalog and playbook reconciliation. Prepared `@whynot/design@0.4.2` on 2026-09-04. The package dry-run contains 105 files with IR `designVersion` 0.4.2; all five Playwright visual tests pass. The changelog gate correctly reports no *post-release* `[Unreleased]` entry after the 0.4.2 section was cut. Published and exact-integrity verified on Forgejo on 2026-09-04. The dedicated publish lane's OpenBao read is healthy but its stored token could not complete the Forgejo write, so the plan-authorized `forgejo-admin-api-token` lane was used as a one-time contained recovery path. Dedicated-token rotation remains live in `WARDEN-WP-0037`; no credential value was printed or persisted.