Commit Graph

2 Commits

Author SHA1 Message Date
joakimp 0e1369e6b4 pi-atelier.json: modernise to the current schema (0.7+/0.8 keys)
The config was written against pi-atelier's pre-0.7 vocabulary and had drifted
behind upstream. It still LOADED — 0.7.x/0.8.0 keep reading the old keys — but
only through compatibility shims, and it was missing every sidebar control that
pi-atelier has added since:

  - `segments` (flat id list)  -> `segmentLayout` (ordered, explicit per-segment
    `visible`). Upstream routes the old key through `parseLegacySegments()` and
    treats it as non-authoritative.
  - `ornament: "none"`         -> `{"id":"brand","visible":false}`. types.ts calls
    Ornament "legacy menu vocabulary ... translated to Brand visibility".
  - `showExtensionStatuses`    -> `{"id":"statuses","visible":true}`. Upstream
    maps it onto statuses visibility; the README states Brand and Statuses
    rendering "is controlled only by this normalized layout".
  - added `showSidebarAgent`, `showSidebarTodos`, `showSidebarOnStartup` — the
    last of which did not exist when this file was written (added in 0.8.0).

Every deliberate choice in the old file is preserved exactly: editorial preset,
alt+a, compact density, 60/85 context thresholds (earlier than upstream's
70/90), 3 currency decimals, session actions on, sidebar tool names on,
completion notifications off (desktop toasts are noise in a container). The two
segments the old `segments` list omitted — brand and performance — are now
explicitly hidden rather than implicitly absent.

Verified by loading both the old and new file through pi-atelier 0.8.0's own
`loadConfig()`: zero warnings from each, and identical EFFECTIVE config
(same visible segments, density, thresholds, panels) — so this is a pure
schema modernisation with no behaviour change.

`sidebarPanelLayout` is deliberately NOT set. Declaring it makes the user file
authoritative for the panel set, which would freeze it as upstream adds panels
(its README notes Subagents/Skills are "intentionally not implemented" — i.e.
plausibly coming). Omitting it keeps the product default, currently all eight
panels.

Context: pi-devbox v1.7.0 vendors pi-atelier into the image at a pinned tag, so
this file goes from "config for a thing you hand-installed" to the default
every container gets.
2026-08-07 21:31:06 +02:00
joakimp 4b4b76e80e feat(pi-atelier): ship Status Rail defaults, cp'd not symlinked
Adds pi-atelier.json (defaults for the pi-atelier extension) and an
install/uninstall step for it, so the config survives a devbox volume wipe and
applies to pi on the host too — ~/.pi/agent is a named volume in a container,
which the extension's own config path alone does not outlive.

cp-if-absent rather than a symlink, unlike keybindings.json/AGENTS.md: the
extension rewrites this exact path when the user saves from its menu
(src/config.ts writeJsonAtomic -> "<path>.<pid>.tmp" then rename). rename(2)
REPLACES a symlink with a regular file instead of following it, so a link would
detach on the first menu save and the repo copy would quietly stop applying.
Verified empirically before choosing the idiom, not assumed.

Drift is respected in both directions, matching the pi-env.zsh shape: install
never clobbers an existing file (warns + prints a diff hint), uninstall removes
it only while its content still matches the repo. All five paths exercised
against an isolated HOME: fresh copy, idempotent re-run, drift-preserved
install, drift-preserved uninstall, matched-content uninstall.

Values chosen for this setup and validated against the extension's own
validateConfig (no warnings, no coercion):
- segments drop "brand" (decoration, and first in the drop order anyway)
- density compact — the rail relayouts at 132/96/72/56 cols and these sessions
  run over plain SSH at unknown width
- contextWarning/Danger 60/85, earlier than the 70/90 default because
  defaultModel is opus-5 at xhigh thinking with obsmem compaction behind it
- showSidebarToolNames true — MCP/tool-heavy sessions, names beat "something
  is running"
- completionNotifications false — deliverSystemNotification only spawns for
  darwin/win32 and returns undefined on linux, and a container has no desktop
  session to reach anyway

Docs: file inventory + install/uninstall tables in README.md and AGENTS.md,
including why the symlink idiom does not apply here.
2026-07-29 23:42:05 +02:00