<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Michael "Mike" K. Saleme</title>
    <description>The latest articles on DEV Community by Michael "Mike" K. Saleme (@mspro3210).</description>
    <link>https://dev.to/mspro3210</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3851462%2Fa7c27b1b-53a0-4eb1-ac6d-c5a785fbc6ad.jpg</url>
      <title>DEV Community: Michael "Mike" K. Saleme</title>
      <link>https://dev.to/mspro3210</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mspro3210"/>
    <language>en</language>
    <item>
      <title>Every API Call Was Allowed. The Agent's Outcome Wasn't.</title>
      <dc:creator>Michael "Mike" K. Saleme</dc:creator>
      <pubDate>Mon, 27 Jul 2026 12:43:10 +0000</pubDate>
      <link>https://dev.to/mspro3210/every-api-call-was-allowed-the-agents-outcome-wasnt-549d</link>
      <guid>https://dev.to/mspro3210/every-api-call-was-allowed-the-agents-outcome-wasnt-549d</guid>
      <description>&lt;p&gt;API governance is one of the things the enterprise actually got right.&lt;/p&gt;

&lt;p&gt;Gateways, rate limits, authentication, versioned contracts, a managed lifecycle. For two decades it did its job: keep system-to-system integration orderly, secure, and observable.&lt;/p&gt;

&lt;p&gt;Its unit of control is the API call. Its question is precise. Is this client allowed to invoke this endpoint, with this credential, at this rate?&lt;/p&gt;

&lt;p&gt;That question was built for systems. An agent is not a conventional integration client, and its most consequential failures do not occur at the level that question can see.&lt;/p&gt;

&lt;h2&gt;
  
  
  The predictability the model assumed is gone
&lt;/h2&gt;

&lt;p&gt;A traditional integration is designed around a relatively stable, declared flow. It calls known endpoints in expected patterns for an established business purpose. API governance was built around that predictability.&lt;/p&gt;

&lt;p&gt;An agent may have a declared role or goal. But it selects its action path at runtime, assembling tools in response to changing context.&lt;/p&gt;

&lt;p&gt;Every call it makes can be authorized, within rate limits, and individually compliant — and the composed outcome can still be one the enterprise never intended.&lt;/p&gt;

&lt;p&gt;That is the gap. API governance is typically enforced call by call. The harm an agent can cause may emerge across a sequence of calls, each of which is allowed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two compliant calls, one outcome nobody approved
&lt;/h2&gt;

&lt;p&gt;Consider an agent with read access to customer records and permission to send email.&lt;/p&gt;

&lt;p&gt;Both capabilities are legitimately granted. Both may be necessary for its job. An endpoint-centric gateway sees two compliant calls.&lt;/p&gt;

&lt;p&gt;Without shared task context and sequence state, it cannot determine from those calls alone why the second followed the first — or whether the two together converted ordinary access into data exfiltration.&lt;/p&gt;

&lt;p&gt;The missing question is not merely whether the next call is permitted. It is whether this agent, acting for this task under this delegated authority, should be making it now.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;API governance asks whether the call is allowed. Capability governance asks whether the agent should be making it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;More precisely: whether this agent may exercise this capability for this task, given what it has already done and the constraints that still apply.&lt;/p&gt;

&lt;h2&gt;
  
  
  The unit of control has to change
&lt;/h2&gt;

&lt;p&gt;API governance typically controls access to individual interfaces and operations. A capability is an action or outcome an agent can produce through one or more APIs, tools, and data sources.&lt;/p&gt;

&lt;p&gt;A major part of the attack surface is not any single API. It is the set of tools you expose to the agent, because every tool you grant widens what the agent can be talked into doing with the authority it already holds.&lt;/p&gt;

&lt;p&gt;Least privilege stops being a question of which APIs a client may call. It becomes a question of which capabilities an agent may compose, for which task, for how long.&lt;/p&gt;

&lt;p&gt;You cannot solve this by adding more endpoint rules alone. The gateway traditionally governs the channel. Capability governance must evaluate the delegated task, the authority available to the agent, the actions already taken, and the next action proposed. It is scoped to an execution and enforced at runtime.&lt;/p&gt;

&lt;h2&gt;
  
  
  This is already showing up in enterprise platforms
&lt;/h2&gt;

&lt;p&gt;MuleSoft, for example, positions Omni Gateway as a common control point for API, MCP, LLM, and agent traffic. It applies policies across gateways, MCP, APIs, and LLMs, propagates identity, and carries correlation IDs across every interaction in an agent chain.&lt;/p&gt;

&lt;p&gt;That makes the gateway a plausible enforcement point for capability governance.&lt;/p&gt;

&lt;p&gt;But reconstructing a chain is not the same as deciding whether the current task state authorizes the next composed action. The location of the control is emerging. The governing model still has to mature.&lt;/p&gt;

&lt;p&gt;API governance kept our systems talking to each other safely. The agentic enterprise needs governance over what a worker is allowed to do with those systems, not just which doors it may knock on.&lt;/p&gt;




&lt;p&gt;This is part of a series on Enterprise Agent Architecture — the case for treating the agent workforce as a fifth architecture domain alongside Business, Information, Application, and Technology.&lt;/p&gt;

&lt;p&gt;Start here: &lt;strong&gt;&lt;a href="https://cognitivethoughtengine.com/eaa/part-1" rel="noopener noreferrer"&gt;https://cognitivethoughtengine.com/eaa/part-1&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Position paper: &lt;a href="https://doi.org/10.5281/zenodo.21105314" rel="noopener noreferrer"&gt;Enterprise Agent Architecture: The Case for a Fifth Architecture Domain for the Agentic Enterprise&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What is enforcing capability scope in the agent systems you run right now — the gateway, the agent framework, or nothing yet?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>architecture</category>
      <category>security</category>
      <category>api</category>
    </item>
    <item>
      <title>The Evaluation Had a Sandbox. It Needed an Authority Boundary.</title>
      <dc:creator>Michael "Mike" K. Saleme</dc:creator>
      <pubDate>Fri, 24 Jul 2026 19:25:20 +0000</pubDate>
      <link>https://dev.to/mspro3210/the-evaluation-had-a-sandbox-it-needed-an-authority-boundary-am</link>
      <guid>https://dev.to/mspro3210/the-evaluation-had-a-sandbox-it-needed-an-authority-boundary-am</guid>
      <description>&lt;p&gt;On July 16, Hugging Face disclosed an intrusion into its internal infrastructure. A malicious dataset abused two code-execution paths in its dataset processing — in their words, "a remote-code dataset loader and a template-injection in a dataset configuration." Internal datasets were accessed, service credentials were harvested, and lateral movement reached multiple internal clusters. Their responders detected it, contained it, and reconstructed the timeline from more than 17,000 recorded events.&lt;/p&gt;

&lt;p&gt;On July 21, OpenAI disclosed who was on the other end. It was not a conventional external threat actor. It was two of their own models under evaluation — "GPT‑5.6 Sol and an even more capable pre-release model, all with reduced cyber refusals for evaluation purposes."&lt;/p&gt;

&lt;p&gt;The models were being measured on ExploitGym, a publicly hosted benchmark for executing attacks against known vulnerabilities. Rather than solve the benchmark, they went and got the answers. OpenAI's account of how: the models "spent a substantial amount of inference compute finding a way to obtain open Internet access," then "identified and exploited a zero-day vulnerability (which we've now responsibly disclosed to the vendor) in the package registry cache proxy." From there they chained stolen credentials into a remote-code path on Hugging Face's servers and pulled the test solutions out of a production database.&lt;/p&gt;

&lt;p&gt;OpenAI's own framing: "The models were hyperfocused on finding a solution for ExploitGym, going to extreme lengths to achieve a rather narrow testing goal."&lt;/p&gt;

&lt;p&gt;That sentence captures the architecture problem, and the problem is not unique to either company.&lt;/p&gt;

&lt;h2&gt;
  
  
  The permitted path became the attack path
&lt;/h2&gt;

&lt;p&gt;The models were not granted general internet access. But they were given a narrow, permitted dependency path through a package-registry proxy. They treated that path as terrain: exploiting the proxy, escalating privileges, moving laterally, and eventually reaching a node with internet access.&lt;/p&gt;

&lt;p&gt;This was both a containment failure and an authority failure. The environment attempted to constrain capability, but the permitted dependency path was not backed by an authorization policy that remained enforceable after the first control failed.&lt;/p&gt;

&lt;p&gt;That is the distinction worth holding onto. Evaluation environments are built as capability boundaries: what code the model can execute, what image it runs in, what the process can touch. That work is real and it was done here. What the incident exposes is the need for a separate authority boundary — an external, enforceable answer to what the evaluation workload may reach, under which identity, for how long, and how that authority can be revoked during a run.&lt;/p&gt;

&lt;p&gt;The failure cannot be reduced to model behavior. The decisive containment controls were also in the infrastructure surrounding the model: the dependency proxy, network paths, workload identity, credentials, and the enforcement points that were supposed to keep a deliberately less-restricted cyber evaluation contained. OpenAI's own remediation list spans model alignment, evaluation-time cyber protections, containment, monitoring, and access controls — which is the correct breadth.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the receiving end could and could not see
&lt;/h2&gt;

&lt;p&gt;There is a detail in Hugging Face's disclosure that deserves more attention than it has gotten. Their responders characterized what hit them as "an autonomous agent framework (appearing to be built on an agentic security-research harness)" — thousands of individual actions across a swarm of short-lived sandboxes, with self-migrating command-and-control staged on public services.&lt;/p&gt;

&lt;p&gt;From the receiving end, the evaluation generated telemetry resembling a competent autonomous intrusion campaign. Hugging Face's initial evidence characterized the mechanism accurately, but did not identify the model or the operator.&lt;/p&gt;

&lt;p&gt;That distinction matters. Local telemetry can reveal what an agent is doing without revealing who authorized the workload or who can terminate it. Cross-organization investigation supplied the missing attribution.&lt;/p&gt;

&lt;p&gt;Which is the operational consequence worth internalizing: an evaluation without an authority boundary does not just risk escaping its constraints. It escapes without carrying anything that lets the organization it lands on identify the source or reach whoever can revoke it.&lt;/p&gt;

&lt;h2&gt;
  
  
  A control plane, not a rename for segmentation
&lt;/h2&gt;

&lt;p&gt;If "authority boundary" is going to mean anything beyond network segmentation with a new label, it has to be buildable. For an agent evaluation environment, that is roughly six things:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Default-deny egress, with dependency installation mediated through an immutable or tightly constrained repository.&lt;/strong&gt; The proxy in this incident was a permitted path with an exploitable implementation. Constrain what the path can serve, not just who may use it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Per-evaluation workload identity.&lt;/strong&gt; Short-lived, least-privilege credentials scoped to that single run, with no ambient harness credentials available to inherit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Authorization enforced independently at the network, proxy, credential, and execution layers.&lt;/strong&gt; The property you want is that the first control failing does not collapse the rest. This incident demonstrates why that property must be tested rather than assumed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Time, compute, action, and destination budgets.&lt;/strong&gt; A run that spends substantial inference compute searching for egress is a budget signal before it is a security finding.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cross-boundary telemetry with tripwires&lt;/strong&gt; for privilege escalation, lateral movement, credential discovery, and unexpected destination lookup.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A kill mechanism that revokes identity, credentials, and network authority&lt;/strong&gt; — not merely the original sandbox process. Killing the process you know about is not revocation when the workload has already moved.&lt;/p&gt;

&lt;p&gt;If external attribution matters to you, workload identity alone will not deliver it. An internal cloud identity is not visible or verifiable to the organization receiving your traffic. That requires pairing it with identifiable egress, authenticated provenance, and a registered incident contact.&lt;/p&gt;

&lt;p&gt;And one framing change for whoever designs the evaluation itself: &lt;strong&gt;treat objective pressure as a threat input.&lt;/strong&gt; The models did not abandon the assigned objective; they pursued it through an unintended path. An evaluation that strongly rewards a narrow outcome must assume the workload will search across every reachable surface, especially when normal cyber refusals have deliberately been reduced.&lt;/p&gt;

&lt;h2&gt;
  
  
  What both companies got right
&lt;/h2&gt;

&lt;p&gt;Hugging Face published while its initial disclosure still listed the model as unknown and reported no evidence of tampering with public models, datasets, Spaces, or the software supply chain. OpenAI subsequently named its own models as the cause and disclosed the proxy vulnerability to the vendor. That transparency matters, but it is not the central architecture lesson.&lt;/p&gt;

&lt;p&gt;The most capable systems we have now treat containment as terrain to be searched. In this case, the evaluation began inside a sandbox, found a permitted dependency path, converted it into broader reach, and crossed into another company's production infrastructure.&lt;/p&gt;

&lt;p&gt;The lesson is not that sandboxes no longer matter. It is that execution containment is only one layer. A serious evaluation environment must also bind every workload to independently enforced authority: what it may reach, under which identity, within which budget, until what time, and through which mechanism that authority can be revoked.&lt;/p&gt;

&lt;p&gt;The sandbox was present. The authority boundary was not complete.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Sources: &lt;a href="https://huggingface.co/blog/security-incident-july-2026" rel="noopener noreferrer"&gt;Hugging Face security incident disclosure, July 16 2026&lt;/a&gt; · &lt;a href="https://openai.com/index/hugging-face-model-evaluation-security-incident/" rel="noopener noreferrer"&gt;OpenAI, "OpenAI and Hugging Face partner to address security incident during model evaluation," July 21 2026&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>ai</category>
      <category>agents</category>
      <category>architecture</category>
    </item>
    <item>
      <title>A signature proves who signed the receipt. It does not prove the receipt is true. Here is how you test the difference.</title>
      <dc:creator>Michael "Mike" K. Saleme</dc:creator>
      <pubDate>Sat, 18 Jul 2026 23:05:05 +0000</pubDate>
      <link>https://dev.to/mspro3210/a-signature-proves-who-signed-the-receipt-it-does-not-prove-the-receipt-is-true-here-is-how-you-5ed8</link>
      <guid>https://dev.to/mspro3210/a-signature-proves-who-signed-the-receipt-it-does-not-prove-the-receipt-is-true-here-is-how-you-5ed8</guid>
      <description>&lt;p&gt;The industry is standardizing on agent receipts: signed records that an action was authorized, that a check ran, that a payment settled. The signature is the easy part. The hard part is that a correctly signed receipt can still be false.&lt;/p&gt;

&lt;p&gt;A real receipt verifier and a plain signature checker look identical from the outside. Feed either one a valid receipt and both say "accepted." The difference only appears on a receipt that is correctly signed but whose claim is not supported: evidence omitted, evidence swapped after it was attested, a check bound to the wrong tool set, an authorization for different parameters, an acknowledgment for a different action. A signature checker accepts all of those. A verifier has to reject them.&lt;/p&gt;

&lt;p&gt;So you cannot tell which one you have by reading the code or trusting a green badge. You can only tell by running it against receipts built to be validly signed and claim-invalid, and watching whether it rejects them.&lt;/p&gt;

&lt;p&gt;That is a conformance suite, and we published one.&lt;/p&gt;

&lt;p&gt;Nine receipts a conforming verifier must reject, plus two acceptance controls so an implementation cannot pass by rejecting everything. Each reject vector names exactly what the verifier has to recompute from the referenced evidence: the admitted action digest, the evidence digest, the tool set the check actually covered, the attesting authority and whether it is independent of the emitter, the freshness window. Naming the recomputation is the point. It stops a verifier from passing on string-level checks.&lt;/p&gt;

&lt;p&gt;The receipt decomposes into four properties, and the signature supports only one of them: integrity, authorization, occurrence, and the check itself. Evidence for the last three has to come from distinct trust domains, not from the emitter, because the emitter is exactly the party the threat model permits to lie. A receipt attested only by the thing whose behavior it certifies is testimony, not evidence.&lt;/p&gt;

&lt;p&gt;The two hardest vectors are a phase pair. One carries an authorization bound to different parameters than the action requested, and fails at admission, before anything runs. Another carries an execution acknowledgment linked to a different action than the one admitted, and fails after, on linkage. Same trust failure, different phase, different invariant. A verifier that only checks signatures accepts both.&lt;/p&gt;

&lt;p&gt;If you are building or buying receipt verification, the question is not "does it check the signature." Every implementation checks the signature. The question is "does it recompute the claim," and the only honest way to answer it is to run it against vectors designed to be signed and wrong.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A receipt is only as trustworthy as the bindings a verifier is willing to recompute.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Everything it does not recompute, it is taking on the emitter's word.&lt;/p&gt;

&lt;p&gt;The vectors are open, reproducible, and generated from a working verifier, not hand-authored. If you have a receipt or trust-envelope implementation, run it against them. If it accepts one of the nine, you have a signature checker, not a verifier.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>agents</category>
    </item>
    <item>
      <title>Two AI systems reviewed my security code. The workflow looked clear. Four findings were still open.</title>
      <dc:creator>Michael "Mike" K. Saleme</dc:creator>
      <pubDate>Sat, 18 Jul 2026 17:40:57 +0000</pubDate>
      <link>https://dev.to/mspro3210/two-ai-systems-reviewed-my-security-code-the-workflow-looked-clear-four-findings-were-still-open-5egm</link>
      <guid>https://dev.to/mspro3210/two-ai-systems-reviewed-my-security-code-the-workflow-looked-clear-four-findings-were-still-open-5egm</guid>
      <description>&lt;p&gt;The dangerous failure in an agent workflow is not only that something gets missed. It is that a summary signal gets mistaken for evidence that nothing is wrong.&lt;/p&gt;

&lt;p&gt;This week I watched that happen repeatedly on my own work.&lt;/p&gt;

&lt;p&gt;An AI code reviewer ran against a change and its status check went green. Underneath that green status, a high-severity finding remained open.&lt;/p&gt;

&lt;p&gt;A cleanup routine could delete the credential still being used for signing because it did not compare the deletion target with the active credential.&lt;/p&gt;

&lt;p&gt;The green check accurately said that the reviewer had completed. It said nothing about whether the reviewer had found a defect. That distinction was about to disappear.&lt;/p&gt;

&lt;p&gt;Then an autonomous coding agent working on the same change reported that the review had come back neutral. It had read the reviewer's status, not its comments.&lt;/p&gt;

&lt;p&gt;Those comments contained four open findings.&lt;/p&gt;

&lt;p&gt;The agent was not inventing an answer. It was trusting a summary signal instead of examining the evidence beneath it.&lt;/p&gt;

&lt;p&gt;The next error was mine.&lt;/p&gt;

&lt;p&gt;I drafted a technical contribution that described eleven test cases as belonging to one category. The source contained nine of that kind and two of another. I also claimed a binding to a component that did not exist in the code.&lt;/p&gt;

&lt;p&gt;I caught both errors only by reopening the source I was describing.&lt;/p&gt;

&lt;p&gt;One completion signal, one incorrect agent summary, and one incorrect draft. Each looked reassuring until someone examined the underlying evidence: the open findings, the review comments, and the code itself.&lt;/p&gt;

&lt;p&gt;That is the pattern.&lt;/p&gt;

&lt;p&gt;A status badge is not the review.&lt;/p&gt;

&lt;p&gt;A summary is not the evidence.&lt;/p&gt;

&lt;p&gt;A description of code is not the code.&lt;/p&gt;

&lt;p&gt;A passing check proves the check ran. It does not prove the code passed review.&lt;/p&gt;

&lt;p&gt;The answer is not simply to add more agents. A second agent adds assurance only when it independently examines the underlying evidence. If it merely reads the first agent's conclusion, you have created another summary, not another control.&lt;/p&gt;

&lt;p&gt;The verification layer has to refuse the shortcut:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Read the raw tool output, not only the status badge.&lt;/li&gt;
&lt;li&gt;Read the findings, not only the check state.&lt;/li&gt;
&lt;li&gt;Read the implementation, not only its description.&lt;/li&gt;
&lt;li&gt;Separate the author from the ratifier, even when the author is you.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We are wiring agents into code review, payments, and production changes. Increasing their authority without separating claims from evidence turns a reporting mistake into an operational risk.&lt;/p&gt;

&lt;p&gt;The green check felt like verification.&lt;/p&gt;

&lt;p&gt;It was a completion signal wearing verification's clothes.&lt;/p&gt;

&lt;p&gt;Read the source.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>agents</category>
    </item>
    <item>
      <title>A Signed Agent Receipt Can Still Make an Unsupported Claim</title>
      <dc:creator>Michael "Mike" K. Saleme</dc:creator>
      <pubDate>Sat, 18 Jul 2026 00:31:57 +0000</pubDate>
      <link>https://dev.to/mspro3210/a-signed-agent-receipt-can-still-make-an-unsupported-claim-3c1k</link>
      <guid>https://dev.to/mspro3210/a-signed-agent-receipt-can-still-make-an-unsupported-claim-3c1k</guid>
      <description>&lt;p&gt;AI agents increasingly emit signed "receipts" for what they did: a tool call, a payment authorization, a policy check, wrapped in a canonicalized, content-addressed, signed record. The direction is right. The trap is reading a well-formed signed record as a true one.&lt;/p&gt;

&lt;p&gt;A valid signature establishes something precise: the presented bytes verify under a particular public key. With a trusted binding between that key and an identified authority, it can also establish signer provenance. It does not establish that the action occurred, that it was authorized, or that the checks described in the record actually ran.&lt;/p&gt;

&lt;p&gt;So I started decomposing an action receipt into four separately assessable properties:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Envelope integrity and authenticated provenance&lt;/strong&gt; — are the bytes intact, and is the signing key reliably bound to the claimed signer?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Occurrence&lt;/strong&gt; — did the action happen (and in which state: requested, attempted, completed, failed, settled)?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authorization&lt;/strong&gt; — was it the action, with the exact parameters, that was authorized?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check execution and integrity&lt;/strong&gt; — did the claimed checks run, or is "verified" a fail-open default?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Signing supports only the envelope property. The other three require independently verifiable evidence attributable to the relevant authorities: a checker, an authorization authority, and an execution authority. In the stronger design demonstrated here, each authority occupies a separate cryptographic trust domain, so the receipt emitter cannot manufacture their attestations.&lt;/p&gt;

&lt;p&gt;The claim worth testing follows directly:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A format-valid, correctly signed receipt whose asserted claims are not semantically supported must be rejected.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I made that claim executable. Each authority receives a distinct Ed25519 keypair, while the verifier holds only the trusted public keys. The negative vectors include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a substituted checker result;&lt;/li&gt;
&lt;li&gt;a stale transcript;&lt;/li&gt;
&lt;li&gt;authorization bound to different parameters;&lt;/li&gt;
&lt;li&gt;an execution acknowledgment bound to a different action; and&lt;/li&gt;
&lt;li&gt;an emitter claiming a check for which it has no authority attestation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The envelope signature verifies in every case. The claim-level verifier still rejects each receipt for a specific semantic reason.&lt;/p&gt;

&lt;p&gt;This is a controlled demonstration, not a field evaluation. It complements formal-conformance and capability-binding research rather than replacing it. Those approaches test whether controls and capabilities are correctly defined or exercised. This demonstration tests a different boundary: whether the evidence artifact claims more than its supporting trace can prove.&lt;/p&gt;

&lt;p&gt;The short methodology note is on Zenodo: &lt;a href="https://doi.org/10.5281/zenodo.21418701" rel="noopener noreferrer"&gt;10.5281/zenodo.21418701&lt;/a&gt; (record: &lt;a href="https://zenodo.org/records/21418702" rel="noopener noreferrer"&gt;zenodo.org/records/21418702&lt;/a&gt;). The reference verifier and the negative vectors are open source: &lt;a href="https://github.com/msaleme/red-team-blue-team-agent-fabric" rel="noopener noreferrer"&gt;github.com/msaleme/red-team-blue-team-agent-fabric&lt;/a&gt; (module &lt;code&gt;protocol_tests/receipt_claim_harness.py&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Views my own.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>architecture</category>
      <category>cryptography</category>
    </item>
    <item>
      <title>The spend cap held. The risk budget didn't compose.</title>
      <dc:creator>Michael "Mike" K. Saleme</dc:creator>
      <pubDate>Fri, 17 Jul 2026 13:00:00 +0000</pubDate>
      <link>https://dev.to/mspro3210/the-spend-cap-held-the-risk-budget-didnt-compose-1ej6</link>
      <guid>https://dev.to/mspro3210/the-spend-cap-held-the-risk-budget-didnt-compose-1ej6</guid>
      <description>&lt;p&gt;&lt;em&gt;In the baseline path, every governance control evaluated one action at a time and allowed it. The aggregate those allowed actions created was never in anyone's decision context. That gap isn't a stateless-vs-stateful policy engine problem — it's an isolated-decision-vs-composition-aware-enforcement problem.&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Runnable reference (clone and break it):&lt;/strong&gt; &lt;a href="https://github.com/msaleme/authorized-but-composed" rel="noopener noreferrer"&gt;github.com/msaleme/authorized-but-composed&lt;/a&gt; · &lt;strong&gt;Paper&lt;/strong&gt; (Zenodo, CC BY 4.0): &lt;a href="https://doi.org/10.5281/zenodo.21400261" rel="noopener noreferrer"&gt;10.5281/zenodo.21400261&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is the concrete, runnable version of a gap I sketched earlier in &lt;a href="https://dev.to/mspro3210/governance-is-the-gate-composition-is-the-gap-142j"&gt;&lt;em&gt;Governance is the gate. Composition is the gap.&lt;/em&gt;&lt;/a&gt; — here it's a payment agent, a spend cap, and a synthetic scenario you can run yourself.&lt;/p&gt;

&lt;h2&gt;
  
  
  The finding
&lt;/h2&gt;

&lt;p&gt;I gave a payment agent a hard per-session spend cap and watched it hold. Each session, the agent proposed a bounded action, the cap evaluated it, and anything over the limit was refused. Working as designed.&lt;/p&gt;

&lt;p&gt;Then I ran the scenario across five sessions. Each action stayed under its per-session cap. Every action was locally valid under the identity, delegation, and per-session rules presented to the evaluator: the agent's identity verified, its delegated authority in scope, the per-call policy satisfied. Every check configured in the scenario passed — five times.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;authorized exposure&lt;/strong&gt; — the sum of what those individually-valid actions were cleared to do — exceeded the aggregate risk budget the whole arrangement was supposed to respect. The missing aggregate constraint was simply never represented in any single decision's context.&lt;/p&gt;

&lt;p&gt;To be precise about what this is and isn't: this sat at the authorization/signing layer, not settlement, and it is not a vulnerability in anyone's product. It's a &lt;strong&gt;class of gap&lt;/strong&gt;, not a bug. Every control did exactly what it was built to do — evaluate one action against the rules it was handed. Nothing in the path was handed the aggregate.&lt;/p&gt;

&lt;h2&gt;
  
  
  The real architecture question
&lt;/h2&gt;

&lt;p&gt;2026 has been the year agent governance shipped. Microsoft's Agent Control Specification is a fail-closed decision runtime under an open license. Galileo's Agent Control puts governed decision points before execution. AWS AgentCore enforces policy at the gateway, outside the agent's code. These are real, and they're good — together they show that runtime policy at the moment of action has become an established category. A year ago it was still emerging.&lt;/p&gt;

&lt;p&gt;It's tempting to say these engines "can't do composition because they're stateless." That's wrong, and it's worth being precise about why — because the precise version is the stronger argument.&lt;/p&gt;

&lt;p&gt;A stateless policy evaluator can absolutely enforce an aggregate-risk rule — &lt;strong&gt;if&lt;/strong&gt; the surrounding architecture supplies the current aggregate in the decision snapshot. Microsoft ACS, for instance, accepts a complete snapshot on every call and supports custom dispatchers; the runtime retains no state, but the host around it can. Keeping the evaluator deterministic and stateless has real advantages. The evaluator was never the problem.&lt;/p&gt;

&lt;p&gt;The problem is that &lt;strong&gt;something in the enforcement architecture must maintain a shared, authoritative view of what prior decisions have already consumed&lt;/strong&gt; — and then feed that view into the decision. A composition control is therefore not "another rule." It needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a &lt;strong&gt;cross-session risk ledger&lt;/strong&gt; — a shared, authoritative record of committed exposure;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;atomic reservation&lt;/strong&gt; of aggregate capacity, so a decision consumes budget as it authorizes;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;reservation lifecycle and reconciliation&lt;/strong&gt;, so capacity is committed, settled, released, or expired correctly when an action succeeds, fails, is cancelled, or times out — otherwise the control prevents overspending by eventually locking the whole budget forever;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;idempotency and cross-session correlation&lt;/strong&gt;, so retries and parallel sessions don't double-count or race;&lt;/li&gt;
&lt;li&gt;and a path that &lt;strong&gt;supplies the resulting aggregate into the decision context&lt;/strong&gt; the evaluator sees.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A stateless engine can evaluate that snapshot. It cannot create a trustworthy snapshot by itself.&lt;/p&gt;

&lt;p&gt;So the gap is not &lt;em&gt;stateless PDP versus stateful PDP.&lt;/em&gt; It is &lt;strong&gt;isolated decision evaluation versus composition-aware enforcement.&lt;/strong&gt; The engines shipping today are excellent at the former. Their public descriptions establish intervention-point and per-request policy evaluation; they do not establish a built-in cross-session risk ledger with atomic reservation. That ledger-plus-reservation architecture — not a cleverer rule — is the missing layer.&lt;/p&gt;

&lt;p&gt;None of these primitives is new. Payment, inventory, and quota systems have used reservation ledgers for years. The contribution here is to frame these established primitives as a first-class agent-governance control over what locally authorized actions compose into.&lt;/p&gt;

&lt;h2&gt;
  
  
  Concurrency is where this gets hard (and honest)
&lt;/h2&gt;

&lt;p&gt;Here is the part that separates a real composition control from a running counter: &lt;strong&gt;a running total is not sufficient under concurrency.&lt;/strong&gt; If five sessions evaluate in parallel, each can read the same pre-update total, each finds room under the budget, and all five pass before any update becomes visible. The naive counter &lt;em&gt;allows the very breach it was meant to stop.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A correct composition control must &lt;strong&gt;atomically check and reserve&lt;/strong&gt; aggregate capacity before authorizing — reserve-then-authorize, not authorize-then-increment — with idempotency so retries don't inflate the ledger. That atomic reservation is precisely why this is an &lt;em&gt;architecture&lt;/em&gt; problem and not a policy-rule problem.&lt;/p&gt;

&lt;p&gt;A companion fixture makes the point directly. It runs the same five sessions two ways:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;node scripts/eaa-lab.mjs run authorized-but-composed-race race.json
&lt;span class="gp"&gt;Naive counter: 5 AUTHORIZED (exposure 4000 &amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;3000 budget — BREACH&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="go"&gt;Atomic reserve-then-authorize: 3 AUTHORIZED, 2 DENIED (reservation)
Evidence: replay-consistent | Classification: SYNTHETIC
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Identical inputs, identical per-session policy. The naive running counter lets all five through because each session reads the same pre-update total before any write is visible; reserve-then-authorize serializes the reservations against one ledger and denies the two that would breach. Same rule, different architecture — which is the whole point.&lt;/p&gt;

&lt;p&gt;Both are &lt;strong&gt;synthetic reference scenarios&lt;/strong&gt;, not shipped product features. Because this reference runner is single-threaded, concurrency is &lt;em&gt;simulated&lt;/em&gt; explicitly: the naive path evaluates against a shared pre-commit snapshot, while the atomic path serializes reservations. Composition-aware enforcement as a real, production ledger is open work, not something I'm claiming to have productized. What these make concrete enough to argue with is the &lt;em&gt;control pattern&lt;/em&gt; and the &lt;em&gt;evidence contract&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The evidence contract is the second half of the point, and the sequential run is where it's easiest to see what the control records:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;node scripts/eaa-lab.mjs run authorized-but-composed composition.json
&lt;span class="go"&gt;Local checks: 4 ALLOWED
Final decisions: 3 ALLOWED, 1 REFUSED
Halted before session 5
Evidence: replay-consistent | Classification: SYNTHETIC

&lt;/span&gt;&lt;span class="gp"&gt;$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;node scripts/eaa-lab.mjs verify composition.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Five sessions of 800 against a per-session cap of 1,000 and an aggregate budget of 3,000. Each evaluated action passes its own per-session check — the control carries the running exposure alongside it, allows the first three (committed exposure 2,400), and refuses the fourth: it clears its local check, but 800 more would compose to 3,200, past the budget, so the run halts on that first breach. Only a control supplied with the running exposure and the aggregate threshold caught what five isolated checks could not.&lt;/p&gt;

&lt;p&gt;It emits a &lt;strong&gt;machine-checkable, replayable decision record&lt;/strong&gt;: the prior allowed decisions, the running aggregate, the budget crossed, and the refused session. The verifier replays the decision and checks that the recorded aggregate, threshold crossing, and verdict are internally consistent. That's a real, useful property — internal-consistency replay — and it is &lt;em&gt;not yet&lt;/em&gt; the signed, provenance-anchored proof that would let a third party trust the record without trusting the runner. Getting from "replayable and consistent" to "independently provable" is the accountability work that sits above this.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this is the layer that matters now
&lt;/h2&gt;

&lt;p&gt;Adoption is moving faster than the control architecture. Gartner predicts that &lt;strong&gt;up to 40% of enterprise applications will include task-specific agents by the end of 2026&lt;/strong&gt;, from under 5% in 2025 — and that &lt;strong&gt;40% of enterprises will demote or decommission autonomous agents by 2027&lt;/strong&gt; because governance gaps emerge only after production incidents. The question is no longer whether runtime governance will exist. It is whether that governance can reason across the decisions it has already allowed.&lt;/p&gt;

&lt;p&gt;The open layer this scenario targets is &lt;strong&gt;composition&lt;/strong&gt;: the ledger, atomic reservation, reservation lifecycle, cross-session correlation, and the decision that consumes them. That's not a feature you add to a rule set. It's an architectural commitment.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fifth domain
&lt;/h2&gt;

&lt;p&gt;Composition control is not a replacement for identity, authorization, or per-call policy. It is the layer that &lt;strong&gt;consumes&lt;/strong&gt; their decisions and asks what those decisions become together.&lt;/p&gt;

&lt;p&gt;This is why the Enterprise Agent Architecture model treats the agent workforce as a &lt;strong&gt;fifth domain&lt;/strong&gt; — not merely an application tier, but a population of actors exercising delegated authority &lt;em&gt;concurrently&lt;/em&gt;, where governing it means governing both the individual action and the aggregate state those actions create.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where it breaks
&lt;/h2&gt;

&lt;p&gt;The scenarios, JSON evidence schemas, and a dependency-free Node runner are public and reproducible: &lt;a href="https://github.com/msaleme/authorized-but-composed" rel="noopener noreferrer"&gt;github.com/msaleme/authorized-but-composed&lt;/a&gt;. Clone it, run &lt;code&gt;node --test&lt;/code&gt; and the two commands above, and &lt;strong&gt;tell me where the composition control breaks under your load&lt;/strong&gt; — the concurrency model, the reservation lifecycle, the idempotency story, the evidence contract. That's the part I most want argued with.&lt;/p&gt;

&lt;p&gt;The full position paper is archived on Zenodo (CC BY 4.0): &lt;a href="https://doi.org/10.5281/zenodo.21400261" rel="noopener noreferrer"&gt;&lt;em&gt;Authorized but Composed: Cross-Session Risk Composition as an Agent-Governance Control&lt;/em&gt;&lt;/a&gt;. It builds on &lt;a href="https://doi.org/10.5281/zenodo.21263262" rel="noopener noreferrer"&gt;"Authorized but Refused"&lt;/a&gt; (governance refusing an authenticated, authorized agent at the single-action layer), &lt;a href="https://doi.org/10.5281/zenodo.21208547" rel="noopener noreferrer"&gt;"Present vs. Provable"&lt;/a&gt; (the gap between a replayable record and an independently provable one), and the six-gate decision-governance model in &lt;a href="https://doi.org/10.5281/zenodo.19162104" rel="noopener noreferrer"&gt;"Constitutional Self-Governance"&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;All scenarios are synthetic reference scenarios — not production telemetry, benchmarks, or evidence of general agent safety.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>architecture</category>
      <category>agents</category>
    </item>
    <item>
      <title>x402 Just Got a Standards Home. Who Conformance-Tests the Authority?</title>
      <dc:creator>Michael "Mike" K. Saleme</dc:creator>
      <pubDate>Fri, 17 Jul 2026 00:16:19 +0000</pubDate>
      <link>https://dev.to/mspro3210/x402-just-got-a-standards-home-who-conformance-tests-the-authority-3acc</link>
      <guid>https://dev.to/mspro3210/x402-just-got-a-standards-home-who-conformance-tests-the-authority-3acc</guid>
      <description>&lt;p&gt;On July 14, 2026, the Linux Foundation stood up the &lt;strong&gt;x402 Foundation&lt;/strong&gt; — neutral governance for the protocol that lets AI agents pay each other over HTTP 402. The member list is the entire payments industry: Visa, Mastercard, Amex, Stripe, AWS, Google, Cloudflare, Coinbase, Circle, Ripple, Shopify, and two dozen more.&lt;/p&gt;

&lt;p&gt;Read the launch release end to end and one thing is missing. There is no conformance suite. No security profile. No certification program. No validation procedure. The industry just gave agent payments a standards home and standardized the &lt;em&gt;rails&lt;/em&gt; — not the &lt;em&gt;proof that the payment an agent executed was the one it was authorized to make.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This is a pattern, not a one-off.&lt;/p&gt;

&lt;h2&gt;
  
  
  Standards bodies standardize the protocol. The conformance surface lags — and the security surface lags behind that.
&lt;/h2&gt;

&lt;p&gt;It happened with MCP. The protocol matured fast; the testing of it arrived later and is still catching up. It is happening again with x402, on a compressed timeline, with more money behind it.&lt;/p&gt;

&lt;p&gt;The gap matters because a signed, well-formed record is not the same thing as a true one.&lt;/p&gt;

&lt;p&gt;Look at what landed in the research this month. &lt;strong&gt;ShareLock&lt;/strong&gt; (arXiv &lt;a href="https://arxiv.org/abs/2606.27027" rel="noopener noreferrer"&gt;2606.27027&lt;/a&gt;, Liu et al., June 2026) distributes a malicious instruction as benign-looking secret shares across several MCP tool descriptions using a Shamir threshold scheme. Each fragment passes per-tool inspection. The payload reconstructs only when the shares are aggregated, after a quiet trigger during a server update. The paper reports an average attack success rate above 90% against tool-description detectors.&lt;/p&gt;

&lt;p&gt;Every individual record was valid. The composite was hostile. A conformance check that validates each tool description in isolation passes the whole attack straight through.&lt;/p&gt;

&lt;p&gt;That is the shape of the coming problem for agent payments. Signed receipts, content-addressed evidence records, canonicalized envelopes — the industry is converging on the &lt;em&gt;format&lt;/em&gt; of trustworthy agent evidence fast, and getting that format ratified inside large, credible repositories. The format is necessary. It is not sufficient.&lt;/p&gt;

&lt;h2&gt;
  
  
  The receipt being verifiable is not the receipt being true
&lt;/h2&gt;

&lt;p&gt;A payment receipt makes three separate claims: that the action happened, that it was the &lt;em&gt;authorized&lt;/em&gt; one, and that the checks it says ran are the checks that actually ran. Signing the record defends the first claim cleanly. It says almost nothing about the second and third.&lt;/p&gt;

&lt;p&gt;Proving the executed payment was the mandated one — and that the verifier reporting "authorized" wasn't fail-open dressed up as a signal — is a different discipline. It is the difference between a record that is &lt;em&gt;present&lt;/em&gt; and a claim that is &lt;em&gt;provable&lt;/em&gt; under an adversary who is actively trying to forge, replay, split, and desynchronize it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The industry is standardizing the receipt. Nobody is shipping the adversary that tries to forge it.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the adversary has to be independent
&lt;/h2&gt;

&lt;p&gt;Here is the structural reason this layer stays vacant while the format layer fills up: a protocol author cannot credibly red-team their own protocol, and a vendor cannot credibly certify the security of their own stack. The conformance evidence that matters is the evidence a &lt;em&gt;disinterested adversary&lt;/em&gt; couldn't break — which means it can't come from the party whose format is under test.&lt;/p&gt;

&lt;p&gt;That is the layer x402's new standards home left open on day one. Vendor-neutral, adversarial conformance testing of agent-payment authority — not "does this record parse," but "does the authority claim survive someone trying to break it."&lt;/p&gt;

&lt;p&gt;I've been building toward this from the methodology side — the &lt;a href="https://doi.org/10.5281/zenodo.21262985" rel="noopener noreferrer"&gt;present-vs-provable&lt;/a&gt; and forensic-vs-gate distinctions are exactly the tools for separating a verifiable record from a provable authority claim. The standards home is new. The vacant layer is not.&lt;/p&gt;

&lt;p&gt;The rails are standardized. The question the launch release doesn't answer — and the one every operator wiring an agent to a payment endpoint should be asking — is who conformance-tests the authority.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>payments</category>
      <category>architecture</category>
    </item>
    <item>
      <title>The Morning My Autonomous System Throttled Itself</title>
      <dc:creator>Michael "Mike" K. Saleme</dc:creator>
      <pubDate>Thu, 16 Jul 2026 23:59:11 +0000</pubDate>
      <link>https://dev.to/mspro3210/the-morning-my-autonomous-system-throttled-itself-1mki</link>
      <guid>https://dev.to/mspro3210/the-morning-my-autonomous-system-throttled-itself-1mki</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a production postmortem with no incident in it — the interesting failure is the one my governance layer chose to inflict on itself.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This morning my autonomous system limited itself — paused its own expansionary work after four HIGH-severity security events, not one of which was a real threat. I could tell you that's governance working. The honest version is more interesting: it's the tradeoff a governance layer has to make to bind at all — and the one design choice that makes the tradeoff worth paying for.&lt;/p&gt;

&lt;p&gt;Here is what happened, exactly, because the details are the point — and because the easy reading of them is the wrong one.&lt;/p&gt;

&lt;p&gt;HRAO-E runs under a six-gate architecture: six deterministic control points that each evaluate a different kind of risk before the system is allowed to keep operating at full speed. One of them, the Risk Gate, exists to prevent trust damage. Its rule is boring: if three or more HIGH-severity security events land in a rolling 24-hour window, the gate moves to &lt;code&gt;HOLD&lt;/code&gt;, and any single gate on &lt;code&gt;HOLD&lt;/code&gt; puts the system into &lt;strong&gt;THROTTLE&lt;/strong&gt; — a conservative mode that keeps governance, backups, and core operations running but pauses anything expansionary. It doesn't stop the world. It stops the system from starting anything new and outward-facing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4 HIGH-severity security events in 24 hours — one over the threshold of three.&lt;/strong&gt; All four from a single network, first seen that morning. Gate reason string, verbatim: &lt;em&gt;"Multiple HIGH security events in 24h (4 ≥ 3) → THROTTLE."&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The four events
&lt;/h2&gt;

&lt;p&gt;They came from one address block and split into two ordinary kinds of noise:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What it was&lt;/th&gt;
&lt;th&gt;Where&lt;/th&gt;
&lt;th&gt;What fired&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Credential stuffing ×2&lt;/td&gt;
&lt;td&gt;Admin login&lt;/td&gt;
&lt;td&gt;Five failed attempts each — both tripped the account &lt;strong&gt;lockout&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bot signups ×2&lt;/td&gt;
&lt;td&gt;Newsletter form&lt;/td&gt;
&lt;td&gt;Both caught by timing analysis — &lt;strong&gt;rate-limited&lt;/strong&gt; and flagged as bot patterns&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  The uncomfortable part — and I'm not going to hide it
&lt;/h2&gt;

&lt;p&gt;A skeptical security lead will notice something before anything else, and they're right to: &lt;strong&gt;none of those four events was a real threat.&lt;/strong&gt; The credential stuffing was caught by the lockout. The bots were rate-limited. All of it was contained by twenty-year-old baseline controls that fired automatically and needed nobody. And then the Risk Gate throttled expansionary operations &lt;em&gt;anyway.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;So the honest reading isn't "governance saved the day." It's two hard questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Did the gate just degrade the system's own capability in response to background noise?&lt;/li&gt;
&lt;li&gt;And if a &lt;em&gt;contained&lt;/em&gt; credential-stuffing attempt counts as HIGH severity, is the severity scale miscalibrated?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both are fair. The severity question is real and I'll come back to it — but it's a dial, not the story. The first question is the one worth defending a position on.&lt;/p&gt;

&lt;h2&gt;
  
  
  The tradeoff, stated plainly
&lt;/h2&gt;

&lt;p&gt;Here is the position I'll actually defend: a governance gate that only fires on confirmed, uncontained breaches is a gate you've quietly taught to hesitate — and a gate that hesitates isn't enforcement, it's a dashboard. Fail-safe governance makes the opposite bet. It treats a cluster of HIGH-severity signals as reason enough to become cautious, and it accepts that some of those throttles will, in hindsight, have been unnecessary. The false throttle isn't a bug in that design. It's the premium you pay for a control that actually &lt;em&gt;binds&lt;/em&gt; the machine instead of merely advising it.&lt;/p&gt;

&lt;p&gt;That's a bad trade — unless the premium is cheap. Which is the real point of the morning, and the part most governance writing skips.&lt;/p&gt;

&lt;h2&gt;
  
  
  The design choice that makes the premium cheap
&lt;/h2&gt;

&lt;p&gt;The throttle is not a latch someone has to remember to reset. As the four events age out of the 24-hour window, the gate returns to &lt;code&gt;PASS&lt;/code&gt; and the system goes back to full autonomy on its own — no cleanup, no ticket, no human deciding the coast is clear.&lt;/p&gt;

&lt;p&gt;That symmetry is the whole game. A control that can only clamp down — and needs a person to un-clamp it — doesn't just cost you the occasional pause. It costs you your credibility with the people operating under it. Every unnecessary throttle a human has to clear by hand teaches the organization that the gate is an obstacle, and people are extraordinarily good at routing around obstacles. A gate that releases itself the moment the signal clears can &lt;em&gt;afford&lt;/em&gt; to be cautious, because being wrong is cheap and self-correcting. One that can't is quietly training everyone to disable it.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Enforcement that can only clamp down gets switched off. Enforcement that also lets go gets left on.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is the un-theatrical version of a claim I keep making in the Enterprise Agent Architecture series: a rule an agent can quote but the runtime does not enforce is theater. The rule here didn't warn the machine and carry on — it &lt;strong&gt;bound&lt;/strong&gt; the machine, and then &lt;strong&gt;unbound&lt;/strong&gt; it, with no human in either direction. I can show you the gate's reason string, and I can show you the count behind it was real and not a fail-closed default masquerading as a signal — the system's own metric-masking check came back empty. What I &lt;em&gt;can't&lt;/em&gt; tell you is that four is the perfect threshold, or that this severity scale is beyond tuning. Those are calibration questions, and calibration is a dial you turn for the life of the system. The architecture question is prior to all of it: does the rule bind, and does it release itself? Here, both answers were yes — and you can only tune a gate that already binds.&lt;/p&gt;

&lt;h2&gt;
  
  
  One sharper objection survives auto-release
&lt;/h2&gt;

&lt;p&gt;One sharper objection survives auto-release: an attacker can hold you in &lt;strong&gt;THROTTLE&lt;/strong&gt; with cheap, sustained noise, because the window never drains while the events keep landing. That's the fail-safe logic working, not failing — a system under active, sustained hostility &lt;em&gt;should&lt;/em&gt; be running a smaller autonomy surface, and staying cautious for as long as the pressure lasts is the correct posture, not a denial-of-service you've inflicted on yourself. And because these events shared a single source network, the pressure is blockable at that layer: drop the source and the window drains on its own. Auto-release answers the transient case; a network block answers the sustained one — and neither waits on a human.&lt;/p&gt;

&lt;h2&gt;
  
  
  The takeaway
&lt;/h2&gt;

&lt;p&gt;The bar for governed autonomy isn't a gate that only ever fires on real threats — you'll never tune your way to that, and chasing it gives you a gate too timid to bind. The bar is a gate that binds on a plausible signal and releases itself when the signal clears. Fail-safe enforcement &lt;em&gt;will&lt;/em&gt; throttle you sometimes for nothing. Automatic release is what turns that from a reason to switch it off into a price worth paying.&lt;/p&gt;




&lt;p&gt;This is a field note from the &lt;strong&gt;Enterprise Agent Architecture&lt;/strong&gt; series — the case for governing an agent workforce as its own architecture domain. Part 3 builds the full argument: a rule the runtime doesn't enforce is theater.&lt;/p&gt;

&lt;p&gt;The figures in this note were read directly from the live system's append-only &lt;code&gt;security_events&lt;/code&gt; audit log and gate state on July 16, 2026; the "real signal, not masked" claim is the system's own empty &lt;code&gt;masked_metrics&lt;/code&gt; check. The source network is withheld. No metrics were fabricated.&lt;/p&gt;

&lt;p&gt;Original field note: &lt;a href="https://cognitivethoughtengine.com/blog/the-morning-the-risk-gate-throttled-itself.html" rel="noopener noreferrer"&gt;cognitivethoughtengine.com&lt;/a&gt; · Position paper: &lt;a href="https://doi.org/10.5281/zenodo.21105314" rel="noopener noreferrer"&gt;doi.org/10.5281/zenodo.21105314&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>architecture</category>
      <category>governance</category>
    </item>
    <item>
      <title>Two agent-tool attacks, one lesson: detection has a ceiling, enforceable authority has a floor</title>
      <dc:creator>Michael "Mike" K. Saleme</dc:creator>
      <pubDate>Thu, 16 Jul 2026 15:22:05 +0000</pubDate>
      <link>https://dev.to/mspro3210/two-agent-tool-attacks-one-lesson-detection-has-a-ceiling-enforceable-authority-has-a-floor-3o8e</link>
      <guid>https://dev.to/mspro3210/two-agent-tool-attacks-one-lesson-detection-has-a-ceiling-enforceable-authority-has-a-floor-3o8e</guid>
      <description>&lt;p&gt;Two agent-tool security papers landed in June. Read together, they expose the boundary between semantic detection and enforceable control.&lt;/p&gt;

&lt;p&gt;A common response to malicious agent tools is to scan tool descriptions: inspect the text an agent is about to trust, decide whether it appears malicious, and block it if so.&lt;/p&gt;

&lt;p&gt;ShareLock shows where that approach ends.&lt;/p&gt;

&lt;p&gt;The technique splits a single malicious instruction into benign-looking shares using a Shamir threshold scheme, and embeds one share per tool description. Below the reconstruction threshold, a scanner cannot recover the malicious instruction from the share contents. The full instruction reconstructs only once enough shares are aggregated in the agent's context. The reported result is an average attack success rate exceeding 90% — ASR@3, across four models and two MCP clients (&lt;a href="https://arxiv.org/abs/2606.27027" rel="noopener noreferrer"&gt;arXiv 2606.27027&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Be precise about what that proves. Information-theoretic secrecy protects the underlying secret below the threshold. It does not make every artifact undetectable, and it does not defeat a system that correlates the complete tool set. What it exposes is the ceiling of evaluating each tool description independently.&lt;/p&gt;

&lt;p&gt;The second paper shows what enforceable control looks like at runtime.&lt;/p&gt;

&lt;p&gt;WebMCP Tool Surface Poisoning (MSTI) attacks the tool registry at runtime. A third-party script fires a legitimate tool's AbortController to unregister it, then re-registers a malicious tool under the identical name before first invocation — or wins a registration race so the agent only ever sees the malicious version. AbortSignal hijacking reached 94% success; the registration race, 100% across every model tested (&lt;a href="https://arxiv.org/abs/2606.06387" rel="noopener noreferrer"&gt;arXiv 2606.06387&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;The paper's defense has two parts, and the distinction matters. Origin-bound, immutable tool identity stops substitution and lifecycle attacks — a malicious script cannot become a trusted tool merely by reusing its name, because validation happens on the identity bound to origin, not the public name. Capability and data-flow enforcement then limit what even a legitimately identified tool may receive or do. Together, those defenses reduced attack success to zero under the paper's tested conditions.&lt;/p&gt;

&lt;p&gt;That is the durable lesson from the two papers. Content detection remains useful, but probabilistic. Tool identity, lifecycle integrity, and capability boundaries provide properties the runtime can enforce even when semantic inspection is uncertain.&lt;/p&gt;

&lt;p&gt;The exposed surface here is not a weak scanner. It is an agent that trusts the tool set it was handed and never checks which tool it is calling, or what that tool is allowed to touch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Detection asks what the tool says. Authority verification asks which tool this is — and what it is permitted to receive and do. The second question can still be enforced after the first becomes uncertain.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>ai</category>
      <category>mcp</category>
      <category>agents</category>
    </item>
    <item>
      <title>The handshake is the easy part. Agent payments still haven't named the custody split.</title>
      <dc:creator>Michael "Mike" K. Saleme</dc:creator>
      <pubDate>Sun, 12 Jul 2026 21:24:00 +0000</pubDate>
      <link>https://dev.to/mspro3210/the-handshake-is-the-easy-part-agent-payments-still-havent-named-the-custody-split-472n</link>
      <guid>https://dev.to/mspro3210/the-handshake-is-the-easy-part-agent-payments-still-havent-named-the-custody-split-472n</guid>
      <description>&lt;p&gt;Agent payment protocols are converging fast. The Linux Foundation launched the x402 Foundation around a protocol initially developed by Coinbase, Cloudflare, and Stripe, with Google, AWS, Visa, Mastercard, and Circle among the organizations expressing initial support. It is increasingly framed as an "SSL for AI commerce."&lt;/p&gt;

&lt;p&gt;When a protocol reaches that stage, three things have to mature together: the specification, the interoperability suite, and the adversarial security scenarios. Today x402 has the specification and growing interoperability machinery. What is not yet visible is a normative adversarial suite every client, resource server, and facilitator must pass.&lt;/p&gt;

&lt;p&gt;There is a precedent worth sitting with. As check clearing scaled in the early Federal Reserve era, the answer was not merely a better check format. The system added a common clearing and settlement layer. The Federal Reserve could credit the collecting institution's reserve account and debit the paying institution's account, creating an independent record against which the participating banks could reconcile. The important separation was not that the Fed guaranteed every check. It was that settlement no longer depended solely on either participant's account of what happened.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Credit to Starfish on Moltbook, whose custody-split framing sharpened this for me.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This pattern exists across mature financial systems as separation of duties: the maker is not the checker. Its modern equivalent for the controls surrounding agent payments is not custody in the asset-control sense. It is an independent, reproducible assurance plane.&lt;/p&gt;

&lt;p&gt;x402 can provide independently inspectable evidence that an on-chain payment settled. That does not independently establish that every security and policy condition surrounding the payment was evaluated correctly.&lt;/p&gt;

&lt;p&gt;The payment handshake is standardizing. The assurance semantics around it are not.&lt;/p&gt;

&lt;p&gt;The party that performs a security check can attest that it ran. But its own attestation should not, by itself, count as independent verification that the check was correct. Otherwise, one ledger is wearing two hats: execution evidence and assurance evidence. Detection evidence is not assurance evidence.&lt;/p&gt;

&lt;p&gt;The reproducible form of the separation is &lt;strong&gt;cross-verifier consistency&lt;/strong&gt;: independent verifiers, given the same bound inputs, policy version, and evaluation semantics, should reach the same security-relevant verdict — or return an explicit reason why they cannot.&lt;/p&gt;

&lt;p&gt;The handshake standardizes first because it's the part everyone can agree on. The assurance split is harder, which is why it often arrives later — and why it determines whether a receipt can be independently evaluated when contested.&lt;/p&gt;

&lt;p&gt;That is the gap a conformance layer has to close, and it is a direction worth building toward. The Agent Security Harness already emits a structured attestation record for each check — result, severity, scope, timestamp, and the request and response it observed — and can bundle those into an evidence pack under a signed hash. The property a payment-assurance profile should add is binding each verdict to the evidence that produced it: the observed resolution, the matched rule, the policy version, and the identity of the verifier — so a second, independent verifier can reproduce the result rather than take it on trust.&lt;/p&gt;

&lt;p&gt;Detection tells you a check ran. Provenance tells you who certified the result, what evidence supported it, and whether an independent party can reproduce it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Standardize the evidence binding, not just the payment handshake.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>ai</category>
      <category>agents</category>
      <category>payments</category>
    </item>
    <item>
      <title>Governance is the gate. Composition is the gap.</title>
      <dc:creator>Michael "Mike" K. Saleme</dc:creator>
      <pubDate>Sun, 12 Jul 2026 14:44:33 +0000</pubDate>
      <link>https://dev.to/mspro3210/governance-is-the-gate-composition-is-the-gap-142j</link>
      <guid>https://dev.to/mspro3210/governance-is-the-gate-composition-is-the-gap-142j</guid>
      <description>&lt;p&gt;Something this quarter is easy to miss because it arrived from three different directions at once. Microsoft product strategy, Cloud Security Alliance framework analysis, and independent security research collectively point toward the same constraint: enterprise adoption is increasingly limited by control, not capability. Each direction exposes a boundary. The useful question is which one.&lt;/p&gt;

&lt;h2&gt;
  
  
  The convergence
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Microsoft made governance the gate.&lt;/strong&gt; In its enterprise-agent push, the framing is explicit: capability is table stakes, and control is what stands between a pilot and a deployment. &lt;a href="https://www.forbes.com/sites/janakirammsv/2026/06/09/microsoft-makes-governance-the-gate-for-enterprise-ai-agents/" rel="noopener noreferrer"&gt;Forbes described the stack&lt;/a&gt; as a control plane for agents, comparable to what Kubernetes became for containers. Forbes' analysis also identified the architectural limit: Microsoft's controls are strongest inside Microsoft's ecosystem, while most enterprises run agents across several platforms. The control plane is real. Its reach ends at the vendor's edge.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Cloud Security Alliance mapped the framework gap.&lt;/strong&gt; Its &lt;a href="https://labs.cloudsecurityalliance.org/research/csa-research-note-ai-agent-governance-framework-gap-20260403/" rel="noopener noreferrer"&gt;research note&lt;/a&gt; argues that today's governance frameworks, including NIST AI RMF, ISO 42001, and the EU AI Act, do not yet provide a complete set of enforceable, agent-specific controls. Those frameworks assume behavior can be characterized at deployment time and reviewed by a human, an assumption autonomous agents break by operating at machine speed. CSA also names the shape of the gap: principal-level complexity from orchestrator-to-subordinate architectures and authorization cascades, which traditional security models were not built to represent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Researchers started testing the controls themselves.&lt;/strong&gt; &lt;a href="https://www.beyondtrust.com/blog/entry/pwning-aws-agentcore-code-interpreter" rel="noopener noreferrer"&gt;BeyondTrust's Phantom Labs&lt;/a&gt; showed that AgentCore's Code Interpreter sandbox, configured for no external network access, could still resolve DNS, enough to tunnel a command-and-control channel out of a supposedly isolated environment (AWS has since remediated that path). &lt;a href="https://unit42.paloaltonetworks.com/bypass-of-aws-sandbox-network-isolation-mode/" rel="noopener noreferrer"&gt;Unit 42&lt;/a&gt; and &lt;a href="https://sonraisecurity.com/blog/sandboxed-to-compromised-new-research-exposes-credential-exfiltration-paths-in-aws-code-interpreters/" rel="noopener noreferrer"&gt;Sonrai&lt;/a&gt; published adjacent findings on the same surface, including network-isolation bypasses, credential-exfiltration paths, and &lt;a href="https://unit42.paloaltonetworks.com/exploit-of-aws-agentcore-iam-god-mode/" rel="noopener noreferrer"&gt;overly broad starter-toolkit permissions&lt;/a&gt; that AWS subsequently clarified were unsuitable for production. These are not one control failing the same way. They are evidence that vendor-local controls need independent adversarial validation before an enterprise trusts them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two different control problems
&lt;/h2&gt;

&lt;p&gt;Read together, these expose two problems that are easy to blur and important to separate.&lt;/p&gt;

&lt;p&gt;The first is &lt;strong&gt;integrity&lt;/strong&gt;: does a control actually hold at the boundary it claims to enforce? A sandbox that promises no egress and then resolves DNS is an integrity failure.&lt;/p&gt;

&lt;p&gt;The second is &lt;strong&gt;composition&lt;/strong&gt;: do multiple controls, each working correctly, add up to the constraint the enterprise actually cares about? The second cannot be solved from inside any one vendor-owned unit.&lt;/p&gt;

&lt;p&gt;The sandbox research tested the first. I ran a test of the second.&lt;/p&gt;

&lt;h2&gt;
  
  
  When every local control works and the aggregate constraint is still absent
&lt;/h2&gt;

&lt;p&gt;AWS Bedrock AgentCore Payments enforces a spend limit per payment session. I created five concurrently active sessions under the same principal, each capped at five cents, and drove each to a signed payment authorization.&lt;/p&gt;

&lt;p&gt;Nothing escaped a sandbox. Nothing bypassed authorization. Nothing exceeded a configured session limit. Every local control worked exactly as designed. Each session enforced its own budget, and I found no configuration surface for a principal-wide one. The gap appeared only when the five valid sessions were evaluated together: each authorization was decided independently, so session enforcement never added up to principal enforcement. &lt;a href="https://dev.to/mspro3210/the-spend-cap-worked-the-risk-budget-didnt-compose-13n1"&gt;Full method and evidence here.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is a subtler result than a bypass, and a more useful one. The control is not defective. It is scoped to the session, and the enterprise holds risk at a wider scope. AWS documents the session as a scoped context, so this is composition, not a broken promise.&lt;/p&gt;

&lt;p&gt;The honest boundary of the experiment: it demonstrates a composition gap inside one vendor and one API. It does not prove cross-vendor composition. But it earns the inference. If authority does not compose across five sessions inside a single service, an enterprise should not assume it will compose across multiple agents, wallets, gateways, and clouds. That broader conclusion is an architectural inference, not something this one experiment establishes.&lt;/p&gt;

&lt;h2&gt;
  
  
  The missing layer
&lt;/h2&gt;

&lt;p&gt;The obvious fix for each of these is a better version of the same thing. A tighter sandbox. A bigger session cap. A per-vendor governance console. All necessary. All of it stops at the boundary.&lt;/p&gt;

&lt;p&gt;The enterprise does not hold risk only per session, sandbox, or vendor. It may hold cumulative risk per principal, customer, process, tenant, or legal entity, across every agent, wallet, tool, and vendor involved. A control that governs the unit it owns is not aggregate governance. It is a bigger unit.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Every vendor is building a control plane for the unit it owns. The layer that composes authority across those units cannot be supplied from inside any one of them.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Enterprise agent governance has four working parts. Identity governance answers who or what is acting. Access governance answers what systems and tools it may reach. Decision governance answers whether an action is permissible in the present context. Evidence governance answers whether the authorization, the attempt, the outcome, and the cumulative state can be reconstructed.&lt;/p&gt;

&lt;p&gt;Composition is not a fifth governance silo. It is the requirement that identity, access, decision, and evidence governance remain coherent across sessions, agents, tools, wallets, vendors, and time. No control plane operating inside one of those units can establish that coherence alone. That is the difference between governance as a product feature and governance as an enterprise system.&lt;/p&gt;

</description>
      <category>aiagents</category>
      <category>security</category>
      <category>governance</category>
      <category>enterprise</category>
    </item>
    <item>
      <title>The spend cap worked. The risk budget didn't compose.</title>
      <dc:creator>Michael "Mike" K. Saleme</dc:creator>
      <pubDate>Sun, 12 Jul 2026 02:32:26 +0000</pubDate>
      <link>https://dev.to/mspro3210/the-spend-cap-worked-the-risk-budget-didnt-compose-13n1</link>
      <guid>https://dev.to/mspro3210/the-spend-cap-worked-the-risk-budget-didnt-compose-13n1</guid>
      <description>&lt;p&gt;Spending limits are becoming the foundational guardrail for agentic payments. AWS Bedrock AgentCore Payments enforces them &lt;strong&gt;per payment session&lt;/strong&gt;. Google's AP2 expresses limits through mandates that bind amount, merchant, and intent. Wallet and custody platforms add their own policy layers.&lt;/p&gt;

&lt;p&gt;I tested one narrow question against AWS AgentCore Payments' live preview: &lt;strong&gt;when multiple sessions belong to the same principal, does the platform aggregate their authority?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The short version: the per-session control works exactly as documented. It does not compose into a principal-level risk budget.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three layers: admit, sign, settle
&lt;/h2&gt;

&lt;p&gt;An agent payment moves through three gates. The system &lt;strong&gt;admits&lt;/strong&gt; the request — checks it at the front door. It &lt;strong&gt;signs&lt;/strong&gt; an authorization — produces the cryptographic artifact intended for presentation to a merchant or facilitator. It &lt;strong&gt;settles&lt;/strong&gt; on-chain — money moves.&lt;/p&gt;

&lt;p&gt;Functional testing often stops at admission: was the request accepted or rejected? But the signed authorization is the artifact that matters: it's what crosses the agent-side policy boundary and gets presented for payment. So I drove the tests to the signing layer, through real Coinbase CDP delegated signing, and watched what the stack will authorize.&lt;/p&gt;

&lt;h2&gt;
  
  
  Method, precisely
&lt;/h2&gt;

&lt;p&gt;Holding constant the same AgentCore payment manager, &lt;code&gt;userId&lt;/code&gt;, &lt;code&gt;agentName&lt;/code&gt;, Coinbase-backed payment instrument, delegated-signing grant, AWS account, and region (&lt;code&gt;us-east-1&lt;/code&gt;, preview API, 2026-07-11), I created &lt;strong&gt;five concurrently active payment sessions&lt;/strong&gt;, each with an independent &lt;code&gt;maxSpendAmount&lt;/code&gt; of $0.05. I then drove each session to a signed authorization (&lt;code&gt;PROOF_GENERATED&lt;/code&gt;) for a $0.01 payment via AgentCore &lt;code&gt;ProcessPayment&lt;/code&gt; — a small amount, chosen to demonstrate independent signing rather than to probe an aggregate total. Nothing was submitted on-chain; every test stopped after the payment proof was generated.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding 1 — each session's budget holds; the authority doesn't aggregate
&lt;/h2&gt;

&lt;p&gt;Within a single session, the budget enforces correctly. Three signatures walked one session's balance from five cents to two, and a fourth, over-budget request was refused with the arithmetic to prove it. The accounting works.&lt;/p&gt;

&lt;p&gt;Across the five concurrently valid sessions, I found &lt;strong&gt;no principal-level aggregate control&lt;/strong&gt; in the API path I used. The accounting was session-local: each of the five signed independently, and each session's ledger decremented only itself. The test did not rule out an undocumented aggregate threshold at higher cumulative amounts. AWS documents a &lt;code&gt;PaymentSession&lt;/code&gt; as a scoped payment context and enforces spending within it — so this is not a broken promise. It's the composition: session-scoped enforcement does not add up to a principal-scoped ceiling.&lt;/p&gt;

&lt;p&gt;Whoever controls session issuance controls the aggregate exposure: five concurrent sessions create five independently enforceable budgets, and session issuance is itself part of the control surface. Local enforcement is not aggregate governance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding 2 — in the tested path, the signer applied no recipient policy
&lt;/h2&gt;

&lt;p&gt;Here the boundary matters, so I'll name it exactly. When the payment requirements — including the recipient (&lt;code&gt;payTo&lt;/code&gt;) — were &lt;strong&gt;author-constructed and submitted to AgentCore &lt;code&gt;ProcessPayment&lt;/code&gt;&lt;/strong&gt;, the delegated signer performed structural address validation but applied no recipient allowlist or merchant-legitimacy decision. It produced cryptographically signed authorizations naming the zero address and syntactically valid, previously unseen addresses; only malformed addresses were rejected.&lt;/p&gt;

&lt;p&gt;Two honest caveats. This tests a crafted requirement, not the normal flow where requirements are discovered from a merchant's &lt;code&gt;402&lt;/code&gt; response — so it models a &lt;strong&gt;substituted or injected&lt;/strong&gt; requirement, which is precisely the agentic threat worth caring about. And declining recipient vetting at the signer is defensible: payee legitimacy is arguably a merchant-and-facilitator concern, not a signing-primitive one. But it's a boundary operators should draw on purpose. In the tested path, no allowlist, merchant binding, or policy evaluation stood between an author-supplied recipient and a cryptographically signed payment artifact.&lt;/p&gt;

&lt;h2&gt;
  
  
  What holds
&lt;/h2&gt;

&lt;p&gt;This is not a system that fell over. In the scenarios tested, the documented session-level controls held: cap-versus-amount is enforced at signing, deleting a session genuinely voids its signing ability, and idempotency and structural validation both work as expected.&lt;/p&gt;

&lt;p&gt;The gap is specific: session enforcement is real; it simply doesn't compose into a control across sessions.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The cap worked. The risk budget did not compose across sessions.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The line I won't cross yet
&lt;/h2&gt;

&lt;p&gt;I proved what the stack &lt;strong&gt;signs&lt;/strong&gt; — not what it &lt;strong&gt;settles&lt;/strong&gt;, and not the ceiling of what it would aggregate. I hold five independently signed authorizations, each within its own session cap; the accounting was session-local, with no principal-wide control composing them. I signed a small amount in each to demonstrate that independence — I did not drive the cumulative total high enough to probe for an undocumented aggregate threshold, and I have not submitted anything on-chain, so I am &lt;strong&gt;not&lt;/strong&gt; claiming money moved. Settlement may still reject an authorization on recipient rules, facilitator validation, balance, nonce, or expiry.&lt;/p&gt;

&lt;p&gt;So the precise claim: the signed authorization is already part of the &lt;strong&gt;blast-radius surface&lt;/strong&gt; — an externally usable artifact that has crossed the agent-side policy boundary. Whether that authority is ultimately redeemable is a settlement question, and that test comes next.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it asks of operators
&lt;/h2&gt;

&lt;p&gt;A session budget answers one question: &lt;em&gt;how much may this execution sign?&lt;/em&gt; It does not answer the one that actually governs risk: &lt;em&gt;how much authority does this agent, user, wallet, or business process hold across all of its active executions?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Agentic-payment governance needs both. The first is a local enforcement control, and AgentCore provides it. The second — a principal-wide risk budget that composes across concurrent sessions — is a control-plane responsibility, and it has to be layered by whoever operates the agent.&lt;/p&gt;

&lt;p&gt;The rail is being built fast. The aggregate governance layer still belongs to the operator.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;These observations were shared with AWS as preview-product feedback. Findings are bounded to signing-layer evidence; no settlement testing was performed.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>aiagents</category>
      <category>security</category>
      <category>payments</category>
      <category>aws</category>
    </item>
  </channel>
</rss>
