Fortemi follows the AIWG security-engineering supply-chain baseline for npm publication where the current infrastructure supports it.
- Release publishes run only from
v*tags or an explicit operator dispatch that resolves to av*tag. - Release tags must verify against the release-key public bundle committed under
.gitea/keys/maintainers.ascor an equivalent.gitea/allowed_signersfile. - Fortemi follows AIWG's two-key model: personal maintainer keys sign commits; the release-only key signs
v*tags. Usetools/release/cut-tag.shsogit tagcannot accidentally use the personal commit-signing key from global git config. - Release-sensitive workflow actions and containers are pinned by immutable SHA or digest and recorded in
ci/digests.txt. - The pnpm workspace enforces
minimumReleaseAge: 10080andblockExoticSubdeps: true. - The publish workflow verifies package versions against the release tag before publishing.
- The publish workflow packs and inspects both npm artifacts before publish.
@fortemi/coreis published before@fortemi/react.- Public npmjs.org publishing runs from the GitHub mirror in
.github/workflows/npm-publish.ymlusing the mirror'ssecrets.NPMJS_TOKENandnpm publish --provenance. - Local Gitea publishing remains in
.gitea/workflows/publish.ymland usessecrets.GT_PUBLISH_TOKENfor the internal Gitea package registry, falling back tosecrets.NPM_TOKENonly for older repository configurations.
If a pushed release tag fails the signed-tag gate because it was signed by a personal commit key, treat it like AIWG's wrong-key recovery path: no publish artifacts have passed the gate, so delete the bad tag on every remote and re-cut it with tools/release/cut-tag.sh <version>. Do not add the personal key to .gitea/keys/maintainers.asc just to make the failed tag pass.
npm provenance requires a supported OIDC environment. AIWG uses GitHub Actions for the npmjs.org leg because npm does not list Gitea Actions as a trusted-publishing provider. Fortemi follows that split now:
- Gitea Actions verifies the signed release tag, builds, packs, inspects, and publishes
@fortemi/coreand@fortemi/reactto the local Gitea package registry for internal use. - GitHub Actions on the mirror verifies the same signed tag and performs the final npmjs.org distribution with
NPMJS_TOKENandnpm publish --provenance. - The public publish job grants
id-token: writeonly to attach provenance; it does not run on pull requests.
This avoids a dual-publisher race: Gitea no longer publishes to npmjs.org, so the GitHub provenance publish is the only public distribution path.