Your agentic workflow depends on other people's rules
Field note for Week 6 · Days 36–42 · Eric MacDougall
The model in an agentic workflow is often treated like a library: send input, get output, continue. In practice it is a remote decision and execution dependency. The provider can change an acceptable-use rule, enforcement behavior, model behavior, or account access. A regulator may separately change what your organization may deploy. Your own application has a third set of permissions and business rules. If the workflow conflates those layers, a change in one can silently alter a business process owned by someone else.
I am not arguing that the provider must accept every request. Some activities should be refused, and many legal obligations are necessary. The engineering issue is who detects a refusal, who owns the unfinished work, and whether the organization can explain what happened without rewriting prompts until the model complies. OpenAI's current Usage Policies explicitly reserve enforcement and access decisions and provide an appeal route. Anthropic's policy update describes changed requirements for agentic and high-risk uses; its transparency reporting describes enforcement actions. Neither source proves that a particular legitimate customer workflow has been refused. They do show that provider policy is an active control layer outside the customer's release process.
The failure hidden inside a normal-looking queue
Consider a fictional, authorized internal security team. An agent collects incoming vulnerability reports, asks a model to classify and summarize them, attaches evidence, and opens a ticket for a reviewer. One day a provider response is a refusal or restricted-use message on a subset of reports. A poorly designed parser sees no classification and returns the default category “informational.” The ticket system then closes the case without a human ever seeing the original report.
The defect is not the refusal itself. The defect is treating “the provider did not complete this operation” as “the report contained nothing actionable.” That is a state-machine error. The company's incident process has let an upstream service decide the downstream outcome by absence.
An agent can fail the same way when a hosted tool disappears, a permission is revoked, a model name is retired, or a policy gate moves. The business workflow needs an explicit state for each kind of route loss. A provider response is not a business verdict.
Three owners, three different kinds of control
These layers should be visible on one architecture page:
| Layer | What it governs | Who can change it | What the application can do |
|---|---|---|---|
| Law and regulation | Whether a use or deployment is permitted in a jurisdiction | Legislatures, regulators, courts | Scope the use, maintain compliance evidence, stop prohibited actions |
| Provider policy and service | Whether a provider will supply a model, answer, tool, or account access | Provider | Detect refusal or route loss, appeal when appropriate, use a separately authorized route |
| Application authority | Which person or agent may take a particular business action now | Your organization | Check identity, current policy and target state at the action boundary |
The EU AI Act prohibits specified practices and creates obligations for specified systems. The European Commission's implementation guidance describes phased application and enforcement. It does not mean that every question about a regulated industry is forbidden. Conversely, the fact that one provider returns an answer does not establish that a deployment is legal or authorized. This article is an architecture argument; actual legal interpretation belongs with qualified counsel and the current applicable text.
The application layer is where many teams fool themselves. A model can produce a perfectly valid instruction that exceeds the user's authority. An API response can be available while the application is not permitted to use it for automated high-stakes decisions. A provider refusal can be entirely appropriate while the business still owes a person a decision and an audit trail. One green “AI available” light cannot stand for these separate claims.
Make refusal a first-class outcome
For a consequential workflow, the model adapter should return a typed result such as:
| Result | Meaning | Permitted next action |
|---|---|---|
| Completed | The requested model work returned and passed structural validation | Continue to independent business checks |
| Refused | The provider explicitly declined the task | Preserve input/evidence and route to named human or approved alternate process |
| Unavailable | Timeout, outage, model/tool route loss, access error | Retry only within bounded policy; then queue and alert |
| Uncertain | Output arrived but failed semantic or evidence checks | Do not invent a default; request review or another authorized test |
These are different operational states. A refusal does not prove the user request was illicit; an availability error does not prove refusal; and a syntactically complete answer does not prove business correctness. Record the provider response category, model/version, policy or request identifier when available, and the downstream disposition. Keep sensitive original content under the organization's normal retention and access rules.
The next control sits after the model. A business validator checks the current case, consent, identity and decision rights. A tool executor holds only the permissions that this route needs. An independent readback checks the actual ticket, ledger or external state. A prompt cannot be the final permission boundary for an effectful action.
The trap of “just try another model”
Multi-provider failover can improve availability. It can also become a way to bypass a restriction without understanding it. If the first provider refuses an authorized security question, the correct next move is to identify the refusal category and approved path, not automatically prompt every available provider until one answers. The alternate must be allowed by law, by its own terms, by the customer's data agreement and by the application's authorization model.
The same applies to open-weight deployment. Owning weights changes one dependency. It does not supply adequate compute, data rights, engineering ownership, downstream authorization, or a recovery plan. A local route may be valuable for tightly bounded classification or continuity; it does not make the entire business process sovereign.
I would keep a route registry with: intended task classes, prohibited classes, data residency constraints, models/providers, tool capabilities, budget, version, owner, fallback and expiry date. A change to any of those fields is a deployment decision, not a hidden prompt edit. Pinning a model version helps reproduce behavior, but does not grant immunity from provider terms, account decisions or external law.
Test route loss before it chooses your default
The right test is not “Does the model answer the happy-path prompt?” It is “What does the business process do when this dependency declines or disappears?” In a disposable fixture with synthetic cases, I would run ten probes:
- Return an explicit simulated refusal for an otherwise authorized synthetic case. The case must remain open and land with a named owner.
- Return a model answer that parses but omits the required evidence citation. It must be uncertain, not completed.
- Replace the expected provider error code with an unknown one. The adapter must surface “unclassified upstream failure,” never a successful empty result.
- Cut the network after dispatch and before the response. The work should be recoverable without inventing an outcome.
- Revoke a test credential. The application should stop retries at a bounded threshold and alert the right operator.
- Retire a test model route while an item is queued. Dispatch must recheck availability and record the alternate or human handoff.
- Change the data classification of a test case. An alternate provider must be rejected if its agreement or residency is incompatible.
- Inject a valid model response that requests an action outside the current user's scope. The application permission check must deny it.
- Repeat the same input after a policy/configuration revision. The decision record must show which version governed each attempt.
- Restore the provider and replay the outstanding queue. Confirm no case was silently closed or executed twice, and measure human rescue time.
These are proposed tests, not experiments run against Eric's accounts or any live security system. They should be adapted to authorized, non-destructive environments. The test result is the downstream state and owner queue, not the model's self-description.
A continuity contract for procurement and operations
Before a team makes one provider central to a consequential workflow, I want a concrete continuity contract. What uses does the agreement permit? How are policy changes communicated? What appeal path exists? Can the organization export enough inputs, decisions and evidence to continue elsewhere? Which tasks can fall back to deterministic software, to another independently authorized provider, or to a human? How long may the queue grow before the business must stop taking new work?
Measure a refusal or route loss as a production event: affected case count, age of unresolved work, human intervention time, customer impact, appeal status and whether any downstream action happened without a valid decision. This is more useful than a dashboard that reports the model endpoint as “up” while the cases go nowhere.
My rule: treat every upstream model and policy boundary as a change authority. Surface refusal as unfinished work; preserve its evidence and owner; re-authorize every fallback at the actual action boundary. Do this because a business process cannot outsource responsibility for its outcomes to a provider response, even when that response is defensible.
Sources and limits
- OpenAI Usage Policies (S133), rechecked 25 September 2026.
- Anthropic Usage Policy update and system trust reporting (S134), read 25 September 2026.
- European Commission AI Act enforcement and overview (S135), read 25 September 2026.
- Regulation (EU) 2024/1689, official text (S136), read 25 September 2026.
The security-triage case is fictional and tests are proposed. No measured refusal frequency, observed policy change against Eric's accounts, or actual legal conclusion is claimed. Recheck provider terms and amended legal text before publication.
The field kit
The companion folder for this week holds runnable examples, decision records, evidence and limits. The repository release log is updated after each article's live readback.