Skip to content

Commit e041a4a

Browse files
authored
Merge branch 'main' into dependabot/github_actions/actions/download-artifact-8.0.1
2 parents cce05c0 + b335b32 commit e041a4a

9 files changed

Lines changed: 120 additions & 39 deletions

.release-please-manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
".": "0.1.0-alpha.2"
2+
".": "0.1.0-alpha.3"
33
}

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,16 @@ follows Keep a Changelog, and versions follow Semantic Versioning.
55

66
## [Unreleased]
77

8+
## [0.1.0-alpha.3] - 2026-07-27
9+
10+
### Fixed
11+
12+
- Accepted the fixed authentication sentinel value injected by
13+
`actions/setup-node` for npm Trusted Publishing while continuing to reject
14+
real registry token credentials.
15+
- Replaced the unpublished immutable alpha.2 release after its publication
16+
guard failed before invoking npm.
17+
818
## [0.1.0-alpha.2] - 2026-07-27
919

1020
### Changed

README.md

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ the official OpenAI JavaScript request, response, stream, and error types while
55
defaulting the client to CometAPI.
66

77
> **Registry Alpha pre-release:** the SDK is under active 0.1 development.
8-
> `0.1.0-alpha.2` is approved for npm publication under the `next` dist-tag,
9-
> and its API may change before `0.1.0`.
8+
> `0.1.0-alpha.3` is available from npm under the `next` dist-tag, and its API
9+
> may change before `0.1.0`.
1010
1111
## Supported 0.1 surface
1212

@@ -52,8 +52,8 @@ For source-checkout testing, retain and verify one exact tarball:
5252
```bash
5353
mkdir -p .artifacts
5454
npm pack --pack-destination .artifacts
55-
npm run test:package -- --tarball .artifacts/cometapi-0.1.0-alpha.2.tgz
56-
npm run test:fixtures -- --tarball .artifacts/cometapi-0.1.0-alpha.2.tgz
55+
npm run test:package -- --tarball .artifacts/cometapi-0.1.0-alpha.3.tgz
56+
npm run test:fixtures -- --tarball .artifacts/cometapi-0.1.0-alpha.3.tgz
5757
```
5858

5959
Install that path in a separate consumer when needed. Do not treat a locally
@@ -210,9 +210,12 @@ parent.
210210
211211
The repository has completed Public Preview. Blocking CI, protected repository
212212
rules, security reporting, protected environments, and the authorized live
213-
smoke have passed. Registry Alpha `0.1.0-alpha.1` is available from npm, and
214-
`0.1.0-alpha.2` is approved for OIDC publication. Mocked responses, packed
215-
artifacts, GitHub Actions, trusted live tests, and npm publication remain
213+
smoke have passed. Registry Alpha `0.1.0-alpha.3` was published from the
214+
immutable release artifact through GitHub Actions OIDC with provenance, and
215+
independent public-registry ESM, CommonJS, and compatible-OpenAI host installs
216+
passed. The immutable `0.1.0-alpha.2` GitHub release remains as an unpublished
217+
failure record because its guard stopped before invoking npm. Mocked responses,
218+
packed artifacts, GitHub Actions, trusted live tests, and npm publication remain
216219
separate evidence layers and must not be represented as another.
217220
218221
See:

RELEASING.md

Lines changed: 54 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ Release status is evidence-based:
99
| Local code-complete | Required source, tests, documentation, metadata, fixtures, and workflows exist, and every applicable offline check passes. |
1010
| Private Remote Validation ready | Local gates pass, the sanitized history and maintainer-confirmed identity are complete, and real credential-free private default-branch CI passes. |
1111
| Public Preview ready | After visibility changes, public-only repository rules, security reporting, environments, default-branch CI, the content gate, and authorized protected live smoke all pass. |
12-
| Registry Alpha candidate | The exact `0.1.0-alpha.2` artifact passes package and clean-install gates. |
12+
| Registry Alpha candidate | The exact `0.1.0-alpha.3` artifact passes package and clean-install gates after preserving the unpublished immutable alpha.2 failure record. |
1313
| Registry Alpha released | The public npm artifact installs from the `next` channel, passes post-publication verification, and has verified provenance plus any documented one-time bootstrap evidence. |
1414
| Stable released | Every stable 0.1.0 local, remote, live, review, provenance, and registry gate has recorded evidence. |
1515

@@ -67,7 +67,7 @@ artifacts. Authorized maintainers must supply or approve:
6767
- Changes to the canonical identity and contact values listed above
6868
- Repository creation and visibility, branch/tag protections, environments,
6969
secrets, and environment approval policies
70-
- npm package ownership for the maintainer-confirmed `cometapi-team` account
70+
- npm package ownership for the maintainer-confirmed `cometapi_dev` account
7171
and Trusted Publisher configuration
7272
- A `COMETAPI_KEY`, request budget, and explicit authorization for live smoke
7373
tests
@@ -79,7 +79,7 @@ corresponding release gate. Do not invent it or replace it with a mock.
7979

8080
The `cometapi` package exists in the public registry. Registry Alpha owner
8181
evidence is complete only when `npm owner ls cometapi` lists the
82-
maintainer-confirmed `cometapi-team` account; until then this remains a Registry
82+
maintainer-confirmed `cometapi_dev` account; until then this remains a Registry
8383
Alpha prerequisite.
8484

8585
For the current Public Preview milestone, private topic pushes, pull requests,
@@ -302,11 +302,11 @@ dist-tag. Before authorizing release:
302302
company-controlled owner and verifies the resulting owner list:
303303

304304
```bash
305-
npm owner add cometapi-team cometapi
305+
npm owner add cometapi_dev cometapi
306306
npm owner ls cometapi
307307
```
308308

309-
Record evidence that the output lists `cometapi-team`; Registry Alpha owner
309+
Record evidence that the output lists `cometapi_dev`; Registry Alpha owner
310310
setup is incomplete until it does.
311311

312312
12. Install `cometapi@next` from npm and run an independent import and mocked
@@ -337,14 +337,58 @@ one-time exception:
337337
publication; the bootstrap does not change or defer that requirement.
338338
5. A maintainer immediately configures OIDC, removes the environment variable
339339
and secret, revokes the token, and restricts token-based publishing.
340-
6. The project immediately prepares and publishes `0.1.0-alpha.2` through
341-
OIDC, verifies its provenance and public installation, and confirms that
342-
`next` resolves to `0.1.0-alpha.2`.
343-
7. The release record documents the exception and both public-install evidence
344-
layers.
340+
6. The project prepared the immutable `0.1.0-alpha.2` GitHub release through
341+
OIDC. Exact-artifact verification and the protected live smoke passed, but
342+
the local publication guard rejected the fixed `actions/setup-node`
343+
authentication placeholder before npm was invoked. No alpha.2 registry
344+
artifact was published.
345+
7. Preserve that immutable failure record, prepare and publish
346+
`0.1.0-alpha.3` through OIDC with regression coverage for the placeholder,
347+
verify its provenance and public installation, and confirm that `next`
348+
resolves to `0.1.0-alpha.3`.
349+
8. The release record documents the exception, the unpublished alpha.2
350+
attempt, and both public-install evidence layers.
345351

346352
This exception must never become a reusable source-controlled publishing path.
347353

354+
## Registry Alpha release evidence
355+
356+
Registry Alpha completed on 2026-07-27 with these independently auditable
357+
layers:
358+
359+
- The one-time `0.1.0-alpha.1` bootstrap recovery published the exact artifact
360+
with provenance in [GitHub Actions run 30251436832](https://github.com/cometapi-dev/cometapi-node/actions/runs/30251436832).
361+
- npm ownership lists both `tensornull <tensor.null@gmail.com>` and the
362+
company-controlled `cometapi_dev <dev@cometapi.com>` account. The bootstrap
363+
token was revoked, local npm authentication was removed, the protected `npm`
364+
environment has no secrets or variables, and npm disallows token publishing.
365+
- The immutable `0.1.0-alpha.2` release passed exact-artifact verification and
366+
protected live smoke in [run 30270656080](https://github.com/cometapi-dev/cometapi-node/actions/runs/30270656080),
367+
then failed before invoking npm because the local publication guard rejected
368+
the fixed `actions/setup-node` authentication placeholder. No alpha.2
369+
registry artifact exists.
370+
- Pull request [#23](https://github.com/cometapi-dev/cometapi-node/pull/23)
371+
added regression coverage for that placeholder while preserving rejection of
372+
real registry credentials. Default-branch [CI run 30272606126](https://github.com/cometapi-dev/cometapi-node/actions/runs/30272606126)
373+
passed before tagging.
374+
- The immutable [`v0.1.0-alpha.3` release](https://github.com/cometapi-dev/cometapi-node/releases/tag/v0.1.0-alpha.3)
375+
completed exact-artifact verification, the bounded three-request live smoke,
376+
OIDC publication, registry convergence, signature verification, dependency
377+
deduplication, and public installation in [run 30272764488](https://github.com/cometapi-dev/cometapi-node/actions/runs/30272764488).
378+
- npm identifies the publisher as GitHub Actions using
379+
`npm-oidc-no-reply@github.com`. The registry reports SLSA provenance v1 and
380+
integrity
381+
`sha512-dtzQOz0dxif74jJpu2fhfUVjiq6TLm3YkPydtsryHGxuU6usaLWTpcblky854T42TG+SbTApCgOoNJDMkEYIOg==`,
382+
and Sigstore transparency-log index
383+
[`2257566579`](https://search.sigstore.dev/?logIndex=2257566579).
384+
- Independent installs from the public registry passed for ESM, CommonJS, and a
385+
host already declaring `openai@6.47.0`. The host resolved one effective
386+
OpenAI installation and preserved `APIError instanceof` identity. Registry
387+
signatures and attestations were verified with `npm audit signatures`.
388+
- The `next` dist-tag resolves to `0.1.0-alpha.3`. The registry-created `latest`
389+
tag remains on `0.1.0-alpha.1`; it is outside the prerelease installation path
390+
and remains explicit residual cleanup before stable publication.
391+
348392
## Stable 0.1.0 sequence
349393

350394
```text

ROADMAP.md

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# CometAPI TypeScript and Node.js SDK Roadmap
22

3-
Status: Public Preview complete; Registry Alpha OIDC closeout in progress
3+
Status: Public Preview and Registry Alpha complete; 0.1.0 stable planned
44
Last updated: 2026-07-27
55
Repository contract: This roadmap is self-contained and is the public source
66
of truth for this repository's release sequence.
@@ -15,21 +15,24 @@ Private Remote Validation and Public Preview are complete for the sanitized
1515
repository. The repository is public with blocking CI, protected repository and
1616
tag rules, Private Vulnerability Reporting, protected environments, and
1717
authorized live-smoke evidence. The functional `0.1.0-alpha.1` prerelease is
18-
available from npm; Registry Alpha remains open until `0.1.0-alpha.2` completes
19-
the OIDC, provenance, ownership, and public-install verification sequence.
18+
available from npm. The immutable `0.1.0-alpha.2` GitHub release failed locally
19+
before invoking npm because its publication guard rejected the fixed
20+
`actions/setup-node` authentication placeholder. `0.1.0-alpha.3` completed the
21+
OIDC, provenance, ownership, and public-install verification sequence and is
22+
available from npm's `next` channel.
2023

2124
## Milestones
2225

23-
| Milestone | Status | User outcome |
24-
| -------------------------- | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
25-
| Repository foundation | In progress | The repository has reproducible development, contribution, security, and release processes. |
26-
| Private Remote Validation | Complete | The sanitized private repository passes real credential-free default-branch CI; public-only controls and live tests remain disabled. |
27-
| Public Preview | Complete | The public repository has blocking CI, repository rules, security reporting, protected environments, and authorized live-smoke evidence. |
28-
| 0.1.x Registry Alpha | In progress | Early adopters can install a functional prerelease from npm's `next` channel; alpha.2 must prove the OIDC-only publication path. |
29-
| 0.1.0 Stable | Planned | Users can install a fully verified package from npm's default channel. |
30-
| 0.2.0 provider-native text | Planned | Users can opt into Anthropic Messages and Gemini text adapters through isolated subpath exports. |
31-
| 0.3.0 CometAPI resources | Planned | Users receive typed access to the first stable CometAPI-specific account or platform resources. |
32-
| Media and task APIs | Later | Users receive typed image, video, audio, upload, polling, and task lifecycle helpers after their contracts are stable. |
26+
| Milestone | Status | User outcome |
27+
| -------------------------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
28+
| Repository foundation | In progress | The repository has reproducible development, contribution, security, and release processes. |
29+
| Private Remote Validation | Complete | The sanitized private repository passes real credential-free default-branch CI; public-only controls and live tests remain disabled. |
30+
| Public Preview | Complete | The public repository has blocking CI, repository rules, security reporting, protected environments, and authorized live-smoke evidence. |
31+
| 0.1.x Registry Alpha | Complete | Early adopters can install a functional, provenance-verified prerelease from npm's `next` channel through the OIDC-only publication path. |
32+
| 0.1.0 Stable | Planned | Users can install a fully verified package from npm's default channel. |
33+
| 0.2.0 provider-native text | Planned | Users can opt into Anthropic Messages and Gemini text adapters through isolated subpath exports. |
34+
| 0.3.0 CometAPI resources | Planned | Users receive typed access to the first stable CometAPI-specific account or platform resources. |
35+
| Media and task APIs | Later | Users receive typed image, video, audio, upload, polling, and task lifecycle helpers after their contracts are stable. |
3336

3437
## Repository Foundation
3538

@@ -339,9 +342,15 @@ npm does not allow configuration before the first package publication, only
339342
access and provenance, and verifies registry installation.
340343
4. A maintainer immediately configures Trusted Publishing, removes the variable
341344
and secret, revokes the token, and restricts token-based publishing.
342-
5. The project immediately publishes `0.1.0-alpha.2` through OIDC, verifies its
343-
provenance and installation, and confirms that `next` resolves to
344-
`0.1.0-alpha.2`.
345+
5. The project attempted to publish `0.1.0-alpha.2` through OIDC. Its immutable
346+
GitHub release passed exact-artifact and live-smoke verification, but the
347+
local publication guard rejected the fixed `actions/setup-node`
348+
authentication placeholder before npm was invoked; no alpha.2 registry
349+
artifact exists.
350+
6. The project preserved that immutable failure record and published
351+
`0.1.0-alpha.3` through OIDC with regression coverage for the placeholder.
352+
Provenance, registry signatures, independent installation, ownership, and
353+
the `next` dist-tag were verified.
345354

346355
This exception must be recorded in the release evidence and must never become
347356
a reusable publication path.

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "cometapi",
3-
"version": "0.1.0-alpha.2",
3+
"version": "0.1.0-alpha.3",
44
"description": "Official TypeScript and Node.js client for the CometAPI OpenAI-compatible API",
55
"author": "CometAPI",
66
"license": "MIT",

scripts/publish-artifact.sh

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@ set -euo pipefail
77

88
artifact_directory="${ARTIFACT_DIRECTORY:-release-artifacts}"
99

10-
if [[ -n "${NODE_AUTH_TOKEN:-}" || -n "${NPM_TOKEN:-}" ]]; then
10+
# actions/setup-node exports this fixed sentinel when registry-url is configured,
11+
# including the npm-documented Trusted Publishing workflow.
12+
setup_node_auth_placeholder="XXXXX-XXXXX-XXXXX-XXXXX"
13+
if [[ -n "${NPM_TOKEN:-}" ]] || \
14+
[[ -n "${NODE_AUTH_TOKEN:-}" && "${NODE_AUTH_TOKEN}" != "$setup_node_auth_placeholder" ]]; then
1115
echo "Registry tokens are forbidden; publication must use npm Trusted Publishing." >&2
1216
exit 1
1317
fi

tests/publish-artifact.test.mjs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import { afterEach, describe, expect, it } from "vitest";
1818
const script = fileURLToPath(
1919
new URL("../scripts/publish-artifact.sh", import.meta.url),
2020
);
21+
const setupNodeAuthPlaceholder = "XXXXX-XXXXX-XXXXX-XXXXX";
2122
const temporaryDirectories = [];
2223

2324
afterEach(() => {
@@ -62,7 +63,7 @@ function runPublish({
6263
distTag = "next",
6364
nodeAuthToken = "",
6465
npmToken = "",
65-
version = "0.1.0-alpha.2",
66+
version = "0.1.0-alpha.3",
6667
} = {}) {
6768
const { bin, log, root } = fixture();
6869
const result = spawnSync("bash", [script], {
@@ -96,6 +97,16 @@ describe("publish artifact authentication", () => {
9697
);
9798
});
9899

100+
it("allows the actions/setup-node authentication placeholder", () => {
101+
const { log, result } = runPublish({
102+
nodeAuthToken: setupNodeAuthPlaceholder,
103+
});
104+
expect(result.status, result.stderr).toBe(0);
105+
expect(log).toMatch(
106+
/^token-present\npublish .* --provenance --tag next\n$/,
107+
);
108+
});
109+
99110
it.each([
100111
["NODE_AUTH_TOKEN", { nodeAuthToken: "opaque" }],
101112
["NPM_TOKEN", { npmToken: "opaque" }],

0 commit comments

Comments
 (0)