Skip to content

fix: review 2026-11-12 — cli-core 0.648.0, own MCP pins, sandboxed bin runs, family CI - #153

Open
leemour wants to merge 4 commits into
mainfrom
fix/review-2026-11-12
Open

leemour wants to merge 4 commits into
mainfrom
fix/review-2026-11-12

Conversation

@leemour

@leemour leemour commented Nov 13, 2026

Copy link
Copy Markdown
Member

Task

The template part of the 2026-11-12 CLI family review (private report reports/2026-11-12-cli-family-review.md in
cli-private): IDEA-288, DEBT-338, DEBT-345 (CI cancel setting), DEBT-335 (checked), and the family CI items. Every new
CLI starts from this template, so fixing it here keeps the next CLI from repeating the findings.

Why

  • New CLIs pinned cli-core's whole MCP surface and rewrote their pins on every cli-core release (IDEA-288).
  • A CLI's development build migrated the owner's real folders: package scripts started the built bin with the
    owner's HOME, XDG_* and keyring.
  • standards.yml cancelled a running check on main when the next merge came, leaving that commit unchecked (WC-CI-7).
  • One Dependabot PR per action, a full Linux validation for a docs-only or version-only PR, and merged branches
    left behind all cost shared Actions time.

What

  • Adopt cli-core 0.648.0, cli-base 0.98.0 and cli-testing 0.7.0. node-ci.yml and changelog-guard.yml are pinned
    to cli-base v0.98.0. node-ci.yml was on v0.85.1, below the coverage re-run fix in v0.95.0.
  • IDEA-288: src/mcp.test.ts pins contracts/mcp-catalogue.json from ownCatalogue, so only the CLI's own
    commands are pinned. contracts/mcp-tools.json is in cli-testing 0.7.0's short form (162 → 78 lines).
  • Sandboxed bin runs: new scripts/sandboxed.ts, template-owned. It gives each run a throwaway HOME with
    XDG_* folders inside it, drops every CLIDEV_* override and sets DBUS_SESSION_BUS_ADDRESS=disabled:.
    lint:commands, smoke:node and smoke:bun use it. smoke.ts, audit.sh and live.sh isolate their own bin
    runs the same way.
  • DEBT-345: standards.yml cancels only a pull request's older run, never a run on main.
  • Dependabot: one grouped PR for GitHub Actions updates. npm was already one group.
  • CI quick path, no new jobs: node-22 and kit-e2e skip their steps when a PR changes only Markdown or the
    version number. Skipped steps leave the job green, so the required checks pass. node-ci's own jobs are unchanged;
    skipping them needs a node-ci input, which is on the cli-base follow-up list.
  • delete-branch-on-merge: in new's first setup step and in kit/README.md. It is now on for this repository.
  • Shared changelog commands: cli-dev changelog fragments and cli-dev changelog level replace
    scripts/changelog-fragments.ts and scripts/version-level.ts in docs:check, version:check and
    bin/release.
  • DEBT-338: TESTING.md says an upgrade contract uses "previous": {}, with a seed that uses public commands
    only. The skeleton has no state of its own, so it ships no contract.
  • cli-core 0.648.0's profile.unknown: the sign-in test and the kit e2e follow it, and a new test keeps
    session.missing for a profile the config names.
  • ci:quick builds once. The three unreleased "Built on cli-core" changelog fragments are now one.
  • DEBT-335: already in place, so no change: hostFetch with the identity's hosts, and cli-dev manifest in a new
    CLI's generate. The lint shows no raw-network or wcat-hosts finding.

Testing

  • lint, typecheck, test:coverage (169 tests), test:matrix:check, generate:check, contracts:check,
    docs:check, standards:check, version:check, security:no-leak and pnpm smoke. The bundle smoke ran under
    Node and Bun through the sandbox, and so did lint:commands.
  • kit:e2e passed in full on cli-base 0.98.0 and cli-core 0.647.0. On 0.648.0 both new CLIs passed every step. The
    one failing assertion, the sample's unsigned refusal, now expects profile.unknown. I checked that against the
    built bin, and CI's kit-e2e runs the whole check.
  • The quick-path detection was checked on version-only, docs-only and code diffs under bash -eo pipefail.
  • Not run: audit:commands and the live check. The live check needs the owner's account. scripts/live.sh changed,
    so the live record may need a new run before the next template release.

🤖 Generated with Claude Code

leemour and others added 4 commits November 13, 2026 01:17
…view 2026-11-12)

Template part of the 2026-11-12 CLI family review, so the next CLI made
from the template starts right.

- Adopt cli-base 0.98.0 and cli-testing 0.7.0; move the node-ci and
  changelog-guard pins to cli-base v0.98.0 (node-ci was v0.85.1, below
  the v0.95.0 coverage re-run fix).
- scripts/sandboxed.ts: lint:commands, smoke:node and smoke:bun run the
  built bin with a throwaway HOME and XDG_* folders, no CLIDEV_*
  overrides and DBUS_SESSION_BUS_ADDRESS=disabled:. smoke.ts, audit.sh
  and live.sh drop or move the same variables for their bin runs
  (WC-SECR-24, WC-TEST-3). Template-owned in template.json.
- standards.yml cancels only a pull request's older run, never a run
  on main (DEBT-345, WC-CI-7).
- Dependabot groups GitHub Actions updates into one weekly PR; npm was
  one group already.
- node-22 and kit-e2e skip their steps on a PR that changes only
  Markdown or the version number; the jobs stay, so required checks
  pass. No new job (WC-CI-5).
- new's first step and kit/README.md say to turn on
  delete-branch-on-merge.
- contracts/mcp-tools.json in cli-testing 0.7.0's short form
  (IDEA-288).
- TESTING.md: an upgrade contract uses "previous": {} and seeds with
  public commands only (DEBT-338).
- ci:quick builds once.
- The three unreleased "Built on cli-core" fragments are one entry.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…template's scripts

scripts/changelog-fragments.ts and scripts/version-level.ts (and their
tests) were copies of what cli-base 0.98.0 now ships as
`cli-dev changelog fragments` and `cli-dev changelog level`, with the
same headings, journal ids and level rules. docs:check, version:check
and bin/release call the shared commands, so every CLI made from the
template runs one shared path. scripts/changelog-fragments.ts leaves
template.json; upgrade lists it in an existing CLI for the owner to
delete. scripts/audit.sh stays: `audit --family` installs more CLIs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…h ownCatalogue

- cli-core 0.648.0 (review release #2896, #2900); docs/commands.md
  regenerated (Returns only from a declared output).
- src/mcp.test.ts pins contracts/mcp-catalogue.json from cli-core's
  ownCatalogue: the CLI's own commands an agent finds, read or write.
  What cli-core mounts is cli-core's to pin, so a new CLI made from the
  template stops rewriting its catalogue on each cli-core release
  (IDEA-288, DEBT-331).
- A first word never seen as a profile now answers not_found with
  profile.unknown (FIND-2583): the sign-in test follows it, and a new
  test keeps session.missing for a profile the config names.
- TESTING.md says what the catalogue pin holds; the changelog fragment
  names 0.648.0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…(cli-core 0.648.0)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@socket-security

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Updated@​wirecat/​cli-base@​0.93.0 ⏵ 0.98.099 +1100100 +196 +170
Updated@​wirecat/​cli-core@​0.647.0 ⏵ 0.648.098100100 +19670
Updated@​wirecat/​cli-testing@​0.6.1 ⏵ 0.7.095 +8100100 +194 +1100

View full report

This branch has not been deployed

No deployments
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