diff --git a/README.md b/README.md index 24101b7..e90668c 100644 --- a/README.md +++ b/README.md @@ -38,9 +38,9 @@ real interface and feature state Pin Direct as a development dependency: ```sh -bun add --dev @hraness/direct@0.7.7 +bun add --dev @hraness/direct@0.7.8 # or -npm install --save-dev @hraness/direct@0.7.7 +npm install --save-dev @hraness/direct@0.7.8 ``` Keep Direct in `devDependencies`. A production entry must not import Direct, @@ -87,7 +87,7 @@ Copy this prompt into Codex, Claude Code, or another coding agent: ```text Use $direct to install hraness/direct from -the npm registry at the exact 0.7.7 version. Follow the repository README, add +the npm registry at the exact 0.7.8 version. Follow the repository README, add `@hraness/direct` to devDependencies only, and verify that the production dependency graph excludes Direct. Do not add a fixture composition until I ask. @@ -103,7 +103,7 @@ Pin the public npm package to an exact immutable version: ```json { "devDependencies": { - "@hraness/direct": "0.7.7" + "@hraness/direct": "0.7.8" } } ``` diff --git a/docs/publishing.md b/docs/publishing.md index 64c18bd..7a05ab9 100644 --- a/docs/publishing.md +++ b/docs/publishing.md @@ -62,8 +62,8 @@ cookie, one-time password, recovery code, or write token to GitHub. `v`. ```sh - git tag v0.7.7 - git push origin refs/tags/v0.7.7 + git tag v0.7.8 + git push origin refs/tags/v0.7.8 ``` 3. Wait for **Release**. The workflow runs these boundaries in order: @@ -123,7 +123,7 @@ Merge the fix to `main`, then dispatch **Release** from current `main` with the exact existing stable tag: ```sh -gh workflow run release.yml --ref main -f tag=v0.7.7 +gh workflow run release.yml --ref main -f tag=v0.7.8 ``` The recovery path skips npm publication. It accepts only the newest stable diff --git a/package.json b/package.json index b53f7d6..7cdb514 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@hraness/direct", - "version": "0.7.7", + "version": "0.7.8", "description": "A TypeScript harness for deterministic frontend development with repeatable scenarios, local fixtures, and browser verification for coding agents.", "license": "MIT", "type": "module", diff --git a/scripts/npm-publish-workflow.test.ts b/scripts/npm-publish-workflow.test.ts index 91deb0d..60f0a6e 100644 --- a/scripts/npm-publish-workflow.test.ts +++ b/scripts/npm-publish-workflow.test.ts @@ -159,7 +159,7 @@ describe("npm release workflows", () => { readonly version?: unknown; }; expect(manifest).toEqual(expect.objectContaining({ - version: "0.7.7", + version: "0.7.8", description: "A TypeScript harness for deterministic frontend development with repeatable scenarios, local fixtures, and browser verification for coding agents.", keywords: [ "frontend-development", @@ -357,7 +357,7 @@ describe("npm release workflows", () => { const binaryDirectory = join(directory, "bin"); const commandLog = join(directory, "commands.log"); const publishMarker = join(directory, "published.txt"); - const tarball = join(directory, "hraness-direct-0.7.7.tgz"); + const tarball = join(directory, "hraness-direct-0.7.8.tgz"); const metadata = join(directory, "npm-pack.json"); const digest = join(directory, "npm-package.sha256"); const sourceSha = "b".repeat(40); @@ -375,7 +375,7 @@ describe("npm release workflows", () => { writeFile(metadata, "reviewed metadata fixture\n", "utf8"), writeFile(digest, "reviewed digest fixture\n", "utf8"), ]); - await writeFile(gitStub, `#!/bin/bash\nset -euo pipefail\nprintf 'git %s\\n' "$*" >> "$COMMAND_LOG"\ncase "$*" in\n *"rev-parse refs/heads/main"*) printf '%s\\n' "$DEFAULT_SHA" ;;\n *"rev-parse refs/tags/v0.7.7^{commit}"*) printf '%s\\n' "$TAG_SHA" ;;\n *"merge-base --is-ancestor"*) [[ "$ANCESTRY_STATE" == ancestor ]] ;;\n *"tag --list v*"*) printf '%s\\n' "$REMOTE_TAGS" ;;\nesac\n`, "utf8"); + await writeFile(gitStub, `#!/bin/bash\nset -euo pipefail\nprintf 'git %s\\n' "$*" >> "$COMMAND_LOG"\ncase "$*" in\n *"rev-parse refs/heads/main"*) printf '%s\\n' "$DEFAULT_SHA" ;;\n *"rev-parse refs/tags/v0.7.8^{commit}"*) printf '%s\\n' "$TAG_SHA" ;;\n *"merge-base --is-ancestor"*) [[ "$ANCESTRY_STATE" == ancestor ]] ;;\n *"tag --list v*"*) printf '%s\\n' "$REMOTE_TAGS" ;;\nesac\n`, "utf8"); await writeFile(sha256Stub, `#!/bin/bash\nset -euo pipefail\nprintf 'sha256sum %s\\n' "$*" >> "$COMMAND_LOG"\ncase "$1" in\n "$TARBALL") value="$EXPECTED_ARCHIVE_SHA256" ;;\n "$METADATA") value="$EXPECTED_METADATA_SHA256" ;;\n "$DIGEST") value="$EXPECTED_DIGEST_SHA256" ;;\n *) echo "unexpected hash target: $1" >&2; exit 1 ;;\nesac\nprintf '%s %s\\n' "$value" "$1"\n`, "utf8"); await writeFile(npmStub, `#!/bin/bash\nset -euo pipefail\nprintf 'npm %s\\n' "$*" >> "$COMMAND_LOG"\nif [[ "\${1-}" == view ]]; then\n printf '%s\\n' "$PUBLISHED_VERSIONS_JSON"\n exit 0\nfi\nprintf 'published\\n' > "$PUBLISH_MARKER"\n`, "utf8"); await Promise.all([chmod(gitStub, 0o755), chmod(npmStub, 0o755), chmod(sha256Stub, 0o755)]); @@ -391,15 +391,15 @@ describe("npm release workflows", () => { EXPECTED_DIGEST_SHA256: digestSha256, EXPECTED_METADATA_SHA256: metadataSha256, EXPECTED_SOURCE_SHA: sourceSha, - EXPECTED_VERSION: "0.7.7", - GITHUB_REF: "refs/tags/v0.7.7", + EXPECTED_VERSION: "0.7.8", + GITHUB_REF: "refs/tags/v0.7.8", GITHUB_REPOSITORY: "hraness/direct", GITHUB_SHA: sourceSha, METADATA: metadata, PATH: `${binaryDirectory}:${process.env.PATH ?? ""}`, - PUBLISHED_VERSIONS_JSON: '["0.7.4","0.7.5","0.7.6"]', + PUBLISHED_VERSIONS_JSON: '["0.7.4","0.7.5","0.7.6","0.7.7"]', PUBLISH_MARKER: publishMarker, - REMOTE_TAGS: "v0.7.4\nv0.7.5\nv0.7.6\nv0.7.7", + REMOTE_TAGS: "v0.7.4\nv0.7.5\nv0.7.6\nv0.7.7\nv0.7.8", RUNNER_TEMP: directory, TAG_SHA: sourceSha, TARBALL: tarball, @@ -430,7 +430,7 @@ describe("npm release workflows", () => { }); expect(moved.exitCode).not.toBe(0); expect(`${moved.stdout}${moved.stderr}`).toContain( - "Tag v0.7.7 changed after artifact verification", + "Tag v0.7.8 changed after artifact verification", ); expect(await Bun.file(publishMarker).exists()).toBe(false); @@ -441,18 +441,18 @@ describe("npm release workflows", () => { }); expect(detached.exitCode).not.toBe(0); expect(`${detached.stdout}${detached.stderr}`).toContain( - "Tag v0.7.7 is no longer reachable from main", + "Tag v0.7.8 is no longer reachable from main", ); expect(await Bun.file(publishMarker).exists()).toBe(false); await rm(commandLog, { force: true }); const superseded = await runWorkflowScript(script, { ...baseEnvironment, - REMOTE_TAGS: "v0.7.4\nv0.7.5\nv0.7.6\nv0.7.7\nv0.7.8", + REMOTE_TAGS: "v0.7.4\nv0.7.5\nv0.7.6\nv0.7.7\nv0.7.8\nv0.7.9", }); expect(superseded.exitCode).not.toBe(0); expect(`${superseded.stdout}${superseded.stderr}`).toContain( - "Tag v0.7.7 is not the newest stable tag v0.7.8", + "Tag v0.7.8 is not the newest stable tag v0.7.9", ); expect(await readFile(commandLog, "utf8")).not.toContain("npm publish"); expect(await Bun.file(publishMarker).exists()).toBe(false); @@ -460,11 +460,11 @@ describe("npm release workflows", () => { await rm(commandLog, { force: true }); const staleVersion = await runWorkflowScript(script, { ...baseEnvironment, - PUBLISHED_VERSIONS_JSON: '["0.7.4","0.7.8"]', + PUBLISHED_VERSIONS_JSON: '["0.7.4","0.7.9"]', }); expect(staleVersion.exitCode).not.toBe(0); expect(`${staleVersion.stdout}${staleVersion.stderr}`).toContain( - "@hraness/direct@0.7.7 is not newer than published stable 0.7.8", + "@hraness/direct@0.7.8 is not newer than published stable 0.7.9", ); expect(await Bun.file(publishMarker).exists()).toBe(false); diff --git a/skills/direct/references/install.md b/skills/direct/references/install.md index 854b885..1567f3c 100644 --- a/skills/direct/references/install.md +++ b/skills/direct/references/install.md @@ -21,9 +21,9 @@ global `direct` CLI. For a new installation, pin the reviewed public release: ```sh -bun add --dev @hraness/direct@0.7.7 +bun add --dev @hraness/direct@0.7.8 # or, in an npm project -npm install --save-dev @hraness/direct@0.7.7 +npm install --save-dev @hraness/direct@0.7.8 ``` The equivalent manifest entry is: @@ -31,7 +31,7 @@ The equivalent manifest entry is: ```json { "devDependencies": { - "@hraness/direct": "0.7.7" + "@hraness/direct": "0.7.8" } } ```