@guiho/runx 0.2.0 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -15,6 +15,24 @@ owner: runx
15
15
 
16
16
  # Changelog
17
17
 
18
+ ## 0.2.2 - 2026-07-14
19
+
20
+ ### Changed
21
+
22
+ - Retried the npm trusted-publishing release after the initial `0.2.1` tag could not be created under the repository tag ruleset.
23
+
24
+ ## 0.2.1 - 2026-07-14
25
+
26
+ ### Added
27
+
28
+ - Added npm OIDC trusted publishing to the protected `production` workflow for `@guiho/runx@*` tags.
29
+ - Expanded CI to validate the complete 12-target native binary matrix.
30
+ - Added active GitHub rulesets protecting `main` and `@guiho/runx@*` release tags.
31
+
32
+ ### Fixed
33
+
34
+ - Fixed the published `runx` launcher to use the compiled library entrypoint included in the npm package instead of relying on excluded source files.
35
+
18
36
  ## 0.2.0 - 2026-07-12
19
37
 
20
38
  ### Added
package/DOCS.md CHANGED
@@ -114,5 +114,7 @@ macOS/Linux assets from GitHub Releases into the user's local bin directory.
114
114
  on Windows replacement is scheduled after RunX exits. `runx uninstall` removes
115
115
  the same native executable and supports `--dry-run`.
116
116
 
117
- The alpha CI validates code and compiles a native executable but intentionally
118
- does not publish to npm or GitHub Releases.
117
+ CI validates code and compiles the local executable plus the native release
118
+ matrix. Protected `@guiho/runx@*` tags run the `production` publish workflow,
119
+ which uploads twelve native assets to GitHub Releases and publishes the public
120
+ npm package through OIDC trusted publishing.
package/README.md CHANGED
@@ -22,8 +22,12 @@ local shell commands rather than package-manager scripts.
22
22
 
23
23
  ## Install
24
24
 
25
- RunX is distributed as a native executable from GitHub Releases. It is not
26
- published to npm during the alpha.
25
+ RunX is distributed as a native executable from GitHub Releases and as the
26
+ public `@guiho/runx` package on npm. The npm launcher requires Bun.
27
+
28
+ ```sh
29
+ bun add --global @guiho/runx
30
+ ```
27
31
 
28
32
  ```powershell
29
33
  irm https://raw.githubusercontent.com/CGuiho/runx/main/devops/install.ps1 | iex
@@ -5,8 +5,10 @@ parent: runx-docs
5
5
  children: []
6
6
  files:
7
7
  alpha-boundaries.md: Captures accepted alpha scope, safety, distribution, and compatibility decisions.
8
+ npm-trusted-publishing.md: Defines the accepted npm OIDC publishing workflow and protected-branch patch-release trial.
8
9
  documents:
9
10
  alpha-boundaries.md: Decision record for RunX alpha boundaries.
11
+ npm-trusted-publishing.md: Decision record for GitHub Actions npm trusted publishing and the first automated patch release.
10
12
  tags:
11
13
  - decisions
12
14
  keywords:
@@ -0,0 +1,92 @@
1
+ ---
2
+ name: RunX npm Trusted Publishing
3
+ purpose: Define the accepted GitHub Actions and Mirror release flow for publishing RunX to npm with OIDC.
4
+ description: Records the two-workflow design, native release preservation, npm trusted-publishing requirements, and protected-branch release path.
5
+ created: 2026-07-14
6
+ flags:
7
+ - accepted
8
+ tags:
9
+ - decisions
10
+ - release
11
+ - npm
12
+ keywords:
13
+ - runx
14
+ - trusted publishing
15
+ - oidc
16
+ - github actions
17
+ - mirror
18
+ owner: runx-decisions
19
+ ---
20
+
21
+ # RunX npm Trusted Publishing
22
+
23
+ ## Context
24
+
25
+ RunX already has separate CI and tag-triggered publishing workflows. The
26
+ publish workflow validates the package, compiles twelve native binaries, and
27
+ publishes them to a GitHub Release. The original alpha decision excluded npm
28
+ publishing, but RunX is now ready to publish `@guiho/runx` through npm trusted
29
+ publishing without a long-lived npm token.
30
+
31
+ ## Decision
32
+
33
+ - Keep exactly two workflows: `.github/workflows/ci.yml` and
34
+ `.github/workflows/publish.yml`.
35
+ - Keep CI read-only and run it for pull requests and pushes to `main`.
36
+ - Keep the publish trigger scoped to tags matching `@guiho/runx@*`.
37
+ - Preserve the existing native-binary GitHub Release and asset-verification
38
+ behavior.
39
+ - Add npm trusted publishing to the existing publish job after the idempotent
40
+ GitHub Release steps.
41
+ - Grant `id-token: write` only to the publish workflow and retain the
42
+ `production` GitHub environment.
43
+ - Use a GitHub-hosted runner, Node 24, npm 11.5.1 or newer, and
44
+ `npm publish --access public` without an npm token. OIDC trusted publishing
45
+ supplies authentication and provenance.
46
+ - Keep Bun as the package development, validation, build, and binary toolchain.
47
+ Node/npm is used only for the registry publication step and does not become a
48
+ RunX runtime dependency.
49
+
50
+ ## Release Trial
51
+
52
+ The first automated npm publication trial is the Mirror-managed patch release
53
+ from `0.2.0` to `0.2.1`.
54
+
55
+ 1. Land the workflow and documentation changes on `main` through a pull
56
+ request, because the default branch is protected.
57
+ 2. Run the full RunX validation and `mirror version plan patch` before applying
58
+ the release.
59
+ 3. Prepare the changelog from the planned version, commit release preparation,
60
+ and apply the patch with Mirror so the release commit and
61
+ `@guiho/runx@0.2.1` tag remain Mirror-managed.
62
+ 4. Push the protected release tag only after the release commit is part of the
63
+ protected-branch history.
64
+ 5. Observe the Publish workflow and verify both the GitHub Release assets and
65
+ npm package publication.
66
+
67
+ ## Failure and Retry Behavior
68
+
69
+ - GitHub Release creation/upload remains before npm publication because those
70
+ operations are idempotent and can be retried safely.
71
+ - If npm rejects OIDC configuration, the workflow fails at the npm step without
72
+ attempting a second version or modifying the existing tag.
73
+ - After correcting npm trusted-publisher settings, rerun the failed workflow;
74
+ the GitHub Release assets are updated in place before npm is retried.
75
+ - Never retry by republishing the same version after npm has accepted it;
76
+ confirm registry state first.
77
+
78
+ ## Validation
79
+
80
+ - Validate workflow syntax and inspect the resulting diff.
81
+ - Run `bun run typecheck`, `bun test`, `bun run build`, and
82
+ `bun run binaries` before the release.
83
+ - Run XDocs strict metadata, tree, and doctor checks for every changed
84
+ documentation module.
85
+ - Confirm the npm trusted publisher names repository `CGuiho/runx`, workflow
86
+ `publish.yml`, environment `production`, and permission to run `npm publish`.
87
+
88
+ ## Superseded Boundary
89
+
90
+ This decision supersedes only the alpha statement that RunX has CI without an
91
+ npm publishing job. The remaining safety, manifest, runtime, and scope
92
+ decisions in [RunX Alpha Boundaries](alpha-boundaries.md) remain in force.
@@ -7,6 +7,7 @@ children:
7
7
  - runx-architecture
8
8
  - runx-decisions
9
9
  - runx-plans
10
+ - runx-reviews
10
11
  - runx-todo
11
12
  - runx-validation
12
13
  files: {}
@@ -0,0 +1,119 @@
1
+ ---
2
+ name: RunX npm Trusted Publishing Release Plan
3
+ purpose: Sequence the workflow implementation, protected-branch delivery, Mirror patch release, and public publish verification for RunX 0.2.1.
4
+ description: Executable units for adding npm OIDC publishing without removing native releases, then triggering and observing the first trusted publication.
5
+ created: 2026-07-14
6
+ flags:
7
+ - approved
8
+ tags:
9
+ - plans
10
+ - release
11
+ - npm
12
+ keywords:
13
+ - runx
14
+ - trusted publishing
15
+ - github actions
16
+ - mirror patch
17
+ - 0.2.1
18
+ owner: runx-plans
19
+ ---
20
+
21
+ # RunX npm Trusted Publishing Release Plan
22
+
23
+ ## Source Decision
24
+
25
+ - [RunX npm Trusted Publishing](../decisions/npm-trusted-publishing.md)
26
+
27
+ ## Unit 1: Implement the Workflows
28
+
29
+ - Goal: Keep two GitHub workflows while adding npm OIDC publication to the
30
+ existing tag-triggered publish job.
31
+ - Owner: RunX repository.
32
+ - Dependencies: Accepted trusted-publishing decision; npm trusted publisher for
33
+ `CGuiho/runx`, `publish.yml`, and environment `production`.
34
+ - Files:
35
+ - `.github/workflows/ci.yml`
36
+ - `.github/workflows/publish.yml`
37
+ - `.github/workflows/workflows.xdocs.md`
38
+ - `scripts/runx-bin.ts`
39
+ - `scripts/scripts.xdocs.md`
40
+ - `AGENTS.md`
41
+ - Permissions: CI retains `contents: read`; Publish retains `contents: write`
42
+ and gains `id-token: write` only for npm OIDC.
43
+ - Checks: Inspect YAML, run `git diff --check`, and validate the package with
44
+ Bun before delivery.
45
+ - Acceptance:
46
+ - CI validates install, typecheck, tests, build, and native builds.
47
+ - Publish retains tag trigger `@guiho/runx@*`, environment `production`, and
48
+ twelve-asset GitHub Release handling.
49
+ - Publish uses Node 24 with npm 11.5.1 or newer and runs
50
+ `npm publish --access public` without an npm token.
51
+ - The published `runx` bin launcher prefers the included compiled
52
+ `library/guiho-runx-bin.js` and retains the source launcher fallback only
53
+ for repository checkouts.
54
+ - `npm pack --dry-run --json` confirms the launcher and compiled library are
55
+ both included, and the packaged launcher can display RunX help through Bun.
56
+ - Stop conditions: Do not continue if the repository URL, workflow filename,
57
+ environment, OIDC permission, or public access does not match npm trusted
58
+ publisher configuration.
59
+
60
+ ## Unit 2: Validate and Deliver Through the Protected Branch
61
+
62
+ - Goal: Land the workflow and documentation changes on `main` without bypassing
63
+ the new branch ruleset.
64
+ - Dependencies: Unit 1 complete.
65
+ - Checks:
66
+ - `bun run typecheck`
67
+ - `bun test`
68
+ - `bun run build`
69
+ - `bun run binaries`
70
+ - `xdocs meta .github --strict --format json`
71
+ - `xdocs tree`
72
+ - targeted XDocs doctor checks
73
+ - Delivery:
74
+ - Commit only understood RunX changes on a `codex/` feature branch.
75
+ - Push the feature branch, open a pull request, and wait for required checks.
76
+ - Merge without bypassing protections, then synchronize local `main`.
77
+ - Acceptance: Remote `main` contains the trusted-publishing workflow and its
78
+ required documentation before a release tag is pushed.
79
+ - Stop conditions: Stop on failed CI, unresolved required review, unexpected
80
+ worktree changes, or protection failures.
81
+
82
+ ## Unit 3: Prepare and Apply Patch 0.2.1
83
+
84
+ - Goal: Use Mirror to create the `0.2.1` release commit and tag from the updated
85
+ protected-branch history.
86
+ - Dependencies: Unit 2 merged and local `main` synchronized.
87
+ - Sequence:
88
+ - Run `mirror config show` and confirm changelog and dirty-worktree policy.
89
+ - Confirm a clean worktree.
90
+ - Run typecheck, tests, build, and native binaries.
91
+ - Run `mirror version plan patch` and confirm `nextVersion` is `0.2.1`.
92
+ - Update `CHANGELOG.md` and its XDocs owner metadata if required.
93
+ - Commit release preparation before applying Mirror.
94
+ - Run `mirror version apply patch --yes` with the configured release commit.
95
+ - Acceptance: package version, Mirror release commit, and
96
+ `@guiho/runx@0.2.1` tag agree.
97
+ - Stop conditions: Stop if Mirror plans another version, validation fails, or
98
+ the worktree is dirty before apply.
99
+
100
+ ## Unit 4: Push and Observe Trusted Publishing
101
+
102
+ - Goal: Trigger the public Publish workflow and verify npm trusted publishing.
103
+ - Dependencies: Unit 3 complete; explicit user authorization to test the public
104
+ release path.
105
+ - Delivery:
106
+ - Land the Mirror release commit through the protected branch when required.
107
+ - Push `@guiho/runx@0.2.1` only after its commit is part of `main` history.
108
+ - Monitor the public GitHub Actions run through completion.
109
+ - Verify the GitHub Release has twelve native assets.
110
+ - Verify npm reports `@guiho/runx@0.2.1` with trusted provenance.
111
+ - Acceptance: the public Publish run succeeds and both distribution channels
112
+ expose version `0.2.1`.
113
+ - Stop conditions: If npm fails, capture the exact public job failure and do not
114
+ create another version or replace the tag; correct trust configuration and
115
+ rerun the same workflow only after confirming npm did not accept the version.
116
+
117
+ ## First Executable Unit
118
+
119
+ Unit 1: implement the workflows and their XDocs/agent documentation updates.
@@ -5,8 +5,10 @@ parent: runx-docs
5
5
  children: []
6
6
  files:
7
7
  alpha-implementation.md: Breaks the accepted alpha into implementation and validation units.
8
+ npm-trusted-publishing-release.md: Sequences workflow implementation, protected delivery, Mirror patching, and public trusted-publishing verification.
8
9
  documents:
9
10
  alpha-implementation.md: Plan used for the initial RunX implementation.
11
+ npm-trusted-publishing-release.md: Approved executable plan for the RunX 0.2.1 trusted-publishing release trial.
10
12
  tags:
11
13
  - plans
12
14
  keywords:
@@ -0,0 +1,73 @@
1
+ ---
2
+ name: RunX npm Trusted Publishing Release Plan Review
3
+ purpose: Verify that the trusted-publishing workflow and patch-release plan is safe, sequenced, testable, and ready for execution.
4
+ description: Reviews protected-branch delivery, Mirror ordering, npm OIDC permissions, failure handling, documentation, and validation gates.
5
+ created: 2026-07-14
6
+ flags:
7
+ - approved
8
+ tags:
9
+ - reviews
10
+ - plans
11
+ - release
12
+ keywords:
13
+ - runx
14
+ - trusted publishing
15
+ - plan review
16
+ - mirror
17
+ - github actions
18
+ owner: runx-plan-reviews
19
+ ---
20
+
21
+ # RunX npm Trusted Publishing Release Plan Review
22
+
23
+ ## Verdict
24
+
25
+ Ready for execution.
26
+
27
+ ## Findings
28
+
29
+ - No blocker or high-severity findings remain.
30
+ - A package inspection found that the npm launcher referenced an excluded
31
+ `source/` fallback. Unit 1 now includes the bounded launcher correction and
32
+ pack/launcher verification, resolving the issue before publication.
33
+ - The plan traces to the accepted npm trusted-publishing decision and preserves
34
+ Bun as the RunX runtime and development toolchain.
35
+ - OIDC permission is limited to the publish workflow, and the plan explicitly
36
+ requires the configured `production` environment.
37
+ - Native GitHub Release publication precedes npm publication, making a failed
38
+ OIDC attempt safely rerunnable before npm accepts the version.
39
+
40
+ ## Sequencing Review
41
+
42
+ - Workflow changes land on protected `main` before any release tag is pushed.
43
+ - Mirror plans the patch before changelog preparation and applies the version
44
+ only after validation and a clean worktree.
45
+ - The release branch is merged before its existing Mirror tag is pushed, so the
46
+ tagged release commit is already part of protected `main` history when the
47
+ public workflow starts.
48
+
49
+ ## Acceptance and Validation Review
50
+
51
+ - Workflow contents, permissions, trigger, environment, native asset count,
52
+ npm command, and trusted-publisher identity are explicit.
53
+ - Bun typecheck, tests, build, native matrix, XDocs checks, GitHub Actions run,
54
+ GitHub Release assets, and npm registry state all have verification steps.
55
+ - Failure stop conditions prevent version replacement, duplicate publication,
56
+ or a second release when the first npm outcome is uncertain.
57
+
58
+ ## TODO Alignment
59
+
60
+ The repository TODO currently contains completed package and protection tasks.
61
+ This release is a single approved execution session with a durable decision and
62
+ plan, so no additional long-running TODO task is required.
63
+
64
+ ## First Executable Unit
65
+
66
+ Implement Unit 1 in
67
+ [RunX npm Trusted Publishing Release Plan](../../plans/npm-trusted-publishing-release.md):
68
+ update the two workflows and their XDocs/agent documentation.
69
+
70
+ ## References
71
+
72
+ - [RunX npm Trusted Publishing Release Plan](../../plans/npm-trusted-publishing-release.md)
73
+ - [RunX npm Trusted Publishing](../../decisions/npm-trusted-publishing.md)
@@ -0,0 +1,21 @@
1
+ ---
2
+ subject: runx-plan-reviews
3
+ description: Execution-readiness reviews for RunX implementation and release plans.
4
+ parent: runx-reviews
5
+ children: []
6
+ files:
7
+ npm-trusted-publishing-release-review.md: Reviews sequencing, acceptance criteria, safety gates, and validation for the RunX 0.2.1 trusted-publishing plan.
8
+ documents:
9
+ npm-trusted-publishing-release-review.md: Ready-for-execution review of the npm trusted-publishing release plan.
10
+ tags:
11
+ - reviews
12
+ - plans
13
+ keywords:
14
+ - runx
15
+ - plan review
16
+ - trusted publishing
17
+ flags: []
18
+ status: stable
19
+ ---
20
+
21
+ Plan reviews record whether RunX plans are safe and executable before implementation begins.
@@ -0,0 +1,18 @@
1
+ ---
2
+ subject: runx-reviews
3
+ description: Structured reviews of RunX architecture, plans, implementation, and release readiness.
4
+ parent: runx-docs
5
+ children:
6
+ - runx-plan-reviews
7
+ files: {}
8
+ documents: {}
9
+ tags:
10
+ - reviews
11
+ keywords:
12
+ - runx
13
+ - reviews
14
+ flags: []
15
+ status: stable
16
+ ---
17
+
18
+ RunX reviews challenge durable plans and implementation evidence before execution or release.
@@ -0,0 +1,54 @@
1
+ ---
2
+ name: RunX npm Trusted Publishing 0.2.2 Validation
3
+ purpose: Record the release checks and GitHub result for the 0.2.2 trusted-publishing retry.
4
+ description: Documents successful build validation and the tag-ruleset rejection that prevented the Publish workflow from starting.
5
+ created: 2026-07-14
6
+ flags: []
7
+ tags:
8
+ - validation
9
+ - release
10
+ keywords:
11
+ - runx
12
+ - npm
13
+ - trusted publishing
14
+ owner: runx-validation
15
+ ---
16
+
17
+ # npm Trusted Publishing 0.2.2 Validation
18
+
19
+ ## Result
20
+
21
+ The `0.2.2` package bump was merged to protected `main`, but GitHub rejected
22
+ creation of the `@guiho/runx@0.2.2` tag. Because the tag was not created, the
23
+ Publish workflow did not run and npm remained on `0.2.0`.
24
+
25
+ ## Passed checks
26
+
27
+ - `bun run typecheck`
28
+ - `bun test`: 4 passed, 0 failed
29
+ - `bun run build`
30
+ - `bun run binary`
31
+ - `bun run binaries`: 12 native assets built and verified
32
+ - `mirror version plan patch`: planned `0.2.1` to `0.2.2`
33
+ - `xdocs meta . --documents --strict --owner runx --format json`
34
+ - Pull request `#4` CI: passed
35
+
36
+ ## Release evidence
37
+
38
+ - Protected-main merge: `57c7d81`
39
+ - Mirror release commit: `6c67be5`
40
+ - Local annotated tag: `@guiho/runx@0.2.2`
41
+ - Remote tag: not created
42
+ - Publish workflow run: not started
43
+ - npm latest version after the attempt: `0.2.0`
44
+
45
+ ## Blocking rules
46
+
47
+ GitHub rejected the tag with `GH013` because the active tag ruleset both
48
+ requires linear history and restricts tag creation. The reported merge-commit
49
+ violation was `f445631`. The ruleset had no bypass actors, and the authenticated
50
+ repository owner could not bypass it.
51
+
52
+ Trusted publishing itself was not exercised by this attempt. The tag ruleset
53
+ must permit the release actor to create the version tag before npm OIDC can be
54
+ validated.
@@ -7,6 +7,7 @@ files:
7
7
  alpha-implementation-summary.md: Records the completed alpha implementation, checks, and release boundaries.
8
8
  documents:
9
9
  alpha-implementation-summary.md: Validation summary for the first RunX implementation.
10
+ npm-trusted-publishing-0.2.2.md: Validation evidence for the blocked 0.2.2 npm trusted-publishing retry.
10
11
  tags:
11
12
  - validation
12
13
  keywords:
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@guiho/runx",
3
3
  "description": "A language-agnostic, documented command catalog and local CLI executor.",
4
- "version": "0.2.0",
4
+ "version": "0.2.3",
5
5
  "type": "module",
6
6
  "main": "./library/guiho-runx.js",
7
7
  "types": "./library/guiho-runx.d.ts",
@@ -2,6 +2,7 @@
2
2
 
3
3
  const args = process.argv.slice(2)
4
4
  const binaryPath = new URL(`../vendor/runx${process.platform === 'win32' ? '.exe' : ''}`, import.meta.url)
5
+ const libraryPath = new URL('../library/guiho-runx-bin.js', import.meta.url)
5
6
  const sourcePath = new URL('../source/guiho-runx-bin.ts', import.meta.url)
6
7
 
7
8
  if (await Bun.file(binaryPath).exists()) {
@@ -9,6 +10,11 @@ if (await Bun.file(binaryPath).exists()) {
9
10
  process.exit(await child.exited)
10
11
  }
11
12
 
13
+ if (await Bun.file(libraryPath).exists()) {
14
+ const child = Bun.spawn([process.execPath, Bun.fileURLToPath(libraryPath), ...args], { stdin: 'inherit', stdout: 'inherit', stderr: 'inherit' })
15
+ process.exit(await child.exited)
16
+ }
17
+
12
18
  if (await Bun.file(sourcePath).exists()) {
13
19
  const child = Bun.spawn([process.execPath, Bun.fileURLToPath(sourcePath), ...args], { stdin: 'inherit', stdout: 'inherit', stderr: 'inherit' })
14
20
  process.exit(await child.exited)
@@ -4,7 +4,7 @@ description: Package-manager launcher scripts for RunX.
4
4
  parent: runx
5
5
  children: []
6
6
  files:
7
- runx-bin.ts: Executes a packaged native binary when present or the source CLI in a checkout.
7
+ runx-bin.ts: Executes a packaged native binary, the published compiled library launcher, or the source CLI fallback in a checkout.
8
8
  documents: {}
9
9
  tags:
10
10
  - scripts
@@ -16,5 +16,5 @@ flags: []
16
16
  status: stable
17
17
  ---
18
18
 
19
- The package launcher preserves the `runx` bin command in development checkouts
20
- and installed packages.
19
+ The package launcher preserves the `runx` bin command in installed npm packages
20
+ and development checkouts without requiring unpublished source files.
@@ -1,4 +1,4 @@
1
- interface:
2
- display_name: "RunX"
3
- short_description: "Manage documented RunX command catalogs safely."
4
- default_prompt: "Use the RunX CLI to inspect, validate, and run commands from runx.yaml safely."
1
+ interface:
2
+ display_name: "RunX"
3
+ short_description: "Manage documented RunX command catalogs safely."
4
+ default_prompt: "Use the RunX CLI to inspect, validate, and run commands from runx.yaml safely."