Skip to content

feat: add nub feature + fix release CI + peon-ping bugs + roadmap cleanup - #56

Open
baxyz wants to merge 13 commits into
mainfrom
nub
Open

feat: add nub feature + fix release CI + peon-ping bugs + roadmap cleanup#56
baxyz wants to merge 13 commits into
mainfrom
nub

Conversation

@baxyz

@baxyz baxyz commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Description

Started as a single CI permissions fix, grew to cover everything requested in the same pass:

Release CI fix (the original trigger — release.yml just failed):

  • Added workflows: write to the release job — git push of a tag whose ref touches a workflow file needs it, confirmed from the actual failed run's logs (run 31324555689). GHCR publish itself had already succeeded before this step failed; only tags + website dispatch were lost. Needs a manual remediation pass after merge (create the 2 missing tags, force a re-run).

New feature: nub

  • src/nub/ — installs nub per the migration strategy from ROADMAP.md: dependsOn the official node feature (never nub's own node-version management), installGlobally option mirroring vite-plus.
  • Verified for real, not just written: downloaded and ran the actual installer against latest and a pinned version, ran nub --version, ran a JS file through nub, confirmed the nubx symlink dispatches correctly.

package-auto-install + nub integration

  • packageManager gained a nub value (runs nub install), deliberately excluded from auto detection since nub isn't a lockfile format.

peon-ping fixes (2 real bugs, not 1)

  • install.sh's Copilot hooks merge path had a genuine Python SyntaxError (a dict literal missing its assignment) — confirmed with python3 -m py_compile before/after, plus a functional test.
  • README claimed no port-forwarding config was needed for host.docker.internal:19998 — wrong on native Linux Docker, verified empirically from inside a real devcontainer here (getent hosts host.docker.internal resolves nothing without runArgs: ["--add-host=host.docker.internal:host-gateway"], which a Feature can't add itself).
  • Re-evaluated the "simplify pack selection" roadmap idea — concluded no schema change was warranted (packs was already simple), added pack-discovery docs instead.

python-dev — evaluated, not built

  • Checked the official ghcr.io/devcontainers/features/python:1 manifest directly: it already bundles VS Code extensions + settings on top of the interpreter, unlike angular-cli. No gap left to fill, no repo in the org uses Python yet. Documented the reasoning in ROADMAP.md instead of building something redundant.

ROADMAP.md updated throughout to match.

Type of Change

  • Bug fix (non-breaking change that fixes an issue)
  • New feature (non-breaking change that adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Documentation update
  • Refactoring
  • Test improvement

Related Issues

None.

How Has This Been Tested?

  • jq empty / bash -n / bootstrap-canonical checks on every touched/new manifest and script
  • js-yaml parse on both touched workflow files
  • nub: real end-to-end install + run test (network access available in this environment)
  • peon-ping: python3 -m py_compile + functional merge test on the fixed hooks script
  • peon-ping: host.docker.internal DNS gap reproduced empirically from inside a real devcontainer

Checklist

  • My code follows the code style of this project
  • I have updated the documentation accordingly
  • I have added tests for my changes (nub has a test/nub/test.sh; peon-ping/package-auto-install fixes are to existing scripts, covered by manual verification above)
  • All new and existing tests passed locally
  • My commits follow the conventional commit format

Screenshots (if applicable)

N/A.

Additional Context

After merge: remediate the failed release (2 missing git tags, force a re-run for the website dispatch).

🤖 Generated with Claude Code

@github-actions

github-actions Bot commented Aug 9, 2026

Copy link
Copy Markdown

✅ PR Validation Passed

All checks passed!


📋 Pipeline Status

Job Status
🧾 Conventional Commits passing
🔖 Version Bump passing
🧪 Feature Tests passing
🐚 ShellCheck passing

🤖 Generated by @helpers4 CI • 2026-08-09

@baxyz baxyz changed the title fix(CI-CD): add workflows:write permission to release job feat: add nub feature + fix release CI + peon-ping bugs + roadmap cleanup Aug 9, 2026
baxyz and others added 13 commits August 9, 2026 18:44
No groups configured at all — every update (patch, minor, or major) got
its own individual PR. Groups everything into one "actions" PR per run.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The manifest was bumped through 1.0.0 to 1.0.2 across three commits on
the branch, but main ended up back at 1.0.0 after merge, with unrelated
JSON formatting changes too. Restored the correct content and bumped to
1.0.1, the next version that was never actually published.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
nub wraps the existing node/package-manager setup rather than replacing
it, so the plan is additive: depend on the official node feature, add
an optional nub delegate to package-auto-install, confirm pnpm-store
compatibility before recommending the pairing, pilot in typescript
first.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…risk

The platform notes only covered what gets merged there, not whether the
mount succeeds. ${localEnv:HOME} resolves against the cloud VM, not the
user's laptop, so the same missing-source crash risk applies there —
and needs the same initializeCommand fix.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
pnpm-store's volume name used to be fixed and collided across unrelated
projects on the same machine; the devcontainerId suffix scopes it per
workspace instead. playwright-dev already follows this.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
A doc-only change doesn't affect what ships in the image, so it
shouldn't be forced to bump. Still worth bumping when the fix needs to
reach the published site, since that's gated on the version diff too.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Pushing a tag whose ref touches a workflow file needs this permission,
even though the tag itself doesn't edit anything. GHCR publish had
already succeeded before this step failed — only the tags and the
website dispatch were lost.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Installs nub (nubjs.com) as a standalone, opt-in feature. Depends on
the official node feature directly rather than nub's own node-version
management, to avoid two competing version-selection mechanisms.
installGlobally symlinks nub/nubx into /usr/local/bin, mirroring
vite-plus.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Runs nub install when selected. Not part of auto detection — nub isn't
a lockfile format, so there's no real signal to detect it from.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
….internal fix

install.sh's Copilot hooks merge path had a Python syntax error — a
dict literal missing its assignment — that crashed every run against
an existing hooks.json. Also, host.docker.internal doesn't resolve on
native Linux Docker without runArgs:
["--add-host=host.docker.internal:host-gateway"] in the consumer's
devcontainer.json, which the README didn't mention.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
packs already takes a single value; the real friction is finding a
name among ~165 registry packs. Pointed the README at peon packs
search and openpeon.com/packs instead of adding a preset option.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…aluated

python-dev: the official python feature already ships VS Code
extensions and settings, so there's no gap for a wrapper to fill, and
no repo here uses Python yet.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…EADMEs

Cut the self-referential verification language ('confirmed', 'verified
empirically', 'for real, not assumed') and long run-on changelog
entries. Same facts, stated plainly instead of narrated.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
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