panama update: one command, no questions, and no gap it cannot see

Claude-Session: https://claude.ai/code/session_01Ms2FbjQy31TVf3CEvQhGM8
This commit is contained in:
Gabriel Brown
2026-08-25 07:22:12 -04:00
parent 8105849151
commit beed44dd87
7 changed files with 894 additions and 99 deletions
+32 -5
View File
@@ -18,7 +18,16 @@ git clone https://git.gbrown.org/gib/Panama.git ~/.local/share/Panama
```
Both are safe to run again: an existing clone is fast-forwarded rather than
replaced, and `install` is the upgrade path.
replaced. Once a machine exists, though, the command that keeps it current is
`panama update` — one command, and it never asks you anything:
```sh
panama update
```
It pulls, applies any repairs this machine has not had, and runs the stages
below that need no answers. `./install` remains what it is: how a machine is
built, and how you change an answer you gave.
`install` asks its questions first and then runs the stages in `setup/scripts/`
in order, without stopping again:
@@ -190,21 +199,39 @@ name it; **Open Project** lays it out again.
Workspaces are recorded as positions rather than numbers, and opening a project
claims free ones, so it never lands on top of what you are already doing. An
application that refuses to open twice — Slack, Thunderbird, the browser — is
moved into place rather than launched again. Saved layouts are listed on the
Desktop settings page, which is also where they are removed.
moved into place rather than launched again. Saved layouts are listed on
Shell Workspaces in Settings, which is also where they are removed.
## The `panama` command
```sh
panama update # review, commit and sync this repo
panama update # bring this machine up to date; asks nothing
panama sync # review, commit and push your changes to this repo
panama edit # open it in Neovim
panama doctor # what is actually running, not what was installed
panama test # every contract, or a subset by pattern
panama upgrade # re-run ./install from anywhere
panama migrate # apply repairs this machine has not had yet
panama upgrade # re-run ./install from anywhere, interview and all
panama apps # choose applications to install, by category
panama app # applications no repository carries; build one by name
```
`panama update` and `panama sync` are separate verbs on purpose. One acts on
the machine, the other on the repository. A single command that chose between
them by checking whether the working tree happened to be dirty would do a
different job depending on state nobody can see — and, worse, would never
update a machine belonging to somebody who had left a file edited.
`panama update` stashes uncommitted work across the pull and restores it
afterwards. If restoring conflicts it resets the checkout and leaves the work
in the stash, saying so at the end of the run: every dotfile here is a symlink
into this repository, so a conflict marker is not a thing to fix at leisure. It
is live in `~/.config` the moment it is written.
Only two things still need `./install`: a machine that does not exist yet, and
an answer you want to change. Adding a package to a list you already have is
`panama update`; adding an optional category is `panama apps`.
`panama apps` is the optional-application catalog, opened after the fact. The
interview offers the same categories during `./install`, whole; this picks a
category and then the applications inside it, so a machine can acquire Slack in