Home / Projects / Orchestrata Ultimate / Decisions / ADR index / ADR-0034

ADR-0034: Governed-action classification is property-derived, not name-enumerated

field value
Status Proposed
Date 2026-07-24
Register factory (docs/adr, 4-digit ids)
Source docs/adr/0034-classification-is-property-derived-not-name-enumerated.md — permalink at bdafa201a (unchanged on master since that commit)
Wiki register entry ADR-0034 (wiki status: Proposed)

← ADR-0033 · ADR-0035 →

The record

Context

The constitution (constitutional.pl) classifies an action by looking its atom name up in a flat, hand-maintained list per risk category:

security_threat(execute_untrusted).   security_threat(bypass_auth).
involves_pii(access_pii).             destructive_change(disable_governance).

Two failures are structural, not incidental:

  1. Synonym escape. The category is a set of names. A new operation that is genuinely a security threat but reaches the gate under a different atom (run_untrusted_code) is not in the list, so it passes every article. The list is a blocklist, and a blocklist's defining property is "an unlisted item is allowed."
  2. The reduction is undefined. Nothing specifies how a real runtime operation becomes the atom access_pii rather than read_file. All the classification power — and all the risk — lives in that unwritten step, where an agent's self-description would decide the verdict.

This is the same class of hazard ADR-0008 closes for correctness (never trust the model's self-report) reappearing for classification.

Decision

An action's category membership is DERIVED from typed attributes of the action and the resources it targets, never from the action's atom name.

Alternatives rejected

Consequences

Provenance

Mohamed, 2026-07-24: "how do we make these articles enforceable properly with proper lists and categorize actions properly?" — identifying that the enumerated name lists are the root fragility.

Rulings cited

None.

Specs cited