Home / Projects / Orchestrata Ultimate / Decisions / ADR index / ADR-0131
ADR-0131: Deploys the classifier blocks run through approved user-level launchers that refuse unsafe states and verify or roll back
| field | value |
|---|---|
| Status | Accepted — Accepted (Mohamed: ct-install 2026-10-07 "option 2"; tools-deploy and hermes-deploy 2026-10-22, "yes") |
| Date | 2026-10-23 |
| Register | factory (docs/adr, 4-digit ids) |
| Source | docs/adr/0131-deploys-the-classifier-blocks-run-through-approved-user-level-launchers-that-refuse-unsafe-states-and-verify-or-roll-back.md — recorded on branch fix/ship-sanctioned-gate-pytest at 8c7031c9a, not yet on master |
| Wiki register entry | ADR-0131 (wiki status: Accepted) |
The record
Status: Accepted (Mohamed: ct-install 2026-10-07 "option 2"; tools-deploy and hermes-deploy 2026-10-22, "yes") · Date: 2026-10-23
Context
The Claude Code auto-mode classifier blocks every raw installer run as "[Production Deploy]". This
applies to install-tools.sh, the codetools installer, and hermes deploy/install.sh. Until now each
deploy needed Mohamed to paste the command or switch modes. Running an installer from a worker's
tree also risked bash reading a script while someone was still editing it.
Decision (as approved by Mohamed)
- Each deployment the classifier blocks gets a launcher in
~/bin. The launchers sit outside any repo, so no worker commit can change what is pre-approved.ct-install <label>deploys/opt/codetools. Mohamed asked "make the installer like hermes".tools-deploy [--check] <commit>deploys/opt/orchestrata-tools.hermes-deploy <commit>deploys/opt/hermes.
- A launcher refuses unsafe states before it touches anything: a dirty tree, an unknown commit, a non-fast-forward, a held lock, or missing credentials. It runs the committed installer from a pinned ref, then verifies identity and smoke. It rolls back on failure and logs each attempt with an exit line.
- Each launcher is pre-approved by an allow rule,
Bash(<name> *)andBash(/home/mohamed/bin/<name> *), in~/.claude/settings.local.json. Mohamed approves the launcher's text and its rule. Adding or changing a launcher needs his approval again.
Alternatives rejected
- Paste every deploy command. Each deploy costs a turn and a context switch.
- Allow the raw installers. That pre-approves whatever the installer in a working tree says at that moment.
- Run the installer from inside the repo. A commit could change what the pre-approval covers.
Consequences
- codetools, orchestrata-tools and Hermes deploy without a paste and stay identity-verified.
Measured:
ct-install 74andct-install 75(2026-10-22/23) each took about 26 s and endedIDENTITY OKandSMOKE-OK. - Two deploys still have no launcher.
/opt/orchestrata(deploy/install-orchestrata.sh) restarts the prod units, so it waits for Mohamed.deploy/install-claude-config.shruns directly, and itsrsync --deleteremoves hand-installed hooks in~/.claude/hooks. Measured 2026-10-23: it removed three, which were restored from its backup.
Provenance
- ct-install: ruled 2026-10-07 (option 2). Mohamed, 2026-10-22: "it should be fast like hermes agent", "make the installer like hermes".
- tools-deploy: approved with its allow rule, 2026-10-22.
- hermes-deploy: Mohamed approved its text, 2026-10-22: "yes".
- Memory files:
codetools-install-launcher.md,tools-deploy-launcher.md,hermes-deploy-launcher.md.
Related ADRs
No other ADR is named in this record.
Rulings cited
None.
Specs cited
None (or no spec page exists for the ones named).