Skip to content

release: 0.29.0 — the install verbs read as plan, apply and done - #27

Merged
Evgenii-Konev merged 1 commit into
mainfrom
feat/cli-plan-apply-done
Oct 5, 2026
Merged

Evgenii-Konev merged 1 commit into
mainfrom
feat/cli-plan-apply-done

Conversation

@Evgenii-Konev

Copy link
Copy Markdown
Member

The 0.29.0 release: install, upgrade and uninstall now print a plan, the steps as they run, and a result. At a terminal they ask before anything is written.

The maintainer asked for this after upgrading both shells to 0.28.2. Each printed one undivided block, ending in applied 3 change(s).. The record is the story Install, upgrade and uninstall read as plan, apply and done, and a terminal asks before writing (PS-HARNESS). It changes contract 9 of the install spec and adds contract 18.

What changes for a user

  • The output has a header, then PLAN, APPLY and DONE.
    • PLAN lists every item once. Beneath it are every file written and every host command, verbatim, with the files that command touches. This is the consent content, so it is never folded.
    • APPLY marks each step ✓ or ✗ with its duration. That includes a registration's staging write and each host command, and each step of the layout move.
    • DONE gives the count, the time, and the next steps from the manifests' new install.next.
    • --verbose restores the host-managed prose and each step's why.
  • A terminal is asked Apply N changes? [Y/n] after the plan, even when the harness or shell is named.
    • Enter, y or yes applies.
    • Anything else, or Ctrl+D, writes nothing (exit 1). Ctrl+C is SIGINT (exit 130).
    • Without a terminal nothing changes: a named harness confirms and a bare run refuses. The same holds for agents, CI, --json, and runs inside a host session.
    • Unattended in a terminal: pass --json, set CI=1, or use </dev/null. There is no --yes.
  • --help is new.
    • The top level groups the verbs.
    • <verb> --help shows the options, examples and exit codes. Through a shell, the examples use the shell's name.
    • A near miss is named: did you mean install?.
  • Fixed along the way:
    • a bare interactive install asked before it showed the plan;
    • --json in a terminal asked into its own envelope;
    • Ctrl+D at a question left it pending.

Under the hood

  • scripts/term.mjs (new, zero dependencies) handles:
    • colour, following NO_COLOR, FORCE_COLOR and TERM=dumb;
    • icons;
    • wrapping, on a live terminal only;
    • step lines, rewritten in place;
    • the one line reader both of the bin's gates use. It reads in line mode, so it writes no cursor escapes.
  • plan --json and install --json keep their shape.
  • The shell bins pass PROJECTSTORE_SHELL, which only --help reads.
  • The Codex doctor and agents skills run their confirmed writes with --json.

Reviews

All three passes are recorded in the story:

  • projectstore:critic returned revise. In response, the amendment is scoped to the install family, and it now covers the answer rules, the unattended path, the Codex measurement gap, and the superseded wording.
  • projectstore:planner found a crash before release: the interactivity check called .some on a Map, so every real terminal run would have thrown. It also found readline's escapes and a key plan --json had gained.
  • projectstore:reviewer ran a real pseudo-terminal and compared side by side with 0.28.2. It found uninstall's reasons folded, writes wearing the skip glyph, and a STOPPED line that blamed a host command for every failure. All are fixed.

Checks

  • npm run release:check: 556 of 556, both inside a Claude Code session and with its markers stripped.
  • The whole suite passes with FORCE_COLOR=1 too. The test runner sets that for its children in a colour terminal.
  • node scripts/version-guard.mjs reports ok, and node packaging/shells.mjs --check reports ok.

Known limits

  • Codex's session marker is unmeasured, and so is whether its exec tool gives a command a terminal. Both are a live criterion after the release.
  • Windows is not verified.
  • A piped stdout makes a run non-interactive, as before.

Merging this is the git marketplace's release. After the merge, v0.29.0 is tagged on main, and CI publishes all three packages under latest.

Maintainer: [email protected]

The write verbs print a header, then PLAN, APPLY and DONE (install
spec, contract 18). At a terminal they ask `Apply N changes? [Y/n]`
after the plan, even when the harness is named (contract 9 as amended
2026-10-04): Enter, y or yes applies, anything else writes nothing.
The old prompt, asked only of a bare install, was [y/N]; the reconcile
and agents gates keep it. Without a terminal nothing changes: a named
harness is the confirmation and a bare run refuses. There is still no
--yes.

- scripts/term.mjs (new, zero dependencies): colour from the terminal,
  NO_COLOR and FORCE_COLOR; icons with an ASCII fallback; wrapping on
  a live terminal only; step lines rewritten in place; the one line
  reader both gates of the bin use
- install-harness.mjs: the plan is printed before the question (the
  bare interactive install asked first); every written path and host
  argv with its touches stays in the default view, and every row's
  reason with it, while the host-managed report becomes one line and a
  harness's unsupported rows fold to one, both restored by --verbose;
  APPLY reports each step of a registration and the layout move; DONE
  takes the next steps from the manifests' new install.next, and
  STOPPED names what failed; isInteractive covers TTY, CI, --json and
  every manifest's session marker; end of input is a no, and Ctrl+C is
  SIGINT; plan --json gains no key
- cli.mjs: grouped --help, per-verb --help with examples and exit
  codes, and the nearest verb or option for a near miss; --verbose on
  the install verbs; the reconcile and agents gates share the line
  reader, so Ctrl+D there is a no as well
- shells: the bins pass PROJECTSTORE_SHELL, which only the help and
  usage text read; their comments state the amended rule; re-rendered,
  with packlists
- the Codex agents and doctor skills (build-adapters.mjs, re-rendered)
  preview with plan and run the confirmed write with --json
- README and both shells' READMEs state the rule and point at plan,
  --verbose and --help
- tests: term.test.mjs is new. The suites now cover the gate on real
  streams, the interactive matrix, the plan-then-question order,
  every reason in the default view, write glyphs, --verbose, DONE and
  STOPPED, Codex's touches in text, APPLY's steps for a registration
  and the layout move, and help. All 556 pass, plain and under
  FORCE_COLOR=1.
- the version at every guard site

A projectstore:critic pass, a projectstore:planner pass and a
projectstore:reviewer pass are recorded in the story "Install, upgrade
and uninstall read as plan, apply and done, and a terminal asks before
writing" (PS-HARNESS).

Maintainer: [email protected]
@Evgenii-Konev
Evgenii-Konev merged commit c17b291 into main Oct 5, 2026
1 check passed
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