Duty of loyalty · AI agents · State-Endorsed Digital Identity

Nine scenarios demonstrating purpose and consent controls

Utah's SEDI framework requires protections for how identity data is used. C=US demonstrates related technical controls outside the AI model: signed mandates set terms, and checks enforce those terms within the synthetic demonstration. The nine scenarios show specific refusals and permitted actions; they do not establish legal compliance or enforcement over every downstream use.

Feedback update · 2026-10-05

Purpose and holder choice remain central

Utah GovOps correspondence supplied by the student emphasizes that third-party reliance depends on the use case, the holder chooses how much to disclose, and notice must explain the collection purpose. The response also confirms that SEDI holders and digital guardians are human, and that one organization commonly performs both verification and reliance. The sender's name and contact details are withheld.

Our engineering interpretation: a verified human identity, authorization to sponsor an agent, and permission to use particular data are separate checks. A legal name is not automatically necessary. Consent is not blanket permission for unrelated reuse: Utah Code §§ 63A-20-701–702 includes primary-purpose restrictions and conditions on use, retention, sale, and sharing.

This is feedback on architectural questions, not approval of the demonstration or a compliance determination. Possible 2027 legislative discussion of human-to-AI delegation remains a future possibility. See the updated sponsor walkthrough for the full mapping.

Feedback paraphrase and this engineering interpretation: Codex (OpenAI), separate from the student's original analysis and the correspondent's answers.

What SEDI asks for

Utah's principles, in our words

From the State-Endorsed Digital Identity site and its FAQ, summarized:

This page shows technical controls modelled on those principles. It is not a statement of Utah's position, a legal-compliance determination, or a connection to any Utah system.

How C=US enforces it

Four layers, all outside the AI model

LayerWhat it does
1. MandateA signed, versioned record of whom the agent serves and on what terms: purposes, recipients, data attributes, retention, delegation limit, and how conflicts are handled. Only the person's own key can sign it; an agent cannot write its own, and an administrator cannot write one for someone else. People are referred to by opaque IDs, never names.
2. Data-use checkBefore any read, disclosure or tool call, fixed rules check the purpose, recipient, person, every attribute and the retention period against the current mandate. The answer is allow, deny or review required, with every reason named. No mandate means no; missing evidence is never approval.
3. Permit and outboxAn approval is a one-use permit for exactly that payload and recipient. The disclosure re-checks authority, uses up the permit and queues the item in one step. Queued items are checked again just before sending, so revoking the mandate stops work already in the queue.
4. Conflicts and delegationConflicts the agent declares, and known ones from a trusted registry, are denied or sent to an independent overseer; the agent cannot approve its own. Delegated mandates can only narrow, and revoking a parent stops every child.

The audit trail is signed and ordered. It records purposes, recipients, attribute names and fingerprints, never the data itself or who it is about.

Live results

Nine acceptance scenarios: 9 of 9 pass, 31 checks

Run on 2026-10-03 with npm run demo:loyalty, each scenario on a fresh synthetic setup.

#The agent tries to…What happened
1Send a full credential when only an eligibility answer is allowedRefused over mutual TLS: attribute_not_permitted. The eligibility answer alone was allowed.
2Fall back to another AI provider during an outageRefused: recipient_not_permitted. The agent's identity and grant were untouched by the outage.
3Delegate with a new purpose or recipient, longer retention, no oversight, or a different personAll five refused: child_mandate_escalation. A narrower delegation was accepted.
4Keep sending after the person revokes consentThe queued item was cancelled, never sent, and new uses were refused. The earlier, completed disclosure stays on record; nothing claims it was taken back.
5Approve its own conflict of interestHeld for review, then refused: review_not_independent. The independent overseer's approval cleared it.
6Use a forged guardian, sponsor or endorsementNo authority created: mandate_authority_required, mandate_principal_invalid, signer_untrusted_or_expired.
7Leak identity data through the audit, or read another tenant'sNo subject reference in the export; the chain verified against a saved checkpoint; another tenant saw 0 events.
8Revive a revoked grant by rotating keysStill revoked. The mandate and the person it serves were unchanged.
9Treat a declined optional disclosure as a lost identityThe extra disclosure was refused, but identities stayed active, other services kept working, and a contested case went to human review.
9/9 scenarios passed. With the attribute rule removed, the same run reports 7/9, names the failing checks and exits with an error: the demo can fail.

Why it matters

A kill switch at the top, loyalty at every step

The proposed federal AI Kill Switch Act would let the government stop a dangerous system. That addresses the worst case. SEDI's duty of loyalty addresses the everyday case: an agent that works, but serves the wrong interest. C=US puts the controls with the person, at each use of their data, with a record anyone authorized can check.

Limits

What this does not show

Sources and attribution

What this page draws on

  • State-Endorsed Digital Identity (SEDI) and its FAQ, State of Utah, read 2026-10-03; summarized, not quoted.
  • Design: the duty-of-loyalty proposal in a handoff note written by Codex (OpenAI), drawing on the Utah materials. Implementation, review and this page: Claude (Anthropic), Claude Code, 2026-10-03. Direction and the c=US architecture: the student.
  • Code, tests and the scenario report are in security/dependency-graph/ in the project repository (private; access by GitHub invitation).