chore: release 2.4.0 #52

Merged
owlburtoe merged 1 commit from release-2.4.0 into master 2026-07-16 21:54:50 -04:00
Owner

Version bump only — package.json + package-lock.json, matching every prior release commit.

What 2.4.0 ships

Custom colors (CLFY-21, #49). accentColor and userMessageBox now accept a user hex
alongside their existing keywords, reusing the footerColor text-row machinery. Custom values
convert to ANSI escapes through pi's own quantizer (a throwaway PiTheme delegating to
fgAnsi/bgAnsi) and are never stored as hex — the 2.3.0 crash class.

It also fixes an accent-restore bug latent since the original claude accent: pi hands the
theme over as both an instance and a forwarding Proxy, and keying the snapshot on the theme
object meant the second identity recorded claudify's own override as the theme's original,
permanently stranding it. Now keyed on the fgColors container.

Per-setting descriptions (CLFY-22, #50). All 31 /claudify settings carry a one-liner,
rendered dimmed under the selected row only. A deliberate divergence — Claude Code's /config
has no such affordance — recorded in docs/plans/2026-07-16-claudify-setting-descriptions.md.

Docs (#51). The theme-Proxy trap and the corrected pi-session rule.

Pre-release live smoke — done, per CLAUDE.md

Run against this release checkout (footer confirmed ⎇ release-2.4.0) in a real pi session
on pi 0.80.10, with both ~/.pi/agent/settings.json and .pi/settings.json swapped to the
local path so the npm build could not be smoked by mistake:

Surface Result
Per-setting descriptions Render dimmed under the selected row, follow selection
Custom accent #E01B24 Applies live38;2;224;27;36, an escape, not literal hex
Accent: theme Restores pi's own teal 38;2;138;190;183 — the bug fixed in #49
Custom user box #1B6E24 Existing message re-renders live48;2;27;110;36
Slash-autocomplete Clean, 147 commands, no overflow — the 2.3.0 reproducer

bun run test 15/15 green and npx tsc --noEmit --strict … clean on this branch.
npm publish --dry-run: 12 files, every extensions/*.ts that index.ts imports is present.

Caveat

Smoked on pi 0.80.10 (it auto-updated from 0.80.6 mid-session). The risk class here is
pi-internal format contracts, so this is not evidence about older pinned pi versions.

After merge

npm publish from a checkout at 2.4.0 — bare npm publish, never npm publish <name>@<version>.
Needs Berto's npm OTP; agents get EOTP.

Version bump only — `package.json` + `package-lock.json`, matching every prior release commit. ## What 2.4.0 ships **Custom colors (CLFY-21, #49).** `accentColor` and `userMessageBox` now accept a user hex alongside their existing keywords, reusing the `footerColor` text-row machinery. Custom values convert to ANSI escapes through pi's own quantizer (a throwaway `PiTheme` delegating to `fgAnsi`/`bgAnsi`) and are never stored as hex — the 2.3.0 crash class. It also fixes an accent-restore bug **latent since the original `claude` accent**: pi hands the theme over as both an instance and a forwarding Proxy, and keying the snapshot on the theme object meant the second identity recorded claudify's own override as the theme's original, permanently stranding it. Now keyed on the `fgColors` container. **Per-setting descriptions (CLFY-22, #50).** All 31 `/claudify` settings carry a one-liner, rendered dimmed under the selected row only. A deliberate divergence — Claude Code's `/config` has no such affordance — recorded in `docs/plans/2026-07-16-claudify-setting-descriptions.md`. **Docs (#51).** The theme-Proxy trap and the corrected pi-session rule. ## Pre-release live smoke — done, per CLAUDE.md Run against **this release checkout** (footer confirmed `⎇ release-2.4.0`) in a real pi session on **pi 0.80.10**, with both `~/.pi/agent/settings.json` and `.pi/settings.json` swapped to the local path so the npm build could not be smoked by mistake: | Surface | Result | |---|---| | Per-setting descriptions | Render dimmed under the selected row, follow selection | | Custom accent `#E01B24` | Applies **live** — `38;2;224;27;36`, an escape, not literal hex | | `Accent: theme` | Restores pi's own teal `38;2;138;190;183` — the bug fixed in #49 | | Custom user box `#1B6E24` | Existing message **re-renders live** — `48;2;27;110;36` | | Slash-autocomplete | Clean, 147 commands, no overflow — the 2.3.0 reproducer | `bun run test` 15/15 green and `npx tsc --noEmit --strict …` clean on this branch. `npm publish --dry-run`: 12 files, every `extensions/*.ts` that `index.ts` imports is present. ## Caveat Smoked on **pi 0.80.10** (it auto-updated from 0.80.6 mid-session). The risk class here is pi-internal format contracts, so this is not evidence about older pinned pi versions. ## After merge `npm publish` from a checkout at 2.4.0 — bare `npm publish`, never `npm publish <name>@<version>`. Needs Berto's npm OTP; agents get EOTP.
chore: release 2.4.0
All checks were successful
Plane Sync / Close referenced Plane work items (pull_request) Successful in 3s
0406357f68
Adds user-supplied custom colors and per-setting descriptions.

accentColor and userMessageBox now accept a hex alongside their existing
keywords, reusing the footerColor text-row machinery; custom values convert
to ANSI escapes through pi's own quantizer, never stored as hex (the 2.3.0
crash class). Also fixes an accent-restore bug latent since the original
claude accent: pi hands the theme over as both an instance and a forwarding
Proxy, and keying the snapshot on the theme object stranded any override.

Every /claudify setting now carries a one-line description, rendered dimmed
under the selected row only — a deliberate divergence from Claude Code,
which has no such affordance (PRs #49-#51).

Live-smoke-tested against the release checkout in a real pi session (pi
0.80.10): descriptions render, a custom accent applies live and restores
pi's own accent on 'theme', a custom user-message box re-renders live, and
slash-autocomplete (the 2.3.0 reproducer) is clean.
owlburtoe merged commit cf13524f18 into master 2026-07-16 21:54:50 -04:00
owlburtoe deleted branch release-2.4.0 2026-07-16 21:54:51 -04:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
owlburtoe/pi-claudify!52
No description provided.