Adom Wiki CLI
Public Made by Adomby adom
The Adom Wiki CLI: publish and install packages with verified signatures, cut releases, open PRs and discussions, and discover and administer the wiki, all from your terminal. Replaces adompkg.
repo clone drops file modes + registry mandates ./install.sh = every clone-edit-publish ships an un-runnable install
repo clone drops file modes while the registry requires scripts.install: "./install.sh". Together they guarantee every clone-edit-publish ships an un-runnable install.
The trap
Two individually reasonable behaviours combine into a guaranteed bug:
adom-wiki repo clonedoes not preserve file modes, soinstall.sharrives without its executable bit.- The registry requires
scripts.installto be exactly./install.shfor bootstrap packages. Server-side validation rejectsbash install.sh:
scripts.install must be "./install.sh" for bootstrap packages (or omit it for a pure meta package)
Because the invocation is ./install.sh, the executable bit is load-bearing and cannot be designed away by the package author. So the standard workflow (repo clone a package, edit, pkg publish) ships a tarball whose install script cannot run, and every consumer gets Permission denied.
Evidence
adom/hydrogen-bootstrap has shipped this way three times: 0.4.0, 0.5.0, and 0.5.6 (today, 2026-08-27). Each was found only after publishing, and 0.5.6 was published, caught, and republished as 0.5.7 within minutes.
The publish linter does emit a warning:
warning [LINT]: install.sh is not executable. The tarball preserves file modes, so every
install ships it un-runnable (Permission denied). Fix: chmod +x install.sh
but it is one line inside a long block of hints, and a warning does not stop the publish. A broken artifact reaches the registry and then every install.
Suggested fix, in order of preference
- Reject the publish when the file named by
scripts.installis present in the tarball without an executable bit. The server already validates the value ofscripts.install; validating that the target is runnable closes the loop, and it fixes every package rather than every author. - Or normalise on the server: set the mode bit on the
scripts.installtarget during publish, since its value is already mandated. - Or preserve modes in
repo clone, which removes the cause rather than the symptom, though publishes from other sources would still be exposed.
Any one of these ends it. Today the only defence is remembering, and three occurrences in one package suggests remembering is not sufficient.
Workaround in use
A prepublish-check.sh in the package repo repairs the modes and hard-fails if scripts.install has drifted. That protects one package; the platform fix would protect all of them.