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)

← ADR-0130 · ADR-0132 →

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)

  1. 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.
  2. 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.
  3. Each launcher is pre-approved by an allow rule, Bash(<name> *) and Bash(/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

Consequences

Provenance

No other ADR is named in this record.

Rulings cited

None.

Specs cited

None (or no spec page exists for the ones named).