Skip to content

Prepare v0.1.13 release candidate - #6

Draft
BoldNewMedia wants to merge 10 commits into
yanchuk:mainfrom
BoldNewMedia:agent/release-readiness
Draft

Prepare v0.1.13 release candidate#6
BoldNewMedia wants to merge 10 commits into
yanchuk:mainfrom
BoldNewMedia:agent/release-readiness

Conversation

@BoldNewMedia

@BoldNewMedia BoldNewMedia commented Aug 17, 2026

Copy link
Copy Markdown

Summary

This consolidates and supersedes #2, #3 and #4 as a v0.1.13 release candidate.

  • fixes file-URL handling in paths containing spaces and the E2E repository root
  • hardens structured review parsing, including ambiguous multi-object rejection
  • makes base and staged review diffs complete and refuses unsafe untracked-file reviews
  • monitors completed Claude sessions with agents --json --all
  • prevents false-success cancellation and hardens the background lifecycle smoke
  • restricts generated state directories/files to 0700/0600
  • fixes the Linux timeout-test race
  • updates CI to checkout/setup-node v7 across Node 20, 22 and 24
  • keeps manifest default prompts within current Codex limits
  • runs the nested E2E with bounded workspace-write state and a larger diagnostic buffer
  • documents Node 24 development and bumps metadata to 0.1.13

Verification

  • Node 20: 54/54 tests and metadata validation
  • Node 22: 54/54 tests and metadata validation
  • Node 24 in the real checkout path containing spaces: 54/54 tests and metadata validation
  • private George Media wrapper: 8/8 tests
  • live Claude Code 2.1.201 setup: ready
  • final hardened background lifecycle: launch, monitor, terminal-state persistence and no active orphan
  • isolated Codex prompt input loaded the exact v0.1.13 skill
  • isolated Codex routing trace read the skill and issued the exact claude-companion.mjs advise --model sonnet command
  • git diff --check origin/main...HEAD: clean

Remaining external checks

  • GitHub Actions is currently action_required because this is a forked PR; a maintainer must approve the workflow before the Node matrix can run.
  • The final installed Codex-to-Claude PASS was not repeated after adding the bounded workspace-write E2E flag. The previous noninteractive traces stopped at state-directory sandbox denial before Claude; the direct live companion setup and lifecycle smokes are green.
  • This PR remains draft until those two checks are cleared.

Convert file URL references in the command and E2E tests with fileURLToPath instead of reading URL.pathname directly.

URL.pathname percent-encodes spaces, which makes child process invocations look for paths such as CLAUDE%20CODE... and fail with MODULE_NOT_FOUND. fileURLToPath preserves the correct filesystem path on local platforms.

Verified with the full test suite from the fork path and from a copied checkout under /private/tmp/claude plugin codex final space test.
Use path.dirname(fileURLToPath(import.meta.url)) for the E2E repo root instead of converting the parent directory URL directly.

This keeps the path-with-spaces fix while avoiding a trailing slash in the path passed as cwd and to codex exec --cd.
Use claude agents --json when monitoring background jobs so non-TTY Codex sessions can read lifecycle state and mark completed sessions done.

Also tolerate Claude JSON envelopes whose result string begins with Claude tool-call markup before the review JSON. Direct review payload validation remains strict so arbitrary leading prose is still rejected.

Tests cover agents JSON completion and tool-call-prefixed review output.
Handle Claude JSON envelopes whose result begins with status prose before the requested review JSON.

The direct review payload validator remains strict; this recovery is limited to Claude CLI envelope results. Adds a regression test for a result beginning with 'Now I have enough context to review.'
Add README guidance for CLAUDE_COMPANION_STATE_ROOT so sandboxed Codex environments can point companion state at a writable private directory.

Also note that the state root can contain prompts, Claude output, workspace paths, and review results, so it should stay local and out of version control.
Consolidate the path portability, review parser, monitor and state-root work from upstream PRs 2-4. Harden review diff collection, ambiguous JSON rejection, background cancellation and private state permissions. Make timeout tests deterministic, exercise the companion lifecycle in smoke tests, and update CI to current actions across Node 20, 22 and 24.
Run the nested Codex E2E with an explicit temporary companion state root so job state remains writable inside the sandbox. Keep manifest default prompts within Codex limits and validate those limits locally.
Allow the routing smoke to retain current Codex CLI diagnostics without terminating the nested session at Node's default one-megabyte spawn buffer.
Create the temporary companion state root within the checkout so nested Codex workspace-write policy permits lifecycle state, then remove it before asserting the worktree is unchanged.
Give the nested noninteractive Codex session only workspace-write access, keep companion state in a temporary checkout directory, and validate that the E2E harness retains this bounded sandbox.
@BoldNewMedia

Copy link
Copy Markdown
Author

The maintained fork has now published v0.1.13: https://github.com/BoldNewMedia/claude-plugin-codex/releases/tag/v0.1.13. This draft PR remains available as a courtesy upstream contribution, but BoldNewMedia releases will no longer be blocked on upstream review.

Copy link
Copy Markdown
Author

Maintenance update: v0.1.13 is now published from the maintained fork at https://github.com/BoldNewMedia/claude-plugin-codex. The fork preserves the MIT licence and Yanchuk attribution, and its release branch includes the hardened review parsing, background lifecycle, MCP isolation, state-permission and Codex-routing work described in this PR.

To avoid splitting users, search position and issue reporting across two repositories, would you be willing to choose one of these paths?

  1. Transfer the original repository to Bold New Media so its existing history, stars and links remain canonical; or
  2. Add a prominent notice at the top of the original README directing users to the maintained fork, then optionally archive the original repository.

A transfer is the preferred outcome, but a clear redirect is sufficient. No attribution would be removed under either path.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant