From 28c8dea76d091e1c8b598ebd20bfe1bc52459131 Mon Sep 17 00:00:00 2001 From: 0thernet Date: Sat, 29 Aug 2026 16:27:19 -0400 Subject: [PATCH] release: prepare Direct v0.7.9 --- README.md | 23 ++++++++++++----------- docs/adoption.md | 4 ++-- docs/publishing.md | 6 +++--- docs/verification.md | 4 ++-- package.json | 4 ++-- scripts/npm-publish-workflow.test.ts | 28 ++++++++++++++-------------- skills/direct/references/install.md | 10 +++++----- 7 files changed, 40 insertions(+), 39 deletions(-) diff --git a/README.md b/README.md index 640a614..51f256b 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,9 @@ [![skills.sh](https://skills.sh/b/hraness/direct)](https://skills.sh/hraness/direct) -A TypeScript harness for deterministic frontend development with repeatable -scenarios, local fixtures, and browser verification for coding agents. +A TypeScript harness for deterministic frontend testing and development with +repeatable scenarios, local fixtures, and browser verification for coding +agents. Direct makes hard-to-reach frontend states addressable by URL. It runs your real interface and feature code against named, validated local fixture worlds, so signed-in, empty, and error states are repeatable without clicking through setup @@ -38,9 +39,9 @@ real interface and feature state Pin Direct as a development dependency: ```sh -bun add --dev @hraness/direct@0.7.8 +bun add --dev @hraness/direct@0.7.9 # or -npm install --save-dev @hraness/direct@0.7.8 +npm install --save-dev @hraness/direct@0.7.9 ``` Keep Direct in `devDependencies`. A production entry must not import Direct, @@ -53,7 +54,7 @@ composition. It requires Git and Bun 1.3.14, then downloads the source and its development dependencies: ```sh -git clone --branch v0.7.8 --depth 1 https://github.com/hraness/direct.git +git clone --branch v0.7.9 --depth 1 https://github.com/hraness/direct.git cd direct bun install --frozen-lockfile --ignore-scripts bun run example:direct @@ -71,9 +72,9 @@ when the review is complete. Install Direct's single bundled skill from the public repository: ```sh -npx skills add hraness/direct#v0.7.8 +npx skills add hraness/direct#v0.7.9 # or -bunx skills add hraness/direct#v0.7.8 +bunx skills add hraness/direct#v0.7.9 ``` The skill is invoked as `$direct`. It routes installation, adoption, and @@ -87,7 +88,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.8 version. Follow the repository README, add +the npm registry at the exact 0.7.9 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 +104,7 @@ Pin the public npm package to an exact immutable version: ```json { "devDependencies": { - "@hraness/direct": "0.7.8" + "@hraness/direct": "0.7.9" } } ``` @@ -125,8 +126,8 @@ quiescence, coverage claims, cleanup, and emitted production boundaries. The package smoke test keeps that future packaged copy byte-identical to the repository skill. -Prefer `npx skills add hraness/direct#v0.7.8` or -`bunx skills add hraness/direct#v0.7.8` for runner discovery. You can also copy +Prefer `npx skills add hraness/direct#v0.7.9` or +`bunx skills add hraness/direct#v0.7.9` for runner discovery. You can also copy or link that one skill directory into a runner's configured location, then invoke `$direct`. Package installation leaves the skill inert: it does not run a `postinstall` hook or edit repository or user configuration. diff --git a/docs/adoption.md b/docs/adoption.md index 4468524..94a8730 100644 --- a/docs/adoption.md +++ b/docs/adoption.md @@ -3,8 +3,8 @@ Add Direct after identifying the product behavior and external boundary under review. Do not begin by designing fixtures around a provider SDK. The repository carries one `$direct` Agent Skill under `skills/direct`. -Install it with `npx skills add hraness/direct#v0.7.8` or -`bunx skills add hraness/direct#v0.7.8`, or copy that directory into the runner's +Install it with `npx skills add hraness/direct#v0.7.9` or +`bunx skills add hraness/direct#v0.7.9`, or copy that directory into the runner's discovery location. Invoke `$direct` for installation, adoption, and verification work. Skill installation is independent from library package installation and does not activate Direct in a product. diff --git a/docs/publishing.md b/docs/publishing.md index 7a05ab9..5c00724 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.8 - git push origin refs/tags/v0.7.8 + git tag v0.7.9 + git push origin refs/tags/v0.7.9 ``` 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.8 +gh workflow run release.yml --ref main -f tag=v0.7.9 ``` The recovery path skips npm publication. It accepts only the newest stable diff --git a/docs/verification.md b/docs/verification.md index f78e050..4c5bbcf 100644 --- a/docs/verification.md +++ b/docs/verification.md @@ -10,8 +10,8 @@ definition with `parseDefinitionCoverageSnapshot` so a valid but stale catalog cannot be mistaken for the catalog under review. The repository carries one `$direct` Agent Skill under `skills/direct`. -Install it with `npx skills add hraness/direct#v0.7.8` or -`bunx skills add hraness/direct#v0.7.8`, or copy that directory into the runner's +Install it with `npx skills add hraness/direct#v0.7.9` or +`bunx skills add hraness/direct#v0.7.9`, or copy that directory into the runner's discovery location. Invoke `$direct` for the workflow below. The skill is independent from library package installation and structures the audit; it does not turn deterministic evidence into proof of a substituted live system. diff --git a/package.json b/package.json index 7cdb514..678e538 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@hraness/direct", - "version": "0.7.8", - "description": "A TypeScript harness for deterministic frontend development with repeatable scenarios, local fixtures, and browser verification for coding agents.", + "version": "0.7.9", + "description": "A TypeScript harness for deterministic frontend testing and development with repeatable scenarios, local fixtures, and browser verification for coding agents.", "license": "MIT", "type": "module", "sideEffects": [ diff --git a/scripts/npm-publish-workflow.test.ts b/scripts/npm-publish-workflow.test.ts index 60f0a6e..a461459 100644 --- a/scripts/npm-publish-workflow.test.ts +++ b/scripts/npm-publish-workflow.test.ts @@ -159,8 +159,8 @@ describe("npm release workflows", () => { readonly version?: unknown; }; expect(manifest).toEqual(expect.objectContaining({ - version: "0.7.8", - description: "A TypeScript harness for deterministic frontend development with repeatable scenarios, local fixtures, and browser verification for coding agents.", + version: "0.7.9", + description: "A TypeScript harness for deterministic frontend testing and development with repeatable scenarios, local fixtures, and browser verification for coding agents.", keywords: [ "frontend-development", "frontend-testing", @@ -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.8.tgz"); + const tarball = join(directory, "hraness-direct-0.7.9.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.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(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.9^{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.8", - GITHUB_REF: "refs/tags/v0.7.8", + EXPECTED_VERSION: "0.7.9", + GITHUB_REF: "refs/tags/v0.7.9", 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","0.7.7"]', + PUBLISHED_VERSIONS_JSON: '["0.7.4","0.7.5","0.7.6","0.7.7","0.7.8"]', PUBLISH_MARKER: publishMarker, - 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", 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.8 changed after artifact verification", + "Tag v0.7.9 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.8 is no longer reachable from main", + "Tag v0.7.9 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\nv0.7.9", + REMOTE_TAGS: "v0.7.4\nv0.7.5\nv0.7.6\nv0.7.7\nv0.7.8\nv0.7.9\nv0.7.10", }); expect(superseded.exitCode).not.toBe(0); expect(`${superseded.stdout}${superseded.stderr}`).toContain( - "Tag v0.7.8 is not the newest stable tag v0.7.9", + "Tag v0.7.9 is not the newest stable tag v0.7.10", ); 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.9"]', + PUBLISHED_VERSIONS_JSON: '["0.7.4","0.7.10"]', }); expect(staleVersion.exitCode).not.toBe(0); expect(`${staleVersion.stdout}${staleVersion.stderr}`).toContain( - "@hraness/direct@0.7.8 is not newer than published stable 0.7.9", + "@hraness/direct@0.7.9 is not newer than published stable 0.7.10", ); expect(await Bun.file(publishMarker).exists()).toBe(false); diff --git a/skills/direct/references/install.md b/skills/direct/references/install.md index 8af2291..594c768 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.8 +bun add --dev @hraness/direct@0.7.9 # or, in an npm project -npm install --save-dev @hraness/direct@0.7.8 +npm install --save-dev @hraness/direct@0.7.9 ``` The equivalent manifest entry is: @@ -31,7 +31,7 @@ The equivalent manifest entry is: ```json { "devDependencies": { - "@hraness/direct": "0.7.8" + "@hraness/direct": "0.7.9" } } ``` @@ -43,8 +43,8 @@ If the task starts with skill installation rather than a loaded skill, install the single repository skill with either command: ```sh -npx skills add hraness/direct#v0.7.8 -bunx skills add hraness/direct#v0.7.8 +npx skills add hraness/direct#v0.7.9 +bunx skills add hraness/direct#v0.7.9 ``` Restart or reload the agent runner if it does not discover newly installed