Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

npm GitHub metadata correction

Enclosing change: lustvvww. Requirements: LTERM-RELEASE-006, LTERM-RELEASE-007, LTERM-GOV-100 and LTERM-GOV-103. M5/M6 review preserves actual npm schema/staging/publication/consumer gates separately from signed artifact preparation and completed Cargo delivery.

Rejected attempt and exact regression

The release coordinator submitted the qualified 0.1.2 tarball with detached provenance from protected attest run 41149587175, source 2523a0b50a77e22f3b6400b73bf2e3096756c454. npm rejected it with HTTP422 before creating a staged package because the SLSA v1 statement omitted buildDefinition.internalParameters.github.event_name, repository_id and repository_owner_id. Expected values were workflow_dispatch, 1422167487 and 311425888. No package or tag was published and no uncertain upload was retried. Credential/debug logs were not read.

The bundle’s signature and source binding had passed real Sigstore verification; that did not prove provider schema admission. npm’s official provenance generator includes these three internal fields, and the registry binds them to the signed GitHub identity. The owning repository and organization IDs were independently confirmed through the public GitHub repository API.

Exact command: node --test scripts/npm-provenance.test.mjs. Before repair: three passed, one failed; the concrete schema assertion found internalParameters undefined. The generator now includes all three fields from the validated environment. Missing or foreign repository/owner IDs fail before signing. The registry-side verifier additionally requires the exact internal fields, alongside source SHA, main ref, publishing workflow and tarball digest. The existing real cryptographic/foreign-signer/tamper checks remain enabled.

The earlier bundle and attempt remain historical evidence. A fresh complete source qualification and protected exact-main attestation are required before the coordinator submits a newly signed candidate. Initial npm publication and scoped GitHub release remain pending; Cargo 0.1.2 delivery is already verified.

Qualified local results

The repaired focused provenance/registry boundary passed eight of eight tests. A preserved real Terminal bundle from the rejected attempt is checked by the actual Sigstore verifier: its correct workflow signature passes, while the metadata verifier rejects the missing required fields. Public fixture scripts/fixtures/terminal-rejected-github-metadata.json is 11,886 bytes with SHA-256 9eabb3d8147ad906a9536d770526a4a77c17c9275cd9de4d9a05ea2887fb78ba.

All 24 release tests passed, including schema admission, foreign/missing IDs, real signature/foreign-signer/tamper checks and coordinated versioning. The full eight-lane specification check passed from source 2523a0b5 through this change, including formatting, architecture, boundaries, progress, release metadata, mdBook and spec-first. Hosted source qualification and renewed signed artifact generation remain required before the next provider submission.