2.5 Decision Models: What Is Allowed?

The models so far have been descriptive: they say what the system is or does. A decision model says what the system may do. It represents alternatives and the rules that permit, require, or forbid them. That single change in mood — from does to may — is the whole subject of the chapter.

2.5.1 The Canonical Move: Permitted Alternatives

Engineering represents permission in several familiar forms: decision tables that map conditions to allowed actions, rule systems, access-control matrices that record which subject may act on which object11. Butler W. Lampson, “Protection,” ACM SIGOPS Operating Systems Review 8, no. 1 (1974): 18–24, https://doi.org/10.1145/775265.775268., policy graphs, feature models that constrain which combinations of options are valid, and constraint systems that declare which assignments are admissible. What unifies them is not their shape but their mood.

This is the sharpest instance of the earlier lesson that topology does not fix meaning. A structural edge and a decision edge can be drawn identically and mean opposite kinds of thing: A → B as a structural edge says "A calls B," a fact about what happens; the same arrow as a decision edge says "A may call B," a rule about what is permitted. The consequence lives in the absent edge. A missing structural edge means "no such call happens"; a missing decision edge means "no such call is allowed." The gap between those two readings is the reason decision models exist (Figure 2.5-1).

Canonical decision model: the same arrow carries a different mood A decision opener. On the left, a descriptive structural edge: Service A calls B, a fact. On the right, a normative decision edge with identical topology: Service A may call B, a rule. A struck-through dashed arrow on the normative side shows that an absent edge means not permitted. Caption: Question, Semantics, Typical analysis. Green ground marks the decision family. Decision model — same arrow, different mood DESCRIPTIVE a fact about what happens Service A B calls NORMATIVE a rule about what is permitted Service A B may call an absent edge = not permitted Question: What is allowed, required, or prohibited? Semantics: an edge is a permission, not an observation; an absent edge reads “not allowed,” not “never happens.” Typical analysis: rule evaluation, conflict and consistency checking.
Figure 2.5-1. The decision move: the same arrow, a different mood. A structural edge states that a call happens; a decision edge states that it is permitted. The absent edge carries the weight — "not allowed," not "does not happen" — and the analyses check a declared policy for consistency and least privilege.

Once permission is declared, the claims a policy designer wants become expressible: which alternatives are permitted or forbidden, which are mutually exclusive, which imply prerequisites, whether the policy is internally consistent, whether it is complete over the cases that can arise, and whether it achieves least privilege. The analyses follow — evaluating a rule against a case, checking or solving constraints, detecting conflicts between rules, testing completeness and consistency. A declared policy turns "is this allowed?" into an evaluation rather than an argument.

2.5.2 DocAble: Service-Flow Policy

DocAble declares which of its services may communicate with which. The model is a graph whose edges carry the normative reading: an edge means the call is part of the sanctioned policy, and an absent edge means the policy does not permit it.

MODEL CARD

Service-flow model · Decision

Figure 2.5-2 draws the permitted calls. One node is declared publicly reachable; every other edge is an authenticated internal call. The model is the single source of truth for those edges, and the deployment is generated from it rather than inferred from it — so a completeness check can require every gated edge to be fully specified before the deployment is wired. That check is real and enforced, but it governs the declaration's internal consistency, not the running traffic. The model declares the topology; it is not a runtime firewall.

DocAble's service-flow model: which services may communicate A declared directed graph. The Internet reaches the web service. Web reaches worker, document editor, and other. Worker reaches generation, render, and OCR. Each edge is a declared, permitted relationship; an absent edge means the model does not declare that relationship. SERVICE-FLOW MODEL Internet web worker document editor other generation render OCR
Figure 2.5-2. Service-flow model. A declared graph of which service may reach which. The public web tier is the only node facing the outside; an absent edge means the relationship is not permitted by the model, and enforcement is separate.

Declaring the policy exposes a question the running system cannot answer for itself: do the services call only along declared edges? That is a correspondence between an observed structural fact and a declared decision, and the two are different claims. The observed call graph reveals that A calls C; the decision model states whether A may call C. Figure 2.5-3 sets them side by side.

Observed structure versus declared structure answer different questions Two panels. On the left, the implementation, in gray: A calls B and A calls C, observed facts, asking does A call C. On the right, the model, in blue: A to B is a declared edge, and between A and C there is no edge, marked with a rust X, asking may A call C. Agreement between observed and declared establishes correspondence, not correctness. OBSERVED SYSTEM A B C “Does A call C?” DECLARED POLICY A B C declared no edge “May A call C?” Observation reveals what is. The decision model declares what belongs. Agreement between them establishes correspondence, not correctness.
Figure 2.5-3. Observation and intent answer different questions. The observed system can reveal that A calls C; the decision model can state whether that relationship is permitted. Agreement establishes correspondence, not correctness.

Agreement between observation and policy would establish correspondence — the implementation matching the declared intent — not correctness: a faithfully-obeyed rule can still be the wrong rule. DocAble generates its deployment from the declared graph, but nothing at runtime reconciles observed traffic back against the declaration. That open correspondence is not a gap to hide. It is the clearest illustration in this Part of a model exposing a checkable property without, by itself, establishing that the implementation satisfies it. Modeling declares what is permitted; whether the code stays on the declared edges, and what a departure should cost, is Alignment's question in Part III.

Works Cited

  1. Lampson, Butler W. “Protection.” ACM SIGOPS Operating Systems Review 8, no. 1 (1974): 18–24. https://doi.org/10.1145/775265.775268.
© James C. Davis, 2026–present